* Potential fix for bad Rx performance on T1000-E
* validate and refactor RF switching, eliminate godmode
---------
Co-authored-by: Thomas Göttgens <tgoettgens@gmail.com>
* Send StoreForward history of the server to a connected client
To extend the ToPhoneQueue
* Add delay after sending history info
* Don't allow history request over LoRa on default channel
---------
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
* Implement replies for all telemetry types based on variant tag
* Remove check for `ignoreRequest`: modules can set this, don't need to check
---------
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
* Send NAK on primary if original packet couldn't be decoded
* Add checks for `isDecoded` when accessing `decoded`
* Channel index should be of original packet, not of newly allocated NAK
* NeighborInfo: Only keep neighbors in RAM
It fills up quickly when nodes are running >=2.3
* Defer first transmission as it's usually empty
---------
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
* Don't save Neighbors to flash when receiving
* Move `shouldSave` to `saveProtoForModule()`
---------
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
* Use `alterReceivedProtobuf()` for NeighborInfo and Traceroute
`alterReceived()` should never return NULL
Traceroute should be promiscuous
* Remove extensive logging from NeighborInfo module
* Set `hop_start` in header to determine how many hops each packet traveled
* Set hopLimit of response according to hops used by request
* Identify neighbors based on `hopStart` and `hopLimit`
* NeighborInfo: get all packets and assume a default broadcast interval
* Add fail-safe in case node in between is running modified firmware
* Add `viaMQTT` and `hopsAway` to NodeInfo
* Replace `HOP_RELIABLE` with hopStart for repeated packet
---------
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
Such that direct message to MQTT node gets published and we get rid of always rebroadcasting when MQTT is enabled
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
* StoreForward updates
- Send history in "text" variant
- Don't send history the client already got
- Check if PSRAM is full
- More sensible defaults
* Set `TEXT_BROADCAST` or `TEXT_DIRECT` RequestResponse tag
* feat: E-Ink "Dynamic Partial" (#3193)
Use a mixture of full refresh, partial refresh, and skipped updates, balancing urgency and display health.
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
* [create-pull-request] automated change (#3209)
Co-authored-by: thebentern <thebentern@users.noreply.github.com>
* Reset `last_index` if history was cleared, e.g. by reboot
---------
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
Co-authored-by: todd-herbert <herbert.todd@gmail.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: thebentern <thebentern@users.noreply.github.com>
Co-authored-by: Garth Vander Houwen <garthvh@yahoo.com>
* Fix getting channel name from MQTT topic
* Allow specifying channel index in JSON field "channel" for downlink
Still requires JSON message to be published to channel named "mqtt"
* Make non-breaking if someone adds another slash
* Fix: mark packet via MQTT as ACKed only after we sent it out via LoRa
* Don't need to check for broadcast, DMs also get implicit ACKs
---------
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
* Add debug options for RP2040
* Rename: "observed" should be plural: "observables"
* PhoneAPI: return failure on timeout
In `onNotify()`, when disconnected, PhoneAPI removed itself from the list of observers that was looped through in `notifyObservers()`. We should exit that loop in that case.
* Mark packets received via MQTT and add option to ignore them
* Don't send packets received via MQTT back into MQTT
Generate implicit ACK for packets we as an MQTT gateway sent
---------
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
* Fix time lost on the Pico W right after NTP
Shouldn't check for `#ifdef` as it will always be defined, but might be set to 0
* Handle reconnect for Wi-Fi on RP2040
* Update arduino-core for Wi-Fi + FreeRTOS fixes
---------
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
* Pico W: Initial WiFi support: connects, but freezes after a while
* Update arduino-pico core to fix hang with Wi-Fi
* Add `picow` to workflow since it's different from `pico` now
* Show Wi-Fi frame on screen for all devices with Wi-Fi
* Pico W: Disable mDNS as it's unsupported with FreeRTOS
* Fix printing IP address
* Fix Raspbian build
* Pico W: Initial WiFi support: connects, but freezes after a while
* Update arduino-pico core to fix hang with Wi-Fi
* Add `picow` to workflow since it's different from `pico` now
* Support for SerialModule on RP2040
* Remove one !defined too many
* Increase serial RX_BUFFER: more reliable for long packets
Even results into an error for ESP32
---------
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
* Fix compression: encode to bytes after `decoded` is modified
* Change payload size to decompressed length
---------
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
* Make input_source case insensitive
* Implement reboot for RP2040
* Remove EXT_NOTFIFY_OUT as it conflicts with I2C and module is not supported
* RP2040 has screen, button and wire
* Add default I2C pins also for Pico W
* Always assign NodeNum based on MAC address
Step one of trying to fix infinite loop
* Store our mac.addr again to ignore an already existing NodeNum if it's us
* Make portduino great again
* Upon receiving packet that was seen recently, cancel a rebroadcast if there was one in Tx queue already
---------
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
* Use startReceive() instead of startReceiveDutyCycleAuto()
* Add preamble detected IRQ
* Escape from 'freeze' state when packet should have been received
* Use RADIOLIB_GODMODE for access to clearIrqStatus
* SX126x: Better handling of false preamble detections
* SX128x: Add preamble IRQ and false detection handling to active receiving check
* Remove unnecessary function declaration
---------
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
* Add HEADER_VALID IRQ flag for SX126x/8x to detect actively receiving
Needs new RadioLib commit
* Update comments
* Use latest RadioLib release
---------
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
* When channel is active, first try receiving that packet
Afterwards we'll try transmitting again
* Remove setStandby in startSend
Already done in isChannelActive()
* Set LORA_DIO1 as RadioLib GPIO for SX127x
* LORA_DIO1 for Heltec v1, overlaps with GPS_TX
Set to RADIOLIB_NC for now
* If receive was not successful, startReceive doesn't trigger the interrupt
So we have to go back to transmitting anyway
---------
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
* When channel is active, first try receiving that packet
Afterwards we'll try transmitting again
* Remove setStandby in startSend
Already done in isChannelActive()
* Set LORA_DIO1 as RadioLib GPIO for SX127x
* LORA_DIO1 for Heltec v1, overlaps with GPS_TX
Set to RADIOLIB_NC for now
* If receive was not successful, startReceive doesn't trigger the interrupt
So we have to go back to transmitting anyway
---------
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>