Add periodic noise floor calibration and AGC reset
This commit is contained in:
@@ -12,9 +12,14 @@
|
|||||||
#include <SPIFFS.h>
|
#include <SPIFFS.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define NOISE_FLOOR_CALIB_INTERVAL_MS 2000
|
||||||
|
#define AGC_RESET_INTERVAL_MS 30000
|
||||||
|
|
||||||
StdRNG rng;
|
StdRNG rng;
|
||||||
mesh::LocalIdentity identity;
|
mesh::LocalIdentity identity;
|
||||||
KissModem* modem;
|
KissModem* modem;
|
||||||
|
static uint32_t next_noise_floor_calib_ms = 0;
|
||||||
|
static uint32_t next_agc_reset_ms = 0;
|
||||||
|
|
||||||
void halt() {
|
void halt() {
|
||||||
while (1) ;
|
while (1) ;
|
||||||
@@ -107,16 +112,24 @@ void setup() {
|
|||||||
void loop() {
|
void loop() {
|
||||||
modem->loop();
|
modem->loop();
|
||||||
|
|
||||||
|
if ((uint32_t)(millis() - next_noise_floor_calib_ms) >= NOISE_FLOOR_CALIB_INTERVAL_MS) {
|
||||||
|
radio_driver.triggerNoiseFloorCalibrate(0);
|
||||||
|
next_noise_floor_calib_ms = millis();
|
||||||
|
}
|
||||||
|
radio_driver.loop();
|
||||||
|
|
||||||
if (!modem->isTxBusy()) {
|
if (!modem->isTxBusy()) {
|
||||||
|
if ((uint32_t)(millis() - next_agc_reset_ms) >= AGC_RESET_INTERVAL_MS) {
|
||||||
|
radio_driver.resetAGC();
|
||||||
|
next_agc_reset_ms = millis();
|
||||||
|
}
|
||||||
|
|
||||||
uint8_t rx_buf[256];
|
uint8_t rx_buf[256];
|
||||||
int rx_len = radio_driver.recvRaw(rx_buf, sizeof(rx_buf));
|
int rx_len = radio_driver.recvRaw(rx_buf, sizeof(rx_buf));
|
||||||
|
|
||||||
if (rx_len > 0) {
|
if (rx_len > 0) {
|
||||||
int8_t snr = (int8_t)(radio_driver.getLastSNR() * 4);
|
int8_t snr = (int8_t)(radio_driver.getLastSNR() * 4);
|
||||||
int8_t rssi = (int8_t)radio_driver.getLastRSSI();
|
int8_t rssi = (int8_t)radio_driver.getLastRSSI();
|
||||||
modem->onPacketReceived(snr, rssi, rx_buf, rx_len);
|
modem->onPacketReceived(snr, rssi, rx_buf, rx_len);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
radio_driver.loop();
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user