Package-level declarations

Types

Link copied to clipboard
interface AdminController

Device configuration and control operations.

Link copied to clipboard
interface AdminEditScope

Configuration operations valid inside an AdminController.editSettings transaction, scoped to a single destination node so callers don't repeat the node number or manage packet IDs. Mirrors the SDK's AdminEdit.

Link copied to clipboard

Interface for handling admin messages from the mesh (config, metadata, session passkey).

Link copied to clipboard
interface AnalyticsPrefs

Reactive interface for analytics-related preferences.

Link copied to clipboard

Reactive interface for App Functions (system AI integration) preferences.

Link copied to clipboard
interface AppPreferences

Consolidated interface for all application preferences.

Link copied to clipboard

Interface for triggering updates to application widgets.

Link copied to clipboard
data class AwaitedSendResult(val status: AwaitedSendStatus, val departureEpochAtDispatch: Long? = null)

Detailed result for an awaited send. departureEpochAtDispatch captures the canonical departure counter when an active transport accepts the outbound bytes for asynchronous delivery. Its presence is also the single source of truth for dispatched, allowing callers to distinguish a later transport departure from one that happened while the packet was still queued. Correlated responses received before dispatch are ignored, so an accepted result always belongs to an admitted transport send.

Link copied to clipboard

Outcome of a packet whose caller waited for transport admission and any required routing result.

Link copied to clipboard

Provides the nRF52 bootloader/OTA quirk catalog resolved by the Meshtastic API (/resource/bootloaderOtaQuirks) and cached locally, seeded from the bundled device_bootloader_ota_quirks.json snapshot so it is never empty on a fresh install or while offline.

Link copied to clipboard
interface CommandSender

Interface for sending commands and packets to the mesh network.

Link copied to clipboard
data class ConnectionIdentity(val sessionGeneration: Long, val address: String, val nodeNum: Int, val deviceId: String?)

Fresh-handshake identity for one connection session. Separate from the general NodeManager.myNodeNum/ NodeManager.myDeviceId StateFlows, which can retain stale cached values across transport switches. address, nodeNum, and deviceId are captured from one selected transport and one MyNodeInfo handshake so consumers never have to combine independently delivered address and identity flows. sessionGeneration is the active transport session generation at handshake time, so the association collector can discard an identity retained from a previous transport instance even if every other field is equal.

Link copied to clipboard
class ConnectionStateHolder(initialState: ConnectionState = ConnectionState.Disconnected, initialEpochs: ConnectionEpochs = ConnectionEpochs()) : ConnectionStateProvider

Owns canonical connection state, epochs, and compatibility projections under one publication lock.

Link copied to clipboard

Read-only provider of the canonical app-level connection state.

Link copied to clipboard

Reactive interface for emoji preferences.

Link copied to clipboard
class DataPair(val name: String, val valueIn: Any?)

A key-value pair for sending properties with analytics events.

Link copied to clipboard
Link copied to clipboard

Provides msh.to device links resolved by the Meshtastic API (/resource/deviceLinks) and cached locally. Vendor and region-filtered marketplace links are shown on the device hardware detail view, plus a full directory.

Link copied to clipboard

Interface for collecting packets during an active discovery scan. The scan engine implements this interface and registers/unregisters with the packet handler to receive packets during dwell windows.

Link copied to clipboard

Registry for discovery packet collectors. The scan engine registers itself when a scan starts and unregisters when it stops. The packet handler checks for an active collector and forwards packets to it.

Link copied to clipboard
interface DiscoveryPrefs

Reactive interface for Local Mesh Discovery scan preferences.

Link copied to clipboard

An expected radio rejection or timeout at an edit-settings transaction boundary.

Link copied to clipboard

Event-firmware display metadata, seeded from the bundled event_firmware.json snapshot.

Link copied to clipboard
interface FileService

Abstracts file system operations (like reading from or writing to URIs) so that ViewModels can remain platform-independent.

Link copied to clipboard
interface FilterPrefs

Reactive interface for message filtering preferences.

Link copied to clipboard
Link copied to clipboard
data class FirmwareUpdateStatus(val isOtaUpdateActive: Boolean = false, val isAwaitingOtaStatus: Boolean = false)
Link copied to clipboard

Interface for dispatching non-packet FromRadio variants to their respective handlers.

Link copied to clipboard

Shared constants for the two-stage mesh handshake protocol.

Link copied to clipboard
interface HistoryManager

Interface for managing store-and-forward history replay requests.

Link copied to clipboard
interface HomoglyphPrefs

Reactive interface for homoglyph encoding preferences.

Link copied to clipboard

Thrown when a command requires the local node identity before that identity is available.

Link copied to clipboard

Android-specific location object typealias for KMP.

expect class Location

Platform-independent location object for KMP.

actual class Location

