@@ -33,6 +33,8 @@ const String _micSelectCharacteristicUuid =
3333 "0x1410df97-5f68-4ebb-a7c7-5e0fb9ae7557" ;
3434const String _audioModeCharacteristicUuid =
3535 "0x1410df96-5f68-4ebb-a7c7-5e0fb9ae7557" ;
36+ const String _dmicGainCharacteristicUuid =
37+ "1410df99-5f68-4ebb-a7c7-5e0fb9ae7557" ;
3638
3739const String _buttonServiceUuid = "29c10bdc-4773-11ee-be56-0242ac120002" ;
3840const String _buttonCharacteristicUuid = "29c10f38-4773-11ee-be56-0242ac120002" ;
@@ -76,6 +78,7 @@ class OpenEarableV2 extends BluetoothWearable
7678 DeviceFirmwareVersion ,
7779 DeviceHardwareVersion ,
7880 MicrophoneManager <OpenEarableV2Mic >,
81+ MicrophoneGainManager ,
7982 AudioModeManager ,
8083 EdgeRecorderManager ,
8184 ButtonManager ,
@@ -455,12 +458,12 @@ class OpenEarableV2 extends BluetoothWearable
455458 // MARK: MicrophoneManager
456459
457460 @override
458- void setMicrophone (OpenEarableV2Mic microphone) {
461+ Future < void > setMicrophone (OpenEarableV2Mic microphone) {
459462 if (! availableMicrophones.contains (microphone)) {
460463 throw ArgumentError ('Microphone not available: ${microphone .key }' );
461464 }
462465
463- bleManager.write (
466+ return bleManager.write (
464467 deviceId: deviceId,
465468 serviceId: _audioConfigServiceUuid,
466469 characteristicId: _micSelectCharacteristicUuid,
@@ -486,6 +489,38 @@ class OpenEarableV2 extends BluetoothWearable
486489 return availableMicrophones.firstWhere ((mic) => mic.id == microphoneId);
487490 }
488491
492+ // MARK: MicrophoneGainManager
493+
494+ @override
495+ Future <MicrophoneGain > getMicrophoneGain () async {
496+ final gainBytes = await bleManager.read (
497+ deviceId: deviceId,
498+ serviceId: _audioConfigServiceUuid,
499+ characteristicId: _dmicGainCharacteristicUuid,
500+ );
501+
502+ if (gainBytes.length != 2 ) {
503+ throw StateError (
504+ 'Microphone gain characteristic expected 2 values, but got ${gainBytes .length }' ,
505+ );
506+ }
507+
508+ return MicrophoneGain (
509+ outerRegister: gainBytes[0 ],
510+ innerRegister: gainBytes[1 ],
511+ );
512+ }
513+
514+ @override
515+ Future <void > setMicrophoneGain (MicrophoneGain gain) {
516+ return bleManager.write (
517+ deviceId: deviceId,
518+ serviceId: _audioConfigServiceUuid,
519+ characteristicId: _dmicGainCharacteristicUuid,
520+ byteData: [gain.outerRegister, gain.innerRegister],
521+ );
522+ }
523+
489524 // MARK: AudioModeManager
490525
491526 @override
0 commit comments