mirror of
https://github.com/ALLFATHER-BV/wadamesh.git
synced 2026-11-11 13:27:36 +00:00
Add the Seeed SenseCAP Indicator D1L as a new touch target. This step builds and boots to a blank screen; the panel, touch and radio drivers follow in their own commits so each can be reviewed against the hardware it drives. The SX1262's NSS, RESET, BUSY and DIO1, the LCD CS/reset and the touch reset all sit on a TCA9535 at 0x20 on the SDA39/SCL40 bus, not on ESP32 GPIOs, so everything after this commit depends on the expander. The env gives the radio lines virtual pin numbers 0x40..0x43 for a radio HAL to map onto expander bits; until that HAL exists the radio is a plain Module that links but cannot drive the chip. The expander driver is header-only so a host test can cover it: - its output and config shadows are seeded from the chip, because a warm reset or the previous firmware may have left pins driven and writing the power-on defaults back would glitch the radio, panel and RP2040 resets; - a failed write rolls both shadows back to the last state written in full, and the next write brings the chip back in line with them; - polarity inversion is cleared when a previous firmware left it set, since it would invert BUSY, DIO1 and the strap; it is written only when it is not already 0; - every read of input port 0 is reported to an observer, so a DIO1 edge is not lost when another reader clears /INT. A five-sample majority of the P1.3 strap selects the TCXO (2.4 V) or crystal radio at run time, so one noisy read cannot pick the wrong oscillator. The expander, the touch driver and the display init serialise on one recursive mutex over the shared Wire bus (IndicatorIo::BusLock). It is a function-local static, so the compiler guards its creation when two tasks reach the first lock together. IndicatorIo::begin() logs the registers it inherited and names the step that failed, since a dead expander takes the panel and radio down with it and is otherwise silent. The board has 8 MB of flash. The partition table has one 4.5 MB factory app slot, a 3.375 MB SPIFFS (as on the 16 MB boards) and a 64 KB coredump, with no map tile partition. The factory slot is larger than the 0x3E0000 OTA slots of the 16 MB boards, so an image that fits those fits here. CAP_OTA is off: with one app slot there is no in-place update. CAP_BATTERY is 0: no battery is fitted. Montserrat 18/20/24 for the UI-size presets are the generated faces; the board joins their gate in ui_font_18/20/24.c, gen-touch-fonts.sh, hwFitFont and luaHostFigureFont. LVGL is built at -O2 with the Arabic and newlib-memcpy settings the other envs use. run-host-tests.sh builds every test/test_*.cpp, so the new expander test gets its include path there in the same commit. build-upload-monitor.sh gets --sensecap-indicator. Signed-off-by: Confituurke <9595028+Confituurke@users.noreply.github.com>