JVM placeholder location type for repository smoke compilation.

Link copied to clipboard
Link copied to clipboard
interface LocationService

Abstracts high-level location requests (such as one-off current location) that may require platform-specific permission checks or hardware interactions.

Link copied to clipboard

Coordinates lockdown passphrase authentication for firmware-locked devices.

Link copied to clipboard

Encrypted per-device storage for lockdown passphrases.

Link copied to clipboard

The pinned nRF52/RP2040 maintenance-UF2 manifest (factory-erase and OTAFIX bootloader self-update images), seeded from a bundled asset and refreshed from resource/maintenanceUf2. Each image's own sha256 is still checked against its downloaded bytes before any write — see MaintenanceUf2.kt — this repository only caches the manifest that names those images.

Link copied to clipboard
data class MapCameraPosition(val latitude: Double, val longitude: Double, val zoom: Double)
Link copied to clipboard
interface MapConsentPrefs

Reactive interface for map consent.

Link copied to clipboard
interface MapPrefs

Reactive interface for general map preferences.

Link copied to clipboard

Reactive interface for map tile provider settings.

Link copied to clipboard
interface MeshBeaconPrefs

Reactive persistence for received Mesh Beacon invitations. Records are opaque, self-describing strings (see MeshBeaconOffer.encode) so this prefs layer stays free of proto/model types.

Link copied to clipboard
class MeshBeaconRepository(prefs: MeshBeaconPrefs, scope: CoroutineScope)

Holds Mesh Beacon invitations received from other meshes. Beacons are advisory, zero-hop advertisements — not messages or contacts — so they live in the Discovery surface, which presents them for the user to Discover / Join / Dismiss. The list is capped and deduped in memory (the source of truth) and written through to MeshBeaconPrefs so invitations survive an app restart until the user explicitly dismisses them (Apple 014-mesh-beacons FR-015).

Link copied to clipboard

Interface for managing the configuration flow, including local node info and metadata.

Link copied to clipboard

Interface for handling device and module configuration updates.

Link copied to clipboard

Interface for managing the connection lifecycle and status with the mesh radio.

Link copied to clipboard
interface MeshDataHandler

Interface for handling incoming mesh data packets and routing them to the appropriate handlers.

Link copied to clipboard

Interface for managing the local node's location updates and reporting.

Link copied to clipboard
data class MeshLogCleanupPolicy(val loggingEnabled: Boolean, val retentionDays: Int)

Persisted policy used by background mesh-log cleanup.

Link copied to clipboard
interface MeshLogPrefs

Reactive interface for mesh log preferences.

Link copied to clipboard

Repository interface for managing and retrieving logs from the database.

Link copied to clipboard

Decodes MeshLogPrefs.retentionDays, which overloads two sentinels onto the day count: KEEP_FOREVER never prunes and ONE_HOUR keeps only the last hour.

Link copied to clipboard

Interface for processing incoming radio messages and mesh packets.

Link copied to clipboard

Mesh-domain notification builder. Provides high-level operations for the message arrival, waypoint, reaction, new node, low-battery, and client notification flows specific to this app. Implementations are expected to render the platform notification themselves; the generic dispatch primitive is NotificationManager (which posts/cancels opaque Notification records and is not domain-aware).

Link copied to clipboard
interface MeshPrefs

Reactive interface for mesh connection settings.

Link copied to clipboard

Interface for managing background workers for mesh-related tasks.

Link copied to clipboard
interface MessageFilter

Interface for filtering messages based on user-configured filter words.

Link copied to clipboard
interface MessageQueue

Interface for enqueuing background work for transmitting messages. This allows the domain layer to trigger durable transmission without depending on Android-specific WorkManager.

Link copied to clipboard

Messaging operations — sending data packets, reactions, and shared contacts.

Link copied to clipboard
interface MqttManager

Interface for managing MQTT proxy communication.

Link copied to clipboard

Interface for handling neighbor info responses from the mesh.

Link copied to clipboard

Read-only provider of neighbor info response state.

Link copied to clipboard
interface NodeController

Node management operations — favorite, ignore, mute, and remove nodes.

Link copied to clipboard

Interface for managing the in-memory node database and processing received node information.

Link copied to clipboard
interface NodeRepository

Repository interface for managing node-related data.

Link copied to clipboard
class NodeRestartTracker(scope: CoroutineScope)

Tracks a window in which the locally connected node is expected to restart (a config save the firmware applies with a reboot, or an explicit reboot command). While the window is open, an observed transport disconnect is the expected consequence of the restart — the UI presents "restarting" instead of the alarming disconnected state, and the foreground-service notification stays on a connecting presentation.

Link copied to clipboard
data class Notification(val title: String, val message: String, val type: Notification.Type = Type.Info, val category: Notification.Category = Category.Message, val contactKey: String? = null, val isSilent: Boolean = false, val group: String? = null, val id: Int? = null, val deepLinkUri: String? = null)
Link copied to clipboard

