gps_cli: gps advert to control advert location policy
This commit is contained in:
@@ -289,8 +289,16 @@ mesh::Packet *MyMesh::createSelfAdvert() {
|
|||||||
uint8_t app_data[MAX_ADVERT_DATA_SIZE];
|
uint8_t app_data[MAX_ADVERT_DATA_SIZE];
|
||||||
uint8_t app_data_len;
|
uint8_t app_data_len;
|
||||||
{
|
{
|
||||||
AdvertDataBuilder builder(ADV_TYPE_REPEATER, _prefs.node_name, _prefs.node_lat, _prefs.node_lon);
|
if (_prefs.advert_loc_policy == ADVERT_LOC_NONE) {
|
||||||
app_data_len = builder.encodeTo(app_data);
|
AdvertDataBuilder builder(ADV_TYPE_REPEATER, _prefs.node_name);
|
||||||
|
app_data_len = builder.encodeTo(app_data);
|
||||||
|
} else if (_prefs.advert_loc_policy == ADVERT_LOC_SHARE) {
|
||||||
|
AdvertDataBuilder builder(ADV_TYPE_REPEATER, _prefs.node_name, sensors.node_lat, sensors.node_lon);
|
||||||
|
app_data_len = builder.encodeTo(app_data);
|
||||||
|
} else {
|
||||||
|
AdvertDataBuilder builder(ADV_TYPE_REPEATER, _prefs.node_name, _prefs.node_lat, _prefs.node_lon);
|
||||||
|
app_data_len = builder.encodeTo(app_data);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return createAdvert(self_id, app_data, app_data_len);
|
return createAdvert(self_id, app_data, app_data_len);
|
||||||
|
|||||||
@@ -116,8 +116,16 @@ mesh::Packet *MyMesh::createSelfAdvert() {
|
|||||||
uint8_t app_data[MAX_ADVERT_DATA_SIZE];
|
uint8_t app_data[MAX_ADVERT_DATA_SIZE];
|
||||||
uint8_t app_data_len;
|
uint8_t app_data_len;
|
||||||
{
|
{
|
||||||
AdvertDataBuilder builder(ADV_TYPE_ROOM, _prefs.node_name, _prefs.node_lat, _prefs.node_lon);
|
if (_prefs.advert_loc_policy == ADVERT_LOC_NONE) {
|
||||||
app_data_len = builder.encodeTo(app_data);
|
AdvertDataBuilder builder(ADV_TYPE_REPEATER, _prefs.node_name);
|
||||||
|
app_data_len = builder.encodeTo(app_data);
|
||||||
|
} else if (_prefs.advert_loc_policy == ADVERT_LOC_SHARE) {
|
||||||
|
AdvertDataBuilder builder(ADV_TYPE_REPEATER, _prefs.node_name, sensors.node_lat, sensors.node_lon);
|
||||||
|
app_data_len = builder.encodeTo(app_data);
|
||||||
|
} else {
|
||||||
|
AdvertDataBuilder builder(ADV_TYPE_REPEATER, _prefs.node_name, _prefs.node_lat, _prefs.node_lon);
|
||||||
|
app_data_len = builder.encodeTo(app_data);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return createAdvert(self_id, app_data, app_data_len);
|
return createAdvert(self_id, app_data, app_data_len);
|
||||||
|
|||||||
@@ -241,8 +241,16 @@ mesh::Packet* SensorMesh::createSelfAdvert() {
|
|||||||
uint8_t app_data[MAX_ADVERT_DATA_SIZE];
|
uint8_t app_data[MAX_ADVERT_DATA_SIZE];
|
||||||
uint8_t app_data_len;
|
uint8_t app_data_len;
|
||||||
{
|
{
|
||||||
AdvertDataBuilder builder(ADV_TYPE_SENSOR, _prefs.node_name, _prefs.node_lat, _prefs.node_lon);
|
if (_prefs.advert_loc_policy == ADVERT_LOC_NONE) {
|
||||||
app_data_len = builder.encodeTo(app_data);
|
AdvertDataBuilder builder(ADV_TYPE_REPEATER, _prefs.node_name);
|
||||||
|
app_data_len = builder.encodeTo(app_data);
|
||||||
|
} else if (_prefs.advert_loc_policy == ADVERT_LOC_SHARE) {
|
||||||
|
AdvertDataBuilder builder(ADV_TYPE_REPEATER, _prefs.node_name, sensors.node_lat, sensors.node_lon);
|
||||||
|
app_data_len = builder.encodeTo(app_data);
|
||||||
|
} else {
|
||||||
|
AdvertDataBuilder builder(ADV_TYPE_REPEATER, _prefs.node_name, _prefs.node_lat, _prefs.node_lon);
|
||||||
|
app_data_len = builder.encodeTo(app_data);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return createAdvert(self_id, app_data, app_data_len);
|
return createAdvert(self_id, app_data, app_data_len);
|
||||||
|
|||||||
@@ -67,7 +67,10 @@ void CommonCLI::loadPrefsInt(FILESYSTEM* fs, const char* filename) {
|
|||||||
file.read(pad, 4); // 152
|
file.read(pad, 4); // 152
|
||||||
file.read((uint8_t *)&_prefs->gps_enabled, sizeof(_prefs->gps_enabled)); // 156
|
file.read((uint8_t *)&_prefs->gps_enabled, sizeof(_prefs->gps_enabled)); // 156
|
||||||
file.read((uint8_t *)&_prefs->gps_interval, sizeof(_prefs->gps_interval)); // 157
|
file.read((uint8_t *)&_prefs->gps_interval, sizeof(_prefs->gps_interval)); // 157
|
||||||
// 161
|
if (file.read((uint8_t *)&_prefs->advert_loc_policy, sizeof (_prefs->advert_loc_policy)) == -1) {
|
||||||
|
_prefs->advert_loc_policy = ADVERT_LOC_PREFS; // default value
|
||||||
|
} // 161
|
||||||
|
// 162
|
||||||
|
|
||||||
// sanitise bad pref values
|
// sanitise bad pref values
|
||||||
_prefs->rx_delay_base = constrain(_prefs->rx_delay_base, 0, 20.0f);
|
_prefs->rx_delay_base = constrain(_prefs->rx_delay_base, 0, 20.0f);
|
||||||
@@ -89,6 +92,7 @@ void CommonCLI::loadPrefsInt(FILESYSTEM* fs, const char* filename) {
|
|||||||
_prefs->bridge_channel = constrain(_prefs->bridge_channel, 0, 14);
|
_prefs->bridge_channel = constrain(_prefs->bridge_channel, 0, 14);
|
||||||
|
|
||||||
_prefs->gps_enabled = constrain(_prefs->gps_enabled, 0, 1);
|
_prefs->gps_enabled = constrain(_prefs->gps_enabled, 0, 1);
|
||||||
|
_prefs->advert_loc_policy = constrain(_prefs->advert_loc_policy, 0, 2);
|
||||||
|
|
||||||
file.close();
|
file.close();
|
||||||
}
|
}
|
||||||
@@ -142,7 +146,8 @@ void CommonCLI::savePrefs(FILESYSTEM* fs) {
|
|||||||
file.write(pad, 4); // 152
|
file.write(pad, 4); // 152
|
||||||
file.write((uint8_t *)&_prefs->gps_enabled, sizeof(_prefs->gps_enabled)); // 156
|
file.write((uint8_t *)&_prefs->gps_enabled, sizeof(_prefs->gps_enabled)); // 156
|
||||||
file.write((uint8_t *)&_prefs->gps_interval, sizeof(_prefs->gps_interval)); // 157
|
file.write((uint8_t *)&_prefs->gps_interval, sizeof(_prefs->gps_interval)); // 157
|
||||||
// 161
|
file.write((uint8_t *)&_prefs->advert_loc_policy, sizeof(_prefs->advert_loc_policy)); // 161
|
||||||
|
// 162
|
||||||
|
|
||||||
file.close();
|
file.close();
|
||||||
}
|
}
|
||||||
@@ -585,6 +590,36 @@ void CommonCLI::handleCommand(uint32_t sender_timestamp, const char* command, ch
|
|||||||
_prefs->node_lon = sensors.node_lon;
|
_prefs->node_lon = sensors.node_lon;
|
||||||
savePrefs();
|
savePrefs();
|
||||||
strcpy(reply, "ok");
|
strcpy(reply, "ok");
|
||||||
|
} else if (memcmp(command, "gps advert", 10) == 0) {
|
||||||
|
if (strlen(command) == 10) {
|
||||||
|
switch (_prefs->advert_loc_policy) {
|
||||||
|
case ADVERT_LOC_NONE:
|
||||||
|
strcpy(reply, "> none");
|
||||||
|
break;
|
||||||
|
case ADVERT_LOC_PREFS:
|
||||||
|
strcpy(reply, "> prefs");
|
||||||
|
break;
|
||||||
|
case ADVERT_LOC_SHARE:
|
||||||
|
strcpy(reply, "> share");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
strcpy(reply, "error");
|
||||||
|
}
|
||||||
|
} else if (memcmp(command+11, "none", 4) == 0) {
|
||||||
|
_prefs->advert_loc_policy = ADVERT_LOC_NONE;
|
||||||
|
savePrefs();
|
||||||
|
strcpy(reply, "ok");
|
||||||
|
} else if (memcmp(command+11, "share", 5) == 0) {
|
||||||
|
_prefs->advert_loc_policy = ADVERT_LOC_SHARE;
|
||||||
|
savePrefs();
|
||||||
|
strcpy(reply, "ok");
|
||||||
|
} else if (memcmp(command+11, "prefs", 4) == 0) {
|
||||||
|
_prefs->advert_loc_policy = ADVERT_LOC_PREFS;
|
||||||
|
savePrefs();
|
||||||
|
strcpy(reply, "ok");
|
||||||
|
} else {
|
||||||
|
strcpy(reply, "error");
|
||||||
|
}
|
||||||
} else if (memcmp(command, "gps", 3) == 0) {
|
} else if (memcmp(command, "gps", 3) == 0) {
|
||||||
LocationProvider * l = sensors.getLocationProvider();
|
LocationProvider * l = sensors.getLocationProvider();
|
||||||
if (l != NULL) {
|
if (l != NULL) {
|
||||||
|
|||||||
@@ -8,6 +8,10 @@
|
|||||||
#define WITH_BRIDGE
|
#define WITH_BRIDGE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define ADVERT_LOC_NONE 0
|
||||||
|
#define ADVERT_LOC_SHARE 1
|
||||||
|
#define ADVERT_LOC_PREFS 2
|
||||||
|
|
||||||
struct NodePrefs { // persisted to file
|
struct NodePrefs { // persisted to file
|
||||||
float airtime_factor;
|
float airtime_factor;
|
||||||
char node_name[32];
|
char node_name[32];
|
||||||
@@ -41,6 +45,7 @@ struct NodePrefs { // persisted to file
|
|||||||
// Gps settings
|
// Gps settings
|
||||||
uint8_t gps_enabled;
|
uint8_t gps_enabled;
|
||||||
uint32_t gps_interval; // in seconds
|
uint32_t gps_interval; // in seconds
|
||||||
|
uint8_t advert_loc_policy;
|
||||||
};
|
};
|
||||||
|
|
||||||
class CommonCLICallbacks {
|
class CommonCLICallbacks {
|
||||||
|
|||||||
Reference in New Issue
Block a user