@@ -698,7 +698,7 @@ void MyMesh::handleCmdFrame(size_t len) {
698698 memcpy (&out_frame[i], &lon, 4 );
699699 i += 4 ;
700700 out_frame[i++] = 0 ; // reserved
701- out_frame[i++] = 0 ; // reserved
701+ out_frame[i++] = _prefs. advert_loc_policy ;
702702 out_frame[i++] = (_prefs.telemetry_mode_env << 4 ) | (_prefs.telemetry_mode_loc << 2 ) |
703703 (_prefs.telemetry_mode_base ); // v5+
704704 out_frame[i++] = _prefs.manual_add_contacts ;
@@ -840,7 +840,12 @@ void MyMesh::handleCmdFrame(size_t len) {
840840 writeErrFrame (ERR_CODE_ILLEGAL_ARG);
841841 }
842842 } else if (cmd_frame[0 ] == CMD_SEND_SELF_ADVERT) {
843- auto pkt = createSelfAdvert (_prefs.node_name , sensors.node_lat , sensors.node_lon );
843+ mesh::Packet* pkt;
844+ if (_prefs.advert_loc_policy == ADVERT_LOC_NONE) {
845+ pkt = createSelfAdvert (_prefs.node_name );
846+ } else {
847+ pkt = createSelfAdvert (_prefs.node_name , sensors.node_lat , sensors.node_lon );
848+ }
844849 if (pkt) {
845850 if (len >= 2 && cmd_frame[1 ] == 1 ) { // optional param (1 = flood, 0 = zero hop)
846851 sendFlood (pkt);
@@ -914,7 +919,12 @@ void MyMesh::handleCmdFrame(size_t len) {
914919 } else if (cmd_frame[0 ] == CMD_EXPORT_CONTACT) {
915920 if (len < 1 + PUB_KEY_SIZE) {
916921 // export SELF
917- auto pkt = createSelfAdvert (_prefs.node_name , sensors.node_lat , sensors.node_lon );
922+ mesh::Packet* pkt;
923+ if (_prefs.advert_loc_policy == ADVERT_LOC_NONE) {
924+ pkt = createSelfAdvert (_prefs.node_name );
925+ } else {
926+ pkt = createSelfAdvert (_prefs.node_name , sensors.node_lat , sensors.node_lon );
927+ }
918928 if (pkt) {
919929 pkt->header |= ROUTE_TYPE_FLOOD; // would normally be sent in this mode
920930
@@ -1008,6 +1018,10 @@ void MyMesh::handleCmdFrame(size_t len) {
10081018 _prefs.telemetry_mode_base = cmd_frame[2 ] & 0x03 ; // v5+
10091019 _prefs.telemetry_mode_loc = (cmd_frame[2 ] >> 2 ) & 0x03 ;
10101020 _prefs.telemetry_mode_env = (cmd_frame[2 ] >> 4 ) & 0x03 ;
1021+
1022+ if (len >= 4 ) {
1023+ _prefs.advert_loc_policy = cmd_frame[3 ];
1024+ }
10111025 }
10121026 savePrefs ();
10131027 writeOKFrame ();
@@ -1478,7 +1492,12 @@ void MyMesh::loop() {
14781492}
14791493
14801494bool MyMesh::advert () {
1481- auto pkt = createSelfAdvert (_prefs.node_name , sensors.node_lat , sensors.node_lon );
1495+ mesh::Packet* pkt;
1496+ if (_prefs.advert_loc_policy == ADVERT_LOC_NONE) {
1497+ pkt = createSelfAdvert (_prefs.node_name );
1498+ } else {
1499+ pkt = createSelfAdvert (_prefs.node_name , sensors.node_lat , sensors.node_lon );
1500+ }
14821501 if (pkt) {
14831502 sendZeroHop (pkt);
14841503 return true ;
0 commit comments