Add v4 FEM LNA CLI control commands. - #1
Closed
fkallay1 wants to merge 35 commits into
Closed
Conversation
Co-authored-by: Copilot <copilot@github.com>
…on-parse-failure Fix: CMD_SEND_RAW_PACKET not freeing packet on parse failure
Add CLI control to LoRa's fem LNA.
* fix for anon contacts when full
Port funkčného OTA systému z FK_lora-sniffer do simple_repeater. Aktualizácia FW cez LoRa malým delta-patchom (HPatchLite inplaceB + streaming DEFLATE + in-place flasher), NIE Nordic BLE DFU. Transport: MeshCore GRP_DATA kanál (PSK) — MyMesh override searchChannelsByHash()/onGroupDataRecv(), dešifrované cez Utils::MACThenDecrypt (AES-128-ECB+HMAC). Žiadna zmena jadra MeshCore. Krypto: mesh::Utils::sha256 + rweather/Crypto. FS: CustomLFS @ 0xD4000. Flash mapa (extrafs.ld): app 0x26000-0xD4000, OTA FS 0xD4000-0xEB000 (92kB), flasher 0xEB000, trace 0xEC000, InternalFS 0xED000+ nedotknutý. Vsetko gated -DWITH_LORA_OTA -> stock buildy nedotknute. Novy env ProMicro_repeater_ota. Prikazy (serial+LoRa CLI): ota status|verify|flash| clear|decompress|nack|dbg. flasher_code.h regen: nrfota/tools/build_flasher.py. Build SUCCESS: ProMicro_repeater_ota + stock ProMicro_repeater. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
test_nrf-ota/: ota_test_lora_repeater.py (2-fáza baseline/run, CZ preset), ota_sender.py + hdiffi.exe z FK_lora, gen_build_info.py (pre-script build#). Repeater (WITH_LORA_OTA): heartbeat "build #N" + boot banner freq/sf na detekciu verzie a zaručenie OLD!=NEW pre patch. OTA env: CZ preset (869.525/SF7) aby sa nerušila SK sieť a zhodoval sa s FK_lora XIAO bridge. PSK "meshcore-ota-key" (16B). readme_nrf-ota.md: kompletný popis architektúry, buildu, ovládania a testovania. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…e, docs Diagnostika príjmu OTA-over-LoRa na ProMicro repeateri (gated WITH_LORA_OTA): - logRxRaw() override -> počítadlo rawrx (surové CRC-OK rámce PRED dekódom) v [OTA] AALIVE heartbeate; odlíši "rádio nepočuje nič" od "počuje, dekód zlyhá". - onGroupDataRecv() už len buffruje do _ota_pending[]; ťažké CustomLFS I/O sa robí v loop() po re-arme rádia (mesh::Mesh::loop()). - 'ota agc' príkaz (READ-ONLY): SX1262 RxGain reg 0x08AC (boosted/power-save), okamžité RSSI, noise floor, agc_reset_interval (extern RADIO_CLASS radio). Záver debugovania (viď readme_tech_nrf-ota.md §8): HW v poriadku (FK_lora sniffer test PASS na tých istých doskách). Trvalá hluchota = jednorazový zaseknutý receiver (stuck noise floor), nie preamble. agc_reset auto-reset ROZBÍJA OTA flash -> držať agc_reset_interval=0 (MeshCore default). Radio config repeatera NEZMENENÝ -> plná kompatibilita s MeshCore sieťou. Docs: readme_tech_nrf-ota.md (nový, technický popis + vyriešené problémy), conv_claude_20260615.md (záznam debugu), readme_nrf-ota.md (update). .gitignore: test artefakty (.bin), .claude/. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…y-run) Dva zdroje flakeovosti automatického `run` odstránené (viď readme_verified_pooling.md): 1) Príjem nedosiahol VERIFIED (timing): fixný --cycles loop + jednorazová finálna kontrola padli skôr, než sa session skumulovala (fire-and-forget stráca pakety na začiatku). Nový broadcast_until_verified(): opakuje broadcast + poll 'ota status' až do VERIFIED alebo --verify-wait (60s), viac pollov/kolo, sleduje rast recv/total, + settle po reboote (RX arm). Nové args: --verify-wait/--poll-tries/--poll-secs/ --reboot-settle (--cycles legacy). 2) Flash hardfault po dry-rune: 'ota verify' (malloc + streaming rekonštrukcia 442kB) pokazí heap → následný 'ota flash' hardfaultne na malloc (flasher stop po "Komprimovany format" → OLD). Dry-run je teraz opt-in (--verify-first, default vyp); run ide po VERIFIED rovno na flash. Bezpečnosť drží base-FW SHA256 check vnútri flash. Overené: meshcore-dev#34→meshcore-dev#36 konzistentný [PASS]. Dokumentácia: readme_verified_pooling.md (nový), readme_tech_nrf-ota.md §8.2 (firmware TODO: vyčistiť heap medzi verify a flash). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ozlíšenie
OTA-over-LoRa pre nRF52840 repeater — bezpečnostné a robustnosť vylepšenia.
Protokol:
- BEGIN paket premenovaný na HEADER (OtaHeaderPkt/OTA_PKT_HEADER, wire 0x10) —
je to metadátová hlavička patchu, nie nutne prvý paket.
- Ed25519 podpis HEADER (107B správa, key_id + 64B signature), overenie proti
s_authors[] v OtaReceiver_signkey.cpp. Nepodpísaný akceptovaný LEN s
-D OTA_ALLOW_UNSIGNED (default OFF → produkcia odmieta).
- CHUNK +8B: old_fw_size + old_sha256_prefix pre rozlíšenie patchov pre rôzne FW.
Prijímač (OtaReceiver):
- Out-of-order: chunky pred HEADER sa bufferujú do partial session, HEADER ich
promuje (merge, recv_count z bitmap). Fix: old_fw_size sa preberá z chunku
(HEADER ho nenesie) — inak guard zahodil všetky chunky po HEADER.
- Base-FW gate: lacný fw_size cross-check (fw_image_size z linker symbolov
__etext+SIZEOF(.data)) pred drahým SHA256.
FW identity trailer (FwId.{cpp,h} + gen_fw_trailer.py):
- FwIdTrailer (magic+image_size+build#+sha256) v .rodata, vyplnený post-build
do firmware.hex. -Wl,-u,fw_id_trailer drží symbol pri --gc-sections.
Test (ota_sender.py, ota_test_lora_repeater.py):
- --privkey/--keyid: Ed25519 podpis HEADER (pycryptodome eddsa).
- --packetorder {normal,hbegin,hmiddle,hend}: pozícia HEADER pre out-of-order test.
- E2E na HW PASS: normal aj hend (build# → build#+1 cez LoRa, flash+reboot).
Ostatné: BOM/encoding fix, test_key.der + __pycache__ do .gitignore.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
AGENTS.md — projektová dokumentácia pre AI agentov (build systém, varianty, PlatformIO konvencie). .vscode/extensions.json — doc komentár k formátu. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
readme_nrf-ota.md, readme_tech_nrf-ota.md, readme_verified_pooling.md → fkclaude/fcl_*.md (FK/Claude projektové poznámky na jednom mieste). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…flash base z linker symbolu RAM-assembly refaktor (rieši 2× FS pri veľkých patchoch): - ota_acquire_patch_ram(): patch do čerstvo malloc-nutého RAM buffra; default zostaví z recv.log (assemble_log_to_buf: build_log_offsets + chunk_exp_len), -D USE_PATCHBIN_FILE číta /ota/patch.bin. Caller free(). - assemble_and_verify() pri COMPLETE: default verify_log_sha() = SHA256 streamovo z recv.log (žiadny patch.bin, žiadny veľký buffer); USE_PATCHBIN_FILE = patch.bin + over + zmaž recv.log (cleanup, rieši 2× v file móde). - dry-run (ota_patch_to_file) aj real (ota_flash_via_flasher) cez ota_acquire_patch_ram → puff_stream / MemStream nad RAM buffrom. patch_file_read ostal unused. - malloc zlyhanie = graceful error s tipom na -D USE_PATCHBIN_FILE. Tier-2 (deštruktívny assemble do 0x20000000) NEIMPLEMENTOVANÝ (risk/netestovateľné). fw_image_size(): base z linker symbolu __flash_arduino_start (= ORIGIN(FLASH)) namiesto hardcoded APP_FLASH_START → robustné pre v6/v7. Tvrdý symbol (žiadny weak fallback) — ak chýba (non-Arduino projekt), link error = fail-fast, zámerne. APP_FLASH_START/MAX makrá ostávajú pre compile-time kontexty. E2E PASS na HW: build meshcore-dev#90→meshcore-dev#91, dry-run aj real flash z recv.log→RAM, dry-run pred flashom bez hardfaultu. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
fkallay1
added a commit
that referenced
this pull request
Aug 20, 2026
Doteraz sme vedeli, ze guard vystrelil 8x v jednom 25s okne, ale nie ci to boli skutocne zachrany alebo falosne poplachy - guard nic nezaznamenaval. A zaroven sme netestovali samotnu opravu navrhnutu do RadioLibu, len jej kriterium. Toto riesi oboje. Za #ifdef FK_LR2021_SPI_DIAG ide getPacketLength() cez novy fkDiagPktLen(), ktory: 1. cita dlzku sam (fkRawPktLen, dve transakcie), takze vidi status bajt PRAVE toho citania, ktore hodnotu vyrobilo - inak sa to overit neda, RadioLib si status spotrebuje vnutri; 2. o zastaralosti rozhoduje podla CMD_DAT, teda podla pravidla navrhnuteho upstreamu - cize ta oprava realne bezi na zeleze; 3. zaroven vyhodnocuje aj nase odtlackove pravidlo (hodnota == irq[31:16]) a zapise, ktore z nich vystrelilo; 4. ak ani po 4 pokusoch nedostane CMD_DAT, spadne na kniznicne citanie, aby sme na tom nikdy neboli horsie. Udalosti (fp, prva hodnota, finalna hodnota, stat, pocet pokusov, ktore pravidlo) idu do kruhoveho buffra na 8 zaznamov. Z horucej RX cesty sa NIC netlaci - zapis do Serialu by zastavil prijem. Vypis je az cez CLI 'fk spifix'. Tym sa da rozlisit falosny poplach: rule=FP bez CMD a first == final znamena, ze dlzka bola spravna od zaciatku a odtlacok sa len nahodou zhodoval. To je presne podozrenie na tych 8 udalosti z 09:11 - v tom okne boli dva hodnoverne 68 bajtove ramce a 68 je odtlacok pri RX_DONE|CRC_ERROR, cize 2 x 4 pokusy = 8. Nediagnosticka cesta ostava nezmenena (overene buildom MeshTracker_X1_repeater), PR vetva sa toho netyka. Overene na zeleze, build meshcore-dev#460: prijem zdravy (11 ramcov, rxerr=0, miss=0) a dlzky spravne - #1 len=61 path[4] -> meshcore-dev#2/meshcore-dev#3 len=63 path[5], teda +2 bajty na hop. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.