Repository navigation
Firmware Embedded Java Application Layer
Part of Firmware Reversing. Resolves a question this wiki had open for a while: why do well-documented real RNS-510 features (Bluetooth hands-free, steering-wheel/MFSW integration, climate-control display, parking sensors) never appear anywhere in the native PowerPC C++ symbol/EH-descriptor table, no matter how it's searched?
A direct raw-byte string search across the complete 85.6MB FHDD6.FLI
(not just the 24MB native-code region this wiki otherwise focuses on)
for Bluetooth/climate/parking-sensor keywords immediately surfaced
literal Java class-path strings — class$vdo$most$dev$app$phon...,
Lvdo/dvc/pdc/impl/parrot/CT... — not native symbols. Pulling every
Lvdo/.../Lwdg/...-style Java class signature out of the whole file
found 2,806 distinct class paths, archived in full at
references/java_classpaths_2806.txt.
This is a real, substantial, previously entirely unexplored embedded
Java application layer — not a handful of stray classes.
Confirms the specific features directly:
-
Bluetooth:
SC_bluetooth_audio_EUR,BluetoothCon,BapPhoneListener(ties to the already-documented real BAP MOST-bus protocol — see HOST BSP and Vehicle Coding),HFP_ON/HFP_OFF(real Bluetooth Hands-Free Profile states),handsfreeOnOff,setRingerVolume,m_pairingTimer/m_pairingState.Lvdo/dvc/pdc/impl/parrot/CT...names Parrot — the real French automotive Bluetooth hands-free module supplier — as the actual vendor behind this subsystem. -
Climate control:
wdg.climate.ClimateZone,climateECUServiceableError/Status,notifyClimateECUServiceable,getClimateECUServiceable,solarRoofConfig/solarRoofError. -
Parking sensors:
OPSControlTracker(OPS = Optical Parking System),m_pdcDeffectMode(PDC = Park Distance Control, the real automotive term), matching thevdo/dvc/pdcJava package. - A separate, lower-level SPP (Serial Port Profile) init log
(
"SPP init: no reactor assigned","SSP: Startup V%2.2f") — C-style error-message phrasing, plausibly a native shim underneath the Java Bluetooth stack rather than part of it; not resolved further.
Clustering all 2,806 class paths by their 3rd-level package reveals a complete architecture — this is the real, user-facing application:
| Package | Classes | Role |
|---|---|---|
vdo/rns/app |
370 | The main RNS application itself |
vdo/nav/api |
362 | Navigation API |
vdo/rns/uii |
160 | RNS UI implementation |
vdo/uis/wdg |
105 | UI widgets |
vdo/most/dev |
94 | MOST-bus device layer |
vdo/jam/dev |
93 | "JAM" device layer (plausibly Java Application Manager) |
vdo/nav/cfc |
86 | Navigation "Cfc" classes — see below |
vdo/app/mm, vdo/svc/mm
|
82, 75 | Multimedia |
vdo/nav/ctrl |
64 | Navigation control |
vdo/bsl/util |
62 | "BSL" utility layer |
vdo/mm/cp2, vdo/mex/mm
|
58, 50 | Media/codec |
vdo/nav/tri |
53 | Plausibly trip computer |
vdo/app/mediaplayer |
34 | Media player |
vdo/s2i/pim |
29 | PIM (phone contacts/calendar) — "s2i" plausibly smartphone-to-infotainment sync |
vdo/mm/tv |
28 | TV tuner |
vdo/rns/speech, vdo/speech/asr
|
19, 12 | Speech/voice, incl. real ASR (Automatic Speech Recognition) |
vdo/dvc/pdc |
15 | Park Distance Control |
vdo/mm/dab |
13 | DAB radio |
vdo/svc/fm |
18 | FM radio |
vdo/sf/diag |
19 | Diagnostics |
Also present: a real standard Java class library subset —
java.awt (a full GUI toolkit: Container, GridLayout, event
listeners), javax.speech (Central, EngineCentral,
recognition.Recognizer, synthesis — a real, standard Java Speech
API implementation), javax.media (Codec, Renderer, PlugIn,
DataSource), javax.microedition.pim/io (J2ME-style mobile APIs).
This strongly suggests a CDC/J2ME-class embedded JVM with a fairly
complete AWT + Speech + Media API surface, not a minimal/stripped
runtime.
The app framework has a real session/factory architecture:
vdo/app/fwk includes AppFactoryAbstract, ApplicationInterface,
LaunchableApplication, AppContext, UserContext, and a session
factory with a genuine internal codename, SalsaSessionFactory —
worth remembering as a project/platform codename if it recurs
elsewhere.
A naming-convention link to the native C++ layer: vdo/nav/cfc
(86 Java classes) uses the exact same Cfc prefix this whole
wiki's native C++ work has run into constantly (CfcTypeCoordinate,
CfcMapViewProxy, CfcTypeRoadClassStatistic, dozens more). This is
very likely not a coincidence — plausibly the Java layer has classes
that mirror, wrap, or call into (via JNI or a similar bridge) the
native Cfc* C++ classes this project has been cataloguing all
session, consistent with "Cfc" being a cross-language internal
framework convention (plausibly "Common Framework Classes" or similar),
not something scoped to one language layer. Not independently
confirmed — a concrete lead for a future session.
The native PowerPC C++ code this wiki has spent this whole project
reverse-engineering (dbal, navicore, TMC, weather, SDARS
persistence, the EH/exception-handling mechanism, etc.) is real and
substantial, but it is a lower-level data/service layer, not the
user-facing application itself — the actual UI, navigation display
logic, media playback, Bluetooth/phone handling, voice/speech, and
climate/parking-sensor integration all live in this separate, much
larger (2,806+ classes) embedded Java layer this project has never
examined. This also retroactively explains the "Java-class content"
region found during the 9MB+ wall investigation (see
Firmware Reversing) — that was only one narrow
~4.24MB slice of a much bigger, pervasive Java presence spanning
tens of megabytes across the whole 85.6MB file (class-path string hits
were found from file offset ~1MB out to ~82MB in this session's
search).
Not yet attempted: actually extracting real Java class files (vs.
just their name strings) and decompiling them — this firmware almost
certainly contains standard Java .class/bytecode structures (magic
number CAFEBABE) somewhere in these same regions, which would be
vastly easier to decompile than the native PowerPC code this project
has spent so much effort on (real, mature Java decompilers exist and
work directly on bytecode). A concrete, high-value next step for a
future session: search for the CAFEBABE class-file magic number
directly, and/or check whether 24MB-85.6MB's already-known "VxWorks
kernel" characterization is actually (at least partly) this JVM and
its class data.
import re
with open("FHDD6.FLI", "rb") as f:
data = f.read()
# Real Java class-path signatures (JVM constant-pool UTF8 entries referencing
# class names) live as plain ASCII throughout the whole 85.6MB file, not just
# the 24MB native-code region.
pat = re.compile(rb"L(vdo|wdg)/[A-Za-z0-9_/]{3,80}")
classpaths = {m.group(0) for m in pat.finditer(data)}
# 2,806 distinct paths found this session; see references/java_classpaths_2806.txtRoad network
- eeu.rd
- eeu.il
- eeu.iof
- eeu.typ
- rt / rl / prl
- eeu.si (segment classification)
- eeu.tmc (TMC traffic data)
Places
- eeu.ctr
- cty / cl / ct
- eeu.cny (counties)
- eeu.stt (states/regions)
- eeu.ti (time-info/DST)
- pmc / pmm (postal-code merge)
- pol / pot / pmp (postal-code, empty)
Language / TTS support
- eeu.abc (alphabet)
- eeu.aff (affix)
- eeu.cal (country names)
- eeu.cat (country bboxes)
- prd (road phonetics)
- pct (city phonetics)
- pcl (phoneme cluster list)
- pca (country phonemes)
Map tiles
Container formats
Cross-cutting
- eeu.mod (schema dictionary)
- Road naming join
- Header trailer fields
- Map viewer tool
- Road editor tool
- Unexamined files
- Disc-root build script & subsystems
Firmware reversing