No description
Find a file
amir-climy c3f20f674a
All checks were successful
CI / lint-and-test (push) Successful in 6m16s
CD / build-apk (push) Successful in 7m8s
chore: bump version to 0.1.1
2026-08-13 12:16:48 +08:00
.forgejo/workflows ci: create a Forgejo release and attach the APK instead of a run artifact 2026-08-13 12:16:35 +08:00
app chore: bump version to 0.1.1 2026-08-13 12:16:48 +08:00
docs/superpowers feat: ComCore MeterTalk Android app — USB CJT188 meter read/write 2026-08-13 09:57:30 +08:00
gradle/wrapper feat: ComCore MeterTalk Android app — USB CJT188 meter read/write 2026-08-13 09:57:30 +08:00
.gitignore build: wire release signing config from local keystore.properties 2026-08-13 10:03:35 +08:00
build.gradle.kts feat: ComCore MeterTalk Android app — USB CJT188 meter read/write 2026-08-13 09:57:30 +08:00
gradle.properties fix: remove machine-local org.gradle.java.home from gradle.properties 2026-08-13 10:31:53 +08:00
gradlew feat: ComCore MeterTalk Android app — USB CJT188 meter read/write 2026-08-13 09:57:30 +08:00
gradlew.bat feat: ComCore MeterTalk Android app — USB CJT188 meter read/write 2026-08-13 09:57:30 +08:00
README.md ci: add Forgejo Actions workflows for lint/test and APK build 2026-08-13 10:00:21 +08:00
settings.gradle.kts feat: ComCore MeterTalk Android app — USB CJT188 meter read/write 2026-08-13 09:57:30 +08:00

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 to main, runs Android Lint and unit tests.
  • CD (cd.yml) — after CI succeeds on main (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/.