u/cheddies

G1 protocol/implementation demystified - mostly.

About three weeks ago I posted here about pulling the demo app apart and building my own companion app. That was meant to be the end of it - "here's what I figured out, maybe it helps someone."

Reader - It did not end there.

The app is now my daily driver. Notifications, navigation, voice notes, Full AI chat, call handling, media display - all running on the glasses full-time. But the thing that's probably more useful to anyone else tinkering is that the documentation has grown into something I didn't plan for.

The protocol reference alone now covers 40+ opcodes with wire formats, payload breakdowns, confidence ratings, and worked examples. Not from the SDK docs (which are... sparse). From HCI snoops, trial and error, and a lot of staring at hex.

Some of the more interesting things that have landed since the last post:

  • QuickNote pipeline - right-hold on the glasses now triggers a full audio capture, LC3 decode, Whisper transcription - quicknotes are no longer black magic impossible out of the official app
    • (My quicknote includes GPT tidy, and auto-categorised local note). The firmware streams encoded audio back after the gesture - it's not a black box. T
    • he LC3 frame size is 200 bytes, the BLE chunks are 190 bytes, and if you slice at chunk boundaries instead of frame boundaries you get clicks. That kind of thing took a while to figure out and is all documented.
  • Telephony call handling - incoming calls show the caller name on the glasses immediately, with a live duration timer when you answer. Driven by TelephonyManager, not notification scraping. Clears automatically when you hang up.
  • Navigation - the 0x0a structured card path is fully working. 108-packet bootstrap, dynamic field injection from Google Maps notifications, live icon rendering, 1-second keepalive. Still better than the official app's navigation, which is a sentence I didn't expect to type.
  • BLE stability - heartbeat at 2s cadence matching the official app, per-leg parallel sends, reconnect with backoff. The glasses stay connected now.

The repo is the same place: https://github.com/Cheddies1/even-g1-companion

The docs/ folder is where most of the value is for other developers. protocol-reference.md is the big one. There are also findings docs for battery/brightness, QuickNote audio, navigation layouts, settings, and tap/gesture mapping.

If you're building something for the G1 - the protocol reference might save you a few evenings of hex staring.

reddit.com
u/cheddies — 4 days ago

So this started as me being mildly annoyed at the state of the G1… and escalated slightly.

I ended up pulling the demo app apart, running HCI snoops, and building my own companion app around what actually works rather than what the docs say should work... and got way further than I thought I would.

A few things that might save others some time:

  • Single taps are basically a dead end. The glasses react, but nothing comes over BLE. Firmware-only.
  • Tilt works great, default dashboard can be over-ridden.
  • Double tap can be used… but only if it’s set to a host-handled action (e.g. transcribe). That’s what triggers a usable event (F5 20).
  • Left tap and hold can be used - mic feed and everything - I have it wired up to OpenAI's API.
  • Right hold (QuickNote) is way more interesting than it looks - it actually streams encoded audio back after release. It’s not just a “save note” black box.
  • Battery / wear state / brightness are all push-based and fairly clean once you decode them.

Once I stopped fighting it and worked with those constraints, things started to click.

I now have a personal companion app that does:

  • Notifications in the glasses (properly filtered, dismissible, usable)
  • A simple “glance” mode that’s actually usable day-to-day
  • Voice → transcription → response loop
  • Basic navigation via Google Maps notifications - which works better than their app
  • Gesture-driven mode switching that mostly behaves predictably

It’s not polished, not a product, and definitely not an SDK… but it’s usable enough that I’ve been running it full-time for a few weeks

I’ve dumped everything I figured out here (documentation in here is probably more useful than the app itself for most people - I have figured out a lot of the bidirectional comms - what can and can't be done easily):
https://github.com/Cheddies1/even-g1-companion

Curious if anyone else is still tinkering with the G1, or if everyone’s fully moved on to G2 now.

u/cheddies — 23 days ago