35 lines
1002 B
Dart
35 lines
1002 B
Dart
|
|
// 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);
|
||
|
|
}
|
||
|
|
}
|