Verified 2026-03-03, firmware asg-client v34.0 (build date 2026-02-04).
Both USB and WiFi ADB work. Mentra's own blog notes the charging cable "also works as a USB cable so developers are free to access, modify, and replace Mentra Live's software" (https://mentraglass.com/blogs/blog/making-mentra-live).
adb devices -l
# 0123456789ABCDEF device product:MentraLive model:Mentra_Live
adb connect <GLASSES_IP>:5555 # WiFi also works; IP visible in companion app0123456789ABCDEF is a common factory-default serial on MediaTek hardware (not specific to
this unit). Your device may show the same or a different value.
adb shell getprop ro.build.version.release # 11
adb shell getprop ro.build.version.sdk # 30
adb shell getprop ro.build.date # Wed Feb 4 22:03:12 CST 2026
adb shell getprop ro.product.board # k61v1_64_bsp
adb shell getprop ro.product.cpu.abi # arm64-v8a
adb shell getprop ro.build.tags # test-keysThe official Mentra spec sheet (https://mentraglass.myshopify.com/pages/live) lists the
chipset as MTK8766. The board string from getprop says k61v1_64_bsp, which is a
MediaTek BSP name. Whether these refer to the same die is unresolved — BSP names don't
always match marketing chip names.
test-keys means the ROM was signed with non-production keys. ADB being accessible at all
confirms USB debugging is enabled as shipped, which is what actually allows sideloading.
RAM and storage:
adb shell cat /proc/meminfo | head -3
# MemTotal: 2003020 kB
adb shell df -h /data
# /dev/block/dm-12 24G 328M 23G 2% /dataadb shell dumpsys media.cameraOne camera, back-facing, HAL 3.6. Key fields from the metadata dump:
android.lens.facing: BACK
android.lens.info.availableApertures: [2.8]
android.lens.info.availableFocalLengths: [3.3]
android.lens.info.availableOpticalStabilization: [0] # no OIS
android.scaler.availableMaxDigitalZoom: [4.0]
android.flash.info.available: TRUE
android.control.aeAvailableTargetFpsRanges: [15,15] [20,20] [5,30] [30,30]
Supported output formats: JPEG (33), YUV_420_888 (35), RAW_SENSOR (34).
Max fps per resolution (from availableMinFrameDurations, YUV_420_888 only):
| Resolution | Max fps |
|---|---|
| 4032×3024 | 10 |
| 3840×2160 | 20 |
| 1920×1080 | 30 |
| ≤ 1920×1440 | 30 |
Parse the full table yourself:
adb shell dumpsys media.camera 2>&1 | python3 -c "
import sys, re
lines = sys.stdin.read()
sec = lines[lines.find('availableMinFrameDurations'):]
sec = sec[:sec.find('availableStallDurations')]
for fmt, w, h, dur in re.findall(r'\[(\d+)\s+(\d+)\s*\]\s*\[(\d+)\s+(\d+)\s*\]', sec):
if fmt == '35':
print(f'{w}x{h}: {1e9/int(dur):.0f} fps')
"adb shell dumpsys sensorservice4 hardware sensors, no magnetometer:
| Sensor | Type string | Min Hz | Max Hz | FIFO |
|---|---|---|---|---|
| ACCELEROMETER | android.sensor.accelerometer |
50 | 200 | 4500 events |
| GYROSCOPE | android.sensor.gyroscope |
10 | 400 | 4500 events |
| UNCALI_GYRO | android.sensor.gyroscope_uncalibrated |
10 | 400 | — |
| DEVICE_ORIENTATION | android.sensor.device_orientation |
on-change | — | — |
Software-fused (AOSP, not hardware): Game Rotation Vector, Gravity, Linear Acceleration.
The sensorservice dump includes recent events with timestamps. On this device, gyro events
arrive at ~5 ms intervals (~200 Hz) and accel at ~20 ms (~50 Hz) at the default idle rate:
GYROSCOPE: last 10 events
(ts=81.390s) -0.00, 0.00, 0.02
(ts=81.395s) -0.00, 0.01, 0.02
...
ACCELEROMETER: last 50 events
(ts=80.515s) 6.30, 0.72, -7.64
(ts=80.535s) 6.19, 0.87, -7.52
...
Timestamp synchronization: IMU events use CLOCK_BOOTTIME (seconds since boot, confirmed from
the values above). Android Camera2 SENSOR_TIMESTAMP also uses CLOCK_BOOTTIME on SDK ≥ 24
(docs).
This device is SDK 30, so camera and IMU timestamps share a clock. Not independently verified
by comparing a simultaneous camera+IMU capture — relying on the documented Android guarantee.
adb shell cat /proc/asound/cards
# 0 [mtsndcard]: mt-snd-card
adb shell cat /proc/asound/devices
# multiple capture PCM devices listed (indices 3, 5, 7, 10, 12, ...)The dumpsys audio recording log shows asg_client using src:MIC:
adb shell dumpsys audio 2>&1 | grep "rec update\|rec stop"
# 20:32:06 rec update riid:87 uid:10058 src:MIC pack:com.mentra.asg_client
# 20:32:09 rec stop riid:87 uid:10058 src:MIC pack:com.mentra.asg_clientStandard AudioRecord with MIC source should work in a sideloaded app; not independently
tested beyond confirming the system app uses it successfully.
adb shell ls /sdcard/
# DCIM Documents asg lv mentra_crash_logs ...
adb shell cat /sdcard/asg/metadata.json
# {"versionCode":34,"versionName":"34.0",
# "apkUrl":"https://github.com/Mentra-Community/MentraOS/releases/download/asg-client/asg-client-34.apk",
# "sha256":"86368379502e34cae75e8453773ffa903977a1419d424b3adc0addd0a859b3ff"}/sdcard/lv/ contains OTA logs with timestamps of each update step.
adb shell dumpsys package com.mentra.asg_client | grep -E "versionName|flags|codePath"
# versionName=34.0
# flags=[ SYSTEM HAS_CODE ALLOW_CLEAR_USER_DATA UPDATED_SYSTEM_APP ALLOW_BACKUP ]
# codePath=/data/app/.../com.mentra.asg_client-.../
adb shell dumpsys package com.mentra.asg_client | grep -E "camera|CAMERA"
# androidx.camera.extensions.impl
# android.permission.CAMERA
# android.permission.FOREGROUND_SERVICE_CAMERA
# android.permission.CAMERA_BACKGROUNDUPDATED_SYSTEM_APP means it ships as a system app but is updated via OTA into /data/app.
It uses CameraX. A sideloaded app declaring the same camera permissions should be able to open
the camera when asg_client is not actively using it — standard Android camera exclusivity
applies, but this has not been tested.