Unofficial · evidence-led · open source

One map for the complete DwarfAlp protocol surface.

Browse the ASCOM Alpaca server, DWARFLAB device HTTP operations, WebSocket commands, response codes, protobuf evidence, and BLE provisioning API.

Static + authorized live-image analysis · Mini 1.1.3.2

Inside the DWARF Linux stack

Machine-readable summary ↗

The analyzed artifact is an application/update ZIP—not a complete flash image. It supplies the central service, updater, camera drivers and tuning, service configuration, MCU payloads, and an RKNN sky model. Bootloader, kernel image, DTB, and the base root filesystem are not present.

LayerEvidence-backed findingConfidence
PlatformARMv7-A hard-float/uClibc on a Rockchip RV1106-family media platform; camera modules target Linux 5.10.160.Verified / High
Controlbilbo combines WebSocket protobuf control, device HTTP, camera, motion, astronomy, persistence, and media services.High
ProtocolSixteen exact protobuf file descriptors were recovered from the ELF. DwarfAlp now has 420 exact uniquely named message matches and no remaining field mismatch among uniquely named shared messages.Verified
Registry alignmentAll 238 canonical command names used from the DWARFLAB 3.4.1 registry and all 137 response/error codes match numerically. Forty-four old names remain only as compatibility aliases.Verified
ImagingIMX662 and OS02K10 12-bit drivers, Rockchip media/AIQ, CFITSIO, OpenCV, astrometry.net/WCS, RKNN sky segmentation, dark calibration, and live stacking are present.Verified
State queryCommand 16405 is the whole-device state query. Its exact schema exposes shooting mode, capture lifecycle, geometry, focus/motion/device state, and calibration result.Verified
Static decompilationA pinned, network-disabled Docker workflow reproduces split-APK analysis, targeted/near-full ARM decompilation, and a whole-program function/import/string/call inventory. Generated vendor code remains unpublished.Verified
Service portsStatic and live evidence proves WebSocket/UDP 9900, device HTTP 8082, raw-JPEG HTTP 8085, JPEG guide-stream TCP 8092, RTSP 554, and a loopback-only service on 3893.Verified
Live Mini hardwareRead-only inspection confirms an RV1106G EVB1 V10 board, ten eMMC partitions, IMX662 at I2C 0x1a, and OS02K10 at 0x21.Verified
System imagePartitions p1-p9 were acquired locally. U-Boot, boot, and recovery are signed Rockchip FIT images; rootfs, OEM, and userdata are ext4. Private state and the user-media partition are not published.Verified; OEM/userdata are live snapshots
Runtime databaseThe healthy WCDB/SQLite state confirms default, saved, and current parameter layers. Published results contain only schema, counts, and non-secret settings.Verified
Focus error -14511Bilbo logs identify it as StepMotor 3 need reset followed by a failed focus-motor reset.Focus-stepper error, not plate solving
Update integritybilbo_upgrade checks manifest-provided MD5 values. The SHA-256/RSA verifier in bilbo serves activation messages and is not evidence of update signing.Verified inner check / Unknown outer authentication
Safety boundaryFactory tests, direct motor primitives, reset, firmware/MCU update, and dormant USB modes are documented but intentionally not exposed through DwarfAlp.Verified
Reverse-engineered documentation. Secret values are redacted, model-wide behavior is not inferred from a Mini-only bundle, and unresolved facts remain explicitly marked rather than guessed.

Download recovered protobuf metadata Download alignment summary

Hardware verified

Latest integration findings

DWARF V3 API

Results from NINA, DWARF storage, application logs, and the decompiled DWARFLAB 3.4.1 workflow.

