Skip to content

Unable to parse scan record #521

@jobfeikens

Description

@jobfeikens

Sometimes, my scan operation finishes with an error because it receives a scan record with invalid data:

E/ScanRecord(21849): unable to parse scan record: [4, 9, 84, 87, 83, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] .

Full stack trace
E/ScanRecord(21849): unable to parse scan record: [4, 9, 84, 87, 83, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
E/ScanRecord(21849): unable to parse scan record: [4, 9, 84, 87, 83, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
D/BluetoothAdapter(21849): isLeEnabled(): ON
E/flutter (21849): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: Exception: GenericFailure<ScanFailure>(code: ScanFailure.unknown, message: "result.scanRecord.serviceData must not be null")
E/flutter (21849): #0      Result.dematerialize.<anonymous closure> (package:reactive_ble_platform_interface/src/model/result.dart:22:13)
E/flutter (21849): #1      Result.iif (package:reactive_ble_platform_interface/src/model/result.dart:34:21)
E/flutter (21849): #2      Result.dematerialize (package:reactive_ble_platform_interface/src/model/result.dart:15:28)
E/flutter (21849): #3      DeviceScannerImpl.scanForDevices.<anonymous closure>.<anonymous closure> (package:flutter_reactive_ble/src/device_scanner.dart:58:49)
E/flutter (21849): #4      _MapStream._handleData (dart:async/stream_pipe.dart:213:31)
E/flutter (21849): #5      _rootRunUnary (dart:async/zone.dart:1434:47)
E/flutter (21849): #6      _CustomZone.runUnary (dart:async/zone.dart:1335:19)
E/flutter (21849): #7      _CustomZone.runUnaryGuarded (dart:async/zone.dart:1244:7)
E/flutter (21849): #8      _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:341:11)
E/flutter (21849): #9      _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
E/flutter (21849): #10     _ForwardingStreamSubscription._add (dart:async/stream_pipe.dart:123:11)
E/flutter (21849): #11     _MapStream._handleData (dart:async/stream_pipe.dart:218:10)
E/flutter (21849): #12     _rootRunUnary (dart:async/zone.dart:1434:47)
E/flutter (21849): #13     _CustomZone.runUnary (dart:async/zone.dart:1335:19)
E/flutter (21849): #14     _CustomZone.runUnaryGuarded (dart:async/zone.dart:1244:7)
E/flutter (21849): #15     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:341:11)
E/flutter (21849): #16     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
E/flutter (21849): #17     _ForwardingStreamSubscription._add (dart:async/stream_pipe.dart:123:11)
E/flutter (21849): #18     _MapStream._handleData (dart:async/stream_pipe.dart:218:10)
E/flutter (21849): #19     _rootRunUnary (dart:async/zone.dart:1434:47)
E/flutter (21849): #20     _CustomZone.runUnary (dart:async/zone.dart:1335:19)
E/flutter (21849): #21     _CustomZone.runUnaryGuarded (dart:async/zone.dart:1244:7)
E/flutter (21849): #22     CastStreamSubscription._onData (dart:_internal/async_cast.dart:85:11)
E/flutter (21849): #23     _rootRunUnary (dart:async/zone.dart:1434:47)
E/flutter (21849): #24     _CustomZone.runUnary (dart:async/zone.dart:1335:19)
E/flutter (21849): #25     _CustomZone.runUnaryGuarded (dart:async/zone.dart:1244:7)
E/flutter (21849): #26     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:341:11)
E/flutter (21849): #27     _DelayedData.perform (dart:async/stream_impl.dart:591:14)
E/flutter (21849): #28     _StreamImplEvents.handleNext (dart:async/stream_impl.dart:706:11)
E/flutter (21849): #29     _PendingEvents.schedule.<anonymous closure> (dart:async/stream_impl.dart:663:7)
E/flutter (21849): #30     _rootRun (dart:async/zone.dart:1418:47)
E/flutter (21849): #31     _CustomZone.run (dart:async/zone.dart:1328:19)
E/flutter (21849): #32     _CustomZone.runGuarded (dart:async/zone.dart:1236:7)
E/flutter (21849): #33     _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:1276:23)
E/flutter (21849): #34     _rootRun (dart:async/zone.dart:1426:13)
E/flutter (21849): #35     _CustomZone.run (dart:async/zone.dart:1328:19)
E/flutter (21849): #36     _CustomZone.runGuarded (dart:async/zone.dart:1236:7)
E/flutter (21849): #37     _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:1276:23)
E/flutter (21849): #38     _microtaskLoop (dart:async/schedule_microtask.dart:40:21)
E/flutter (21849): #39     _startMicrotaskLoop (dart:async/schedule_microtask.dart:49:5)
E/flutter (21849): 

Maybe the field serviceData in DiscoveredDevice should be nullable or the field should be an empty Map in case of no service data.
I think its also reasonable to just ignore the scan record as the error indicates that the scan record bytes simply can't be parsed.

Platform: Android 12

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions