Conversation
|
An additional comment: these type of sensors generally require a "control" interface to enable or disable features. This is mapped here - and could be a good outcome of the hackathon. |
|
@oscgonfer protobufs are merged and generated upstream now |
247768e to
84865cd
Compare
|
rebased onto #7202 - just to keep in mind that the sensirion library needs to be |
|
sensirion 1.1.0 was released - updated upstream. |
Merged |
|
Thanks for your effort! I can confirm it works with:
|
6237b2e to
3a1a07a
Compare
443a573 to
ec57c62
Compare
|
|
Co-authored-by: Hannes Fuchs <[email protected]>
|
Hi @paulwalko @hafu Do you want to give this a go? I believe it'd be final |
Looks good to me! Verified with a diy nrf52 node to take measurements (scd41 only) + rak 4631 to upload them. |
|
Cool! I need to fix a minor detail on the Sen5x part, but it'd be done shortly! I'll mark it as ready when it's done! |
I'll try to test this next week with at least a Heltec v3 |
|
Resolved conflicts on merge. All good on my end, but let's see after tests. |
|
Can also confirm it works using a Heltec v3. I also have a MCP9808 temperature sensor connected to the I2C bus. At first it won't work and I got only |
|
Thank you both @hafu and @Tomas-Kuchta-FPV for testing. Admin commands are now (WIP) implemented in meshtastic/python#903 in case you want to give it a whirl. The commands are used to modify calibration parameters and other config settings. |
I'll test it out. |
* Mute specific nodes (#9209) * Regen protobufs * Ensure mute state is set when node is ignored * Added mechanism for toggling muted state * Implement the ability to mute specific nodes * Switch boolean value for bitmask * Correctly toggle bitfield position 2 on-change to mute state * Dont push submodule refs * Log correct info * Trunk fmt * Update protobuf ref to master branch of base * Update src/modules/ExternalNotificationModule.cpp Co-authored-by: Copilot <[email protected]> * Re-sync generated files --------- Co-authored-by: Jason P <[email protected]> Co-authored-by: Copilot <[email protected]> Co-authored-by: Jonathan Bennett <[email protected]> * CI: tiny - include mt-ota in firmware zips (#9275) * EXCLUDE_AUDIO on (original) ESP32 (#9276) iram is scarce, give it back! * Upgrade trunk (#9270) Co-authored-by: vidplace7 <[email protected]> * Pioarduino preparation (#9223) * Resolve naming conflict of Syslog class with namespace * do not include libpax headers if pax counter is excluded * clean only top-level sdkconfigs, keep them in the variants directories * Fix code formatting * Update RadioLib to v7.5.0 (#9281) * Enhance release notes generation by adding dependency update checks and improving new contributor detection * Renovate: Ignore lovyangfx for elecrow-panel (#9279) * add support for uMesh Modules (#9259) * add support for uMesh Modules * Update lora-usb-umesh-1262.yaml * Update lora-usb-umesh-1268.yaml * Update protobufs (#9291) Co-authored-by: thebentern <[email protected]> * Update ESP8266SAM to v1.1.0 (#9271) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * BaseUI: Autosave Messages (#9269) * Autosave Messages * fix * Add logging, code cleanup, and add save on delete. * We already save as part of delete messages, no need to do it again * fix spelling errors * Updating comment --------- Co-authored-by: Jason P <[email protected]> * Partition name in manifest script (#9294) * Fix up T-Beam 1W HW_MODEL * Add part_name for bin files * app0 * Fix up T-Beam 1W HW_MODEL * Upgrade trunk (#9297) Co-authored-by: vidplace7 <[email protected]> * SafeFile: use atomic rename-with-overwrite, rather than non-atomic delete-then-rename (#9296) * Update protobufs (#9299) Co-authored-by: thebentern <[email protected]> * Update meshtastic/device-ui digest to 5a870c6 (#9301) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Upgrade trunk (#9306) Co-authored-by: vidplace7 <[email protected]> * Fix OTA partition name matching (#9302) * Update protobufs (#9308) Co-authored-by: thebentern <[email protected]> * Supress reboot banner in Reboot OTA * T-Deck Pro: speed up eink force refresh (#9303) * fix GPS for T-Watch S3 plus (#9312) * support T-Watch S3 Plus GPS * HAS_GPS * define BUTTON_PIN * swap GPS pins, USB_MODE=1 * Adds Custom battery curve for thinknode m6 (#9313) * Move PMSA003I to separate class and update AQ telemetry (#7190) * Update Adafruit BMP280 to v3 (#9307) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Fix rotary encoder long press (#9039) * Update pschatzmann_arduino-audio-driver to v0.2.0 (#9272) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Small fix in register size for SHT4X (#9309) * Recover `long_name`, `short_name` from our own NodeDB entry if device.proto is unreadable (#9248) * Recover long_name, short_name from our own NodeDB entry if device.proto is unreadable * NodeDB::loadFromDisk: restore long/short name with memcpy and explicit null termination --------- Co-authored-by: Ben Meadors <[email protected]> * Meshtastic unified OTA (#9231) * Initial commit of combined BLE and WiFi OTA * Incorporate ota_hash in AdminMessage protobuf * OTA protobuf changes * Trunk fmt --------- Co-authored-by: Jake-B <[email protected]> * Added I2C scanner a check for the QMC6310N. (#9305) * Added support for the new SSD1306 control panel. * Added QMC6310N inspection to I2C scanner --------- Co-authored-by: Ben Meadors <[email protected]> * Preliminary Thinknode M4 Support (#8754) * Preliminary Thinknode M4 Support * oops * Fix RF switch TX configuration * trunk'd * GPS fix for M4 * Battery handling and LED for M4 * Trunk * Drop debug warnings * Make Red LED notification * Merge cleanup * Make white LEDs flash during charge --------- Co-authored-by: Jonathan Bennett <[email protected]> * Node Actions Menu Overhaul (#9287) * Start overhaul and clean up of the Node Actions menu * Wired up commands - still a lot of work and testing * Remove old favorites menu * Remove addFavoritesMenu * CoPilot to the rescue, wired up some function in both directions * Clean up CoPilot actions * Cross out Mute or Ignored in lists, add Save to NodeDB on changes * Improve strikethrough for columns * Correct menu wording and adjust vertical divider on Node List * Code cleanup * Testing unveiled some issues - fixed with these changes * Trunk fmt * Upgrade trunk (#9323) Co-authored-by: vidplace7 <[email protected]> * ICM20948 IMU sleep (#9324) * Add EByte EoRa-Hub (#9169) * Heltec V4 TFT metadata (#9325) * Upgrade trunk (#9323) Co-authored-by: vidplace7 <[email protected]> * ICM20948 IMU sleep (#9324) * Add v4-tft metadata --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: vidplace7 <[email protected]> Co-authored-by: HarukiToreda <[email protected]> * Fix build with high / low i2c address for OLED * Cleanup * Meshtastic OTA (moar) (#9327) * Initial commit of combined BLE and WiFi OTA * Incorporate ota_hash in AdminMessage protobuf * OTA protobuf changes * Trunk fmt * Partition header check for OTA type * Guards * Guards * Derp * Missed one --------- Co-authored-by: Jake-B <[email protected]> * Add sqlite depdendency (Cherry-picks from sfpp) (#9328) * Add sqlite to build requires * Add missed comma * Add sqlite dev to more dockerfiles * Alpine docker fix * Add sqlite to build requires * Add sqlite depdendency (Cherry-picks from sfpp) Store and Forward Plus Plus requires sqlite to work. This PR cherry picks the commits that added the dependency so that this can be added, and reduce the amount of effort to review sfpp. Authored-By: @jp-bennett --------- Co-authored-by: Jonathan Bennett <[email protected]> * Filter BLE updates that don't change pairing status (#9333) * Add support for setting API port from the config file (#8435) * Add support for setting API port from the config file * Update PortduinoGlue.cpp Fix typo in var identifier --------- Co-authored-by: Ben Meadors <[email protected]> * toradio, fromradio OPTIONS handler: fix sending proper HTTP response. (#9322) Before this (missing response): $ curl -v -X OPTIONS http://meshtastic.local/api/v1/fromradio * Host meshtastic.local:80 was resolved. * IPv6: (none) * IPv4: 192.168.0.19 * Trying 192.168.0.19:80... * Connected to meshtastic.local (192.168.0.19) port 80 * using HTTP/1.x > OPTIONS /api/v1/fromradio HTTP/1.1 > Host: meshtastic.local > User-Agent: curl/8.14.1 > Accept: */* > * Request completely sent off * Empty reply from server * shutting down connection #0 curl: (52) Empty reply from server After this (proper HTTP 204 response): $ curl -v -X OPTIONS http://meshtastic.local/api/v1/fromradio * Host meshtastic.local:80 was resolved. * IPv6: (none) * IPv4: 192.168.0.19 * Trying 192.168.0.19:80... * Connected to meshtastic.local (192.168.0.19) port 80 * using HTTP/1.x > OPTIONS /api/v1/fromradio HTTP/1.1 > Host: meshtastic.local > User-Agent: curl/8.14.1 > Accept: */* > * Request completely sent off < HTTP/1.1 204 OK < Content-Type: application/x-protobuf < Access-Control-Allow-Origin: * < Access-Control-Allow-Methods: GET < X-Protobuf-Schema: https://raw.githubusercontent.com/meshtastic/protobufs/master/meshtastic/mesh.proto < * Connection #0 to host meshtastic.local left intact This is related to https://github.com/meshtastic/firmware/issues/5385. Co-authored-by: Ben Meadors <[email protected]> * Improve BaseUI Preset Change Flow (#9343) * Reset Channel Number to 0 on Preset Change * Add Channel Picker to LoRa Options * Change Channel to Frequency Slot * Catch comparison issue * Reset override_frequency to ensure we correctly move to new Radio Preset * CoPilot Suggestions * Don't Mute DMs just because we mute a channel (#9348) * Don't Mute DMs just because we mute a channel * Updated code to consolidate muting * Update meshtastic/device-ui digest to 3480b73 (#9353) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Untangle some BME680 ifdef spaghetti * Update protobufs (#9360) Co-authored-by: thebentern <[email protected]> * Upgrade trunk (#9330) Co-authored-by: vidplace7 <[email protected]> * Update protobufs (#9362) Co-authored-by: thebentern <[email protected]> * Remove bsec from OG ESP32 to fix DRAM overflow * Add interrupt for external charge detection (#9332) Tested on Thinknode m4, m6, and T1000-e * Add Meshtastic exclusion flags for webserver and paxcounter in platformio.ini * Implement graduated scaling for NodeInfo send timeout based on active mesh size (#9364) * Implement graduated scaling for NodeInfo send timeout based on active mesh size * Shorter timeout still needed for pubkey unkown and ad-hoc send * Update src/modules/NodeInfoModule.cpp Co-authored-by: Copilot <[email protected]> --------- Co-authored-by: Copilot <[email protected]> * feat: Add Russell, a board designed to go Up! on a balloon (#9079) Hardware repository: https://github.com/Meshtastic-Malaysia/russell - Designed to mount on an ER34615/IFR32700 cell - RAK3172 STM32WLE5CCU6 MCU + integrated SX1262 LoRa - CDtop CD-PA1010D GPS - Bosch Sensortec BME280 sensor - Consonance CN3158 LiFePO4 solar charger Signed-off-by: Andrew Yong <[email protected]> * Update protobufs (#9371) Co-authored-by: jp-bennett <[email protected]> * Update meshtastic/device-ui digest to 613c095 (#9383) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Implement setting TX_GAIN_LORA for portduino (#8501) * Implement setting TX_GAIN_LORA for portduino * use std::size instead of sizeof --------- Co-authored-by: Ben Meadors <[email protected]> * run trunk fmt -a (#9400) * run trunk fmt -a * fix bracket bug This was introduced by @tedwardd and @thebentern in 021106dfe58a0b2b481c355ad318289aff592e7c. See this diff: else + checkConfigPort = false; printf("Using config file %d\n", TCPPort); * Automated version bumps (#9402) Co-authored-by: thebentern <[email protected]> * BaseUI: Bubbles for messages (#9365) * Message Bubbles * Angled edges * Proper indent for messages inside the bubble * Fix message header line width * Correctly calculate text width for the header and shrink Channel Name is on OLED --------- Co-authored-by: Jason P <[email protected]> * device-install: Consistently use write-flash (#8868) * flash scripts: Unify indentation * flash scripts: Support esptool v4 and v5 esptool v5 supports commands with dashes and deprecates commands with underscores. Prior versions only support commands with underscores. * Make BLE TX power configurable for nRF52 variants (#9232) * Make BLE TX power configurable for nRF52 variants * Include BLE TX power setting in T114 variant.h as tested --------- Co-authored-by: Ben Meadors <[email protected]> * Add pin sense to wake M6 on Solar Charge (#9416) * To fix the gps power rail issue on RAK 19007 when RAK12023+RAK12035 is installed (#9409) * asked claude to fix the gps power rail issue when the io slot is in use.. this fixes the gps when both the RAK12500 GPS module and the RAK12035 soil sensor modules are being used. * remove do { ... } while(0) from RESTORE_3V3_POWER() Macro * remove some comments * cleaner macro * removed more excessive comments --------- Co-authored-by: Ben Meadors <[email protected]> * Update GxEPD2 to v1.6.6 (#9412) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update meshtastic/device-ui digest to 37ad715 (#9403) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Delete unused code (#9350) * Delete unused code CryptoEngine::clearKeys() is not used in the code base, therefore this cleanup removes the code. It might give casual reviewers the impression, that keys are wiped. Since the code uses memset() which might be optimized away by the compiler, using the code might not even cause the memory to be wiped. * Update CryptoEngine.cpp Fix stray newline, this is the only thing that I can come up with that might confuse the linter. --------- Co-authored-by: Jason P <[email protected]> * Update lewisxhe-SensorLib to v0.3.4 (#9395) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update meshtastic-esp32_https_server digest to b0f3960 (#9393) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update XPowersLib to v0.3.3 (#9354) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update SensorLib to v0.3.4 (#9396) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Cut NRF52 bluetooth power usage (#8992) * Improve NRF52 bluetooth power efficiency * test T114 bad LFXO * T1000 test * force BLE param negotiation * stash * NRF52 bluetooth small cleanup * fix potential connectivity issues * lower BLE min interval to make iOS happy * remove slave latency negotation * add BLE issue comment * code format * Revert "code format" This reverts commit 1f92b09d08cde52cf61f115a6335dfce12ad9ffd. * remove LFCLK debug info * Fix --------- Co-authored-by: Ben Meadors <[email protected]> * Added Minimesh variant (#9289) * Minimesh Lite Added * Add Minimesh Lite NRF * Added board_level = extra * Fix formatting and optimize image for Minimesh Lite * Change image * The image has been deleted. --------- Co-authored-by: Ben Meadors <[email protected]> * NRF52 - power management improvements (#9211) * minor NRF52 test cleanup * detect USB power input on ProMicro boards * prevent booting on power failure detection * introduce PowerHAL layer * powerHAL basic implementation for NRF52 * prevent data saves on low power * remove comment * Update src/platform/nrf52/main-nrf52.cpp Co-authored-by: Copilot <[email protected]> * Update src/power/PowerHAL.h Co-authored-by: Copilot <[email protected]> * Update src/main.cpp Co-authored-by: Copilot <[email protected]> * Merge missing voltage threshold comparison * add missing variable * add missing function declaration * remove debug strings --------- Co-authored-by: Copilot <[email protected]> Co-authored-by: Ben Meadors <[email protected]> * Consolidate LoRa params / preset logic and fix display of preset values (#9413) * Consolidate LoRa params / preset logic and fix display of preset values * Move preset coercion logic to RadioInterface * Fix some warnings * Fix warnings * STM32 fix * Add unit tests * Update src/mesh/RadioInterface.h Co-authored-by: Copilot <[email protected]> --------- Co-authored-by: Copilot <[email protected]> * Move Lora Init code into LoraInit.cpp/h (#9435) * Move Lora Init code into LoraInit.cpp/h * Add missed extern definition * More carefully check for nullptr in LoraInit.cpp * STM32 fixes * Add extern SPI1 for HW_SPI1_DEVICE * Move initLora to RadioInterface.h * Move device code from main.cpp to earlyInitVariant (#9438) * Trackball revamp (#9440) * Trackball revamp * Use Throttle * Volatile! * Replace strcpy with strncpy and null termination (#9436) Co-authored-by: Jonathan Bennett <[email protected]> * Remove the unused OCV_ARRAYs and move one to a variant.h (#9442) * Fix retry_delay calculation for error responses (#9443) Co-authored-by: Ben Meadors <[email protected]> * feat(GPS): Support Softsleep with WAKE-UP pin on PA1010D (#9078) Support softsleep by defining PIN_GPS_STANDBY on CDTop CD-PA1010D. This differs from existing MTK GPS e.g. L76K, where pulling PIN_GPS_STANDBY (WAKE-UP pin) low is not sufficient to put the GPS module in standby. An additional `$PMTK225,4*2F` must be sent to enter "Backup Mode", which is exited by bringing PIN_GPS_STANDBY (WAKE-UP pin) high. Refer to datasheet[0] §1.9.3 "Backup Mode". 0: https://cdn-learn.adafruit.com/assets/assets/000/084/295/original/CD_PA1010D_Datasheet_v.03.pdf Signed-off-by: Andrew Yong <[email protected]> * Metadata for heltec tracker v2 * InkHUD Menu improvements (#8975) * InkHUD: Region Picker on initial setup * Added Node Config menu with Lora Region Picker * Role picker * Preset Picker * Timezone picker added * Power save mode and bluetooth configs * Config section Headers * Channel Config * Cleaning some behavior * Add back to all Options * Display config added * Position Toggle added * Network Config for ESP32 * Wifi details * Reduce line spacing to fit more content * Recent list with checkboxes * Timezone labels easier to understand * Trunk fix * Added "Saving Changes" screen when reboot is needed * Trunk fix * Make Tips show after first boot if the region is Unset * Added ResetDB and keep only favorite commands * quick fix to joystick * Trunk Fix * Fix to tips to work with new joystick input * Added ADC multiplier value display on power config * added ADC calibration feature * Fixed missing stray endiff * GPS toggle now is aware if gps is present. * Add Thinknode M4 variant_shutdown() (#9449) * Add error handling for SPI command failures in LR11x0, RF95, and SX128x interfaces (#9447) * Update meshtastic/device-ui digest to 69739b8 (#9448) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update protobufs (#9453) Co-authored-by: thebentern <[email protected]> * Move more code out of main-nrf52 into variant.cpp (#9450) * Fix uMesh RF POWER configuration error (#9326) * fix issue https://github.com/linser233/uMesh/issues/1 * fix issue https://github.com/linser233/uMesh/issues/1 * Update and rename lora-usb-umesh-1262.yaml to lora-usb-umesh-1262-30dbm.yaml * Update and rename lora-usb-umesh-1268.yaml to lora-usb-umesh-1268-30dbm.yaml * Add support for Hackaday Communicator function keys (#9444) * Add portduino_status, assign hardware device IDs... (#9441) * Add portduino_status, assign hardware device IDs, and try to recover a CH341 device on a USB error * Minor fixes suggested by Copilot * BaseUI Message Bubble Improvements (#9452) * Improve Message bubbles for more distinct markers and improved layout * Tune message bubble size and corner markers * Finish message bubble tuning --------- Co-authored-by: HarukiToreda <[email protected]> * Add model workflows (#9462) * Add GitHub workflows for issue completeness, duplicate detection, onboarding, and contribution quality checks * Fix indentation * Refactor GitHub workflows for issue handling * Consolidate to two triage workflows * Update .github/workflows/models_pr_triage.yml Co-authored-by: Copilot <[email protected]> --------- Co-authored-by: Copilot <[email protected]> * Update LovyanGFX to v1.2.19 (#9405) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * External Notification - handleReceived Rewrite (#9454) * First steps in consolidating code and minimizing rewrite * Continuing code cleanup * Merge containsBell and !isMuted to a single code path * Forgot about alert_message_buzzer in the cleanup * More code refinements and cleanup * Fix nagCycleCutoff * CoPilot Updates * Initial serialModule cleanup (#9465) * Initial serialModule cleanup * Move SERIAL_PRINT_PORT definition to variant.h * Add missed c6 check * Update src/modules/SerialModule.cpp Compile error for invalid SERIAL_PRINT_OBJECT value Co-authored-by: Copilot <[email protected]> --------- Co-authored-by: Copilot <[email protected]> * Support fully direct request/responses (#9455) Co-authored-by: Ben Meadors <[email protected]> * Move input init to an init function in InputBroker (#9463) * Move input init to an init function in iInputBroker * Unbreak targets with EXCLUDE_INPUTBROKER * Update src/input/InputBroker.cpp Co-authored-by: Copilot <[email protected]> * Fix conditional compilation for input broker * Apply suggestions from code review Co-authored-by: Copilot <[email protected]> * Trunk --------- Co-authored-by: Ben Meadors <[email protected]> Co-authored-by: Copilot <[email protected]> * Just set LED_BUILTIN universally to -1, as we don't use it. (#8830) * Just set LED_BUILTIN universally to -1, as we don't use it. * LUD_BUILTIN workarounds * Squash the LED_BUILTINs that sneaked in * Don't kill valid pin derfine * Fix NimBLE deinit null check * Avoid short-circuit evaluation issues in Telemetry (#9467) * Make sensors in telemetry non-definitory Co-authored-by: Ben Meadors <[email protected]> * re-add unintentionally removed include * Undefine LED_BUILTIN where needed * Add a watchdog module to meshsolar. (#9337) * add watchdog module * Restore the code in power.h --------- Co-authored-by: Ben Meadors <[email protected]> * Trunk * PRs with needs-review still should get bot labeled * Update libch341-spi-userspace digest to af9bc27 (#9472) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Fix logic for rak12035 sensor default config and improve messaging (#9414) * better logic to check if the RAK12035 soil sensor is calibrated, better log messaging if either of the default values were used. * . * changes to how default calibration is done and a message it the default calibration is used pointing to the actual calibration sketch so the user can find it and use it to improve accuracy. --------- Co-authored-by: Ben Meadors <[email protected]> * Add support for the hardware buttons on Bluetooth Nugget device (#9468) Co-authored-by: Ben Meadors <[email protected]> * feat(stm32): Add Milesight GS301 Bathroom Odor Detector (#9359) - STM32WLE5CCU6 - NFC (unsupported): NXP NT3H2211W0FTTJ (NTAG I2C plus: NFC Forum T2T with I2C interface, password protection and energy harvesting) - Sensor (unsupported): Analog ADuCM355 (SHTC3 is connected to ADuCM355 and not directly accessible) - Bicolor LED - User button (presently not functional in STM32 variants) The definitions for sensor voltage control are present but commented out to save power, due to lack of sensor support. Powered by 4x 4000mAh RAMWAY ER18505 Li-SOCl2 batteries. Flashing: 1. Power down device (remove batteries) 2. Connect USB-UART to J1 (USART2), pinout is below, do not connect +3V3 pin yet 3. Short BOOT pins next to J1 4. Connect +3V3 pin or insert batteries while BOOT pins are shorted 5. Use STM32CubeProgrammer, connect by UART mode 6. Load firmware .hex and download J1 (USART2); Molex Picoblade (P=1.25mm * 4) 1. +3V3 2. PA3_USART2_RX_J1 3. PA2_USART2_TX_J1 4. GND Signed-off-by: Andrew Yong <[email protected]> Co-authored-by: Ben Meadors <[email protected]> * enable long interleaving mode for LR11x0 and SX128x (#9399) Using long interleaving is not a breaking change, the receiver node is able to use the lora header to know if LI encoding is used or not and will decode LI packets correctly. However the problem is SX127x and other first generation LoRa IP which do not support LI at all, for theses it is a breaking change. HOWEVER due to the sync word bug the LR11x0 already can't talk with SX127x, so if we enable LI on theses no one would be able to tell. Same for SX128x altho this is because it works on 2.4Ghz which is incompatible with SX127x. Co-authored-by: Ben Meadors <[email protected]> * Add initial Nix shell (#8530) * Add initial Nix shell * Update flake.nix Co-authored-by: Copilot <[email protected]> --------- Co-authored-by: Ben Meadors <[email protected]> Co-authored-by: Copilot <[email protected]> * Remove stale variant.h defines (#9470) * Remove noop CANNED_MESSAGE_MODULE_ENABLE define * Remove over-eager warning removal * Remove unused LED_CONN * Dead defines removal * Rename oddball LED pin name * Rename second oddball LED pin name * Remove another dead define * More variant.h cleanup. LED_NOTIFICATION, remove dead code, etc (#9477) * Remove errant symbol * Add ledOff if not defined * Revert "Update libch341-spi-userspace digest to af9bc27 (#9472)" (#9483) This reverts commit b18742c2112309199150f39cb5a85a718290690e. * Add custom ringtone definition for RAK4631 and enable buzzer pin (#9481) * Update pschatzmann_arduino-audio-driver to v0.2.1 (#9398) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update meshtastic/device-ui digest to 63967a4 (#9475) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Fix issue triage workflow by clarifying device log requirements and improving JSON response handling * re-enable RTC support on THINKNODE M3 and M6 * Adjust pin poweroff for Thinknode M6 * You get an RTC, and you get an RTC! (delete HAS_RTC as it wasn't actually doing much) (#9493) * Change canned message recipient's previous page to send page (#9227) * Change canned message recipient's previous page to send page * Set previousPage for new menu pages Set nextPage in back MenuPages to previousPage Removed back MenuAction --------- Co-authored-by: zeropt <[email protected]> Co-authored-by: HarukiToreda <[email protected]> * Add on-screen keyboard to InkHUD (#9445) * Added keyboard option to menu. Shows a keyboard layout but does not type. * Keyboard types into text box and wraps. * send FreeText messages from the send submenu - renamed `KEYBOARD` action to `FREE_TEXT` and moved its menu location to the send submenu - opening the FreeText applet from the menu keeps the menu open and disabled the timeout - the FreeText applet writes to inkhud->freetext - the sending a canned message checks inkhud->freetext and if it isn't empty, sends and clears the inkhud->freetext * Text scrolls along with input * handle free text message completion as an event implements `handleFreeText` and `OnFreeText()` for system applets to interface with the FreeText Applet The FreeText Applet generates an `OnFreeText` event when completing a message which is handled by the first system applet with the `handleFreeText` flag set to true. The Menu Applet now handles this event. * call `onFreeText` whenever the FreeText Applet exits allows the menu to consistently restart its auto-close timeout * Add text cursor * Change UI to remove the header and make text box longer Keyboard displays captial letters for legibility Keyboard types captial letters with long press * center FreeText keys and draw symbolic buttons Move input field and keyboard drawing to their own functions: - `drawInputField()` - `drawKeyboard()` Store the keys in a 1-dimensional array Implement a matching array, `keyWidths`, to set key widths relative to the font size * Add character limit and counter * Fix softlock when hitting character limit * Move text box as its own menu page * rework FreeTextApplet into KeyboardApplet - The Keyboard Applet renders an on-screen keyboard at the lower portion of the screen. - Calling `inkhud->openKeyboard()` sends all the user applets to the background and resizes the first system applet with `handleFreeText` set to True to fit above the on-screen keyboard - `inkhud->closeKeyboard()` reverses this layout change * Fix input box rendering and add character limit to menu free text * remove FREE_TEXT menu page and use the FREE_TEXT menu action solely * force update when changing the free text message * reorganize KeyboardApplet - add comments after each row of `key[]` and `keyWidths[]` to preserve formatting - The selected key is now set using the key index directly - rowWidths are pre-calculated in the KeyboardApplet constructor - removed `drawKeyboard()` and implemented `drawKeyLabel()` * implement `Renderer::clearTile()` to clear the region below a tile * add parameter to forceUpdate() for re-rendering the full screen setting the `all` parameter to true in `inkhud->forceUpdate()` now causes the full screen buffer to clear an re-render. This is helpful for when sending applets to the background and the UI needs a clean canvas. System Applets can now set the `alwaysRender` flag true which causes it to re-render on every screen update. This is set to true in the Battery Icon Applet. * clean up tile clearing loops * implement dirty rendering to let applets draw over their previous render - `Applet::requestUpdate()` now has an optional flag to keep the old canvas - If honored, the renderer calls `render(true)` which runs `onDirtyRender()` instead of `onRender()` for said applet - The renderer will not call a dirty render if the full screen is getting re-rendered * simplify arithmetic in clearTile for better understanding * combine Applet::onRender() and Applet::onDirtyRender() into Applet::onRender(bool full) - add new `full` parameter to onRender() in every applet. This parameter can be ignored by most applets. - `Applet::requestUpdate()` has an optional flag that requests a full render by default * implement tile and partial rendering in KeyboardApplet * add comment for drawKeyLabel() * improve clarity of byte operations in clearTile() * remove typo and commented code * fix inaccurate comments * add null check to openKeyboard() and closeKeyboard() --------- Co-authored-by: zeropt <[email protected]> Co-authored-by: HarukiToreda <[email protected]> * Fix typo in LED state comment And removed unused define * Fix OTA filename determination to use unified format for ESP32 (#9488) * Refuse to send legacy DMs simply because the remote public key is unknown (#9485) * Refuse to send legacy DMs simply because the remote public key is unknown * Update src/mesh/Router.cpp - use more specific error Co-authored-by: Copilot <[email protected]> * Update src/mesh/Router.cpp - more detail in warning message Co-authored-by: Copilot <[email protected]> --------- Co-authored-by: Copilot <[email protected]> * Don't ever define PIN_LED or BLE_LED_INVERTED (#9494) * Don't ever define PIN_LED * Deprecate BLE_LED_INVERTED * Add StatusMessage module and config overrides (#9351) * Add StatusMessage module and config overrides * Trunk * Don't reboot node simply for a StatusMessage config update * Missed in reviews - fixing send bubble (#9505) * Prefer EXT_PWR_DETECT pin over chargingVolt to detect power unplugged (#9511) * Power off control pin on Thinknode m5 during deepsleep and add RTC (#9510) * Power off control pin on Thinknode m5 during deepsleep * Apply suggestion from @Copilot Co-authored-by: Copilot <[email protected]> * Finish HAS_RTC cleanup * Add RTC for Thinknode M5 * Don't double-init Wire * Specify the RTC chip directly rather than use SensorRtcHelper. Saves a bit of flash, and avoid mis-detection --------- Co-authored-by: Copilot <[email protected]> * Make sure we always return a value in NodeDB::restorePreferences() (#9516) In case FScom is not defined there is no return statement. This moves the return outside of the ifdef to make sure a defined value is returned. * Make sure we always return a value in NodeDB::restorePreferences() (#9516) In case FScom is not defined there is no return statement. This moves the return outside of the ifdef to make sure a defined value is returned. * Fix config.display.use_long_node_name not saving (#9522) * Inkhud battery icon improvements. (#9513) * Inkhud battery icon improvements. Fixes the battery icon draining from the flat side towards the bump, which is backwards from general design language seen on most devices By request of kr0n05_ on discord, adds the ability to mirror the battery icon which fixes that issue in another way, and is also a common design seen on other devices. * Remove option for icon mirroring * Add border + dither to battery to prevent font overlap * Fix trunk format * Code cleanup, courtesy of Xaositek. * Add reply bot module with DM-only responses and rate limiting (#9456) * Implement Meshtastic reply bot module with ping and status features Adds a reply bot module that listens for /ping, /hello, and /test commands received via direct messages or broadcasts on the primary channel. The module always replies via direct message to the sender only, reporting hop count, RSSI, and SNR. Per-sender cooldowns are enforced to reduce network spam, and the module can be excluded at build time via a compile flag. Updates include the new module source files and required build configuration changes. * Update ReplyBotModule.cpp Co-authored-by: Copilot <[email protected]> * Update src/modules/ReplyBotModule.h Match the existing MESHTASTIC_EXCLUDE_* guard pattern so the module is excluded by default. Co-authored-by: Copilot <[email protected]> * Update src/modules/ReplyBotModule.cpp Co-authored-by: Copilot <[email protected]> * Tidying up --------- Co-authored-by: Copilot <[email protected]> Co-authored-by: Ben Meadors <[email protected]> * HotFix for ReplyBot - Modules.cpp included and moved configuration.h (#9532) * Implement UDP multicast handler start/stop to ensure proper lifecycle (#9524) * Implement UDP multicast handler start/stop to ensure proper lifecycle * Add close method to AsyncUDP and improve UDP multicast handler lifecycle management * Guard portduino * Undefine LED_BUILTIN (#9531) Keep variant in sync with https://github.com/meshtastic/firmware/commit/df40085 Co-authored-by: Ben Meadors <[email protected]> * Add agc reset attempt (#8163) * Add agc reset attempt * Add radioLibInterface include * Trunk * AGC reset don't crash, don't naively call * Update src/main.cpp Co-authored-by: Copilot <[email protected]> * Use Throttle function --------- Co-authored-by: Copilot <[email protected]> * Remove unused hmx variable (#9529) The variable is not used at all in the function, remove it to silence the compiler warning. Co-authored-by: Ben Meadors <[email protected]> * Update Adafruit MPU6050 to v2.2.7 (#9525) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update NeoPixel to v1.15.3 (#9530) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update Adafruit MPU6050 to v2.2.8 (#9534) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update meshtastic-esp8266-oled-ssd1306 digest to 21e484f (#9533) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Ben Meadors <[email protected]> * Rename LED_PIN to LED_POWER, move handling out of main to dedicated module (#9512) * Rename LED_PIN to LED_POWER, move handling out of main to dedicated module * Misc * Remove errant endif * Upgrade trunk (#9368) Co-authored-by: vidplace7 <[email protected]> * Upgrade trunk (#9547) Co-authored-by: vidplace7 <[email protected]> * Fix hop_limit upgrade detection (#9550) Co-authored-by: Ben Meadors <[email protected]> * meshtasticd: Fix install on Fedora 43 (#9556) * Update meshtastic/device-ui digest to 6c75195 (#9553) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Fix hop_limit upgrade detection (#9550) Co-authored-by: Ben Meadors <[email protected]> * Update protobufs (#9559) Co-authored-by: thebentern <[email protected]> * RPM: Include meshtasticd-start.sh (#9561) * Added toggable config and default for larger screens to enable / hide bubbles on chat messages (#9560) * Added toggable config and default for largeer screens to enable / hide bubbles on chat messages * Refactor message bubble rendering logic for improved layout and consistency * Move osk_found initialization for trackball/encoder devices before module setup to fix missing keyboard for L1 * Utilize current checks for consistency * Reverted last changes --------- Co-authored-by: Jason P <[email protected]> Co-authored-by: HarukiToreda <[email protected]> * Add Slash Key to VirtualKeyboard (#9563) Addition of ? and / to the virtual Keyboard via short and long press * Add support for CW2015 LiPo battery fuel gauge (#9564) * Add support for CW2015 LiPo battery fuel gauge * Address Copilot's concerns, minor fixups * Make LED_POWER blip even in critical battery (#9545) * Feat/add sen5x (#7245) * Move PMSA003I to separate class and update AQ telemetry * AirQualityTelemetry module not depend on PM sensor presence * Remove commented line * Fixes on PMS class * Add missing warmup period to wakeUp function * Fixes on compilation for different variants * Add functions to check for I2C bus speed and set it * Add ScreenFonts.h Co-authored-by: Hannes Fuchs <[email protected]> * PMSA003I 1st round test * Fix I2C scan speed * Fix minor issues and bring back I2C SPEED def * Remove PMSA003I library as its no longer needed * Remove unused I2C speed functions and cleanup * Cleanup of SEN5X specific code added from switching branches * Remove SCAN_I2C_CLOCK_SPEED block as its not needed * Remove associated functions for setting I2C speed * Unify build epoch to add flag in platformio-custom.py (#7917) * Unify build_epoch replacement logic in platformio-custom * Missed one * Fix build error in rak_wismesh_tap_v2 (#7905) In the logs was: "No screen resolution defined in build_flags. Please define DISPLAY_SIZE." set according to similar devices. * Put guards in place around debug heap operations (#7955) * Put guards in place around debug heap operations * Add macros to clean up code * Add pointer as well * Cleanup * Fix memory leak in NextHopRouter: always free packet copy when removing from pending * Formatting * Only queue 2 client notification * Merge pull request #7965 from compumike/compumike/fix-nrf52-bluetooth-memory-leak Fix memory leak in `NRF52Bluetooth`: allocate `BluetoothStatus` on stack, not heap * Merge pull request #7964 from compumike/compumike/fix-nimble-bluetooth-memory-leak Fix memory leak in `NimbleBluetooth`: allocate `BluetoothStatus` on stack, not heap * Update protobufs (#7973) Co-authored-by: thebentern <[email protected]> * T-Lora Pager: Support LR1121 and SX1280 models (#7956) * T-Lora Pager: Support LR1121 and SX1280 models * Remove ifdefs * Trunk * Trunk * Static memory pool allocation (#7966) * Static memory pool * Initializer * T-Lora Pager: Support LR1121 and SX1280 models (#7956) * T-Lora Pager: Support LR1121 and SX1280 models * Remove ifdefs --------- Co-authored-by: WillyJL <[email protected]> * Portduino dynamic alloc * Missed * Drop the limit * Update meshtastic-esp8266-oled-ssd1306 digest to 0cbc26b (#7977) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Fix json report crashes on esp32 (#7978) * Tweak maximums * Fix DRAM overflow on old esp32 targets * Guard bad time warning logs using GPS_DEBUG (#7897) In 2.7.7 / 2.7.8 we introduced some new checks for time accuracy. In combination, these result in a spamming of the logs when a bad time is found When the GPS is active, we're calling the GPS thread every 0.2secs. So this log could be printed 4,500 times in a no-lock scenario :) Reserve this experience for developers using GPS_DEBUG. Fixes https://github.com/meshtastic/firmware/issues/7896 * Scale probe buffer size based on current baud rate (#7975) * Scale probe buffer size based on current baud rate * Throttle bad time validation logging and fix time comparison logic * Remove comment * Missed the other instances * Copy pasta * Fix GPS gm_mktime memory leak (#7981) * Fix overflow of time value (#7984) * Fix overflow of time value * Revert "Fix overflow of time value" This reverts commit 084796920179e80a7500d36c25fd4d82b3ef4214. * That got boogered up * Remove PMSA003 include from modules * Add flag to exclude air quality module * Rework PMSA003I to align with new I2C scanner * Reworks AQ telemetry to match new dynamic allocation method * Adds VBLE_I2C_CLOCK_SPEED build flag for sensors with different I2C speed requirements * Reworks PMSA003I * Move add sensor template to separate file * Split telemetry on screen options * Add variable I2C clock compile flag * Added to Seeed Xiao S3 as demo * Fix drawFrame in AQ module * Module settings override to i2cScan module function * Move to CAN_RECLOCK_I2C per architecture * Add reclock function in TelemetrySensor.cpp * Add flag in ESP32 common * Minor fix * Move I2C reclock function to src/detect * Fix uninitMemberVar errors and compile issue * Make sleep, wakeUp functions generic * Fix STM32 builds * Add exclude AQ sensor to builds that have environmental sensor excludes * Add includes to AddI2CSensorTemplate.h * SEN5X first pass * WIP Sen5X functions * Further (non-working) progress in SEN5X * WIP Sen5X functions * Changes on SEN5X library - removing pm_env as well * Small cleanup of SEN5X sensors * Minor change for SEN5X detection * Remove dup code * Enable PM sensor before sending telemetry. This enables the PM sensor for a predefined period to allow for warmup. Once telemetry is sent, the sensor shuts down again. * Small cleanups in SEN5X sensor * Add dynamic measurement interval for SEN5X * Only disable SEN5X if enough time after reading. * Idle for SEN5X on communication error * Cleanup of logs and remove unnecessary delays * Small TODO * Settle on uint16_t for SEN5X PM data * Make AQTelemetry sensors non-exclusive * Implementation of cleaning in FS prefs and cleanup * Remove unnecessary LOGS * Add cleaning date storage in FS * Report non-cumulative PN * Bring back detection code for SEN5X after branch rebase * Add placeholder for admin message * Add VOC measurements and persistence (WIP) * Adds VOC measurements and state * Still not working on VOC Index persistence * Should it stay in continuous mode? * Add one-shot mode config flag to SEN5X * Add nan checks on sensor data from SEN5X * Working implementation on VOCState * Adds initial timer for SEN55 to not sleep if VOCstate is not stable (1h) * Adds conditions for stability and sensor state * Fixes on VOC state and mode swtiching * Adds a new RHT/Gas only mode, with 3600s stabilization time * Fixes the VOCState buffer mismatch * Fixes SEN50/54/55 model mistake * Adapt SEN5X to new sensor list structure. Improve reclock. * Improve reClockI2C conditions for different variants * Add sleep, wakeUp, pendingForReady, hasSleep functions to PM sensors to save battery * Add SEN5X * Fix merge errors * Update library dependencies in platformio.ini * Fix unitialized variables in SEN5X constructor * Fix missing import * Cleanup of SEN5X class * Exclude AQ sensor from wio-e5 due to flash limitations * Fix I2C clock change logic * Fix trunk * Fix on condition in reclock * Add check on polling interval of sen5x --------- Co-authored-by: Hannes Fuchs <[email protected]> Co-authored-by: Nashui-Yan <[email protected]> Co-authored-by: Ben Meadors <[email protected]> Co-authored-by: Tom Fifield <[email protected]> Co-authored-by: Mike Robbins <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: thebentern <[email protected]> Co-authored-by: WillyJL <[email protected]> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Fix embedded null byte truncation in ATAK strings (#9570) * Enable FORTIFY and SP for native builds (#9537) * Enable FORITFY and NX for native builds meshtasticd does have an executable stack and is not built with fortify, which makes exploitation of memory corruption bugs easier than it has to be. This enables fortify and a non-executable stack. This gives the following improvements on Debian Trixie: $ checksec --file=./.pio/build/native/meshtasticd RELRO STACK CANARY NX PIE RPATH RUNPATH Symbols FORTIFY Fortified Fortifiable FILE Partial RELRO No canary found NX enabled PIE enabled No RPATH No RUNPATH 13516 Symbols No 0 17 ./.pio/build/native/meshtasticd $ checksec --file=./.pio/build/native/meshtasticd RELRO STACK CANARY NX PIE RPATH RUNPATH Symbols FORTIFY Fortified Fortifiable FILE Partial RELRO Canary found NX enabled PIE enabled No RPATH No RUNPATH 13519 Symbols Yes 12 20 ./.pio/build/native/meshtasticd Tested with --sim mode I do not get any crashes or similar. * Enable FORTIFY and NX for native builds meshtasticd does have an executable stack and is not built with fortify, which makes exploitation of memory corruption bugs easier than it has to be. This enables fortify and a non-executable stack. This gives the following improvements on Debian Trixie: $ checksec --file=./.pio/build/native/meshtasticd RELRO STACK CANARY NX PIE RPATH RUNPATH Symbols FORTIFY Fortified Fortifiable FILE Partial RELRO No canary found NX enabled PIE enabled No RPATH No RUNPATH 13516 Symbols No 0 17 ./.pio/build/native/meshtasticd $ checksec --file=./.pio/build/native/meshtasticd RELRO STACK CANARY NX PIE RPATH RUNPATH Symbols FORTIFY Fortified Fortifiable FILE Partial RELRO Canary found NX enabled PIE enabled No RPATH No RUNPATH 13519 Symbols Yes 12 20 ./.pio/build/native/meshtasticd Tested with --sim mode I do not get any crashes or similar. * Enable FORTIFY and SP for native builds meshtasticd does have a stack canaries and is not built with fortify, which makes exploitation of memory corruption bugs easier than it has to be. This enables fortify and stack canaries. This gives the following improvements on Debian Trixie: $ checksec --file=./.pio/build/native/meshtasticd RELRO STACK CANARY NX PIE RPATH RUNPATH Symbols FORTIFY Fortified Fortifiable FILE Partial RELRO No canary found NX enabled PIE enabled No RPATH No RUNPATH 13516 Symbols No 0 17 ./.pio/build/native/meshtasticd $ checksec --file=./.pio/build/native/meshtasticd RELRO STACK CANARY NX PIE RPATH RUNPATH Symbols FORTIFY Fortified Fortifiable FILE Partial RELRO Canary found NX enabled PIE enabled No RPATH No RUNPATH 13519 Symbols Yes 12 20 ./.pio/build/native/meshtasticd Tested with --sim mode I do not get any crashes or similar. --------- Co-authored-by: Ben Meadors <[email protected]> * feat: Add SCD4X (#7198) * Move PMSA003I to separate class and update AQ telemetry * AirQualityTelemetry module not depend on PM sensor presence * Remove commented line * Fixes on PMS class * Add missing warmup period to wakeUp function * Fixes on compilation for different variants * Add functions to check for I2C bus speed and set it * Add ScreenFonts.h Co-authored-by: Hannes Fuchs <[email protected]> * PMSA003I 1st round test * Fix I2C scan speed * Fix minor issues and bring back I2C SPEED def * Remove PMSA003I library as its no longer needed * Add functional SCD4X * Fix screen frame for CO2 * Add admin commands to SCD4X class * Add further admin commands and fixes. * Remove unused I2C speed functions and cleanup * Cleanup of SEN5X specific code added from switching branches * Remove SCAN_I2C_CLOCK_SPEED block as its not needed * Remove associated functions for setting I2C speed * Unify build epoch to add flag in platformio-custom.py (#7917) * Unify build_epoch replacement logic in platformio-custom * Missed one * Fix build error in rak_wismesh_tap_v2 (#7905) In the logs was: "No screen resolution defined in build_flags. Please define DISPLAY_SIZE." set according to similar devices. * Put guards in place around debug heap operations (#7955) * Put guards in place around debug heap operations * Add macros to clean up code * Add pointer as well * Cleanup * Fix memory leak in NextHopRouter: always free packet copy when removing from pending * Formatting * Only queue 2 client notification * Merge pull request #7965 from compumike/compumike/fix-nrf52-bluetooth-memory-leak Fix memory leak in `NRF52Bluetooth`: allocate `BluetoothStatus` on stack, not heap * Merge pull request #7964 from compumike/compumike/fix-nimble-bluetooth-memory-leak Fix memory leak in `NimbleBluetooth`: allocate `BluetoothStatus` on stack, not heap * Update protobufs (#7973) Co-authored-by: thebentern <[email protected]> * T-Lora Pager: Support LR1121 and SX1280 models (#7956) * T-Lora Pager: Support LR1121 and SX1280 models * Remove ifdefs * Trunk * Trunk * Static memory pool allocation (#7966) * Static memory pool * Initializer * T-Lora Pager: Support LR1121 and SX1280 models (#7956) * T-Lora Pager: Support LR1121 and SX1280 models * Remove ifdefs --------- Co-authored-by: WillyJL <[email protected]> * Portduino dynamic alloc * Missed * Drop the limit * Update meshtastic-esp8266-oled-ssd1306 digest to 0cbc26b (#7977) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Fix json report crashes on esp32 (#7978) * Tweak maximums * Fix DRAM overflow on old esp32 targets * Guard bad time warning logs using GPS_DEBUG (#7897) In 2.7.7 / 2.7.8 we introduced some new checks for time accuracy. In combination, these result in a spamming of the logs when a bad time is found When the GPS is active, we're calling the GPS thread every 0.2secs. So this log could be printed 4,500 times in a no-lock scenario :) Reserve this experience for developers using GPS_DEBUG. Fixes https://github.com/meshtastic/firmware/issues/7896 * Scale probe buffer size based on current baud rate (#7975) * Scale probe buffer size based on current baud rate * Throttle bad time validation logging and fix time comparison logic * Remove comment * Missed the other instances * Copy pasta * Fix GPS gm_mktime memory leak (#7981) * Fix overflow of time value (#7984) * Fix overflow of time value * Revert "Fix overflow of time value" This reverts commit 084796920179e80a7500d36c25fd4d82b3ef4214. * That got boogered up * Remove PMSA003 include from modules * Add flag to exclude air quality module * Rework PMSA003I to align with new I2C scanner * Reworks AQ telemetry to match new dynamic allocation method * Adds VBLE_I2C_CLOCK_SPEED build flag for sensors with different I2C speed requirements * Reworks PMSA003I * Move add sensor template to separate file * Split telemetry on screen options * Add variable I2C clock compile flag * Added to Seeed Xiao S3 as demo * Fix drawFrame in AQ module * Module settings override to i2cScan module function * Move to CAN_RECLOCK_I2C per architecture * Add reclock function in TelemetrySensor.cpp * Add flag in ESP32 common * Minor fix * Move I2C reclock function to src/detect * Fix uninitMemberVar errors and compile issue * Make sleep, wakeUp functions generic * Fix STM32 builds * Add exclude AQ sensor to builds that have environmental sensor excludes * Add includes to AddI2CSensorTemplate.h * SEN5X first pass * WIP Sen5X functions * Further (non-working) progress in SEN5X * WIP Sen5X functions * Changes on SEN5X library - removing pm_env as well * Small cleanup of SEN5X sensors * Minor change for SEN5X detection * Remove dup code * Enable PM sensor before sending telemetry. This enables the PM sensor for a predefined period to allow for warmup. Once telemetry is sent, the sensor shuts down again. * Small cleanups in SEN5X sensor * Add dynamic measurement interval for SEN5X * Only disable SEN5X if enough time after reading. * Idle for SEN5X on communication error * Cleanup of logs and remove unnecessary delays * Small TODO * Settle on uint16_t for SEN5X PM data * Make AQTelemetry sensors non-exclusive * Implementation of cleaning in FS prefs and cleanup * Remove unnecessary LOGS * Add cleaning date storage in FS * Report non-cumulative PN * Bring back detection code for SEN5X after branch rebase * Add placeholder for admin message * Add VOC measurements and persistence (WIP) * Adds VOC measurements and state * Still not working on VOC Index persistence * Should it stay in continuous mode? * Add one-shot mode config flag to SEN5X * Add nan checks on sensor data from SEN5X * Working implementation on VOCState * Adds initial timer for SEN55 to not sleep if VOCstate is not stable (1h) * Adds conditions for stability and sensor state * Fixes on VOC state and mode swtiching * Adds a new RHT/Gas only mode, with 3600s stabilization time * Fixes the VOCState buffer mismatch * Fixes SEN50/54/55 model mistake * Adapt SEN5X to new sensor list structure. Improve reclock. * Improve reClockI2C conditions for different variants * Add sleep, wakeUp, pendingForReady, hasSleep functions to PM sensors to save battery * Add SEN5X * Fix merge errors * Small reordering in PMS class for consistency * If one sensor fails, AQ telemetry still reports data * Small formatting fix * Add SEN5X to AQI in ScanI2C * SCD4X now part of AQ module with template list * Fixes difference between idle and sleep * In LowPower, sleep is disabled * Requires testing for I2C clock comms for commands * Remove unnecessary import * Add co2 to serialized AQ metrics * Update library dependencies in platformio.ini * Fix unitialized variables in SEN5X constructor * Fix missing import * Fix uninitMemberVars * Fix import error for SCD4X * Fix I2CClock logic * Fix not reclocking back to 700000Hz * Fix multiple sensors being read simultaneously * The logic in AQ module is different to the one in EnvironmentTelemetryModule. In Env module, if any sensor fails to getMetrics, no valid flag for the module. This prevents other sensors to report data. * Fix pending clock change in PMSA003 * Cleanup of SEN5X class * Exclude AQ sensor from wio-e5 due to flash limitations * Fix I2C clock change logic * Make sure clock is always set to needed value * Fix returns * Fix trunk * Fix on condition in reclock * Fix trunk * Add check on polling interval of sen5x * Add missing serializer --------- Co-authored-by: Hannes Fuchs <[email protected]> Co-authored-by: Nashui-Yan <[email protected]> Co-authored-by: Ben Meadors <[email protected]> Co-authored-by: Tom Fifield <[email protected]> Co-authored-by: Mike Robbins <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: thebentern <[email protected]> Co-authored-by: WillyJL <[email protected]> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * chore(deps): update gxepd2 to v1.6.7 (#9577) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Temporarily un-renovate libch341 (#9587) * Update protobufs (#9588) Co-authored-by: thebentern <[email protected]> * Update built-in documentation for current method of implementation (#9592) * Refactor logging in ProtobufModule to ensure message details are logged after successful decoding (#9536) * Update RDEF parameters for CN region * add namiji-c3v1 * add namiji-c3v1 for github action build * update: namiji-c3v1 and namiji-c3v0 * feat(platformio): add non-USB environment configuration for esp32c3_super_mini * add utf8 display (#2) * fix: utf8 discard some char * fix: utf8 discard some char * fix: utf8 discard some char * Fix the issue of UTF-8 CJK immediately followed by emojis (#3) Add 1px between msg headline and UTF-8 Chinese line Fix the issue of UTF-8 Chinese characters being immediately followed by emojis * fix: update OLED_CJK conditional to ensure proper font setting * feat: add macros to enable/disable BBQ10, MPR121, and TCA8418 keyboards. * fix build * Chinese input (#5) * fix: enable user press input for virtual keyboard IME toggle * enable sensor support for GAT562 mesh tracker configurations * feat: add M5Stack Cardputer ADV * fix: handle user press input for display off * add 1500 emojis (#7) * add 1500 emojis add 1500 emojis * add 3000+ emotes add 3000+ emotes with define EMOJ3K * Emotes next (#8) * add new emotes * new emotes ok * Update emote. * feat: meshCN Communityization * fix: TBEAM board build. * Trunk * Use correct name for ALT_BUTTON_PIN (#9225) * Mute specific nodes (#9209) * Regen protobufs * Ensure mute state is set when node is ignored * Added mechanism for toggling muted state * Implement the ability to mute specific nodes * Switch boolean value for bitmask * Correctly toggle bitfield position 2 on-change to mute state * Dont push submodule refs * Log correct info * Trunk fmt * Update protobuf ref to master branch of base * Update src/modules/ExternalNotificationModule.cpp Co-authored-by: Copilot <[email protected]> * Re-sync generated files --------- Co-authored-by: Jason P <[email protected]> Co-authored-by: Copilot <[email protected]> Co-authored-by: Jonathan Bennett <[email protected]> * EXCLUDE_AUDIO on (original) ESP32 (#9276) iram is scarce, give it back! * Esp32 lower power (#9) * feat: add support for SakuraPi Pocket Namiji hardware model * fix: update MQTT address to MeshCN(mess.host) * fix: improve MAC address retrieval logic to check for custom MAC first * update: framework-arduinoespressif32 package in esp32c3.ini * fix: update board_level to 'extra' in platformio.ini for t-echo-plus variant * fix: add I2C_NO_RESCAN flag and comment out BUTTON_PIN definition in variant.h * fix: update NTP server address to Aliyun in NodeDB configuration * fix: add meshcn support in CI matrix generation and update platformio.ini for esp32c3 variants * Add support for Chinese localization in UI strings - Introduced a new header file `UiStrings.h` to manage UI string localization. - Updated various modules to use the `UI_STR` macro for string translations, allowing for English and Chinese text based on the defined language. - Modified the `platformio.ini` to enable Chinese language support and configure OLED settings for CJK characters. - Ensured that all relevant user-facing strings in the application are now translatable, enhancing accessibility for Chinese-speaking users. * fix: update CJK font size and improve Chinese localization in UI * fix: remove conditional for OLED_CJK to simplify row determination in device focus display * add_tinylora_mv (#11) * Upgrade trunk (#9128) Co-authored-by: vidplace7 <[email protected]> * Update protobufs (#9148) Co-authored-by: thebentern <[email protected]> * Add support for LilyGo T-Echo Plus (#9149) * Add t-echo plus support * T-Echo plus hw model * Cruft * Fix * Added InkHUD style touch backlight control * chore(deps): update dorny/test-reporter action to v2.5.0 (#9167) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * chore(deps): update meshtastic/device-ui digest to 272defc (#9166) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Upgrade trunk (#9183) Co-authored-by: vidplace7 <[email protected]> * Added support for the new SSD1306 control panel. (#9192) * Upgrade trunk (#9208) Co-authored-by: vidplace7 <[email protected]> * disable some board * disable some board * feat(platformio): add non-USB environment configuration for esp32c3_super_mini * add utf8 display (#2) * fix: docker build * fix: utf8 discard some char * fix: utf8 discard some char * fix: utf8 discard some char * Fix the issue of UTF-8 CJK immediately followed by emojis (#3) Add 1px between msg headline and UTF-8 Chinese line Fix the issue of UTF-8 Chinese characters being immediately followed by emojis * fix: update OLED_CJK conditional to ensure proper font setting * feat: add macros to enable/disable BBQ10, MPR121, and TCA8418 keyboards. * Add 1px line spacing for CJK (#4) * fix build * Chinese input (#5) * Chinese input(fix c3) (#6) * fix: enable user press input for virtual keyboard IME toggle * enable sensor support for GAT562 mesh tracker configurations * feat: add M5Stack Cardputer ADV * fix: handle user press input for display off * add 1500 emojis (#7) * add 1500 emojis add 1500 emojis * add 3000+ emotes add 3000+ emotes with define EMOJ3K * Emotes next (#8) * add new emotes * new emotes ok * Update emote. * 🔧 Fix LNA/PA power control for Heltec v4, wireless tracker v2 (#9029) * Fix LNA/PA power control for Heltec v4, wireless tracker v2 * Stop using pin 46 as RF switch, just let DIO2 switch handle the RF path --------- Co-authored-by: Ben Meadors <[email protected]> * Upgrade trunk (#9219) Co-authored-by: vidplace7 <[email protected]> * Fix screen not sleeping due to power status updates (#9216) Co-authored-by: Ben Meadors <[email protected]> * Fix rotary regression and tighten up playBeep (#9221) * Fix T-LoRA rotary regression and tighten up playBeep * Derp * Increase duration of chirp sound in playChirp * Remove disabled gh action * Trunk * feat: meshCN Communityization * Screenless Devices want to mute too! (#9210) * Screenless Devices want to mute too! * Add logging for actions * Gate to screenless devices only * WisMesh Tag was missing HAS_SCREEN 0 --------- Co-authored-by: Ben Meadors <[email protected]> * Use correct name for ALT_BUTTON_PIN (#9225) * feat: add OLED_CJK support and modify input handling for GAT562 mesh tracker * Upgrade trunk (#9229) Co-authored-by: vidplace7 <[email protected]> * CH341 MAC address derivation from serial and product string (#9226) Updated MAC address derivation logic to include product string in hashing. * Increase default position broadcast intervals and enforce minimums for default channels * Fix TFT_MESH settings across setting and recalling (#9234) * Fix TFT_MESH settings across setting and recalling * Fix a word in documentation * Update src/graphics/Screen.cpp Co-authored-by: Copilot <[email protected]> * Update src/graphics/Screen.cpp Co-authored-by: Copilot <[email protected]> --------- Co-authored-by: Copilot <[email protected]> * Add Rak 6421 autoconf (#9010) * Add Rak 6421 autoconf * Minor memory safety hardening * T-Watch S3 Plus GPS support (#9235) * Upgrade trunk (#9229) Co-authored-by: vidplace7 <[email protected]> * support T-Watch S3 Plus GPS --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: vidplace7 <[email protected]> * Add copilot-instructions.md for better contextual hints * Update protobufs (#9242) Co-authored-by: thebentern <[email protected]> * Update diy_promicro platformio.ini (#9245) Thus PR updates extra_scripts definition. Current env.extra_scripts don't triggers `extra_scripts/nrf52_extra.py` and user have to convert hex to uf2 manually. * Gr language specific font (#8808) * add Greek special font * add Greek fonts with with proper Greek glyphs * lint fix ( run trunk fmt) --------- Co-authored-by: Ben Meadors <[email protected]> * Remove a strlcpy reference (#9249) * Add support for sevice start wrapper (#8676) Co-authored-by: Ben Meadors …
* Add support for Hackaday Communicator function keys (#9444) * Add portduino_status, assign hardware device IDs... (#9441) * Add portduino_status, assign hardware device IDs, and try to recover a CH341 device on a USB error * Minor fixes suggested by Copilot * BaseUI Message Bubble Improvements (#9452) * Improve Message bubbles for more distinct markers and improved layout * Tune message bubble size and corner markers * Finish message bubble tuning --------- Co-authored-by: HarukiToreda <[email protected]> * Add model workflows (#9462) * Add GitHub workflows for issue completeness, duplicate detection, onboarding, and contribution quality checks * Fix indentation * Refactor GitHub workflows for issue handling * Consolidate to two triage workflows * Update .github/workflows/models_pr_triage.yml Co-authored-by: Copilot <[email protected]> --------- Co-authored-by: Copilot <[email protected]> * Update LovyanGFX to v1.2.19 (#9405) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * External Notification - handleReceived Rewrite (#9454) * First steps in consolidating code and minimizing rewrite * Continuing code cleanup * Merge containsBell and !isMuted to a single code path * Forgot about alert_message_buzzer in the cleanup * More code refinements and cleanup * Fix nagCycleCutoff * CoPilot Updates * Initial serialModule cleanup (#9465) * Initial serialModule cleanup * Move SERIAL_PRINT_PORT definition to variant.h * Add missed c6 check * Update src/modules/SerialModule.cpp Compile error for invalid SERIAL_PRINT_OBJECT value Co-authored-by: Copilot <[email protected]> --------- Co-authored-by: Copilot <[email protected]> * Support fully direct request/responses (#9455) Co-authored-by: Ben Meadors <[email protected]> * Move input init to an init function in InputBroker (#9463) * Move input init to an init function in iInputBroker * Unbreak targets with EXCLUDE_INPUTBROKER * Update src/input/InputBroker.cpp Co-authored-by: Copilot <[email protected]> * Fix conditional compilation for input broker * Apply suggestions from code review Co-authored-by: Copilot <[email protected]> * Trunk --------- Co-authored-by: Ben Meadors <[email protected]> Co-authored-by: Copilot <[email protected]> * Just set LED_BUILTIN universally to -1, as we don't use it. (#8830) * Just set LED_BUILTIN universally to -1, as we don't use it. * LUD_BUILTIN workarounds * Squash the LED_BUILTINs that sneaked in * Don't kill valid pin derfine * Fix NimBLE deinit null check * Avoid short-circuit evaluation issues in Telemetry (#9467) * Make sensors in telemetry non-definitory Co-authored-by: Ben Meadors <[email protected]> * re-add unintentionally removed include * Undefine LED_BUILTIN where needed * Add a watchdog module to meshsolar. (#9337) * add watchdog module * Restore the code in power.h --------- Co-authored-by: Ben Meadors <[email protected]> * Trunk * PRs with needs-review still should get bot labeled * Update libch341-spi-userspace digest to af9bc27 (#9472) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Fix logic for rak12035 sensor default config and improve messaging (#9414) * better logic to check if the RAK12035 soil sensor is calibrated, better log messaging if either of the default values were used. * . * changes to how default calibration is done and a message it the default calibration is used pointing to the actual calibration sketch so the user can find it and use it to improve accuracy. --------- Co-authored-by: Ben Meadors <[email protected]> * Add support for the hardware buttons on Bluetooth Nugget device (#9468) Co-authored-by: Ben Meadors <[email protected]> * feat(stm32): Add Milesight GS301 Bathroom Odor Detector (#9359) - STM32WLE5CCU6 - NFC (unsupported): NXP NT3H2211W0FTTJ (NTAG I2C plus: NFC Forum T2T with I2C interface, password protection and energy harvesting) - Sensor (unsupported): Analog ADuCM355 (SHTC3 is connected to ADuCM355 and not directly accessible) - Bicolor LED - User button (presently not functional in STM32 variants) The definitions for sensor voltage control are present but commented out to save power, due to lack of sensor support. Powered by 4x 4000mAh RAMWAY ER18505 Li-SOCl2 batteries. Flashing: 1. Power down device (remove batteries) 2. Connect USB-UART to J1 (USART2), pinout is below, do not connect +3V3 pin yet 3. Short BOOT pins next to J1 4. Connect +3V3 pin or insert batteries while BOOT pins are shorted 5. Use STM32CubeProgrammer, connect by UART mode 6. Load firmware .hex and download J1 (USART2); Molex Picoblade (P=1.25mm * 4) 1. +3V3 2. PA3_USART2_RX_J1 3. PA2_USART2_TX_J1 4. GND Signed-off-by: Andrew Yong <[email protected]> Co-authored-by: Ben Meadors <[email protected]> * enable long interleaving mode for LR11x0 and SX128x (#9399) Using long interleaving is not a breaking change, the receiver node is able to use the lora header to know if LI encoding is used or not and will decode LI packets correctly. However the problem is SX127x and other first generation LoRa IP which do not support LI at all, for theses it is a breaking change. HOWEVER due to the sync word bug the LR11x0 already can't talk with SX127x, so if we enable LI on theses no one would be able to tell. Same for SX128x altho this is because it works on 2.4Ghz which is incompatible with SX127x. Co-authored-by: Ben Meadors <[email protected]> * Add initial Nix shell (#8530) * Add initial Nix shell * Update flake.nix Co-authored-by: Copilot <[email protected]> --------- Co-authored-by: Ben Meadors <[email protected]> Co-authored-by: Copilot <[email protected]> * Remove stale variant.h defines (#9470) * Remove noop CANNED_MESSAGE_MODULE_ENABLE define * Remove over-eager warning removal * Remove unused LED_CONN * Dead defines removal * Rename oddball LED pin name * Rename second oddball LED pin name * Remove another dead define * More variant.h cleanup. LED_NOTIFICATION, remove dead code, etc (#9477) * Remove errant symbol * Add ledOff if not defined * Revert "Update libch341-spi-userspace digest to af9bc27 (#9472)" (#9483) This reverts commit b18742c2112309199150f39cb5a85a718290690e. * Add custom ringtone definition for RAK4631 and enable buzzer pin (#9481) * Update pschatzmann_arduino-audio-driver to v0.2.1 (#9398) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update meshtastic/device-ui digest to 63967a4 (#9475) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Fix issue triage workflow by clarifying device log requirements and improving JSON response handling * re-enable RTC support on THINKNODE M3 and M6 * Adjust pin poweroff for Thinknode M6 * You get an RTC, and you get an RTC! (delete HAS_RTC as it wasn't actually doing much) (#9493) * Change canned message recipient's previous page to send page (#9227) * Change canned message recipient's previous page to send page * Set previousPage for new menu pages Set nextPage in back MenuPages to previousPage Removed back MenuAction --------- Co-authored-by: zeropt <[email protected]> Co-authored-by: HarukiToreda <[email protected]> * Add on-screen keyboard to InkHUD (#9445) * Added keyboard option to menu. Shows a keyboard layout but does not type. * Keyboard types into text box and wraps. * send FreeText messages from the send submenu - renamed `KEYBOARD` action to `FREE_TEXT` and moved its menu location to the send submenu - opening the FreeText applet from the menu keeps the menu open and disabled the timeout - the FreeText applet writes to inkhud->freetext - the sending a canned message checks inkhud->freetext and if it isn't empty, sends and clears the inkhud->freetext * Text scrolls along with input * handle free text message completion as an event implements `handleFreeText` and `OnFreeText()` for system applets to interface with the FreeText Applet The FreeText Applet generates an `OnFreeText` event when completing a message which is handled by the first system applet with the `handleFreeText` flag set to true. The Menu Applet now handles this event. * call `onFreeText` whenever the FreeText Applet exits allows the menu to consistently restart its auto-close timeout * Add text cursor * Change UI to remove the header and make text box longer Keyboard displays captial letters for legibility Keyboard types captial letters with long press * center FreeText keys and draw symbolic buttons Move input field and keyboard drawing to their own functions: - `drawInputField()` - `drawKeyboard()` Store the keys in a 1-dimensional array Implement a matching array, `keyWidths`, to set key widths relative to the font size * Add character limit and counter * Fix softlock when hitting character limit * Move text box as its own menu page * rework FreeTextApplet into KeyboardApplet - The Keyboard Applet renders an on-screen keyboard at the lower portion of the screen. - Calling `inkhud->openKeyboard()` sends all the user applets to the background and resizes the first system applet with `handleFreeText` set to True to fit above the on-screen keyboard - `inkhud->closeKeyboard()` reverses this layout change * Fix input box rendering and add character limit to menu free text * remove FREE_TEXT menu page and use the FREE_TEXT menu action solely * force update when changing the free text message * reorganize KeyboardApplet - add comments after each row of `key[]` and `keyWidths[]` to preserve formatting - The selected key is now set using the key index directly - rowWidths are pre-calculated in the KeyboardApplet constructor - removed `drawKeyboard()` and implemented `drawKeyLabel()` * implement `Renderer::clearTile()` to clear the region below a tile * add parameter to forceUpdate() for re-rendering the full screen setting the `all` parameter to true in `inkhud->forceUpdate()` now causes the full screen buffer to clear an re-render. This is helpful for when sending applets to the background and the UI needs a clean canvas. System Applets can now set the `alwaysRender` flag true which causes it to re-render on every screen update. This is set to true in the Battery Icon Applet. * clean up tile clearing loops * implement dirty rendering to let applets draw over their previous render - `Applet::requestUpdate()` now has an optional flag to keep the old canvas - If honored, the renderer calls `render(true)` which runs `onDirtyRender()` instead of `onRender()` for said applet - The renderer will not call a dirty render if the full screen is getting re-rendered * simplify arithmetic in clearTile for better understanding * combine Applet::onRender() and Applet::onDirtyRender() into Applet::onRender(bool full) - add new `full` parameter to onRender() in every applet. This parameter can be ignored by most applets. - `Applet::requestUpdate()` has an optional flag that requests a full render by default * implement tile and partial rendering in KeyboardApplet * add comment for drawKeyLabel() * improve clarity of byte operations in clearTile() * remove typo and commented code * fix inaccurate comments * add null check to openKeyboard() and closeKeyboard() --------- Co-authored-by: zeropt <[email protected]> Co-authored-by: HarukiToreda <[email protected]> * Fix typo in LED state comment And removed unused define * Fix OTA filename determination to use unified format for ESP32 (#9488) * Refuse to send legacy DMs simply because the remote public key is unknown (#9485) * Refuse to send legacy DMs simply because the remote public key is unknown * Update src/mesh/Router.cpp - use more specific error Co-authored-by: Copilot <[email protected]> * Update src/mesh/Router.cpp - more detail in warning message Co-authored-by: Copilot <[email protected]> --------- Co-authored-by: Copilot <[email protected]> * Don't ever define PIN_LED or BLE_LED_INVERTED (#9494) * Don't ever define PIN_LED * Deprecate BLE_LED_INVERTED * Add StatusMessage module and config overrides (#9351) * Add StatusMessage module and config overrides * Trunk * Don't reboot node simply for a StatusMessage config update * Missed in reviews - fixing send bubble (#9505) * Prefer EXT_PWR_DETECT pin over chargingVolt to detect power unplugged (#9511) * Power off control pin on Thinknode m5 during deepsleep and add RTC (#9510) * Power off control pin on Thinknode m5 during deepsleep * Apply suggestion from @Copilot Co-authored-by: Copilot <[email protected]> * Finish HAS_RTC cleanup * Add RTC for Thinknode M5 * Don't double-init Wire * Specify the RTC chip directly rather than use SensorRtcHelper. Saves a bit of flash, and avoid mis-detection --------- Co-authored-by: Copilot <[email protected]> * Make sure we always return a value in NodeDB::restorePreferences() (#9516) In case FScom is not defined there is no return statement. This moves the return outside of the ifdef to make sure a defined value is returned. * Make sure we always return a value in NodeDB::restorePreferences() (#9516) In case FScom is not defined there is no return statement. This moves the return outside of the ifdef to make sure a defined value is returned. * Fix config.display.use_long_node_name not saving (#9522) * Inkhud battery icon improvements. (#9513) * Inkhud battery icon improvements. Fixes the battery icon draining from the flat side towards the bump, which is backwards from general design language seen on most devices By request of kr0n05_ on discord, adds the ability to mirror the battery icon which fixes that issue in another way, and is also a common design seen on other devices. * Remove option for icon mirroring * Add border + dither to battery to prevent font overlap * Fix trunk format * Code cleanup, courtesy of Xaositek. * Add reply bot module with DM-only responses and rate limiting (#9456) * Implement Meshtastic reply bot module with ping and status features Adds a reply bot module that listens for /ping, /hello, and /test commands received via direct messages or broadcasts on the primary channel. The module always replies via direct message to the sender only, reporting hop count, RSSI, and SNR. Per-sender cooldowns are enforced to reduce network spam, and the module can be excluded at build time via a compile flag. Updates include the new module source files and required build configuration changes. * Update ReplyBotModule.cpp Co-authored-by: Copilot <[email protected]> * Update src/modules/ReplyBotModule.h Match the existing MESHTASTIC_EXCLUDE_* guard pattern so the module is excluded by default. Co-authored-by: Copilot <[email protected]> * Update src/modules/ReplyBotModule.cpp Co-authored-by: Copilot <[email protected]> * Tidying up --------- Co-authored-by: Copilot <[email protected]> Co-authored-by: Ben Meadors <[email protected]> * HotFix for ReplyBot - Modules.cpp included and moved configuration.h (#9532) * Implement UDP multicast handler start/stop to ensure proper lifecycle (#9524) * Implement UDP multicast handler start/stop to ensure proper lifecycle * Add close method to AsyncUDP and improve UDP multicast handler lifecycle management * Guard portduino * Undefine LED_BUILTIN (#9531) Keep variant in sync with https://github.com/meshtastic/firmware/commit/df40085 Co-authored-by: Ben Meadors <[email protected]> * Add agc reset attempt (#8163) * Add agc reset attempt * Add radioLibInterface include * Trunk * AGC reset don't crash, don't naively call * Update src/main.cpp Co-authored-by: Copilot <[email protected]> * Use Throttle function --------- Co-authored-by: Copilot <[email protected]> * Remove unused hmx variable (#9529) The variable is not used at all in the function, remove it to silence the compiler warning. Co-authored-by: Ben Meadors <[email protected]> * Update Adafruit MPU6050 to v2.2.7 (#9525) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update NeoPixel to v1.15.3 (#9530) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update Adafruit MPU6050 to v2.2.8 (#9534) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update meshtastic-esp8266-oled-ssd1306 digest to 21e484f (#9533) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Ben Meadors <[email protected]> * Rename LED_PIN to LED_POWER, move handling out of main to dedicated module (#9512) * Rename LED_PIN to LED_POWER, move handling out of main to dedicated module * Misc * Remove errant endif * Upgrade trunk (#9368) Co-authored-by: vidplace7 <[email protected]> * Upgrade trunk (#9547) Co-authored-by: vidplace7 <[email protected]> * Fix hop_limit upgrade detection (#9550) Co-authored-by: Ben Meadors <[email protected]> * meshtasticd: Fix install on Fedora 43 (#9556) * Update meshtastic/device-ui digest to 6c75195 (#9553) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Fix hop_limit upgrade detection (#9550) Co-authored-by: Ben Meadors <[email protected]> * Update protobufs (#9559) Co-authored-by: thebentern <[email protected]> * RPM: Include meshtasticd-start.sh (#9561) * Added toggable config and default for larger screens to enable / hide bubbles on chat messages (#9560) * Added toggable config and default for largeer screens to enable / hide bubbles on chat messages * Refactor message bubble rendering logic for improved layout and consistency * Move osk_found initialization for trackball/encoder devices before module setup to fix missing keyboard for L1 * Utilize current checks for consistency * Reverted last changes --------- Co-authored-by: Jason P <[email protected]> Co-authored-by: HarukiToreda <[email protected]> * Add Slash Key to VirtualKeyboard (#9563) Addition of ? and / to the virtual Keyboard via short and long press * Add support for CW2015 LiPo battery fuel gauge (#9564) * Add support for CW2015 LiPo battery fuel gauge * Address Copilot's concerns, minor fixups * Make LED_POWER blip even in critical battery (#9545) * Feat/add sen5x (#7245) * Move PMSA003I to separate class and update AQ telemetry * AirQualityTelemetry module not depend on PM sensor presence * Remove commented line * Fixes on PMS class * Add missing warmup period to wakeUp function * Fixes on compilation for different variants * Add functions to check for I2C bus speed and set it * Add ScreenFonts.h Co-authored-by: Hannes Fuchs <[email protected]> * PMSA003I 1st round test * Fix I2C scan speed * Fix minor issues and bring back I2C SPEED def * Remove PMSA003I library as its no longer needed * Remove unused I2C speed functions and cleanup * Cleanup of SEN5X specific code added from switching branches * Remove SCAN_I2C_CLOCK_SPEED block as its not needed * Remove associated functions for setting I2C speed * Unify build epoch to add flag in platformio-custom.py (#7917) * Unify build_epoch replacement logic in platformio-custom * Missed one * Fix build error in rak_wismesh_tap_v2 (#7905) In the logs was: "No screen resolution defined in build_flags. Please define DISPLAY_SIZE." set according to similar devices. * Put guards in place around debug heap operations (#7955) * Put guards in place around debug heap operations * Add macros to clean up code * Add pointer as well * Cleanup * Fix memory leak in NextHopRouter: always free packet copy when removing from pending * Formatting * Only queue 2 client notification * Merge pull request #7965 from compumike/compumike/fix-nrf52-bluetooth-memory-leak Fix memory leak in `NRF52Bluetooth`: allocate `BluetoothStatus` on stack, not heap * Merge pull request #7964 from compumike/compumike/fix-nimble-bluetooth-memory-leak Fix memory leak in `NimbleBluetooth`: allocate `BluetoothStatus` on stack, not heap * Update protobufs (#7973) Co-authored-by: thebentern <[email protected]> * T-Lora Pager: Support LR1121 and SX1280 models (#7956) * T-Lora Pager: Support LR1121 and SX1280 models * Remove ifdefs * Trunk * Trunk * Static memory pool allocation (#7966) * Static memory pool * Initializer * T-Lora Pager: Support LR1121 and SX1280 models (#7956) * T-Lora Pager: Support LR1121 and SX1280 models * Remove ifdefs --------- Co-authored-by: WillyJL <[email protected]> * Portduino dynamic alloc * Missed * Drop the limit * Update meshtastic-esp8266-oled-ssd1306 digest to 0cbc26b (#7977) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Fix json report crashes on esp32 (#7978) * Tweak maximums * Fix DRAM overflow on old esp32 targets * Guard bad time warning logs using GPS_DEBUG (#7897) In 2.7.7 / 2.7.8 we introduced some new checks for time accuracy. In combination, these result in a spamming of the logs when a bad time is found When the GPS is active, we're calling the GPS thread every 0.2secs. So this log could be printed 4,500 times in a no-lock scenario :) Reserve this experience for developers using GPS_DEBUG. Fixes https://github.com/meshtastic/firmware/issues/7896 * Scale probe buffer size based on current baud rate (#7975) * Scale probe buffer size based on current baud rate * Throttle bad time validation logging and fix time comparison logic * Remove comment * Missed the other instances * Copy pasta * Fix GPS gm_mktime memory leak (#7981) * Fix overflow of time value (#7984) * Fix overflow of time value * Revert "Fix overflow of time value" This reverts commit 084796920179e80a7500d36c25fd4d82b3ef4214. * That got boogered up * Remove PMSA003 include from modules * Add flag to exclude air quality module * Rework PMSA003I to align with new I2C scanner * Reworks AQ telemetry to match new dynamic allocation method * Adds VBLE_I2C_CLOCK_SPEED build flag for sensors with different I2C speed requirements * Reworks PMSA003I * Move add sensor template to separate file * Split telemetry on screen options * Add variable I2C clock compile flag * Added to Seeed Xiao S3 as demo * Fix drawFrame in AQ module * Module settings override to i2cScan module function * Move to CAN_RECLOCK_I2C per architecture * Add reclock function in TelemetrySensor.cpp * Add flag in ESP32 common * Minor fix * Move I2C reclock function to src/detect * Fix uninitMemberVar errors and compile issue * Make sleep, wakeUp functions generic * Fix STM32 builds * Add exclude AQ sensor to builds that have environmental sensor excludes * Add includes to AddI2CSensorTemplate.h * SEN5X first pass * WIP Sen5X functions * Further (non-working) progress in SEN5X * WIP Sen5X functions * Changes on SEN5X library - removing pm_env as well * Small cleanup of SEN5X sensors * Minor change for SEN5X detection * Remove dup code * Enable PM sensor before sending telemetry. This enables the PM sensor for a predefined period to allow for warmup. Once telemetry is sent, the sensor shuts down again. * Small cleanups in SEN5X sensor * Add dynamic measurement interval for SEN5X * Only disable SEN5X if enough time after reading. * Idle for SEN5X on communication error * Cleanup of logs and remove unnecessary delays * Small TODO * Settle on uint16_t for SEN5X PM data * Make AQTelemetry sensors non-exclusive * Implementation of cleaning in FS prefs and cleanup * Remove unnecessary LOGS * Add cleaning date storage in FS * Report non-cumulative PN * Bring back detection code for SEN5X after branch rebase * Add placeholder for admin message * Add VOC measurements and persistence (WIP) * Adds VOC measurements and state * Still not working on VOC Index persistence * Should it stay in continuous mode? * Add one-shot mode config flag to SEN5X * Add nan checks on sensor data from SEN5X * Working implementation on VOCState * Adds initial timer for SEN55 to not sleep if VOCstate is not stable (1h) * Adds conditions for stability and sensor state * Fixes on VOC state and mode swtiching * Adds a new RHT/Gas only mode, with 3600s stabilization time * Fixes the VOCState buffer mismatch * Fixes SEN50/54/55 model mistake * Adapt SEN5X to new sensor list structure. Improve reclock. * Improve reClockI2C conditions for different variants * Add sleep, wakeUp, pendingForReady, hasSleep functions to PM sensors to save battery * Add SEN5X * Fix merge errors * Update library dependencies in platformio.ini * Fix unitialized variables in SEN5X constructor * Fix missing import * Cleanup of SEN5X class * Exclude AQ sensor from wio-e5 due to flash limitations * Fix I2C clock change logic * Fix trunk * Fix on condition in reclock * Add check on polling interval of sen5x --------- Co-authored-by: Hannes Fuchs <[email protected]> Co-authored-by: Nashui-Yan <[email protected]> Co-authored-by: Ben Meadors <[email protected]> Co-authored-by: Tom Fifield <[email protected]> Co-authored-by: Mike Robbins <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: thebentern <[email protected]> Co-authored-by: WillyJL <[email protected]> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Fix embedded null byte truncation in ATAK strings (#9570) * Enable FORTIFY and SP for native builds (#9537) * Enable FORITFY and NX for native builds meshtasticd does have an executable stack and is not built with fortify, which makes exploitation of memory corruption bugs easier than it has to be. This enables fortify and a non-executable stack. This gives the following improvements on Debian Trixie: $ checksec --file=./.pio/build/native/meshtasticd RELRO STACK CANARY NX PIE RPATH RUNPATH Symbols FORTIFY Fortified Fortifiable FILE Partial RELRO No canary found NX enabled PIE enabled No RPATH No RUNPATH 13516 Symbols No 0 17 ./.pio/build/native/meshtasticd $ checksec --file=./.pio/build/native/meshtasticd RELRO STACK CANARY NX PIE RPATH RUNPATH Symbols FORTIFY Fortified Fortifiable FILE Partial RELRO Canary found NX enabled PIE enabled No RPATH No RUNPATH 13519 Symbols Yes 12 20 ./.pio/build/native/meshtasticd Tested with --sim mode I do not get any crashes or similar. * Enable FORTIFY and NX for native builds meshtasticd does have an executable stack and is not built with fortify, which makes exploitation of memory corruption bugs easier than it has to be. This enables fortify and a non-executable stack. This gives the following improvements on Debian Trixie: $ checksec --file=./.pio/build/native/meshtasticd RELRO STACK CANARY NX PIE RPATH RUNPATH Symbols FORTIFY Fortified Fortifiable FILE Partial RELRO No canary found NX enabled PIE enabled No RPATH No RUNPATH 13516 Symbols No 0 17 ./.pio/build/native/meshtasticd $ checksec --file=./.pio/build/native/meshtasticd RELRO STACK CANARY NX PIE RPATH RUNPATH Symbols FORTIFY Fortified Fortifiable FILE Partial RELRO Canary found NX enabled PIE enabled No RPATH No RUNPATH 13519 Symbols Yes 12 20 ./.pio/build/native/meshtasticd Tested with --sim mode I do not get any crashes or similar. * Enable FORTIFY and SP for native builds meshtasticd does have a stack canaries and is not built with fortify, which makes exploitation of memory corruption bugs easier than it has to be. This enables fortify and stack canaries. This gives the following improvements on Debian Trixie: $ checksec --file=./.pio/build/native/meshtasticd RELRO STACK CANARY NX PIE RPATH RUNPATH Symbols FORTIFY Fortified Fortifiable FILE Partial RELRO No canary found NX enabled PIE enabled No RPATH No RUNPATH 13516 Symbols No 0 17 ./.pio/build/native/meshtasticd $ checksec --file=./.pio/build/native/meshtasticd RELRO STACK CANARY NX PIE RPATH RUNPATH Symbols FORTIFY Fortified Fortifiable FILE Partial RELRO Canary found NX enabled PIE enabled No RPATH No RUNPATH 13519 Symbols Yes 12 20 ./.pio/build/native/meshtasticd Tested with --sim mode I do not get any crashes or similar. --------- Co-authored-by: Ben Meadors <[email protected]> * feat: Add SCD4X (#7198) * Move PMSA003I to separate class and update AQ telemetry * AirQualityTelemetry module not depend on PM sensor presence * Remove commented line * Fixes on PMS class * Add missing warmup period to wakeUp function * Fixes on compilation for different variants * Add functions to check for I2C bus speed and set it * Add ScreenFonts.h Co-authored-by: Hannes Fuchs <[email protected]> * PMSA003I 1st round test * Fix I2C scan speed * Fix minor issues and bring back I2C SPEED def * Remove PMSA003I library as its no longer needed * Add functional SCD4X * Fix screen frame for CO2 * Add admin commands to SCD4X class * Add further admin commands and fixes. * Remove unused I2C speed functions and cleanup * Cleanup of SEN5X specific code added from switching branches * Remove SCAN_I2C_CLOCK_SPEED block as its not needed * Remove associated functions for setting I2C speed * Unify build epoch to add flag in platformio-custom.py (#7917) * Unify build_epoch replacement logic in platformio-custom * Missed one * Fix build error in rak_wismesh_tap_v2 (#7905) In the logs was: "No screen resolution defined in build_flags. Please define DISPLAY_SIZE." set according to similar devices. * Put guards in place around debug heap operations (#7955) * Put guards in place around debug heap operations * Add macros to clean up code * Add pointer as well * Cleanup * Fix memory leak in NextHopRouter: always free packet copy when removing from pending * Formatting * Only queue 2 client notification * Merge pull request #7965 from compumike/compumike/fix-nrf52-bluetooth-memory-leak Fix memory leak in `NRF52Bluetooth`: allocate `BluetoothStatus` on stack, not heap * Merge pull request #7964 from compumike/compumike/fix-nimble-bluetooth-memory-leak Fix memory leak in `NimbleBluetooth`: allocate `BluetoothStatus` on stack, not heap * Update protobufs (#7973) Co-authored-by: thebentern <[email protected]> * T-Lora Pager: Support LR1121 and SX1280 models (#7956) * T-Lora Pager: Support LR1121 and SX1280 models * Remove ifdefs * Trunk * Trunk * Static memory pool allocation (#7966) * Static memory pool * Initializer * T-Lora Pager: Support LR1121 and SX1280 models (#7956) * T-Lora Pager: Support LR1121 and SX1280 models * Remove ifdefs --------- Co-authored-by: WillyJL <[email protected]> * Portduino dynamic alloc * Missed * Drop the limit * Update meshtastic-esp8266-oled-ssd1306 digest to 0cbc26b (#7977) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Fix json report crashes on esp32 (#7978) * Tweak maximums * Fix DRAM overflow on old esp32 targets * Guard bad time warning logs using GPS_DEBUG (#7897) In 2.7.7 / 2.7.8 we introduced some new checks for time accuracy. In combination, these result in a spamming of the logs when a bad time is found When the GPS is active, we're calling the GPS thread every 0.2secs. So this log could be printed 4,500 times in a no-lock scenario :) Reserve this experience for developers using GPS_DEBUG. Fixes https://github.com/meshtastic/firmware/issues/7896 * Scale probe buffer size based on current baud rate (#7975) * Scale probe buffer size based on current baud rate * Throttle bad time validation logging and fix time comparison logic * Remove comment * Missed the other instances * Copy pasta * Fix GPS gm_mktime memory leak (#7981) * Fix overflow of time value (#7984) * Fix overflow of time value * Revert "Fix overflow of time value" This reverts commit 084796920179e80a7500d36c25fd4d82b3ef4214. * That got boogered up * Remove PMSA003 include from modules * Add flag to exclude air quality module * Rework PMSA003I to align with new I2C scanner * Reworks AQ telemetry to match new dynamic allocation method * Adds VBLE_I2C_CLOCK_SPEED build flag for sensors with different I2C speed requirements * Reworks PMSA003I * Move add sensor template to separate file * Split telemetry on screen options * Add variable I2C clock compile flag * Added to Seeed Xiao S3 as demo * Fix drawFrame in AQ module * Module settings override to i2cScan module function * Move to CAN_RECLOCK_I2C per architecture * Add reclock function in TelemetrySensor.cpp * Add flag in ESP32 common * Minor fix * Move I2C reclock function to src/detect * Fix uninitMemberVar errors and compile issue * Make sleep, wakeUp functions generic * Fix STM32 builds * Add exclude AQ sensor to builds that have environmental sensor excludes * Add includes to AddI2CSensorTemplate.h * SEN5X first pass * WIP Sen5X functions * Further (non-working) progress in SEN5X * WIP Sen5X functions * Changes on SEN5X library - removing pm_env as well * Small cleanup of SEN5X sensors * Minor change for SEN5X detection * Remove dup code * Enable PM sensor before sending telemetry. This enables the PM sensor for a predefined period to allow for warmup. Once telemetry is sent, the sensor shuts down again. * Small cleanups in SEN5X sensor * Add dynamic measurement interval for SEN5X * Only disable SEN5X if enough time after reading. * Idle for SEN5X on communication error * Cleanup of logs and remove unnecessary delays * Small TODO * Settle on uint16_t for SEN5X PM data * Make AQTelemetry sensors non-exclusive * Implementation of cleaning in FS prefs and cleanup * Remove unnecessary LOGS * Add cleaning date storage in FS * Report non-cumulative PN * Bring back detection code for SEN5X after branch rebase * Add placeholder for admin message * Add VOC measurements and persistence (WIP) * Adds VOC measurements and state * Still not working on VOC Index persistence * Should it stay in continuous mode? * Add one-shot mode config flag to SEN5X * Add nan checks on sensor data from SEN5X * Working implementation on VOCState * Adds initial timer for SEN55 to not sleep if VOCstate is not stable (1h) * Adds conditions for stability and sensor state * Fixes on VOC state and mode swtiching * Adds a new RHT/Gas only mode, with 3600s stabilization time * Fixes the VOCState buffer mismatch * Fixes SEN50/54/55 model mistake * Adapt SEN5X to new sensor list structure. Improve reclock. * Improve reClockI2C conditions for different variants * Add sleep, wakeUp, pendingForReady, hasSleep functions to PM sensors to save battery * Add SEN5X * Fix merge errors * Small reordering in PMS class for consistency * If one sensor fails, AQ telemetry still reports data * Small formatting fix * Add SEN5X to AQI in ScanI2C * SCD4X now part of AQ module with template list * Fixes difference between idle and sleep * In LowPower, sleep is disabled * Requires testing for I2C clock comms for commands * Remove unnecessary import * Add co2 to serialized AQ metrics * Update library dependencies in platformio.ini * Fix unitialized variables in SEN5X constructor * Fix missing import * Fix uninitMemberVars * Fix import error for SCD4X * Fix I2CClock logic * Fix not reclocking back to 700000Hz * Fix multiple sensors being read simultaneously * The logic in AQ module is different to the one in EnvironmentTelemetryModule. In Env module, if any sensor fails to getMetrics, no valid flag for the module. This prevents other sensors to report data. * Fix pending clock change in PMSA003 * Cleanup of SEN5X class * Exclude AQ sensor from wio-e5 due to flash limitations * Fix I2C clock change logic * Make sure clock is always set to needed value * Fix returns * Fix trunk * Fix on condition in reclock * Fix trunk * Add check on polling interval of sen5x * Add missing serializer --------- Co-authored-by: Hannes Fuchs <[email protected]> Co-authored-by: Nashui-Yan <[email protected]> Co-authored-by: Ben Meadors <[email protected]> Co-authored-by: Tom Fifield <[email protected]> Co-authored-by: Mike Robbins <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: thebentern <[email protected]> Co-authored-by: WillyJL <[email protected]> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * chore(deps): update gxepd2 to v1.6.7 (#9577) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Temporarily un-renovate libch341 (#9587) * Update protobufs (#9588) Co-authored-by: thebentern <[email protected]> * Add battery curve for T-Beam 1 watt (#9585) * Update built-in documentation for current method of implementation (#9592) * Refactor logging in ProtobufModule to ensure message details are logged after successful decoding (#9536) * Upgrade trunk (#9581) Co-authored-by: vidplace7 <[email protected]> * Automated version bumps (#9604) Co-authored-by: thebentern <[email protected]> * Add missing openocd_target to custom nrf52 boards (#9603) This stops platformio complaining about `Missing target configuration for me25ls01-4y10td` etc when trying to flash with nrfutil. * Upgrade trunk (#9599) Co-authored-by: vidplace7 <[email protected]> * Add sdl libs for native builds (#9595) * Add sdl libs for native builds * Alpine try again * Add missing openocd_target to custom nrf52 boards (#9603) This stops platformio complaining about `Missing target configuration for me25ls01-4y10td` etc when trying to flash with nrfutil. * Automated version bumps (#9604) Co-authored-by: thebentern <[email protected]> * fix some random compiler warnings (#9596) * fix some random compiler warnings (#9596) * Modify the dependency library of v4-tft (#9507) * Update protobufs (#9605) Co-authored-by: thebentern <[email protected]> * Modify the dependency library of v4-tft (#9507) * BaseUI: Favorite Screen Signal Quality improvement (#9566) * Favorite Signal Quality improvement * Show Voltage if node shares it. * Trunk Fix * Change Favorite tittle to encase name with Asterisks * Add Pluggin In condition for Battery Line * Adjust getUptimeStr Prefixes * Create isAPIConnected for SharedCommon usage * Correct leftSideSpacing to account for isAPIConnected --------- Co-authored-by: Jason P <[email protected]> * ExternalNotification and StatusLED now call AmbientLighting to update… (#9554) * ExternalNotification and StatusLED now call AmbientLighting to update RGB LEDs. Add optional heartbeat * Don't overwrite RGB state if heartbeat is disabled. * Use the right define * Remove another .h and make rgb static * move rgb objects into AmbientLighting class * Straighten out AmbientLighting Thread object * Use %f for floats * Fixes on SCD4X admin comands (#9607) * Fixes on SCD4X admin comands * Minor fix in logs for SEN5X --------- Co-authored-by: Ben Meadors <[email protected]> * feat/add sfa30 (#9372) * Move PMSA003I to separate class and update AQ telemetry * AirQualityTelemetry module not depend on PM sensor presence * Remove commented line * Fixes on PMS class * Add missing warmup period to wakeUp function * Fixes on compilation for different variants * Add functions to check for I2C bus speed and set it * Initial implementation for SFA30Sensor * Move PMSA003I to separate class and update AQ telemetry * AirQualityTelemetry module not depend on PM sensor presence * Remove commented line * Fixes on PMS class * Add missing warmup period to wakeUp function * Fixes on compilation for different variants * Add functions to check for I2C bus speed and set it * Add ScreenFonts.h Co-authored-by: Hannes Fuchs <[email protected]> * PMSA003I 1st round test * Fix I2C scan speed * Fix minor issues and bring back I2C SPEED def * Remove PMSA003I library as its no longer needed * Add functional SCD4X * Fix screen frame for CO2 * Add admin commands to SCD4X class * Add further admin commands and fixes. * Remove unused I2C speed functions and cleanup * Cleanup of SEN5X specific code added from switching branches * Remove SCAN_I2C_CLOCK_SPEED block as its not needed * Remove associated functions for setting I2C speed * Unify build epoch to add flag in platformio-custom.py (#7917) * Unify build_epoch replacement logic in platformio-custom * Missed one * Fix build error in rak_wismesh_tap_v2 (#7905) In the logs was: "No screen resolution defined in build_flags. Please define DISPLAY_SIZE." set according to similar devices. * Put guards in place around debug heap operations (#7955) * Put guards in place around debug heap operations * Add macros to clean up code * Add pointer as well * Cleanup * Fix memory leak in NextHopRouter: always free packet copy when removing from pending * Formatting * Only queue 2 client notification * Merge pull request #7965 from compumike/compumike/fix-nrf52-bluetooth-memory-leak Fix memory leak in `NRF52Bluetooth`: allocate `BluetoothStatus` on stack, not heap * Merge pull request #7964 from compumike/compumike/fix-nimble-bluetooth-memory-leak Fix memory leak in `NimbleBluetooth`: allocate `BluetoothStatus` on stack, not heap * Update protobufs (#7973) Co-authored-by: thebentern <[email protected]> * T-Lora Pager: Support LR1121 and SX1280 models (#7956) * T-Lora Pager: Support LR1121 and SX1280 models * Remove ifdefs * Trunk * Trunk * Static memory pool allocation (#7966) * Static memory pool * Initializer * T-Lora Pager: Support LR1121 and SX1280 models (#7956) * T-Lora Pager: Support LR1121 and SX1280 models * Remove ifdefs --------- Co-authored-by: WillyJL <[email protected]> * Portduino dynamic alloc * Missed * Drop the limit * Update meshtastic-esp8266-oled-ssd1306 digest to 0cbc26b (#7977) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Fix json report crashes on esp32 (#7978) * Tweak maximums * Fix DRAM overflow on old esp32 targets * Guard bad time warning logs using GPS_DEBUG (#7897) In 2.7.7 / 2.7.8 we introduced some new checks for time accuracy. In combination, these result in a spamming of the logs when a bad time is found When the GPS is active, we're calling the GPS thread every 0.2secs. So this log could be printed 4,500 times in a no-lock scenario :) Reserve this experience for developers using GPS_DEBUG. Fixes https://github.com/meshtastic/firmware/issues/7896 * Scale probe buffer size based on current baud rate (#7975) * Scale probe buffer size based on current baud rate * Throttle bad time validation logging and fix time comparison logic * Remove comment * Missed the other instances * Copy pasta * Fix GPS gm_mktime memory leak (#7981) * Fix overflow of time value (#7984) * Fix overflow of time value * Revert "Fix overflow of time value" This reverts commit 084796920179e80a7500d36c25fd4d82b3ef4214. * That got boogered up * Remove PMSA003 include from modules * Add flag to exclude air quality module * Rework PMSA003I to align with new I2C scanner * Reworks AQ telemetry to match new dynamic allocation method * Adds VBLE_I2C_CLOCK_SPEED build flag for sensors with different I2C speed requirements * Reworks PMSA003I * Move add sensor template to separate file * Split telemetry on screen options * Add variable I2C clock compile flag * Added to Seeed Xiao S3 as demo * Fix drawFrame in AQ module * Module settings override to i2cScan module function * Move to CAN_RECLOCK_I2C per architecture * Add reclock function in TelemetrySensor.cpp * Add flag in ESP32 common * Minor fix * Move I2C reclock function to src/detect * Fix uninitMemberVar errors and compile issue * Make sleep, wakeUp functions generic * Fix STM32 builds * Add exclude AQ sensor to builds that have environmental sensor excludes * Add includes to AddI2CSensorTemplate.h * SEN5X first pass * WIP Sen5X functions * Further (non-working) progress in SEN5X * WIP Sen5X functions * Changes on SEN5X library - removing pm_env as well * Small cleanup of SEN5X sensors * Minor change for SEN5X detection * Remove dup code * Enable PM sensor before sending telemetry. This enables the PM sensor for a predefined period to allow for warmup. Once telemetry is sent, the sensor shuts down again. * Small cleanups in SEN5X sensor * Add dynamic measurement interval for SEN5X * Only disable SEN5X if enough time after reading. * Idle for SEN5X on communication error * Cleanup of logs and remove unnecessary delays * Small TODO * Settle on uint16_t for SEN5X PM data * Make AQTelemetry sensors non-exclusive * Implementation of cleaning in FS prefs and cleanup * Remove unnecessary LOGS * Add cleaning date storage in FS * Report non-cumulative PN * Bring back detection code for SEN5X after branch rebase * Add placeholder for admin message * Add VOC measurements and persistence (WIP) * Adds VOC measurements and state * Still not working on VOC Index persistence * Should it stay in continuous mode? * Add one-shot mode config flag to SEN5X * Add nan checks on sensor data from SEN5X * Working implementation on VOCState * Adds initial timer for SEN55 to not sleep if VOCstate is not stable (1h) * Adds conditions for stability and sensor state * Fixes on VOC state and mode swtiching * Adds a new RHT/Gas only mode, with 3600s stabilization time * Fixes the VOCState buffer mismatch * Fixes SEN50/54/55 model mistake * Adapt SEN5X to new sensor list structure. Improve reclock. * Improve reClockI2C conditions for different variants * Add sleep, wakeUp, pendingForReady, hasSleep functions to PM sensors to save battery * Add SEN5X * Fix merge errors * Small reordering in PMS class for consistency * If one sensor fails, AQ telemetry still reports data * Small formatting fix * Add SEN5X to AQI in ScanI2C * SCD4X now part of AQ module with template list * Fixes difference between idle and sleep * In LowPower, sleep is disabled * Requires testing for I2C clock comms for commands * Remove unnecessary import * Add co2 to serialized AQ metrics * Add SFA30 with new sensor template in AQ module * Update library dependencies in platformio.ini * Fix unitialized variables in SEN5X constructor * Fix missing import * Fix uninitMemberVars * Fix import error for SCD4X * Fix I2CClock logic * Fix not reclocking back to 700000Hz * Fix multiple sensors being read simultaneously * The logic in AQ module is different to the one in EnvironmentTelemetryModule. In Env module, if any sensor fails to getMetrics, no valid flag for the module. This prevents other sensors to report data. * Fix pending clock change in PMSA003 * Cleanup of SEN5X class * Exclude AQ sensor from wio-e5 due to flash limitations * Fix I2C clock change logic * Make sure clock is always set to needed value * Fix returns * Fix trunk * Fix on condition in reclock * Fix trunk * Final SFA30 class implementation * Add HCHO to screen and improve logs * Add metrics to mesh packet serializer * Minor fixes in logs * OCD tidy up of logs * Fix sleep function * Remove old I2C_CLOCK_SPEED code --------- Co-authored-by: nikl <[email protected]> Co-authored-by: Hannes Fuchs <[email protected]> Co-authored-by: Nashui-Yan <[email protected]> Co-authored-by: Ben Meadors <[email protected]> Co-authored-by: Tom Fifield <[email protected]> Co-authored-by: Mike Robbins <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: thebentern <[email protected]> Co-authored-by: WillyJL <[email protected]> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Upgrade trunk (#9615) * chore(deps): update adafruit mpu6050 to v2.2.9 (#9611) * Log rxBad PacketHeaders with more info (id, relay_node) like printPacket, so we can try to match RX errors to other packets in the logs. (#9614) * chore(deps): update sensirion core to v0.7.3 (#9613) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * chore(deps): update neopixel to v1.15.4 (#9616) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Exclude status message module * fix: zero entire public key array instead of only first byte (#9619) * Update protobufs (#9621) * Xiao NRF - define suitable i2c pins for the sub-variants (#8866) Co-authored-by: Christian Walther <[email protected]> * Upgrade trunk (#9631) Co-authored-by: vidplace7 <[email protected]> * Update src/detect/ScanI2C.cpp Co-authored-by: Wessel <[email protected]> * Update src/modules/Telemetry/Sensor/SFA30Sensor.cpp Co-authored-by: Wessel <[email protected]> * Update src/modules/Telemetry/Sensor/SFA30Sensor.cpp Co-authored-by: Wessel <[email protected]> * Update src/modules/Telemetry/Sensor/SFA30Sensor.cpp Co-authored-by: Wessel <[email protected]> * Update src/mesh/NodeDB.cpp Co-authored-by: Wessel <[email protected]> * convert GPS global and some new in gps.cpp to unique_ptr (#9628) Trying this to see if anything bad happen if I were to replace most raw pointers with unique_ptr. I didn't used std::make_unique since it is only supported in C++14 and onwards but until we update esp32 to arduino 3.x the ESP32 xtensa chips use a C++11 std. * replace delete in RedirectablePrint.cpp with std::unique_ptr (#9642) Is part of the unique_ptr modernization effort. * replace delete in EInkDynamicDisplay.{cpp,h} with std::unique_ptr (#9643) Is part of the unique_ptr modernization effort. * Undefine LED_BUILTIN for Heltec v2 variant (#9647) * Undefine LED_BUILTIN for Heltec v2 variant * Undefine LED_BUILTIN for Heltec v2.1 variant --------- Co-authored-by: Jorropo <[email protected]> * replace delete in RadioInterface.cpp with std::unique_ptr (#9645) Is part of the unique_ptr modernization effort. * fix typo in PIN_GPS_SWITCH (#9648) Wasn't caught by CI. * replace delete in CryptoEngine.{cpp,h} with std::unique_ptr (#9649) Is part of the unique_ptr modernization effort. * workaround NCP5623 and LP5562 I2C builds (#9652) Theses two appear to be buggy on r1-neo and nomadstar meteor pro, they rely on Wire.h being included previously to their import. Idk why other platforms using the same smart LEDs are working while theses ones don't. This should make CI green on the dev branch. * replace delete in AudioThread.h with std::unique_ptr (#9651) Is part of the unique_ptr modernization effort. * Add USB_MODE=1 for Station G2 (#9660) * InkHUD: Favorite Map Applet (#9654) * fix a lot of low level cppcheck warnings (#9623) * simplify the observer pattern, since all the called functions are const getters. * use arduino macro over std: for numerical values and refactor local variables in drawScrollbar() * oh, so Cppcheck actually complained about const pointers not being const. * slowly getting out of ifdef hell * fix inkHUD warnings as well * last 2 check warnings * git checks should fail on low defects from now on * Feat/add scd30 (#9609) * Merge develop into SCD30 * Add SCD30 class * Fix logging and admin commands * Minor cleanup and logging improvements * Minor formatting issue Co-authored-by: Copilot <[email protected]> * Improvements on setTemperature * Fix casting float-uint16_t * Pass 100 for resetting temperature offset * Fix issues pointed out by copilot * Add quick reboot to set interval quicker on scd30 * Change saveState to only happen after boot and minor log changes * Fix missing semicolon in one shot mode log --------- Co-authored-by: Thomas Göttgens <[email protected]> Co-authored-by: Copilot <[email protected]> Co-authored-by: Ben Meadors <[email protected]> * Upgrade trunk (#9661) Co-authored-by: vidplace7 <[email protected]> * fix: respect DontMqttMeBro flag regardless of channel PSK (#9626) The previous PSK check was broken from its introduction in #4643 — memcmp was used in boolean context without comparing to 0, inverting the condition. Since no one noticed for over a year, the PSK-based filtering provided no practical value. Simplifying to always respect the sender's preference is both more correct and easier to reason about. * our firmware action is too clever Update pio_target and add pio_opts for checks. * fix detection of SCD30 by checking if the size of the return from a 2 byte register read is correct (#9664) * fix detection of SCD30 by checking if thee size of the return from a 2 byte register read is correct fix signedness warning in PMSA003 sensor code. * Add alternate path for LPS22HB Co-authored-by: Copilot <[email protected]> * check EndTransmission for errors and compare returned length to expected value Co-authored-by: Copilot <[email protected]> --------- Co-authored-by: Copilot <[email protected]> * #9623 resolved a local shadow of next_key by converting it to int. (#9665) * zip a few gitrefs down (#9672) * InkHUD: Allow non-system applets to subscribe to input events (#9514) * Allow inkhud user applets to consume inputs with opt-in system Adds a way for applets to subscribe to input events while keeping it off by default to preserve compatibility and expected behaviours. Adds example for use as well. * Add check for nullptr on getActiveApplet uses * Remove redundant includes * Move subscribedInputs to protected * More consistent naming scheme * Upgrade trunk (#9671) Co-authored-by: vidplace7 <[email protected]> * Concurrency: Modern Periodic wrapper class. (#9501) * chore(deps): update actions/stale action to v10.2.0 (#9669) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Fake IAQ values on Non-BSEC2 platforms like Platformio and the original ESP32 (#9663) * BSEC2 Replacement - add approximation for IAQ to non-BSEC2 platforms. - Re-add this sensor to ESP32 targets, and refactor env_extra includes. - Fix C++ 11 compatibility * Check for gas resistance 0 * Upgrade trunk (#9683) Co-authored-by: vidplace7 <[email protected]> * ULED_BUILTIN for 9m2ibr_aprs_lora_tracker (#9685) * Upgrade trunk (#9692) Co-authored-by: vidplace7 <[email protected]> * Develop to master (#9618) * Don't ever define PIN_LED or BLE_LED_INVERTED (#9494) * Don't ever define PIN_LED * Deprecate BLE_LED_INVERTED * Add StatusMessage module and config overrides (#9351) * Add StatusMessage module and config overrides * Trunk * Don't reboot node simply for a StatusMessage config update * Missed in reviews - fixing send bubble (#9505) * Prefer EXT_PWR_DETECT pin over chargingVolt to detect power unplugged (#9511) * Make sure we always return a value in NodeDB::restorePreferences() (#9516) In case FScom is not defined there is no return statement. This moves the return outside of the ifdef to make sure a defined value is returned. * Inkhud battery icon improvements. (#9513) * Inkhud battery icon improvements. Fixes the battery icon draining from the flat side towards the bump, which is backwards from general design language seen on most devices By request of kr0n05_ on discord, adds the ability to mirror the battery icon which fixes that issue in another way, and is also a common design seen on other devices. * Remove option for icon mirroring * Add border + dither to battery to prevent font overlap * Fix trunk format * Code cleanup, courtesy of Xaositek. * Add reply bot module with DM-only responses and rate limiting (#9456) * Implement Meshtastic reply bot module with ping and status features Adds a reply bot module that listens for /ping, /hello, and /test commands received via direct messages or broadcasts on the primary channel. The module always replies via direct message to the sender only, reporting hop count, RSSI, and SNR. Per-sender cooldowns are enforced to reduce network spam, and the module can be excluded at build time via a compile flag. Updates include the new module source files and required build configuration changes. * Update ReplyBotModule.cpp Co-authored-by: Copilot <[email protected]> * Update src/modules/ReplyBotModule.h Match the existing MESHTASTIC_EXCLUDE_* guard pattern so the module is excluded by default. Co-authored-by: Copilot <[email protected]> * Update src/modules/ReplyBotModule.cpp Co-authored-by: Copilot <[email protected]> * Tidying up --------- Co-authored-by: Copilot <[email protected]> Co-authored-by: Ben Meadors <[email protected]> * HotFix for ReplyBot - Modules.cpp included and moved configuration.h (#9532) * Undefine LED_BUILTIN (#9531) Keep variant in sync with https://github.com/meshtastic/firmware/commit/df40085 Co-authored-by: Ben Meadors <[email protected]> * Add agc reset attempt (#8163) * Add agc reset attempt * Add radioLibInterface include * Trunk * AGC reset don't crash, don't naively call * Update src/main.cpp Co-authored-by: Copilot <[email protected]> * Use Throttle function --------- Co-authored-by: Copilot <[email protected]> * Remove unused hmx variable (#9529) The variable is not used at all in the function, remove it to silence the compiler warning. Co-authored-by: Ben Meadors <[email protected]> * Rename LED_PIN to LED_POWER, move handling out of main to dedicated module (#9512) * Rename LED_PIN to LED_POWER, move handling out of main to dedicated module * Misc * Remove errant endif * Fix hop_limit upgrade detection (#9550) Co-authored-by: Ben Meadors <[email protected]> * meshtasticd: Fix install on Fedora 43 (#9556) * RPM: Include meshtasticd-start.sh (#9561) * Add Slash Key to VirtualKeyboard (#9563) Addition of ? and / to the virtual Keyboard via short and long press * Add support for CW2015 LiPo battery fuel gauge (#9564) * Add support for CW2015 LiPo battery fuel gauge * Address Copilot's concerns, minor fixups * Make LED_POWER blip even in critical battery (#9545) * Enable FORTIFY and SP for native builds (#9537) * Enable FORITFY and NX for native builds meshtasticd does have an executable stack and is not built with fortify, which makes exploitation of memory corruption bugs easier than it has to be. This enables fortify and a non-executable stack. This gives the following improvements on Debian Trixie: $ checksec --file=./.pio/build/native/meshtasticd RELRO STACK CANARY NX PIE RPATH RUNPATH Symbols FORTIFY Fortified Fortifiable FILE Partial RELRO No canary found NX enabled PIE enabled No RPATH No RUNPATH 13516 Symbols No 0 17 ./.pio/build/native/meshtasticd $ checksec --file=./.pio/build/native/meshtasticd RELRO STACK CANARY NX PIE RPATH RUNPATH Symbols FORTIFY Fortified Fortifiable FILE Partial RELRO Canary found NX enabled PIE enabled No RPATH No RUNPATH 13519 Symbols Yes 12 20 ./.pio/build/native/meshtasticd Tested with --sim mode I do not get any crashes or similar. * Enable FORTIFY and NX for native builds meshtasticd does have an executable stack and is not built with fortify, which makes exploitation of memory corruption bugs easier than it has to be. This enables fortify and a non-executable stack. This gives the following improvements on Debian Trixie: $ checksec --file=./.pio/build/native/meshtasticd RELRO STACK CANARY NX PIE RPATH RUNPATH Symbols FORTIFY Fortified Fortifiable FILE Partial RELRO No canary found NX enabled PIE enabled No RPATH No RUNPATH 13516 Symbols No 0 17 ./.pio/build/native/meshtasticd $ checksec --file=./.pio/build/native/meshtasticd RELRO STACK CANARY NX PIE RPATH RUNPATH Symbols FORTIFY Fortified Fortifiable FILE Partial RELRO Canary found NX enabled PIE enabled No RPATH No RUNPATH 13519 Symbols Yes 12 20 ./.pio/build/native/meshtasticd Tested with --sim mode I do not get any crashes or similar. * Enable FORTIFY and SP for native builds meshtasticd does have a stack canaries and is not built with fortify, which makes exploitation of memory corruption bugs easier than it has to be. This enables fortify and stack canaries. This gives the following improvements on Debian Trixie: $ checksec --file=./.pio/build/native/meshtasticd RELRO STACK CANARY NX PIE RPATH RUNPATH Symbols FORTIFY Fortified Fortifiable FILE Partial RELRO No canary found NX enabled PIE enabled No RPATH No RUNPATH 13516 Symbols No 0 17 ./.pio/build/native/meshtasticd $ checksec --file=./.pio/build/native/meshtasticd RELRO STACK CANARY NX PIE RPATH RUNPATH Symbols FORTIFY Fortified Fortifiable FILE Partial RELRO Canary found NX enabled PIE enabled No RPATH No RUNPATH 13519 Symbols Yes 12 20 ./.pio/build/native/meshtasticd Tested with --sim mode I do not get any crashes or similar. --------- Co-authored-by: Ben Meadors <[email protected]> * Update built-in documentation for current method of implementation (#9592) * Refactor logging in ProtobufModule to ensure message details are logged after successful decoding (#9536) * Automated version bumps (#9604) Co-authored-by: thebentern <[email protected]> * Add missing openocd_target to custom nrf52 boards (#9603) This stops platformio complaining about `Missing target configuration for me25ls01-4y10td` etc when trying to flash with nrfutil. * Add sdl libs for native builds (#9595) * Add sdl libs for native builds * Alpine try again * fix some random compiler warnings (#9596) * Modify the dependency library of v4-tft (#9507) * BaseUI: Favorite Screen Signal Quality improvement (#9566) * Favorite Signal Quality improvement * Show Voltage if node shares it. * Trunk Fix * Change Favorite tittle to encase name with Asterisks * Add Pluggin In condition for Battery Line * Adjust getUptimeStr Prefixes * Create isAPIConnected for SharedCommon usage * Correct leftSideSpacing to account for isAPIConnected --------- Co-authored-by: Jason P <[email protected]> * ExternalNotification and StatusLED now call AmbientLighting to update… (#9554) * ExternalNotification and StatusLED now call AmbientLighting to update RGB LEDs. Add optional heartbeat * Don't overwrite RGB state if heartbeat is disabled. * Use the right define * Remove another .h and make rgb static * move rgb objects into AmbientLighting class * Straighten out AmbientLighting Thread object * Use %f for floats * Fixes on SCD4X admin comands (#9607) * Fixes on SCD4X admin comands * Minor fix in logs for SEN5X --------- Co-authored-by: Ben Meadors <[email protected]> * feat/add sfa30 (#9372) * Move PMSA003I to separate class and update AQ telemetry * AirQualityTelemetry module not depend on PM sensor presence * Remove commented line * Fixes on PMS class * Add missing warmup period to wakeUp function * Fixes on compilation for different variants * Add functions to check for I2C bus speed and set it * Initial implementation for SFA30Sensor * Move PMSA003I to separate class and update AQ telemetry * AirQualityTelemetry module not depend on PM sensor presence * Remove commented line * Fixes on PMS class * Add missing warmup period to wakeUp function * Fixes on compilation for different variants * Add functions to check for I2C bus speed and set it * Add ScreenFonts.h Co-authored-by: Hannes Fuchs <[email protected]> * PMSA003I 1st round test * Fix I2C scan speed * Fix minor issues and bring back I2C SPEED def * Remove PMSA003I library as its no longer needed * Add functional SCD4X * Fix screen frame for CO2 * Add admin commands to SCD4X class * Add further admin commands and fixes. * Remove unused I2C speed functions and cleanup * Cleanup of SEN5X specific c…

This PR adds support for the SCD4X CO2 sensors by sensirion.
It builds upon on the great work by @Coloradohusky, @hafu and @fifieldt in #4601 and https://github.com/hafu/meshtastic-firmware/tree/add-scd30 (although it doesn't add SCD30 support).
This PR tries to sync that work with the current state
masterbranch, and it's rebased on top of #7190, which is an attempt to decoupleAirQualityTelemetryfromPMSA0003Isensor (I have just ordered one sensor to test). I also started using the new Sensirion library for this sensor, which has a new release (and a very annoying change in the library name import).This also goes along with meshtastic/protobufs#719 to support having real temperature and the sensor temperature separately. Testing it, you can see some differences between two sensors that are right next to each other (SHT31 and the one inside the SCD4X).
There are some comments that I point in the code directly below. I also tried to make it work with the screen, but I don't think my system allows for testing it ATM.
🤝 Attestations