mirror of
https://github.com/meshcore-dev/MeshCore.git
synced 2026-03-30 14:55:46 +00:00
cli_gps: use sensormanger to toggle gps on/off to keep state coherent
This commit is contained in:
@@ -761,11 +761,15 @@ void MyMesh::removeNeighbor(const uint8_t *pubkey, int key_len) {
|
||||
void MyMesh::gpsGetStatus(char * reply) {
|
||||
LocationProvider * l = sensors.getLocationProvider();
|
||||
if (l != NULL) {
|
||||
bool status = l->isActive();
|
||||
bool sync = l->isValid();
|
||||
bool enabled = l->isEnabled(); // is EN pin on ?
|
||||
bool active = gpsGetState(); // is enabled at SensorManager level ?
|
||||
bool fix = l->isValid(); // has fix ?
|
||||
int sats = l->satellitesCount();
|
||||
if (status) {
|
||||
sprintf(reply, "on, %s, %d sats", sync?"fix":"no fix", sats);
|
||||
if (enabled) {
|
||||
sprintf(reply, "on, %s, %s, %d sats",
|
||||
active?"active":"deactivated",
|
||||
fix?"fix":"no fix",
|
||||
sats);
|
||||
} else {
|
||||
strcpy(reply, "off");
|
||||
}
|
||||
@@ -774,19 +778,33 @@ void MyMesh::gpsGetStatus(char * reply) {
|
||||
}
|
||||
}
|
||||
|
||||
void MyMesh::gpsStart() {
|
||||
LocationProvider * l = sensors.getLocationProvider();
|
||||
if (l != NULL) {
|
||||
l->begin();
|
||||
l->reset();
|
||||
bool MyMesh::gpsGetState() {
|
||||
int num = sensors.getNumSettings();
|
||||
for (int i = 0; i < num; i++) {
|
||||
if (strcmp(sensors.getSettingName(i), "gps") == 0) {
|
||||
return !strcmp(sensors.getSettingValue(i), "1");
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void MyMesh::gpsSetState(bool value) {
|
||||
// toggle GPS on/off
|
||||
int num = sensors.getNumSettings();
|
||||
for (int i = 0; i < num; i++) {
|
||||
if (strcmp(sensors.getSettingName(i), "gps") == 0) {
|
||||
sensors.setSettingValue("gps", value?"1":"0");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MyMesh::gpsStart() {
|
||||
gpsSetState(true);
|
||||
}
|
||||
|
||||
void MyMesh::gpsStop() {
|
||||
LocationProvider * l = sensors.getLocationProvider();
|
||||
if (l != NULL) {
|
||||
l->stop();
|
||||
}
|
||||
gpsSetState(false);
|
||||
}
|
||||
|
||||
void MyMesh::gpsSyncTime() {
|
||||
|
||||
@@ -142,6 +142,9 @@ protected:
|
||||
void onPeerDataRecv(mesh::Packet* packet, uint8_t type, int sender_idx, const uint8_t* secret, uint8_t* data, size_t len) override;
|
||||
bool onPeerPathRecv(mesh::Packet* packet, int sender_idx, const uint8_t* secret, uint8_t* path, uint8_t path_len, uint8_t extra_type, uint8_t* extra, uint8_t extra_len) override;
|
||||
|
||||
bool gpsGetState();
|
||||
void gpsSetState(bool value);
|
||||
|
||||
public:
|
||||
MyMesh(mesh::MainBoard& board, mesh::Radio& radio, mesh::MillisecondClock& ms, mesh::RNG& rng, mesh::RTCClock& rtc, mesh::MeshTables& tables);
|
||||
|
||||
|
||||
@@ -21,5 +21,5 @@ public:
|
||||
virtual void begin() = 0;
|
||||
virtual void stop() = 0;
|
||||
virtual void loop() = 0;
|
||||
virtual bool isActive() = 0;
|
||||
virtual bool isEnabled() = 0;
|
||||
};
|
||||
|
||||
@@ -78,7 +78,7 @@ public :
|
||||
}
|
||||
}
|
||||
|
||||
bool isActive() override {
|
||||
bool isEnabled() override {
|
||||
// directly read the enable pin if present as gps can be
|
||||
// activated/deactivated outside of here ...
|
||||
if (_pin_en != -1) {
|
||||
|
||||
Reference in New Issue
Block a user