connectToDevice method
Implementation
Future<void> connectToDevice(String deviceId) async {
if (!_isInitialized) {
throw Exception(
'DeviceManager not initialized. Call initialize() first.');
}
if (_connectionState == DeviceConnectionState.connecting) {
throw Exception('Connection already in progress');
}
if (_connectionState == DeviceConnectionState.connected) {
throw Exception('Device already connected. Disconnect first.');
}
_updateConnectionState(DeviceConnectionState.connecting);
try {
_connectedDevice = BluetoothDevice.fromId(deviceId);
_connectionStateSubscription?.cancel();
_connectionStateSubscription =
_connectedDevice!.connectionState.listen((state) {
if (state == BluetoothConnectionState.disconnected &&
_connectionState == DeviceConnectionState.connected) {
_updateConnectionState(DeviceConnectionState.disconnected);
}
});
await _connectedDevice!.connect();
if (Platform.isAndroid &&
_connectedDevice!.mtuNow < DeviceConstants.defaultMtuSize) {
await _connectedDevice!.requestMtu(DeviceConstants.defaultMtuSize);
}
_updateConnectionState(DeviceConnectionState.connected);
} catch (e) {
_connectedDevice = null;
_updateConnectionState(DeviceConnectionState.error);
rethrow;
}
}