meshtastic-firmware/docs/software/TODO.md

295 wiersze
18 KiB
Markdown
Czysty Zwykły widok Historia

2020-06-17 22:45:49 +00:00
# Geeksville's current work queue
2020-02-21 11:48:13 +00:00
2020-06-17 22:45:49 +00:00
You probably don't care about this section - skip to the next one.
2021-03-03 03:49:09 +00:00
## 1.2 cleanup & multichannel support:
2021-02-16 07:41:52 +00:00
2021-03-17 12:29:27 +00:00
* before next relase: test empty channel sets on android
* test link sharing on android
* DONE cleanup the external notification and serial plugins
2021-03-13 05:14:27 +00:00
* non ack version of stress test fails sometimes!
2021-03-13 00:30:07 +00:00
* timestamps on oled screen are wrong - don't seem to be updating based on message rx
* luxon bug report - seeing rx acks for nodes that are not on the network
* channel hash suffixes are wrong on android
2021-03-13 05:14:27 +00:00
* tx fault test has a bug #734
* DONE move device types into an enum in nodeinfo
* fix android to use new device types for firmware update
2021-03-13 05:14:27 +00:00
2021-03-12 07:47:00 +00:00
* cdcacm bug on nrf52: emittx thinks it emitted but client sees nothing. works again later
* nrf52: segger logs have errors in formatting that should be impossible (because not going through serial, try stalling on segger)
2021-02-21 04:59:47 +00:00
* DONE call RouterPlugin for *all* packets - not just Router packets
* DONE generate channel hash from the name of the channel+the psk (not just one or the other)
* DONE send a hint that can be used to select which channel to try and hash against with each message
2021-02-17 05:06:23 +00:00
* DONE remove deprecated
* DONE fix setchannel in phoneapi.cpp
* DONE set mynodeinfo.max_channels
* DONE set mynodeinfo.num_bands (formerly num_channels)
2021-02-21 04:59:47 +00:00
* DONE fix sniffing of non Routing packets
2021-02-22 02:26:11 +00:00
* DONE enable remote setttings access by moving settings operations into a regular plugin (move settings ops out of PhoneAPI)
2021-02-17 08:17:46 +00:00
* DONE move portnum up?
2021-02-17 11:01:20 +00:00
* DONE remove region specific builds from the firmware
2021-02-23 06:35:34 +00:00
* DONE test single channel without python
* DONE Use "default" for name if name is empty
* DONE fix python data packet receiving (nothing showing in log?)
2021-02-27 06:42:07 +00:00
* DONE implement 'get channels' Admin plugin operation
* DONE use get-channels from python
2021-03-03 03:46:09 +00:00
* DONE use get channels & get settings from android
2021-03-04 14:09:02 +00:00
* DONE use set-channel from python
2021-03-03 03:46:09 +00:00
* DONE make settings changes from python work
* DONE pthon should stop fetching channels once we've reached our first empty channel definition (hasSettings == true)
* DONE add check for old devices with new API library
* DONE release python api
* DONE release protobufs
* DONE release to developers
2021-03-04 14:09:02 +00:00
* DONE fix setch-fast in python tool
2021-03-08 04:03:04 +00:00
* turn off fault 8: https://github.com/meshtastic/Meshtastic-device/issues/734
* age out pendingrequests in the python API
* DONE stress test channel download from python, sometimes it seems like we don't get all replies, bug was due to simultaneous android connection
2021-03-05 03:44:45 +00:00
* DONE combine acks and responses in a single message if possible (do routing plugin LAST and drop ACK if someone else has already replied)
* DONE don't send packets we received from the phone BACK TOWARDS THE PHONE (possibly use fromnode 0 for packets the phone sends?)
2021-03-03 03:46:09 +00:00
* fix 1.1.50 android debug panel display
2021-03-06 06:21:20 +00:00
* DONE test android channel setting
* DONE release to users
2021-03-04 14:09:02 +00:00
* DONE warn in android app about unset regions
* DONE use set-channel from android
2021-03-04 03:29:55 +00:00
* DONE add gui in android app for setting region
2021-03-11 05:02:00 +00:00
* DONE clean up python channel usage
* DONE use bindToChannel to limit admin access for remote nodes
2021-03-12 06:10:36 +00:00
* DONE move channels and radio config out of device settings
* test remote info and remote settings changes
2021-03-04 14:09:02 +00:00
* make python tests more exhaustive
* pick default random admin key
* exclude admin channels from URL?
* make a way to share just secondary channels via URL
* use single byte 'well known' channel names for the four default channel names (longslow etc), and for admin, gpio, etc...
* use presence of gpio channel to enable gpio ops, same for serial etc...
* restrict gpio & serial & settings operations to the admin channel (unless local to the current node)
* add channel restrictions for plugins (and restrict routing plugin to the "control" channel)
* stress test multi channel
2021-03-03 03:46:09 +00:00
* investigate @mc-hamster report of heap corruption
* DONE use set-user from android
2021-03-11 01:59:54 +00:00
* generalize the concept of "shortstrings" use it for both PSKs and well known channel names. Possibly use a ShortString class.
2021-02-23 06:45:02 +00:00
* use portuino TCP connection to debug with python API
2021-02-23 06:35:34 +00:00
* document the relationship between want_response (indicating remote node received it) and want_ack (indicating that this message should be sent reliably - and also get acks from the first rx node and naks if it is never delivered)
2021-03-03 03:46:09 +00:00
* DONE android should stop fetching channels once we've reached our first empty channel definition (hasSettings == true)
2021-03-03 03:49:09 +00:00
* DONE warn in python api if we are too new to talk to the device code
* DONE make a post warning about 1.2, telling how to stay on old android & python clients. link to this from the android dialog message and python version warning.
2021-02-27 06:42:07 +00:00
* DONE "FIXME - move the radioconfig/user/channel READ operations into SettingsMessage as well"
2021-02-22 02:26:11 +00:00
* DONE scrub protobufs to make sure they are absoloute minimum wiresize (in particular Data, ChannelSets and positions)
2021-03-03 03:46:09 +00:00
* DONE change syncword (now ox2b)
2021-02-17 08:17:46 +00:00
* allow chaning packets in single transmission - to increase airtime efficiency and amortize packet overhead
2021-02-17 11:01:20 +00:00
* DONE move most parts of meshpacket into the Data packet, so that we can chain multiple Data for sending when they all have a common destination and key.
* when selecting a MeshPacket for transmit, scan the TX queue for any Data packets we can merge together as a WirePayload. In the low level send/rx code expand that into multiple MeshPackets as needed (thus 'hiding' from MeshPacket that over the wire we send multiple datapackets
* confirm we are still calling the plugins for messages inbound from the phone (or generated locally)
2021-02-21 04:59:47 +00:00
* confirm we are still multi hop routing flood broadcasts
* confirm we are still doing resends on unicast reliable packets
* add history to routed packets: https://meshtastic.discourse.group/t/packet-source-tracking/2764/2
2021-02-21 04:59:47 +00:00
* add support for full DSR unicast delivery
2021-02-17 05:06:23 +00:00
* DONE move acks into routing
* DONE make all subpackets different versions of data
* DONE move routing control into a data packet
2021-03-03 03:46:09 +00:00
* have phoneapi done via plugin (will allow multiple simultaneous API clients - stop disabling BLE while using phone API)
2021-02-23 03:43:30 +00:00
* DONE figure out how to add micro_delta to position, make it so that phone apps don't need to understand it?
2021-02-17 05:06:23 +00:00
* only send battery updates a max of once a minute
2021-02-23 03:43:30 +00:00
* add python channel selection for sending
* DONE record recevied channel in meshpacket
2021-02-21 04:59:47 +00:00
* test remote settings operations (confirm it works 3 hops away)
2021-03-03 03:46:09 +00:00
* DONE make a primaryChannel global and properly maintain it when the phone sends setChannel
* DONE move setCrypto call into packet send and packet decode code
2021-02-17 11:01:20 +00:00
* implement 'small location diffs' change
2021-02-16 07:41:52 +00:00
* move battery level out of position?
2021-03-11 01:59:54 +00:00
* consider "A special exception (FIXME, not sure if this is a good idea) - packets that arrive on the local interface
2021-03-11 05:02:00 +00:00
are allowed on any channel (this lets the local user do anything)." Probably by adding a "secure_local_interface" settings bool.
2021-02-16 07:41:52 +00:00
* DOUBLE CHECK android app can still upgrade 1.1 and 1.0 loads
2021-01-28 02:30:24 +00:00
eink:
* DONE check email of reported issues
* DONE turn off vbus driving (in bootloader)
2021-01-28 02:30:24 +00:00
* new battery level sensing
* current draw no good
2021-01-28 02:30:24 +00:00
* DONE: fix backlight
2021-03-08 09:09:35 +00:00
* DONE - USB is busted because of power enable mode?
* test CPU voltage? something is bad with RAM (removing eink module does not help)
2021-03-08 09:09:35 +00:00
* test that board leaves bootloader always
* test USB - works in bootloader
* test LEDs
* Test BME280
* test gps
* check GPS fast locking
* tested! dlora
* test eink backlight
* tested! eink
* test buttons
* test battery charging
* test serial flash
* send updated app and bootloader image
2021-01-28 02:30:24 +00:00
* OHH BME280! THAT IS GREAT!
* make new screen work, ask for datasheet
* say I think you could ship this
* leds seem busted
2021-03-08 09:09:35 +00:00
* fix hw_model: "nrf52unknown"
* use larger icon for meshtastic logo
2021-01-28 02:30:24 +00:00
* send email about variants & faster flash programming - https://github.com/geeksville/Meshtastic-esp32/commit/f110225173a77326aac029321cdb6491bfa640f6
* send PR for bootloader
* fix nrf52 time/date
* send new master bin file
* send email about low power mode problems
* support new flash chip in appload, possibly use low power mode
* swbug! stuck busy tx occurred!
For app cleanup:
* use structured logging to kep logs in ram. Also send logs as packets to api clients
* DONE writeup nice python options docs (common cases, link to protobuf docs)
* have android app link to user manual
* DONE only do wantReplies once per packet type, if we change network settings force it again
* update positions and nodeinfos based on packets we just merely witness on the mesh. via isPromsciousPort bool, remove sniffing
2020-12-10 03:45:22 +00:00
* DONE make device build always have a valid version
* DONE do fixed position bug https://github.com/meshtastic/Meshtastic-device/issues/536
2020-12-11 02:03:46 +00:00
* DONE check build guide
* DONE write devapi user guide
2020-12-08 00:16:58 +00:00
* DONE update android code: https://developer.android.com/topic/libraries/view-binding/migration
* DONE test GPIO watch
2020-12-15 08:13:16 +00:00
* DONE set --set-chan-fast, --set-chan-default
2020-12-13 04:57:37 +00:00
* writeup docs on gpio
2020-12-13 07:59:26 +00:00
* DONE make python ping command
2020-12-13 04:57:37 +00:00
* DONE make hello world example service
* DONE have python tool check max packet size before sending to device
2020-12-08 00:16:58 +00:00
* DONE if request was sent reliably, send reply reliably
2020-12-05 02:27:04 +00:00
* DONE require a recent python api to talk to these new device loads
* DONE require a recent android app to talk to these new device loads
* DONE fix handleIncomingPosition
* DONE move want_replies handling into plugins
2020-12-08 00:16:58 +00:00
* DONE on android for received positions handle either old or new positions / user messages
2020-12-13 04:57:37 +00:00
* DONE on android side send old or new positions as needed / user messages
* DONE test python side handle new position/user messages
2020-12-08 00:16:58 +00:00
* DONE make a gpio example. --gpiowrb 4 1, --gpiord 0x444, --gpiowatch 0x3ff
2020-12-05 00:46:19 +00:00
* DONE fix position sending to use new plugin
2020-12-05 02:14:15 +00:00
* DONE Add SinglePortNumPlugin - as the new most useful baseclass
2020-12-05 00:46:19 +00:00
* DONE move positions into regular data packets (use new app framework)
* DONE move user info into regular data packets (use new app framework)
2020-12-10 03:45:22 +00:00
* DONE test that positions, text messages and user info still work
* DONE test that position, text messages and user info work properly with new android app and old device code
2020-12-26 05:36:21 +00:00
* DONE do UDP tunnel
* DONE fix the RTC drift bug
2020-12-10 03:45:22 +00:00
* move python ping functionality into device, reply with rxsnr info
2020-12-08 00:16:58 +00:00
* use channels for gpio security https://github.com/meshtastic/Meshtastic-device/issues/104
2020-12-11 01:11:53 +00:00
* MeshPackets for sending should be reference counted so that API clients would have the option of checking sent status (would allow removing the nasty 30 sec timer in gpio watch sending)
2020-10-30 09:05:32 +00:00
For high speed/lots of devices/short range tasks:
2020-09-26 13:50:54 +00:00
2020-10-30 09:05:32 +00:00
- When guessing numhops for sending: if I've heard from many local (0 hop neighbors) decrease hopcount by 2 rather than 1.
This should nicely help 'router' nodes do the right thing when long range, or if there are many local nodes for short range.
- fix timeouts/delays to be based on packet length at current radio settings
2020-09-26 13:50:54 +00:00
2020-07-21 18:46:39 +00:00
* update faq with antennas https://meshtastic.discourse.group/t/range-test-ideas-requested/738/2
* update faq on recommended android version and phones
* add help link inside the app, reference a page on the wiki
* turn on amazon reviews support
* add a tablet layout (with map next to messages) in the android app
2020-07-19 21:59:53 +00:00
2020-12-04 10:54:00 +00:00
# Old docs to merge
MESH RADIO PROTOCOL
Old TODO notes on the mesh radio protocol, merge into real docs someday...
for each named group we have a pre-shared key known by all group members and
wrapped around the device. you can only be in one group at a time (FIXME?!) To
join the group we read a qr code with the preshared key and ParamsCodeEnum. that
gets sent via bluetooth to the device. ParamsCodeEnum maps to a set of various
radio params (regulatory region, center freq, SF, bandwidth, bitrate, power
etc...) so all members of the mesh can have their radios set the same way.
once in that group, we can talk between 254 node numbers.
to get our node number (and announce our presence in the channel) we pick a
random node number and broadcast as that node with WANT-NODENUM(my globally
unique name). If anyone on the channel has seen someone _else_ using that name
within the last 24 hrs(?) they reply with DENY-NODENUM. Note: we might receive
multiple denies. Note: this allows others to speak up for some other node that
might be saving battery right now. Any time we hear from another node (for any
message type), we add that node number to the unpickable list. To dramatically
decrease the odds a node number we request is already used by someone. If no one
denies within TBD seconds, we assume that we have that node number. As long as
we keep talking to folks at least once every 24 hrs, others should remember we
have it.
Once we have a node number we can broadcast POSITION-UPDATE(my globally unique
name, lat, lon, alt, amt battery remaining). All receivers will use this to a)
update the mapping of who is at what node nums, b) the time of last rx, c)
position. If we haven't heard from that node in a while we reply to that node
(only) with our current POSITION_UPDATE state - so that node (presumably just
rejoined the network) can build a map of all participants.
We will periodically broadcast POSITION-UPDATE as needed based on distance moved
or a periodic minimum heartbeat.
If user wants to send a text they can SEND_TEXT(dest user, short text message).
Dest user is a node number, or 0xff for broadcast.
2020-02-01 17:46:25 +00:00
# Medium priority
2020-02-21 11:48:13 +00:00
2020-06-19 20:27:31 +00:00
Items to complete before 1.0.
2020-02-15 02:51:49 +00:00
2020-06-19 20:27:31 +00:00
# Post 1.0 ideas
2020-02-01 19:25:07 +00:00
2020-06-12 16:01:28 +00:00
- finish DSR for unicast
- check fcc rules on duty cycle. we might not need to freq hop. https://www.sunfiretesting.com/LoRa-FCC-Certification-Guide/ . Might need to add enforcement for europe though.
2020-03-19 02:28:55 +00:00
- make a no bluetooth configured yet screen - include this screen in the loop if the user hasn't yet paired
- if radio params change fundamentally, discard the nodedb
2020-06-12 16:01:28 +00:00
- re-enable the bluetooth battery level service on the T-BEAM
- provide generalized (but slow) internet message forwarding service if one of our nodes has internet connectivity (MQTT) [ Not a requirement but a personal interest ]
2020-02-01 17:46:25 +00:00
2020-06-19 20:27:31 +00:00
# Low priority ideas
2020-02-21 11:48:13 +00:00
2020-02-15 02:51:49 +00:00
Items after the first final candidate release.
2020-02-02 00:05:12 +00:00
2020-07-24 17:12:25 +00:00
- implement nimble battery level service
- Nimble implement device info service remaining fields (hw version etc)
2020-07-23 04:26:32 +00:00
- Turn on RPA addresses for the device side in Nimble
- Try to teardown less of the Nimble protocol stack across sleep
2020-06-16 22:01:39 +00:00
- dynamic frequency scaling could save a lot of power on ESP32, but it seems to corrupt uart (even with ref_tick set correctly)
- Change back to using a fixed sized MemoryPool rather than MemoryDynamic (see bug #149)
2020-06-12 16:01:28 +00:00
- scan to find channels with low background noise? (Use CAD mode of the RF95 to automatically find low noise channels)
- If the phone doesn't read fromradio mailbox within X seconds, assume the phone is gone and we can stop queing location msgs
for it (because it will redownload the nodedb when it comes back)
- add frequency hopping, dependent on the gps time, make the switch moment far from the time anyone is going to be transmitting
- assign every "channel" a random shared 8 bit sync word (per 4.2.13.6 of datasheet) - use that word to filter packets before even checking CRC. This will ensure our CPU will only wake for packets on our "channel"
- the BLE stack is leaking about 200 bytes each time we go to light sleep
- use fuse bits to store the board type and region. So one load can be used on all boards
- Don't store position packets in the to phone fifo if we are disconnected. The phone will get that info for 'free' when it
fetches the fresh nodedb.
- Use the RFM95 sequencer to stay in idle mode most of the time, then automatically go to receive mode and automatically go from transmit to receive mode. See 4.2.8.2 of manual.
2020-06-12 22:40:36 +00:00
- Use fixed32 for node IDs, packetIDs, successid, failid, and lat/lon - will require all nodes to be updated, but make messages slightly smaller.
2020-06-12 16:01:28 +00:00
- add "store and forward" support for messages, or move to the DB sync model. This would allow messages to be eventually delivered even if nodes are out of contact at the moment.
- use variable length Strings in protobufs (instead of current fixed buffers). This would save lots of RAM
2020-03-19 02:28:55 +00:00
- use BLEDevice::setPower to lower our BLE transmit power - extra range doesn't help us, it costs amps and it increases snoopability
2020-06-12 16:01:28 +00:00
- make a HAM build: just a new frequency list, a bool to say 'never do encryption' and use hte callsign as that node's unique id. -from Girts
2020-03-19 02:28:55 +00:00
- don't forward redundant pings or ping responses to the phone, it just wastes phone battery
2020-06-12 16:01:28 +00:00
- don't send location packets if we haven't moved significantly
2020-03-19 02:28:55 +00:00
- scrub default radio config settings for bandwidth/range/speed
- show radio and gps signal strength as an image
- only BLE advertise for a short time after the screen is on and button pressed - to save power and prevent people for sniffing for our BT app.
2020-06-12 16:01:28 +00:00
- make mesh aware network timing state machine (sync wake windows to gps time) - this can save LOTS of battery
2020-03-19 02:28:55 +00:00
- split out the software update utility so other projects can use it. Have the appload specify the URL for downloads.
- read the PMU battery fault indicators and blink/led/warn user on screen
- discard very old nodedb records (> 1wk)
- handle millis() rollover in GPS.getTime - otherwise we will break after 50 days
- report esp32 device code bugs back to the mothership via android
- change BLE bonding to something more secure. see comment by pSecurity->setAuthenticationMode(ESP_LE_AUTH_BOND)
2020-02-02 00:05:12 +00:00
2020-06-22 16:17:04 +00:00
Changes related to wifi support on ESP32:
- iram space: https://esp32.com/viewtopic.php?t=8460
- set https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/external-ram.html spi ram bss
- figure out if iram or bluetooth classic caused ble problems
- post bug on esp32-arduino with BLE bug findings
2020-06-12 16:01:28 +00:00
# Spinoff project ideas
2020-02-01 17:46:25 +00:00
2020-06-12 16:01:28 +00:00
- an open source version of https://www.burnair.ch/skynet/
- a paragliding app like http://airwhere.co.uk/
- How do avalanche beacons work? Could this do that as well? possibly by using beacon mode feature of the RF95?