Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,13 @@ validar UI de verdade; o que **não** dá para exercitar de fora é o PENIRQ, qu
nenhum fio da mão alcança. O contorno é uma imagem só de bancada com
`-DTOUCH_IRQ=17 -DTOUCH_CS=21`: o PENIRQ passa a ser a linha CHARGER da mão, e
`CHARGER OFF` (nível baixo) é "dedo na tela". Foi assim que o gesto de AP do
boot foi medido nos quatro casos em 22/09.
boot foi medido nos quatro casos em 22/09. **Em 04/10/2026, com a mão em
`CHARGER HIZ`, essa linha ficou em nível baixo depois do boot** (`CHARGER
STATUS: HIZ (GP3 level=L)`), e todo boot dessa imagem abriu o AP sem dedo
nenhum, inclusive o que segue ao prazo de 15 min do AP. Para um boot sem dedo,
segure a linha em alto com `CHARGER ON`: nessa imagem o GP17 é só entrada, e
não há duas saídas no fio. Um `hand_release_all` (o fim de um roteiro) devolve
a linha a HIZ.

**No build TFT, o GP16 e o GP17 do alvo são o MISO da tela e o `TOUCH_CS` —
e estão ligados à mão (PROBE e CHARGER).** Um `CHARGER ON/OFF` ou um
Expand Down
6 changes: 3 additions & 3 deletions README.es-ES.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ Los tres comparten el mismo núcleo:
| **Release actual** | **v2.11.0** (04/10/2026); el [changelog](CHANGELOG.md) dice qué cambió cada versión. SIMUT salió de beta con la v2.7.0, sobre mediciones: un soak de 8,18 h sin ningún reinicio y 6 de 6 actualizaciones por el aire sin perder nada. |
| **Imágenes publicadas** | Cuatro imágenes, cada una en `.uf2` y `.bin`. Para la Pico W: `release` (panel táctil TFT), `alpha` (LCD 16×2 con consola Bluetooth) y `air` (registrador a batería sin pantalla). Para la Pico 2 W (RP2350): `releasetwo`, la release, cuyo `.uf2` lleva su tabla de particiones y cuyo `.bin` arranca a prueba. Junto a ellas van los packs de idioma pt-BR y es-ES y un manifiesto de OTA. Una imagen con otro conjunto de funciones sale del [configurador de build](https://angelointj.github.io/simut/configurador/), y el CI la compila desde `main`; el configurador todavía no compila para la Pico 2 W. |
| **Madurez** | <ul><li>`release`: **estable**.</li><li>`alpha`: publicado y probado en el banco, con su LCD 16×2 incluido desde el 26/09/2026.</li><li>`air`: **experimental**. Su único soak largo falló: un sueño en el ciclo 119 nunca despertó (F28). Hoy lo mitiga un watchdog a lo largo del despertar; la causa raíz no está confirmada.</li><li>`releasetwo`: **nueva** en la v2.11.0, probada en el banco en una Pico 2 W (RP2350 A2). Se actualiza por el aire en el otro slot, a prueba, y vuelve sola cuando la actualización no se confirma.</li></ul> |
| **Pruebas** | Cada pull request ejecuta 632 casos de test en el host en 9 suites, 60 s de fuzzing y análisis estático, y compila las siete imágenes de firmware con la caché fría. El comportamiento en hardware real se verifica en un banco — ver [Verificación en hardware](docs/VERIFICATION.es-ES.md). |
| **Pruebas** | Cada pull request ejecuta 636 casos de test en el host en 9 suites, 60 s de fuzzing y análisis estático, y compila las siete imágenes de firmware con la caché fría. El comportamiento en hardware real se verifica en un banco — ver [Verificación en hardware](docs/VERIFICATION.es-ES.md). |

**Limitaciones conocidas.** Cada una está documentada donde aplica.
- **Actualización.** La actualización por el aire reformatea el sistema de archivos:
Expand Down Expand Up @@ -303,12 +303,12 @@ El dispositivo expone una API REST en `http://<ip-del-dispositivo>/api/`:
### Tests en el host

```bash
pio test -e native # validadores, cursor de telemetría, etiquetas, parsers, paquetes de idioma, las pantallas Licencia y de actualización, el menú de Ajustes, la verificación de contraseña, la sesión web (283 casos)
pio test -e native # validadores, cursor de telemetría, etiquetas, parsers, paquetes de idioma, las pantallas Licencia y de actualización, el menú de Ajustes, la verificación de contraseña, la sesión web (284 casos)
pio test -e native_history_v5 # códec del histórico V5 (62)
pio test -e native_cli # parser de la CLI (33)
pio test -e native_logpolicy # persistencia de log por transición, franjas de la autopsia, lectura del táctil (57)
pio test -e native_alarmqueue # cola de la telemetría de alarmas (54)
pio test -e native_network # máquina de estados de la reconexión Wi-Fi (36)
pio test -e native_network # máquina de estados de la reconexión Wi-Fi (39)
pio test -e native_air # configuración persistente del SIMUT Air (16)
pio test -e native_sensors # tabla de tipos de sensor (13)
pio test -e native_otasig # firma de la imagen de OTA, la restauración del backup, y el grabador de slot y la actualización en prueba del RP2350 (78)
Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ They share one core:
| **Current release** | **v2.11.0** (2026-10-04); the [changelog](CHANGELOG.md) says what each version changed. SIMUT left beta with v2.7.0, on measurements: an 8.18 h soak with 0 reboots, and 6 of 6 over-the-air updates with nothing lost. |
| **Published images** | Four images, each as `.uf2` and `.bin`. For the Pico W: `release` (TFT touch panel), `alpha` (16×2 LCD with a Bluetooth console) and `air` (headless battery logger). For the Pico 2 W (RP2350): `releasetwo`, the release, whose `.uf2` carries its partition table and whose `.bin` boots on trial. The pt-BR and es-ES language packs and an OTA manifest ship alongside. An image with a different set of features comes from the [build configurator](https://angelointj.github.io/simut/configurador/), and CI builds it from `main`; the configurator does not build for the Pico 2 W yet. |
| **Maturity** | <ul><li>`release`: **stable**.</li><li>`alpha`: published and bench-tested, its 16×2 LCD included since 2026-09-26.</li><li>`air`: **experimental**. Its one long soak failed: a sleep in cycle 119 never woke (F28). A watchdog across the wake now mitigates it; the root cause is not confirmed.</li><li>`releasetwo`: **new** in v2.11.0, bench-tested on one Pico 2 W (RP2350 A2). It updates over the air into its other slot, on trial, and goes back by itself when the update does not keep itself.</li></ul> |
| **Tests** | Every pull request runs 632 host test cases in 9 suites, 60 s of fuzzing and static analysis, and builds all seven firmware images from a cold cache. Behaviour on real hardware is verified on a bench — see [Verification on hardware](docs/VERIFICATION.md). |
| **Tests** | Every pull request runs 636 host test cases in 9 suites, 60 s of fuzzing and static analysis, and builds all seven firmware images from a cold cache. Behaviour on real hardware is verified on a bench — see [Verification on hardware](docs/VERIFICATION.md). |

**Known limitations.** Each one is documented where it applies.
- **Updates.** An update over the air reformats the filesystem:
Expand Down Expand Up @@ -301,12 +301,12 @@ The device exposes a REST API at `http://<device-ip>/api/`:
### Host tests

```bash
pio test -e native # validators, telemetry cursor, labels, parsers, language packs, the License and update screens, the Settings menu, the password check, the web session (283 cases)
pio test -e native # validators, telemetry cursor, labels, parsers, language packs, the License and update screens, the Settings menu, the password check, the web session (284 cases)
pio test -e native_history_v5 # V5 history codec (62)
pio test -e native_cli # CLI parser (33)
pio test -e native_logpolicy # edge-triggered log persistence, autopsy bands, touch wake (57)
pio test -e native_alarmqueue # alarm telemetry queue (54)
pio test -e native_network # Wi-Fi reconnect state machine (36)
pio test -e native_network # Wi-Fi reconnect state machine (39)
pio test -e native_air # SIMUT Air persistent config (16)
pio test -e native_sensors # sensor type table (13)
pio test -e native_otasig # OTA image signature check, the backup restore, and the RP2350's slot writer and update on trial (78)
Expand Down
6 changes: 3 additions & 3 deletions README.pt-BR.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ Os três compartilham o mesmo núcleo:
| **Release atual** | **v2.11.0** (04/10/2026); o [changelog](CHANGELOG.pt-BR.md) diz o que cada versão mudou. O SIMUT saiu do beta com a v2.7.0, com base em medições: soak de 8,18 h sem nenhum reboot e 6 de 6 atualizações pelo ar sem perder nada. |
| **Imagens publicadas** | Quatro imagens, cada uma em `.uf2` e `.bin`. Para o Pico W: `release` (painel touch TFT), `alpha` (LCD 16×2 com console Bluetooth) e `air` (registrador a bateria sem display). Para o Pico 2 W (RP2350): `releasetwo`, a release, cujo `.uf2` traz a tabela de partições e cujo `.bin` sobe em teste. Junto vêm os packs de idioma pt-BR e es-ES e um manifesto de OTA. Uma imagem com outro conjunto de recursos sai do [configurador de build](https://angelointj.github.io/simut/configurador/), e o CI a compila da `main`; o configurador ainda não compila para o Pico 2 W. |
| **Maturidade** | <ul><li>`release`: **estável**.</li><li>`alpha`: publicado e testado na bancada, com o LCD 16×2 incluído desde 26/09/2026.</li><li>`air`: **experimental**. O único soak longo dele falhou: um sono no ciclo 119 nunca acordou (F28). Um watchdog ao longo do wake hoje mitiga o problema; a causa raiz não foi confirmada.</li><li>`releasetwo`: **nova** na v2.11.0, testada na bancada num Pico 2 W (RP2350 A2). Atualiza pelo ar no outro slot, em teste, e volta sozinha quando a atualização não se confirma.</li></ul> |
| **Testes** | Todo pull request roda 632 casos de teste no host em 9 suítes, 60 s de fuzzing e análise estática, e compila as sete imagens de firmware com o cache frio. O comportamento no hardware real é verificado numa bancada — ver [Verificação no hardware](docs/VERIFICATION.pt-BR.md). |
| **Testes** | Todo pull request roda 636 casos de teste no host em 9 suítes, 60 s de fuzzing e análise estática, e compila as sete imagens de firmware com o cache frio. O comportamento no hardware real é verificado numa bancada — ver [Verificação no hardware](docs/VERIFICATION.pt-BR.md). |

**Limitações conhecidas.** Cada uma está documentada onde se aplica.
- **Atualização.** A atualização pelo ar reformata o sistema de arquivos:
Expand Down Expand Up @@ -299,12 +299,12 @@ O aparelho expõe uma API REST em `http://<ip-do-dispositivo>/api/`:
### Testes no host

```bash
pio test -e native # validadores, cursor de telemetria, rótulos, parsers, pacotes de idioma, as telas Licença e de atualização, o menu de Configurações, a verificação de senha, a sessão web (283 casos)
pio test -e native # validadores, cursor de telemetria, rótulos, parsers, pacotes de idioma, as telas Licença e de atualização, o menu de Configurações, a verificação de senha, a sessão web (284 casos)
pio test -e native_history_v5 # codec do histórico V5 (62)
pio test -e native_cli # parser do CLI (33)
pio test -e native_logpolicy # persistência de log por transição, faixas da autópsia, leitura do toque (57)
pio test -e native_alarmqueue # fila da telemetria de alarmes (54)
pio test -e native_network # máquina de estados da reconexão Wi-Fi (36)
pio test -e native_network # máquina de estados da reconexão Wi-Fi (39)
pio test -e native_air # config persistente do SIMUT Air (16)
pio test -e native_sensors # tabela de tipos de sensor (13)
pio test -e native_otasig # assinatura da imagem de OTA, a restauração do backup, e o gravador de slot e a atualização em teste do RP2350 (78)
Expand Down
3 changes: 3 additions & 0 deletions WebUI.h
Original file line number Diff line number Diff line change
Expand Up @@ -4350,6 +4350,8 @@ static const char CFG_PAGE[] PROGMEM = R"raw(<!DOCTYPE html>
showToast(window.t('sens_accept_none', 'No probe answered on this GPIO.'), 'err');
} else if (r.status === 422) {
showToast(window.t('sens_accept_bad', 'The probe answered with an invalid ROM.'), 'err');
} else if (r.status === 409) {
showToast(window.t('sens_accept_unsaved', 'Save this slot as an active DS18B20 first.'), 'err');
} else {
showToast(window.t('act_fail', 'Action failed.'), 'err');
}
Expand Down Expand Up @@ -6381,6 +6383,7 @@ static const char FILE_PAGE[] PROGMEM = R"raw(<!DOCTYPE html>
if (v.v === undefined)
return window.t('fil_fw_stage_refused', 'Upload refused (HTTP ') + status + ').' + (v.error ? ' ' + v.error : '');
let why = {
6: window.t('fil_fw_v6','The image is for another chip, or it is damaged. The Pico 2 W takes the releasetwo .bin, and the Pico W the others.'),
7: window.t('fil_fw_v7','The image is for another model (env ') + v.env + ').',
8: window.t('fil_fw_v8','The image is not signed. Use a release .bin from GitHub or a build from the configurator.'),
9: window.t('fil_fw_v9','The signature does not match: the file changed after it was signed, or a key this device does not trust signed it. Download the .bin again.'),
Expand Down
2 changes: 1 addition & 1 deletion data/lang/language_es-ES.lng

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion data/lang/language_pt-BR.lng

Large diffs are not rendered by default.

Loading
Loading