|
@@ -271,8 +271,8 @@ class MyMesh : public BaseChatMesh {
|
|
|
|
|
|
|
|
void saveContacts() {
|
|
void saveContacts() {
|
|
|
#if defined(NRF52_PLATFORM) || defined(STM32_PLATFORM)
|
|
#if defined(NRF52_PLATFORM) || defined(STM32_PLATFORM)
|
|
|
|
|
+ _fs->remove("/contacts3");
|
|
|
File file = _fs->open("/contacts3", FILE_O_WRITE);
|
|
File file = _fs->open("/contacts3", FILE_O_WRITE);
|
|
|
- if (file) { file.seek(0); file.truncate(); }
|
|
|
|
|
#elif defined(RP2040_PLATFORM)
|
|
#elif defined(RP2040_PLATFORM)
|
|
|
File file = _fs->open("/contacts3", "w");
|
|
File file = _fs->open("/contacts3", "w");
|
|
|
#else
|
|
#else
|
|
@@ -336,8 +336,8 @@ class MyMesh : public BaseChatMesh {
|
|
|
|
|
|
|
|
void saveChannels() {
|
|
void saveChannels() {
|
|
|
#if defined(NRF52_PLATFORM) || defined(STM32_PLATFORM)
|
|
#if defined(NRF52_PLATFORM) || defined(STM32_PLATFORM)
|
|
|
|
|
+ _fs->remove("/channels2");
|
|
|
File file = _fs->open("/channels2", FILE_O_WRITE);
|
|
File file = _fs->open("/channels2", FILE_O_WRITE);
|
|
|
- if (file) { file.seek(0); file.truncate(); }
|
|
|
|
|
#elif defined(RP2040_PLATFORM)
|
|
#elif defined(RP2040_PLATFORM)
|
|
|
File file = _fs->open("/channels2", "w");
|
|
File file = _fs->open("/channels2", "w");
|
|
|
#else
|
|
#else
|
|
@@ -393,8 +393,8 @@ class MyMesh : public BaseChatMesh {
|
|
|
sprintf(path, "/bl/%s", fname);
|
|
sprintf(path, "/bl/%s", fname);
|
|
|
|
|
|
|
|
#if defined(NRF52_PLATFORM) || defined(STM32_PLATFORM)
|
|
#if defined(NRF52_PLATFORM) || defined(STM32_PLATFORM)
|
|
|
|
|
+ _fs->remove(path);
|
|
|
File f = _fs->open(path, FILE_O_WRITE);
|
|
File f = _fs->open(path, FILE_O_WRITE);
|
|
|
- if (f) { f.seek(0); f.truncate(); }
|
|
|
|
|
#elif defined(RP2040_PLATFORM)
|
|
#elif defined(RP2040_PLATFORM)
|
|
|
File f = _fs->open(path, "w");
|
|
File f = _fs->open(path, "w");
|
|
|
#else
|
|
#else
|
|
@@ -483,10 +483,6 @@ class MyMesh : public BaseChatMesh {
|
|
|
return 0; // queue is empty
|
|
return 0; // queue is empty
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- void soundBuzzer() {
|
|
|
|
|
- // TODO
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
protected:
|
|
protected:
|
|
|
float getAirtimeBudgetFactor() const override {
|
|
float getAirtimeBudgetFactor() const override {
|
|
|
return _prefs.airtime_factor;
|
|
return _prefs.airtime_factor;
|
|
@@ -523,7 +519,9 @@ protected:
|
|
|
_serial->writeFrame(out_frame, 1 + PUB_KEY_SIZE);
|
|
_serial->writeFrame(out_frame, 1 + PUB_KEY_SIZE);
|
|
|
}
|
|
}
|
|
|
} else {
|
|
} else {
|
|
|
- soundBuzzer();
|
|
|
|
|
|
|
+ #ifdef DISPLAY_CLASS
|
|
|
|
|
+ ui_task.soundBuzzer(UIEventType::newContactMessage);
|
|
|
|
|
+ #endif
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
saveContacts();
|
|
saveContacts();
|
|
@@ -584,7 +582,9 @@ protected:
|
|
|
frame[0] = PUSH_CODE_MSG_WAITING; // send push 'tickle'
|
|
frame[0] = PUSH_CODE_MSG_WAITING; // send push 'tickle'
|
|
|
_serial->writeFrame(frame, 1);
|
|
_serial->writeFrame(frame, 1);
|
|
|
} else {
|
|
} else {
|
|
|
- soundBuzzer();
|
|
|
|
|
|
|
+ #ifdef DISPLAY_CLASS
|
|
|
|
|
+ ui_task.soundBuzzer(UIEventType::contactMessage);
|
|
|
|
|
+ #endif
|
|
|
}
|
|
}
|
|
|
#ifdef DISPLAY_CLASS
|
|
#ifdef DISPLAY_CLASS
|
|
|
ui_task.newMsg(path_len, from.name, text, offline_queue_len);
|
|
ui_task.newMsg(path_len, from.name, text, offline_queue_len);
|
|
@@ -635,7 +635,9 @@ protected:
|
|
|
frame[0] = PUSH_CODE_MSG_WAITING; // send push 'tickle'
|
|
frame[0] = PUSH_CODE_MSG_WAITING; // send push 'tickle'
|
|
|
_serial->writeFrame(frame, 1);
|
|
_serial->writeFrame(frame, 1);
|
|
|
} else {
|
|
} else {
|
|
|
- soundBuzzer();
|
|
|
|
|
|
|
+ #ifdef DISPLAY_CLASS
|
|
|
|
|
+ ui_task.soundBuzzer(UIEventType::channelMessage);
|
|
|
|
|
+ #endif
|
|
|
}
|
|
}
|
|
|
#ifdef DISPLAY_CLASS
|
|
#ifdef DISPLAY_CLASS
|
|
|
ui_task.newMsg(path_len, "Public", text, offline_queue_len);
|
|
ui_task.newMsg(path_len, "Public", text, offline_queue_len);
|
|
@@ -659,6 +661,12 @@ protected:
|
|
|
permissions |= cp & TELEM_PERM_LOCATION;
|
|
permissions |= cp & TELEM_PERM_LOCATION;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ if (_prefs.telemetry_mode_env == TELEM_MODE_ALLOW_ALL) {
|
|
|
|
|
+ permissions |= TELEM_PERM_ENVIRONMENT;
|
|
|
|
|
+ } else if (_prefs.telemetry_mode_env == TELEM_MODE_ALLOW_FLAGS) {
|
|
|
|
|
+ permissions |= cp & TELEM_PERM_ENVIRONMENT;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
if (permissions & TELEM_PERM_BASE) { // only respond if base permission bit is set
|
|
if (permissions & TELEM_PERM_BASE) { // only respond if base permission bit is set
|
|
|
telemetry.reset();
|
|
telemetry.reset();
|
|
|
telemetry.addVoltage(TELEM_CHANNEL_SELF, (float)board.getBattMilliVolts() / 1000.0f);
|
|
telemetry.addVoltage(TELEM_CHANNEL_SELF, (float)board.getBattMilliVolts() / 1000.0f);
|
|
@@ -822,7 +830,7 @@ public:
|
|
|
file.read((uint8_t *) &_prefs.tx_power_dbm, sizeof(_prefs.tx_power_dbm)); // 68
|
|
file.read((uint8_t *) &_prefs.tx_power_dbm, sizeof(_prefs.tx_power_dbm)); // 68
|
|
|
file.read((uint8_t *) &_prefs.telemetry_mode_base, sizeof(_prefs.telemetry_mode_base)); // 69
|
|
file.read((uint8_t *) &_prefs.telemetry_mode_base, sizeof(_prefs.telemetry_mode_base)); // 69
|
|
|
file.read((uint8_t *) &_prefs.telemetry_mode_loc, sizeof(_prefs.telemetry_mode_loc)); // 70
|
|
file.read((uint8_t *) &_prefs.telemetry_mode_loc, sizeof(_prefs.telemetry_mode_loc)); // 70
|
|
|
- file.read(pad, 1); // 71
|
|
|
|
|
|
|
+ file.read((uint8_t *) &_prefs.telemetry_mode_env, sizeof(_prefs.telemetry_mode_env)); // 71
|
|
|
file.read((uint8_t *) &_prefs.rx_delay_base, sizeof(_prefs.rx_delay_base)); // 72
|
|
file.read((uint8_t *) &_prefs.rx_delay_base, sizeof(_prefs.rx_delay_base)); // 72
|
|
|
file.read(pad, 4); // 76
|
|
file.read(pad, 4); // 76
|
|
|
file.read((uint8_t *) &_prefs.ble_pin, sizeof(_prefs.ble_pin)); // 80
|
|
file.read((uint8_t *) &_prefs.ble_pin, sizeof(_prefs.ble_pin)); // 80
|
|
@@ -861,6 +869,11 @@ public:
|
|
|
mesh::Utils::toHex(pub_key_hex, self_id.pub_key, 4);
|
|
mesh::Utils::toHex(pub_key_hex, self_id.pub_key, 4);
|
|
|
strcpy(_prefs.node_name, pub_key_hex);
|
|
strcpy(_prefs.node_name, pub_key_hex);
|
|
|
|
|
|
|
|
|
|
+ // if name is provided as a build flag, use that as default node name instead
|
|
|
|
|
+ #ifdef ADVERT_NAME
|
|
|
|
|
+ strcpy(_prefs.node_name, ADVERT_NAME);
|
|
|
|
|
+ #endif
|
|
|
|
|
+
|
|
|
// load persisted prefs
|
|
// load persisted prefs
|
|
|
if (_fs->exists("/new_prefs")) {
|
|
if (_fs->exists("/new_prefs")) {
|
|
|
loadPrefsInt("/new_prefs"); // new filename
|
|
loadPrefsInt("/new_prefs"); // new filename
|
|
@@ -913,8 +926,8 @@ public:
|
|
|
|
|
|
|
|
void savePrefs() {
|
|
void savePrefs() {
|
|
|
#if defined(NRF52_PLATFORM) || defined(STM32_PLATFORM)
|
|
#if defined(NRF52_PLATFORM) || defined(STM32_PLATFORM)
|
|
|
|
|
+ _fs->remove("/new_prefs");
|
|
|
File file = _fs->open("/new_prefs", FILE_O_WRITE);
|
|
File file = _fs->open("/new_prefs", FILE_O_WRITE);
|
|
|
- if (file) { file.seek(0); file.truncate(); }
|
|
|
|
|
#elif defined(RP2040_PLATFORM)
|
|
#elif defined(RP2040_PLATFORM)
|
|
|
File file = _fs->open("/new_prefs", "w");
|
|
File file = _fs->open("/new_prefs", "w");
|
|
|
#else
|
|
#else
|
|
@@ -938,7 +951,7 @@ public:
|
|
|
file.write((uint8_t *) &_prefs.tx_power_dbm, sizeof(_prefs.tx_power_dbm)); // 68
|
|
file.write((uint8_t *) &_prefs.tx_power_dbm, sizeof(_prefs.tx_power_dbm)); // 68
|
|
|
file.write((uint8_t *) &_prefs.telemetry_mode_base, sizeof(_prefs.telemetry_mode_base)); // 69
|
|
file.write((uint8_t *) &_prefs.telemetry_mode_base, sizeof(_prefs.telemetry_mode_base)); // 69
|
|
|
file.write((uint8_t *) &_prefs.telemetry_mode_loc, sizeof(_prefs.telemetry_mode_loc)); // 70
|
|
file.write((uint8_t *) &_prefs.telemetry_mode_loc, sizeof(_prefs.telemetry_mode_loc)); // 70
|
|
|
- file.write(pad, 1); // 71
|
|
|
|
|
|
|
+ file.write((uint8_t *) &_prefs.telemetry_mode_env, sizeof(_prefs.telemetry_mode_env)); // 71
|
|
|
file.write((uint8_t *) &_prefs.rx_delay_base, sizeof(_prefs.rx_delay_base)); // 72
|
|
file.write((uint8_t *) &_prefs.rx_delay_base, sizeof(_prefs.rx_delay_base)); // 72
|
|
|
file.write(pad, 4); // 76
|
|
file.write(pad, 4); // 76
|
|
|
file.write((uint8_t *) &_prefs.ble_pin, sizeof(_prefs.ble_pin)); // 80
|
|
file.write((uint8_t *) &_prefs.ble_pin, sizeof(_prefs.ble_pin)); // 80
|
|
@@ -983,7 +996,7 @@ public:
|
|
|
memcpy(&out_frame[i], &lon, 4); i += 4;
|
|
memcpy(&out_frame[i], &lon, 4); i += 4;
|
|
|
out_frame[i++] = 0; // reserved
|
|
out_frame[i++] = 0; // reserved
|
|
|
out_frame[i++] = 0; // reserved
|
|
out_frame[i++] = 0; // reserved
|
|
|
- out_frame[i++] = (_prefs.telemetry_mode_loc << 2) | (_prefs.telemetry_mode_base); // v5+
|
|
|
|
|
|
|
+ out_frame[i++] = (_prefs.telemetry_mode_env << 4) | (_prefs.telemetry_mode_loc << 2) | (_prefs.telemetry_mode_base); // v5+
|
|
|
out_frame[i++] = _prefs.manual_add_contacts;
|
|
out_frame[i++] = _prefs.manual_add_contacts;
|
|
|
|
|
|
|
|
uint32_t freq = _prefs.freq * 1000;
|
|
uint32_t freq = _prefs.freq * 1000;
|
|
@@ -1275,6 +1288,7 @@ public:
|
|
|
if (len >= 3) {
|
|
if (len >= 3) {
|
|
|
_prefs.telemetry_mode_base = cmd_frame[2] & 0x03; // v5+
|
|
_prefs.telemetry_mode_base = cmd_frame[2] & 0x03; // v5+
|
|
|
_prefs.telemetry_mode_loc = (cmd_frame[2] >> 2) & 0x03;
|
|
_prefs.telemetry_mode_loc = (cmd_frame[2] >> 2) & 0x03;
|
|
|
|
|
+ _prefs.telemetry_mode_env = (cmd_frame[2] >> 4) & 0x03;
|
|
|
}
|
|
}
|
|
|
savePrefs();
|
|
savePrefs();
|
|
|
writeOKFrame();
|
|
writeOKFrame();
|