Implement timestamp in scanResult (#198)
* Implement timestamp in scanResult * Update pigeon * implement windows * Update changelog * Fix Swift formatting * Remove android unused import * Format pigeon generated file
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
* `disconnect` now waits for disconnection confirmation before returning
|
||||
* Improve Windows disconnection event handling and cleanup
|
||||
* Add `withDescriptors` parameter in `discoverServices` API
|
||||
* Add `timestamp` in `BleDevice`
|
||||
|
||||
## 0.21.1
|
||||
* Fix device name resolution on Windows
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Autogenerated from Pigeon (v26.1.0), do not edit directly.
|
||||
// Autogenerated from Pigeon (v26.1.4), do not edit directly.
|
||||
// See also: https://pub.dev/packages/pigeon
|
||||
@file:Suppress("UNCHECKED_CAST", "ArrayInDataClass")
|
||||
|
||||
@@ -159,7 +159,8 @@ data class UniversalBleScanResult (
|
||||
val isPaired: Boolean? = null,
|
||||
val rssi: Long? = null,
|
||||
val manufacturerDataList: List<UniversalManufacturerData>? = null,
|
||||
val services: List<String>? = null
|
||||
val services: List<String>? = null,
|
||||
val timestamp: Long? = null
|
||||
)
|
||||
{
|
||||
companion object {
|
||||
@@ -170,7 +171,8 @@ data class UniversalBleScanResult (
|
||||
val rssi = pigeonVar_list[3] as Long?
|
||||
val manufacturerDataList = pigeonVar_list[4] as List<UniversalManufacturerData>?
|
||||
val services = pigeonVar_list[5] as List<String>?
|
||||
return UniversalBleScanResult(deviceId, name, isPaired, rssi, manufacturerDataList, services)
|
||||
val timestamp = pigeonVar_list[6] as Long?
|
||||
return UniversalBleScanResult(deviceId, name, isPaired, rssi, manufacturerDataList, services, timestamp)
|
||||
}
|
||||
}
|
||||
fun toList(): List<Any?> {
|
||||
@@ -181,6 +183,7 @@ data class UniversalBleScanResult (
|
||||
rssi,
|
||||
manufacturerDataList,
|
||||
services,
|
||||
timestamp,
|
||||
)
|
||||
}
|
||||
override fun equals(other: Any?): Boolean {
|
||||
|
||||
@@ -761,6 +761,7 @@ class UniversalBlePlugin : UniversalBlePlatformChannel, BluetoothGattCallback(),
|
||||
isPaired = it.bondState == BOND_BONDED,
|
||||
manufacturerDataList = null,
|
||||
rssi = null,
|
||||
timestamp = System.currentTimeMillis()
|
||||
)
|
||||
}
|
||||
)
|
||||
@@ -1020,7 +1021,8 @@ class UniversalBlePlugin : UniversalBlePlatformChannel, BluetoothGattCallback(),
|
||||
isPaired = result.device.bondState == BOND_BONDED,
|
||||
manufacturerDataList = manufacturerDataList,
|
||||
rssi = result.rssi.toLong(),
|
||||
services = serviceUuids.map { it.toString() }.toList()
|
||||
services = serviceUuids.map { it.toString() }.toList(),
|
||||
timestamp = System.currentTimeMillis()
|
||||
)
|
||||
) {}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Autogenerated from Pigeon (v26.1.0), do not edit directly.
|
||||
// Autogenerated from Pigeon (v26.1.4), do not edit directly.
|
||||
// See also: https://pub.dev/packages/pigeon
|
||||
|
||||
import Foundation
|
||||
@@ -205,6 +205,7 @@ struct UniversalBleScanResult: Hashable {
|
||||
var rssi: Int64? = nil
|
||||
var manufacturerDataList: [UniversalManufacturerData]? = nil
|
||||
var services: [String]? = nil
|
||||
var timestamp: Int64? = nil
|
||||
|
||||
|
||||
// swift-format-ignore: AlwaysUseLowerCamelCase
|
||||
@@ -215,6 +216,7 @@ struct UniversalBleScanResult: Hashable {
|
||||
let rssi: Int64? = nilOrValue(pigeonVar_list[3])
|
||||
let manufacturerDataList: [UniversalManufacturerData]? = nilOrValue(pigeonVar_list[4])
|
||||
let services: [String]? = nilOrValue(pigeonVar_list[5])
|
||||
let timestamp: Int64? = nilOrValue(pigeonVar_list[6])
|
||||
|
||||
return UniversalBleScanResult(
|
||||
deviceId: deviceId,
|
||||
@@ -222,7 +224,8 @@ struct UniversalBleScanResult: Hashable {
|
||||
isPaired: isPaired,
|
||||
rssi: rssi,
|
||||
manufacturerDataList: manufacturerDataList,
|
||||
services: services
|
||||
services: services,
|
||||
timestamp: timestamp
|
||||
)
|
||||
}
|
||||
func toList() -> [Any?] {
|
||||
@@ -233,6 +236,7 @@ struct UniversalBleScanResult: Hashable {
|
||||
rssi,
|
||||
manufacturerDataList,
|
||||
services,
|
||||
timestamp,
|
||||
]
|
||||
}
|
||||
static func == (lhs: UniversalBleScanResult, rhs: UniversalBleScanResult) -> Bool {
|
||||
|
||||
@@ -362,7 +362,8 @@ private class BleCentralDarwin: NSObject, UniversalBlePlatformChannel, CBCentral
|
||||
let name = advertisementNameCache[id] ?? discoveredPeripherals[id]?.name ?? peripheral.name ?? ""
|
||||
return UniversalBleScanResult(
|
||||
deviceId: id,
|
||||
name: name
|
||||
name: name,
|
||||
timestamp: Int64(Date().timeIntervalSince1970 * 1000)
|
||||
)
|
||||
}))
|
||||
}
|
||||
@@ -415,7 +416,8 @@ private class BleCentralDarwin: NSObject, UniversalBlePlatformChannel, CBCentral
|
||||
isPaired: nil,
|
||||
rssi: RSSI as? Int64,
|
||||
manufacturerDataList: manufacturerDataList,
|
||||
services: services?.map { $0.uuidStr }
|
||||
services: services?.map { $0.uuidStr },
|
||||
timestamp: Int64(Date().timeIntervalSince1970 * 1000)
|
||||
)) { _ in }
|
||||
}
|
||||
|
||||
|
||||
@@ -30,6 +30,8 @@ class ScannedItemWidget extends StatelessWidget {
|
||||
visible: manufacturerData != null,
|
||||
child: Text(manufacturerData.toString()),
|
||||
),
|
||||
if (bleDevice.timestampDateTime != null)
|
||||
Text("Last Seen: ${bleDevice.timestampDateTime}"),
|
||||
bleDevice.paired == true
|
||||
? const Text(
|
||||
"Paired",
|
||||
|
||||
@@ -8,6 +8,7 @@ class BleDevice {
|
||||
String? rawName;
|
||||
int? rssi;
|
||||
bool? paired;
|
||||
int? timestamp;
|
||||
|
||||
/// List of services advertised by the device.
|
||||
List<String> services;
|
||||
@@ -38,11 +39,16 @@ class BleDevice {
|
||||
this.services = const [],
|
||||
this.isSystemDevice,
|
||||
this.manufacturerDataList = const [],
|
||||
this.timestamp,
|
||||
}) {
|
||||
rawName = name;
|
||||
this.name = name?.replaceAll(RegExp(r'[^ -~]'), '').trim();
|
||||
}
|
||||
|
||||
DateTime? get timestampDateTime => timestamp != null
|
||||
? DateTime.fromMillisecondsSinceEpoch(timestamp!)
|
||||
: null;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'BleDevice: '
|
||||
@@ -52,6 +58,7 @@ class BleDevice {
|
||||
'paired: $paired, '
|
||||
'services: $services, '
|
||||
'isSystemDevice: $isSystemDevice, '
|
||||
'timestamp: $timestamp, '
|
||||
'manufacturerDataList: $manufacturerDataList';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -677,6 +677,7 @@ extension BlueZDeviceExtension on BlueZDevice {
|
||||
isSystemDevice: isSystemDevice,
|
||||
services: uuids.map((e) => e.toString()).toList(),
|
||||
manufacturerDataList: manufacturerDataList,
|
||||
timestamp: DateTime.now().millisecondsSinceEpoch,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// Autogenerated from Pigeon (v26.1.0), do not edit directly.
|
||||
// Autogenerated from Pigeon (v26.1.4), do not edit directly.
|
||||
// See also: https://pub.dev/packages/pigeon
|
||||
// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import, no_leading_underscores_for_local_identifiers
|
||||
// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, omit_obvious_local_variable_types, unused_shown_name, unnecessary_import, no_leading_underscores_for_local_identifiers
|
||||
|
||||
import 'dart:async';
|
||||
import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List;
|
||||
@@ -114,6 +114,7 @@ class UniversalBleScanResult {
|
||||
this.rssi,
|
||||
this.manufacturerDataList,
|
||||
this.services,
|
||||
this.timestamp,
|
||||
});
|
||||
|
||||
String deviceId;
|
||||
@@ -128,6 +129,8 @@ class UniversalBleScanResult {
|
||||
|
||||
List<String>? services;
|
||||
|
||||
int? timestamp;
|
||||
|
||||
List<Object?> _toList() {
|
||||
return <Object?>[
|
||||
deviceId,
|
||||
@@ -136,6 +139,7 @@ class UniversalBleScanResult {
|
||||
rssi,
|
||||
manufacturerDataList,
|
||||
services,
|
||||
timestamp,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -153,6 +157,7 @@ class UniversalBleScanResult {
|
||||
manufacturerDataList:
|
||||
(result[4] as List<Object?>?)?.cast<UniversalManufacturerData>(),
|
||||
services: (result[5] as List<Object?>?)?.cast<String>(),
|
||||
timestamp: result[6] as int?,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -506,7 +511,7 @@ class _PigeonCodec extends StandardMessageCodec {
|
||||
Object? readValueOfType(int type, ReadBuffer buffer) {
|
||||
switch (type) {
|
||||
case 129:
|
||||
final int? value = readValue(buffer) as int?;
|
||||
final value = readValue(buffer) as int?;
|
||||
return value == null ? null : UniversalBleErrorCode.values[value];
|
||||
case 130:
|
||||
return UniversalBleScanResult.decode(readValue(buffer)!);
|
||||
@@ -545,17 +550,15 @@ class UniversalBlePlatformChannel {
|
||||
final String pigeonVar_messageChannelSuffix;
|
||||
|
||||
Future<int> getBluetoothAvailabilityState() async {
|
||||
final String pigeonVar_channelName =
|
||||
final pigeonVar_channelName =
|
||||
'dev.flutter.pigeon.universal_ble.UniversalBlePlatformChannel.getBluetoothAvailabilityState$pigeonVar_messageChannelSuffix';
|
||||
final BasicMessageChannel<Object?> pigeonVar_channel =
|
||||
BasicMessageChannel<Object?>(
|
||||
final pigeonVar_channel = BasicMessageChannel<Object?>(
|
||||
pigeonVar_channelName,
|
||||
pigeonChannelCodec,
|
||||
binaryMessenger: pigeonVar_binaryMessenger,
|
||||
);
|
||||
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(null);
|
||||
final List<Object?>? pigeonVar_replyList =
|
||||
await pigeonVar_sendFuture as List<Object?>?;
|
||||
final pigeonVar_replyList = await pigeonVar_sendFuture as List<Object?>?;
|
||||
if (pigeonVar_replyList == null) {
|
||||
throw _createConnectionError(pigeonVar_channelName);
|
||||
} else if (pigeonVar_replyList.length > 1) {
|
||||
@@ -575,18 +578,16 @@ class UniversalBlePlatformChannel {
|
||||
}
|
||||
|
||||
Future<void> requestPermissions(bool withAndroidFineLocation) async {
|
||||
final String pigeonVar_channelName =
|
||||
final pigeonVar_channelName =
|
||||
'dev.flutter.pigeon.universal_ble.UniversalBlePlatformChannel.requestPermissions$pigeonVar_messageChannelSuffix';
|
||||
final BasicMessageChannel<Object?> pigeonVar_channel =
|
||||
BasicMessageChannel<Object?>(
|
||||
final pigeonVar_channel = BasicMessageChannel<Object?>(
|
||||
pigeonVar_channelName,
|
||||
pigeonChannelCodec,
|
||||
binaryMessenger: pigeonVar_binaryMessenger,
|
||||
);
|
||||
final Future<Object?> pigeonVar_sendFuture =
|
||||
pigeonVar_channel.send(<Object?>[withAndroidFineLocation]);
|
||||
final List<Object?>? pigeonVar_replyList =
|
||||
await pigeonVar_sendFuture as List<Object?>?;
|
||||
final pigeonVar_replyList = await pigeonVar_sendFuture as List<Object?>?;
|
||||
if (pigeonVar_replyList == null) {
|
||||
throw _createConnectionError(pigeonVar_channelName);
|
||||
} else if (pigeonVar_replyList.length > 1) {
|
||||
@@ -601,17 +602,15 @@ class UniversalBlePlatformChannel {
|
||||
}
|
||||
|
||||
Future<bool> enableBluetooth() async {
|
||||
final String pigeonVar_channelName =
|
||||
final pigeonVar_channelName =
|
||||
'dev.flutter.pigeon.universal_ble.UniversalBlePlatformChannel.enableBluetooth$pigeonVar_messageChannelSuffix';
|
||||
final BasicMessageChannel<Object?> pigeonVar_channel =
|
||||
BasicMessageChannel<Object?>(
|
||||
final pigeonVar_channel = BasicMessageChannel<Object?>(
|
||||
pigeonVar_channelName,
|
||||
pigeonChannelCodec,
|
||||
binaryMessenger: pigeonVar_binaryMessenger,
|
||||
);
|
||||
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(null);
|
||||
final List<Object?>? pigeonVar_replyList =
|
||||
await pigeonVar_sendFuture as List<Object?>?;
|
||||
final pigeonVar_replyList = await pigeonVar_sendFuture as List<Object?>?;
|
||||
if (pigeonVar_replyList == null) {
|
||||
throw _createConnectionError(pigeonVar_channelName);
|
||||
} else if (pigeonVar_replyList.length > 1) {
|
||||
@@ -631,17 +630,15 @@ class UniversalBlePlatformChannel {
|
||||
}
|
||||
|
||||
Future<bool> disableBluetooth() async {
|
||||
final String pigeonVar_channelName =
|
||||
final pigeonVar_channelName =
|
||||
'dev.flutter.pigeon.universal_ble.UniversalBlePlatformChannel.disableBluetooth$pigeonVar_messageChannelSuffix';
|
||||
final BasicMessageChannel<Object?> pigeonVar_channel =
|
||||
BasicMessageChannel<Object?>(
|
||||
final pigeonVar_channel = BasicMessageChannel<Object?>(
|
||||
pigeonVar_channelName,
|
||||
pigeonChannelCodec,
|
||||
binaryMessenger: pigeonVar_binaryMessenger,
|
||||
);
|
||||
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(null);
|
||||
final List<Object?>? pigeonVar_replyList =
|
||||
await pigeonVar_sendFuture as List<Object?>?;
|
||||
final pigeonVar_replyList = await pigeonVar_sendFuture as List<Object?>?;
|
||||
if (pigeonVar_replyList == null) {
|
||||
throw _createConnectionError(pigeonVar_channelName);
|
||||
} else if (pigeonVar_replyList.length > 1) {
|
||||
@@ -661,18 +658,16 @@ class UniversalBlePlatformChannel {
|
||||
}
|
||||
|
||||
Future<void> startScan(UniversalScanFilter? filter) async {
|
||||
final String pigeonVar_channelName =
|
||||
final pigeonVar_channelName =
|
||||
'dev.flutter.pigeon.universal_ble.UniversalBlePlatformChannel.startScan$pigeonVar_messageChannelSuffix';
|
||||
final BasicMessageChannel<Object?> pigeonVar_channel =
|
||||
BasicMessageChannel<Object?>(
|
||||
final pigeonVar_channel = BasicMessageChannel<Object?>(
|
||||
pigeonVar_channelName,
|
||||
pigeonChannelCodec,
|
||||
binaryMessenger: pigeonVar_binaryMessenger,
|
||||
);
|
||||
final Future<Object?> pigeonVar_sendFuture =
|
||||
pigeonVar_channel.send(<Object?>[filter]);
|
||||
final List<Object?>? pigeonVar_replyList =
|
||||
await pigeonVar_sendFuture as List<Object?>?;
|
||||
final pigeonVar_replyList = await pigeonVar_sendFuture as List<Object?>?;
|
||||
if (pigeonVar_replyList == null) {
|
||||
throw _createConnectionError(pigeonVar_channelName);
|
||||
} else if (pigeonVar_replyList.length > 1) {
|
||||
@@ -687,17 +682,15 @@ class UniversalBlePlatformChannel {
|
||||
}
|
||||
|
||||
Future<void> stopScan() async {
|
||||
final String pigeonVar_channelName =
|
||||
final pigeonVar_channelName =
|
||||
'dev.flutter.pigeon.universal_ble.UniversalBlePlatformChannel.stopScan$pigeonVar_messageChannelSuffix';
|
||||
final BasicMessageChannel<Object?> pigeonVar_channel =
|
||||
BasicMessageChannel<Object?>(
|
||||
final pigeonVar_channel = BasicMessageChannel<Object?>(
|
||||
pigeonVar_channelName,
|
||||
pigeonChannelCodec,
|
||||
binaryMessenger: pigeonVar_binaryMessenger,
|
||||
);
|
||||
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(null);
|
||||
final List<Object?>? pigeonVar_replyList =
|
||||
await pigeonVar_sendFuture as List<Object?>?;
|
||||
final pigeonVar_replyList = await pigeonVar_sendFuture as List<Object?>?;
|
||||
if (pigeonVar_replyList == null) {
|
||||
throw _createConnectionError(pigeonVar_channelName);
|
||||
} else if (pigeonVar_replyList.length > 1) {
|
||||
@@ -712,17 +705,15 @@ class UniversalBlePlatformChannel {
|
||||
}
|
||||
|
||||
Future<bool> isScanning() async {
|
||||
final String pigeonVar_channelName =
|
||||
final pigeonVar_channelName =
|
||||
'dev.flutter.pigeon.universal_ble.UniversalBlePlatformChannel.isScanning$pigeonVar_messageChannelSuffix';
|
||||
final BasicMessageChannel<Object?> pigeonVar_channel =
|
||||
BasicMessageChannel<Object?>(
|
||||
final pigeonVar_channel = BasicMessageChannel<Object?>(
|
||||
pigeonVar_channelName,
|
||||
pigeonChannelCodec,
|
||||
binaryMessenger: pigeonVar_binaryMessenger,
|
||||
);
|
||||
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(null);
|
||||
final List<Object?>? pigeonVar_replyList =
|
||||
await pigeonVar_sendFuture as List<Object?>?;
|
||||
final pigeonVar_replyList = await pigeonVar_sendFuture as List<Object?>?;
|
||||
if (pigeonVar_replyList == null) {
|
||||
throw _createConnectionError(pigeonVar_channelName);
|
||||
} else if (pigeonVar_replyList.length > 1) {
|
||||
@@ -742,18 +733,16 @@ class UniversalBlePlatformChannel {
|
||||
}
|
||||
|
||||
Future<void> connect(String deviceId) async {
|
||||
final String pigeonVar_channelName =
|
||||
final pigeonVar_channelName =
|
||||
'dev.flutter.pigeon.universal_ble.UniversalBlePlatformChannel.connect$pigeonVar_messageChannelSuffix';
|
||||
final BasicMessageChannel<Object?> pigeonVar_channel =
|
||||
BasicMessageChannel<Object?>(
|
||||
final pigeonVar_channel = BasicMessageChannel<Object?>(
|
||||
pigeonVar_channelName,
|
||||
pigeonChannelCodec,
|
||||
binaryMessenger: pigeonVar_binaryMessenger,
|
||||
);
|
||||
final Future<Object?> pigeonVar_sendFuture =
|
||||
pigeonVar_channel.send(<Object?>[deviceId]);
|
||||
final List<Object?>? pigeonVar_replyList =
|
||||
await pigeonVar_sendFuture as List<Object?>?;
|
||||
final pigeonVar_replyList = await pigeonVar_sendFuture as List<Object?>?;
|
||||
if (pigeonVar_replyList == null) {
|
||||
throw _createConnectionError(pigeonVar_channelName);
|
||||
} else if (pigeonVar_replyList.length > 1) {
|
||||
@@ -768,18 +757,16 @@ class UniversalBlePlatformChannel {
|
||||
}
|
||||
|
||||
Future<void> disconnect(String deviceId) async {
|
||||
final String pigeonVar_channelName =
|
||||
final pigeonVar_channelName =
|
||||
'dev.flutter.pigeon.universal_ble.UniversalBlePlatformChannel.disconnect$pigeonVar_messageChannelSuffix';
|
||||
final BasicMessageChannel<Object?> pigeonVar_channel =
|
||||
BasicMessageChannel<Object?>(
|
||||
final pigeonVar_channel = BasicMessageChannel<Object?>(
|
||||
pigeonVar_channelName,
|
||||
pigeonChannelCodec,
|
||||
binaryMessenger: pigeonVar_binaryMessenger,
|
||||
);
|
||||
final Future<Object?> pigeonVar_sendFuture =
|
||||
pigeonVar_channel.send(<Object?>[deviceId]);
|
||||
final List<Object?>? pigeonVar_replyList =
|
||||
await pigeonVar_sendFuture as List<Object?>?;
|
||||
final pigeonVar_replyList = await pigeonVar_sendFuture as List<Object?>?;
|
||||
if (pigeonVar_replyList == null) {
|
||||
throw _createConnectionError(pigeonVar_channelName);
|
||||
} else if (pigeonVar_replyList.length > 1) {
|
||||
@@ -795,18 +782,16 @@ class UniversalBlePlatformChannel {
|
||||
|
||||
Future<void> setNotifiable(String deviceId, String service,
|
||||
String characteristic, int bleInputProperty) async {
|
||||
final String pigeonVar_channelName =
|
||||
final pigeonVar_channelName =
|
||||
'dev.flutter.pigeon.universal_ble.UniversalBlePlatformChannel.setNotifiable$pigeonVar_messageChannelSuffix';
|
||||
final BasicMessageChannel<Object?> pigeonVar_channel =
|
||||
BasicMessageChannel<Object?>(
|
||||
final pigeonVar_channel = BasicMessageChannel<Object?>(
|
||||
pigeonVar_channelName,
|
||||
pigeonChannelCodec,
|
||||
binaryMessenger: pigeonVar_binaryMessenger,
|
||||
);
|
||||
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel
|
||||
.send(<Object?>[deviceId, service, characteristic, bleInputProperty]);
|
||||
final List<Object?>? pigeonVar_replyList =
|
||||
await pigeonVar_sendFuture as List<Object?>?;
|
||||
final pigeonVar_replyList = await pigeonVar_sendFuture as List<Object?>?;
|
||||
if (pigeonVar_replyList == null) {
|
||||
throw _createConnectionError(pigeonVar_channelName);
|
||||
} else if (pigeonVar_replyList.length > 1) {
|
||||
@@ -822,18 +807,16 @@ class UniversalBlePlatformChannel {
|
||||
|
||||
Future<List<UniversalBleService>> discoverServices(
|
||||
String deviceId, bool withDescriptors) async {
|
||||
final String pigeonVar_channelName =
|
||||
final pigeonVar_channelName =
|
||||
'dev.flutter.pigeon.universal_ble.UniversalBlePlatformChannel.discoverServices$pigeonVar_messageChannelSuffix';
|
||||
final BasicMessageChannel<Object?> pigeonVar_channel =
|
||||
BasicMessageChannel<Object?>(
|
||||
final pigeonVar_channel = BasicMessageChannel<Object?>(
|
||||
pigeonVar_channelName,
|
||||
pigeonChannelCodec,
|
||||
binaryMessenger: pigeonVar_binaryMessenger,
|
||||
);
|
||||
final Future<Object?> pigeonVar_sendFuture =
|
||||
pigeonVar_channel.send(<Object?>[deviceId, withDescriptors]);
|
||||
final List<Object?>? pigeonVar_replyList =
|
||||
await pigeonVar_sendFuture as List<Object?>?;
|
||||
final pigeonVar_replyList = await pigeonVar_sendFuture as List<Object?>?;
|
||||
if (pigeonVar_replyList == null) {
|
||||
throw _createConnectionError(pigeonVar_channelName);
|
||||
} else if (pigeonVar_replyList.length > 1) {
|
||||
@@ -855,18 +838,16 @@ class UniversalBlePlatformChannel {
|
||||
|
||||
Future<Uint8List> readValue(
|
||||
String deviceId, String service, String characteristic) async {
|
||||
final String pigeonVar_channelName =
|
||||
final pigeonVar_channelName =
|
||||
'dev.flutter.pigeon.universal_ble.UniversalBlePlatformChannel.readValue$pigeonVar_messageChannelSuffix';
|
||||
final BasicMessageChannel<Object?> pigeonVar_channel =
|
||||
BasicMessageChannel<Object?>(
|
||||
final pigeonVar_channel = BasicMessageChannel<Object?>(
|
||||
pigeonVar_channelName,
|
||||
pigeonChannelCodec,
|
||||
binaryMessenger: pigeonVar_binaryMessenger,
|
||||
);
|
||||
final Future<Object?> pigeonVar_sendFuture =
|
||||
pigeonVar_channel.send(<Object?>[deviceId, service, characteristic]);
|
||||
final List<Object?>? pigeonVar_replyList =
|
||||
await pigeonVar_sendFuture as List<Object?>?;
|
||||
final pigeonVar_replyList = await pigeonVar_sendFuture as List<Object?>?;
|
||||
if (pigeonVar_replyList == null) {
|
||||
throw _createConnectionError(pigeonVar_channelName);
|
||||
} else if (pigeonVar_replyList.length > 1) {
|
||||
@@ -886,18 +867,16 @@ class UniversalBlePlatformChannel {
|
||||
}
|
||||
|
||||
Future<int> requestMtu(String deviceId, int expectedMtu) async {
|
||||
final String pigeonVar_channelName =
|
||||
final pigeonVar_channelName =
|
||||
'dev.flutter.pigeon.universal_ble.UniversalBlePlatformChannel.requestMtu$pigeonVar_messageChannelSuffix';
|
||||
final BasicMessageChannel<Object?> pigeonVar_channel =
|
||||
BasicMessageChannel<Object?>(
|
||||
final pigeonVar_channel = BasicMessageChannel<Object?>(
|
||||
pigeonVar_channelName,
|
||||
pigeonChannelCodec,
|
||||
binaryMessenger: pigeonVar_binaryMessenger,
|
||||
);
|
||||
final Future<Object?> pigeonVar_sendFuture =
|
||||
pigeonVar_channel.send(<Object?>[deviceId, expectedMtu]);
|
||||
final List<Object?>? pigeonVar_replyList =
|
||||
await pigeonVar_sendFuture as List<Object?>?;
|
||||
final pigeonVar_replyList = await pigeonVar_sendFuture as List<Object?>?;
|
||||
if (pigeonVar_replyList == null) {
|
||||
throw _createConnectionError(pigeonVar_channelName);
|
||||
} else if (pigeonVar_replyList.length > 1) {
|
||||
@@ -918,18 +897,16 @@ class UniversalBlePlatformChannel {
|
||||
|
||||
Future<void> writeValue(String deviceId, String service,
|
||||
String characteristic, Uint8List value, int bleOutputProperty) async {
|
||||
final String pigeonVar_channelName =
|
||||
final pigeonVar_channelName =
|
||||
'dev.flutter.pigeon.universal_ble.UniversalBlePlatformChannel.writeValue$pigeonVar_messageChannelSuffix';
|
||||
final BasicMessageChannel<Object?> pigeonVar_channel =
|
||||
BasicMessageChannel<Object?>(
|
||||
final pigeonVar_channel = BasicMessageChannel<Object?>(
|
||||
pigeonVar_channelName,
|
||||
pigeonChannelCodec,
|
||||
binaryMessenger: pigeonVar_binaryMessenger,
|
||||
);
|
||||
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(
|
||||
<Object?>[deviceId, service, characteristic, value, bleOutputProperty]);
|
||||
final List<Object?>? pigeonVar_replyList =
|
||||
await pigeonVar_sendFuture as List<Object?>?;
|
||||
final pigeonVar_replyList = await pigeonVar_sendFuture as List<Object?>?;
|
||||
if (pigeonVar_replyList == null) {
|
||||
throw _createConnectionError(pigeonVar_channelName);
|
||||
} else if (pigeonVar_replyList.length > 1) {
|
||||
@@ -944,18 +921,16 @@ class UniversalBlePlatformChannel {
|
||||
}
|
||||
|
||||
Future<bool> isPaired(String deviceId) async {
|
||||
final String pigeonVar_channelName =
|
||||
final pigeonVar_channelName =
|
||||
'dev.flutter.pigeon.universal_ble.UniversalBlePlatformChannel.isPaired$pigeonVar_messageChannelSuffix';
|
||||
final BasicMessageChannel<Object?> pigeonVar_channel =
|
||||
BasicMessageChannel<Object?>(
|
||||
final pigeonVar_channel = BasicMessageChannel<Object?>(
|
||||
pigeonVar_channelName,
|
||||
pigeonChannelCodec,
|
||||
binaryMessenger: pigeonVar_binaryMessenger,
|
||||
);
|
||||
final Future<Object?> pigeonVar_sendFuture =
|
||||
pigeonVar_channel.send(<Object?>[deviceId]);
|
||||
final List<Object?>? pigeonVar_replyList =
|
||||
await pigeonVar_sendFuture as List<Object?>?;
|
||||
final pigeonVar_replyList = await pigeonVar_sendFuture as List<Object?>?;
|
||||
if (pigeonVar_replyList == null) {
|
||||
throw _createConnectionError(pigeonVar_channelName);
|
||||
} else if (pigeonVar_replyList.length > 1) {
|
||||
@@ -975,18 +950,16 @@ class UniversalBlePlatformChannel {
|
||||
}
|
||||
|
||||
Future<bool> pair(String deviceId) async {
|
||||
final String pigeonVar_channelName =
|
||||
final pigeonVar_channelName =
|
||||
'dev.flutter.pigeon.universal_ble.UniversalBlePlatformChannel.pair$pigeonVar_messageChannelSuffix';
|
||||
final BasicMessageChannel<Object?> pigeonVar_channel =
|
||||
BasicMessageChannel<Object?>(
|
||||
final pigeonVar_channel = BasicMessageChannel<Object?>(
|
||||
pigeonVar_channelName,
|
||||
pigeonChannelCodec,
|
||||
binaryMessenger: pigeonVar_binaryMessenger,
|
||||
);
|
||||
final Future<Object?> pigeonVar_sendFuture =
|
||||
pigeonVar_channel.send(<Object?>[deviceId]);
|
||||
final List<Object?>? pigeonVar_replyList =
|
||||
await pigeonVar_sendFuture as List<Object?>?;
|
||||
final pigeonVar_replyList = await pigeonVar_sendFuture as List<Object?>?;
|
||||
if (pigeonVar_replyList == null) {
|
||||
throw _createConnectionError(pigeonVar_channelName);
|
||||
} else if (pigeonVar_replyList.length > 1) {
|
||||
@@ -1006,18 +979,16 @@ class UniversalBlePlatformChannel {
|
||||
}
|
||||
|
||||
Future<void> unPair(String deviceId) async {
|
||||
final String pigeonVar_channelName =
|
||||
final pigeonVar_channelName =
|
||||
'dev.flutter.pigeon.universal_ble.UniversalBlePlatformChannel.unPair$pigeonVar_messageChannelSuffix';
|
||||
final BasicMessageChannel<Object?> pigeonVar_channel =
|
||||
BasicMessageChannel<Object?>(
|
||||
final pigeonVar_channel = BasicMessageChannel<Object?>(
|
||||
pigeonVar_channelName,
|
||||
pigeonChannelCodec,
|
||||
binaryMessenger: pigeonVar_binaryMessenger,
|
||||
);
|
||||
final Future<Object?> pigeonVar_sendFuture =
|
||||
pigeonVar_channel.send(<Object?>[deviceId]);
|
||||
final List<Object?>? pigeonVar_replyList =
|
||||
await pigeonVar_sendFuture as List<Object?>?;
|
||||
final pigeonVar_replyList = await pigeonVar_sendFuture as List<Object?>?;
|
||||
if (pigeonVar_replyList == null) {
|
||||
throw _createConnectionError(pigeonVar_channelName);
|
||||
} else if (pigeonVar_replyList.length > 1) {
|
||||
@@ -1033,18 +1004,16 @@ class UniversalBlePlatformChannel {
|
||||
|
||||
Future<List<UniversalBleScanResult>> getSystemDevices(
|
||||
List<String> withServices) async {
|
||||
final String pigeonVar_channelName =
|
||||
final pigeonVar_channelName =
|
||||
'dev.flutter.pigeon.universal_ble.UniversalBlePlatformChannel.getSystemDevices$pigeonVar_messageChannelSuffix';
|
||||
final BasicMessageChannel<Object?> pigeonVar_channel =
|
||||
BasicMessageChannel<Object?>(
|
||||
final pigeonVar_channel = BasicMessageChannel<Object?>(
|
||||
pigeonVar_channelName,
|
||||
pigeonChannelCodec,
|
||||
binaryMessenger: pigeonVar_binaryMessenger,
|
||||
);
|
||||
final Future<Object?> pigeonVar_sendFuture =
|
||||
pigeonVar_channel.send(<Object?>[withServices]);
|
||||
final List<Object?>? pigeonVar_replyList =
|
||||
await pigeonVar_sendFuture as List<Object?>?;
|
||||
final pigeonVar_replyList = await pigeonVar_sendFuture as List<Object?>?;
|
||||
if (pigeonVar_replyList == null) {
|
||||
throw _createConnectionError(pigeonVar_channelName);
|
||||
} else if (pigeonVar_replyList.length > 1) {
|
||||
@@ -1065,18 +1034,16 @@ class UniversalBlePlatformChannel {
|
||||
}
|
||||
|
||||
Future<int> getConnectionState(String deviceId) async {
|
||||
final String pigeonVar_channelName =
|
||||
final pigeonVar_channelName =
|
||||
'dev.flutter.pigeon.universal_ble.UniversalBlePlatformChannel.getConnectionState$pigeonVar_messageChannelSuffix';
|
||||
final BasicMessageChannel<Object?> pigeonVar_channel =
|
||||
BasicMessageChannel<Object?>(
|
||||
final pigeonVar_channel = BasicMessageChannel<Object?>(
|
||||
pigeonVar_channelName,
|
||||
pigeonChannelCodec,
|
||||
binaryMessenger: pigeonVar_binaryMessenger,
|
||||
);
|
||||
final Future<Object?> pigeonVar_sendFuture =
|
||||
pigeonVar_channel.send(<Object?>[deviceId]);
|
||||
final List<Object?>? pigeonVar_replyList =
|
||||
await pigeonVar_sendFuture as List<Object?>?;
|
||||
final pigeonVar_replyList = await pigeonVar_sendFuture as List<Object?>?;
|
||||
if (pigeonVar_replyList == null) {
|
||||
throw _createConnectionError(pigeonVar_channelName);
|
||||
} else if (pigeonVar_replyList.length > 1) {
|
||||
@@ -1119,9 +1086,7 @@ abstract class UniversalBleCallbackChannel {
|
||||
messageChannelSuffix =
|
||||
messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : '';
|
||||
{
|
||||
final BasicMessageChannel<
|
||||
Object?> pigeonVar_channel = BasicMessageChannel<
|
||||
Object?>(
|
||||
final pigeonVar_channel = BasicMessageChannel<Object?>(
|
||||
'dev.flutter.pigeon.universal_ble.UniversalBleCallbackChannel.onAvailabilityChanged$messageChannelSuffix',
|
||||
pigeonChannelCodec,
|
||||
binaryMessenger: binaryMessenger);
|
||||
@@ -1148,9 +1113,7 @@ abstract class UniversalBleCallbackChannel {
|
||||
}
|
||||
}
|
||||
{
|
||||
final BasicMessageChannel<
|
||||
Object?> pigeonVar_channel = BasicMessageChannel<
|
||||
Object?>(
|
||||
final pigeonVar_channel = BasicMessageChannel<Object?>(
|
||||
'dev.flutter.pigeon.universal_ble.UniversalBleCallbackChannel.onPairStateChange$messageChannelSuffix',
|
||||
pigeonChannelCodec,
|
||||
binaryMessenger: binaryMessenger);
|
||||
@@ -1181,9 +1144,7 @@ abstract class UniversalBleCallbackChannel {
|
||||
}
|
||||
}
|
||||
{
|
||||
final BasicMessageChannel<
|
||||
Object?> pigeonVar_channel = BasicMessageChannel<
|
||||
Object?>(
|
||||
final pigeonVar_channel = BasicMessageChannel<Object?>(
|
||||
'dev.flutter.pigeon.universal_ble.UniversalBleCallbackChannel.onScanResult$messageChannelSuffix',
|
||||
pigeonChannelCodec,
|
||||
binaryMessenger: binaryMessenger);
|
||||
@@ -1211,9 +1172,7 @@ abstract class UniversalBleCallbackChannel {
|
||||
}
|
||||
}
|
||||
{
|
||||
final BasicMessageChannel<
|
||||
Object?> pigeonVar_channel = BasicMessageChannel<
|
||||
Object?>(
|
||||
final pigeonVar_channel = BasicMessageChannel<Object?>(
|
||||
'dev.flutter.pigeon.universal_ble.UniversalBleCallbackChannel.onValueChanged$messageChannelSuffix',
|
||||
pigeonChannelCodec,
|
||||
binaryMessenger: binaryMessenger);
|
||||
@@ -1247,9 +1206,7 @@ abstract class UniversalBleCallbackChannel {
|
||||
}
|
||||
}
|
||||
{
|
||||
final BasicMessageChannel<
|
||||
Object?> pigeonVar_channel = BasicMessageChannel<
|
||||
Object?>(
|
||||
final pigeonVar_channel = BasicMessageChannel<Object?>(
|
||||
'dev.flutter.pigeon.universal_ble.UniversalBleCallbackChannel.onConnectionChanged$messageChannelSuffix',
|
||||
pigeonChannelCodec,
|
||||
binaryMessenger: binaryMessenger);
|
||||
|
||||
@@ -270,6 +270,7 @@ extension _UniversalBleScanResultExtension on UniversalBleScanResult {
|
||||
paired: isPaired,
|
||||
isSystemDevice: isSystemDevice,
|
||||
services: services?.map(BleUuidParser.string).toList() ?? [],
|
||||
timestamp: timestamp,
|
||||
manufacturerDataList: manufacturerDataList
|
||||
?.map((e) => ManufacturerData(e.companyIdentifier, e.data))
|
||||
.toList() ??
|
||||
|
||||
@@ -499,6 +499,7 @@ extension _BluetoothDeviceExtension on BluetoothDevice {
|
||||
manufacturerDataList: manufacturerDataMap?.toManufacturerDataList() ?? [],
|
||||
rssi: rssi,
|
||||
services: services,
|
||||
timestamp: DateTime.now().millisecondsSinceEpoch,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -121,6 +121,7 @@ class UniversalBleScanResult {
|
||||
final int? rssi;
|
||||
final List<UniversalManufacturerData>? manufacturerDataList;
|
||||
final List<String>? services;
|
||||
final int? timestamp;
|
||||
|
||||
UniversalBleScanResult({
|
||||
required this.name,
|
||||
@@ -129,6 +130,7 @@ class UniversalBleScanResult {
|
||||
required this.rssi,
|
||||
required this.manufacturerDataList,
|
||||
required this.services,
|
||||
required this.timestamp,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -38,7 +38,7 @@ dev_dependencies:
|
||||
flutter_test:
|
||||
sdk: flutter
|
||||
flutter_lints: ^6.0.0
|
||||
pigeon: ^26.1.0
|
||||
pigeon: ^26.1.4
|
||||
|
||||
flutter:
|
||||
plugin:
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Autogenerated from Pigeon (v26.1.0), do not edit directly.
|
||||
// Autogenerated from Pigeon (v26.1.4), do not edit directly.
|
||||
// See also: https://pub.dev/packages/pigeon
|
||||
|
||||
#undef _HAS_EXCEPTIONS
|
||||
@@ -39,13 +39,15 @@ UniversalBleScanResult::UniversalBleScanResult(
|
||||
const bool* is_paired,
|
||||
const int64_t* rssi,
|
||||
const EncodableList* manufacturer_data_list,
|
||||
const EncodableList* services)
|
||||
const EncodableList* services,
|
||||
const int64_t* timestamp)
|
||||
: device_id_(device_id),
|
||||
name_(name ? std::optional<std::string>(*name) : std::nullopt),
|
||||
is_paired_(is_paired ? std::optional<bool>(*is_paired) : std::nullopt),
|
||||
rssi_(rssi ? std::optional<int64_t>(*rssi) : std::nullopt),
|
||||
manufacturer_data_list_(manufacturer_data_list ? std::optional<EncodableList>(*manufacturer_data_list) : std::nullopt),
|
||||
services_(services ? std::optional<EncodableList>(*services) : std::nullopt) {}
|
||||
services_(services ? std::optional<EncodableList>(*services) : std::nullopt),
|
||||
timestamp_(timestamp ? std::optional<int64_t>(*timestamp) : std::nullopt) {}
|
||||
|
||||
const std::string& UniversalBleScanResult::device_id() const {
|
||||
return device_id_;
|
||||
@@ -121,15 +123,29 @@ void UniversalBleScanResult::set_services(const EncodableList& value_arg) {
|
||||
}
|
||||
|
||||
|
||||
const int64_t* UniversalBleScanResult::timestamp() const {
|
||||
return timestamp_ ? &(*timestamp_) : nullptr;
|
||||
}
|
||||
|
||||
void UniversalBleScanResult::set_timestamp(const int64_t* value_arg) {
|
||||
timestamp_ = value_arg ? std::optional<int64_t>(*value_arg) : std::nullopt;
|
||||
}
|
||||
|
||||
void UniversalBleScanResult::set_timestamp(int64_t value_arg) {
|
||||
timestamp_ = value_arg;
|
||||
}
|
||||
|
||||
|
||||
EncodableList UniversalBleScanResult::ToEncodableList() const {
|
||||
EncodableList list;
|
||||
list.reserve(6);
|
||||
list.reserve(7);
|
||||
list.push_back(EncodableValue(device_id_));
|
||||
list.push_back(name_ ? EncodableValue(*name_) : EncodableValue());
|
||||
list.push_back(is_paired_ ? EncodableValue(*is_paired_) : EncodableValue());
|
||||
list.push_back(rssi_ ? EncodableValue(*rssi_) : EncodableValue());
|
||||
list.push_back(manufacturer_data_list_ ? EncodableValue(*manufacturer_data_list_) : EncodableValue());
|
||||
list.push_back(services_ ? EncodableValue(*services_) : EncodableValue());
|
||||
list.push_back(timestamp_ ? EncodableValue(*timestamp_) : EncodableValue());
|
||||
return list;
|
||||
}
|
||||
|
||||
@@ -156,6 +172,10 @@ UniversalBleScanResult UniversalBleScanResult::FromEncodableList(const Encodable
|
||||
if (!encodable_services.IsNull()) {
|
||||
decoded.set_services(std::get<EncodableList>(encodable_services));
|
||||
}
|
||||
auto& encodable_timestamp = list[6];
|
||||
if (!encodable_timestamp.IsNull()) {
|
||||
decoded.set_timestamp(std::get<int64_t>(encodable_timestamp));
|
||||
}
|
||||
return decoded;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Autogenerated from Pigeon (v26.1.0), do not edit directly.
|
||||
// Autogenerated from Pigeon (v26.1.4), do not edit directly.
|
||||
// See also: https://pub.dev/packages/pigeon
|
||||
|
||||
#ifndef PIGEON_UNIVERSAL_BLE_G_H_
|
||||
@@ -136,7 +136,8 @@ class UniversalBleScanResult {
|
||||
const bool* is_paired,
|
||||
const int64_t* rssi,
|
||||
const flutter::EncodableList* manufacturer_data_list,
|
||||
const flutter::EncodableList* services);
|
||||
const flutter::EncodableList* services,
|
||||
const int64_t* timestamp);
|
||||
|
||||
const std::string& device_id() const;
|
||||
void set_device_id(std::string_view value_arg);
|
||||
@@ -161,6 +162,10 @@ class UniversalBleScanResult {
|
||||
void set_services(const flutter::EncodableList* value_arg);
|
||||
void set_services(const flutter::EncodableList& value_arg);
|
||||
|
||||
const int64_t* timestamp() const;
|
||||
void set_timestamp(const int64_t* value_arg);
|
||||
void set_timestamp(int64_t value_arg);
|
||||
|
||||
private:
|
||||
static UniversalBleScanResult FromEncodableList(const flutter::EncodableList& list);
|
||||
flutter::EncodableList ToEncodableList() const;
|
||||
@@ -173,6 +178,7 @@ class UniversalBleScanResult {
|
||||
std::optional<int64_t> rssi_;
|
||||
std::optional<flutter::EncodableList> manufacturer_data_list_;
|
||||
std::optional<flutter::EncodableList> services_;
|
||||
std::optional<int64_t> timestamp_;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -678,6 +678,10 @@ void UniversalBlePlugin::PushUniversalScanResult(
|
||||
|
||||
// Filter final result before sending to Flutter
|
||||
if (is_connectable && filterDevice(scan_result)) {
|
||||
scan_result.set_timestamp(
|
||||
std::chrono::duration_cast<std::chrono::milliseconds>(
|
||||
std::chrono::system_clock::now().time_since_epoch())
|
||||
.count());
|
||||
ui_thread_handler_.Post([scan_result] {
|
||||
callback_channel->OnScanResult(scan_result, SuccessCallback,
|
||||
ErrorCallback);
|
||||
|
||||
Reference in New Issue
Block a user