Firmware responses
Error codes
| Code | Name |
|---|
Unofficial · evidence-led · open source
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
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.
| Layer | Evidence-backed finding | Confidence |
|---|---|---|
| Platform | ARMv7-A hard-float/uClibc on a Rockchip RV1106-family media platform; camera modules target Linux 5.10.160. | Verified / High |
| Control | bilbo combines WebSocket protobuf control, device HTTP, camera, motion, astronomy, persistence, and media services. | High |
| Protocol | Sixteen 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 alignment | All 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 |
| Imaging | IMX662 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 query | Command 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 decompilation | A 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 ports | Static 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 hardware | Read-only inspection confirms an RV1106G EVB1 V10 board, ten eMMC partitions, IMX662 at I2C 0x1a, and OS02K10 at 0x21. | Verified |
| System image | Partitions 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 database | The healthy WCDB/SQLite state confirms default, saved, and current parameter layers. Published results contain only schema, counts, and non-secret settings. | Verified |
| Focus error -14511 | Bilbo logs identify it as StepMotor 3 need reset followed by a failed focus-motor reset. | Focus-stepper error, not plate solving |
| Update integrity | bilbo_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 boundary | Factory tests, direct motor primitives, reset, firmware/MCU update, and dormant USB modes are documented but intentionally not exposed through DwarfAlp. | Verified |
Download recovered protobuf metadata Download alignment summary
Hardware verified
Results from NINA, DWARF storage, application logs, and the decompiled DWARFLAB 3.4.1 workflow.
| Finding | Evidence | DwarfAlp behavior |
|---|---|---|
| Final astronomy image | A 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 completion | The 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 latency | Recursively 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 exposures | The 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 -11514 | The 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 name | Alpaca 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 scope | DWARF 2, DWARF 3, and DWARF Mini use the shared V3 command surface. | The capture and naming corrections are not model-gated. |
| Mini live validation | Two 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 progress | Mini 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 order | Live 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 field | DWARF 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 lookup | APK 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 enum | The 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 image | Daylight 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 disconnect | V3 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 failures | The 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
Generated directly from the DwarfAlp FastAPI routes. These are the endpoints used by NINA and other Alpaca clients.
Device-local · port 8082
App backend · documentation only
| Scope | Method | Path | Operation |
|---|
Binary protocol · protobuf
Registration proves that the app knows a code. It does not prove support on every DWARF model or firmware.
| ID | Command | Direction | Payload evidence |
|---|
Firmware responses
| Code | Name |
|---|
Provisioning transport
Research backlog
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.