uint8_t RFM70::receivePayload(uint8_t *payload) { uint8_t len = 0; // check RX_FIFO uint8_t status; uint8_t fifo_sta; status = readRegVal(RFM70_REG_STATUS); // printf("--->status:0x%02x\n", status); // RX_DR if ((status & RFM70_IRQ_STATUS_RX_DR) == 0x40 ) { do { // Payload width len = readRegVal(RFM70_CMD_RX_PL_WID); if ( len<=RFM70_MAX_PACKET_LEN ) { readRegBuf(RFM70_CMD_RD_RX_PLOAD, payload, len); } else { writeRegVal(RFM70_CMD_FLUSH_RX, 0); } fifo_sta = readRegVal(RFM70_REG_FIFO_STATUS); } while ((fifo_sta&RFM70_FIFO_STATUS_RX_EMPTY)==0); setMode(MODE_PRX); } writeRegVal(RFM70_CMD_WRITE_REG | RFM70_REG_STATUS, status); return len; }
uint8_t RFM70::receivePayload(uint8_t *payload) { uint8_t len; // check RX_FIFO uint8_t status; status = readRegVal(RFM70_REG_STATUS); // RX_DR if (status & RFM70_IRQ_STATUS_RX_DR) { uint8_t fifo_sta; // Payload width len = readRegVal(RFM70_CMD_RX_PL_WID); readRegBuf(RFM70_CMD_RD_RX_PLOAD, payload, len); fifo_sta = readRegVal(RFM70_REG_FIFO_STATUS); if (fifo_sta & RFM70_FIFO_STATUS_RX_EMPTY) { // clear status bit rx_dr status |= 0x40 & 0xCF; writeRegVal(RFM70_CMD_WRITE_REG | RFM70_REG_STATUS, status); } return len; } else { return 0; } }