Skip to content

Door unlatch controls (Android + iOS) and per-door / trunk status for dashboards - #273

Merged
wpmed92 merged 3 commits into
softwiredtech:mainfrom
ehoeve786:door-controls
Nov 8, 2026
Merged

wpmed92 merged 3 commits into
softwiredtech:mainfrom
ehoeve786:door-controls

Conversation

@ehoeve786

@ehoeve786 ehoeve786 commented Nov 6, 2026 •

Copy link
Copy Markdown
Collaborator

Supersedes #272 (closed), rebased on current main as three commits: controls, door status, frunk. Pairs with softwiredtech/dashkit-firmware#89 (merged).

Controls (Android + iOS): four momentary controls, Unlatch Driver / Passenger / Rear Left / Rear Right Door, sending CMD_DOOR_UNLATCH (0x50) with the door index 0–3. Gesture values 10–13, so they can be bound to multi-finger taps like the other controls. Strings in en/de/hu on both platforms. The firmware replays the VCSEC_requests 0x1F9 closure request the Tesla app uses and refuses it in R/N/D or while moving; older firmware rejects the opcode as unknown.

Door status for dashboards: the firmware forwards VCLEFT_doorStatus 0x102, VCRIGHT_doorStatus 0x103 and VCLEFT_liftgateStatus 0x142. The shared bridge decodes them, plus the frunk latch on VCFRONT_status, into seven CarState fields, exposed to web and Rive dash apps on both platforms:

key type meaning
doorOpenFL, doorOpenFR, doorOpenRL, doorOpenRR 0/1 1 while the latch reports OPENED / OPENING / AJAR / CLOSING; 0 for CLOSED, SNA and fault states
trunkOpen 0/1 rear trunk latch, same rule
trunkPosition degrees powered liftgate angle from mux 1, kept across mux-0 frames, clamped at 0 (closed reads slightly negative)
frunkOpen 0/1 frunk latch from VCFRONT_status mux 0 (already forwarded), same rule; the frunk has no position signal
  • bridge: DOOR_OFFSET = 51 (after the TPMS block), FIELD_COUNT = 58; BridgeCarState carries the same fields for iOS. Only TeslaDashKitMapper is wired; new_gen_juniper.dbc has no definitions for these messages yet.
  • Android: CarState, CanFrameDecoder, Rive dashValues, WebView getters getDoorOpenFL … getTrunkPosition.
  • iOS: CarState (bridge + Codable), Rive dashValues, WebView JSON.
  • dash-apps: README table, web-compose signal catalog (six warning booleans + trunk angle), host getter map, en/hu/de labels.

Verification: host tests tesla_closure_mapper_test (latch mapping, liftgate mux handling, array layout) and tesla_vin_mapper_test pass; the Android debug APK builds. The unlatch request itself was captured and replayed on a 2023 Model Y (see the firmware PR). iOS app not built locally.

🤖 Generated with Claude Code

ehoeve786 and others added 3 commits November 8, 2026 08:03
Four momentary controls on Android and iOS: Unlatch Driver / Passenger /
Rear Left / Rear Right Door. Each sends CMD_DOOR_UNLATCH (0x50) with the
door index 0-3; gesture values 10-13 let them be bound to multi-finger
taps like the other controls. Strings in en/de/hu on both platforms.

The firmware (softwiredtech/dashkit-firmware#89, merged) replays the
VCSEC_requests 0x1F9 closure request the Tesla app uses and refuses it
in R/N/D or while moving; older firmware rejects the opcode as unknown.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…oards

The firmware forwards VCLEFT_doorStatus 0x102, VCRIGHT_doorStatus 0x103
and VCLEFT_liftgateStatus 0x142. The shared bridge decodes them into six
CarState fields, exposed to web and Rive dash apps on both platforms:

- doorOpenFL/FR/RL/RR, trunkOpen: 1 while the latch reports OPENED,
  OPENING, AJAR or CLOSING; 0 for CLOSED, SNA and the fault states.
- trunkPosition: powered liftgate angle in degrees from mux 1, kept
  across mux-0 frames, clamped at 0 (closed reads slightly negative).

bridge: DOOR_OFFSET = 47, FIELD_COUNT = 53; BridgeCarState carries the
fields for iOS. Only TeslaDashKitMapper is wired (new_gen_juniper.dbc
has no definitions for these messages yet).
Android: CarState, CanFrameDecoder, Rive dashValues, WebView getters.
iOS: CarState (bridge + Codable), Rive dashValues, WebView JSON.
dash-apps: README table, web-compose signals (five warning booleans and
the trunk angle), host getter map, en/hu/de labels.

Host test tesla_closure_mapper_test covers latch mapping, liftgate mux
handling and the array layout.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
VCFRONT_status mux 0 (already forwarded for anyDoorOpen) carries the
frunk latch status. Decode it with the same rule as the doors into
frunkOpen (0/1; the frunk has no position signal): CarState slot
DOOR_OFFSET + 6, FIELD_COUNT = 54, carried through the iOS bridge, both
apps, Rive dashValues, the WebView getter / JSON, the web-compose signal
catalog and the README. Host test covers mux 0 only and the array slot.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@wpmed92
wpmed92 merged commit 420d5c1 into softwiredtech:main Nov 8, 2026
2 checks passed
@ehoeve786
ehoeve786 deleted the door-controls branch November 13, 2026 22:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants