munim-bluetooth 0.3.14 → 0.3.15
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/ios/HybridMunimBluetooth.swift +50 -1
- package/ios/MunimBluetoothEventEmitter.m +15 -0
- package/ios/MunimBluetoothEventEmitter.swift +38 -0
- package/lib/commonjs/index.js +47 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/index.js +45 -0
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/src/index.d.ts +17 -0
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +46 -0
|
@@ -30,6 +30,52 @@ class HybridMunimBluetooth: HybridMunimBluetoothSpec {
|
|
|
30
30
|
centralManager = CBCentralManager(delegate: self, queue: nil)
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
+
// MARK: - Event Emission
|
|
34
|
+
private func emitDeviceFound(device: CBPeripheral, advertisementData: [String: Any], rssi: NSNumber) {
|
|
35
|
+
// Build device data dictionary
|
|
36
|
+
var deviceData: [String: Any] = [
|
|
37
|
+
"id": device.identifier.uuidString,
|
|
38
|
+
"rssi": rssi.intValue
|
|
39
|
+
]
|
|
40
|
+
|
|
41
|
+
// Add device name if available
|
|
42
|
+
if let name = device.name {
|
|
43
|
+
deviceData["name"] = name
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// Extract and add advertising data
|
|
47
|
+
if let localName = advertisementData[CBAdvertisementDataLocalNameKey] as? String {
|
|
48
|
+
deviceData["localName"] = localName
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if let serviceUUIDs = advertisementData[CBAdvertisementDataServiceUUIDsKey] as? [CBUUID] {
|
|
52
|
+
deviceData["serviceUUIDs"] = serviceUUIDs.map { $0.uuidString }
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
if let manufacturerData = advertisementData[CBAdvertisementDataManufacturerDataKey] as? Data {
|
|
56
|
+
deviceData["manufacturerData"] = manufacturerData.map { String(format: "%02x", $0) }.joined()
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if let txPowerLevel = advertisementData[CBAdvertisementDataTxPowerLevelKey] as? NSNumber {
|
|
60
|
+
deviceData["txPowerLevel"] = txPowerLevel.intValue
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
if let isConnectable = advertisementData[CBAdvertisementDataIsConnectable] as? NSNumber {
|
|
64
|
+
deviceData["isConnectable"] = isConnectable.boolValue
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Store advertising data
|
|
68
|
+
deviceData["advertisingData"] = advertisementData
|
|
69
|
+
|
|
70
|
+
// Emit event through the event emitter
|
|
71
|
+
if let emitter = MunimBluetoothEventEmitter.shared {
|
|
72
|
+
emitter.emitDeviceFound(deviceData)
|
|
73
|
+
NSLog("[MunimBluetooth] ✅ Device found event emitted: %@", device.identifier.uuidString)
|
|
74
|
+
} else {
|
|
75
|
+
NSLog("[MunimBluetooth] ⚠️ Event emitter not initialized!")
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
33
79
|
// MARK: - Peripheral Features
|
|
34
80
|
|
|
35
81
|
func startAdvertising(options: AdvertisingOptions) throws {
|
|
@@ -335,7 +381,10 @@ extension HybridMunimBluetooth: CBCentralManagerDelegate {
|
|
|
335
381
|
let deviceId = peripheral.identifier.uuidString
|
|
336
382
|
discoveredPeripherals[deviceId] = peripheral
|
|
337
383
|
|
|
338
|
-
|
|
384
|
+
// Emit the device found event
|
|
385
|
+
emitDeviceFound(device: peripheral, advertisementData: advertisementData, rssi: RSSI)
|
|
386
|
+
|
|
387
|
+
NSLog("Bluetooth: deviceFound - %@", deviceId)
|
|
339
388
|
}
|
|
340
389
|
|
|
341
390
|
func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
//
|
|
2
|
+
// MunimBluetoothEventEmitter.m
|
|
3
|
+
// munim-bluetooth
|
|
4
|
+
//
|
|
5
|
+
// Objective-C bridge for event emitter
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
#import <React/RCTBridgeModule.h>
|
|
9
|
+
#import <React/RCTEventEmitter.h>
|
|
10
|
+
|
|
11
|
+
@interface RCT_EXTERN_MODULE(MunimBluetoothEventEmitter, RCTEventEmitter)
|
|
12
|
+
|
|
13
|
+
RCT_EXTERN_METHOD(supportedEvents)
|
|
14
|
+
|
|
15
|
+
@end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
//
|
|
2
|
+
// MunimBluetoothEventEmitter.swift
|
|
3
|
+
// munim-bluetooth
|
|
4
|
+
//
|
|
5
|
+
// Event emitter for Bluetooth events
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
import Foundation
|
|
9
|
+
import React
|
|
10
|
+
|
|
11
|
+
@objc(MunimBluetoothEventEmitter)
|
|
12
|
+
class MunimBluetoothEventEmitter: RCTEventEmitter {
|
|
13
|
+
|
|
14
|
+
public static var shared: MunimBluetoothEventEmitter?
|
|
15
|
+
|
|
16
|
+
override init() {
|
|
17
|
+
super.init()
|
|
18
|
+
MunimBluetoothEventEmitter.shared = self
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
override func supportedEvents() -> [String]! {
|
|
22
|
+
return [
|
|
23
|
+
"deviceFound",
|
|
24
|
+
"onDeviceFound",
|
|
25
|
+
"scanResult",
|
|
26
|
+
"connectionStateChanged",
|
|
27
|
+
"characteristicValueChanged"
|
|
28
|
+
]
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
override static func requiresMainQueueSetup() -> Bool {
|
|
32
|
+
return false
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
func emitDeviceFound(_ deviceData: [String: Any]) {
|
|
36
|
+
sendEvent(withName: "deviceFound", body: deviceData)
|
|
37
|
+
}
|
|
38
|
+
}
|
package/lib/commonjs/index.js
CHANGED
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.addDeviceFoundListener = addDeviceFoundListener;
|
|
7
|
+
exports.addEventListener = addEventListener;
|
|
6
8
|
exports.addListener = addListener;
|
|
7
9
|
exports.connect = connect;
|
|
8
10
|
exports.default = void 0;
|
|
@@ -25,8 +27,20 @@ exports.unsubscribeFromCharacteristic = unsubscribeFromCharacteristic;
|
|
|
25
27
|
exports.updateAdvertisingData = updateAdvertisingData;
|
|
26
28
|
exports.writeCharacteristic = writeCharacteristic;
|
|
27
29
|
var _reactNativeNitroModules = require("react-native-nitro-modules");
|
|
30
|
+
var _reactNative = require("react-native");
|
|
28
31
|
const MunimBluetooth = _reactNativeNitroModules.NitroModules.createHybridObject('MunimBluetooth');
|
|
29
32
|
|
|
33
|
+
// Event Emitter for Bluetooth events
|
|
34
|
+
const {
|
|
35
|
+
MunimBluetoothEventEmitter
|
|
36
|
+
} = _reactNative.NativeModules;
|
|
37
|
+
let eventEmitter = null;
|
|
38
|
+
if (MunimBluetoothEventEmitter) {
|
|
39
|
+
eventEmitter = new _reactNative.NativeEventEmitter(MunimBluetoothEventEmitter);
|
|
40
|
+
} else {
|
|
41
|
+
console.warn('[munim-bluetooth] Event emitter not available - device discovery events will not work');
|
|
42
|
+
}
|
|
43
|
+
|
|
30
44
|
// ========== Peripheral Features ==========
|
|
31
45
|
|
|
32
46
|
/**
|
|
@@ -206,10 +220,41 @@ function readRSSI(deviceId) {
|
|
|
206
220
|
|
|
207
221
|
// ========== Event Management ==========
|
|
208
222
|
|
|
223
|
+
/**
|
|
224
|
+
* Add a device found event listener (for scanning).
|
|
225
|
+
*
|
|
226
|
+
* @param callback - Function to call when a device is found
|
|
227
|
+
* @returns A function to remove the listener
|
|
228
|
+
*/
|
|
229
|
+
function addDeviceFoundListener(callback) {
|
|
230
|
+
if (!eventEmitter) {
|
|
231
|
+
console.warn('[munim-bluetooth] Cannot add listener - event emitter not available');
|
|
232
|
+
return () => {};
|
|
233
|
+
}
|
|
234
|
+
const subscription = eventEmitter.addListener('deviceFound', callback);
|
|
235
|
+
return () => subscription.remove();
|
|
236
|
+
}
|
|
237
|
+
|
|
209
238
|
/**
|
|
210
239
|
* Add an event listener.
|
|
211
240
|
*
|
|
212
241
|
* @param eventName - The name of the event to listen for.
|
|
242
|
+
* @param callback - The callback to invoke when the event occurs.
|
|
243
|
+
* @returns A function to remove the listener
|
|
244
|
+
*/
|
|
245
|
+
function addEventListener(eventName, callback) {
|
|
246
|
+
if (!eventEmitter) {
|
|
247
|
+
console.warn('[munim-bluetooth] Cannot add listener - event emitter not available');
|
|
248
|
+
return () => {};
|
|
249
|
+
}
|
|
250
|
+
const subscription = eventEmitter.addListener(eventName, callback);
|
|
251
|
+
return () => subscription.remove();
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* Add an event listener (legacy method).
|
|
256
|
+
*
|
|
257
|
+
* @param eventName - The name of the event to listen for.
|
|
213
258
|
*/
|
|
214
259
|
function addListener(eventName) {
|
|
215
260
|
return MunimBluetooth.addListener(eventName);
|
|
@@ -248,6 +293,8 @@ var _default = exports.default = {
|
|
|
248
293
|
getConnectedDevices,
|
|
249
294
|
readRSSI,
|
|
250
295
|
// Events
|
|
296
|
+
addDeviceFoundListener,
|
|
297
|
+
addEventListener,
|
|
251
298
|
addListener,
|
|
252
299
|
removeListeners
|
|
253
300
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNativeNitroModules","require","MunimBluetooth","NitroModules","createHybridObject","startAdvertising","options","updateAdvertisingData","advertisingData","getAdvertisingData","stopAdvertising","setServices","services","isBluetoothEnabled","requestBluetoothPermission","startScan","stopScan","connect","deviceId","disconnect","discoverServices","readCharacteristic","serviceUUID","characteristicUUID","writeCharacteristic","value","writeType","subscribeToCharacteristic","unsubscribeFromCharacteristic","getConnectedDevices","readRSSI","addListener","eventName","removeListeners","count","_default","exports","default"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"
|
|
1
|
+
{"version":3,"names":["_reactNativeNitroModules","require","_reactNative","MunimBluetooth","NitroModules","createHybridObject","MunimBluetoothEventEmitter","NativeModules","eventEmitter","NativeEventEmitter","console","warn","startAdvertising","options","updateAdvertisingData","advertisingData","getAdvertisingData","stopAdvertising","setServices","services","isBluetoothEnabled","requestBluetoothPermission","startScan","stopScan","connect","deviceId","disconnect","discoverServices","readCharacteristic","serviceUUID","characteristicUUID","writeCharacteristic","value","writeType","subscribeToCharacteristic","unsubscribeFromCharacteristic","getConnectedDevices","readRSSI","addDeviceFoundListener","callback","subscription","addListener","remove","addEventListener","eventName","removeListeners","count","_default","exports","default"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/module/index.js
CHANGED
|
@@ -1,8 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { NitroModules } from 'react-native-nitro-modules';
|
|
4
|
+
import { NativeEventEmitter, NativeModules } from 'react-native';
|
|
4
5
|
const MunimBluetooth = NitroModules.createHybridObject('MunimBluetooth');
|
|
5
6
|
|
|
7
|
+
// Event Emitter for Bluetooth events
|
|
8
|
+
const {
|
|
9
|
+
MunimBluetoothEventEmitter
|
|
10
|
+
} = NativeModules;
|
|
11
|
+
let eventEmitter = null;
|
|
12
|
+
if (MunimBluetoothEventEmitter) {
|
|
13
|
+
eventEmitter = new NativeEventEmitter(MunimBluetoothEventEmitter);
|
|
14
|
+
} else {
|
|
15
|
+
console.warn('[munim-bluetooth] Event emitter not available - device discovery events will not work');
|
|
16
|
+
}
|
|
17
|
+
|
|
6
18
|
// ========== Peripheral Features ==========
|
|
7
19
|
|
|
8
20
|
/**
|
|
@@ -182,10 +194,41 @@ export function readRSSI(deviceId) {
|
|
|
182
194
|
|
|
183
195
|
// ========== Event Management ==========
|
|
184
196
|
|
|
197
|
+
/**
|
|
198
|
+
* Add a device found event listener (for scanning).
|
|
199
|
+
*
|
|
200
|
+
* @param callback - Function to call when a device is found
|
|
201
|
+
* @returns A function to remove the listener
|
|
202
|
+
*/
|
|
203
|
+
export function addDeviceFoundListener(callback) {
|
|
204
|
+
if (!eventEmitter) {
|
|
205
|
+
console.warn('[munim-bluetooth] Cannot add listener - event emitter not available');
|
|
206
|
+
return () => {};
|
|
207
|
+
}
|
|
208
|
+
const subscription = eventEmitter.addListener('deviceFound', callback);
|
|
209
|
+
return () => subscription.remove();
|
|
210
|
+
}
|
|
211
|
+
|
|
185
212
|
/**
|
|
186
213
|
* Add an event listener.
|
|
187
214
|
*
|
|
188
215
|
* @param eventName - The name of the event to listen for.
|
|
216
|
+
* @param callback - The callback to invoke when the event occurs.
|
|
217
|
+
* @returns A function to remove the listener
|
|
218
|
+
*/
|
|
219
|
+
export function addEventListener(eventName, callback) {
|
|
220
|
+
if (!eventEmitter) {
|
|
221
|
+
console.warn('[munim-bluetooth] Cannot add listener - event emitter not available');
|
|
222
|
+
return () => {};
|
|
223
|
+
}
|
|
224
|
+
const subscription = eventEmitter.addListener(eventName, callback);
|
|
225
|
+
return () => subscription.remove();
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* Add an event listener (legacy method).
|
|
230
|
+
*
|
|
231
|
+
* @param eventName - The name of the event to listen for.
|
|
189
232
|
*/
|
|
190
233
|
export function addListener(eventName) {
|
|
191
234
|
return MunimBluetooth.addListener(eventName);
|
|
@@ -225,6 +268,8 @@ export default {
|
|
|
225
268
|
getConnectedDevices,
|
|
226
269
|
readRSSI,
|
|
227
270
|
// Events
|
|
271
|
+
addDeviceFoundListener,
|
|
272
|
+
addEventListener,
|
|
228
273
|
addListener,
|
|
229
274
|
removeListeners
|
|
230
275
|
};
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NitroModules","MunimBluetooth","createHybridObject","startAdvertising","options","updateAdvertisingData","advertisingData","getAdvertisingData","stopAdvertising","setServices","services","isBluetoothEnabled","requestBluetoothPermission","startScan","stopScan","connect","deviceId","disconnect","discoverServices","readCharacteristic","serviceUUID","characteristicUUID","writeCharacteristic","value","writeType","subscribeToCharacteristic","unsubscribeFromCharacteristic","getConnectedDevices","readRSSI","addListener","eventName","removeListeners","count"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,SAASA,YAAY,QAAQ,4BAA4B;
|
|
1
|
+
{"version":3,"names":["NitroModules","NativeEventEmitter","NativeModules","MunimBluetooth","createHybridObject","MunimBluetoothEventEmitter","eventEmitter","console","warn","startAdvertising","options","updateAdvertisingData","advertisingData","getAdvertisingData","stopAdvertising","setServices","services","isBluetoothEnabled","requestBluetoothPermission","startScan","stopScan","connect","deviceId","disconnect","discoverServices","readCharacteristic","serviceUUID","characteristicUUID","writeCharacteristic","value","writeType","subscribeToCharacteristic","unsubscribeFromCharacteristic","getConnectedDevices","readRSSI","addDeviceFoundListener","callback","subscription","addListener","remove","addEventListener","eventName","removeListeners","count"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -123,10 +123,25 @@ export declare function getConnectedDevices(): Promise<string[]>;
|
|
|
123
123
|
* @returns Promise resolving to RSSI value in dBm.
|
|
124
124
|
*/
|
|
125
125
|
export declare function readRSSI(deviceId: string): Promise<number>;
|
|
126
|
+
/**
|
|
127
|
+
* Add a device found event listener (for scanning).
|
|
128
|
+
*
|
|
129
|
+
* @param callback - Function to call when a device is found
|
|
130
|
+
* @returns A function to remove the listener
|
|
131
|
+
*/
|
|
132
|
+
export declare function addDeviceFoundListener(callback: (device: BLEDevice) => void): () => void;
|
|
126
133
|
/**
|
|
127
134
|
* Add an event listener.
|
|
128
135
|
*
|
|
129
136
|
* @param eventName - The name of the event to listen for.
|
|
137
|
+
* @param callback - The callback to invoke when the event occurs.
|
|
138
|
+
* @returns A function to remove the listener
|
|
139
|
+
*/
|
|
140
|
+
export declare function addEventListener(eventName: string, callback: (data: any) => void): () => void;
|
|
141
|
+
/**
|
|
142
|
+
* Add an event listener (legacy method).
|
|
143
|
+
*
|
|
144
|
+
* @param eventName - The name of the event to listen for.
|
|
130
145
|
*/
|
|
131
146
|
export declare function addListener(eventName: string): void;
|
|
132
147
|
/**
|
|
@@ -155,6 +170,8 @@ declare const _default: {
|
|
|
155
170
|
unsubscribeFromCharacteristic: typeof unsubscribeFromCharacteristic;
|
|
156
171
|
getConnectedDevices: typeof getConnectedDevices;
|
|
157
172
|
readRSSI: typeof readRSSI;
|
|
173
|
+
addDeviceFoundListener: typeof addDeviceFoundListener;
|
|
174
|
+
addEventListener: typeof addEventListener;
|
|
158
175
|
addListener: typeof addListener;
|
|
159
176
|
removeListeners: typeof removeListeners;
|
|
160
177
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "munim-bluetooth",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.15",
|
|
4
4
|
"description": "A comprehensive React Native library for all your Bluetooth Low Energy (BLE) needs, supporting both peripheral and central roles with Expo support",
|
|
5
5
|
"main": "./lib/commonjs/index.js",
|
|
6
6
|
"module": "./lib/module/index.js",
|
package/src/index.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { NitroModules } from 'react-native-nitro-modules'
|
|
2
|
+
import { NativeEventEmitter, NativeModules } from 'react-native'
|
|
2
3
|
import type {
|
|
3
4
|
MunimBluetooth as MunimBluetoothSpec,
|
|
4
5
|
AdvertisingDataTypes,
|
|
@@ -11,6 +12,16 @@ import type {
|
|
|
11
12
|
const MunimBluetooth =
|
|
12
13
|
NitroModules.createHybridObject<MunimBluetoothSpec>('MunimBluetooth')
|
|
13
14
|
|
|
15
|
+
// Event Emitter for Bluetooth events
|
|
16
|
+
const { MunimBluetoothEventEmitter } = NativeModules
|
|
17
|
+
let eventEmitter: NativeEventEmitter | null = null
|
|
18
|
+
|
|
19
|
+
if (MunimBluetoothEventEmitter) {
|
|
20
|
+
eventEmitter = new NativeEventEmitter(MunimBluetoothEventEmitter)
|
|
21
|
+
} else {
|
|
22
|
+
console.warn('[munim-bluetooth] Event emitter not available - device discovery events will not work')
|
|
23
|
+
}
|
|
24
|
+
|
|
14
25
|
// ========== Peripheral Features ==========
|
|
15
26
|
|
|
16
27
|
/**
|
|
@@ -233,10 +244,43 @@ export function readRSSI(deviceId: string): Promise<number> {
|
|
|
233
244
|
|
|
234
245
|
// ========== Event Management ==========
|
|
235
246
|
|
|
247
|
+
/**
|
|
248
|
+
* Add a device found event listener (for scanning).
|
|
249
|
+
*
|
|
250
|
+
* @param callback - Function to call when a device is found
|
|
251
|
+
* @returns A function to remove the listener
|
|
252
|
+
*/
|
|
253
|
+
export function addDeviceFoundListener(callback: (device: BLEDevice) => void): () => void {
|
|
254
|
+
if (!eventEmitter) {
|
|
255
|
+
console.warn('[munim-bluetooth] Cannot add listener - event emitter not available')
|
|
256
|
+
return () => {}
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
const subscription = eventEmitter.addListener('deviceFound', callback)
|
|
260
|
+
return () => subscription.remove()
|
|
261
|
+
}
|
|
262
|
+
|
|
236
263
|
/**
|
|
237
264
|
* Add an event listener.
|
|
238
265
|
*
|
|
239
266
|
* @param eventName - The name of the event to listen for.
|
|
267
|
+
* @param callback - The callback to invoke when the event occurs.
|
|
268
|
+
* @returns A function to remove the listener
|
|
269
|
+
*/
|
|
270
|
+
export function addEventListener(eventName: string, callback: (data: any) => void): () => void {
|
|
271
|
+
if (!eventEmitter) {
|
|
272
|
+
console.warn('[munim-bluetooth] Cannot add listener - event emitter not available')
|
|
273
|
+
return () => {}
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
const subscription = eventEmitter.addListener(eventName, callback)
|
|
277
|
+
return () => subscription.remove()
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
/**
|
|
281
|
+
* Add an event listener (legacy method).
|
|
282
|
+
*
|
|
283
|
+
* @param eventName - The name of the event to listen for.
|
|
240
284
|
*/
|
|
241
285
|
export function addListener(eventName: string): void {
|
|
242
286
|
return MunimBluetooth.addListener(eventName)
|
|
@@ -284,6 +328,8 @@ export default {
|
|
|
284
328
|
getConnectedDevices,
|
|
285
329
|
readRSSI,
|
|
286
330
|
// Events
|
|
331
|
+
addDeviceFoundListener,
|
|
332
|
+
addEventListener,
|
|
287
333
|
addListener,
|
|
288
334
|
removeListeners,
|
|
289
335
|
}
|