mirror of
https://github.com/markqvist/RNode_Firmware.git
synced 2025-02-14 13:51:34 -05:00
Added noise floor monitoring and reporting to host
This commit is contained in:
parent
c5ed792280
commit
06b4fba603
3
Config.h
3
Config.h
@ -95,6 +95,7 @@
|
|||||||
#define CSMA_CW_PER_BAND_WINDOWS 15
|
#define CSMA_CW_PER_BAND_WINDOWS 15
|
||||||
#define CSMA_BAND_1_MAX_AIRTIME 7
|
#define CSMA_BAND_1_MAX_AIRTIME 7
|
||||||
#define CSMA_BAND_N_MIN_AIRTIME 85
|
#define CSMA_BAND_N_MIN_AIRTIME 85
|
||||||
|
#define CSMA_INFR_THRESHOLD_DB 12
|
||||||
int csma_slot_ms = CSMA_SLOT_MIN_MS;
|
int csma_slot_ms = CSMA_SLOT_MIN_MS;
|
||||||
unsigned long difs_ms = CSMA_SIFS_MS + 2*csma_slot_ms;
|
unsigned long difs_ms = CSMA_SIFS_MS + 2*csma_slot_ms;
|
||||||
unsigned long difs_wait_start = -1;
|
unsigned long difs_wait_start = -1;
|
||||||
@ -131,6 +132,8 @@
|
|||||||
uint8_t model = 0x00;
|
uint8_t model = 0x00;
|
||||||
uint8_t hwrev = 0x00;
|
uint8_t hwrev = 0x00;
|
||||||
|
|
||||||
|
#define NOISE_FLOOR_SAMPLES 16
|
||||||
|
int noise_floor = -292;
|
||||||
int current_rssi = -292;
|
int current_rssi = -292;
|
||||||
int last_rssi = -292;
|
int last_rssi = -292;
|
||||||
uint8_t last_rssi_raw = 0x00;
|
uint8_t last_rssi_raw = 0x00;
|
||||||
|
@ -1191,6 +1191,30 @@ void serial_callback(uint8_t sbyte) {
|
|||||||
|
|
||||||
bool medium_free() { update_modem_status(); return !dcd; }
|
bool medium_free() { update_modem_status(); return !dcd; }
|
||||||
|
|
||||||
|
bool noise_floor_sampled = false;
|
||||||
|
int noise_floor_sample = 0;
|
||||||
|
int noise_floor_buffer[NOISE_FLOOR_SAMPLES] = {0};
|
||||||
|
void update_noise_floor() {
|
||||||
|
#if MCU_VARIANT == MCU_ESP32 || MCU_VARIANT == MCU_NRF52
|
||||||
|
if (!dcd) {
|
||||||
|
if (!noise_floor_sampled || current_rssi < noise_floor + CSMA_INFR_THRESHOLD_DB) {
|
||||||
|
noise_floor_buffer[noise_floor_sample] = current_rssi;
|
||||||
|
noise_floor_sample = noise_floor_sample+1;
|
||||||
|
if (noise_floor_sample >= NOISE_FLOOR_SAMPLES) {
|
||||||
|
noise_floor_sample %= NOISE_FLOOR_SAMPLES;
|
||||||
|
noise_floor_sampled = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (noise_floor_sampled) {
|
||||||
|
noise_floor = 0;
|
||||||
|
for (int ni = 0; ni < NOISE_FLOOR_SAMPLES; ni++) { noise_floor += noise_floor_buffer[ni]; }
|
||||||
|
noise_floor /= NOISE_FLOOR_SAMPLES;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
void update_modem_status() {
|
void update_modem_status() {
|
||||||
#if MCU_VARIANT == MCU_ESP32
|
#if MCU_VARIANT == MCU_ESP32
|
||||||
portENTER_CRITICAL(&update_lock);
|
portENTER_CRITICAL(&update_lock);
|
||||||
@ -1220,6 +1244,7 @@ void update_modem_status() {
|
|||||||
void check_modem_status() {
|
void check_modem_status() {
|
||||||
if (millis()-last_status_update >= status_interval_ms) {
|
if (millis()-last_status_update >= status_interval_ms) {
|
||||||
update_modem_status();
|
update_modem_status();
|
||||||
|
update_noise_floor();
|
||||||
|
|
||||||
#if MCU_VARIANT == MCU_ESP32 || MCU_VARIANT == MCU_NRF52
|
#if MCU_VARIANT == MCU_ESP32 || MCU_VARIANT == MCU_NRF52
|
||||||
util_samples[dcd_sample] = dcd;
|
util_samples[dcd_sample] = dcd;
|
||||||
|
@ -752,7 +752,7 @@ void kiss_indicate_stat_tx() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void kiss_indicate_stat_rssi() {
|
void kiss_indicate_stat_rssi() {
|
||||||
uint8_t packet_rssi_val = (uint8_t)(last_rssi+rssi_offset);
|
uint8_t packet_rssi_val = (uint8_t)(last_rssi+rssi_offset);
|
||||||
serial_write(FEND);
|
serial_write(FEND);
|
||||||
serial_write(CMD_STAT_RSSI);
|
serial_write(CMD_STAT_RSSI);
|
||||||
escaped_serial_write(packet_rssi_val);
|
escaped_serial_write(packet_rssi_val);
|
||||||
@ -845,6 +845,8 @@ void kiss_indicate_channel_stats() {
|
|||||||
uint16_t atl = (uint16_t)(longterm_airtime*100*100);
|
uint16_t atl = (uint16_t)(longterm_airtime*100*100);
|
||||||
uint16_t cls = (uint16_t)(total_channel_util*100*100);
|
uint16_t cls = (uint16_t)(total_channel_util*100*100);
|
||||||
uint16_t cll = (uint16_t)(longterm_channel_util*100*100);
|
uint16_t cll = (uint16_t)(longterm_channel_util*100*100);
|
||||||
|
uint8_t crs = (uint8_t)(current_rssi+rssi_offset);
|
||||||
|
uint8_t nfl = (uint8_t)(noise_floor+rssi_offset);
|
||||||
serial_write(FEND);
|
serial_write(FEND);
|
||||||
serial_write(CMD_STAT_CHTM);
|
serial_write(CMD_STAT_CHTM);
|
||||||
escaped_serial_write(ats>>8);
|
escaped_serial_write(ats>>8);
|
||||||
@ -855,6 +857,8 @@ void kiss_indicate_channel_stats() {
|
|||||||
escaped_serial_write(cls);
|
escaped_serial_write(cls);
|
||||||
escaped_serial_write(cll>>8);
|
escaped_serial_write(cll>>8);
|
||||||
escaped_serial_write(cll);
|
escaped_serial_write(cll);
|
||||||
|
escaped_serial_write(crs);
|
||||||
|
escaped_serial_write(nfl);
|
||||||
serial_write(FEND);
|
serial_write(FEND);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user