No description
- Kotlin 100%
| .forgejo/workflows | ||
| app | ||
| docs/superpowers | ||
| gradle/wrapper | ||
| .gitignore | ||
| build.gradle.kts | ||
| gradle.properties | ||
| gradlew | ||
| gradlew.bat | ||
| README.md | ||
| settings.gradle.kts | ||
MeterTalk
An Android field app for reading and writing CJT188 / DL/T 645 water meters (Comcore EUW300 and compatible devices) over a USB serial connection.
What it does
- Read — connects to a meter over USB, auto-discovers its 7-byte BCD address (with a manual-entry fallback if discovery fails), reads the current measurement/daily report, and decodes it into readable fields.
- Write — reads the meter's current address, writes a new address, and verifies the write by reading it back.
Both screens are backed by a real UsbMeterConnection (via
usb-serial-for-android)
talking CJT188 frames on the wire, with sessions persisted locally through
Room.
Project layout
app/src/main/java/com/comcore/metertalk/
├── protocol/ CJT188 frame codec, address encoding, daily report decoding
├── device/ USB transport (UsbMeterConnection, UsbSerialConnection)
├── domain/ Use cases (ReadMeterUseCase, WriteMeterAddressUseCase, ...)
├── data/ Room database, DAO, session repository
└── ui/ Compose screens + ViewModels for Read and Write
Requirements
- Android Studio (or a JDK 17 toolchain + Android SDK)
- A device with USB host support (
android.hardware.usb.host), minSdk 26 - A CJT188-compatible meter connected over USB serial
Building
./gradlew assembleDebug
Testing
./gradlew test
CI/CD
Forgejo Actions workflows live under .forgejo/workflows/:
- CI (
ci.yml) — on every push/PR tomain, runs Android Lint and unit tests. - CD (
cd.yml) — after CI succeeds onmain(or via manual dispatch), builds a debug APK and uploads it as a workflow artifact.
Docs
Design specs and implementation plans for this app live under
docs/superpowers/.