Skip to content

Commit 8668136

Browse files
author
Scott Powell
committed
* companion: UITask now shows BLE PIN (when no connection)
* companion, HeltecV3: new installs, now chooses random BLE PIN * companion: prefs load/save improvements (sanitises bad values)
1 parent c2ae343 commit 8668136

File tree

3 files changed

+79
-10
lines changed

3 files changed

+79
-10
lines changed

examples/companion_radio/UITask.cpp

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,13 @@ static const uint8_t meshcore_logo [] PROGMEM = {
2121
0xe3, 0xe3, 0x8f, 0xff, 0x1f, 0xfc, 0x3c, 0x0e, 0x1f, 0xf8, 0xff, 0xf8, 0x70, 0x3c, 0x7f, 0xf8,
2222
};
2323

24-
void UITask::begin(const char* node_name, const char* build_date) {
24+
void UITask::begin(const char* node_name, const char* build_date, uint32_t pin_code) {
2525
_prevBtnState = HIGH;
2626
_auto_off = millis() + AUTO_OFF_MILLIS;
2727
clearMsgPreview();
2828
_node_name = node_name;
2929
_build_date = build_date;
30+
_pin_code = pin_code;
3031
_display->turnOn();
3132
}
3233

@@ -73,8 +74,16 @@ void UITask::renderCurrScreen() {
7374
sprintf(tmp, "Build: %s", _build_date);
7475
_display->setCursor(0, 32);
7576
_display->print(tmp);
76-
//_display->printf("freq : %03.2f sf %d\n", _prefs.freq, _prefs.sf);
77-
//_display->printf("bw : %03.2f cr %d\n", _prefs.bw, _prefs.cr);
77+
78+
if (_connected) {
79+
//_display->printf("freq : %03.2f sf %d\n", _prefs.freq, _prefs.sf);
80+
//_display->printf("bw : %03.2f cr %d\n", _prefs.bw, _prefs.cr);
81+
} else {
82+
_display->setTextSize(2);
83+
_display->setCursor(0, 43);
84+
sprintf(tmp, "Pin:%d", _pin_code);
85+
_display->print(tmp);
86+
}
7887
}
7988
}
8089

