Skip to content
Sertel Şekerci edited this page Aug 9, 2026 · 4 revisions

Moto Telemetry App — Voge 900DSX (LX900-A)

An Android telemetry application specifically optimized for the Voge 900DSX (Factory Model Code: LX900-A, also known as DS900X).

The application leverages the fact that this motorcycle shares the BMW F900 architecture and uses the 4M96001 twin-cylinder engine block (manufactured by Loncin), making it compatible with advanced BMW UDS diagnostic protocols.

Test vehicle dash cluster firmware: HW SS621-L8, OS SS621X11-OS-V2.3.2, HMI SS621X11-HMI-V4.7, MCU SW SS621X11-10. Every PID/DID in Confirmed PIDs was verified against this exact dash — a different HW/OS/HMI/MCU version on your own bike may behave differently, especially for signals not yet mapped.

Wiki contents

For screenshots of the dashboard UI, see the README in the main repo.

Key Features

  • Live Engine Data (OBD2): Real-time monitoring of Speed, RPM, Gear, Throttle Position, and Front/Rear Brake Pressure (via UDS/Enhanced PIDs) using a Bluetooth ELM327 adapter.
  • Physical Analysis (IMU): Real-time Lean Angle and G-Force measurement using the phone's internal sensors and the motorcycle's internal IMU, with a one-tap calibration to zero out the phone's mount tilt.
  • Route Tracking (GPS): Visualization of the riding route on a map using Google Maps integration, with a stats overlay (distance, duration, average speed).
  • Data Logging (Room DB): Recording all telemetry data (Speed, RPM, Gear, Lean, GPS, etc.) to a local database at 5Hz (5 times per second), independent of whether an OBD2 adapter is connected.
  • Auto-Start & Ride Continuation: Optionally starts recording automatically the moment the OBD adapter connects (engine on), and keeps a short stop (red light, fuel stop) inside the same ride instead of splitting it into a new session, based on a configurable grace period.
  • Check Engine Diagnostics: Polls MIL status and stored DTCs (OBD Mode 01/03), surfaces a check-engine badge with the fault codes (each with a plain-language explanation), and supports clearing them (Mode 04) behind a confirmation step.
  • Connection Health: Detects a dead Bluetooth link (e.g. the adapter losing power when the ignition is switched off) by counting consecutive write failures, instead of leaving the UI stuck showing "OBD Connected" indefinitely.
  • Bike Info Tab: Live per-sensor readouts (coolant, fuel level/rate, battery voltage, intake/ambient temp, engine load, intake manifold pressure, catalyst temp, engine runtime, ECU odometer, distance since DTC clear, distance with MIL on), a live sensor map showing every known CAN header/DID with a green/red/gray dot for whether it answered correctly on the current connection, a diagnostic PID sweep tool, and a raw CAN bus monitor for reverse-engineering unmapped signals.
  • Diagnostic Sweep Tools: A safe standard-PID support scan (asks the ECU which Mode 01 PIDs it supports), a manufacturer DID sweep across known CAN headers, and an explicitly-gated UDS Extended Diagnostic Session probe (engine-off only, behind a confirmation dialog) for the two still-unmapped brake-related DIDs.
  • Raw CAN Bus Monitor: Passive, read-only capture of the raw CAN bus (ATMA) with selectable duration (8s up to 5 minutes), automatic recovery from ELM327 BUFFER FULL conditions on a busy bus, and a shareable text export — used to reverse-engineer signals that aren't exposed through a normal PID/DID request (e.g. lean angle broadcast by the IMU rather than requested from the ECU).
  • Modern Dashboard: A card-based, cyan-accented dark UI designed with Jetpack Compose, with an adaptive landscape layout and a screen-rotation lock so the display doesn't flip mid-corner.
  • Home Dashboard: Main menu shows your last ride, current fuel level, and an estimated service-interval countdown, plus quick-access shortcuts to Panel/History/Analysis/Bike Info/Settings.
  • Ride Management: Rename or delete recorded sessions from the Analysis tab.
  • Analysis Charts: Per-ride charts for Speed & RPM, Lean Angle, Lateral/Longitudinal G-Force, and Altitude, alongside session stats (max speed, max lean, max G, etc.) and a sparkline per session in the list.
  • Settings Tab: One place for auto-start/ride-continuation, battery-optimization exemption, diagnostic log sharing, and language, instead of scattered across screens.
  • Multi-language: Full English/Turkish UI with in-app language switching.
  • Cloud Backup & Restore: Backup ride data to Google Drive and restore it back, either merging with what's on the phone or replacing it, via a picker listing all available backups by date.
  • Diagnostics Upload: Push the diagnostic log and any CAN monitor/OBD sweep captures to a visible "MotoTelemetryApp Diagnostics" folder in Drive from Settings, so a real-world test can be reviewed remotely without connecting the phone to a computer.

Tech Stack

  • Language: Kotlin
  • UI: Jetpack Compose (Material 3), Vico charts
  • Architecture: MVVM (Service → ViewModel → Compose UI, via StateFlow)
  • Database: Room Database
  • Connectivity: Bluetooth Classic (RFCOMM), OBD-II Mode 01/03/04, and UDS (ISO 14229) Service 0x22 ReadDataByIdentifier
  • Location: Google Play Services Fused Location
  • Navigation: Jetpack Navigation
  • Cloud: Google Drive API

Important Notes

  • Lean Angle: For the most accurate measurement using phone sensors, it is recommended to mount the phone vertically and securely on the motorcycle.
  • UDS Support: Data like brake pressure and motorcycle lean angle are BMW/Voge-specific PIDs. The readability of this data may vary depending on the quality of your ELM327 adapter.
  • CAN sweeps and the security-session probe are engine-off tools. Probing unconfirmed CAN headers or opening a UDS Extended Diagnostic Session changes what the ECU responds to (or its session state) rather than just reading data — only the standard-PID scan and the raw CAN monitor are safe to run with the engine on.

Developed by: Sertel Şekerci

Clone this wiki locally