#include #include #include "myRadio.h" #include "board.h" #include "spi.h" //------------ #include "RF.h" static rfRxCallBack rxCb; static uint8_t rfMode; static uint8_t rfPower = RF8dBm; rfRxPacket_ts rfRxPacket; void myRadio_delay(uint32_t time_ms) { delay1ms(time_ms); } void myRadio_init(int agr0, void *agr1_ptr) { spi_init(); RF_Init(rfPower); if ((rfRxCallBack )agr1_ptr) { rxCb = (rfRxCallBack )agr1_ptr; } } void myRadio_abort(void) { rfMode = 0; RF_Reset(); } void myRadio_transmit(rfTxPacket_ts *packet) { if (rfMode != 1) { RF_TxMode(); } rfMode = 1; RF_TxData(packet->payload, PAYLOAD_WIDTH); } void myRadio_receiver(void) { rfMode = 2; RF_RxMode(); } void myRadio_receiverSync(rfRxPacket_ts *packet) { } uint32_t myRadio_getFrequency(void) { } void myRadio_setFrequency(uint32_t freq) { } int8_t myRadio_getTxPower(void) { return rfPower; } void myRadio_setTxPower(int8_t power) { rfPower = power; } void myRadio_setCtrl(controlMode_te mode, uint32_t value) { switch (mode) { case RADIO_EXT_CONTROL_TX_UNMODULATED: { rfMode = 3; RF_Carrier(0, rfPower); } break; case RADIO_EXT_CONTROL_RX_SENSITIVITY: { rfMode = 4; } break; default: break; } } void myRadio_process(void) { if (rfMode >= 3) { return; } uint8_t status = RF_GetStatus(); if ((!status) || (status == 0xff)) { return; } if (!rfMode) { return; } if (status & TX_DS_FLAG) { RF_ClearFIFO(); RF_ClearStatus(); rfMode = 0; rxCb(TX_STA_SECCESS, rfRxPacket); } else if (status & MAX_RT_FLAG) { RF_ClearFIFO(); RF_ClearStatus(); } else if (status & RX_DR_FLAG) { uint8_t ucPayload[PAYLOAD_WIDTH]; memset(rfRxPacket.payload, 0, sizeof(rfRxPacket.payload)); RF_ReadBuf(R_RX_PAYLOAD, rfRxPacket.payload, PAYLOAD_WIDTH); // 将接收到的数据读出到ucPayload RF_ClearFIFO(); RF_ClearStatus(); rfMode = 0; if (rxCb) { rxCb(RX_STA_SECCESS, rfRxPacket); } } else if (status & RX_TX_FLAG) { RF_ClearFIFO(); RF_ClearStatus(); } }