Cosa è stato modificato
1. Store-and-Forward (S&F) per i messaggi diretti
File: src/msgstore.cpp, src/msgstore_api.h, src/msgstore_glue.cpp, src/msgstore_settings.{h,cpp},
src/sto_notice.{h,cpp}, src/dm_dedup.{h,cpp}, src/reack_limiter.{h,cpp}, src/dm_stats.{h,cpp}, spuntare la casella in
src/lora_functions.cpp e src/loop_functions.cpp, sito web /?page=mailbox.
- Problema: un messaggio diretto (DM) inviato a una stazione attualmente non raggiungibile va perso.
- Il codice del mittente è rimasto invariato rispetto all'upstream:
MAX_RETRANSMIT3 a intervalli di 40 s, ovvero 4 trasmissioni in circa
2 minuti, nuovomsg_idper copia (pnRetryId) a condizioni stabili{NNN. L'unica novità è un codice di risposta 0x03
"fallito" nell'app al momento della rinuncia e punti aggiuntivi (ack=,rtt=,att=). - Destinatario: i messaggi diretti duplicati vengono scartati (deduplicazione in base alla fonte e a NNN), ma viene inviata una nuova conferma di ricezione (Re-ACK, limitata da
reack_limiter), in modo che un ACK perso non provochi un loop infinito. - Nodo della casella postale (Store-Node): memorizza un DM che non raggiunge la destinazione (nessun controllo degli hop durante la memorizzazione).
Non appena sente nuovamente la destinazione in forma diretta (percorso senza virgola), restituisce una scala a 9 livelli con
max_hop 0da: trasmissioni della durata di 0/40/80/180/220/260/360/400/440 s (per un totale di 7 min 20 s), seguite da 1 ora di pausa ciascuna
Voce. Ogni spedizione ha una nuovamsg_id(millis()),{NNNrimane. Ritardo casuale 5-60 s; se sente un
Se viene trasmesso un altro nodo per lo stesso (sorgente, NNN), la trasmissione viene interrotta; un ACK termina la sequenza. La
La casella di posta si trova solo nella RAM; un riavvio la cancella. - Limiti: un'azione al massimo ogni 30 secondi, al massimo 20 azioni all'ora per nodo; nessuna trasmissione in caso di QRS/QRT
o se l'utilizzo del canale supera il 25% (5 min). Carico utile fino a 160 byte. - Risposta al mittente: stato 0x04 (in attesa, destinatario allegato) e, facoltativamente, il testo
:stoNNN <Ziel>
(limite di rate,--storenotice, impostazione predefinita). - Modalità (
--store):off(Standard) |own(Destinazioni con lo stesso indicativo di chiamata di base del nodo) |list
(Indicativo di chiamata da--storecall, max. 16) |heard(Brano ascoltato nelle ultime 12 ore). - Hardware: schede con
ENABLE_MSGSTORE(tutti gli ambienti ESP32-S3, RAK4631, T114, T-Echo). Altrimenti non integrati. - Persistenza: frase propria (NVS su ESP32,
/msgstore.cfgnel LittleFS su nRF52), non ins_meshcom_settings.
2. Matrice di vicinato (NBR)
File: src/nbr_matrix.{h,cpp}, src/nbr_mask.h, src/nbr_views.{h,cpp}, src/topo_ui.{h,cpp}, collegamento a
src/lora_functions.cpp e src/txring_functions.cpp, Annuncio /?page=neighbours, Comando --neighbours.
- Calcola una matrice locale a due salti “La stazione Y riceve la stazione X” a partire dai campi di percorso dei frame ricevuti (finestra di 12 ore)
e dai rapporti sui segnali HEY. La matrice stessa non viene trasmessa. - Per ogni frame da inoltrare (fonte, NNN): F richiesta = vicini diretti che non hanno ancora il frame; F esclusivo =
vicini raggiungibili solo da me. Caso A (F esclusivo non vuoto): inoltro con priorità, non interrompo mai. Caso B:
gli altri garantiscono la copertura, io inoltro con backoff e interrompo non appena viene rilevata la copertura (basata sul contatore di copertura, non su quello di
). Il controllo di interruzione rilegge ora l’anello TX sotto il ring-lock prima di liberare uno slot
. - Riquadri di testo (
:) e quindi anche i frame inviati dal server alimentano solo il proprio passo (ME), nessun
Bordi del percorso; in questo modo non si creano vicini fantasma. - Nessun nuovo formato di trasmissione per la decisione: i firmware più vecchi continuano a diffondersi come prima. Rapporto HN facoltativo
(--nbrreport, Standardauto): un frame HEY a “HN” ogni 15 min amax_hop 0; il firmware di serie lo scarta perché
«HN» non supera l'esame per il codice di chiamata. - Memoria: ESP32-S3 e nRF52840 128 righe / 512 bordi,
NbrMatrix13.992 B, maschere TX-Ring 660 B; classico
ESP32 64 righe / 256 spigoli, 5.592 B, 340 B. - Gli interruttori si trovano in
node_sset40x0100-0x2000 e quindi al di fuori dei bit KISS/TCP 0x0010-0x0080.
3. MHeard e tabella dei percorsi sostituiti dall’NBR (cambiamento visibile nel comportamento)
src/mheard_functions.{cpp,h} e src/mheard_throttle.h omesso, src/mh_phone.{h,cpp} è la successione.
--mheard(in serie): righe al posto della tabella ASCII[MH] key=value, più recenti per prime; colonne pl/mesh e numeriche
Gli HW-ID non sono più necessari.--path, pagina del percorso Web, scheda "Percorso T-Deck": mostrano il numero di hop e i vicini dalla matrice anziché la versione completa
Stringa del percorso del relay.- Pagina Web di MHeard: SNR come media su 8 frame, etichette diverse, campi aggiuntivi.
- Frame BLE-MHeard per l'app: i più recenti per primi, al massimo un frame live per stazione al minuto, sette nuove chiavi
(AGE HM ROLE EX NB GW VIA) aggiunte alla fine, le 13 chiavi precedenti e il loro ordine rimangono invariati. Per
stazioni senza spazio per i dettagli (più di 64 / 48 vicini diretti su S3, RAK / ESP32 classico) mancano RSSI, SNR,
PLT, MOD, PL e MESH nel frame al posto dei valori segnaposto; DIST rimane sempre numerico. L’app di serie tollera
chiavi sconosciute e valori mancanti (verificato rispetto al codice sorgente dell’app). - In "Luft", cambia il valore, non il formato, del numero adiacente in HEY
R<n>, Posizione/Ne il rapporto sul segnale HEY:
primagetMheardCount()(tutte le stazioni ascoltate in 60 minuti), oraNCNT(vicini su due lati, al massimo 99,
minore o uguale al valore precedente). Il server e la mappa mostrano quindi sistematicamente valori inferiori per i nuovi nodi. - Persistenza:
/mheard.date/mhpath.datvengono cancellati al primo avvio (la cronologia va persa una volta sola),
Intervallo di salvataggio da 30 s a 10 min, T-Deck Pro esegue una nuova registrazione/topo.datsulla scheda SD. - Capacità con riga di dettaglio completa: S3/RAK 80 -> 64, ESP32 classico 30 -> 48.
4. Nuovi comandi seriali/USB (19)
Valori predefiniti nella colonna “Std.”. Solo --nbrdebug, --nbrrelay, --nbrsym, --nbrreport sono righe della tabella
COMMAND_TOGGLES (src/command_functions.cpp, 80 righe in totale, caratteri in src/command_toggles.h); tutti gli altri
sono i livelli della catena di comando definiti manualmente.
| Comando | Argomenti | ore | Effetto | Salva | Limitazione |
|---|---|---|---|---|---|
--neighbours |
– | – | Visualizza la matrice dei vicini (forma abbreviata --nbr) |
no | |
--nbrreset |
– | – | Svuota matrice | no | |
--nbrcheck |
– | – | Verifica della consistenza della matrice | no | |
--nbrdebug |
acceso/spento | off | Output di debug di tutte le decisioni NBR | sì | |
--nbrrelay |
off/count/on | off | Decisione sul relè: spento / solo registrazione / interruzione attiva | sì | |
--nbrsym |
acceso/spento | su | Ipotesi di simmetria (SNR >= -16 dB), in assenza di osservazioni dirette | sì | |
--nbrreport |
off/auto/on | auto | Notizie dal vicinato dell'HN (auto: solo se Mesh e Gateway sono spenti) |
sì | |
--store |
off/proprio/elenco/ascoltato | off | Modalità casella di posta; senza valore: stato | sì | ENABLE_MSGSTORE |
--storecall |
Elenco/nessuno | vuoto | Indicativo di chiamata per Modus list (max. 16) |
sì | ENABLE_MSGSTORE |
--storeslots |
1-50 | 50 | Posti nella casella di posta | sì | ENABLE_MSGSTORE |
--storetime |
1-168 | 24 | Tempo di permanenza in ore | sì | ENABLE_MSGSTORE |
--storenotice |
acceso/spento | su | :sto-Avviso al mittente |
sì | ENABLE_MSGSTORE |
--mbox |
– | – | Visualizza il contenuto della casella di posta | no | ENABLE_MSGSTORE |
--msgid |
– | – | Visualizza il contatore delle notizie | no | |
--airgap |
on/off/mostra | off | Banco di prova: scartare la ricezione, rifiutare la trasmissione | no | |
--battprobe |
[n] 1-10 | 1 | Misurazione ADC della batteria (circa 7,5 s per ciclo) | no | INSTRUMENT_ENABLED, Heltec con divisore in serie |
--dumpsettings |
– | – | Elenco delle impostazioni | no | solo nRF52 |
--keylock |
acceso/spento | off | Blocco tasti (SYM+K) | sì | T-Deck, T-Deck Plus |
--ethmtu |
1280-1500 | 1500 | MTU Ethernet (se inferiore a 1500, limita l'MSS TCP del server web) | sì | RAK4631 |
Altre modifiche: --help è suddiviso in gruppi e, alle spalle delle guardie, ci sono i rispettivi addestratori; una parte dei
I comandi continuano a non avere un testo di aiuto. Token esatti al posto delle corrispondenze con prefisso nella tabella di alternanza. È stato rimosso
codice commentato dei comandi di prova --compress e --softser test|test0|xml.
5. Cambiamenti strutturali
s_meshcom_settingsha un'unica definizione insrc/meshcom_settings.h; Schema e percorsi Flash in
src/settings_schema.*,src/settings_store.*(ESP32: NVS con nomi delle chiavi invariati, nRF52: file).
Gli intervalli di valori dello schema corrispondono ai limiti massimi dei setter (tra cui, ad esempio,node_postimefino a 86.400 s,node_altfino a
40000,node_gpsdebugfino a 3,--postime(ora limitato a un giorno).- Contatore (
node_msgid(tra l'altro) suddivisi insrc/counters_store.h;finalizeAndSendAPRS()sostituisce le singole copie
della conclusione della trasmissione;save_msgid()omesso. - BLE: smontaggio del telaio del telefono e drain in
src/ble_phone_*.h; UDP/gateway insrc/udp_frame*,src/gateway_service*. - Moduli di supporto/database:
src/country_profile.*,src/radio_units.*,src/loop_scheduler.*,src/uptime_min.h,
src/batt_pipeline.h,src/ui_common/*.
6. Modifiche alla build (visibili al revisore)
- RAK4631 contribuisce a
-Osanziché-Ofast(variants/wiscore_rak4631/platformio.ini,build_unflags = -Ofast,-Os):
Flash 96,1% -> circa 70%, RAM invariata; si interrompe a quel punto-ffast-math, in modo che funzioniisnan()-Esami in
codice a monte (ad es.bmx280.cpp,onewire_functions.cpp) di nuovo. T114 e T-Echo rimangono su-Ofast. - Ambienti T-Beam classici: rimossi i flag di compilazione PSRAM. E22_XML: ricompilato KISS/TCP,
MC_CAPTURE=0->
MC_DIAG=0,tinyxml2come copia incorporata all'indirizzolib/tinyxml2. t5_epapersta costruendo ora (nuovoconfiguration.h, fonti bq27220,lib_deps); memoria T-Deck-Pro-LVGL nella PSRAM.- Nuove sezioni di base
[esp32_s3]/[esp32_classic]con unupload_commandsu$BUILD_DIR
(Indirizzi, file e--port(invariato). - Nuova linea di batterie per tutte le tavole (
src/batt_pipeline.h, campionamento diverso).OneWire_GPIO99 -> -1 con 8 tavole. settings_schema.cppsi trova negli ambienti Safeboot nel filtro sorgente (i percorsi Flash seguono questo schema).default_envs, tabelle delle partizioni e-Werrorrimangono invariati; il file del flusso di lavoromeshcom-ci.ymlnon serve
Modifica (stessi ambienti, stessi percorsi degli artefatti).safeboot.binesafeboot-s3.binsono stati ricostruiti da zero a partire da questa configurazione (dati inseritiesp32_flash.*e
settings_schema.cppsono cambiate).
7. Rimosso
- 43 font Adafruit GFX inutilizzati disponibili su
src/Fonts/, 11 file AVR/SAMD/ESP8266 disponibili all'indirizzosrc/Platforms/,
src/nrf52/glcdfont.c(Duplicato),src/t-deck-pro/ui_scr_mrg.c(sostituito dasrc/ui_common/scr_mgr.c),
src/idf_component.yml.orig.
Errori corretti
Solo gli errori che si trovano in upstream/dev 1d4f525 sono ancora disponibili.
- BLE-N1/N2/N3 (nRF52): un Notify rifiutato ha perso il frame (l'upstream scarta il frame indipendentemente dal
Risultato della trasmissione); ora restituzioneBLE_SEND_*e ripetizione. - BLE-N4: il telefono con un checksum PIN errato viene immediatamente disconnesso (l'upstream esegue la verifica solo nel callback Rx).
- nRF52: la scrittura delle impostazioni tramite BLE ha copiato l'intera immagine del telefono, compresa quella obsoleta
node_msgid
riguardo alle impostazioni correnti; il contatore è tornato indietro. - P13: Il messaggio "Pong" inviato al proprio indicativo di chiamata raggiunge il client BLE.
- P14:
{ping}è stato tratto dasendMessage()inviato più volte, ora una sola volta. - P15: i messaggi propri senza ripetizione mantengono la loro priorità nel TX-Ring (l'upstream li tratta come relay).
- Richiesta di funzionalità / Bug Heltec Wireless Tracker – La retroilluminazione dello schermo non si spegne tramite il comando “Display OFF” dell’app Android (TFT\_BL GPIO 21)#1182: T-Tracker: la retroilluminazione TFT non risponde al comando «Display spento».
- Il server web non funziona da un’altra sottorete – RAK con LAN n. 1183 (opt-in): Il W5100S (RAK4631) non limita il TCP-MSS;
--ethmtuSe il valore è inferiore a 1500, lo imposta per il server web.
Lo Standard 1500 non modifica tale comportamento. - Caratteri speciali/diacritici danneggiati durante l'invio di messaggi tramite WEBService#1173 (Resto): il contatore dei messaggi dell'interfaccia web conta i byte UTF-8.
- Web: rimossi i pulsanti inattivi dalla pagina informativa (i pulsanti sono ora protetti contro le funzioni non implementate).