mirror of
https://github.com/meshtastic/Meshtastic-Android.git
synced 2026-09-21 11:15:18 -04:00
NodeRadioTransport runs a meshtastic-node-kmp MeshNode inside the app and speaks the firmware phone API to it over PhoneApiSession, so every screen works on top of the phone's own node with no radio in the path: BLE advertisements and mesh-peer GATT to other phones and BLE-mesh radios, and LoRa through a CH341 stick on the USB-C port. Config writes land in the node's AdminService and persist; a lora write rebuilds the bearer the way a radio reboots for one. TX power is capped at 10 dBm for a bus-powered stick. Offered as "This device as a mesh node" behind the Demo Mode gate, address prefix 'p'. BLUETOOTH_ADVERTISE joins the manifest and the runtime set, since the node is a peripheral and an advertiser. Demo branch for VCF Midwest: depends on node-kmp from ~/.m2 (-PuseMavenLocal=1, 0.1.0-pb2.8.0.35-g3b3df2a-SNAPSHOT, built from e808296 against this app's protobufs pin), so it is not mergeable as-is and skips the spec lifecycle on purpose. No foreground service yet; Wi-Fi Aware and UDP not wired in.
:core:model (Meshtastic Domain Models)
Overview
The :core:model module is a Kotlin Multiplatform (KMP) library containing the domain models and data classes used throughout the application and its API. These models are platform-agnostic and designed to be shared across Android, JVM, and future supported platforms.
Multiplatform Support
Models are plain commonMain Kotlin types — @Serializable (kotlinx.serialization) data classes and
@JvmInline value classes — with no Android Parcelable dependency, so they are shared verbatim
across Android, JVM, and iOS.
Key Models
DataPacket: Represents a mesh packet (text, telemetry, etc.).Node: Contains detailed information about a node (position, SNR, battery, etc.).NodeAddress/ContactKey: Type-safe node addressing (Broadcast/Local/ByNum/ById) and contact-key parsing, replacing stringly-typed"^all"/"!hex"handling.DeviceHardware: Represents supported Meshtastic hardware devices and their capabilities.Channel: Represents a mesh channel configuration.
Usage
This module is a core dependency of most feature modules.
// In commonMain
implementation(projects.core.model)
Structure
commonMain: Contains the majority of domain models and logic.androidMain: Contains Android-specific utilities and implementations forexpectdeclarations.androidUnitTest: Contains unit tests that require Android-specific features (likeParceltesting via Robolectric).
Dependency Graph
graph TB
:core:model[model]:::kmp-library
:core:model --> :core:common
:core:model --> :core:resources
:core:model -.-> :core:testing
classDef android-application fill:#CAFFBF,stroke:#000,stroke-width:2px,color:#000;
classDef android-application-compose fill:#CAFFBF,stroke:#000,stroke-width:2px,color:#000;
classDef compose-desktop-application fill:#CAFFBF,stroke:#000,stroke-width:2px,color:#000;
classDef android-feature fill:#FFD6A5,stroke:#000,stroke-width:2px,color:#000;
classDef android-library fill:#9BF6FF,stroke:#000,stroke-width:2px,color:#000;
classDef android-library-compose fill:#9BF6FF,stroke:#000,stroke-width:2px,color:#000;
classDef android-test fill:#A0C4FF,stroke:#000,stroke-width:2px,color:#000;
classDef jvm-library fill:#BDB2FF,stroke:#000,stroke-width:2px,color:#000;
classDef kmp-feature fill:#FFD6A5,stroke:#000,stroke-width:2px,color:#000;
classDef kmp-library-compose fill:#FFC1CC,stroke:#000,stroke-width:2px,color:#000;
classDef kmp-library fill:#FFC1CC,stroke:#000,stroke-width:2px,color:#000;
classDef unknown fill:#FFADAD,stroke:#000,stroke-width:2px,color:#000;