meshtastic-firmware/kh-notes.md

83 wiersze
3.5 KiB
Markdown
Czysty Zwykły widok Historia

# Temporary notes to self: delete before sending PR.
Why sw update is budsted:
case ESP_GATTS_WRITE_EVT: {
//
if (param->write.handle == m_handle) {
if (param->write.is_prep) {
m_value.addPart(param->write.value, param->write.len);
} else {
setValue(param->write.value, param->write.len);
}
log_d(" - Response to write event: New value: handle: %.2x, uuid: %s",
getHandle(), getUUID().toString().c_str());
char* pHexData = BLEUtils::buildHexData(nullptr, param->write.value, param->write.len);
log_d(" - Data: length: %d, data: %s", param->write.len, pHexData);
free(pHexData);
Has a 100 byte limit, also it is converting to a fucking string
## misc todo
* DONE save auth and packet counts in NVS
* DONE code deep sleep, leave screen off if waked without button, enter sleep after packet sent or timeout
* DONE store our session keys to flash and if found, then at boot use them instead of joining.
* DONE dynamically probe for screen and if not installed - do not use
* test basic preshared key config and see if it works
* test more advanced auth and see if it works
* test that rejoin with advanced auth works
* test construct node id from macaddr
* test screen and axp192 probing
* DONE test that board works when we ignore display
* test deep sleep
* test deep sleep with gps & lora off
* edit readme to be platformio based
* if current position is near last reported position, only report once per hour
* measure sleep current / calculate battery life
* split things network code into a esp32 library on platformio
* make first public release of "t-beam tracker", empasize battery life and price
* turn on our led while we are on?
* experiment with larger SF factors for higher range
* include battery level in broadcast packet
* stop calling start join, instead just send a packet and the join attempt will happen automatically
## eventual / later TODO
* make longpress forget network joining / force rejoin
# deep sleep
## pre sleep
save packet count to NVS
save lora state to RTC ram
turn off GPS
turn off LORA
turn off screen - possibly can't use the axp because it kills i2c
turn off wifi (if using it)
enter deep sleep - waiting for 5 min timeout or button press
## on wake
turn on power the same as normal boot (except do not power on screen if we booted because of timeout - we will be running 'headless')
reinit all hardware
show boot screen (if screen is powered)
restore packet count from NVS
restore lora state from RTC ram (if possible)
wait for gps lock (max 5 seconds), when it happens send our packet
update screen (if screen powered)
send position via lora and wait for ack (or timeout after FIXME seconds)
if screen is on wait an extra 5 secs
enter deep sleep
# Packet count persistence algorithm:
On each entry to deep sleep, copy the packet count to flash filesystem. At boot read that value from the flash filesystem. SOLVED: Check flash filesystem wear rules and assume X sleeps per day. How many days is that?
https://docs.espressif.com/projects/esp-idf/en/latest/api-reference/storage/nvs_flash.html
https://esp32.com/viewtopic.php?t=3990
writing once a second a 64 byte NVS record (it is actually 32 bytes for an int key/val pair), that would wear out the flash in a year. Writing once every 5 minutes would be 300 years. yay! Do this.
On each wake from deep sleep, read the last known packet count from GPS BBR use it for future packet sends (if blank then skip). Each time we send a packet, update the count in the GPS RAM. As long as BBR ram doesn't die this will always work. PROBLEM: What if BBR RAM does die