Implementation
HubScanner() {
_flutterBlue.setLogLevel(LogLevel.critical);
_subscription = _flutterBlue.scanResults.listen((List<ScanResult> results) {
for (ScanResult result in results) {
if (!result.advertisementData.serviceUuids.contains("00001623-1212-efde-1623-785feabcd123")) {
continue;
}
Helper.dprint("Detected ${result.device.name}");
if (_hubs.containsKey(result.device.id.id)) {
Helper.dprint("Already have this hub.");
continue;
}
if (Helper.debug) {
result.advertisementData.serviceData.forEach((key, value) {
Helper.dprint("service data $key : ${Helper.toHex(value)}");
});
result.advertisementData.manufacturerData.forEach((key, value) {
Helper.dprint("manufacturer data $key : ${Helper.toHex(value)}");
});
result.advertisementData.serviceUuids.forEach((element) {
Helper.dprint("Service uuid: $element");
});
}
if (!result.advertisementData.manufacturerData.containsKey(FlutterBlueHubManufacturerData.LegoManufacturerId)) {
Helper.dprint("Didn't find expected manufacturer data.");
continue;
}
FlutterBlueHubManufacturerData? hubManufacturerData =
FlutterBlueHubManufacturerData.fromList(result.advertisementData.manufacturerData[FlutterBlueHubManufacturerData.LegoManufacturerId]);
if (hubManufacturerData != null) {
Helper.dprint("Found a hub!!!!");
Hub hub = new Hub(HubTransport(result.device, hubManufacturerData));
_hubs[result.device.id.id] = hub;
_controller.add(this.list);
}
}
});
}