writeRobotPartConfig method

Future<void> writeRobotPartConfig({
  1. required String partId,
  2. required String secret,
  3. String appAddress = 'https://app.viam.com:443',
  4. String psk = 'viamsetup',
})

Implementation

Future<void> writeRobotPartConfig({
  required String partId,
  required String secret,
  String appAddress = 'https://app.viam.com:443',
  String psk = 'viamsetup',
}) async {
  final bleService = await getBleService();
  final cryptoCharacteristic = bleService.characteristics.firstWhere(
    (char) => char.uuid.str == ViamBluetoothUUIDs.cryptoUUID,
    orElse: () => throw Exception('cryptoCharacteristic not found'),
  );

  final publicKeyBytes = await cryptoCharacteristic.read();
  final publicKey = _publicKey(Uint8List.fromList(publicKeyBytes));
  final encoder = _encoder(publicKey);

  final encodedPartId = encoder.process(utf8.encode('$psk:$partId'));
  final partIdCharacteristic = bleService.characteristics.firstWhere(
    (char) => char.uuid.str == ViamBluetoothUUIDs.robotPartUUID,
    orElse: () => throw Exception('partIdCharacteristic not found'),
  );
  await partIdCharacteristic.write(encodedPartId);

  final encodedSecret = encoder.process(utf8.encode('$psk:$secret'));
  final partSecretCharacteristic = bleService.characteristics.firstWhere(
    (char) => char.uuid.str == ViamBluetoothUUIDs.robotPartSecretUUID,
    orElse: () => throw Exception('partSecretCharacteristic not found'),
  );
  await partSecretCharacteristic.write(encodedSecret);

  final encodedAppAddress = encoder.process(utf8.encode('$psk:$appAddress'));
  final appAddressCharacteristic = bleService.characteristics.firstWhere(
    (char) => char.uuid.str == ViamBluetoothUUIDs.appAddressUUID,
    orElse: () => throw Exception('appAddressCharacteristic not found'),
  );
  await appAddressCharacteristic.write(encodedAppAddress);
}