mirror of
https://github.com/liquidraver/ZephCore.git
synced 2026-09-02 02:08:25 +00:00
Repeater GPS: separate advert vs telemetry position, persist last fix
GPS fixes no longer overwrite prefs lat/lon — adverts use only manually-set coordinates (via gps setloc or companion app) Precise GPS position served via telemetry requests only getNodeLat()/getNodeLon() returns live GPS fix Last good fix persisted to /lfs/gps_pos — survives reboots | Command | Description | |---------|-------------| | `gps` | Show GPS status (`on` or `off`) | | `gps on` | Enable GPS module | | `gps off` | Disable GPS module | | `gps setloc` | Update stored latitude/longitude from current GPS fix | | `gps advert` | Show current location advertising policy | | `gps advert none` | Do not include location in advertisements | | `gps advert share` | Include live GPS location in advertisements | | `gps advert prefs` | Include stored lat/lon from prefs in advertisements |
This commit is contained in:
@@ -10,6 +10,7 @@
|
||||
#include <adapters/radio/LoRaRadioBase.h>
|
||||
#include <adapters/sensors/SimpleLPP.h>
|
||||
#include <adapters/sensors/ZephyrEnvSensors.h>
|
||||
#include <adapters/gps/ZephyrGPSManager.h>
|
||||
#include <zephyr/kernel.h>
|
||||
#include <zephyr/device.h>
|
||||
#include <zephyr/devicetree.h>
|
||||
@@ -284,7 +285,14 @@ int RepeaterMesh::handleRequest(ClientInfo* sender, uint32_t sender_timestamp, u
|
||||
}
|
||||
}
|
||||
|
||||
/* TODO: Add GPS location here via sensor manager */
|
||||
/* GPS precise position — only shared via telemetry, not adverts */
|
||||
struct gps_position gpos;
|
||||
if (gps_get_last_known_position(&gpos)) {
|
||||
lpp.addGPS(CH_SELF,
|
||||
(float)(gpos.latitude_ndeg / 1e9),
|
||||
(float)(gpos.longitude_ndeg / 1e9),
|
||||
gpos.altitude_mm / 1000.0f);
|
||||
}
|
||||
|
||||
return 4 + lpp.getSize();
|
||||
}
|
||||
@@ -831,6 +839,22 @@ void RepeaterMesh::begin(RepeaterDataStore* store) {
|
||||
_prefs.node_name, (double)_prefs.freq, (double)_prefs.bw, _prefs.sf, _prefs.cr);
|
||||
}
|
||||
|
||||
double RepeaterMesh::getNodeLat() const {
|
||||
struct gps_position pos;
|
||||
if (gps_get_last_known_position(&pos)) {
|
||||
return pos.latitude_ndeg / 1e9;
|
||||
}
|
||||
return _prefs.node_lat;
|
||||
}
|
||||
|
||||
double RepeaterMesh::getNodeLon() const {
|
||||
struct gps_position pos;
|
||||
if (gps_get_last_known_position(&pos)) {
|
||||
return pos.longitude_ndeg / 1e9;
|
||||
}
|
||||
return _prefs.node_lon;
|
||||
}
|
||||
|
||||
void RepeaterMesh::savePrefs() {
|
||||
if (_store) {
|
||||
_store->savePrefs(_prefs);
|
||||
|
||||
Reference in New Issue
Block a user