/** * It processing incoming data by the radio or serial connection. This function * has to be continously called to keep the node running. This function also * adds a delay which is specified as 100ms per unit. Therefore 1000 = 100 sec * @param countdown delay added to this function */ void awaitData(int countdown) { uint8_t rx_len; //Clear buffer data_temp[0] = '\0'; RFM69_setMode(RFM69_MODE_RX); while(countdown > 0) { // Check rx buffer if(RFM69_checkRx() == 1) { RFM69_recv(data_temp, &rx_len); data_temp[rx_len - 1] = '\0'; #ifdef DEBUG //rssi = RFM69_lastRssi(); printf("rx: %s\r\n",data_temp); //printf("RSSI: %d\r\n, rssi"); #endif processData(rx_len); } #ifdef SERIAL_IN // Check tx buffer checkTxBuffer(); #endif countdown--; mrtDelay(100); } }
/** * It processing incoming data by the radio or serial connection. This function * has to be continously called to keep the node running. This function also * adds a delay which is specified as 100ms per unit. Therefore 1000 = 100 sec * @param countdown delay added to this function */ void awaitData(int countdown) { uint8_t rx_len, flags1, old_flags1 = 0x90; //Clear buffer data_temp[0] = '\0'; RFM69_setMode(RFM69_MODE_RX); rx_restarts = 0; while(countdown > 0) { flags1 = spiRead(RFM69_REG_27_IRQ_FLAGS1); #ifdef DEBUG if (flags1 != old_flags1) { printf("f1: %02x\r\n", flags1); old_flags1 = flags1; } #endif if (flags1 & RF_IRQFLAGS1_TIMEOUT) { // restart the Rx process spiWrite(RFM69_REG_3D_PACKET_CONFIG2, spiRead(RFM69_REG_3D_PACKET_CONFIG2) | RF_PACKET2_RXRESTART); rx_restarts++; // reset the RSSI threshold floor_rssi = RFM69_sampleRssi(); #ifdef DEBUG // and print threshold printf("Restart Rx %d\r\n", RFM69_lastRssiThreshold()); #endif } // Check rx buffer if(RFM69_checkRx() == 1) { RFM69_recv(data_temp, &rx_len); data_temp[rx_len - 1] = '\0'; processData(rx_len); } countdown--; mrtDelay(100); } }