How drymek/treadmill works
The repository provides BLE treadmill control libraries and applications, centered on the HMS Workout Android app: users create or import workout plans, save them, then run them against a treadmill or simulator. The graph also retains the documented panel apps, Go probe, and workout validator. Some subsystem links rely on README descriptions or SOURCE INDEX references; unsampled implementation details are not inferred as direct calls.
Main entry points: WorkoutService.kt Run service · main.go Go terminal panel · WorkoutRepository.kt Workout library · Transport.kt Kotlin transport
Components 33
HMS Workout
- Workout screens
src/kotlin/workout/src/main/kotlin/com/craftersy/treadmill/workout/ui/EditorScreen.kt - App state
src/kotlin/workout/src/main/kotlin/com/craftersy/treadmill/workout/AppViewModel.kt - Workout library
src/kotlin/workout/src/main/kotlin/com/craftersy/treadmill/workout/data/WorkoutRepository.kt - Workout model
src/kotlin/workout/src/main/kotlin/com/craftersy/treadmill/workout/format/Workout.kt - Workout parser
src/kotlin/workout/src/main/kotlin/com/craftersy/treadmill/workout/format/WorkoutParser.kt - Workout writer
src/kotlin/workout/src/main/kotlin/com/craftersy/treadmill/workout/format/WorkoutWriter.kt - Run service
src/kotlin/workout/src/main/kotlin/com/craftersy/treadmill/workout/run/WorkoutService.kt - Workout runner
src/kotlin/workout/src/main/kotlin/com/craftersy/treadmill/workout/run/WorkoutRunner.kt - BLE scanner
src/kotlin/workout/src/main/kotlin/com/craftersy/treadmill/workout/bluetooth/BleScanner.kt - Workout BLE
src/kotlin/workout/src/main/kotlin/com/craftersy/treadmill/workout/bluetooth/BleTransport.kt
Treadmill Control
- Kotlin client
src/kotlin/lib/src/main/kotlin/com/craftersy/treadmill/client/Client.kt - Kotlin transport
src/kotlin/lib/src/main/kotlin/com/craftersy/treadmill/client/Transport.kt - Reconnect transport
src/kotlin/lib/src/main/kotlin/com/craftersy/treadmill/client/ReconnectingTransport.kt - Kotlin protocol
src/kotlin/lib/src/main/kotlin/com/craftersy/treadmill/protocol/Protocol.kt - Command encoding
src/kotlin/lib/src/main/kotlin/com/craftersy/treadmill/protocol/Command.kt - Status decoding
src/kotlin/lib/src/main/kotlin/com/craftersy/treadmill/protocol/Status.kt - Kotlin simulator
src/kotlin/lib/src/main/kotlin/com/craftersy/treadmill/simulator/Simulator.kt - Go client
src/go/lib/treadmill/client.go - Go Bluetooth
src/go/lib/bluetooth/bluetooth.go - Go protocol
src/go/lib/protocol/protocol.go - Go simulator
src/go/lib/treadmilltest/simulator.go
Virtual Panels
- Go terminal panel
src/go/panel/main.go - Go panel model
src/go/panel/model.go - Android panel
src/kotlin/panel/src/main/kotlin/com/craftersy/treadmill/panel/PanelController.kt - Panel activity
src/kotlin/panel/src/main/kotlin/com/craftersy/treadmill/panel/MainActivity.kt
Go Tools
- Protocol probe
src/go/tools/probe/main.go - Probe commands
src/go/tools/probe/command.go - Workout validator
src/go/tools/workout/main.go - Workout validation
src/go/tools/workout/lib/parse.go
Other components
- Runner
- Workout files
- BLE treadmill
- Console user
Connections 35
- Runner → Workout screens: designs and runs
README.md - Workout screens → App state: edits plans
src/kotlin/workout/src/main/kotlin/com/craftersy/treadmill/workout/ui/EditorScreen.kt - App state → Workout library: manages library
src/kotlin/workout/src/main/kotlin/com/craftersy/treadmill/workout/AppViewModel.kt - App state → Run service: starts runs
src/kotlin/workout/src/main/kotlin/com/craftersy/treadmill/workout/AppViewModel.kt - Workout library → Workout parser: parses imports
src/kotlin/workout/src/main/kotlin/com/craftersy/treadmill/workout/data/WorkoutRepository.kt - Workout library → Workout writer: writes files
src/kotlin/workout/src/main/kotlin/com/craftersy/treadmill/workout/data/WorkoutRepository.kt - Workout library → Workout model: stores model
src/kotlin/workout/src/main/kotlin/com/craftersy/treadmill/workout/data/WorkoutRepository.kt - Workout parser → Workout model: builds model
src/kotlin/workout/src/main/kotlin/com/craftersy/treadmill/workout/format/WorkoutParser.kt - Workout writer → Workout model: serializes model
src/kotlin/workout/src/main/kotlin/com/craftersy/treadmill/workout/format/WorkoutWriter.kt - Workout files → Workout library: imports and exports
README.md - Run service → Workout runner: starts runner
src/kotlin/workout/src/main/kotlin/com/craftersy/treadmill/workout/run/WorkoutService.kt - Workout runner → Kotlin client: controls treadmill
src/kotlin/workout/src/main/kotlin/com/craftersy/treadmill/workout/run/WorkoutRunner.kt - Run service → Workout BLE: selects transport
src/kotlin/workout/src/main/kotlin/com/craftersy/treadmill/workout/run/WorkoutService.kt - Run service → Kotlin simulator: supports simulation
src/kotlin/workout/src/main/kotlin/com/craftersy/treadmill/workout/run/WorkoutService.kt - Run service → BLE scanner: discovers device
- Workout BLE → Kotlin transport: implements transport
src/kotlin/workout/src/main/kotlin/com/craftersy/treadmill/workout/bluetooth/BleTransport.kt - Kotlin client → Kotlin transport: reads and writes
src/kotlin/lib/src/main/kotlin/com/craftersy/treadmill/client/Client.kt - Reconnect transport → Kotlin transport: wraps transport
src/kotlin/lib/src/main/kotlin/com/craftersy/treadmill/client/ReconnectingTransport.kt - Kotlin client → Command encoding: sends commands
src/kotlin/lib/src/main/kotlin/com/craftersy/treadmill/client/Client.kt - Kotlin client → Status decoding: decodes updates
src/kotlin/lib/src/main/kotlin/com/craftersy/treadmill/client/Client.kt - Kotlin simulator → Kotlin transport: implements transport
src/kotlin/lib/src/main/kotlin/com/craftersy/treadmill/simulator/Simulator.kt - Command encoding → Kotlin protocol: encodes frames
- Status decoding → Kotlin protocol: decodes frames
- Kotlin transport → BLE treadmill: exchanges BLE frames
- Console user → Go terminal panel: operates console
README.md - Go terminal panel → Go panel model: runs interface
src/go/panel/main.go - Go terminal panel → Go Bluetooth: connects over BLE
src/go/panel/main.go - Go terminal panel → Go simulator: selects simulator
src/go/panel/main.go - Go terminal panel → Go client: creates client
src/go/panel/main.go - Go client → Go protocol: uses protocol
src/go/lib/treadmill/client.go - Go Bluetooth → BLE treadmill: exchanges BLE data
- Protocol probe → Go Bluetooth: connects to device
src/go/tools/probe/main.go - Protocol probe → Probe commands: sends commands
- Probe commands → Go protocol: encodes commands
src/go/tools/probe/command.go - Workout validator → Workout validation: validates plans
src/go/tools/workout/main.go