queryMediaProbe method

Future<D11hMediaProbeResult> queryMediaProbe(
  1. BleCharacteristic characteristic, {
  2. bool includeStatus = true,
  3. Duration responseTimeout = const Duration(seconds: 2),
})

Implementation

Future<D11hMediaProbeResult> queryMediaProbe(
  BleCharacteristic characteristic, {
  bool includeStatus = true,
  Duration responseTimeout = const Duration(seconds: 2),
}) async {
  _ensureConnected('query media probe');
  if (!characteristic.canNotify ||
      !characteristic.properties.contains(
        BleCharacteristicProperty.writeWithoutResponse,
      )) {
    throw StateError(
      'Media probing requires notify and writeWithoutResponse.',
    );
  }

  try {
    await subscribe(characteristic);
    final deviceId = _connectedDevice!;
    final information = await _writeAndWaitForCommand(
      deviceId,
      characteristic,
      buildD11hCommand(0x1A, const <int>[]),
      0x1B,
      responseTimeout,
    );
    final status = includeStatus
        ? await _writeAndWaitForCommand(
            deviceId,
            characteristic,
            buildD11hCommand(0xA3, const <int>[]),
            0xB3,
            responseTimeout,
          )
        : null;

    return D11hMediaProbeResult(
      createdAt: DateTime.now().toUtc(),
      informationResponse: _protocolFrameFromRaw(information),
      statusResponse: status == null ? null : _protocolFrameFromRaw(status),
    );
  } catch (error) {
    _recordError('media probe failed', error);
    rethrow;
  }
}