Files
dwarf-go/analysis/DEVICE_MODELS.md
Jacquin Antoine 3ec1143d6d Document all DWARF device models and Mini-specific features
The APK supports 6 device models: DWARF_2 (id=1), DWARF_3 (id=2),
DWARF_MINI (id=4), DWARF_4 (id=5), DWARF_DRAGON (id=6).

Key findings from DeviceType.java + CameraFeatureGate.java:
- The DWARF_MINI is the only model with Advanced Settings enabled
- Mini has no NFC, no auto-shutdown, no panorama create
- Mini has identical tele/wide FoV (3.188×1.794°) — likely single sensor
- Normal Track supported on Mini and DWARF_2 only
- Wide Normal Track is DWARF_2 exclusive

The connected device reports DWARF_3 FoV values (2.14×1.2°) despite being
marketed as a DWARF Mini — the Mini likely shares optics with the DWARF_3
and is differentiated by feature gating rather than hardware.

Added analysis/DEVICE_MODELS.md with the full feature matrix.

💘 Generated with Crush

Assisted-by: Crush:glm-5.2
2026-07-12 19:49:45 +02:00

5.2 KiB
Raw Blame History

DWARF Device Models — Feature Matrix

Reverse-engineered from DeviceType.java and CameraFeatureGate.java in DWARFLAB.apk v3.4.0.

The APK knows 6 device models. The DeviceType enum uses WhenMappings to dispatch per-model behavior. Mapping values (used in switch statements):

WhenMappings value DeviceType deviceId
1 DWARF_MINI 4
2 DWARF_2 1
3 DWARF_3 2
4 DWARF_4 5
5 DWARF_DRAGON 6
6 Unknown 0

Feature support by model

Feature MINI DWARF_2 DWARF_3 DWARF_4 DRAGON
isSupportAdvancedSettings
isSupportAutoShutdownSetting
isSupportNfc
isSupportNormalTrack
isSupportPanoramaCreate
isSupportWideNormalTrack

Key DWARF_MINI differences:

  • No NFC, no auto-shutdown setting — the Mini is the stripped-down model.
  • Only model with Advanced Settings enabled (probably lens-defog / cooling).
  • Normal Track supported (single-tap tracking on main camera).
  • No Wide Normal Track (the wide camera cannot track).
  • No panorama create (cannot start a panorama grid scan from the app).

Field of View (degrees)

Tele camera — getTeleFovInfo (precise, used for computations)

Model Horizontal Vertical
DWARF_MINI 3.188 1.794
DWARF_2 2.95 1.66
DWARF_3 2.14 1.2
DWARF_4 2.95 1.66
DWARF_DRAGON 2.95 1.66

Tele camera — getTeleFov (display rounded)

Model Horizontal Vertical
DWARF_MINI 8.0 6.5
DWARF_2 7.4 6.0
DWARF_3 5.37 4.3
DWARF_4 4.8 3.8
DWARF_DRAGON 7.4 6.0

Wide camera — getWideFov

Model Horizontal Vertical
DWARF_MINI 8.0 6.5
DWARF_2 83.43 51.9
DWARF_3 83.43 51.9
DWARF_4 130.0 86.5
DWARF_DRAGON 7.4 6.0

Note: DWARF_MINI has identical tele and wide FoV (8.0×6.5 display, 3.188×1.794 precise) — this strongly suggests the Mini has a single camera sensor (or two identical sensors), unlike the dual-cam design of the DWARF_2/3/4. The DWARF_DRAGON similarly has a narrow wide camera (7.4×6.0).

Live observation vs APK data

The connected device reports via GetDeviceState:

  • Tele: h_fov=2.140, v_fov=1.200, 1920×1080
  • Wide: h_fov=42.650, v_fov=24.450, 1920×1080

This matches DWARF_3 (getTeleFovInfo: 2.14×1.2), not DWARF_MINI (3.188×1.794). The h_fov/v_fov reported by the firmware in tele_camera_state_info reflects the physical sensor FoV at current zoom, which can differ from the app's display values. The wide value (42.65×24.45) is roughly half of DWARF_3's 83.43×51.9, suggesting the live stream is at ~2× digital zoom.

Conclusion: the user reports a DWARF Mini, but the firmware advertises DWARF_3 FoV values. The Mini likely shares optics/sensor with the DWARF_3 and is differentiated by feature gating (NFC, panorama, auto-shutdown) and industrial design rather than optics. Verify the actual device_id reported by BLE (DwarfEcho.model.family/revision) to confirm.

Other per-model data

  • getDeviceNameLength — max characters for the device name (per model).
  • getEqModelUrl — URL to the 3D EQ-alignment helper (assets/www/modules/eq/). "Bilbo" index is used for the next-gen model.
  • getImgHomeConnectedDevice / getImgConnectingDevice / getUnconnectedLottieResId — app illustrations/animations per model.
  • isNorth / getEqHemisphereInstruction — EQ alignment instructions differ by hemisphere (Northern/Southern).

CaptureActivity Mini-specific behavior

At line 8905 of CaptureActivity.java:

boolean z4 = num != null && num.intValue() == DeviceType.DWARF_MINI.getDeviceId();

This flag is checked when starting a Moon GoTo — the Mini (and DWARF_3/4/DRAGON) gets a confirmation dialog that the DWARF_2 does not, because only the DWARF_2 supports the older sun/moon tracking flow without extra confirmation.

Suggested implementation in dwarfctl

  1. Add a DeviceType enum in Go matching the APK's ids (1=DWARF_2, 2=DWARF_3, 4=MINI, 5=DWARF_4, 6=DRAGON).
  2. Read device_id from GetDeviceState (field shooting_mode is NOT it — need to find the actual device-type field, likely from BLE handshake or a dedicated state field).
  3. Gate features client-side: warn when attempting panorama on a Mini, hide auto-shutdown, etc.
  4. Log the reported FoV in health output to help identify the model.