Starter display: boundary v0 client, readout, mark button, CI
CI / Analyze & Test (push) Successful in 12s
CI / Debug APK (push) Successful in 57s

Connects to svc-gw over one WebSocket, heartbeats, treats timeout_ms of
silence as a dead link, and retries commands under the same id until acked.
Shows link state, signals with stale/null/missing told apart, the raw stream,
a mock banner on the surface, and a Mark button that stamps the recording.
Android: keeps the screen on and binds the process to the USB NCM network
when the gateway is on it. CI mirrors android-stuff's host-mode runner setup.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DDwfd6Ki8UfG4hK6W5YpJz
This commit is contained in:
2026-10-09 20:23:00 +09:00
parent 62c6a79f89
commit 50081d5417
10 changed files with 770 additions and 132 deletions
+34
View File
@@ -0,0 +1,34 @@
// Android only: binding the process to the USB (NCM) Ethernet link to the Orin.
// See MainActivity.kt for why Android needs telling.
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart';
class UsbLink extends ChangeNotifier {
static const _ch = MethodChannel('yukart/net');
bool supported = Platform.isAndroid;
bool up = false;
bool bound = false;
UsbLink() {
if (!supported) return;
_ch.setMethodCallHandler((call) async {
if (call.method == 'ethernet') {
final a = Map<String, dynamic>.from(call.arguments as Map);
up = a['up'] == true;
bound = a['bound'] == true;
notifyListeners();
}
});
}
/// Bind only when the target is on the USB link; a workstation over WiFi must stay reachable.
Future<void> bindFor(Uri target) async {
if (!supported) return;
final want = target.host.startsWith('192.168.55.');
await _ch.invokeMethod<bool>('bindEthernet', want);
}
}