Roadlink Android
Roadlink is a native Android-based in-vehicle computer system designed for golf carts. It combines real-time GPS navigation, mesh network communication via Meshtastic, vehicle telemetry, and intelligent power management into a cohesive driving experience.
Core Features
GPS and Navigation
- Real-time speed display with multi-stage filtering (eliminating dither, spike rejection, responsive stop detection)
- 16-point cardinal direction display (N, NNE, NE, ENE, etc.)
- Current latitude and longitude coordinates with satellite count
- Horizontal dilution of precision (HDOP) display
- Sunrise and sunset time calculation
- Automatic timezone and daylight saving time handling
- “NO GPS” indicator after 60 seconds without GPS fix
- Date in “Day, Mon DD” format and 12-hour time with AM/PM
Distance and Maintenance Tracking
- Dual odometer system (total distance + resettable trip odometer)
- 1 decimal place precision in miles
- Doppler speed gating to reject GPS errors
- Minimum position change thresholds (2.6 ft with Doppler, 10 ft without)
- Rollover at 100,000 miles
- Service reminder counter with driving hours accumulation
- Tenths-of-hours resolution (6-minute increments)
- Configurable service intervals (default: 100 hours)
- User-resettable counters
- Automatic persistence every 0.5-1.0 miles
Bluetooth Connectivity - Meshtastic Mesh Network
- Automatic BLE scanning for Meshtastic radios
- Full Meshtastic protocol handshake with config download
- 4-byte length-prefix packet framing with MTU-aware splitting
- 30-second heartbeat with 60-second liveness timeout
- Automatic reconnection with exponential backoff
- Device bonding and persistent address storage
- Graceful disconnect handling
- Android 12+ Bluetooth permission support
Meshtastic Messaging
- Send and receive text messages via mesh network
- Broadcast and direct message support
- Preformatted message selection from configurable list
- Custom message composition via on-screen keyboard
- Message display with sender node ID, channel, and timestamp
- AWAKE notification on connection establishment
- 237-byte payload limit enforcement
- Audible notification on message receipt
Vehicle Telemetry
- Bluetooth Classic/BLE connection to GCI ESP-32
- Real-time vehicle telemetry reception (battery, fuel, temperature, headlights)
- 10-second heartbeat with 40-second disconnect timeout
- 6-second pairing window with broadcast discovery
- Independent connection management (separate from Meshtastic)
- Persistent paired device address
- GPS data, at-home status, and daytime status reporting to vehicle system
- Dual simultaneous Bluetooth connections (BLE + Classic/BLE)
Power and Display Management
- Three-state sleep manager:
- STARTUP_GRACE: Waits for GCI connection (configurable, minimum 30 seconds)
- GCI_MODE: Sleep controlled by vehicle system connection status
- STANDALONE_MODE: Backlight dimming only, never deep sleep
- Automatic day/night brightness adjustment based on sunrise/sunset
- Configurable day brightness (0-10 scale)
- Configurable night brightness (0-10 scale)
- Inactivity-based screen dimming with configurable timeout
- Automatic brightness restore on touch or movement
- GPS interval adjustment in standalone mode (120s at home, 8s away)
- Odometer and driving hours persistence before sleep
Home Location and Geofencing
- Set current GPS position as home
- Clear saved home location
- Configurable geofence radius (default: 500 meters)
- Continuous distance calculation from home
- At-home status notification to vehicle system
- GPS validation before setting home
Weather and Entertainment Display
- Current temperature display
- 4-hour forecast with weather glyphs, hourly labels, and precipitation probability
- Last-received timestamp with cache management
- Same-day cache restoration on startup
- Automatic fresh data request when cache is stale
- Venue/event data in scrollable two-column table
- Up to 12 venue/event entries
- Live refresh when new data arrives
- “(stored)” indicator for cached data
Audio Feedback
- Startup tone on app launch
- Message notification tone for new Meshtastic messages
- Alert, confirmation, click, and error tones
- Configurable speaker volume (0-20 range)
- Persistent volume setting
Configuration and Settings
- Display settings (day/night brightness, screen flip, backlight timeout)
- Vehicle settings (temperature offset, service interval, odometer/hour reset)
- Connectivity settings (GCI pairing, Meshtastic enable/disable, radio reboot)
- Meshtastic radio administration (node ID display, reboot commands)
- System information (app version, device MAC, manual reboot, reset preferences)
Persistent Storage
- All settings persisted via Jetpack DataStore
- 2-second write debounce for slider/spinner values
- Weather and venue data with date stamps
- Odometer values (total and trip)
- Driving hours in tenths of hours
- Paired device addresses (both vehicle and Meshtastic)
- Home location coordinates
Technology Stack
Frontend
- Kotlin programming language
- Jetpack Compose with Material 3 design system
- Responsive layouts optimized for in-vehicle displays
Backend & Connectivity
- Android Foreground Services for persistent Bluetooth
- BLE (Bluetooth Low Energy) for Meshtastic and GCI
- Bluetooth Classic for vehicle telemetry
- Full Meshtastic protocol implementation
Data Layer
- Jetpack DataStore for persistent preferences
- Wire protobuf code generation for Meshtastic messages
- StateFlow for reactive data updates
Architecture
- Three-layer architecture (UI, Domain, Data)
- Hilt dependency injection
- Kotlin Coroutines for async operations
- Clean separation of concerns
Testing & Quality
- Property-based correctness tests (jqwik)
- Unit tests (JUnit 5)
- Integration tests
- Mock BLE peripheral testing
- Flow testing with Turbine
- Semantic versioning
Build & DevOps
- Gradle Kotlin DSL
- Version catalog (libs.versions.toml)
- Renovate and Dependabot for dependency updates
- GitHub Actions CI/CD
Key Benefits
- Real-Time Information — Speed, heading, GPS, time, and vehicle data at a glance
- Mesh Communication — Stay connected via Meshtastic even where cellular is unavailable
- Vehicle Integration — Direct connection to vehicle telemetry system
- Intelligent Power Management — Optimized battery usage with smart sleep modes
- Maintenance Tracking — Automatic service reminders based on driving hours
- Configurable — Adjust brightness, timeouts, service intervals, and more
- Reliable — Automatic reconnection, heartbeat monitoring, and error handling
- Production Quality — Comprehensive testing and clean architecture
Use Cases
- Golf Cart Operations — In-vehicle navigation and communication for fleet management
- Outdoor Recreation — Mesh communication for off-grid driving scenarios
- Maintenance Tracking — Automated service reminders for vehicle fleets
- Off-Grid Communication — Meshtastic integration for areas without cellular coverage
- Telemetry Integration — Direct vehicle system integration for custom hardware
Philosophy
Modern vehicles deserve modern technology. Roadlink brings desktop-class features to the mobile platform, delivering a reliable, configurable in-vehicle computer system that just works.
Status
Production-ready Android application with comprehensive testing, clean architecture, and active maintenance.