examples/companion_radio/UITask.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,19 @@ class UITask {
66
DisplayDriver* _display;
77
unsigned long _next_read, _next_refresh, _auto_off;
88
int _prevBtnState;
9+
bool _connected;
10+
uint32_t _pin_code;
911
const char* _node_name;
1012
const char* _build_date;
1113
char _origin[62];
1214
char _msg[80];
1315

1416
void renderCurrScreen();
1517
public:
16-
UITask(DisplayDriver& display) : _display(&display) { _next_read = _next_refresh = 0; }
17-
void begin(const char* node_name, const char* build_date);
18+
UITask(DisplayDriver& display) : _display(&display) { _next_read = _next_refresh = 0; _connected = false; }
19+
void begin(const char* node_name, const char* build_date, uint32_t pin_code);
1820

21+
void setHasConnection(bool connected) { _connected = connected; }
1922
void clearMsgPreview();
2023
void showMsgPreview(uint8_t path_len, const char* from_name, const char* text);
2124
void loop();

examples/companion_radio/main.cpp

Lines changed: 62 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ struct NodePrefs { // persisted to file
187187
uint8_t tx_power_dbm;
188188
uint8_t unused[3];
189189
float rx_delay_base;
190+
uint32_t ble_pin;
190191
};
191192

192193
class MyMesh : public BaseChatMesh {
@@ -219,6 +220,11 @@ class MyMesh : public BaseChatMesh {
219220
if (!_identity_store->load("_main", self_id)) {
220221
self_id = mesh::LocalIdentity(&trng); // create new random identity
221222
saveMainIdentity(self_id);
223+
224+
#if defined(BLE_PIN_CODE) && defined(DISPLAY_CLASS)
225+
// start with randomly assigned BLE pin
226+
_prefs.ble_pin = trng.nextInt(100000, 999999);
227+
#endif
222228
}
223229
}
224230

@@ -611,6 +617,9 @@ class MyMesh : public BaseChatMesh {
611617
_prefs.bw = LORA_BW;
612618
_prefs.cr = LORA_CR;
613619
_prefs.tx_power_dbm = LORA_TX_POWER;
620+
#ifdef BLE_PIN_CODE
621+
_prefs.ble_pin = BLE_PIN_CODE;
622+
#endif
614623
//_prefs.rx_delay_base = 10.0f; enable once new algo fixed
615624
}
616625

@@ -631,7 +640,34 @@ class MyMesh : public BaseChatMesh {
631640
if (_fs->exists("/node_prefs")) {
632641
File file = _fs->open("/node_prefs");
633642
if (file) {
634-
file.read((uint8_t *) &_prefs, sizeof(_prefs));
643+
uint8_t pad[8];
644+
645+
file.read((uint8_t *) &_prefs.airtime_factor, sizeof(float)); // 0
646+
file.read((uint8_t *) _prefs.node_name, sizeof(_prefs.node_name)); // 4
647+
file.read(pad, 4); // 36
648+
file.read((uint8_t *) &_prefs.node_lat, sizeof(_prefs.node_lat)); // 40
649+
file.read((uint8_t *) &_prefs.node_lon, sizeof(_prefs.node_lon)); // 48
650+
file.read((uint8_t *) &_prefs.freq, sizeof(_prefs.freq)); // 56
651+
file.read((uint8_t *) &_prefs.sf, sizeof(_prefs.sf)); // 60
652+
file.read((uint8_t *) &_prefs.cr, sizeof(_prefs.cr)); // 61
653+
file.read((uint8_t *) &_prefs.reserved1, sizeof(_prefs.reserved1)); // 62
654+
file.read((uint8_t *) &_prefs.reserved2, sizeof(_prefs.reserved2)); // 63
655+
file.read((uint8_t *) &_prefs.bw, sizeof(_prefs.bw)); // 64
656+
file.read((uint8_t *) &_prefs.tx_power_dbm, sizeof(_prefs.tx_power_dbm)); // 68
657+
file.read((uint8_t *) _prefs.unused, sizeof(_prefs.unused)); // 69
658+
file.read((uint8_t *) &_prefs.rx_delay_base, sizeof(_prefs.rx_delay_base)); // 72
659+
file.read(pad, 4); // 76
660+
file.read((uint8_t *) &_prefs.ble_pin, sizeof(_prefs.ble_pin)); // 80
661+
662+
// sanitise bad pref values
663+
_prefs.rx_delay_base = constrain(_prefs.rx_delay_base, 0, 20.0f);
664+
_prefs.airtime_factor = constrain(_prefs.airtime_factor, 0, 9.0f);
665+
_prefs.freq = constrain(_prefs.freq, 400.0f, 2500.0f);
666+
_prefs.bw = constrain(_prefs.bw, 62.5f, 500.0f);
667+
_prefs.sf = constrain(_prefs.sf, 7, 12);
668+
_prefs.cr = constrain(_prefs.cr, 5, 8);
669+
_prefs.tx_power_dbm = constrain(_prefs.tx_power_dbm, 1, MAX_LORA_TX_POWER);
670+
635671
file.close();
636672
}
637673
}
@@ -650,6 +686,7 @@ class MyMesh : public BaseChatMesh {
650686
}
651687

652688
const char* getNodeName() { return _prefs.node_name; }
689+
uint32_t getBLEPin() { return _prefs.ble_pin; }
653690

654691
void startInterface(BaseSerialInterface& serial) {
655692
_serial = &serial;
@@ -664,7 +701,26 @@ class MyMesh : public BaseChatMesh {
664701
File file = _fs->open("/node_prefs", "w", true);
665702
#endif
666703
if (file) {
667-
file.write((const uint8_t *)&_prefs, sizeof(_prefs));
704+
uint8_t pad[8];
705+
memset(pad, 0, sizeof(pad));
706+
707+
file.write((uint8_t *) &_prefs.airtime_factor, sizeof(float)); // 0
708+
file.write((uint8_t *) _prefs.node_name, sizeof(_prefs.node_name)); // 4
709+
file.write(pad, 4); // 36
710+
file.write((uint8_t *) &_prefs.node_lat, sizeof(_prefs.node_lat)); // 40
711+
file.write((uint8_t *) &_prefs.node_lon, sizeof(_prefs.node_lon)); // 48
712+
file.write((uint8_t *) &_prefs.freq, sizeof(_prefs.freq)); // 56
713+
file.write((uint8_t *) &_prefs.sf, sizeof(_prefs.sf)); // 60
714+
file.write((uint8_t *) &_prefs.cr, sizeof(_prefs.cr)); // 61
715+
file.write((uint8_t *) &_prefs.reserved1, sizeof(_prefs.reserved1)); // 62
716+
file.write((uint8_t *) &_prefs.reserved2, sizeof(_prefs.reserved2)); // 63
717+
file.write((uint8_t *) &_prefs.bw, sizeof(_prefs.bw)); // 64
718+
file.write((uint8_t *) &_prefs.tx_power_dbm, sizeof(_prefs.tx_power_dbm)); // 68
719+
file.write((uint8_t *) _prefs.unused, sizeof(_prefs.unused)); // 69
720+
file.write((uint8_t *) &_prefs.rx_delay_base, sizeof(_prefs.rx_delay_base)); // 72
721+
file.write(pad, 4); // 76
722+
file.write((uint8_t *) &_prefs.ble_pin, sizeof(_prefs.ble_pin)); // 80
723+
668724
file.close();
669725
}
670726
}
@@ -1094,6 +1150,7 @@ class MyMesh : public BaseChatMesh {
10941150
}
10951151

10961152
#ifdef DISPLAY_CLASS
1153+
ui_task.setHasConnection(_serial->isConnected());
10971154
ui_task.loop();
10981155
#endif
10991156
}
@@ -1189,7 +1246,7 @@ void setup() {
11891246
#ifdef BLE_PIN_CODE
11901247
char dev_name[32+10];
11911248
sprintf(dev_name, "MeshCore-%s", the_mesh.getNodeName());
1192-
serial_interface.begin(dev_name, BLE_PIN_CODE);
1249+
serial_interface.begin(dev_name, the_mesh.getBLEPin());
11931250
#else
11941251
pinMode(WB_IO2, OUTPUT);
11951252
serial_interface.begin(Serial);
@@ -1205,7 +1262,7 @@ void setup() {
12051262
#elif defined(BLE_PIN_CODE)
12061263
char dev_name[32+10];
12071264
sprintf(dev_name, "MeshCore-%s", the_mesh.getNodeName());
1208-
serial_interface.begin(dev_name, BLE_PIN_CODE);
1265+
serial_interface.begin(dev_name, the_mesh.getBLEPin());
12091266
#else
12101267
serial_interface.begin(Serial);
12111268
#endif
@@ -1215,7 +1272,7 @@ void setup() {
12151272
#endif
12161273

12171274
#ifdef DISPLAY_CLASS
1218-
ui_task.begin(the_mesh.getNodeName(), FIRMWARE_BUILD_DATE);
1275+
ui_task.begin(the_mesh.getNodeName(), FIRMWARE_BUILD_DATE, the_mesh.getBLEPin());
12191276
#endif
12201277
}
12211278

0 commit comments

Comments
 (0)