myRadio.c 2.4 KB

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