/** * receiveData * * Read data packet from RX FIFO * * 'packet' Container for the packet received * * Return: * Amount of bytes received */ byte CC1101::receiveData(CCPACKET * packet) { byte val; byte rxBytes = readStatusReg(CC1101_RXBYTES); // Any byte waiting to be read and no overflow? if (rxBytes & 0x7F && !(rxBytes & 0x80)) { // Read data length packet->length = readConfigReg(CC1101_RXFIFO); // If packet is too long if (packet->length > CC1101_DATA_LEN) packet->length = 0; // Discard packet else { // Read data packet readBurstReg(packet->data, CC1101_RXFIFO, packet->length); // Read RSSI packet->rssi = readConfigReg(CC1101_RXFIFO); // Read LQI and CRC_OK val = readConfigReg(CC1101_RXFIFO); packet->lqi = val & 0x7F; packet->crc_ok = bitRead(val, 7); } } else packet->length = 0; setIdleState(); // Enter IDLE state flushRxFifo(); // Flush Rx FIFO //cmdStrobe(CC1101_SCAL); // Back to RX state setRxState(); return packet->length; }
/** * receiveData * * Read data packet from RX FIFO * * Return: * Amount fo bytes received * 'packet' Container for the packet received */ byte CC1101::receiveData(CCPACKET * packet) { byte val; // Any byte waiting to be read? if (readStatusReg(CC1101_RXBYTES) & 0x7F) { // Read data length packet->length = readConfigReg(CC1101_RXFIFO); // If packewt is too long if (packet->length > CC1101_DATA_LEN) packet->length = 0; // Discard packet else { // Read data packet readBurstReg(packet->data, CC1101_RXFIFO, packet->length); // Read RSSI packet->rssi = readConfigReg(CC1101_RXFIFO); // Read LQI and CRC_OK val = readConfigReg(CC1101_RXFIFO); packet->lqi = val & 0x7F; packet->crc_ok = bitRead(val, 7); } } else packet->length = 0; // Flush RX FIFO. Don't uncomment //cmdStrobe(CC1101_SFRX); // Enter back into RX state setRxState(); return packet->length; }