@@ -113,7 +113,7 @@ static uint32_t _atoi(const char* sp) {
113113#define CMD_IMPORT_CONTACT 18
114114#define CMD_REBOOT 19
115115#define CMD_GET_BATTERY_VOLTAGE 20
116- #define CMD_SET_TUNING_PARAMS 21
116+ #define CMD_SET_OTHER_PARAMS 21
117117#define CMD_DEVICE_QEURY 22
118118#define CMD_EXPORT_PRIVATE_KEY 23
119119#define CMD_IMPORT_PRIVATE_KEY 24
@@ -164,6 +164,7 @@ static uint32_t _atoi(const char* sp) {
164164#define PUSH_CODE_STATUS_RESPONSE 0x87
165165#define PUSH_CODE_LOG_RX_DATA 0x88
166166#define PUSH_CODE_TRACE_DATA 0x89
167+ #define PUSH_CODE_NEW_ADVERT 0x8A
167168
168169#define ERR_CODE_UNSUPPORTED_CMD 1
169170#define ERR_CODE_NOT_FOUND 2
@@ -184,7 +185,7 @@ struct NodePrefs { // persisted to file
184185 uint8_t sf;
185186 uint8_t cr;
186187 uint8_t reserved1;
187- uint8_t reserved2 ;
188+ uint8_t manual_add_contacts ;
188189 float bw;
189190 uint8_t tx_power_dbm;
190191 uint8_t unused[3 ];
@@ -499,11 +500,19 @@ class MyMesh : public BaseChatMesh {
499500 }
500501 }
501502
503+ bool isAutoAddEnabled () const override {
504+ return (_prefs.manual_add_contacts & 1 ) == 0 ;
505+ }
506+
502507 void onDiscoveredContact (ContactInfo& contact, bool is_new) override {
503508 if (_serial->isConnected ()) {
504- out_frame[0 ] = PUSH_CODE_ADVERT;
505- memcpy (&out_frame[1 ], contact.id .pub_key , PUB_KEY_SIZE);
506- _serial->writeFrame (out_frame, 1 + PUB_KEY_SIZE);
509+ if (!isAutoAddEnabled () && is_new) {
510+ writeContactRespFrame (PUSH_CODE_NEW_ADVERT, contact);
511+ } else {
512+ out_frame[0 ] = PUSH_CODE_ADVERT;
513+ memcpy (&out_frame[1 ], contact.id .pub_key , PUB_KEY_SIZE);
514+ _serial->writeFrame (out_frame, 1 + PUB_KEY_SIZE);
515+ }
507516 } else {
508517 soundBuzzer ();
509518 }
@@ -750,7 +759,7 @@ class MyMesh : public BaseChatMesh {
750759 file.read ((uint8_t *) &_prefs.sf , sizeof (_prefs.sf )); // 60
751760 file.read ((uint8_t *) &_prefs.cr , sizeof (_prefs.cr )); // 61
752761 file.read ((uint8_t *) &_prefs.reserved1 , sizeof (_prefs.reserved1 )); // 62
753- file.read ((uint8_t *) &_prefs.reserved2 , sizeof (_prefs.reserved2 )); // 63
762+ file.read ((uint8_t *) &_prefs.manual_add_contacts , sizeof (_prefs.manual_add_contacts )); // 63
754763 file.read ((uint8_t *) &_prefs.bw , sizeof (_prefs.bw )); // 64
755764 file.read ((uint8_t *) &_prefs.tx_power_dbm , sizeof (_prefs.tx_power_dbm )); // 68
756765 file.read ((uint8_t *) _prefs.unused , sizeof (_prefs.unused )); // 69
@@ -851,7 +860,7 @@ class MyMesh : public BaseChatMesh {
851860 file.write ((uint8_t *) &_prefs.sf , sizeof (_prefs.sf )); // 60
852861 file.write ((uint8_t *) &_prefs.cr , sizeof (_prefs.cr )); // 61
853862 file.write ((uint8_t *) &_prefs.reserved1 , sizeof (_prefs.reserved1 )); // 62
854- file.write ((uint8_t *) &_prefs.reserved2 , sizeof (_prefs.reserved2 )); // 63
863+ file.write ((uint8_t *) &_prefs.manual_add_contacts , sizeof (_prefs.manual_add_contacts )); // 63
855864 file.write ((uint8_t *) &_prefs.bw , sizeof (_prefs.bw )); // 64
856865 file.write ((uint8_t *) &_prefs.tx_power_dbm , sizeof (_prefs.tx_power_dbm )); // 68
857866 file.write ((uint8_t *) _prefs.unused , sizeof (_prefs.unused )); // 69
@@ -892,12 +901,15 @@ class MyMesh : public BaseChatMesh {
892901 out_frame[i++] = MAX_LORA_TX_POWER;
893902 memcpy (&out_frame[i], self_id.pub_key , PUB_KEY_SIZE); i += PUB_KEY_SIZE;
894903
895- int32_t lat, lon, alt = 0 ;
904+ int32_t lat, lon;
896905 lat = (_prefs.node_lat * 1000000.0 );
897906 lon = (_prefs.node_lon * 1000000.0 );
898907 memcpy (&out_frame[i], &lat, 4 ); i += 4 ;
899908 memcpy (&out_frame[i], &lon, 4 ); i += 4 ;
900- memcpy (&out_frame[i], &alt, 4 ); i += 4 ;
909+ out_frame[i++] = 0 ; // reserved
910+ out_frame[i++] = 0 ; // reserved
911+ out_frame[i++] = 0 ; // reserved
912+ out_frame[i++] = _prefs.manual_add_contacts ;
901913
902914 uint32_t freq = _prefs.freq * 1000 ;
903915 memcpy (&out_frame[i], &freq, 4 ); i += 4 ;
@@ -1172,13 +1184,16 @@ class MyMesh : public BaseChatMesh {
11721184 radio_set_tx_power (_prefs.tx_power_dbm );
11731185 writeOKFrame ();
11741186 }
1175- } else if (cmd_frame[0 ] == CMD_SET_TUNING_PARAMS ) {
1187+ } else if (cmd_frame[0 ] == CMD_SET_OTHER_PARAMS ) {
11761188 int i = 1 ;
11771189 uint32_t rx, af;
11781190 memcpy (&rx, &cmd_frame[i], 4 ); i += 4 ;
11791191 memcpy (&af, &cmd_frame[i], 4 ); i += 4 ;
11801192 _prefs.rx_delay_base = ((float )rx) / 1000 .0f ;
11811193 _prefs.airtime_factor = ((float )af) / 1000 .0f ;
1194+ if (i < len) {
1195+ _prefs.manual_add_contacts = cmd_frame[i++];
1196+ }
11821197 savePrefs ();
11831198 writeOKFrame ();
11841199 } else if (cmd_frame[0 ] == CMD_REBOOT && memcmp (&cmd_frame[1 ], " reboot" , 6 ) == 0 ) {
0 commit comments