diff --git a/api/core/model/org.meshtastic.core.model/-capabilities/-capabilities.html b/api/core/model/org.meshtastic.core.model/-capabilities/-capabilities.html index 19130271fd..2197356eae 100644 --- a/api/core/model/org.meshtastic.core.model/-capabilities/-capabilities.html +++ b/api/core/model/org.meshtastic.core.model/-capabilities/-capabilities.html @@ -94,7 +94,7 @@
Ability to mute notifications from specific nodes via admin messages.
Ability to mute notifications from specific nodes via admin messages.
Ability to request neighbor information from other nodes. Gated to UNRELEASED until working reliably.
Ability to request neighbor information from other nodes. Gated to UNRELEASED until working reliably.
Ability to send verified shared contacts. Supported since firmware v2.7.12.
Ability to send verified shared contacts. Supported since firmware v2.7.12.
Ability to toggle the 'is_unmessageable' flag in user config. Supported since firmware v2.6.9.
Ability to toggle the 'is_unmessageable' flag in user config. Supported since firmware v2.6.9.
Defines the capabilities and feature support based on the device firmware version.
This class provides a centralized way to check if specific features are supported by the connected node's firmware. Add new features here to ensure consistency across the app.
Note: Properties are calculated once during initialization for efficiency.
Defines the capabilities and feature support based on the device firmware version.
This class provides a centralized way to check if specific features are supported by the connected node's firmware. Add new features here to ensure consistency across the app.
Note: Properties are calculated once during initialization for efficiency.
Support for the Mesh Beacon module (ModuleConfig.MeshBeaconConfig broadcast/listen). The proto is upstream but the firmware module traces to a community fork; gate the config editor to 2.8.0+ so older radios don't show a config they'd silently ignore.
Support for the Mesh Beacon module (ModuleConfig.MeshBeaconConfig broadcast/listen), from the since_firmware its ModuleConfig field declares. The proto is upstream but the firmware module traces to a community fork, so an older radio would silently ignore the config the editor writes.
Support for Status Message module. Supported since firmware v2.7.20.
Support for the Status Message module, from the since_firmware its ModuleConfig field declares.
Support for TAK (ATAK) module configuration. Gated to firmware v2.8.0.
Support for TAK (ATAK) module configuration, from the since_firmware its ModuleConfig field declares.
Whether a config field is worth offering on this firmware, from the version gates its schema declares. Below since_firmware the node ignores the field. At or above deprecated_since it is shown only while isSet, so a value the node still holds stays visible instead of being silently kept.
Whether a config field is worth offering on this firmware, from the version gates its schema declares. Below since_firmware the node ignores the field. At or above deprecated_since it is shown only while isSet, so a value the node still holds stays visible instead of being silently kept.
Support for ESP32 Unified OTA. Supported since firmware v2.7.18.
Support for ESP32 Unified OTA. Supported since firmware v2.7.18.
Whether the node reports NodeInfo.heard_on_current_lora - whether it has heard each node over RF on the LoRa configuration it is using now. Gated to UNRELEASED until the firmware side ships. Older firmware never sends the field, and a proto3 bool defaults to false, so an ungated read marks every node as unheard.
Deliberately outside forceEnableAll: every other capability being wrong in a debug build shows a UI the firmware ignores, but this one being wrong persists false into the node DB and offers real nodes for removal.
Whether the node reports NodeInfo.heard_on_current_lora - whether it has heard each node over RF on the LoRa configuration it is using now. Gated to UNRELEASED until the firmware side ships. Older firmware never sends the field, and a proto3 bool defaults to false, so an ungated read marks every node as unheard.
Deliberately outside forceEnableAll: every other capability being wrong in a debug build shows a UI the firmware ignores, but this one being wrong persists false into the node DB and offers real nodes for removal.
Support for runtime lockdown mode (per-connection passphrase auth). Supported since firmware v2.8.0. Note: lockdown is also hardware-gated (nRF52 only) — the device advertises real support by sending a LockdownStatus, which is the authoritative signal and drives the actual UI state.
Support for runtime lockdown mode (per-connection passphrase auth). Supported since firmware v2.8.0. Note: lockdown is also hardware-gated (nRF52 only) — the device advertises real support by sending a LockdownStatus, which is the authoritative signal and drives the actual UI state.
Support for the LoRa region→preset compatibility map. Supported since firmware v2.8.0. Older firmware never sends the map, so the UI keeps the preset list unconstrained (preset availability is supportsPreset).
Support for the LoRa region→preset compatibility map. Supported since firmware v2.8.0. Older firmware never sends the map, so the UI keeps the preset list unconstrained (preset availability is supportsPreset).
Support for the Mesh Beacon module (ModuleConfig.MeshBeaconConfig broadcast/listen). The proto is upstream but the firmware module traces to a community fork; gate the config editor to 2.8.0+ so older radios don't show a config they'd silently ignore.
Support for the Mesh Beacon module (ModuleConfig.MeshBeaconConfig broadcast/listen), from the since_firmware its ModuleConfig field declares. The proto is upstream but the firmware module traces to a community fork, so an older radio would silently ignore the config the editor writes.
Whether this firmware's preset table contains preset (ChannelOption.minFirmware); older firmware silently falls back to LONG_FAST when sent an unknown preset, so the picker hides it.
Whether this firmware's preset table contains preset (ChannelOption.minFirmware); older firmware silently falls back to LONG_FAST when sent an unknown preset, so the picker hides it.
Support for sharing contact information via QR codes. Supported since firmware v2.6.8.
Support for sharing contact information via QR codes. Supported since firmware v2.6.8.
Whether this firmware's region table contains region. Regions declare the release that introduced them via RegionInfo.minFirmware; older firmware would treat an unknown region code as UNSET, so the picker hides it.
Whether this firmware's region table contains region. Regions declare the release that introduced them via RegionInfo.minFirmware; older firmware would treat an unknown region code as UNSET, so the picker hides it.
Support for location sharing on secondary channels. Supported since firmware v2.6.10.
Support for location sharing on secondary channels. Supported since firmware v2.6.10.
Support for Status Message module. Supported since firmware v2.7.20.
Support for the Status Message module, from the since_firmware its ModuleConfig field declares.
Support for TAK (ATAK) module configuration. Gated to firmware v2.8.0.
The v2.7.19 gate this replaces was set on protobuf availability rather than firmware support: v2.7.x AdminModule::handleSetModuleConfig() has no case for the tak submessage, so the node ACKs the write and reboots without storing anything, and NodeDB::saveToDisk() never sets has_tak. The editor therefore appeared to save and always read back as unspecified (Meshtastic-Android#6430).
The firmware write, persist and remote-admin read paths land in meshtastic/firmware#11216, labelled for 2.8.
Support for TAK (ATAK) module configuration, from the since_firmware its ModuleConfig field declares.
The schema says 2.8.0 because that is where the firmware gained the write, persist and remote-admin read paths (meshtastic/firmware#11216). Before it, v2.7.x AdminModule::handleSetModuleConfig() had no case for the tak submessage: the node ACKed the write and rebooted without storing anything, so the editor appeared to save and always read back as unspecified (Meshtastic-Android#6430).
Support for the v2 TAK port (ATAK_PLUGIN_V2 = 78) with TAKPacketV2 + zstd dictionary compression. Supported since firmware v2.8.0. Firmware v2.7.x and earlier only support the legacy ATAK_PLUGIN port (72) with the original TAKPacket schema (PLI + GeoChat only, no compression), so the bridge falls back to that path for older nodes.
Support for the v2 TAK port (ATAK_PLUGIN_V2 = 78) with TAKPacketV2 + zstd dictionary compression. Supported since firmware v2.8.0. Firmware v2.7.x and earlier only support the legacy ATAK_PLUGIN port (72) with the original TAKPacket schema (PLI + GeoChat only, no compression), so the bridge falls back to that path for older nodes.
Reusable Robolectric helpers for driving Android Bluetooth bonding logic in androidHostTest source sets.
These let a unit test exercise the real AndroidBluetoothRepository.bond() (and any future BLE bonding code) without an emulator and without a production seam. They rely on two Robolectric behaviors (verified against Robolectric 4.16.x):
android.bluetooth.BluetoothAdapter.getRemoteDevice caches the returned BluetoothDevice by address in a static map, so the shadow configured here is the same instance production code reads when it calls getRemoteDevice(mac) internally.
ShadowBluetoothDevice.createBond calls checkForBluetoothConnectPermission() first, so tests must call grantBluetoothConnectPermission or createBond() throws SecurityException instead of returning a value.
Isolation note: because the device cache is static and survives across tests in the same JVM, give each test a distinct MAC so bond-state cannot bleed between tests.
Reusable Robolectric helpers for driving Android Bluetooth bonding logic in androidHostTest source sets.
These let a unit test exercise the real AndroidBluetoothRepository.bond() (and any future BLE bonding code) without an emulator and without a production seam. They rely on two Robolectric behaviors (verified against Robolectric 4.16.x):
android.bluetooth.BluetoothAdapter.getRemoteDevice caches the returned BluetoothDevice by address in a static map, so the shadow configured here is the same instance production code reads when it calls getRemoteDevice(mac) internally.
ShadowBluetoothDevice.createBond calls checkForBluetoothConnectPermission() first, so tests must call grantBluetoothConnectPermission or createBond() throws SecurityException instead of returning a value.
Isolation note: because the device cache is static and survives across tests in the same JVM, give each test a distinct MAC so bond-state cannot bleed between tests.