27 lines
1.5 KiB
Markdown
27 lines
1.5 KiB
Markdown
# Android port
|
||
|
||
`Android.mk` builds `libsetprotocol.so` from the same C99 sources used by MCU
|
||
and desktop builds. `setprotocol_jni.c` contains only JNI marshalling; protocol rules
|
||
remain in the core. Add the Kotlin directory as an Android source directory
|
||
and include this `Android.mk` from the application NDK build.
|
||
|
||
The JNI streaming parser returns fixed 15-byte records
|
||
`SEQ | FLAGS | CAN_ID_LE | DLC | DATA[8]`. Dynamic allocation is confined to
|
||
the Android adapter for protocol operations; the portable protocol core remains allocation free.
|
||
|
||
`nativeSpectrum` calls the shared host DSP module `set_spectrum.c` (bounded heap
|
||
workspace, up to 2×16384 doubles). `trends/SpectrumAnalyzer` maps timestamps and
|
||
errors but does not duplicate FFT/filter math. Run it off the UI thread.
|
||
`trends/PlotViewport` is a toolkit-free normalized zoom/pan model.
|
||
|
||
`legacycan/LegacyCanTerminal.kt` contains the two historical CAN_terminal wire
|
||
formats, the complete Projects.ini node/command catalog, and shared codecs for
|
||
register writes and command frames. Android UI code must use this module instead
|
||
of reproducing the Delphi byte rotation or CAN-ID routing rules.
|
||
|
||
`kotlin/ru/setcorp/setprotocol/update/FirmwareCatalog.kt` is a UI-independent
|
||
firmware release client. It reads the optional `firmware.releases` array from
|
||
the shared `update.json`, accepts only HTTPS assets, limits their size and
|
||
returns image bytes only after SHA-256 verification. Applications provide
|
||
their own UI and pass optional HTTP Basic credentials.
|