Browse Source

Merge branch 'ripplebiz:dev' into dev

Rastislav Vysoky 1 năm trước cách đây
mục cha
commit
9844296643

+ 3 - 1
examples/companion_radio/main.cpp

@@ -1257,10 +1257,12 @@ void setup() {
 #ifdef SX126X_CURRENT_LIMIT
   radio.setCurrentLimit(SX126X_CURRENT_LIMIT);
 #endif
-
 #ifdef SX126X_DIO2_AS_RF_SWITCH
   radio.setDio2AsRfSwitch(SX126X_DIO2_AS_RF_SWITCH);
 #endif
+#ifdef SX126X_RX_BOOSTED_GAIN
+  radio.setRxBoostedGainMode(SX126X_RX_BOOSTED_GAIN);
+#endif
 
   fast_rng.begin(radio.random(0x7FFFFFFF));
 

+ 3 - 1
examples/simple_repeater/main.cpp

@@ -685,10 +685,12 @@ void setup() {
 #ifdef SX126X_CURRENT_LIMIT
   radio.setCurrentLimit(SX126X_CURRENT_LIMIT);
 #endif
-
 #ifdef SX126X_DIO2_AS_RF_SWITCH
   radio.setDio2AsRfSwitch(SX126X_DIO2_AS_RF_SWITCH);
 #endif
+#ifdef SX126X_RX_BOOSTED_GAIN
+  radio.setRxBoostedGainMode(SX126X_RX_BOOSTED_GAIN);
+#endif
 
   fast_rng.begin(radio.random(0x7FFFFFFF));
 

+ 3 - 1
examples/simple_room_server/main.cpp

@@ -747,10 +747,12 @@ void setup() {
 #ifdef SX126X_CURRENT_LIMIT
   radio.setCurrentLimit(SX126X_CURRENT_LIMIT);
 #endif
-
 #ifdef SX126X_DIO2_AS_RF_SWITCH
   radio.setDio2AsRfSwitch(SX126X_DIO2_AS_RF_SWITCH);
 #endif
+#ifdef SX126X_RX_BOOSTED_GAIN
+  radio.setRxBoostedGainMode(SX126X_RX_BOOSTED_GAIN);
+#endif
 
   fast_rng.begin(radio.random(0x7FFFFFFF));
 

+ 1 - 0
platformio.ini

@@ -125,6 +125,7 @@ build_flags =
   -D SX126X_DIO2_AS_RF_SWITCH=true
   -D SX126X_DIO3_TCXO_VOLTAGE=1.8
   -D SX126X_CURRENT_LIMIT=130.0f  ; for best TX power!
+  -D SX126X_RX_BOOSTED_GAIN=true
 build_src_filter = ${esp32_base.build_src_filter}
 lib_deps =
   ${esp32_base.lib_deps}

+ 10 - 4
src/Dispatcher.cpp

@@ -106,10 +106,16 @@ void Dispatcher::checkRecv() {
           memcpy(pkt->path, &raw[i], pkt->path_len); i += pkt->path_len;
 
           pkt->payload_len = len - i;  // payload is remainder
-          memcpy(pkt->payload, &raw[i], pkt->payload_len);
-
-          score = _radio->packetScore(_radio->getLastSNR(), len);
-          air_time = _radio->getEstAirtimeFor(len);
+          if (pkt->payload_len > sizeof(pkt->payload)) {
+            MESH_DEBUG_PRINTLN("%s Dispatcher::checkRecv(): packet payload too big, payload_len=%d", getLogDateTime(), (uint32_t)pkt->payload_len);
+            _mgr->free(pkt);  // put back into pool
+            pkt = NULL;  
+          } else {
+            memcpy(pkt->payload, &raw[i], pkt->payload_len);
+
+            score = _radio->packetScore(_radio->getLastSNR(), len);
+            air_time = _radio->getEstAirtimeFor(len);
+          }
         }
       }
     } else {