mirror of
https://github.com/liquidraver/ZephCore.git
synced 2026-10-22 23:11:22 +00:00
SmartCAD p1
This commit is contained in:
1 parent
0d70256d2e
commit
dc1239537e
36 files changed
+1154
-24
No files matched your search
@@ -353,6 +353,14 @@ protected:
|
||||
uint8_t getDutyCyclePercent() const override;
|
||||
uint8_t getExtraAckTransmitCount() const override;
|
||||
|
||||
/* Adaptive CAD: persist the staircase's learned offset */
|
||||
void onCadOffsetChanged(int8_t offset) override {
|
||||
prefs.cad_offset = offset;
|
||||
if (_store) {
|
||||
_store->savePrefs(prefs);
|
||||
}
|
||||
}
|
||||
|
||||
/* Auto-add filtering overrides */
|
||||
bool isAutoAddEnabled() const override;
|
||||
bool shouldAutoAddContactType(uint8_t type) const override;
|
||||
|
||||
@@ -203,6 +203,11 @@ bool RepeaterDataStore::loadPrefs(NodePrefs& prefs) {
|
||||
fs_read(&file, &prefs.flood_max_advert, sizeof(prefs.flood_max_advert));
|
||||
/* Mesh time sync (absent in <297-byte files; no-op EOF read keeps default 0 = off) */
|
||||
fs_read(&file, &prefs.meshtimesync, sizeof(prefs.meshtimesync));
|
||||
/* Adaptive CAD (absent in <300-byte files; no-op EOF reads keep defaults
|
||||
* auto=0, offset=0, probe_interval=60) */
|
||||
fs_read(&file, &prefs.cad_auto, sizeof(prefs.cad_auto));
|
||||
fs_read(&file, &prefs.cad_offset, sizeof(prefs.cad_offset));
|
||||
fs_read(&file, &prefs.cad_probe_interval, sizeof(prefs.cad_probe_interval));
|
||||
|
||||
fs_close(&file);
|
||||
|
||||
@@ -234,6 +239,9 @@ bool RepeaterDataStore::loadPrefs(NodePrefs& prefs) {
|
||||
if (prefs.apc_enabled > 1) prefs.apc_enabled = 0;
|
||||
if (prefs.apc_margin < 6 || prefs.apc_margin > 30) prefs.apc_margin = 16;
|
||||
if (prefs.meshtimesync > 1) prefs.meshtimesync = 0;
|
||||
if (prefs.cad_auto > 1) prefs.cad_auto = 0;
|
||||
if (prefs.cad_offset < -4 || prefs.cad_offset > 4) prefs.cad_offset = 0;
|
||||
if (prefs.cad_probe_interval != 0 && prefs.cad_probe_interval < 10) prefs.cad_probe_interval = 10;
|
||||
|
||||
/* One-time format upgrade: old files (< 294 bytes) never saved the ZephCore
|
||||
* extension fields, and stored path_hash_mode/loop_detect as zero padding.
|
||||
@@ -333,6 +341,10 @@ bool RepeaterDataStore::savePrefs(const NodePrefs& prefs) {
|
||||
fs_write(&file, &prefs.flood_max_advert, sizeof(prefs.flood_max_advert));
|
||||
/* Mesh time sync on/off (offset 296) */
|
||||
fs_write(&file, &prefs.meshtimesync, sizeof(prefs.meshtimesync));
|
||||
/* Adaptive CAD (offsets 297-299) */
|
||||
fs_write(&file, &prefs.cad_auto, sizeof(prefs.cad_auto));
|
||||
fs_write(&file, &prefs.cad_offset, sizeof(prefs.cad_offset));
|
||||
fs_write(&file, &prefs.cad_probe_interval, sizeof(prefs.cad_probe_interval));
|
||||
|
||||
ret = fs_sync(&file);
|
||||
fs_close(&file);
|
||||
|
||||
@@ -179,6 +179,24 @@ protected:
|
||||
return _prefs.multi_acks;
|
||||
}
|
||||
|
||||
/* Adaptive CAD */
|
||||
int formatCadStatus(char* buf, int cap) override {
|
||||
return _radio->formatCadStatus(buf, cap);
|
||||
}
|
||||
void applyCadPrefs() override {
|
||||
_radio->setCadParams(_prefs.cad_auto != 0, _prefs.cad_offset,
|
||||
_prefs.cad_probe_interval);
|
||||
}
|
||||
void resetCadStats() override {
|
||||
_radio->resetCadStats();
|
||||
}
|
||||
void onCadOffsetChanged(int8_t offset) override {
|
||||
/* Staircase steps are hours apart — persisting immediately is
|
||||
* fine for flash wear and survives unexpected reboots. */
|
||||
_prefs.cad_offset = offset;
|
||||
savePrefs();
|
||||
}
|
||||
|
||||
mesh::DispatcherAction onRecvPacket(mesh::Packet* pkt) override;
|
||||
|
||||
void onAnonDataRecv(mesh::Packet* packet, const uint8_t* secret, const mesh::Identity& sender, uint8_t* data, size_t len) override;
|
||||
|
||||
@@ -148,6 +148,22 @@ protected:
|
||||
return _prefs.multi_acks;
|
||||
}
|
||||
|
||||
/* Adaptive CAD */
|
||||
int formatCadStatus(char* buf, int cap) override {
|
||||
return _radio->formatCadStatus(buf, cap);
|
||||
}
|
||||
void applyCadPrefs() override {
|
||||
_radio->setCadParams(_prefs.cad_auto != 0, _prefs.cad_offset,
|
||||
_prefs.cad_probe_interval);
|
||||
}
|
||||
void resetCadStats() override {
|
||||
_radio->resetCadStats();
|
||||
}
|
||||
void onCadOffsetChanged(int8_t offset) override {
|
||||
_prefs.cad_offset = offset;
|
||||
savePrefs();
|
||||
}
|
||||
|
||||
mesh::DispatcherAction onRecvPacket(mesh::Packet* pkt) override;
|
||||
|
||||
void onAdvertRecv(mesh::Packet* packet, const mesh::Identity& id, uint32_t timestamp, const uint8_t* app_data, size_t app_data_len) override;
|
||||
|
||||
Reference in new issue
Block a user