meshtastic-firmware/TODO.md

98 wiersze
6.8 KiB
Markdown
Czysty Zwykły widok Historia

2020-02-01 17:46:25 +00:00
# High priority
2020-02-07 05:26:40 +00:00
* check in my radiolib fixes
2020-02-07 00:07:50 +00:00
* test raw device access without a manager in the way
* sim gps data for nodes that don't have hardware
* figure out what is busted with rx
2020-02-06 18:58:19 +00:00
* send our owner info at boot, reply if we see anyone send theirs
2020-02-06 06:13:27 +00:00
* implement regen owner and radio prefs
2020-02-03 17:13:19 +00:00
* confirm second device receives that gps message and updates device db
2020-02-05 05:24:11 +00:00
* save our node db (and any rx packets waiting for phone) to flash - see DeviceState protobuf
2020-02-04 05:03:20 +00:00
* port my graphics library over from the sw102, same screen controller and resolution
2020-02-03 18:00:53 +00:00
* very occasionally send our position and user packet (if for nothing else so that other nodes update last_seen)
2020-02-03 17:13:19 +00:00
* switch to my gui layout manager
* make jtag work on second board
2020-02-03 03:08:04 +00:00
* make basic gui. different screens: debug, one page for each user in the user db, last received text message
2020-02-01 17:46:25 +00:00
# Medium priority
2020-02-06 06:13:27 +00:00
* Heltec LoRa32 has 8MB flash, use a bigger partition table if needed - TTGO is 4MB but has PSRAM
* use two different env flags for ttgo vs lora32. https://docs.platformio.org/en/latest/ide/vscode.html#key-bindings
2020-02-05 05:24:11 +00:00
* don't send location packets if we haven't moved
2020-02-03 17:13:19 +00:00
* send correct hw vendor in the bluetooth info - needed so the android app can update different radio models
2020-02-02 02:45:27 +00:00
* use https://lastminuteengineers.com/esp32-sleep-modes-power-consumption/ association sleep pattern to save power - but see https://github.com/espressif/esp-idf/issues/2070
2020-02-01 19:56:32 +00:00
* correctly map nodeids to nodenums, currently we just do a proof of concept by always doing a broadcast
2020-02-01 17:46:25 +00:00
* add interrupt detach/sleep mode config to lora radio so we can enable deepsleep without panicing
2020-02-01 19:25:07 +00:00
* scrub default radio config settings for bandwidth/range/speed
* use a freertos thread to remain blocked reading from recvfromAckTimeout, so that we don't need to keep polling it from our main thread
* override peekAtMessage so we can see any messages that pass through our node (even if not broadcast)? would that be useful?
2020-02-02 00:05:12 +00:00
* sendToMesh can currently block for a long time, instead have it just queue a packet for a radio freertos thread
* see section 7.3 of https://cdn.sparkfun.com/assets/learn_tutorials/8/0/4/RFM95_96_97_98W.pdf and have hope radio wake only when a valid packet is received. Possibly even wake the ESP32 from deep sleep via GPIO.
2020-02-02 00:05:12 +00:00
* fix the logo
* do debug logging to android over bluetooth
* break out my bluetooth OTA software as a seperate library so others can use it
2020-02-03 18:00:53 +00:00
* never enter deep sleep while connected to USB power (but still go to other low power modes)
2020-02-03 19:15:17 +00:00
* How do avalanche beacons work? Could this do that as well? possibly by using beacon mode feature of the RF95?
2020-02-04 01:13:41 +00:00
* use std::map<BLECharacteristic*, std::string> in node db
2020-02-01 19:25:07 +00:00
2020-02-06 15:39:21 +00:00
# Low power consumption tasks
* stop using loop() instead use a job queue and let cpu sleep
* move lora rx/tx to own thread and block on IO
* measure power consumption and calculate battery life assuming no deep sleep
* do lowest sleep level possible where BT still works during normal sleeping, make sure cpu stays in that mode unless lora rx packet happens, bt rx packet happens or button press happens
* optionally do lora messaging only during special scheduled intervals (unless nodes are told to go to low latency mode), then deep sleep except during those intervals - before implementing calculate what battery life would be with this feature
2020-02-06 18:58:19 +00:00
# dynamic nodenum assignment tasks
we currently do the following crap solution:
hardwire nodenums based on macaddr. when node boots it broadcasts its Owner info (which includes our macaddr). If any node receives Owner messages, the other nodes reply with their owner info.
Really should instead do something like: new node sends its owner info as a provisional request. If any other node shows that nodenum in use by a different macaddr, they reply with NodeDeny.
If the node doesn't get denied within X seconds it then sends the info as a non provisional message (and other nodes update their node db)
But fixme, think about this and look for standard solutions - it will have problems when meshes separate change and then rejoin.
2020-02-01 19:25:07 +00:00
# Pre-beta priority
2020-02-06 18:58:19 +00:00
* cope with nodes that have 0xff or 0x00 as the last byte of their mac
2020-02-06 15:39:21 +00:00
* use variable length arduino Strings in protobufs (instead of current fixed buffers)
2020-02-02 16:17:45 +00:00
* don't even power on bluetooth until we have some data to send to the android phone. Most of the time we should be sleeping in a lowpower "listening for lora" only mode. Once we have some packets for the phone, then power on bluetooth
until the phone pulls those packets. Ever so often power on bluetooth just so we can see if the phone wants to send some packets. Possibly might need ULP processor to help with this wake process.
2020-02-02 02:45:27 +00:00
* do hibernation mode to get power draw down to 2.5uA https://lastminuteengineers.com/esp32-sleep-modes-power-consumption/
2020-02-01 19:25:07 +00:00
* make sure main cpu is not woken for packets with bad crc or not addressed to this node - do that in the radio hw
* enable fast init inside the gps chip
* dynamically select node nums
* triple check fcc compliance
* allow setting full radio params from android
2020-02-02 16:17:45 +00:00
* pick channel center frequency based on name? "dolphin" would hash to 900Mhz, "cat" to 905MHz etc? Or is that too opaque?
* scan to find channels with low background noise?
* share channel settings over Signal (or qr code) by embedding an an URL which is handled by the MeshUtil app.
2020-02-03 02:33:46 +00:00
* make jtag debugger id stable: https://askubuntu.com/questions/49910/how-to-distinguish-between-identical-usb-to-serial-adapters
2020-02-01 17:46:25 +00:00
2020-02-02 00:05:12 +00:00
# Low priority
* add a watchdog timer
2020-02-06 16:18:20 +00:00
* fix GPS.zeroOffset calculation it is wrong
* handle millis() rollover in GPS.getTime - otherwise we will break after 50 days
2020-02-02 21:37:02 +00:00
* reneable the bluetooth battely level service on the T-BEAM, because we can read battery level there
2020-02-02 00:05:12 +00:00
* report esp32 device code bugs back to the mothership via android
2020-02-01 17:46:25 +00:00
# Done
* change the partition table to take advantage of the 4MB flash on the wroom: http://docs.platformio.org/en/latest/platforms/espressif32.html#partition-tables
2020-02-01 19:25:07 +00:00
* wrap in nice MeshRadio class
* add mesh send & rx
2020-02-03 03:08:04 +00:00
* make message send from android go to service, then to mesh radio
* make message receive from radio go through to android
2020-02-03 03:20:01 +00:00
* test loopback tx/rx path code without using radio
* notify phone when rx packets arrive, currently the phone polls at startup only
* figure out if we can use PA_BOOST - yes, it seems to be on both boards
* implement new ble characteristics
2020-02-05 05:24:11 +00:00
* have MeshService keep a node DB by sniffing user messages
* have a state machine return the correct FromRadio packet to the phone, it isn't always going to be a MeshPacket. Do a notify on fromnum to force the radio to read our state machine generated packets
2020-02-06 18:58:19 +00:00
* send my_node_num when phone sends WantsNodes
* have meshservice periodically send location data on mesh (if device has a GPS)
* implement getCurrentTime() - set based off gps but then updated locally
* make default owner record have valid usernames
2020-02-07 05:26:40 +00:00
* message loop between node 0x28 and 0x7c