Added noise floor monitoring and reporting to host
This commit is contained in:
		
							
								
								
									
										3
									
								
								Config.h
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								Config.h
									
									
									
									
									
								
							@@ -95,6 +95,7 @@
 | 
			
		||||
	#define CSMA_CW_PER_BAND_WINDOWS   15
 | 
			
		||||
	#define CSMA_BAND_1_MAX_AIRTIME    7
 | 
			
		||||
	#define CSMA_BAND_N_MIN_AIRTIME    85
 | 
			
		||||
	#define CSMA_INFR_THRESHOLD_DB     12
 | 
			
		||||
	int csma_slot_ms                =  CSMA_SLOT_MIN_MS;
 | 
			
		||||
	unsigned long difs_ms           =  CSMA_SIFS_MS + 2*csma_slot_ms;
 | 
			
		||||
	unsigned long difs_wait_start   = -1;
 | 
			
		||||
@@ -131,6 +132,8 @@
 | 
			
		||||
	uint8_t model     = 0x00;
 | 
			
		||||
	uint8_t hwrev     = 0x00;
 | 
			
		||||
 | 
			
		||||
	#define NOISE_FLOOR_SAMPLES 16
 | 
			
		||||
	int     noise_floor     = -292;
 | 
			
		||||
    int     current_rssi    = -292;
 | 
			
		||||
	int		last_rssi		= -292;
 | 
			
		||||
	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 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() {
 | 
			
		||||
  #if MCU_VARIANT == MCU_ESP32
 | 
			
		||||
    portENTER_CRITICAL(&update_lock);
 | 
			
		||||
@@ -1220,6 +1244,7 @@ void update_modem_status() {
 | 
			
		||||
void check_modem_status() {
 | 
			
		||||
  if (millis()-last_status_update >= status_interval_ms) {
 | 
			
		||||
    update_modem_status();
 | 
			
		||||
    update_noise_floor();
 | 
			
		||||
 | 
			
		||||
    #if MCU_VARIANT == MCU_ESP32 || MCU_VARIANT == MCU_NRF52
 | 
			
		||||
      util_samples[dcd_sample] = dcd;
 | 
			
		||||
 
 | 
			
		||||
@@ -752,7 +752,7 @@ void kiss_indicate_stat_tx() {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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(CMD_STAT_RSSI);
 | 
			
		||||
	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 cls = (uint16_t)(total_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(CMD_STAT_CHTM);
 | 
			
		||||
		escaped_serial_write(ats>>8);
 | 
			
		||||
@@ -855,6 +857,8 @@ void kiss_indicate_channel_stats() {
 | 
			
		||||
		escaped_serial_write(cls);
 | 
			
		||||
		escaped_serial_write(cll>>8);
 | 
			
		||||
		escaped_serial_write(cll);
 | 
			
		||||
		escaped_serial_write(crs);
 | 
			
		||||
		escaped_serial_write(nfl);
 | 
			
		||||
		serial_write(FEND);
 | 
			
		||||
	#endif
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user