react-native-ble-nitro 1.5.0 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -12
- package/android/src/main/java/com/margelo/nitro/co/zyke/ble/BleNitroBleManager.kt +12 -5
- package/android/src/main/java/com/margelo/nitro/co/zyke/ble/BleNitroBleManagerFactory.kt +21 -0
- package/ios/BleNitroBleManager.swift +37 -24
- package/ios/BleNitroBleManagerFactory.swift +19 -0
- package/lib/commonjs/index.d.ts +2 -5
- package/lib/commonjs/index.d.ts.map +1 -1
- package/lib/commonjs/index.js +7 -15
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/manager.d.ts +43 -12
- package/lib/commonjs/manager.d.ts.map +1 -1
- package/lib/commonjs/manager.js +107 -43
- package/lib/commonjs/manager.js.map +1 -1
- package/lib/commonjs/singleton.d.ts +10 -0
- package/lib/commonjs/singleton.d.ts.map +1 -0
- package/lib/commonjs/singleton.js +20 -0
- package/lib/commonjs/singleton.js.map +1 -0
- package/lib/commonjs/specs/NativeBleNitro.d.ts +1 -1
- package/lib/commonjs/specs/NativeBleNitro.d.ts.map +1 -1
- package/lib/commonjs/specs/NativeBleNitro.js +1 -0
- package/lib/commonjs/specs/NativeBleNitro.js.map +1 -1
- package/lib/commonjs/specs/NativeBleNitro.nitro.d.ts +3 -1
- package/lib/commonjs/specs/NativeBleNitro.nitro.d.ts.map +1 -1
- package/lib/commonjs/specs/NativeBleNitro.nitro.js.map +1 -1
- package/lib/commonjs/specs/NativeBleNitroFactory.d.ts +5 -0
- package/lib/commonjs/specs/NativeBleNitroFactory.d.ts.map +1 -0
- package/lib/commonjs/specs/NativeBleNitroFactory.js +23 -0
- package/lib/commonjs/specs/NativeBleNitroFactory.js.map +1 -0
- package/lib/commonjs/specs/NativeBleNitroFactory.nitro.d.ts +9 -0
- package/lib/commonjs/specs/NativeBleNitroFactory.nitro.d.ts.map +1 -0
- package/lib/commonjs/specs/NativeBleNitroFactory.nitro.js +3 -0
- package/lib/commonjs/specs/NativeBleNitroFactory.nitro.js.map +1 -0
- package/lib/index.d.ts +2 -5
- package/lib/index.js +2 -11
- package/lib/manager.d.ts +43 -12
- package/lib/manager.js +100 -38
- package/lib/singleton.d.ts +9 -0
- package/lib/singleton.js +15 -0
- package/lib/specs/NativeBleNitro.d.ts +1 -1
- package/lib/specs/NativeBleNitro.js +1 -0
- package/lib/specs/NativeBleNitro.nitro.d.ts +3 -1
- package/lib/specs/NativeBleNitroFactory.d.ts +4 -0
- package/lib/specs/NativeBleNitroFactory.js +6 -0
- package/lib/specs/NativeBleNitroFactory.nitro.d.ts +8 -0
- package/lib/specs/NativeBleNitroFactory.nitro.js +1 -0
- package/nitro.json +4 -0
- package/nitrogen/generated/android/BleNitro+autolinking.cmake +2 -0
- package/nitrogen/generated/android/BleNitroOnLoad.cpp +11 -0
- package/nitrogen/generated/android/c++/JBLEDevice.hpp +6 -2
- package/nitrogen/generated/android/c++/JFunc_void_std__vector_BLEDevice_.hpp +12 -12
- package/nitrogen/generated/android/c++/JHybridNativeBleNitroFactorySpec.cpp +71 -0
- package/nitrogen/generated/android/c++/JHybridNativeBleNitroFactorySpec.hpp +64 -0
- package/nitrogen/generated/android/c++/JHybridNativeBleNitroSpec.cpp +14 -6
- package/nitrogen/generated/android/c++/JHybridNativeBleNitroSpec.hpp +3 -2
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/BLEDevice.kt +4 -1
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/Func_void_std__vector_BLEDevice_.kt +9 -9
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/HybridNativeBleNitroFactorySpec.kt +57 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/HybridNativeBleNitroSpec.kt +8 -4
- package/nitrogen/generated/ios/BleNitro-Swift-Cxx-Bridge.cpp +17 -0
- package/nitrogen/generated/ios/BleNitro-Swift-Cxx-Bridge.hpp +53 -9
- package/nitrogen/generated/ios/BleNitro-Swift-Cxx-Umbrella.hpp +5 -0
- package/nitrogen/generated/ios/BleNitroAutolinking.mm +8 -0
- package/nitrogen/generated/ios/BleNitroAutolinking.swift +15 -0
- package/nitrogen/generated/ios/c++/HybridNativeBleNitroFactorySpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridNativeBleNitroFactorySpecSwift.hpp +94 -0
- package/nitrogen/generated/ios/c++/HybridNativeBleNitroSpecSwift.hpp +11 -5
- package/nitrogen/generated/ios/swift/BLEDevice.swift +13 -2
- package/nitrogen/generated/ios/swift/Func_void_std__vector_BLEDevice_.swift +5 -5
- package/nitrogen/generated/ios/swift/HybridNativeBleNitroFactorySpec.swift +49 -0
- package/nitrogen/generated/ios/swift/HybridNativeBleNitroFactorySpec_cxx.swift +149 -0
- package/nitrogen/generated/ios/swift/HybridNativeBleNitroSpec.swift +2 -2
- package/nitrogen/generated/ios/swift/HybridNativeBleNitroSpec_cxx.swift +24 -3
- package/nitrogen/generated/shared/c++/BLEDevice.hpp +6 -2
- package/nitrogen/generated/shared/c++/HybridNativeBleNitroFactorySpec.cpp +21 -0
- package/nitrogen/generated/shared/c++/HybridNativeBleNitroFactorySpec.hpp +71 -0
- package/nitrogen/generated/shared/c++/HybridNativeBleNitroSpec.cpp +2 -0
- package/nitrogen/generated/shared/c++/HybridNativeBleNitroSpec.hpp +5 -4
- package/package.json +9 -1
- package/src/__tests__/index.test.ts +53 -43
- package/src/index.ts +2 -13
- package/src/manager.ts +107 -38
- package/src/singleton.ts +17 -0
- package/src/specs/NativeBleNitro.nitro.ts +3 -1
- package/src/specs/NativeBleNitro.ts +2 -1
- package/src/specs/NativeBleNitroFactory.nitro.ts +6 -0
- package/src/specs/NativeBleNitroFactory.ts +9 -0
package/README.md
CHANGED
|
@@ -73,6 +73,15 @@ import { BleNitro, BLEState, AndroidScanMode, type BLEDevice } from 'react-nativ
|
|
|
73
73
|
|
|
74
74
|
// Get the singleton instance
|
|
75
75
|
const ble = BleNitro.instance();
|
|
76
|
+
|
|
77
|
+
// Use custom manager instance (e.g. for iOS state restoration)
|
|
78
|
+
// It is recommended to create this instance in an extra file seperated from other BLE business logic for better fast-refresh support
|
|
79
|
+
const ble = new BleNitroManager({
|
|
80
|
+
restoreStateIdentifier: 'my-unique-identifier',
|
|
81
|
+
onRestoreState: (peripherals) => {
|
|
82
|
+
console.log('Restored peripherals:', peripherals);
|
|
83
|
+
},
|
|
84
|
+
});
|
|
76
85
|
```
|
|
77
86
|
|
|
78
87
|
### Complete API Reference
|
|
@@ -145,6 +154,21 @@ const deviceId = await ble.connect(deviceId, (deviceId, interrupted, error) => {
|
|
|
145
154
|
// Connect without disconnect callback
|
|
146
155
|
const deviceId = await ble.connect(deviceId);
|
|
147
156
|
|
|
157
|
+
// You can also use findAndConnect to scan and connect in one step
|
|
158
|
+
// This could be useful for reconnecting after app restart or when device was disconnected unexpectedly
|
|
159
|
+
const deviceId = await ble.findAndConnect(deviceId, {
|
|
160
|
+
scanTimeout: 4000, // default 5000ms
|
|
161
|
+
onDisconnect: (deviceId, interrupted, error) => {
|
|
162
|
+
if (interrupted) {
|
|
163
|
+
console.log('Connection interrupted:', error);
|
|
164
|
+
// Handle unexpected disconnection (out of range, etc.)
|
|
165
|
+
} else {
|
|
166
|
+
console.log('Disconnected intentionally');
|
|
167
|
+
// Handle normal disconnection
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
|
|
148
172
|
// Disconnect from a device
|
|
149
173
|
await ble.disconnect(deviceId);
|
|
150
174
|
|
|
@@ -185,6 +209,10 @@ const characteristics = ble.getCharacteristics(deviceId, serviceUUID);
|
|
|
185
209
|
const characteristics1 = ble.getCharacteristics(deviceId, '180d'); // Short form
|
|
186
210
|
const characteristics2 = ble.getCharacteristics(deviceId, '0000180d-0000-1000-8000-00805f9b34fb'); // Long form
|
|
187
211
|
// Both work identically - conversion handled automatically
|
|
212
|
+
|
|
213
|
+
// Get services with their characteristics
|
|
214
|
+
const servicesWithCharacteristics = await ble.getServicesWithCharacteristics(deviceId);
|
|
215
|
+
// Returns: [{ uuid: '0000180d-0000-1000-8000-00805f9b34fb', characteristics: ['00002a37-0000-1000-8000-00805f9b34fb', ...] }, ...]
|
|
188
216
|
```
|
|
189
217
|
|
|
190
218
|
#### 📖 Reading Characteristics
|
|
@@ -256,7 +284,16 @@ const HEART_RATE_SERVICE = '180d';
|
|
|
256
284
|
const HEART_RATE_MEASUREMENT = '2a37';
|
|
257
285
|
|
|
258
286
|
// Connect and subscribe to heart rate
|
|
259
|
-
const
|
|
287
|
+
const autoConnectOnAndroid = true; // Optional: auto-reconnect on Android
|
|
288
|
+
const deviceId = await ble.connect(
|
|
289
|
+
heartRateDeviceId,
|
|
290
|
+
(deviceId, interrupted, error) => {
|
|
291
|
+
console.log('Device got Disconnected');
|
|
292
|
+
console.log('Was Interrupted?', interrupted);
|
|
293
|
+
console.log('Error:', error);
|
|
294
|
+
},
|
|
295
|
+
autoConnectOnAndroid,
|
|
296
|
+
);
|
|
260
297
|
await ble.discoverServices(deviceId);
|
|
261
298
|
|
|
262
299
|
const subscription = ble.subscribeToCharacteristic(
|
|
@@ -336,28 +373,35 @@ const fullUUIDs = BleNitro.normalizeGattUUIDs(['180d', '180f']);
|
|
|
336
373
|
|
|
337
374
|
### iOS Restore State
|
|
338
375
|
|
|
339
|
-
There
|
|
376
|
+
There is built-in support for iOS state restoration. You need to provide a unique identifier and a callback to handle restored peripherals. If no unique identifier is provided, state restoration is disabled.
|
|
340
377
|
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
const ble = BleNitro.instance();
|
|
344
|
-
ble.onRestoreState((peripherals) => {
|
|
345
|
-
console.log('Restored peripherals:', peripherals);
|
|
346
|
-
});
|
|
347
|
-
```
|
|
378
|
+
> [!CAUTION]
|
|
379
|
+
> From 1.7.0 on you have to create your own instance of `BleNitroManager` if you want to use state restoration. The singleton `BleNitro.instance()` will not have state restoration enabled by default anymore.
|
|
348
380
|
|
|
349
381
|
```typescript
|
|
350
|
-
|
|
351
|
-
// This way you have to assure that only one instance of BleNitroManager is created and that you always use this instance.
|
|
352
|
-
import { BleNitroManager, BLEDevice } from 'react-native-ble-nitro/manager';
|
|
382
|
+
import { BleNitroManager, BLEDevice } from 'react-native-ble-nitro';
|
|
353
383
|
|
|
354
384
|
const customBleInstance = new BleNitroManager({
|
|
385
|
+
restoreStateIdentifier: 'my-unique-identifier', // unique identifier for state restoration
|
|
355
386
|
onRestoreState: (peripherals: BLEDevice[]) => {
|
|
356
387
|
console.log('Restored peripherals:', peripherals);
|
|
388
|
+
// Handle restored peripherals
|
|
357
389
|
}
|
|
358
390
|
});
|
|
359
391
|
```
|
|
360
392
|
|
|
393
|
+
<details>
|
|
394
|
+
<summary><strong>Singleton Restore State before 1.7.0 (<= 1.6.0)</strong></summary>
|
|
395
|
+
|
|
396
|
+
```typescript
|
|
397
|
+
// Enable state restoration in BleNitro singleton
|
|
398
|
+
const ble = BleNitro.instance();
|
|
399
|
+
ble.onRestoreState((peripherals) => {
|
|
400
|
+
console.log('Restored peripherals:', peripherals);
|
|
401
|
+
});
|
|
402
|
+
```
|
|
403
|
+
</details>
|
|
404
|
+
|
|
361
405
|
### TypeScript Types
|
|
362
406
|
|
|
363
407
|
```typescript
|
|
@@ -33,7 +33,10 @@ import java.util.concurrent.ConcurrentHashMap
|
|
|
33
33
|
* This class provides the actual BLE functionality for Android devices
|
|
34
34
|
*/
|
|
35
35
|
class BleNitroBleManager : HybridNativeBleNitroSpec() {
|
|
36
|
-
|
|
36
|
+
|
|
37
|
+
// iOS-specific property (not used on Android)
|
|
38
|
+
override var restoreStateIdentifier: String? = null
|
|
39
|
+
|
|
37
40
|
private var bluetoothAdapter: BluetoothAdapter? = null
|
|
38
41
|
private var stateCallback: ((state: BLEState) -> Unit)? = null
|
|
39
42
|
private var bluetoothStateReceiver: BroadcastReceiver? = null
|
|
@@ -207,7 +210,8 @@ class BleNitroBleManager : HybridNativeBleNitroSpec() {
|
|
|
207
210
|
rssi = scanResult.rssi.toDouble(),
|
|
208
211
|
manufacturerData = manufacturerData,
|
|
209
212
|
serviceUUIDs = serviceUUIDs,
|
|
210
|
-
isConnectable = true // Assume scannable devices are connectable
|
|
213
|
+
isConnectable = true, // Assume scannable devices are connectable
|
|
214
|
+
isConnected = false // Scanned devices are not yet connected
|
|
211
215
|
)
|
|
212
216
|
}
|
|
213
217
|
|
|
@@ -491,7 +495,8 @@ class BleNitroBleManager : HybridNativeBleNitroSpec() {
|
|
|
491
495
|
rssi = 0.0, // RSSI not available for already connected devices
|
|
492
496
|
manufacturerData = ManufacturerData(companyIdentifiers = emptyArray()),
|
|
493
497
|
serviceUUIDs = emptyArray(), // Service UUIDs not available without service discovery
|
|
494
|
-
isConnectable = true
|
|
498
|
+
isConnectable = true,
|
|
499
|
+
isConnected = true
|
|
495
500
|
)
|
|
496
501
|
}.toTypedArray()
|
|
497
502
|
} catch (e: Exception) {
|
|
@@ -503,7 +508,8 @@ class BleNitroBleManager : HybridNativeBleNitroSpec() {
|
|
|
503
508
|
override fun connect(
|
|
504
509
|
deviceId: String,
|
|
505
510
|
callback: (success: Boolean, deviceId: String, error: String) -> Unit,
|
|
506
|
-
disconnectCallback: ((deviceId: String, interrupted: Boolean, error: String) -> Unit)
|
|
511
|
+
disconnectCallback: ((deviceId: String, interrupted: Boolean, error: String) -> Unit)?,
|
|
512
|
+
autoConnectAndroid: Boolean?
|
|
507
513
|
) {
|
|
508
514
|
try {
|
|
509
515
|
initializeBluetoothIfNeeded()
|
|
@@ -531,7 +537,8 @@ class BleNitroBleManager : HybridNativeBleNitroSpec() {
|
|
|
531
537
|
// Connect to device
|
|
532
538
|
val context = appContext
|
|
533
539
|
if (context != null) {
|
|
534
|
-
val
|
|
540
|
+
val autoConnect = autoConnectAndroid ?: false
|
|
541
|
+
val gatt = device.connectGatt(context, autoConnect, gattCallback)
|
|
535
542
|
connectedDevices[deviceId] = gatt
|
|
536
543
|
} else {
|
|
537
544
|
callback(false, deviceId, "Context not available")
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
package com.margelo.nitro.co.zyke.ble
|
|
2
|
+
|
|
3
|
+
import com.margelo.nitro.core.*
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Android Factory implementation for BLE Nitro Manager
|
|
7
|
+
* Creates BleNitroBleManager instances
|
|
8
|
+
*
|
|
9
|
+
* Note: restoreStateIdentifier and restoreStateCallback are iOS-specific
|
|
10
|
+
* and ignored on Android
|
|
11
|
+
*/
|
|
12
|
+
class BleNitroBleManagerFactory : HybridNativeBleNitroFactorySpec() {
|
|
13
|
+
|
|
14
|
+
override fun create(
|
|
15
|
+
nativeRestoreStateIdentifier: String?,
|
|
16
|
+
restoreStateCallback: ((peripherals: Array<BLEDevice>) -> Unit)?
|
|
17
|
+
): HybridNativeBleNitroSpec {
|
|
18
|
+
// Ignore iOS-specific parameters on Android
|
|
19
|
+
return BleNitroBleManager()
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -5,13 +5,10 @@ import NitroModules
|
|
|
5
5
|
* iOS implementation of the BLE Nitro Manager
|
|
6
6
|
* Implements the HybridNativeBleNitroSpec protocol for Core Bluetooth operations
|
|
7
7
|
*/
|
|
8
|
-
public class BleNitroBleManager:
|
|
9
|
-
|
|
10
|
-
// MARK: - Constants
|
|
11
|
-
private static let restoreStateIdentifier = "react-native-ble-nitro"
|
|
12
|
-
|
|
8
|
+
public class BleNitroBleManager: HybridNativeBleNitroSpec {
|
|
9
|
+
|
|
13
10
|
// MARK: - Static Properties
|
|
14
|
-
|
|
11
|
+
internal static var globalRestoreStateCallback: (([BLEDevice]) -> Void)?
|
|
15
12
|
|
|
16
13
|
// MARK: - Private Properties
|
|
17
14
|
private var centralManager: CBCentralManager!
|
|
@@ -26,23 +23,30 @@ public class BleNitroBleManager: HybridNativeBleNitroSpec_base, HybridNativeBleN
|
|
|
26
23
|
private var centralManagerDelegate: BleCentralManagerDelegate!
|
|
27
24
|
|
|
28
25
|
// MARK: - Restore State Properties
|
|
29
|
-
|
|
26
|
+
internal var restoreStateCallback: (([BLEDevice]) -> Void)?
|
|
27
|
+
|
|
28
|
+
// MARK: - Public Properties (from spec)
|
|
29
|
+
public var restoreStateIdentifier: String? = nil
|
|
30
30
|
|
|
31
31
|
// MARK: - Initialization
|
|
32
|
-
public
|
|
32
|
+
public init(restoreStateIdentifier: String? = nil, restoreStateCallback: (([BLEDevice]) -> Void)? = nil) {
|
|
33
|
+
self.restoreStateIdentifier = restoreStateIdentifier
|
|
34
|
+
self.restoreStateCallback = restoreStateCallback
|
|
33
35
|
super.init()
|
|
34
36
|
setupCentralManager()
|
|
35
37
|
}
|
|
36
38
|
|
|
37
39
|
private func setupCentralManager() {
|
|
38
40
|
centralManagerDelegate = BleCentralManagerDelegate(manager: self)
|
|
39
|
-
|
|
40
|
-
// Create options dictionary for central manager with
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
41
|
+
|
|
42
|
+
// Create options dictionary for central manager with restore identifier if set
|
|
43
|
+
var options: [String: Any] = [:]
|
|
44
|
+
print("Restore Identifier: \(String(describing: restoreStateIdentifier))")
|
|
45
|
+
if let identifier = restoreStateIdentifier {
|
|
46
|
+
options[CBCentralManagerOptionRestoreIdentifierKey] = identifier
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
centralManager = CBCentralManager(delegate: centralManagerDelegate, queue: DispatchQueue.main, options: options.isEmpty ? nil : options)
|
|
46
50
|
}
|
|
47
51
|
|
|
48
52
|
|
|
@@ -72,11 +76,9 @@ public class BleNitroBleManager: HybridNativeBleNitroSpec_base, HybridNativeBleN
|
|
|
72
76
|
|
|
73
77
|
// MARK: - Restore State Management
|
|
74
78
|
public func setRestoreStateCallback(callback: @escaping ([BLEDevice]) -> Void) throws {
|
|
75
|
-
print("🔄 setRestoreStateCallback called")
|
|
76
79
|
// Set both static and instance variables
|
|
77
80
|
BleNitroBleManager.globalRestoreStateCallback = callback
|
|
78
81
|
self.restoreStateCallback = callback
|
|
79
|
-
print("🔄 Callback set successfully")
|
|
80
82
|
}
|
|
81
83
|
|
|
82
84
|
// MARK: - Scanning Operations
|
|
@@ -132,7 +134,8 @@ public class BleNitroBleManager: HybridNativeBleNitroSpec_base, HybridNativeBleN
|
|
|
132
134
|
rssi: 0, // RSSI not available for connected devices without explicit read
|
|
133
135
|
manufacturerData: ManufacturerData(companyIdentifiers: []), // Not available for connected devices
|
|
134
136
|
serviceUUIDs: peripheral.services?.map { $0.uuid.uuidString } ?? [],
|
|
135
|
-
isConnectable: true // Already connected, so it was connectable
|
|
137
|
+
isConnectable: true, // Already connected, so it was connectable
|
|
138
|
+
isConnected: true
|
|
136
139
|
)
|
|
137
140
|
connectedDevices.append(device)
|
|
138
141
|
}
|
|
@@ -152,7 +155,8 @@ public class BleNitroBleManager: HybridNativeBleNitroSpec_base, HybridNativeBleN
|
|
|
152
155
|
rssi: 0,
|
|
153
156
|
manufacturerData: ManufacturerData(companyIdentifiers: []),
|
|
154
157
|
serviceUUIDs: peripheral.services?.map { $0.uuid.uuidString } ?? [],
|
|
155
|
-
isConnectable: true
|
|
158
|
+
isConnectable: true,
|
|
159
|
+
isConnected: true
|
|
156
160
|
)
|
|
157
161
|
connectedDevices.append(device)
|
|
158
162
|
|
|
@@ -177,7 +181,8 @@ public class BleNitroBleManager: HybridNativeBleNitroSpec_base, HybridNativeBleN
|
|
|
177
181
|
rssi: 0,
|
|
178
182
|
manufacturerData: ManufacturerData(companyIdentifiers: []),
|
|
179
183
|
serviceUUIDs: peripheral.services?.map { $0.uuid.uuidString } ?? [],
|
|
180
|
-
isConnectable: true
|
|
184
|
+
isConnectable: true,
|
|
185
|
+
isConnected: true
|
|
181
186
|
)
|
|
182
187
|
connectedDevices.append(device)
|
|
183
188
|
|
|
@@ -192,7 +197,7 @@ public class BleNitroBleManager: HybridNativeBleNitroSpec_base, HybridNativeBleN
|
|
|
192
197
|
}
|
|
193
198
|
|
|
194
199
|
// MARK: - Connection Management
|
|
195
|
-
public func connect(deviceId: String, callback: @escaping (Bool, String, String) -> Void, disconnectCallback: ((String, Bool, String) -> Void)?) throws {
|
|
200
|
+
public func connect(deviceId: String, callback: @escaping (Bool, String, String) -> Void, disconnectCallback: ((String, Bool, String) -> Void)?, autoConnectAndroid: Bool?) throws {
|
|
196
201
|
// Find peripheral by identifier
|
|
197
202
|
guard let peripheral = findPeripheral(by: deviceId) else {
|
|
198
203
|
callback(false, "", "Peripheral not found")
|
|
@@ -507,7 +512,8 @@ public class BleNitroBleManager: HybridNativeBleNitroSpec_base, HybridNativeBleN
|
|
|
507
512
|
rssi: 0, // RSSI not available for restored peripherals
|
|
508
513
|
manufacturerData: ManufacturerData(companyIdentifiers: []),
|
|
509
514
|
serviceUUIDs: peripheral.services?.map { $0.uuid.uuidString } ?? [],
|
|
510
|
-
isConnectable: true
|
|
515
|
+
isConnectable: true,
|
|
516
|
+
isConnected: peripheral.state == .connected
|
|
511
517
|
)
|
|
512
518
|
restoredDevices.append(device)
|
|
513
519
|
|
|
@@ -634,7 +640,8 @@ public class BleNitroBleManager: HybridNativeBleNitroSpec_base, HybridNativeBleN
|
|
|
634
640
|
rssi: rssi,
|
|
635
641
|
manufacturerData: manufacturerData,
|
|
636
642
|
serviceUUIDs: serviceUUIDs,
|
|
637
|
-
isConnectable: isConnectable
|
|
643
|
+
isConnectable: isConnectable,
|
|
644
|
+
isConnected: peripheral.state == .connected
|
|
638
645
|
)
|
|
639
646
|
}
|
|
640
647
|
|
|
@@ -719,6 +726,12 @@ class BleCentralManagerDelegate: NSObject, CBCentralManagerDelegate {
|
|
|
719
726
|
}
|
|
720
727
|
|
|
721
728
|
func centralManager(_ central: CBCentralManager, willRestoreState dict: [String: Any]) {
|
|
722
|
-
|
|
729
|
+
// Only handle state restoration if restoreStateIdentifier is set and a callback is registered
|
|
730
|
+
guard let manager = manager,
|
|
731
|
+
manager.restoreStateIdentifier != nil,
|
|
732
|
+
(BleNitroBleManager.globalRestoreStateCallback != nil || manager.restoreStateCallback != nil) else {
|
|
733
|
+
return
|
|
734
|
+
}
|
|
735
|
+
manager.handleStateRestoration(dict)
|
|
723
736
|
}
|
|
724
737
|
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import Foundation
|
|
2
|
+
import NitroModules
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* iOS Factory implementation for BLE Nitro Manager
|
|
6
|
+
* Creates BleNitroBleManager instances with optional state restoration configuration
|
|
7
|
+
*/
|
|
8
|
+
public class BleNitroBleManagerFactory: HybridNativeBleNitroFactorySpec_base, HybridNativeBleNitroFactorySpec_protocol {
|
|
9
|
+
|
|
10
|
+
public func create(
|
|
11
|
+
nativeRestoreStateIdentifier: String?,
|
|
12
|
+
restoreStateCallback: (([BLEDevice]) -> Void)?
|
|
13
|
+
) throws -> any HybridNativeBleNitroSpec {
|
|
14
|
+
return BleNitroBleManager(
|
|
15
|
+
restoreStateIdentifier: nativeRestoreStateIdentifier,
|
|
16
|
+
restoreStateCallback: restoreStateCallback
|
|
17
|
+
)
|
|
18
|
+
}
|
|
19
|
+
}
|
package/lib/commonjs/index.d.ts
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
export {
|
|
3
|
-
export declare class BleNitro extends BleNitroManager {
|
|
4
|
-
static instance(): BleNitroManager;
|
|
5
|
-
}
|
|
1
|
+
export { type ByteArray, type ScanFilter, type BLEDevice, type ScanCallback, type ManufacturerDataEntry, type ManufacturerData, type ConnectionCallback, type DisconnectEventCallback, type OperationCallback, type CharacteristicUpdateCallback, type Subscription, type BleNitroManagerOptions, BLEState, AndroidScanMode, BleNitroManager, } from "./manager";
|
|
2
|
+
export { BleNitro } from './singleton';
|
|
6
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,EACtB,KAAK,4BAA4B,EACjC,KAAK,YAAY,EACjB,KAAK,sBAAsB,EAC3B,QAAQ,EACR,eAAe,EACf,eAAe,GAChB,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC"}
|
package/lib/commonjs/index.js
CHANGED
|
@@ -1,18 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.BleNitro = exports.AndroidScanMode = exports.BLEState = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
Object.defineProperty(exports, "
|
|
7
|
-
Object.defineProperty(exports, "
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
static instance() {
|
|
11
|
-
if (!_instance) {
|
|
12
|
-
_instance = new BleNitro();
|
|
13
|
-
}
|
|
14
|
-
return _instance;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
exports.BleNitro = BleNitro;
|
|
3
|
+
exports.BleNitro = exports.BleNitroManager = exports.AndroidScanMode = exports.BLEState = void 0;
|
|
4
|
+
var manager_1 = require("./manager");
|
|
5
|
+
Object.defineProperty(exports, "BLEState", { enumerable: true, get: function () { return manager_1.BLEState; } });
|
|
6
|
+
Object.defineProperty(exports, "AndroidScanMode", { enumerable: true, get: function () { return manager_1.AndroidScanMode; } });
|
|
7
|
+
Object.defineProperty(exports, "BleNitroManager", { enumerable: true, get: function () { return manager_1.BleNitroManager; } });
|
|
8
|
+
var singleton_1 = require("./singleton");
|
|
9
|
+
Object.defineProperty(exports, "BleNitro", { enumerable: true, get: function () { return singleton_1.BleNitro; } });
|
|
18
10
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,qCAgBmB;AAHjB,mGAAA,QAAQ,OAAA;AACR,0GAAA,eAAe,OAAA;AACf,0GAAA,eAAe,OAAA;AAGjB,yCAAuC;AAA9B,qGAAA,QAAQ,OAAA"}
|
|
@@ -20,6 +20,7 @@ export interface BLEDevice {
|
|
|
20
20
|
manufacturerData: ManufacturerData;
|
|
21
21
|
serviceUUIDs: string[];
|
|
22
22
|
isConnectable: boolean;
|
|
23
|
+
isConnected: boolean;
|
|
23
24
|
}
|
|
24
25
|
export type ScanCallback = (device: BLEDevice) => void;
|
|
25
26
|
export type RestoreStateCallback = (connectedPeripherals: BLEDevice[]) => void;
|
|
@@ -45,6 +46,7 @@ export declare enum AndroidScanMode {
|
|
|
45
46
|
Opportunistic = "Opportunistic"
|
|
46
47
|
}
|
|
47
48
|
export type BleNitroManagerOptions = {
|
|
49
|
+
restoreIdentifier?: string;
|
|
48
50
|
onRestoredState?: RestoreStateCallback;
|
|
49
51
|
};
|
|
50
52
|
export declare function mapNativeBLEStateToBLEState(nativeState: NativeBLEState): BLEState;
|
|
@@ -57,8 +59,15 @@ export declare class BleNitroManager {
|
|
|
57
59
|
private _connectedDevices;
|
|
58
60
|
private _restoredStateCallback;
|
|
59
61
|
private _restoredState;
|
|
62
|
+
private _restoreStateIdentifier;
|
|
63
|
+
private Instance;
|
|
60
64
|
constructor(options?: BleNitroManagerOptions);
|
|
61
65
|
private onNativeRestoreStateCallback;
|
|
66
|
+
/**
|
|
67
|
+
*
|
|
68
|
+
* Registers callback and returns restored peripheral state in it. Not working from 1.7.x upwards for singleton implementation!
|
|
69
|
+
* @deprecated This method is deprecated and will be removed in 2.x, use onRestoredState option in BleNitroManageroptions instead!
|
|
70
|
+
*/
|
|
62
71
|
onRestoredState(callback: RestoreStateCallback): void;
|
|
63
72
|
/**
|
|
64
73
|
* Converts a 16- oder 32-Bit UUID to a 128-Bit UUID
|
|
@@ -72,17 +81,17 @@ export declare class BleNitroManager {
|
|
|
72
81
|
* Start scanning for Bluetooth devices
|
|
73
82
|
* @param filter Optional scan filter
|
|
74
83
|
* @param callback Callback function called when a device is found
|
|
75
|
-
* @returns
|
|
84
|
+
* @returns void
|
|
76
85
|
*/
|
|
77
86
|
startScan(filter: ScanFilter | undefined, callback: ScanCallback, onError?: (error: string) => void): void;
|
|
78
87
|
/**
|
|
79
88
|
* Stop scanning for Bluetooth devices
|
|
80
|
-
* @returns
|
|
89
|
+
* @returns void
|
|
81
90
|
*/
|
|
82
91
|
stopScan(): void;
|
|
83
92
|
/**
|
|
84
93
|
* Check if currently scanning for devices
|
|
85
|
-
* @returns
|
|
94
|
+
* @returns Boolean indicating if currently scanning
|
|
86
95
|
*/
|
|
87
96
|
isScanning(): boolean;
|
|
88
97
|
/**
|
|
@@ -95,9 +104,20 @@ export declare class BleNitroManager {
|
|
|
95
104
|
* Connect to a Bluetooth device
|
|
96
105
|
* @param deviceId ID of the device to connect to
|
|
97
106
|
* @param onDisconnect Optional callback for disconnect events
|
|
98
|
-
* @returns Promise resolving when connected
|
|
107
|
+
* @returns Promise resolving deviceId when connected
|
|
99
108
|
*/
|
|
100
|
-
connect(deviceId: string, onDisconnect?: DisconnectEventCallback): Promise<string>;
|
|
109
|
+
connect(deviceId: string, onDisconnect?: DisconnectEventCallback, autoConnectAndroid?: boolean): Promise<string>;
|
|
110
|
+
/**
|
|
111
|
+
* Scans for a device and connects to it
|
|
112
|
+
* @param deviceId ID of the device to connect to
|
|
113
|
+
* @param scanTimeout Optional timeout for the scan in milliseconds (default: 5000ms)
|
|
114
|
+
* @returns Promise resolving deviceId when connected
|
|
115
|
+
*/
|
|
116
|
+
findAndConnect(deviceId: string, options?: {
|
|
117
|
+
scanTimeout?: number;
|
|
118
|
+
autoConnectAndroid?: boolean;
|
|
119
|
+
onDisconnect?: DisconnectEventCallback;
|
|
120
|
+
}): Promise<string>;
|
|
101
121
|
/**
|
|
102
122
|
* Disconnect from a Bluetooth device
|
|
103
123
|
* @param deviceId ID of the device to disconnect from
|
|
@@ -107,7 +127,7 @@ export declare class BleNitroManager {
|
|
|
107
127
|
/**
|
|
108
128
|
* Check if connected to a device
|
|
109
129
|
* @param deviceId ID of the device to check
|
|
110
|
-
* @returns
|
|
130
|
+
* @returns Boolean indicating if device is connected
|
|
111
131
|
*/
|
|
112
132
|
isConnected(deviceId: string): boolean;
|
|
113
133
|
/**
|
|
@@ -139,15 +159,26 @@ export declare class BleNitroManager {
|
|
|
139
159
|
* Get characteristics for a service
|
|
140
160
|
* @param deviceId ID of the device
|
|
141
161
|
* @param serviceId ID of the service
|
|
142
|
-
* @returns
|
|
162
|
+
* @returns array of characteristic UUIDs
|
|
143
163
|
*/
|
|
144
164
|
getCharacteristics(deviceId: string, serviceId: string): string[];
|
|
165
|
+
/**
|
|
166
|
+
* Get services and characteristics for a connected device
|
|
167
|
+
* @param deviceId ID of the device
|
|
168
|
+
* @returns Promise resolving to array of service and characteristic UUIDs
|
|
169
|
+
* @see getServices
|
|
170
|
+
* @see getCharacteristics
|
|
171
|
+
*/
|
|
172
|
+
getServicesWithCharacteristics(deviceId: string): Promise<{
|
|
173
|
+
uuid: string;
|
|
174
|
+
characteristics: string[];
|
|
175
|
+
}[]>;
|
|
145
176
|
/**
|
|
146
177
|
* Read a characteristic value
|
|
147
178
|
* @param deviceId ID of the device
|
|
148
179
|
* @param serviceId ID of the service
|
|
149
180
|
* @param characteristicId ID of the characteristic
|
|
150
|
-
* @returns Promise resolving to the characteristic data as
|
|
181
|
+
* @returns Promise resolving to the characteristic data as ByteArray
|
|
151
182
|
*/
|
|
152
183
|
readCharacteristic(deviceId: string, serviceId: string, characteristicId: string): Promise<ByteArray>;
|
|
153
184
|
/**
|
|
@@ -166,7 +197,7 @@ export declare class BleNitroManager {
|
|
|
166
197
|
* @param serviceId ID of the service
|
|
167
198
|
* @param characteristicId ID of the characteristic
|
|
168
199
|
* @param callback Callback function called when notification is received
|
|
169
|
-
* @returns
|
|
200
|
+
* @returns Subscription
|
|
170
201
|
*/
|
|
171
202
|
subscribeToCharacteristic(deviceId: string, serviceId: string, characteristicId: string, callback: CharacteristicUpdateCallback): Subscription;
|
|
172
203
|
/**
|
|
@@ -179,7 +210,7 @@ export declare class BleNitroManager {
|
|
|
179
210
|
unsubscribeFromCharacteristic(deviceId: string, serviceId: string, characteristicId: string): Promise<void>;
|
|
180
211
|
/**
|
|
181
212
|
* Check if Bluetooth is enabled
|
|
182
|
-
* @returns
|
|
213
|
+
* @returns returns Boolean according to Bluetooth state
|
|
183
214
|
*/
|
|
184
215
|
isBluetoothEnabled(): boolean;
|
|
185
216
|
/**
|
|
@@ -189,7 +220,7 @@ export declare class BleNitroManager {
|
|
|
189
220
|
requestBluetoothEnable(): Promise<boolean>;
|
|
190
221
|
/**
|
|
191
222
|
* Get the current Bluetooth state
|
|
192
|
-
* @returns
|
|
223
|
+
* @returns Bluetooth state
|
|
193
224
|
* @see BLEState
|
|
194
225
|
*/
|
|
195
226
|
state(): BLEState;
|
|
@@ -197,7 +228,7 @@ export declare class BleNitroManager {
|
|
|
197
228
|
* Subscribe to Bluetooth state changes
|
|
198
229
|
* @param callback Callback function called when state changes
|
|
199
230
|
* @param emitInitial Whether to emit initial state callback
|
|
200
|
-
* @returns
|
|
231
|
+
* @returns Subscription
|
|
201
232
|
* @see BLEState
|
|
202
233
|
*/
|
|
203
234
|
subscribeToStateChange(callback: (state: BLEState) => void, emitInitial?: boolean): Subscription;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/manager.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,SAAS,IAAI,eAAe,EAC5B,QAAQ,IAAI,cAAc,EAE1B,eAAe,IAAI,qBAAqB,EACzC,MAAM,wBAAwB,CAAC;AAEhC,MAAM,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC;AAEjC,MAAM,WAAW,UAAU;IACzB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,kBAAkB,EAAE,qBAAqB,EAAE,CAAC;CAC7C;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/manager.ts"],"names":[],"mappings":"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"}
|