From ba995d3df2e1c40a0d7a3336a829dd7f609fad88 Mon Sep 17 00:00:00 2001 From: GenericJam Date: Sat, 4 Jul 2026 16:25:59 -0600 Subject: [PATCH] =?UTF-8?q?MOB-30:=20refresh=20mobile=5Fsurface=5Fmatrix.m?= =?UTF-8?q?d=20=E2=80=94=20magnetometer/compass/orientation-lock/BLE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Four rows were stale against shipped code: - Screen orientation lock ❌ → ✅ (Mob.Device.lock_orientation/1 + unlock_orientation/0) - Bluetooth Low Energy ❌ → 🟡 (MobBluetooth.Le 0.3.0 — GATT peripheral role, advertise + notify, iOS + Android; no BLE central yet) - Magnetometer ❌ → ✅ (Mob.Motion :magnetometer — mag + fused heading, 0.7.14, MOB-6) - Compass / heading ❌ → ✅ (fused heading via same path) Also corrected the Bluetooth Classic note (no Hid sub-module in mob_bluetooth; only Hfp/Spp) and clarified its central/host, Android-only scope. Swept the remaining ❌/🟡 rows against current lib/ and the MOB backlog: all other missing capabilities still map to open MOB issues (sensors, NFC, WiFi, brightness, keep-awake, network state, speech-recognition, etc.) — verified still absent from core, no further changes. Co-Authored-By: Claude Opus 4.8 (1M context) --- guides/mobile_surface_matrix.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/guides/mobile_surface_matrix.md b/guides/mobile_surface_matrix.md index 2f628815..f3b36231 100644 --- a/guides/mobile_surface_matrix.md +++ b/guides/mobile_surface_matrix.md @@ -105,7 +105,7 @@ and orthogonal — composition over a fat component library. | Network info (cell vs wifi, type) | ❌ | — | — | Plugin candidate (NetInfo equivalent) | | Network reachability | ❌ | — | — | Plugin candidate | | Screen brightness | ❌ | — | — | Plugin candidate | -| Screen orientation lock | ❌ | — | — | Plugin candidate | +| Screen orientation lock | ✅ | ✓ | ✓ | `Mob.Device.lock_orientation/1` + `unlock_orientation/0` (Android `setRequestedOrientation`; iOS supported-orientations + geometry request) | | Idle timer / screen wake | ❌ | — | — | Plugin candidate | | Exit app | ✅ | n/a | ✓ | Android only; iOS forbids programmatic exit | @@ -142,8 +142,8 @@ and orthogonal — composition over a fat component library. | Capability | Status | iOS | Android | Notes | |--|--|--|--|--| -| Bluetooth Classic | ✅ | n/a | ✓ | `MobBluetooth` plugin (extracted; Hfp / Spp / Hid sub-modules) | -| Bluetooth Low Energy (BLE) | ❌ | — | — | Plugin candidate — common request | +| Bluetooth Classic | ✅ | n/a | ✓ | `MobBluetooth` plugin (extracted; Hfp / Spp sub-modules) — central/host role, Android only | +| Bluetooth Low Energy (BLE) | 🟡 | ✓ | ✓ | `MobBluetooth.Le` (mob_bluetooth 0.3.0) — GATT **peripheral** role only (advertise + notify + receive writes), iOS + Android; BLE central (scan/connect) is a future addition | | NFC | ❌ | — | — | Plugin candidate (Core NFC / Android NFC) | | WiFi info / scanning | ❌ | — | — | Plugin candidate; OS restrictions apply | | USB host | ✅ | n/a | ✓ | `Mob.VendorUsb` — bulk read/write, custom devices | @@ -161,12 +161,12 @@ and orthogonal — composition over a fat component library. |--|--|--|--|--| | Accelerometer | ✅ | ✓ | ✓ | `Mob.Motion.start(:accelerometer, ...)` | | Gyroscope | ✅ | ✓ | ✓ | `Mob.Motion.start(:gyro, ...)` | -| Magnetometer | ❌ | — | — | Plugin candidate; `CMMotionManager` / `Sensor.TYPE_MAGNETIC_FIELD` | +| Magnetometer | ✅ | ✓ | ✓ | `Mob.Motion.start(:magnetometer, ...)` — µT-calibrated `mag` + fused `heading` (0.7.14); keys present only when `:magnetometer` requested | | Barometer | ❌ | — | — | Plugin candidate | | Proximity | ❌ | — | — | Plugin candidate | | Ambient light | ❌ | — | — | Plugin candidate | | Pedometer / step counter | ❌ | — | — | Plugin candidate | -| Compass / heading | ❌ | — | — | Plugin candidate | +| Compass / heading | ✅ | ✓ | ✓ | Fused `heading` (degrees from magnetic north) via `Mob.Motion` `:magnetometer` — same request as above | ## Location