Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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;
    }
}