Skip to content

Commit 83f9c27

Browse files
committed
Update AndroidCentral.LowEnergyScanCallback
1 parent b5266e9 commit 83f9c27

File tree

2 files changed

+66
-41
lines changed

2 files changed

+66
-41
lines changed

Sources/AndroidBluetooth/AndroidCentralCallback.swift

Lines changed: 65 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -22,58 +22,83 @@ extension AndroidCentral {
2222

2323
weak var central: AndroidCentral?
2424

25-
/*
26-
public override func onScanResult(
27-
callbackType: Android.Bluetooth.LE.ScanCallbackType,
28-
result: Android.Bluetooth.LE.ScanResult
29-
) {
30-
31-
central?.log?("\(type(of: self)) \(#function) name: \(result.device.getName() ?? "") address: \(result.device.address)")
32-
33-
let scanData = ScanData(result)
34-
25+
init(central: AndroidCentral, environment: JNIEnvironment?) {
26+
self.central = central
27+
}
28+
}
29+
}
30+
31+
@JavaImplementation("org.pureswift.bluetooth.le.ScanCallback")
32+
extension AndroidCentral.LowEnergyScanCallback {
33+
34+
@JavaMethod
35+
func onScanResultSwift(_ error: Int32, _ result: AndroidBluetooth.ScanResult?) {
36+
guard let central else {
37+
return
38+
}
39+
central.log?("\(type(of: self)): \(#function) name: \(result.getDevice().getName() ?? "") address: \(result.getDevice().getAddress())")
40+
guard let result, let scanData = try? ScanData(result) else {
41+
assertionFailure()
42+
return
43+
}
44+
Task {
45+
await central.storage.update { state in
46+
state.scan.continuation?.yield(scanData)
47+
state.scan.peripherals[scanData.peripheral] = InternalState.Scan.Device(
48+
scanData: scanData,
49+
scanResult: result
50+
)
51+
}
52+
}
53+
}
54+
55+
@JavaMethod
56+
func onBatchScanResultsSwift(results: [AndroidBluetooth.ScanResult?]) {
57+
guard let central else {
58+
return
59+
}
60+
central.log?("\(type(of: self)): \(#function)")
61+
for result in results {
62+
guard let result, let scanData = try? ScanData(result) else {
63+
assertionFailure()
64+
return
65+
}
3566
Task {
36-
await central?.storage.update { state in
67+
await central.storage.update { state in
3768
state.scan.continuation?.yield(scanData)
38-
state.scan.peripherals[scanData.peripheral] = InternalState.Scan.Device(
69+
state.scan.peripherals[scanData.peripheral] = AndroidCentral.InternalState.Scan.Device(
3970
scanData: scanData,
4071
scanResult: result
4172
)
4273
}
4374
}
4475
}
76+
}
77+
78+
@JavaMethod
79+
func onScanFailedSwift(error: Int32) {
4580

46-
public override func onBatchScanResults(results: [Android.Bluetooth.LE.ScanResult]) {
47-
48-
central?.log?("\(type(of: self)): \(#function)")
49-
50-
for result in results {
51-
52-
let scanData = ScanData(result)
53-
54-
Task {
55-
await central?.storage.update { state in
56-
state.scan.continuation?.yield(scanData)
57-
state.scan.peripherals[scanData.peripheral] = InternalState.Scan.Device(
58-
scanData: scanData,
59-
scanResult: result
60-
)
61-
}
62-
}
63-
}
64-
}
81+
central?.log?("\(type(of: self)): \(#function)")
6582

66-
public override func onScanFailed(error: AndroidBluetoothLowEnergyScanCallback.Error) {
67-
68-
central?.log?("\(type(of: self)): \(#function)")
69-
70-
Task {
71-
await central?.storage.update { state in
72-
state.scan.continuation?.finish(throwing: error)
73-
}
83+
// TODO: Map error codes
84+
let error = AndroidCentralError.scanFailed(error)
85+
86+
/*
87+
static var SCAN_FAILED_ALREADY_STARTED
88+
static var SCAN_FAILED_APPLICATION_REGISTRATION_FAILED
89+
static var SCAN_FAILED_FEATURE_UNSUPPORTED
90+
static var SCAN_FAILED_INTERNAL_ERROR
91+
*/
92+
93+
Task {
94+
await central?.storage.update { state in
95+
state.scan.continuation?.finish(throwing: error)
7496
}
75-
}*/
97+
}
7698
}
99+
}
100+
101+
extension AndroidCentral {
77102

78103
@JavaClass("org.pureswift.bluetooth.BluetoothGattCallback")
79104
internal class GattCallback: AndroidBluetooth.BluetoothGattCallback {

Sources/AndroidBluetooth/AndroidCentralState.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ internal extension AndroidCentral {
6666

6767
let gatt: BluetoothGatt
6868

69-
fileprivate(set) var maximumTransmissionUnit: MaximumTransmissionUnit = .default
69+
var maximumTransmissionUnit: MaximumTransmissionUnit = .default
7070

7171
var services = Services()
7272

0 commit comments

Comments
 (0)