Skip to content

Adding INMO Go 2 Support to APP and asg_client. Also adding auto IPA generation via actions for sidestore loading for IOS#3193

Open
dionma2020 wants to merge 75 commits into
Mentra-Community:devfrom
dionma2020:dev
Open

Adding INMO Go 2 Support to APP and asg_client. Also adding auto IPA generation via actions for sidestore loading for IOS#3193
dionma2020 wants to merge 75 commits into
Mentra-Community:devfrom
dionma2020:dev

Conversation

@dionma2020

@dionma2020 dionma2020 commented Jun 18, 2026

Copy link
Copy Markdown

Adding INMO Go 2 Support to APP and asg_client. Also adding auto IPA generation via actions for sidestore loading for IOS.

INMO GO2 glasses also require custom firmware which can be provided upon request. This has been provided by INMO manufacturer directly.


Note

Medium Risk
Swapping StreamPack and removing separate capture resolution can affect RTMP/SRT behavior on existing hardware; new BLE pairing path and CI node_modules sed patches add integration and build fragility.

Overview
Adds INMO Go2 as a first-class glasses target in asg_client: device detection routes to new InmoGo2BluetoothManager (BLE peripheral advertising INMO GO2, GATT 4860/4861/4862, JSON phone_ready / glasses_ready) and InmoGo2HardwareManager (torch recording LED, battery, MediaPlayer audio).

Streaming build change: local StreamPackLite Gradle modules are replaced with published io.github.thibaultbee:streampack 2.6.1 (RTMP/SRT extensions). RTMP/SRT services drop the Lite-only VideoConfig captureSize argument so encode resolution drives capture.

CI: new ios-unsigned-ipa.yml on dev builds an unsigned Release archive (Expo prebuild, node_modules/Podfile patches for newer Xcode/Swift), packages Mentra.ipa for SideStore, and uploads artifacts. mentraos-manager-ios-build.yml no longer runs on PRs (push/workflow_dispatch only).

Minor: debug launcher version label cleared; AndroidManifestbak.xml backup added; mostly formatting in SrtStreamingService.

Reviewed by Cursor Bugbot for commit fb056b1. Bugbot is set up for automated code reviews on this repo. Configure here.


Summary by cubic

Adds native INMO Go2 support across Android (ASG client) and iOS, plus a GitHub Actions workflow to auto-build an unsigned IPA for SideStore. Enables pairing, display overlays, and teleprompter control for Go2, and centralizes Go2 capabilities in shared types.

  • New Features

    • Android: INMO Go2 Bluetooth and hardware managers with JSON-over-BLE; device detection and power/battery handling.
    • Android: Display overlay and teleprompter command handlers; service cleanup and stability improvements.
    • iOS: New InmoGo2 SGC, pairing flow updates, and sendTeleprompterUpdate API in @mentra/bluetooth-sdk.
    • Mobile: Teleprompter screen to create and send scripts.
    • Cloud: Added INMO Go2 capability profile and INMO_GO2 device type.
    • CI: New “iOS IPA (SideStore Build)” workflow to produce an unsigned IPA for sideloading.
  • Migration

    • INMO Go2 requires custom firmware from the manufacturer before testing.
    • Android streaming now uses Maven artifacts (io.github.thibaultbee:streampack:2.6.1 and extensions). Remove local StreamPackLite modules and do a clean build.
    • Use the new SideStore workflow to generate the unsigned iOS IPA.

Written for commit fb056b1. Summary will update on new commits.

Review in cubic

dionma2020 and others added 30 commits June 2, 2026 13:33
This file defines the hardware capabilities for the INMO Go2 smart glasses, including specifications for the camera, display, microphone, speaker, IMU, buttons, light, power, and WiFi.
Added steps to select Xcode version and show versions.
Removed Xcode and Swift version display step and added steps to list available schemes, targets, and find built .app. Adjusted error handling and output messages for better clarity.
Removed unnecessary code block formatting from the workflow.
Updated the iOS build workflow to use Bun for dependency management and adjusted various steps for clarity and efficiency.
Updated Xcode version from 16.4 to 16.2 and modified pod deployment targets to 13.0. Enhanced build log output and adjusted artifact upload settings.
@dionma2020 dionma2020 requested a review from a team as a code owner June 18, 2026 01:45

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using default effort and found 2 potential issues.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Want higher recall? High effort reviews run extra passes and find more bugs. A team admin can switch effort levels in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit fb056b1. Configure here.

level,
2.0f, // Force keyframe every 2 seconds
captureSize
2.0f

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Preview surface encode size mismatch

High Severity

After migrating to StreamPack 2.6.1, VideoConfig no longer carries a separate capture size, but createSurface still sizes the camera preview from getCaptureSurfaceWidth/Height. When preflight stamps a native capture resolution different from the encode resolution, the encoder and preview buffer can disagree and RTMP/SRT may fail or produce wrong video.

Additional Locations (2)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit fb056b1. Configure here.

if (!isConnected() && !isAdvertising) {
startAdvertising();
}
}, 500);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Duplicate BLE advertising restarts

Medium Severity

disconnect() schedules startAdvertising() after 500ms, while onConnectionStateChange for DISCONNECTED schedules another startAdvertising() after 1000ms without checking isAdvertising. A single disconnect can invoke advertising twice and trigger BLE stack errors or unstable reconnect behavior on INMO Go2.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit fb056b1. Configure here.

@aisraelov

Copy link
Copy Markdown
Member

Hey this is awesome but if we're going to merge this will need some changes. At minimum:

  • Resolve merge conflicts
  • "Teleprompter" code shouldn't be in asg_client. Adding display glasses support to asg_client is awesome but should just implement the basic primitives seen in G1/G2/Z100/Nex/NIMO sgcs, not miniapp code that belongs on the phone.
  • Change references of INMO GO 2 in asg_client to be generic where possible. INMO GO2 just uses standard Android Bluetooth for BT comms. In this case, move your INMO GO2 bluetooth manager code into StandardBluetoothManager, and then use StandardBluetoothManager when it's an INMO GO2 device.
  • Either disable the ios-unsigned-ipa.yml‎ workflow, don't include it in this PR, or best case, build it into the existing system that posts fresh APKs for each commit on PRs (while re-using the same artifacts created in our existing build iOS step, so we're not building twice).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants