feat(lora+gps): Add components for gps, sx126x lora radio. Add preliminary meshtastic component (ai-generated), and update bsps to start testing#678
Conversation
…eliminary meshtastic component (ai-generated), and update bsps to start testing
|
⚡ Static analysis result ⚡ 🔴 cppcheck found 6 issues! Click here to see details.espp/components/meshtastic/src/meshtastic.cpp Lines 58 to 63 in 1747d4a !Line: 58 - style: Consider using std::any_of algorithm instead of a raw loop. [useStlAlgorithm]
espp/components/meshtastic/src/meshtastic_protocol.cpp Lines 60 to 65 in 1747d4a !Line: 60 - style: Consider using std::accumulate algorithm instead of a raw loop. [useStlAlgorithm]
espp/components/meshtastic/src/meshtastic_protocol.cpp Lines 68 to 73 in 1747d4a !Line: 68 - style: Consider using std::accumulate algorithm instead of a raw loop. [useStlAlgorithm]
espp/components/meshtastic/example/main/meshtastic_example.cpp Lines 135 to 140 in 1747d4a !Line: 135 - style: Variable 'text_count' is assigned a value that is never used. [unreadVariable]
espp/components/t-deck/example/main/t_deck_example.cpp Lines 606 to 611 in 1747d4a !Line: 606 - style: Consider using std::transform algorithm instead of a raw loop. [useStlAlgorithm]
!Line: 58 - style: Consider using std::transform algorithm instead of a raw loop. [useStlAlgorithm]
|
There was a problem hiding this comment.
Pull request overview
Adds a new “wireless” documentation section and introduces new gps, sx126x (LoRa radio), and preliminary meshtastic components, then wires LoRa/GPS support into the LilyGo T-Deck and M5Stack Cardputer-Adv BSPs and examples so they can be built/tested in CI.
Changes:
- Add new components:
gps(UART NMEA GNSS),sx126x(SX1261/2/LLCC68 LoRa driver),meshtastic(radio-agnostic Meshtastic-compatible node + example). - Update BSPs/examples (
t-deck,m5stack-cardputer) to initialize and demonstrate LoRa + GPS (plus shared-bus handling on the Cardputer Cap). - Update docs (new
doc/en/wireless/*) and CI/component publishing lists to include the new components and examples.
Reviewed changes
Copilot reviewed 68 out of 68 changed files in this pull request and generated 9 comments.
Show a summary per file
| File | Description |
|---|---|
| doc/en/wireless/index.rst | Introduces the “Wireless & Radio APIs” doc section and links new wireless component pages. |
| doc/en/wireless/sx126x.rst | Adds SX126x component documentation entry and API include hooks. |
| doc/en/wireless/gps.rst | Adds GPS component documentation entry and API include hooks. |
| doc/en/wireless/meshtastic.rst | Adds Meshtastic component documentation entry and API include hooks. |
| doc/en/index.rst | Adds the wireless docs section to the top-level docs index. |
| doc/Doxyfile | Adds new components’ headers/examples to Doxygen inputs/example paths. |
| components/sx126x/CMakeLists.txt | Registers the sx126x component build. |
| components/sx126x/include/sx126x.hpp | Defines the public SX126x driver API/types/config. |
| components/sx126x/src/sx126x.cpp | Implements the SX126x driver (SPI command layer + LoRa modem support). |
| components/sx126x/README.md | Adds SX126x component overview and feature list. |
| components/sx126x/idf_component.yml | Adds SX126x component manager metadata (deps/tags/docs link). |
| components/sx126x/example/CMakeLists.txt | Adds SX126x example project configuration. |
| components/sx126x/example/sdkconfig.defaults | Adds SX126x example default sdkconfig. |
| components/sx126x/example/README.md | Adds SX126x example usage documentation. |
| components/sx126x/example/main/CMakeLists.txt | Registers the SX126x example “main” component. |
| components/sx126x/example/main/Kconfig.projbuild | Adds SX126x example menuconfig options (hardware/pins/frequency/etc.). |
| components/sx126x/example/main/sx126x_example.cpp | Adds SX126x example app (bring-up + RX + periodic TX ping). |
| components/gps/CMakeLists.txt | Registers the gps component build. |
| components/gps/include/gps.hpp | Defines the UART-attached GPS driver public API. |
| components/gps/include/nmea_parser.hpp | Defines the platform-independent NMEA parser API. |
| components/gps/include/gps_fix.hpp | Defines the parsed fix struct and timestamp conversion helper. |
| components/gps/src/gps.cpp | Implements the UART driver + background read/parsing task. |
| components/gps/src/nmea_parser.cpp | Implements NMEA parsing/checksum and fix extraction. |
| components/gps/README.md | Adds GPS component overview and capabilities. |
| components/gps/idf_component.yml | Adds GPS component manager metadata (deps/tags/docs link). |
| components/gps/example/CMakeLists.txt | Adds GPS example project configuration. |
| components/gps/example/sdkconfig.defaults | Adds GPS example default sdkconfig. |
| components/gps/example/README.md | Adds GPS example usage documentation. |
| components/gps/example/main/CMakeLists.txt | Registers the GPS example “main” component. |
| components/gps/example/main/Kconfig.projbuild | Adds GPS example menuconfig options (hardware/pins/baud). |
| components/gps/example/main/gps_example.cpp | Adds GPS example app (print fixes). |
| components/meshtastic/CMakeLists.txt | Registers the meshtastic component build. |
| components/meshtastic/include/meshtastic.hpp | Defines MeshtasticNode public API/config/callbacks. |
| components/meshtastic/include/meshtastic_types.hpp | Adds protocol constants and message structs. |
| components/meshtastic/include/meshtastic_protocol.hpp | Declares channel hashing/modem config/header pack/unpack helpers. |
| components/meshtastic/include/meshtastic_crypto.hpp | Declares PSK expansion and AES-CTR payload crypt helpers. |
| components/meshtastic/include/meshtastic_protobuf.hpp | Declares minimal protobuf encode/decode helpers for used messages. |
| components/meshtastic/src/meshtastic.cpp | Implements node behavior (send/receive/dedup/rebroadcast). |
| components/meshtastic/src/meshtastic_protocol.cpp | Implements region/preset-based modem config + header pack/unpack + hashes. |
| components/meshtastic/src/meshtastic_crypto.cpp | Implements PSK expansion and AES-CTR crypt via mbedtls. |
| components/meshtastic/src/meshtastic_protobuf.cpp | Implements minimal protobuf wire-format encode/decode for required messages. |
| components/meshtastic/README.md | Adds Meshtastic component overview/scope/licensing notes. |
| components/meshtastic/idf_component.yml | Adds Meshtastic component manager metadata (deps/tags/docs link). |
| components/meshtastic/example/CMakeLists.txt | Adds Meshtastic example project configuration. |
| components/meshtastic/example/sdkconfig.defaults | Adds Meshtastic example default sdkconfig. |
| components/meshtastic/example/README.md | Adds Meshtastic example usage documentation. |
| components/meshtastic/example/main/CMakeLists.txt | Registers the Meshtastic example “main” component. |
| components/meshtastic/example/main/Kconfig.projbuild | Adds Meshtastic example menuconfig options (hardware/region/intervals/etc.). |
| components/meshtastic/example/main/meshtastic_example.cpp | Adds Meshtastic node example using BSP-provided SX1262 radio. |
| components/t-deck/CMakeLists.txt | Adds gps/sx126x to T-Deck component requirements. |
| components/t-deck/idf_component.yml | Adds gps/sx126x dependencies to the T-Deck component manifest. |
| components/t-deck/include/t-deck.hpp | Adds LoRa + GPS APIs/pins/state to the T-Deck BSP. |
| components/t-deck/src/lora.cpp | Implements T-Deck LoRa + GPS initialization. |
| components/t-deck/example/README.md | Updates T-Deck example docs to include LoRa demo behavior. |
| components/t-deck/example/main/t_deck_example.cpp | Adds LoRa tab/demo wiring and non-blocking TX dispatch via main loop. |
| components/t-deck/example/main/gui.hpp | Extends T-Deck example GUI API to support a LoRa tab and logging. |
| components/t-deck/example/main/gui.cpp | Implements the new LoRa tab UI and thread-safe message/status updates. |
| components/m5stack-cardputer/CMakeLists.txt | Adds gps/sx126x to Cardputer component requirements. |
| components/m5stack-cardputer/idf_component.yml | Adds gps/sx126x dependencies to the Cardputer component manifest. |
| components/m5stack-cardputer/include/m5stack-cardputer.hpp | Adds LoRa+GPS Cap APIs/pins/state and new helper methods. |
| components/m5stack-cardputer/src/lora_gps_cap.cpp | Implements LoRa+GPS Cap SPI-bus bring-up and LoRa/GPS initialization. |
| components/m5stack-cardputer/src/sdcard.cpp | Adjusts SD init to reuse the shared expansion SPI bus when LoRa is present. |
| components/m5stack-cardputer/example/README.md | Updates Cardputer example docs for new tabbed UI + LoRa/GPS features. |
| components/m5stack-cardputer/example/main/m5stack_cardputer_example.cpp | Wires LoRa+GPS demos into the example and updates tab/shortcut behavior. |
| components/m5stack-cardputer/example/main/gui.hpp | Refactors Cardputer GUI into tabbed layout with LoRa/GPS/Sys tabs. |
| components/m5stack-cardputer/example/main/gui.cpp | Implements tabbed UI, LoRa log/status rendering, and new per-tab helpers. |
| .github/workflows/build.yml | Adds gps/meshtastic/sx126x examples to CI build matrix. |
| .github/workflows/upload_components.yml | Adds gps/meshtastic/sx126x to component upload list. |
| #include <chrono> | ||
| #include <cstring> | ||
| #include <string> | ||
| #include <vector> |
| #include <chrono> | ||
| #include <memory> | ||
| #include <string> |
| uint32_t MeshtasticNode::next_packet_id() { | ||
| // packet ids must be nonzero and non-repeating; seed from the hardware RNG | ||
| uint32_t id = esp_random(); | ||
| if (id == 0) { | ||
| id = 1; | ||
| } | ||
| return id; | ||
| } |
| // expand the PSK and compute the channel hash | ||
| key_ = expand_psk(config_.psk); | ||
| resolved_channel_name_ = | ||
| config_.channel_name.empty() ? preset_display_name(config_.preset) : config_.channel_name; | ||
| // the channel hash uses the expanded key; for an unencrypted channel the | ||
| // PSK contribution is empty | ||
| channel_hash_ = channel_hash(resolved_channel_name_, key_); |
| // NOTE: the reset line is shared with the digital microphone clock | ||
| // (dmic_clk_io), so the radio and microphone are mutually exclusive |
| // connect the antenna (via the Cap's IO expander, if present) | ||
| enable_cap_expander_outputs(cap_expander_lora_rf_switch_mask); |
| .. toctree:: | ||
|
|
||
| sx126x_example |
| .. toctree:: | ||
|
|
||
| gps_example |
| .. toctree:: | ||
|
|
||
| meshtastic_example |
Description
Motivation and Context
How has this been tested?
Screenshots (if appropriate, e.g. schematic, board, console logs, lab pictures):
Types of changes
Checklist:
Software
.github/workflows/build.ymlfile to add my new test to the automated cloud build github action.Hardware