myRadio.c 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include "myRadio.h"
  4. #include "spi.h"
  5. //------------
  6. #include "RF.h"
  7. static rfRxCallBack rxCb;
  8. static uint8_t rfMode = 0;
  9. static uint8_t rfPower = RF8dBm;
  10. rfRxPacket_ts rfRxPacket;
  11. void myRadio_delay(uint32_t time_ms)
  12. {
  13. delay1ms(time_ms);
  14. }
  15. void myRadio_init(int agr0, void *agr1_ptr)
  16. {
  17. myRadio_delay(1000);
  18. spi_init();
  19. RF_Init(rfPower);
  20. myRadio_delay(100);
  21. if ((rfRxCallBack )agr1_ptr)
  22. {
  23. rxCb = (rfRxCallBack )agr1_ptr;
  24. }
  25. }
  26. void myRadio_abort(void)
  27. {
  28. rfMode = 0;
  29. RF_Reset();
  30. }
  31. void myRadio_transmit(rfTxPacket_ts *packet)
  32. {
  33. if (rfMode != 1)
  34. {
  35. RF_TxMode();
  36. }
  37. rfMode = 1;
  38. printf("send data:%s\n", packet->payload);
  39. RF_TxData(packet->payload, PAYLOAD_WIDTH);
  40. }
  41. void myRadio_receiver(void)
  42. {
  43. rfMode = 2;
  44. RF_RxMode();
  45. printf("enter to recv\n");
  46. }
  47. void myRadio_receiverSync(rfRxPacket_ts *packet)
  48. {
  49. }
  50. uint32_t myRadio_getFrequency(void)
  51. {
  52. }
  53. void myRadio_setFrequency(uint32_t freq)
  54. {
  55. }
  56. int8_t myRadio_getTxPower(void)
  57. {
  58. return rfPower;
  59. }
  60. void myRadio_setTxPower(int8_t power)
  61. {
  62. rfPower = power;
  63. }
  64. void myRadio_setCtrl(controlMode_te mode, uint32_t value)
  65. {
  66. switch (mode)
  67. {
  68. case RADIO_EXT_CONTROL_TX_UNMODULATED:
  69. {
  70. rfMode = 3;
  71. RF_Carrier(0, rfPower);
  72. }
  73. break;
  74. case RADIO_EXT_CONTROL_RX_SENSITIVITY:
  75. {
  76. rfMode = 4;
  77. }
  78. break;
  79. default:
  80. break;
  81. }
  82. }
  83. void myRadio_process(void)
  84. {
  85. if (rfMode >= 3)
  86. {
  87. return;
  88. }
  89. if (!rfMode)
  90. {
  91. return;
  92. }
  93. uint8_t status = RF_GetStatus();
  94. if ((!status) || (status == 0xff))
  95. {
  96. return;
  97. }
  98. printf("status:%x rfMode:%x\n", status, rfMode);
  99. if (status & TX_DS_FLAG)
  100. {
  101. printf("TX_DS_FLAG\n");
  102. RF_ClearFIFO();
  103. RF_ClearStatus();
  104. rfMode = 0;
  105. rxCb(TX_STA_SECCESS, rfRxPacket);
  106. }
  107. else if (status & MAX_RT_FLAG)
  108. {
  109. printf("MAX_RT_FLAG\n");
  110. rfMode = 0;
  111. RF_ClearFIFO();
  112. RF_ClearStatus();
  113. rxCb(TX_STA_SECCESS, rfRxPacket);
  114. }
  115. else if (status & RX_DR_FLAG)
  116. {
  117. printf("RX_DR_FLAG\n");
  118. uint8_t ucPayload[PAYLOAD_WIDTH];
  119. memset(rfRxPacket.payload, 0, sizeof(rfRxPacket.payload));
  120. RF_ReadBuf(R_RX_PAYLOAD, rfRxPacket.payload, PAYLOAD_WIDTH); // 将接收到的数据读出到ucPayload
  121. RF_ClearFIFO();
  122. RF_ClearStatus();
  123. rfMode = 0;
  124. if (rxCb)
  125. {
  126. rxCb(RX_STA_SECCESS, rfRxPacket);
  127. }
  128. }
  129. else if (status & RX_TX_FLAG)
  130. {
  131. printf("RX_TX_FLAG\n");
  132. rfMode = 0;
  133. RF_ClearFIFO();
  134. RF_ClearStatus();
  135. }
  136. }