FindingEvidenceDwarfAlp behavior
Final astronomy imageA requested exposure created one FITS plus stacked.jpg on the DWARF.Prefer FITS. Use FTP, then album media type 4, astroImageDetails.srcDir, POST /album/astro/fitsList, and the port-80 file path.
Raw-frame completionThe requested FITS existed when 15209.current_count reached one; stacked_count arrived about ten seconds later.Stop and retrieve at the requested raw-frame count instead of delaying NINA for stack progress.
FTP scan latencyRecursively scanning 94 astronomy folders took about 26 seconds; timestamp-ordering and limiting the scan took about 1.1 seconds on the connected Mini.Inspect the newest timestamped capture folders first while retaining album/FITS-list fallback.
Repeated exposuresThe first FITS was delivered while 15208 still reported stopping; a second 11005 then returned -11501 busy. State 3 arrived later.Track the full idle/running/stopping/stopped lifecycle, recover it with 16405, and delay the next start until the firmware is reusable.
Start response -11514The delayed CODE_ASTRO_NEED_ADJUST_SHOOT_PARAM response arrived while progress notifications and file creation proved shooting continued.Treat it as a nonfatal warning and keep the retrieval task running.
Target nameAlpaca SlewToCoordinatesAsync carries coordinates but no object name, so the DWARF previously received Custom.Resolve J2000/current-epoch coordinates against NINA's local sky-atlas database; the captured M11 request resolves to M11.
Model scopeDWARF 2, DWARF 3, and DWARF Mini use the shared V3 command surface.The capture and naming corrections are not model-gated.
Mini live validationTwo 1-second, gain-60 Astro captures produced separate 1,846,080-byte FITS files and decoded to 1280x720 16-bit images.Command 16405, exact capture parameters, frame completion, stop, FTP retrieval, FITS decoding, and repeat capture were hardware-verified together.
Long-exposure progressMini traffic emitted 15288 with the exact LongExpPhotoProgress payload and total_time=1.0.Register and decode the event instead of logging it as unknown.
Cross-model exposure orderLive Mini testing proved that 11041 before 16700 can make Mini firmware reject the live write. DWARF 3 can reload its saved 15-second preset during 11005 preparation and reports the active internal namespace through module-15 notification 15264.Use 16700/16701, then 11041, then 16703. On supporting firmware, detect the active capture namespace and reapply the three values there; fall back to the complete quick-set tuple when code -1 is returned. Treat 15288.total_time as authoritative.
Quick-set resolution fieldDWARF 3 uses 0 and Mini uses 1 in the fifth 11041 tuple component; changing it altered the produced image geometry.Preserve that component as the firmware resolution index. Set frame count only with 16703.
Exposure lookupAPK 3.4.1 supplies the complete sparse exposure-code table: code 120 is 1 s, 150 is 10 s, 159 is 30 s, and the table extends through code 174 for 300 s. Supported subsets differ by model and camera.Treat exposure as a lookup code, never as milliseconds or a linear index.
Filter enumThe app defines None=-1, VIS=0, Astro=1, Duo-Band=2, and Dark=3. Dark is sent through calibration-frame capture and is absent from normal filter choices.Keep logical protocol values separate from still-unresolved physical wheel positions.
Uniform dark-looking imageDaylight DWARF 3 FITS samples contained 4095 in every pixel: a fully saturated uniform 12-bit frame, not zero-valued dark data.Log pixel statistics and test under suitable illumination; a viewer may render a constant saturated frame as black because its display range is zero.
Camera disconnectV3 app captures never send legacy command 10001; the live Mini ignored it and emitted no response.Keep Alpaca camera disconnect local-only so it cannot disturb a mount sharing the global V3 task session.
Named firmware failuresThe corrected APK extraction recovered 14 additional error states, including autofocus position, panorama, scheduling, UFO tracking, and global task-manager busy -16600.Include the canonical symbolic error name in driver logs and Alpaca errors instead of exposing only a raw integer.

Public integration surface

ASCOM Alpaca API

Raw OpenAPI 3.1 JSON ↗

Generated directly from the DwarfAlp FastAPI routes. These are the endpoints used by NINA and other Alpaca clients.

Device-local · port 8082

DWARFLAB HTTP API

Raw OpenAPI 3.1 JSON ↗
Use care. Firmware upload, reset, activation, and deletion endpoints are included for completeness—not as an invitation to invoke them.

App backend · documentation only

DWARFLAB cloud HTTP registrations

Not used by DwarfAlp. These account, content, telemetry, and OTA registrations are included only to make the APK inventory complete.
ScopeMethodPathOperation

Binary protocol · protobuf

WebSocket command registry

Loading registry…

Registration proves that the app knows a code. It does not prove support on every DWARF model or firmware.

IDCommandDirectionPayload evidence

Firmware responses

Error codes

CodeName

Provisioning transport

BLE API

Research backlog

Known unknowns

These calls are registered but lack a directly traceable request wrapper or notification payload in the decompiled app. They remain explicitly unresolved instead of being assigned guessed schemas.