Skip to content

Releases: wheregoes/byd-apps

Door Sound 1.3.0 — parked watch window + deep-sleep diagnostics

Choose a tag to compare

@wheregoes wheregoes released this 02 Oct 14:57

Door Sound 1.3.0 — for the "nothing happens when the car is off" reports
(#6, #5).

⚠️ This one upgrade needs an uninstall first. The signing key had to be replaced, so Android
treats 1.3.0 as a different app: uninstall Door Sound 1.2.0, then install this APK. Your selected
sound files and per-event settings are lost and have to be chosen again — sorry. Upgrades after
this one are in place again.
Signing certificate SHA-256: 67397b8ca97a25fa0de930c9c08e0e4a05fcf2b3a0f4e810146dd8ac34a6db32

Why this release exists

Switching the car off does not reboot the head unit — measured on a DiLink 3 unit that reached 72
days of uptime across many drives. The SoC suspends instead. So the service was never being killed by
power-off; what ended was its fixed 10-minute watch window, after which only a pushed CAN callback
could still reach it.

What is new

  • Watch parked — a pill in the tab row, tap to cycle 10 min / 30 min / 60 min / always. It
    sets how long the 10-second lock poll and the wake lock stay alive after the car powers down.
    Default stays 10 minutes: an always-open window keeps the SoC out of suspend and draws from the
    12 V battery. Changing it takes effect immediately.
  • Diagnostics tells the three failure modes apart. elapsedRealtime() counts suspended time and
    uptimeMillis() does not, so a divergence across one poll interval is a suspend and nothing else:
    park watch: 10 min after a power change
    watch: open, 7m12s left
    deep sleep: 3 gaps, longest 41m08s
    autostart screen: present, NOT yet checked for this install
    
    service: STOPPED is a killed service; RUNNING with a stale last poll and a closed window is a
    frozen one; an EVENT: line with no playing … is the hardware path.
  • BYD auto-start button that opens com.byd.appstartmanagement directly, marked amber with
    — check until it has been opened once for the installed version.

Documentation correction worth reading

BYD's auto-start screen is a block list and its switches read backwards: a row shown ON means
auto-start is disabled for that app; OFF means it is allowed. Measured on a DiLink 3 unit:
with the row ON, a background app never received BOOT_COMPLETED at all — receiver registered at
priority 9900, package not stopped, nothing crashed, the broadcast simply never arrived. Both READMEs
previously said to "enable" it. The list is also keyed by the APK directory, so it has to be
re-checked after every install and every upgrade — including this one.

Internals

Window and poll bookkeeping moved from the wall clock to elapsedRealtime(); the wake lock is
re-acquired (always with a timeout) on every poll so a long window cannot outlive a kill;
onStartCommand re-arms the window. New shared com.wheregoes.byd.AutoStart.

Door Sound v1.2.0

Choose a tag to compare

@wheregoes wheregoes released this 16 Sep 15:50

Door Sound v1.2.0

Custom sounds for door, hood, trunk, lock/unlock, alarm and window events.

This release is about the two reports that the sounds work while the app is open and stop once the
car is parked and the app is closed (#4,
#5), and about being able to diagnose that from
the head unit itself.

Fixed

  • Lock and unlock never fired on some vehicles. The service acted only on the pushed
    onAutoSystemStateChanged callback and never re-read the lock state, so a car that reports its
    lock state but does not announce it produced no lock or unlock sound at all — on any model, with
    door events working normally the whole time. Our Cabin app has always polled
    (VehicleStateMonitor.pollState); this app never did. It now re-reads getAutoSystemState() and
    getPowerLevel() every 10 s and feeds the same edge-tracked handler, so the chime arrives within
    10 s on a car that stays quiet, still fires instantly on a car that pushes the event, and cannot
    fire twice.
  • The CPU wake lock was dropped exactly when you park. BODYWORK_POWER_LEVEL_OFF released it,
    which is the moment before you lock the car and walk away — the one event people wanted a sound
    for. Parking now re-arms a bounded 10-minute watch window instead of ending it. The lock is still
    acquired with a timeout and released explicitly when the window closes, so a killed service cannot
    pin the CPU awake.
  • An in-place update left the app silent until someone opened it. BootReceiver now also
    handles MY_PACKAGE_REPLACED, so installing a new APK over the old one restarts the service by
    itself when the master switch is on.
  • All vehicle reads moved onto one serialised I/O thread — getPowerLevel() used to run on the main
    looper — and the lock edge check is now synchronised, because the pushed callback and the poll can
    reach it at the same time.

Added — Diagnostics, for owners with no PC

Every diagnostic we have asked for in these threads (adb logcat, adb shell cat …) assumed a
computer. At least one reporter installs APKs from the head unit with an APK-installer app and owns
no PC, which made all of it unusable. There is now a Diagnostics button in the header, next to
the Enabled switch. A photo of that screen answers the same questions:

Door Sound 1.2.0 (code 3)
android: 29  model: BYD AUTO  hw: qcom
locale: pt_BR
service: RUNNING since 12:45:10
listener: registered
avas: available
lock raw: 2 (locked)
power: 0 (off)
last poll: 12:46:10
master switch: on
last event: Porta dianteira esquerda fechada @ 15:53:56
--- decision log, last 40 lines ---
…

That block is English on every car on purpose, so a screenshot reads the same whatever language the
vehicle is set to; only the screen's title and Refresh button are translated. service: STOPPED or
repeated === Service onCreate START === lines in the log are the answer to "is the head unit
killing it", and a gap with no poll: lines around the time you locked the car is the answer to
"was it alive at all".

Installing

Copy the APK to Third Party Apps 55/ on a USB stick, plug it into the car, password BYD6125F —
or install it with any APK installer on the head unit, or adb install -r door-sound.apk over WiFi.

This one upgrades in place. No uninstall, and your settings are kept. The signing key has been
stable since v1.1.0, so Android accepts it over the top. (Releases before v1.1.0 each used a
regenerated key; if you are still on v1.0.0 you do need to remove it first.)

Signed with v1 + v2 + v3 schemes.

Verified on

A BYD Dolphin, parked with the car off: poll: lock raw=2 power=0 in the log, one bounded
doorsound:service wake lock in dumpsys power, and the Diagnostics screen above read straight
off the head unit. The poll path itself was proven against a vehicle that changes its lock state
without announcing it, which is the case no previous build could handle.

Engine Sound v1.1.0

Choose a tag to compare

@wheregoes wheregoes released this 16 Sep 15:50

Engine Sound v1.1.0

Select AVAS engine sound presets on the exterior speaker (BYD's Boombox).

This release answers a report in #5: changing the
preset plays something for a moment, then the sound "goes back to normal".

Fixed

  • The app claimed the sound was ON after the vehicle had already turned it off. The status line
    was rendered from a cached flag, so a car that stores the preset and then drops
    STATE 0x48F0000A back to 0 — which is exactly what a momentary sound followed by silence looks
    like — still showed a green sound ON. The state register is now re-read after every preset
    write, and the app says "Vehicle turned the engine sound off again — preset N kept" and
    switches the toggle off to match.
  • Turning the sound off read the state register back without waiting for the MCU to answer, so a
    switch-off that worked could report that the vehicle did not confirm it.

Added — the four registers, on screen

The only way per-model differences in this API get established is someone reading the raw values off
their own car, and until now that needed adb. The main screen now carries them:

SIM   0x48F00000 = 2
SRC   0x48F00013 = 1
STATE 0x48F0000A = 0
TYPE  0x48F00010 = 1
write 0x3E300038 = 5 -> read 5

SIM is whether the vehicle has an engine voice simulator (2 = yes), SRC whether a voice source
exists, STATE whether the simulator is currently on, TYPE the preset the MCU is actually
holding. The last line is the most recent write and what the readback returned — a write that the
car ignored is visible here even when everything else looks fine. Tap the panel to re-read all four.

One photo of that panel says more about a vehicle than any description of the symptom can, and it
needs no computer.

Installing

Copy the APK to Third Party Apps 55/ on a USB stick, plug it into the car, password BYD6125F —
or install it with any APK installer on the head unit, or adb install -r engine-sound.apk over
WiFi.

This one upgrades in place. No uninstall, and your preset names are kept. The signing key has
been stable since v1.0.0, so Android accepts it over the top.

Signed with v1 + v2 + v3 schemes.

Still true from v1.0.0

The car accepts any preset number and stores it — verified to 200 on a Dolphin, with only 0
rejected — so the number of presets that produce a distinct sound is not discoverable through this
API. Listen, then long-press a preset to name the ones you can hear.

Cabin v3.1.0

Choose a tag to compare

@wheregoes wheregoes released this 14 Sep 01:38

Cabin v3.1.0 — Outside view

Keeps pets safe: monitors the AC, shows the cabin temperature, keeps the screen on.

New — Outside view

A black-and-white high-contrast display designed to be read from outside the car, through tinted
window film
, at about two metres.

  • Engages by itself when you lock the car, and returns to the normal view when you unlock
  • Measured 21:1 contrast, with the temperature filling ~40% of the screen height
  • sans-serif-black at the heaviest weight available, no gradients or glass behind the text —
    thin fonts and decorative backgrounds are the first things tint film destroys
  • Set it to Auto, Always on, or Off under Settings → Display
  • Touch it to go back to the normal view for a minute

Fixed

  • The AC indicator flapped. Two independent code paths wrote the same flag with no precedence,
    so a 30-second poll periodically overwrote the event-driven value. Climate monitoring is now the
    single authority.
  • Stale climate data was shown as live — a genuine hazard in a pet-safety app. A reading older
    than 120 s is now withdrawn and replaced with "Climate signal lost".
  • The 12V reading overwrote the traction battery percentage. Two unrelated quantities shared one
    field; they are now separate.
  • The screen brightness was never restored. The app captured the brightness mode but not the
    level, leaving the car's display pinned at maximum after you left the app.
  • The reassurance message was capped at 400dp — 31% of the screen width — which is why it rendered
    small. It now scales to fill the space in every language.
  • Vehicle polling moved off the UI thread; wake lock given a timeout and released on power-off;
    the one-minute restarter replaced with a proper periodic job.

Changed

  • versionName now matches the release. The APK published as "Cabin v3.0.0" actually reported
    2.1.2 internally, because the manifest was never bumped.
  • Dropped two permissions the code never used (WRITE_EXTERNAL_STORAGE, BYDAUTO_PM2P5_GET).
  • Interior polish: glass panels, specular highlight on the avatar, elevation and colour tokens
    instead of hardcoded values.

Installing

Copy the APK to Third Party Apps 55/ on a USB stick, plug it into the car, password BYD6125F —
or adb install -r <file>.apk over WiFi.

Upgrading from an older release requires adb uninstall first (or remove the app on the car).
Every previous release was signed with a throwaway key that the build script regenerated each time,
so Android sees them as different apps and refuses to upgrade in place. That is fixed: from this
release on the signing key is stable, and upgrades install over the top keeping your settings.

Signed with v1 + v2 + v3 schemes, certificate SHA-256 7ef5cb43b150…, the same for all four apps.

Door Sound v1.1.0

Choose a tag to compare

@wheregoes wheregoes released this 14 Sep 01:38

Door Sound v1.1.0

Custom sounds for door, hood, trunk, lock/unlock, alarm and window events.

Fixed

  • Lock detection missed most locks (#4). The
    code tested state == 1, but the vehicle reports a three-state machine and a fob lock often lands
    on START_SECURE (2). Now any state at or above SET_SECURE counts as locked, tracked on the
    transition so one physical lock fires exactly one sound.
  • The silent-configuration trap (#5). The
    event log updated on every door event while playback quietly required three separate switches,
    so the app looked configured and working when nothing could ever play. Each card now states in
    amber exactly what is missing — "Will not play: Enabled is off", "no file selected" — and
    choosing a file switches that event on by itself.
  • Music volume is no longer hijacked. Sounds used to save, overwrite and restore the global
    media volume, which left the radio changed if the process died mid-playback. Now uses
    per-player gain with USAGE_ASSISTANCE_SONIFICATION.
  • Diagnostics that actually exist. 21 log calls wrote to /sdcard/Download, which API 29
    denies, so the file was never created. Logs now go to logcat and to
    Android/data/com.wheregoes.doorsound/files/doorsound-log.txt, and record why a sound was
    skipped, not just that an event happened.
  • Wake lock now has a timeout and is released when the car powers off — an untimed lock pinned the
    CPU until reboot if the service was killed.
  • The restarter job was re-arming a one-minute deadline forever; now a proper 15-minute periodic job.
  • Listener registration retries with backoff instead of giving up, so starting at boot no longer
    races the vehicle service and leaves the app permanently deaf.
  • Fixed an Activity leak: the status refresher re-posted itself to a different Handler than the
    one that cancelled it.

Added

  • Hood, trunk, alarm and window-left-open events — the old build filtered doors 1–4 and
    discarded hood (5) and trunk (6) entirely
  • Rebuilt on Cabin's design system: all eight event cards visible at once with no scrolling
    (previously "Lock" was cut off below the fold)
  • Portuguese, Spanish, French and Chinese translations

Installing

Copy the APK to Third Party Apps 55/ on a USB stick, plug it into the car, password BYD6125F —
or adb install -r <file>.apk over WiFi.

Upgrading from an older release requires adb uninstall first (or remove the app on the car).
Every previous release was signed with a throwaway key that the build script regenerated each time,
so Android sees them as different apps and refuses to upgrade in place. That is fixed: from this
release on the signing key is stable, and upgrades install over the top keeping your settings.

Signed with v1 + v2 + v3 schemes, certificate SHA-256 7ef5cb43b150…, the same for all four apps.

BYD Probe v1.0.0

Choose a tag to compare

@wheregoes wheregoes released this 14 Sep 01:38

BYD Probe v1.0.0 — first release

Diagnostic tool. Enumerates BYD's Auto API through reflection and prints what your vehicle exposes —
useful for reporting what works on a model other than a Dolphin.

Never released before; it existed only as source.

What it does

  • Lists every BYD Auto device class and method signature available on your head unit
  • Reads vehicle state (doors, power, lock, battery, climate) and prints raw values
  • Writes its output to logcat under BYD_PROBE and to a file in its own external data directory

Safety

Enumeration is read-only. The three AC actions genuinely change vehicle state, so each is labelled
with a warning and asks for confirmation naming the effect before it runs.

Reflection failures are caught as Throwable, not Exception — a missing BYD class raises
NoClassDefFoundError, which previously aborted the whole probe instead of logging one gap.

If you are reporting a compatibility issue, the output of this app is the most useful thing you can
attach.

Installing

Copy the APK to Third Party Apps 55/ on a USB stick, plug it into the car, password BYD6125F —
or adb install -r <file>.apk over WiFi.

Upgrading from an older release requires adb uninstall first (or remove the app on the car).
Every previous release was signed with a throwaway key that the build script regenerated each time,
so Android sees them as different apps and refuses to upgrade in place. That is fixed: from this
release on the signing key is stable, and upgrades install over the top keeping your settings.

Signed with v1 + v2 + v3 schemes, certificate SHA-256 7ef5cb43b150…, the same for all four apps.

Engine Sound v1.0.0

Choose a tag to compare

@wheregoes wheregoes released this 14 Sep 01:38

Engine Sound v1.0.0 — first release

Selects the AVAS engine-sound preset your car plays through its exterior speaker (BYD's "Boombox").

This app has never been released before. It existed only as source, which is why it could not be
found on the releases page (#5).

What it does

  • Turns the engine-voice simulator on and off, and verifies the vehicle actually accepted it
    rather than assuming the write worked
  • 20 preset chips — tap one directly instead of pressing NEXT ten times
  • Long-press a chip to rename it, so you can label the presets your car really plays
  • Auto-cycle through presets to hear what your vehicle has
  • One status line that always reflects the current vehicle state

Why the honesty matters

The MCU accepts and echoes back any preset number — verified up to 200 on a Dolphin. So the car
cannot be asked how many sounds it has, and any app claiming to detect the count is reporting its
own loop bound. This app offers a fixed range of 20 and lets you name the ones you can hear.

If your vehicle rejects a preset, the status line says so and shows the value the car fell back to.

Fixed in this first release

  • All vehicle I/O serialised onto one thread — concurrent writes used to land out of order and
    make the preset number appear to jump or revert
  • Rapid taps coalesced into a single CAN write, so four taps move exactly four presets
  • A 120 ms settle delay before every readback. The MCU does not answer a read issued immediately
    after a write; without this the app reported "vehicle did not confirm sound ON" on a working car
  • Every Toast removed. The queue ran ~4 s behind and painted stale values over current ones —
    this was the reported "value keeps reverting" bug, and it was never the vehicle
  • Real XML layout with proper touch targets (the UI was built in code with raw pixel sizes, which is
    why the buttons rendered as small squares)
  • Portuguese, Spanish, French and Chinese translations

Installing

Copy the APK to Third Party Apps 55/ on a USB stick, plug it into the car, password BYD6125F —
or adb install -r <file>.apk over WiFi.

Upgrading from an older release requires adb uninstall first (or remove the app on the car).
Every previous release was signed with a throwaway key that the build script regenerated each time,
so Android sees them as different apps and refuses to upgrade in place. That is fixed: from this
release on the signing key is stable, and upgrades install over the top keeping your settings.

Signed with v1 + v2 + v3 schemes, certificate SHA-256 7ef5cb43b150…, the same for all four apps.

Cabin v3.0.0

Choose a tag to compare

@wheregoes wheregoes released this 21 May 06:13

Cabin v3.0.0 — Rebrand

Pet Mode is now Cabin. New name, new icon, same app.

Changes

  • New app name — "Cabin" across launcher, notifications, settings, and exit dialog
  • New launcher icon — Aurora paw from the Cabin design system (replaces old flat vector)
  • All 6 locales updated — English, Português (BR), Português (PT), Español, Français, 中文

Install

adb install pet-mode.apk

After install, re-enable auto-start:
Settings > Apps > Auto-start Management > Cabin

Pet Mode v2.1.2

Choose a tag to compare

@wheregoes wheregoes released this 19 May 22:44

Pet Mode v2.1.2 — Visual Polish

Changes

  • Alert overlap fixed — AC-off (red) and door-open (amber) alerts now stack vertically when both active
  • Avatar disc removed — pet images float directly without the glass circle
  • Bolder temperature — font changed from thin to light weight, size 280→320sp
  • Larger text — reassurance message 56→64sp, sub-text 26→30sp
  • AC status more visible — indicator opacity 45%→70%

Install

adb install pet-mode.apk

Pet Mode v2.1.1

Choose a tag to compare

@wheregoes wheregoes released this 19 May 22:24

Pet Mode v2.1.1 — Bug Fixes & UX Polish

Fixes

  • "Meu dono volta logo" — changed "motorista" (driver) to "dono" (owner) across all 6 locales
  • Timer format — "Ativo por 00h 02min" instead of cryptic "Ativo 0:02"
  • Door status simplified — removed lock/unlock (BYD API can't detect interior lock button), shows door open/closed only
  • Amber door-open warning — floating pill alert when any door is open (yellow, like AC-off is red)
  • Pet name auto-resize — long names shrink to fit instead of overflowing
  • Avatar images larger — reduced padding from 16dp to 6dp inside disc
  • Dark mode settings fixed — all text colors, backgrounds, input fields, segmented control now properly switch in dark mode

Install

adb install pet-mode.apk