|
|
@@ -120,7 +120,7 @@ struct NeighbourInfo {
|
|
|
int8_t snr; // multiplied by 4, user should divide to get float value
|
|
|
};
|
|
|
|
|
|
-#define CLI_REPLY_DELAY_MILLIS 1000
|
|
|
+#define CLI_REPLY_DELAY_MILLIS 600
|
|
|
|
|
|
class MyMesh : public mesh::Mesh, public CommonCLICallbacks {
|
|
|
FILESYSTEM* _fs;
|
|
|
@@ -134,6 +134,11 @@ class MyMesh : public mesh::Mesh, public CommonCLICallbacks {
|
|
|
NeighbourInfo neighbours[MAX_NEIGHBOURS];
|
|
|
#endif
|
|
|
CayenneLPP telemetry;
|
|
|
+ unsigned long set_radio_at, revert_radio_at;
|
|
|
+ float pending_freq;
|
|
|
+ float pending_bw;
|
|
|
+ uint8_t pending_sf;
|
|
|
+ uint8_t pending_cr;
|
|
|
|
|
|
ClientInfo* putClient(const mesh::Identity& id) {
|
|
|
uint32_t min_time = 0xFFFFFFFF;
|
|
|
@@ -558,6 +563,7 @@ public:
|
|
|
{
|
|
|
memset(known_clients, 0, sizeof(known_clients));
|
|
|
next_local_advert = next_flood_advert = 0;
|
|
|
+ set_radio_at = revert_radio_at = 0;
|
|
|
_logging = false;
|
|
|
|
|
|
#if MAX_NEIGHBOURS
|
|
|
@@ -609,6 +615,16 @@ public:
|
|
|
_cli.savePrefs(_fs);
|
|
|
}
|
|
|
|
|
|
+ void applyTempRadioParams(float freq, float bw, uint8_t sf, uint8_t cr, int timeout_mins) override {
|
|
|
+ set_radio_at = futureMillis(2000); // give CLI reply some time to be sent back, before applying temp radio params
|
|
|
+ pending_freq = freq;
|
|
|
+ pending_bw = bw;
|
|
|
+ pending_sf = sf;
|
|
|
+ pending_cr = cr;
|
|
|
+
|
|
|
+ revert_radio_at = futureMillis(2000 + timeout_mins*60*1000); // schedule when to revert radio params
|
|
|
+ }
|
|
|
+
|
|
|
bool formatFileSystem() override {
|
|
|
#if defined(NRF52_PLATFORM) || defined(STM32_PLATFORM)
|
|
|
return InternalFS.format();
|
|
|
@@ -734,6 +750,19 @@ public:
|
|
|
|
|
|
updateAdvertTimer(); // schedule next local advert
|
|
|
}
|
|
|
+
|
|
|
+ if (set_radio_at && millisHasNowPassed(set_radio_at)) { // apply pending (temporary) radio params
|
|
|
+ set_radio_at = 0; // clear timer
|
|
|
+ radio_set_params(pending_freq, pending_bw, pending_sf, pending_cr);
|
|
|
+ MESH_DEBUG_PRINTLN("Temp radio params");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (revert_radio_at && millisHasNowPassed(revert_radio_at)) { // revert radio params to orig
|
|
|
+ revert_radio_at = 0; // clear timer
|
|
|
+ radio_set_params(_prefs.freq, _prefs.bw, _prefs.sf, _prefs.cr);
|
|
|
+ MESH_DEBUG_PRINTLN("Radio params restored");
|
|
|
+ }
|
|
|
+
|
|
|
#ifdef DISPLAY_CLASS
|
|
|
ui_task.loop();
|
|
|
#endif
|