Package-level declarations
Types
Single-row cache of the nRF52 bootloader/OTA quirk catalog (/resource/bootloaderOtaQuirks), pre-serialized rather than modeled as per-row tables — the only two readers (applyBootloaderQuirk/applySoftDeviceVariant in DeviceHardwareRepositoryImpl) always want the whole envelope and filter it in Kotlin, so a granular schema would add migration surface for no query anyone runs. id is always SINGLETON_ID; this table only ever holds one row.
The connected device's channel set, stored per-device (one row per Room database).
A msh.to device link, cached from the Meshtastic API (/resource/deviceLinks) during the refresh cycle.
Persisted discovery-session states shared by database queries, scan execution, and recovery.
An event-firmware display record, cached from the Meshtastic API (/resource/eventFirmware) during refresh. The nested links/theme/firmware objects are stored pre-serialized rather than via Room type converters — this is the only entity that needs those column types, so shared org.meshtastic.core.database.Converters entries would be unused elsewhere.
Single-row cache of the maintenance-UF2 manifest (/resource/maintenanceUf2), pre-serialized as one JSON column — the only reader (org.meshtastic.core.data.repository.MaintenanceUf2RepositoryImpl) always wants the whole envelope, so a granular per-field schema would add migration surface for no query anyone runs. id is always SINGLETON_ID; this table only ever holds one row.
A durable record, in the canonical (destination) database, that a given source database has already been folded in by org.meshtastic.core.database.DatabaseMerger. Written inside the same merge transaction as the copied rows, so it commits atomically with them. When org.meshtastic.core.database.DatabaseManager.associateDevice re-runs the merge on the next connection, DatabaseMerger.merge finds the marker at the top of its transaction and skips the whole merge — closing the crash window between the merge commit and the datastore alias write, where a retry would otherwise duplicate the fresh-id packet/discovery rows. Markers share the destination DB's lifecycle: if the canonical DB is LRU-evicted and later recreated empty, its markers vanish with the merged data they describe.
FTS5 virtual table that mirrors Packet.messageText for full-text search. Room auto-generates INSERT/UPDATE/DELETE triggers to keep this table in sync with the content entity (Packet).