Platform-agnostic notification dispatch primitive. Posts opaque Notification records, cancels by id, or wipes all active notifications. Intended as the lowest layer of the notification stack.

Link copied to clipboard

Reactive interface for notification preferences.

Link copied to clipboard
interface PacketHandler

Interface for handling the transmission of packets to the radio and managing the packet queue.

Link copied to clipboard

Thrown when the outbound packet queue refuses admission for an operation.

Link copied to clipboard

Repository interface for managing mesh packets and message history.

Link copied to clipboard
data class PersistedPacket(val id: PersistedPacketId, val packet: DataPacket)

A persisted packet paired with the stable row identity needed by durable background work.

Link copied to clipboard
data class PersistedPacketId(val myNodeNum: Int, val uuid: Long)

Stable identity of one persisted packet row within its owning node database.

Link copied to clipboard
data class PersistedReaction(val id: PersistedReactionId, val reaction: Reaction)

A persisted reaction paired with the exact row identity needed by durable background work.

Link copied to clipboard
data class PersistedReactionId(val myNodeNum: Int, val replyId: Int, val userId: String, val emoji: String)

Stable identity of one persisted reaction row within its owning node database.

Link copied to clipboard

Interface to abstract platform-specific functionalities, primarily for analytics and related services that differ between product flavors.

Link copied to clipboard
interface QueryController

Mesh query operations — position, traceroute, telemetry, user info, and metadata.

Link copied to clipboard
Link copied to clipboard
Link copied to clipboard

Central interface for controlling the radio and mesh network.

Link copied to clipboard

Interface for the low-level radio interface that handles raw byte communication.

Link copied to clipboard
interface RadioPrefs

Reactive interface for radio settings.

Link copied to clipboard

Owns admission and revocation for work bound to one transport session.

Link copied to clipboard
data class RadioSessionContext(val generation: Long, val address: String)

Immutable identity of the transport session that admitted an inbound radio frame.

Link copied to clipboard

A lifecycle lease held by one already-admitted operation for session.

Link copied to clipboard
interface RadioTransport

Interface for hardware transports (BLE, Serial, TCP, etc.) that handles raw byte communication. This is the KMP-compatible replacement for the legacy Android-specific IRadioInterface.

Link copied to clipboard

Narrow callback interface for transport → service communication.

Link copied to clipboard

Creates RadioTransport instances for specific device addresses.

Link copied to clipboard

Writes raw protocol frames to the currently admitted transport.

Link copied to clipboard
data class ReceivedRadioFrame(val payload: ByteString, val session: RadioSessionContext)

An inbound radio payload bound to the transport session that admitted it.

Link copied to clipboard

Encrypted per-node storage for security (public/private) key backups.

Link copied to clipboard

Interface for managing background service state, connection status, and mesh events.

Link copied to clipboard

Write-side interface for service state mutations.

Link copied to clipboard
interface SessionManager

Owns per-node remote-administration session state — the session passkey the firmware embeds in every admin response and the timestamp it was last refreshed at.

Link copied to clipboard
data class StoredPassphrase(val passphrase: String, val boots: Int, val hours: Int, val maxSessionSeconds: Int = 0)

Stored passphrase entry with associated TTL parameters.

Link copied to clipboard
data class StoredSecurityKeys(val publicKeyBase64: String, val privateKeyBase64: String, val timestamp: Long)

A public/private key pair backed up for a single node, plus when it was saved.

Link copied to clipboard

Interface for handling Store & Forward (legacy) and SF++ packets.

Link copied to clipboard
interface TakPrefs

Reactive interface for TAK server settings.

Link copied to clipboard

Interface for handling telemetry packets from the mesh, including battery notifications.

Link copied to clipboard

Interface for handling traceroute responses from the mesh.

Link copied to clipboard

Read-only provider of traceroute response state.

Link copied to clipboard

Repository interface for managing snapshots of traceroute results.

Link copied to clipboard

Machine-readable transport disconnect causes that need service/UI-specific handling.

Link copied to clipboard
interface UiPrefs

Reactive interface for general UI preferences.

Link copied to clipboard
data class XModemFile(val name: String, val data: ByteArray)

A file received via an XModem transfer from the connected device.

Link copied to clipboard
interface XModemManager

Handles the XModem-CRC receive protocol for file transfers from the connected device.

Properties

Link copied to clipboard
const val SERVICE_NOTIFY_ID: Int = 101

Functions

Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
fun ClientNotification.notificationId(): Int

Stable platform-notification identity shared by posting and cancellation paths.

Link copied to clipboard

Builds the device admin command for setting or removing a fixed position.

Link copied to clipboard

Converts the model position to the exact protobuf payload used by fixed-position admin commands.