Aura Glasses BLE protocol (Phase 3)
Phone is the hub. Glasses run lightweight firmware (reference: nRF52840) that exposes a custom GATT service and renders UTF-8 JSON GlassCard payloads on the lens UI.
GATT layout
| UUID | Role |
|---|---|
f47ac10b-58cc-4372-a567-0e02b2c3d479 | Aura Glasses service |
f47ac10b-58cc-4372-a567-0e02b2c3d480 | CARD_OUT — phone writes GlassCard JSON |
f47ac10b-58cc-4372-a567-0e02b2c3d481 | EVENT_IN — glasses notify button events |
Device name prefix: AuraGlass (for filtering scans).
GlassCard JSON (phone → glasses)
Same schema as in-app GlassCardCodec (v=1):
{
"v": 1,
"type": "incoming_call",
"title": "Priya",
"body": "Incoming voice call",
"actions": [
{ "id": "decline", "label": "Decline" },
{ "id": "accept", "label": "Accept" }
],
"meta": { "callId": "abc123" }
}
Payload limit: 512 bytes per write on EVT v1 (phone uses GlassCardCodec.encodeForBle).
Thumbnail (Gen 3)
meta key | Lens behavior |
|---|---|
imageRes | Bundled icon id (phone shop demo); firmware maps to asset |
imageUrl | HTTPS product/capture URL; fetch on Wi-Fi coprocessor, else placeholder box |
Reference parser: firmware/aura-glasses-evt/nrf52/src/glass_card_parser.c.
Hardware action (glasses → phone)
{ "v": 1, "kind": "action", "actionId": "accept" }
The app maps actionId to the same handlers as the on-phone HUD (AuraGlassesBridge.handleHudAction).
Android client
AuraGlassesBleHub— connect by MAC, mirror cards, receive events- Settings → Aura Glasses (preview) → EVT hardware (BLE)
- Permissions:
BLUETOOTH_CONNECT,BLUETOOTH_SCAN(Android 12+)
Firmware checklist (EVT)
- Expose service + characteristics above
- On CARD_OUT write: parse JSON, render title/body/actions on display
- On physical button: map to
actionId, notify EVENT_IN - Optional: camera capture → phone via existing upload API (
source=wearable)