{
  "id": "lusofw",
  "name": "LusoFW",
  "type": "fork",
  "maintainer": "MeshCore Portugal",
  "maintainerUrl": "https://github.com/Meshcore-Portugal",
  "description": "A community MeshCore firmware distribution for the Portuguese community, with Portugal-oriented radio defaults, duty-cycle enforcement, network time synchronisation, flood-advert controls, and curated repeater and bridge builds.\n",
  "repository": "https://github.com/Meshcore-Portugal/lusofw",
  "website": "https://meshcore.pt",
  "license": "MIT",
  "status": "active",
  "scope": "universal",
  "lifecycle": "active",
  "maturity": "stable",
  "distribution": "community",
  "lineage": {
    "kind": "fork",
    "upstreamFirmwareId": "meshcore",
    "upstreamRepository": "https://github.com/meshcore-dev/MeshCore"
  },
  "runtime": {
    "framework": "arduino",
    "language": "C++"
  },
  "roles": [
    "repeater"
  ],
  "features": [
    "Portugal-oriented radio and region defaults",
    "Duty-cycle enforcement",
    "Network time synchronisation",
    "Flood-advert scheduling and reduction",
    "ESP-NOW and RS-232 repeater bridge builds",
    "SX126x boosted receive gain controls",
    "Curated browser-flashable releases"
  ],
  "capabilities": {
    "protocol": {
      "meshcoreCompatible": true
    },
    "transports": {
      "usbSerial": true
    },
    "operations": {
      "webFlasher": true,
      "ota": true
    },
    "networking": {
      "repeater": true,
      "roomServer": false,
      "observer": false,
      "mqtt": false,
      "kissModem": false
    },
    "hardware": {
      "gps": true,
      "display": true,
      "sensors": true,
      "lowPowerRx": false
    }
  },
  "verification": {
    "sourceAvailable": true,
    "releasesAvailable": true,
    "signedReleases": false,
    "reproducibleBuilds": false,
    "ciBuilds": true,
    "webFlasher": false,
    "hasDocumentation": true,
    "lastChecked": "2026-07-21",
    "notes": [
      "Release assets include SHA-1 checksum files.",
      "Published releases are curated repeater and repeater-bridge builds."
    ]
  },
  "devices": [
    {
      "id": "heltec-t114",
      "status": "supported",
      "target": "heltec_t114",
      "platformio_board": "heltec_t114"
    },
    {
      "id": "heltec-v3",
      "status": "supported",
      "target": "heltec_v3",
      "platformio_board": "heltec_wifi_lora_32_V3"
    },
    {
      "id": "heltec-v4",
      "status": "supported",
      "target": "heltec_v4",
      "platformio_board": "heltec_v4"
    },
    {
      "id": "heltec-v4-exp",
      "status": "supported",
      "target": "heltec_v4",
      "platformio_board": "heltec_v4",
      "notes": "Uses the Heltec V4 TFT release target."
    },
    {
      "id": "heltec-wsl3",
      "status": "supported",
      "target": "heltec_v3",
      "platformio_board": "heltec_wifi_lora_32_V3"
    },
    {
      "id": "lilygo-t3-s3-sx126x",
      "status": "supported",
      "target": "lilygo_t3s3",
      "platformio_board": "t3_s3_v1_x"
    },
    {
      "id": "lilygo-t3-s3-sx127x",
      "status": "supported",
      "target": "lilygo_t3s3_sx1276",
      "platformio_board": "t3_s3_v1_x"
    },
    {
      "id": "lilygo-tlora-1-6",
      "status": "supported",
      "target": "lilygo_tlora_v2_1",
      "platformio_board": "ttgo-lora32-v21"
    },
    {
      "id": "rak-3112",
      "status": "supported",
      "target": "rak3112",
      "platformio_board": "esp32-s3-devkitc-1"
    },
    {
      "id": "rak-4631",
      "status": "supported",
      "target": "rak4631",
      "platformio_board": "rak4631"
    },
    {
      "id": "sensecap-solar-p1",
      "status": "supported",
      "target": "sensecap_solar",
      "platformio_board": "seeed_sensecap_solar"
    },
    {
      "id": "sensecap-solar-p1-pro",
      "status": "supported",
      "target": "sensecap_solar",
      "platformio_board": "seeed_sensecap_solar"
    },
    {
      "id": "lilygo-t-beam-sx1262",
      "status": "supported",
      "target": "lilygo_tbeam_SX1262",
      "platformio_board": "ttgo-t-beam"
    },
    {
      "id": "lilygo-t-beam-1-2-sx1276",
      "status": "supported",
      "target": "lilygo_tbeam_SX1276",
      "platformio_board": "ttgo-t-beam"
    },
    {
      "id": "lilygo-tbeam-supreme",
      "status": "supported",
      "target": "lilygo_tbeam_supreme_SX1262",
      "platformio_board": "t_beams3_supreme"
    },
    {
      "id": "xiao-nrf52",
      "status": "supported",
      "target": "xiao_nrf52",
      "platformio_board": "seeed-xiao-afruitnrf52-nrf52840"
    },
    {
      "id": "xiao-esp32s3",
      "status": "supported",
      "target": "xiao_s3_wio",
      "platformio_board": "seeed_xiao_esp32s3"
    }
  ],
  "popularity": {
    "githubStars": 12,
    "githubForks": 3,
    "githubWatchers": 4,
    "githubOpenIssues": 0,
    "githubContributors": 176,
    "releaseDownloads": 1503,
    "latestReleaseDownloads": 10,
    "lastChecked": "2026-07-21"
  },
  "source": {
    "path": "data/firmwares/lusofw/firmware.yaml",
    "updatedAt": "2026-07-21T08:04:18Z"
  },
  "latest_version": "2026.7.2-rc3-d164f95",
  "released": "2026-07-20",
  "releases": [
    {
      "version": "v2026.7.2-rc3-d164f95",
      "name": "v2026.7.2-rc3-d164f95",
      "datetime": "2026-07-20T03:21:50Z",
      "url": "https://github.com/Meshcore-Portugal/lusofw/releases/tag/v2026.7.2-rc3-d164f95",
      "prerelease": true,
      "notes": "Automated dev prerelease of dev@d164f95 for v2026.7.2-rc3.\r\n\r\n\r\nBased on MeshCore v1.16.0\r\nmain@e8d3c53ba1ea863937081cd0caad759b832f3028\r\n\r\n### Correções\r\n\r\n- CLIENTE: A página inicial do GPS agora fica oculta no carrossel quando nenhum GPS é detectado na porta série no arranque, em vez de aparecer sempre quando `ENV_INCLUDE_GPS` está ativado.\r\n- REPETIDOR: Corrigido envio de anúncios por inundação (flood adverts): agora respeita o `default_scope` e o modo de hash de caminho (`path_hash_mode` nas preferências).\r\n- REPETIDOR: Removida a redução probabilística de flood adverts.\r\n- REPETIDOR: Corrigido um *buffer overflow* no acumulador de comandos série.\r\n\r\n#### Melhorias\r\n\r\n- CLI: Adicionada a leitura do motivo de arranque do ESP32 (`get pwrmgt.bootreason`).\r\n- CLI: Reforçada a cópia segura de strings no tratamento de comandos.\r\n- RÁDIO: Ajustado o atraso de retentativa CAD para intervalo entre 120 a 360 ms.\r\n\r\n#### Observabilidade                                                                                                                                                                                                                                                                                                                                                                    \r\n\r\n- DISPATCHER: Adicionados logs de debug para conclusão de TX.\r\n- ESTATÍSTICAS: Removidos parâmetros não usados na formatação de respostas.\r\n\r\n#### Build e Configuração\r\n\r\n- BUILD: Adicionada a variável `DISABLE_DEBUG` ao processo de build.\r\n- BUILD: Reorganizadas as build flags no platformio.ini.",
      "notesHtml": "<p>Automated dev prerelease of dev@d164f95 for v2026.7.2-rc3.</p>\n<p>Based on MeshCore v1.16.0\nmain@e8d3c53ba1ea863937081cd0caad759b832f3028</p>\n<h3>Correções</h3>\n<ul>\n<li>CLIENTE: A página inicial do GPS agora fica oculta no carrossel quando nenhum GPS é detectado na porta série no arranque, em vez de aparecer sempre quando <code>ENV_INCLUDE_GPS</code> está ativado.</li>\n<li>REPETIDOR: Corrigido envio de anúncios por inundação (flood adverts): agora respeita o <code>default_scope</code> e o modo de hash de caminho (<code>path_hash_mode</code> nas preferências).</li>\n<li>REPETIDOR: Removida a redução probabilística de flood adverts.</li>\n<li>REPETIDOR: Corrigido um <em>buffer overflow</em> no acumulador de comandos série.</li>\n</ul>\n<h4>Melhorias</h4>\n<ul>\n<li>CLI: Adicionada a leitura do motivo de arranque do ESP32 (<code>get pwrmgt.bootreason</code>).</li>\n<li>CLI: Reforçada a cópia segura de strings no tratamento de comandos.</li>\n<li>RÁDIO: Ajustado o atraso de retentativa CAD para intervalo entre 120 a 360 ms.</li>\n</ul>\n<h4>Observabilidade</h4>\n<ul>\n<li>DISPATCHER: Adicionados logs de debug para conclusão de TX.</li>\n<li>ESTATÍSTICAS: Removidos parâmetros não usados na formatação de respostas.</li>\n</ul>\n<h4>Build e Configuração</h4>\n<ul>\n<li>BUILD: Adicionada a variável <code>DISABLE_DEBUG</code> ao processo de build.</li>\n<li>BUILD: Reorganizadas as build flags no platformio.ini.</li>\n</ul>\n"
    },
    {
      "version": "v2026.7.2-rc2-e56877e",
      "name": "v2026.7.2-rc2-e56877e",
      "datetime": "2026-07-16T20:10:13Z",
      "url": "https://github.com/Meshcore-Portugal/lusofw/releases/tag/v2026.7.2-rc2-e56877e",
      "prerelease": true,
      "notes": "Automated dev prerelease of dev@e56877e for v2026.7.2-rc2.\n\n\nBased on MeshCore v1.16.0\nmain@e8d3c53ba1ea863937081cd0caad759b832f3028\n\n### Correções\n\n- CLIENTE: A página inicial do GPS agora fica oculta no carrossel quando nenhum GPS é detectado na porta série no arranque, em vez de aparecer sempre quando `ENV_INCLUDE_GPS` está ativado.\n- REPETIDOR: Corrigido envio de anúncios por inundação (flood adverts): agora respeita o `default_scope` e o modo de hash de caminho (`path_hash_mode` nas preferências).\n- REPETIDOR: Removida a redução probabilística de flood adverts.\n- REPETIDOR: Corrigido um *buffer overflow* no acumulador de comandos série.\n\n#### Melhorias\n\n- CLI: Adicionada a leitura do motivo de arranque do ESP32 (`get pwrmgt.bootreason`).\n- CLI: Reforçada a cópia segura de strings no tratamento de comandos.\n- RÁDIO: Ajustado o atraso de retentativa CAD para intervalo entre 120 a 360 ms.\n\n#### Observabilidade                                                                                                                                                                                                                                                                                                                                                                    \n\n- DISPATCHER: Adicionados logs de debug para conclusão de TX.\n- ESTATÍSTICAS: Removidos parâmetros não usados na formatação de respostas.\n\n#### Build e Configuração\n\n- BUILD: Adicionada a variável `DISABLE_DEBUG` ao processo de build.\n- BUILD: Reorganizadas as build flags no platformio.ini.",
      "notesHtml": "<p>Automated dev prerelease of dev@e56877e for v2026.7.2-rc2.</p>\n<p>Based on MeshCore v1.16.0\nmain@e8d3c53ba1ea863937081cd0caad759b832f3028</p>\n<h3>Correções</h3>\n<ul>\n<li>CLIENTE: A página inicial do GPS agora fica oculta no carrossel quando nenhum GPS é detectado na porta série no arranque, em vez de aparecer sempre quando <code>ENV_INCLUDE_GPS</code> está ativado.</li>\n<li>REPETIDOR: Corrigido envio de anúncios por inundação (flood adverts): agora respeita o <code>default_scope</code> e o modo de hash de caminho (<code>path_hash_mode</code> nas preferências).</li>\n<li>REPETIDOR: Removida a redução probabilística de flood adverts.</li>\n<li>REPETIDOR: Corrigido um <em>buffer overflow</em> no acumulador de comandos série.</li>\n</ul>\n<h4>Melhorias</h4>\n<ul>\n<li>CLI: Adicionada a leitura do motivo de arranque do ESP32 (<code>get pwrmgt.bootreason</code>).</li>\n<li>CLI: Reforçada a cópia segura de strings no tratamento de comandos.</li>\n<li>RÁDIO: Ajustado o atraso de retentativa CAD para intervalo entre 120 a 360 ms.</li>\n</ul>\n<h4>Observabilidade</h4>\n<ul>\n<li>DISPATCHER: Adicionados logs de debug para conclusão de TX.</li>\n<li>ESTATÍSTICAS: Removidos parâmetros não usados na formatação de respostas.</li>\n</ul>\n<h4>Build e Configuração</h4>\n<ul>\n<li>BUILD: Adicionada a variável <code>DISABLE_DEBUG</code> ao processo de build.</li>\n<li>BUILD: Reorganizadas as build flags no platformio.ini.</li>\n</ul>\n"
    },
    {
      "version": "v2026.7.2-rc1-f22a2ba",
      "name": "v2026.7.2-rc1-f22a2ba",
      "datetime": "2026-07-14T15:57:34Z",
      "url": "https://github.com/Meshcore-Portugal/lusofw/releases/tag/v2026.7.2-rc1-f22a2ba",
      "prerelease": true,
      "notes": "Automated dev prerelease of dev@f22a2ba for v2026.7.2-rc1.\n\n\nBased on MeshCore v1.16.0\nmain@e8d3c53ba1ea863937081cd0caad759b832f3028\n\n### Correções\n\n- CLIENTE: A página inicial do GPS agora fica oculta no carrossel quando nenhum GPS é detectado na porta série no arranque, em vez de aparecer sempre quando `ENV_INCLUDE_GPS` está ativado.\n- REPETIDOR: Corrigido envio de anúncios por inundação (flood adverts): agora respeita o `default_scope` e o modo de hash de caminho (`path_hash_mode` nas preferências).\n- REPETIDOR: Melhorada a rotina de sleep com rearmar de wake sources. (upstream v1.16.0 bug)\n- REPETIDOR: Removida a redução probabilística de flood adverts.\n\n#### Melhorias\n\n- CLI: Adicionada a leitura do motivo de arranque do ESP32 (`get pwrmgt.bootreason`).\n- CLI: Reforçada a cópia segura de strings no tratamento de comandos.\n- RÁDIO: Ajustado o atraso de retentativa CAD para intervalo entre 120 a 360 ms.\n\n#### Observabilidade                                                                                                                                                                                                                                                                                                                                                                    \n\n- DISPATCHER: Adicionados logs de debug para conclusão de TX.\n- ESTATÍSTICAS: Removidos parâmetros não usados na formatação de respostas.\n\n#### Build e Configuração\n\n- BUILD: Adicionada a variável `DISABLE_DEBUG` ao processo de build.\n- BUILD: Reorganizadas as build flags no platformio.ini.",
      "notesHtml": "<p>Automated dev prerelease of dev@f22a2ba for v2026.7.2-rc1.</p>\n<p>Based on MeshCore v1.16.0\nmain@e8d3c53ba1ea863937081cd0caad759b832f3028</p>\n<h3>Correções</h3>\n<ul>\n<li>CLIENTE: A página inicial do GPS agora fica oculta no carrossel quando nenhum GPS é detectado na porta série no arranque, em vez de aparecer sempre quando <code>ENV_INCLUDE_GPS</code> está ativado.</li>\n<li>REPETIDOR: Corrigido envio de anúncios por inundação (flood adverts): agora respeita o <code>default_scope</code> e o modo de hash de caminho (<code>path_hash_mode</code> nas preferências).</li>\n<li>REPETIDOR: Melhorada a rotina de sleep com rearmar de wake sources. (upstream v1.16.0 bug)</li>\n<li>REPETIDOR: Removida a redução probabilística de flood adverts.</li>\n</ul>\n<h4>Melhorias</h4>\n<ul>\n<li>CLI: Adicionada a leitura do motivo de arranque do ESP32 (<code>get pwrmgt.bootreason</code>).</li>\n<li>CLI: Reforçada a cópia segura de strings no tratamento de comandos.</li>\n<li>RÁDIO: Ajustado o atraso de retentativa CAD para intervalo entre 120 a 360 ms.</li>\n</ul>\n<h4>Observabilidade</h4>\n<ul>\n<li>DISPATCHER: Adicionados logs de debug para conclusão de TX.</li>\n<li>ESTATÍSTICAS: Removidos parâmetros não usados na formatação de respostas.</li>\n</ul>\n<h4>Build e Configuração</h4>\n<ul>\n<li>BUILD: Adicionada a variável <code>DISABLE_DEBUG</code> ao processo de build.</li>\n<li>BUILD: Reorganizadas as build flags no platformio.ini.</li>\n</ul>\n"
    },
    {
      "version": "v2026.7.1",
      "name": "v2026.7.1",
      "datetime": "2026-07-01T20:22:41Z",
      "url": "https://github.com/Meshcore-Portugal/lusofw/releases/tag/v2026.7.1",
      "prerelease": false,
      "notes": "Based on MeshCore v1.16.0\r\nmain@e8d3c53ba1ea863937081cd0caad759b832f3028\r\n\r\n### Features\r\n\r\n- Added SHTC3 temperature/humidity sensor support (fixed I²C address 0x70) to the environment-sensor manager.\r\n- Added smart adverts: deterministic, collision-resistant flood-advert scheduling over a rolling 23h window, with each node's slot derived from its name and public key plus per-cycle jitter. (@DiogoLinoPT)\r\n- Disabled the per-hop probabilistic forwarding filter (`P(h)=0.308^(hops-1)`) that randomly dropped flood adverts as they propagated.\r\n- Implemented hardware Channel Activity Detection (CAD) listen-before-talk before each transmit, enabled by default (Cherry-picked upstream PR #1727).\r\n- Loop detection is now enabled by default at `LOOP_DETECT_MINIMAL` sensitivity (previously off).\r\n- Outbound packets are now expired and dropped once they exceed the maximum queue age (`MAX_PACKET_QUEUE_AGE_MS`).\r\n- Reverted the default airtime (duty-cycle) factor to 1.0, i.e. a 50% duty cycle, rolling back the prior setting that caused internationalization-related issues.\r\n- The repeater home screen now surfaces battery charge as an intuitive percentage, so remaining power can be read at a glance.\r\n- The repeater path-hash mode now defaults to 2 bytes (`path_hash_mode=1`), up from 1 byte.\r\n\r\n### Client\r\n\r\n- Implemented hardware Channel Activity Detection (CAD) listen-before-talk before each transmit, enabled by default (Cherry-picked upstream PR #1727).\r\n- Rendered the T114 boot logo as a true-color RGB image at its native panel resolution (192×54).\r\n- Shrunk the T114 battery indicator icon to 16×8 logical pixels.\r\n- Switched the T114 ST7789 font to DejaVu Sans UI.\r\n- The client path-hash mode now defaults to 2 bytes (`path_hash_mode=1`), up from 1 byte.\r\n\r\n### Security\r\n\r\n- Fixed network time replay vulnerability; reject time-source timestamps not newer than the last accepted one.\r\n- Enforce initial sync (forward-only) vs maintenance sync (±60s), replacing the symmetric ±30s logic that allowed backward clock moves.\r\n\r\n### Improvements\r\n\r\n- Updated MeshCore website links and logo placement across the UI and splash screens.\r\n\r\n### KTLO\r\n\r\n- Added `--upload ` argument to `build.sh` to compile and upload firmware in a single command.\r\n- Increased the GitHub Actions parallel job limit and updated the PlatformIO dependencies.\r\n- Removed the `ENABLE_CONSENSUS_TIME_SYNC` feature from the codebase.",
      "notesHtml": "<p>Based on MeshCore v1.16.0\nmain@e8d3c53ba1ea863937081cd0caad759b832f3028</p>\n<h3>Features</h3>\n<ul>\n<li>Added SHTC3 temperature/humidity sensor support (fixed I²C address 0x70) to the environment-sensor manager.</li>\n<li>Added smart adverts: deterministic, collision-resistant flood-advert scheduling over a rolling 23h window, with each node's slot derived from its name and public key plus per-cycle jitter. (@DiogoLinoPT)</li>\n<li>Disabled the per-hop probabilistic forwarding filter (<code>P(h)=0.308^(hops-1)</code>) that randomly dropped flood adverts as they propagated.</li>\n<li>Implemented hardware Channel Activity Detection (CAD) listen-before-talk before each transmit, enabled by default (Cherry-picked upstream PR #1727).</li>\n<li>Loop detection is now enabled by default at <code>LOOP_DETECT_MINIMAL</code> sensitivity (previously off).</li>\n<li>Outbound packets are now expired and dropped once they exceed the maximum queue age (<code>MAX_PACKET_QUEUE_AGE_MS</code>).</li>\n<li>Reverted the default airtime (duty-cycle) factor to 1.0, i.e. a 50% duty cycle, rolling back the prior setting that caused internationalization-related issues.</li>\n<li>The repeater home screen now surfaces battery charge as an intuitive percentage, so remaining power can be read at a glance.</li>\n<li>The repeater path-hash mode now defaults to 2 bytes (<code>path_hash_mode=1</code>), up from 1 byte.</li>\n</ul>\n<h3>Client</h3>\n<ul>\n<li>Implemented hardware Channel Activity Detection (CAD) listen-before-talk before each transmit, enabled by default (Cherry-picked upstream PR #1727).</li>\n<li>Rendered the T114 boot logo as a true-color RGB image at its native panel resolution (192×54).</li>\n<li>Shrunk the T114 battery indicator icon to 16×8 logical pixels.</li>\n<li>Switched the T114 ST7789 font to DejaVu Sans UI.</li>\n<li>The client path-hash mode now defaults to 2 bytes (<code>path_hash_mode=1</code>), up from 1 byte.</li>\n</ul>\n<h3>Security</h3>\n<ul>\n<li>Fixed network time replay vulnerability; reject time-source timestamps not newer than the last accepted one.</li>\n<li>Enforce initial sync (forward-only) vs maintenance sync (±60s), replacing the symmetric ±30s logic that allowed backward clock moves.</li>\n</ul>\n<h3>Improvements</h3>\n<ul>\n<li>Updated MeshCore website links and logo placement across the UI and splash screens.</li>\n</ul>\n<h3>KTLO</h3>\n<ul>\n<li>Added <code>--upload </code> argument to <code>build.sh</code> to compile and upload firmware in a single command.</li>\n<li>Increased the GitHub Actions parallel job limit and updated the PlatformIO dependencies.</li>\n<li>Removed the <code>ENABLE_CONSENSUS_TIME_SYNC</code> feature from the codebase.</li>\n</ul>\n"
    },
    {
      "version": "v2026.6.1-rc4-b5683eb",
      "name": "v2026.6.1-rc4-b5683eb",
      "datetime": "2026-06-28T22:28:44Z",
      "url": "https://github.com/Meshcore-Portugal/lusofw/releases/tag/v2026.6.1-rc4-b5683eb",
      "prerelease": true,
      "notes": "Automated dev prerelease of dev@b5683eb for v2026.6.1-rc4.\n\n\nBased on MeshCore v1.16.0\nmain@e8d3c53ba1ea863937081cd0caad759b832f3028\n\n### Features\n\n- Added SHTC3 temperature/humidity sensor support (fixed I²C address 0x70) to the environment-sensor manager, exposed via the `ENV_INCLUDE_SHTC3` build flag and wired into the RAK4631 and RAK3112 variant configs with the matching Adafruit library dependency.\n- Outbound packets are now expired and dropped once they exceed the maximum queue age (`MAX_PACKET_QUEUE_AGE_MS`), freeing pool slots before head-of-line blocking and clearing dedup state so a later copy gets another chance instead of delivering stale or duplicate traffic.\n- Loop detection is now enabled by default at `LOOP_DETECT_MINIMAL` sensitivity (previously off). It drops packets whose flood path repeats a node hash, suppressing retransmission storms while keeping the check cheap enough for the lowest sensitivity tier.\n- Reverted the default airtime (duty-cycle) factor to 1.0, i.e. a 50% duty cycle, rolling back the prior setting that caused internationalization-related issues. The factor maps to a duty cycle of `100/(factor+1)%` over the rolling one-hour window.\n- The repeater path-hash mode now defaults to 2 bytes (`path_hash_mode=1`), up from 1 byte.\n- Disabled the per-hop probabilistic forwarding filter (`P(h)=0.308^(hops-1)`) that randomly dropped flood adverts as they propagated.\n- The repeater home screen now surfaces battery charge as an intuitive percentage, so remaining power can be read at a glance.\n- Implemented hardware Channel Activity Detection (CAD) listen-before-talk before each transmit, enabled by default. The radio samples the channel and defers TX while busy, with bounded retry and a CAD-timeout error flag if activity persists past the maximum duration. (Cherry-picked upstream PR #1727).\n- Added smart adverts: deterministic, collision-resistant flood-advert scheduling over a rolling 23h window, with each node's slot derived from its name and public key plus per-cycle jitter.\n\n### Client\n\n- Rendered the T114 boot logo as a true-color RGB image at its native panel resolution (192×54).\n- Switched the T114 ST7789 font to DejaVu Sans UI.\n- Shrunk the T114 battery indicator icon to 16×8 logical pixels.\n- The path hash mode defaults to 2 bytes.\n\n### Security\n\n- Fixed network time replay vulnerability; reject time-source timestamps not newer than the last accepted one.\n- Enforce initial sync (forward-only) vs maintenance sync (±60s), replacing the symmetric ±30s logic that allowed backward clock moves.\n\n### Improvements\n\n- Updated MeshCore website links and logo placement across the UI and splash screens.\n\n### KTLO\n\n- Added a `build_upload.sh` wrapper to compile and upload firmware in a single command.\n- Increased the GitHub Actions parallel job limit and updated the PlatformIO dependencies.\n- Removed the `ENABLE_CONSENSUS_TIME_SYNC` feature from the codebase.",
      "notesHtml": "<p>Automated dev prerelease of dev@b5683eb for v2026.6.1-rc4.</p>\n<p>Based on MeshCore v1.16.0\nmain@e8d3c53ba1ea863937081cd0caad759b832f3028</p>\n<h3>Features</h3>\n<ul>\n<li>Added SHTC3 temperature/humidity sensor support (fixed I²C address 0x70) to the environment-sensor manager, exposed via the <code>ENV_INCLUDE_SHTC3</code> build flag and wired into the RAK4631 and RAK3112 variant configs with the matching Adafruit library dependency.</li>\n<li>Outbound packets are now expired and dropped once they exceed the maximum queue age (<code>MAX_PACKET_QUEUE_AGE_MS</code>), freeing pool slots before head-of-line blocking and clearing dedup state so a later copy gets another chance instead of delivering stale or duplicate traffic.</li>\n<li>Loop detection is now enabled by default at <code>LOOP_DETECT_MINIMAL</code> sensitivity (previously off). It drops packets whose flood path repeats a node hash, suppressing retransmission storms while keeping the check cheap enough for the lowest sensitivity tier.</li>\n<li>Reverted the default airtime (duty-cycle) factor to 1.0, i.e. a 50% duty cycle, rolling back the prior setting that caused internationalization-related issues. The factor maps to a duty cycle of <code>100/(factor+1)%</code> over the rolling one-hour window.</li>\n<li>The repeater path-hash mode now defaults to 2 bytes (<code>path_hash_mode=1</code>), up from 1 byte.</li>\n<li>Disabled the per-hop probabilistic forwarding filter (<code>P(h)=0.308^(hops-1)</code>) that randomly dropped flood adverts as they propagated.</li>\n<li>The repeater home screen now surfaces battery charge as an intuitive percentage, so remaining power can be read at a glance.</li>\n<li>Implemented hardware Channel Activity Detection (CAD) listen-before-talk before each transmit, enabled by default. The radio samples the channel and defers TX while busy, with bounded retry and a CAD-timeout error flag if activity persists past the maximum duration. (Cherry-picked upstream PR #1727).</li>\n<li>Added smart adverts: deterministic, collision-resistant flood-advert scheduling over a rolling 23h window, with each node's slot derived from its name and public key plus per-cycle jitter.</li>\n</ul>\n<h3>Client</h3>\n<ul>\n<li>Rendered the T114 boot logo as a true-color RGB image at its native panel resolution (192×54).</li>\n<li>Switched the T114 ST7789 font to DejaVu Sans UI.</li>\n<li>Shrunk the T114 battery indicator icon to 16×8 logical pixels.</li>\n<li>The path hash mode defaults to 2 bytes.</li>\n</ul>\n<h3>Security</h3>\n<ul>\n<li>Fixed network time replay vulnerability; reject time-source timestamps not newer than the last accepted one.</li>\n<li>Enforce initial sync (forward-only) vs maintenance sync (±60s), replacing the symmetric ±30s logic that allowed backward clock moves.</li>\n</ul>\n<h3>Improvements</h3>\n<ul>\n<li>Updated MeshCore website links and logo placement across the UI and splash screens.</li>\n</ul>\n<h3>KTLO</h3>\n<ul>\n<li>Added a <code>build_upload.sh</code> wrapper to compile and upload firmware in a single command.</li>\n<li>Increased the GitHub Actions parallel job limit and updated the PlatformIO dependencies.</li>\n<li>Removed the <code>ENABLE_CONSENSUS_TIME_SYNC</code> feature from the codebase.</li>\n</ul>\n"
    },
    {
      "version": "v2026.6.1-rc3-851d8ce",
      "name": "v2026.6.1-rc3-851d8ce",
      "datetime": "2026-06-27T23:31:38Z",
      "url": "https://github.com/Meshcore-Portugal/lusofw/releases/tag/v2026.6.1-rc3-851d8ce",
      "prerelease": true,
      "notes": "Automated dev prerelease of dev@851d8ce for v2026.6.1-rc3.\n\n\nBased on MeshCore v1.16.0\nmain@e8d3c53ba1ea863937081cd0caad759b832f3028\n\n### Features\n\n- Added SHTC3 sensor support and updated the PlatformIO build flags.\n- Dropped stale packets from the TX queue to prevent late or duplicate delivery.\n- Enabled loop detection at the minimum sensitivity setting.\n- Reverted the airtime factor to 50% to address issues related to internationalization.\n- Set the repeater advert path hash size to 2 bytes.\n- Disabled probabilistic reduction for adverts.\n- Added battery percentage to the repeater home screen.\n\n### Client\n\n- Rendered the T114 boot logo as a true-color RGB image at its native panel resolution (192×54).\n- Switched the T114 ST7789 font to DejaVu Sans UI.\n- Shrunk the T114 battery indicator icon to 16×8 logical pixels.\n- The path hash mode defaults to 2 bytes.\n\n### Security\n\n- Fixed network time replay vulnerability; reject time-source timestamps not newer than the last accepted one.\n- Enforce initial sync (forward-only) vs maintenance sync (±60s), replacing the symmetric ±30s logic that allowed backward clock moves.\n\n### Improvements\n\n- Updated MeshCore website links and logo placement across the UI and splash screens.\n\n### KTLO\n\n- Added a `build_upload.sh` wrapper to compile and upload firmware in a single command.\n- Increased the GitHub Actions parallel job limit and updated the PlatformIO dependencies.\n- Removed the `ENABLE_CONSENSUS_TIME_SYNC` feature from the codebase.",
      "notesHtml": "<p>Automated dev prerelease of dev@851d8ce for v2026.6.1-rc3.</p>\n<p>Based on MeshCore v1.16.0\nmain@e8d3c53ba1ea863937081cd0caad759b832f3028</p>\n<h3>Features</h3>\n<ul>\n<li>Added SHTC3 sensor support and updated the PlatformIO build flags.</li>\n<li>Dropped stale packets from the TX queue to prevent late or duplicate delivery.</li>\n<li>Enabled loop detection at the minimum sensitivity setting.</li>\n<li>Reverted the airtime factor to 50% to address issues related to internationalization.</li>\n<li>Set the repeater advert path hash size to 2 bytes.</li>\n<li>Disabled probabilistic reduction for adverts.</li>\n<li>Added battery percentage to the repeater home screen.</li>\n</ul>\n<h3>Client</h3>\n<ul>\n<li>Rendered the T114 boot logo as a true-color RGB image at its native panel resolution (192×54).</li>\n<li>Switched the T114 ST7789 font to DejaVu Sans UI.</li>\n<li>Shrunk the T114 battery indicator icon to 16×8 logical pixels.</li>\n<li>The path hash mode defaults to 2 bytes.</li>\n</ul>\n<h3>Security</h3>\n<ul>\n<li>Fixed network time replay vulnerability; reject time-source timestamps not newer than the last accepted one.</li>\n<li>Enforce initial sync (forward-only) vs maintenance sync (±60s), replacing the symmetric ±30s logic that allowed backward clock moves.</li>\n</ul>\n<h3>Improvements</h3>\n<ul>\n<li>Updated MeshCore website links and logo placement across the UI and splash screens.</li>\n</ul>\n<h3>KTLO</h3>\n<ul>\n<li>Added a <code>build_upload.sh</code> wrapper to compile and upload firmware in a single command.</li>\n<li>Increased the GitHub Actions parallel job limit and updated the PlatformIO dependencies.</li>\n<li>Removed the <code>ENABLE_CONSENSUS_TIME_SYNC</code> feature from the codebase.</li>\n</ul>\n"
    },
    {
      "version": "v2026.6.1-rc2-7342246",
      "name": "v2026.6.1-rc2-7342246",
      "datetime": "2026-06-27T18:32:39Z",
      "url": "https://github.com/Meshcore-Portugal/lusofw/releases/tag/v2026.6.1-rc2-7342246",
      "prerelease": true,
      "notes": "Automated dev prerelease of dev@7342246 for v2026.6.1-rc2.\n\n\nBased on MeshCore v1.16.0\nmain@e8d3c53ba1ea863937081cd0caad759b832f3028\n\n### Features\n\n- Added SHTC3 sensor support and updated the PlatformIO build flags.\n- Drop stale packets from TX queue to prevent late/duplicate delivery\n- Enabled loop detection sensitivity with the minimum setting.\n- Reverted the airtime factor to 50% to address internationalization-related issues.\n- Set the repeater advert path hash size to 2 bytes.\n\n### Client\n\n- Added a double-tap gesture on the companion radio to mark all unread messages as read (dismiss-only).\n- Rendered the T114 boot logo as a true-color RGB image at the native panel resolution (192×54).\n- Switched the T114 ST7789 font to DejaVu Sans UI.\n- Shrunk the battery indicator icon on the T114 to 16×8 logical pixels.\n\n### Security\n\n- Fixed network time replay vulnerability; reject time-source timestamps not newer than the last accepted one.\n- Enforce initial sync (forward-only) vs maintenance sync (±60s), replacing the symmetric ±30s logic that allowed backward clock moves.\n\n### Improvements\n\n- Updated MeshCore website links and logo placement across the UI and splash screens.\n\n### KTLO\n\n- Added a `build_upload.sh` wrapper to compile and upload firmware in a single command.\n- Increased the GitHub Actions parallel job limit and updated the PlatformIO dependencies.\n- Removed the `ENABLE_CONSENSUS_TIME_SYNC` feature from the codebase.",
      "notesHtml": "<p>Automated dev prerelease of dev@7342246 for v2026.6.1-rc2.</p>\n<p>Based on MeshCore v1.16.0\nmain@e8d3c53ba1ea863937081cd0caad759b832f3028</p>\n<h3>Features</h3>\n<ul>\n<li>Added SHTC3 sensor support and updated the PlatformIO build flags.</li>\n<li>Drop stale packets from TX queue to prevent late/duplicate delivery</li>\n<li>Enabled loop detection sensitivity with the minimum setting.</li>\n<li>Reverted the airtime factor to 50% to address internationalization-related issues.</li>\n<li>Set the repeater advert path hash size to 2 bytes.</li>\n</ul>\n<h3>Client</h3>\n<ul>\n<li>Added a double-tap gesture on the companion radio to mark all unread messages as read (dismiss-only).</li>\n<li>Rendered the T114 boot logo as a true-color RGB image at the native panel resolution (192×54).</li>\n<li>Switched the T114 ST7789 font to DejaVu Sans UI.</li>\n<li>Shrunk the battery indicator icon on the T114 to 16×8 logical pixels.</li>\n</ul>\n<h3>Security</h3>\n<ul>\n<li>Fixed network time replay vulnerability; reject time-source timestamps not newer than the last accepted one.</li>\n<li>Enforce initial sync (forward-only) vs maintenance sync (±60s), replacing the symmetric ±30s logic that allowed backward clock moves.</li>\n</ul>\n<h3>Improvements</h3>\n<ul>\n<li>Updated MeshCore website links and logo placement across the UI and splash screens.</li>\n</ul>\n<h3>KTLO</h3>\n<ul>\n<li>Added a <code>build_upload.sh</code> wrapper to compile and upload firmware in a single command.</li>\n<li>Increased the GitHub Actions parallel job limit and updated the PlatformIO dependencies.</li>\n<li>Removed the <code>ENABLE_CONSENSUS_TIME_SYNC</code> feature from the codebase.</li>\n</ul>\n"
    },
    {
      "version": "v2026.5.2",
      "name": "v2026.5.2",
      "datetime": "2026-05-27T15:22:12Z",
      "url": "https://github.com/Meshcore-Portugal/lusofw/releases/tag/v2026.5.2",
      "prerelease": false,
      "notes": "Based on MeshCore v1.15.0\nmain@ecd0cfc1c133aad93e65257f002151591f6bcfd9\n\n### Features\n\n- Add support for the Seeed P1 Pro bridge type\n- Restrict the “01” advert reduction to repeaters only",
      "notesHtml": "<p>Based on MeshCore v1.15.0\nmain@ecd0cfc1c133aad93e65257f002151591f6bcfd9</p>\n<h3>Features</h3>\n<ul>\n<li>Add support for the Seeed P1 Pro bridge type</li>\n<li>Restrict the “01” advert reduction to repeaters only</li>\n</ul>\n"
    },
    {
      "version": "v2026.5.1",
      "name": "v2026.5.1",
      "datetime": "2026-05-22T16:26:25Z",
      "url": "https://github.com/Meshcore-Portugal/lusofw/releases/tag/v2026.5.1",
      "prerelease": false,
      "notes": "## [v2026.5.1] - 22/05/2026\r\n\r\nBased on MeshCore v1.15.0\r\nmain@ecd0cfc1c133aad93e65257f002151591f6bcfd9\r\n\r\n### Features\r\n\r\n- Update versioning scheme to year.month.release format (e.g. 2026.5.1)\r\n- Include Lora longer preamble #1954 to improve 868MHz performance in Portugal\r\n- Reduce advert rate from 3 to 1 within the permitted broadcast window\r\n- Prevent advert from mobile repeaters identified with (01)\r\n\r\n**Full Changelog**: https://github.com/Meshcore-Portugal/lusofw/compare/v0.0.7...v2026.5.1",
      "notesHtml": "<h2>[v2026.5.1] - 22/05/2026</h2>\n<p>Based on MeshCore v1.15.0\nmain@ecd0cfc1c133aad93e65257f002151591f6bcfd9</p>\n<h3>Features</h3>\n<ul>\n<li>Update versioning scheme to year.month.release format (e.g. 2026.5.1)</li>\n<li>Include Lora longer preamble #1954 to improve 868MHz performance in Portugal</li>\n<li>Reduce advert rate from 3 to 1 within the permitted broadcast window</li>\n<li>Prevent advert from mobile repeaters identified with (01)</li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/Meshcore-Portugal/lusofw/compare/v0.0.7...v2026.5.1\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/Meshcore-Portugal/lusofw/compare/v0.0.7...v2026.5.1</a></p>\n"
    },
    {
      "version": "v0.0.7",
      "name": "v0.0.7",
      "datetime": "2026-04-01T14:51:33Z",
      "url": "https://github.com/Meshcore-Portugal/lusofw/releases/tag/v0.0.7",
      "prerelease": true,
      "notes": "# Changelog\r\n\r\n## [v0.0.7] - 01/04/2026\r\n\r\nBased on MeshCore v1.14.1\r\nmain@467959cc3bfc884e5f3425caac89453a450151b6\r\n\r\n### Features\r\n\r\n- Increase default airtime factor to 9.0 (targets ~10% duty cycle)\r\n- Set default `flood_advert_interval` to 24 hours (instead of disabled)\r\n- Only schedule flood advert timers when `flood_advert_interval` is greater than 0\r\n- Add version-aware defaults migration with persisted firmware version tracking\r\n- Apply only defaults newer than the stored version during migration\r\n- `radio.lna` renamed to `radio.rxgain`, use with `get` and `set`\r\n- Add rs232 support for Xiao NRF52 (serial1, rx(7), tx(6))\r\n\r\n**Full Changelog**: https://github.com/Meshcore-Portugal/lusofw/compare/v0.0.6...v0.0.7",
      "notesHtml": "<h1>Changelog</h1>\n<h2>[v0.0.7] - 01/04/2026</h2>\n<p>Based on MeshCore v1.14.1\nmain@467959cc3bfc884e5f3425caac89453a450151b6</p>\n<h3>Features</h3>\n<ul>\n<li>Increase default airtime factor to 9.0 (targets ~10% duty cycle)</li>\n<li>Set default <code>flood_advert_interval</code> to 24 hours (instead of disabled)</li>\n<li>Only schedule flood advert timers when <code>flood_advert_interval</code> is greater than 0</li>\n<li>Add version-aware defaults migration with persisted firmware version tracking</li>\n<li>Apply only defaults newer than the stored version during migration</li>\n<li><code>radio.lna</code> renamed to <code>radio.rxgain</code>, use with <code>get</code> and <code>set</code></li>\n<li>Add rs232 support for Xiao NRF52 (serial1, rx(7), tx(6))</li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/Meshcore-Portugal/lusofw/compare/v0.0.6...v0.0.7\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/Meshcore-Portugal/lusofw/compare/v0.0.6...v0.0.7</a></p>\n"
    },
    {
      "version": "v0.0.6",
      "name": "v0.0.6",
      "datetime": "2026-03-06T13:49:38Z",
      "url": "https://github.com/Meshcore-Portugal/lusofw/releases/tag/v0.0.6",
      "prerelease": true,
      "notes": "# Changelog\r\n\r\n## [v0.0.6] - 06/03/2026\r\n\r\nBased on MeshCore v1.14.0\r\ndev@3fe2dd7f48733fe77da7549cd24ef28bf07e1e5a\r\n\r\n### Features\r\n\r\n- Disable advert interval by default (was 2 minutes)\r\n- Disable flood advert interval by default (was 12 hours)\r\n- Enable listen before talk with interference threshold of 14\r\n- Refactor buildAdvertData to use prefs when no GPS support is enabled\r\n- Set default loop detection preference to minimal sensitivity\r\n- Add 0x01 to reserved identity hash prefixes\r\n\r\n------\r\n\r\n**Full Changelog**: https://github.com/Meshcore-Portugal/lusofw/compare/v0.0.5...v0.0.6",
      "notesHtml": "<h1>Changelog</h1>\n<h2>[v0.0.6] - 06/03/2026</h2>\n<p>Based on MeshCore v1.14.0\ndev@3fe2dd7f48733fe77da7549cd24ef28bf07e1e5a</p>\n<h3>Features</h3>\n<ul>\n<li>Disable advert interval by default (was 2 minutes)</li>\n<li>Disable flood advert interval by default (was 12 hours)</li>\n<li>Enable listen before talk with interference threshold of 14</li>\n<li>Refactor buildAdvertData to use prefs when no GPS support is enabled</li>\n<li>Set default loop detection preference to minimal sensitivity</li>\n<li>Add 0x01 to reserved identity hash prefixes</li>\n</ul>\n<hr />\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/Meshcore-Portugal/lusofw/compare/v0.0.5...v0.0.6\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/Meshcore-Portugal/lusofw/compare/v0.0.5...v0.0.6</a></p>\n"
    },
    {
      "version": "v0.0.5",
      "name": "v0.0.5",
      "datetime": "2026-03-04T20:03:53Z",
      "url": "https://github.com/Meshcore-Portugal/lusofw/releases/tag/v0.0.5",
      "prerelease": true,
      "notes": "**Full Changelog**: https://github.com/Meshcore-Portugal/lusofw/compare/v0.0.4...v0.0.5",
      "notesHtml": "<p><strong>Full Changelog</strong>: <a href=\"https://github.com/Meshcore-Portugal/lusofw/compare/v0.0.4...v0.0.5\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/Meshcore-Portugal/lusofw/compare/v0.0.4...v0.0.5</a></p>\n"
    },
    {
      "version": "v0.0.4",
      "name": "v0.0.4",
      "datetime": "2026-02-23T12:30:49Z",
      "url": "https://github.com/Meshcore-Portugal/lusofw/releases/tag/v0.0.4",
      "prerelease": true,
      "notes": "**Full Changelog**: https://github.com/Meshcore-Portugal/lusofw/compare/v0.0.3...v0.0.4",
      "notesHtml": "<p><strong>Full Changelog</strong>: <a href=\"https://github.com/Meshcore-Portugal/lusofw/compare/v0.0.3...v0.0.4\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/Meshcore-Portugal/lusofw/compare/v0.0.3...v0.0.4</a></p>\n"
    },
    {
      "version": "v0.0.3",
      "name": "v0.0.3",
      "datetime": "2026-02-21T12:12:33Z",
      "url": "https://github.com/Meshcore-Portugal/lusofw/releases/tag/v0.0.3",
      "prerelease": true,
      "notes": "**Full Changelog**: https://github.com/Meshcore-Portugal/lusofw/compare/v0.0.2...v0.0.3",
      "notesHtml": "<p><strong>Full Changelog</strong>: <a href=\"https://github.com/Meshcore-Portugal/lusofw/compare/v0.0.2...v0.0.3\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/Meshcore-Portugal/lusofw/compare/v0.0.2...v0.0.3</a></p>\n"
    },
    {
      "version": "v0.0.2",
      "name": "v0.0.2",
      "datetime": "2026-02-20T17:26:07Z",
      "url": "https://github.com/Meshcore-Portugal/lusofw/releases/tag/v0.0.2",
      "prerelease": true,
      "notes": "**Full Changelog**: https://github.com/Meshcore-Portugal/lusofw/compare/v0.0.1...v0.0.2",
      "notesHtml": "<p><strong>Full Changelog</strong>: <a href=\"https://github.com/Meshcore-Portugal/lusofw/compare/v0.0.1...v0.0.2\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/Meshcore-Portugal/lusofw/compare/v0.0.1...v0.0.2</a></p>\n"
    },
    {
      "version": "v0.0.1",
      "name": "v0.0.1",
      "datetime": "2026-02-18T11:24:51Z",
      "url": "https://github.com/Meshcore-Portugal/lusofw/releases/tag/v0.0.1",
      "prerelease": true,
      "notes": "**Full Changelog**: https://github.com/Meshcore-Portugal/lusofw/commits/v0.0.1",
      "notesHtml": "<p><strong>Full Changelog</strong>: <a href=\"https://github.com/Meshcore-Portugal/lusofw/commits/v0.0.1\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/Meshcore-Portugal/lusofw/commits/v0.0.1</a></p>\n"
    }
  ],
  "changelogSource": "github",
  "changelogUpdatedAt": "2026-07-20T10:54:51.166Z",
  "deviceFamilies": [
    {
      "id": "heltec-wifi-lora-32",
      "label": "Heltec"
    },
    {
      "id": "lilygo-t-beam",
      "label": "LilyGo T-Beam"
    },
    {
      "id": "lilygo-t3-s3",
      "label": "LilyGo T3 S3"
    },
    {
      "id": "rak-wisblock",
      "label": "RAK"
    },
    {
      "id": "seeed-sensecap-solar",
      "label": "Seeed Studio SenseCAP Solar Node"
    },
    {
      "id": "heltec-t114",
      "label": "Heltec T114"
    },
    {
      "id": "heltec-wsl3",
      "label": "Heltec WSL3"
    },
    {
      "id": "lilygo-lora32-1-1-6",
      "label": "LilyGo LoRa32 V2.1_1.6"
    },
    {
      "id": "seeed-xiao-wio",
      "label": "Xiao nRF52 WIO"
    },
    {
      "id": "seeed-xiao-s3-wio",
      "label": "Xiao S3 WIO"
    }
  ],
  "primaryFamily": {
    "id": "heltec-wifi-lora-32",
    "label": "Heltec"
  },
  "scopeGroup": null
}
