simplejsble 0.0.29 → 0.0.30
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/NitroSimplejsble.podspec +1 -0
- package/VERSION +1 -1
- package/dependencies/external/kvn/kvn_bytearray.h +7 -0
- package/lib/index.d.ts +3 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +2 -0
- package/lib/specs/Adapter.nitro.d.ts +10 -0
- package/lib/specs/Adapter.nitro.d.ts.map +1 -0
- package/lib/specs/Adapter.nitro.js +1 -0
- package/package.json +2 -2
- package/simpleble/CMakeLists.txt +1 -6
- package/simpleble/src/backends/dongl/AdapterDongl.cpp +10 -143
- package/simpleble/src/backends/dongl/AdapterDongl.h +0 -1
- package/simpleble/src/backends/dongl/PeripheralDongl.cpp +120 -118
- package/simpleble/src/backends/dongl/PeripheralDongl.h +9 -2
- package/simpleble/src/backends/dongl/protocol/d2h.pb.h +9 -26
- package/simpleble/src/backends/dongl/protocol/h2d.pb.h +2 -12
- package/simpleble/src/backends/dongl/serial/Protocol.cpp +1 -755
- package/simpleble/src/backends/dongl/serial/Protocol.h +0 -75
- package/simpleble/test/src/test_bytearray.cpp +7 -0
- package/simpleble/src/backends/dongl/protocol/softdevice.pb.c +0 -18
- package/simpleble/src/backends/dongl/protocol/softdevice.pb.h +0 -815
- package/simpleble/src/backends/dongl/protocol/softdevice_gap.pb.c +0 -339
- package/simpleble/src/backends/dongl/protocol/softdevice_gap.pb.h +0 -2086
- package/simpleble/src/backends/dongl/protocol/softdevice_gattc.pb.c +0 -114
- package/simpleble/src/backends/dongl/protocol/softdevice_gattc.pb.h +0 -772
- package/simpleble/src/backends/dongl/protocol/softdevice_gatts.pb.c +0 -117
- package/simpleble/src/backends/dongl/protocol/softdevice_gatts.pb.h +0 -766
- package/simpleble/src/backends/dongl/protocol/softdevice_types.pb.c +0 -207
- package/simpleble/src/backends/dongl/protocol/softdevice_types.pb.h +0 -1686
package/NitroSimplejsble.podspec
CHANGED
|
@@ -163,5 +163,6 @@ Pod::Spec.new do |s|
|
|
|
163
163
|
'"$(PODS_TARGET_SRCROOT)/ios/simpleble_macosx_x86_64/include"',
|
|
164
164
|
'"$(PODS_TARGET_SRCROOT)/ios/simpleble_macosx_universal/include"',
|
|
165
165
|
].join(' '),
|
|
166
|
+
'GCC_PREPROCESSOR_DEFINITIONS' => ['$(inherited)', 'OS_OBJECT_USE_OBJC=1']
|
|
166
167
|
})
|
|
167
168
|
end
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.11.0
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
#include <cstdint>
|
|
5
5
|
#include <cstring>
|
|
6
|
+
#include <initializer_list>
|
|
6
7
|
#include <iomanip>
|
|
7
8
|
#include <iostream>
|
|
8
9
|
#include <memory>
|
|
@@ -30,6 +31,12 @@ class bytearray {
|
|
|
30
31
|
*/
|
|
31
32
|
bytearray(const std::vector<uint8_t>& vec) : data_(vec) {}
|
|
32
33
|
|
|
34
|
+
/**
|
|
35
|
+
* @brief Constructs byte array from an initializer list of uint8_t.
|
|
36
|
+
* @param list An initializer list of uint8_t.
|
|
37
|
+
*/
|
|
38
|
+
bytearray(std::initializer_list<uint8_t> list) : data_(list) {}
|
|
39
|
+
|
|
33
40
|
/**
|
|
34
41
|
* @brief Constructs byte array from a raw pointer and size.
|
|
35
42
|
* @param ptr A pointer to uint8_t data.
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAGrD,eAAO,MAAM,aAAa,SAAsD,CAAC"}
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type HybridObject } from 'react-native-nitro-modules';
|
|
2
|
+
export interface Adapter extends HybridObject<{
|
|
3
|
+
ios: 'c++';
|
|
4
|
+
android: 'c++';
|
|
5
|
+
}> {
|
|
6
|
+
greet(name: string): string;
|
|
7
|
+
get_adapters(): Adapter[];
|
|
8
|
+
bluetooth_enabled(): boolean;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=Adapter.nitro.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Adapter.nitro.d.ts","sourceRoot":"","sources":["../../src/specs/Adapter.nitro.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAC9D,MAAM,WAAW,OAAQ,SAAQ,YAAY,CAAC;IAC5C,GAAG,EAAE,KAAK,CAAC;IACX,OAAO,EAAE,KAAK,CAAA;CACf,CAAC;IACA,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IAC3B,YAAY,IAAI,OAAO,EAAE,CAAA;IACzB,iBAAiB,IAAI,OAAO,CAAA;CAC7B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import {} from 'react-native-nitro-modules';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "simplejsble",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.30",
|
|
4
4
|
"description": "React Native Bluetooth Low Energy library using SimpleBLE with Nitro Modules",
|
|
5
5
|
"main": "lib/index",
|
|
6
6
|
"module": "lib/index",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"prepack": "npm run build && npx nitrogen && bash scripts/prepare-package.sh",
|
|
30
30
|
"typecheck": "tsc --noEmit",
|
|
31
31
|
"build": "tsc",
|
|
32
|
-
"clean": "rm -rf simpleble simpledroidbridge cmake dependencies VERSION nitrogen lib android/build android/.cxx android/.gradle ios/build_iphoneos_arm64 ios/build_iphonesimulator_arm64 ios/simpleble_iphoneos_arm64 ios/simpleble_iphonesimulator_arm64 ios/build_macosx_arm64 ios/build_macosx_x86_64 ios/simpleble_macosx_arm64 ios/simpleble_macosx_x86_64 ios/simpleble_macosx_universal ios/SimpleBLE.xcframework",
|
|
32
|
+
"clean": "rm -rf simpleble simpledroidbridge cmake dependencies VERSION nitrogen lib tsconfig.tsbuildinfo android/build android/.cxx android/.gradle ios/build_iphoneos_arm64 ios/build_iphonesimulator_arm64 ios/simpleble_iphoneos_arm64 ios/simpleble_iphonesimulator_arm64 ios/build_macosx_arm64 ios/build_macosx_x86_64 ios/simpleble_macosx_arm64 ios/simpleble_macosx_x86_64 ios/simpleble_macosx_universal ios/SimpleBLE.xcframework",
|
|
33
33
|
"lint": "eslint \"**/*.{js,ts,tsx}\" --fix",
|
|
34
34
|
"prepublishOnly": "npm run typecheck",
|
|
35
35
|
"postpublish": "npm run clean",
|
package/simpleble/CMakeLists.txt
CHANGED
|
@@ -166,12 +166,7 @@ set(SIMPLEBLE_DONGL_SOURCES
|
|
|
166
166
|
${CMAKE_CURRENT_SOURCE_DIR}/src/backends/dongl/protocol/d2h.pb.c
|
|
167
167
|
${CMAKE_CURRENT_SOURCE_DIR}/src/backends/dongl/protocol/h2d.pb.c
|
|
168
168
|
${CMAKE_CURRENT_SOURCE_DIR}/src/backends/dongl/protocol/basic.pb.c
|
|
169
|
-
${CMAKE_CURRENT_SOURCE_DIR}/src/backends/dongl/protocol/simpleble.pb.c
|
|
170
|
-
${CMAKE_CURRENT_SOURCE_DIR}/src/backends/dongl/protocol/softdevice.pb.c
|
|
171
|
-
${CMAKE_CURRENT_SOURCE_DIR}/src/backends/dongl/protocol/softdevice_gap.pb.c
|
|
172
|
-
${CMAKE_CURRENT_SOURCE_DIR}/src/backends/dongl/protocol/softdevice_gattc.pb.c
|
|
173
|
-
${CMAKE_CURRENT_SOURCE_DIR}/src/backends/dongl/protocol/softdevice_gatts.pb.c
|
|
174
|
-
${CMAKE_CURRENT_SOURCE_DIR}/src/backends/dongl/protocol/softdevice_types.pb.c)
|
|
169
|
+
${CMAKE_CURRENT_SOURCE_DIR}/src/backends/dongl/protocol/simpleble.pb.c)
|
|
175
170
|
|
|
176
171
|
if(SIMPLEBLE_PLAIN)
|
|
177
172
|
list(APPEND SIMPLEBLE_DONGL_SOURCES
|
|
@@ -31,9 +31,6 @@ AdapterDongl::AdapterDongl(const std::string& device_path)
|
|
|
31
31
|
|
|
32
32
|
_serial_protocol->set_event_callback([this](const dongl_Event& event) {
|
|
33
33
|
switch (event.which_evt) {
|
|
34
|
-
case dongl_Event_softdevice_tag:
|
|
35
|
-
_on_softdevice_event(event.evt.softdevice);
|
|
36
|
-
break;
|
|
37
34
|
case dongl_Event_simpleble_tag:
|
|
38
35
|
_on_simpleble_event(event.evt.simpleble);
|
|
39
36
|
break;
|
|
@@ -225,145 +222,15 @@ void AdapterDongl::_on_simpleble_event(const simpleble_Event& event) {
|
|
|
225
222
|
}
|
|
226
223
|
break;
|
|
227
224
|
}
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
225
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
// BluetoothAddressType address_type = SimpleBLE::BluetoothAddressType::UNSPECIFIED;
|
|
243
|
-
// if (event.evt.gap_adv_report.peer_addr.addr_type == sd_types_BleGapAddrType_BLE_GAP_ADDR_TYPE_PUBLIC) {
|
|
244
|
-
// address_type = SimpleBLE::BluetoothAddressType::PUBLIC;
|
|
245
|
-
// } else if (event.evt.gap_adv_report.peer_addr.addr_type ==
|
|
246
|
-
// sd_types_BleGapAddrType_BLE_GAP_ADDR_TYPE_RANDOM_STATIC ||
|
|
247
|
-
// event.evt.gap_adv_report.peer_addr.addr_type ==
|
|
248
|
-
// sd_types_BleGapAddrType_BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE) {
|
|
249
|
-
// address_type = SimpleBLE::BluetoothAddressType::RANDOM;
|
|
250
|
-
// }
|
|
251
|
-
|
|
252
|
-
// std::string identifier = "";
|
|
253
|
-
// std::map<uint16_t, ByteArray> manufacturer_data = {};
|
|
254
|
-
// std::map<BluetoothUUID, ByteArray> service_data = {};
|
|
255
|
-
|
|
256
|
-
// // Parse the advertising data
|
|
257
|
-
// size_t offset = 0;
|
|
258
|
-
// while (offset < event.evt.gap_adv_report.data.len) {
|
|
259
|
-
// if (offset + 1 >= event.evt.gap_adv_report.data.len) break;
|
|
260
|
-
|
|
261
|
-
// uint8_t length = event.evt.gap_adv_report.data.data.bytes[offset++];
|
|
262
|
-
// if (length == 0 || offset + length > event.evt.gap_adv_report.data.len) break;
|
|
263
|
-
|
|
264
|
-
// if (offset >= event.evt.gap_adv_report.data.len) break;
|
|
265
|
-
// uint8_t ad_type = event.evt.gap_adv_report.data.data.bytes[offset++];
|
|
266
|
-
|
|
267
|
-
// size_t data_length = length - 1; // AD Type takes 1 byte
|
|
268
|
-
// if (data_length == 0 || offset + data_length > event.evt.gap_adv_report.data.len) break;
|
|
269
|
-
|
|
270
|
-
// switch (ad_type) {
|
|
271
|
-
// case 0x08: // Shortened Local Name
|
|
272
|
-
// case 0x09: // Complete Local Name
|
|
273
|
-
// if (data_length > 0) {
|
|
274
|
-
// identifier = std::string(
|
|
275
|
-
// reinterpret_cast<const char*>(&event.evt.gap_adv_report.data.data.bytes[offset]),
|
|
276
|
-
// data_length);
|
|
277
|
-
// }
|
|
278
|
-
// break;
|
|
279
|
-
|
|
280
|
-
// case 0xFF: // Manufacturer Specific Data
|
|
281
|
-
// if (data_length >= 2) { // Need at least company ID (2 bytes)
|
|
282
|
-
// uint16_t company_id = event.evt.gap_adv_report.data.data.bytes[offset] |
|
|
283
|
-
// (event.evt.gap_adv_report.data.data.bytes[offset + 1] << 8);
|
|
284
|
-
// ByteArray manufacturer_bytes(
|
|
285
|
-
// &event.evt.gap_adv_report.data.data.bytes[offset + 2],
|
|
286
|
-
// &event.evt.gap_adv_report.data.data.bytes[offset + data_length]);
|
|
287
|
-
// manufacturer_data[company_id] = manufacturer_bytes;
|
|
288
|
-
// }
|
|
289
|
-
// break;
|
|
290
|
-
|
|
291
|
-
// case 0x16: // Service Data - 16-bit UUID
|
|
292
|
-
// if (data_length >= 2) { // Need at least UUID (2 bytes)
|
|
293
|
-
// uint16_t service_uuid_16 = event.evt.gap_adv_report.data.data.bytes[offset] |
|
|
294
|
-
// (event.evt.gap_adv_report.data.data.bytes[offset + 1] << 8);
|
|
295
|
-
// BluetoothUUID service_uuid = fmt::format("{:04x}", service_uuid_16);
|
|
296
|
-
// ByteArray service_bytes(
|
|
297
|
-
// &event.evt.gap_adv_report.data.data.bytes[offset + 2],
|
|
298
|
-
// &event.evt.gap_adv_report.data.data.bytes[offset + data_length]);
|
|
299
|
-
// service_data[service_uuid] = service_bytes;
|
|
300
|
-
// }
|
|
301
|
-
// break;
|
|
302
|
-
|
|
303
|
-
// case 0x20: // Service Data - 32-bit UUID
|
|
304
|
-
// if (data_length >= 4) { // Need at least UUID (4 bytes)
|
|
305
|
-
// uint32_t service_uuid_32 = event.evt.gap_adv_report.data.data.bytes[offset] |
|
|
306
|
-
// (event.evt.gap_adv_report.data.data.bytes[offset + 1] << 8) |
|
|
307
|
-
// (event.evt.gap_adv_report.data.data.bytes[offset + 2] << 16) |
|
|
308
|
-
// (event.evt.gap_adv_report.data.data.bytes[offset + 3] << 24);
|
|
309
|
-
// BluetoothUUID service_uuid = fmt::format("{:08x}", service_uuid_32);
|
|
310
|
-
// ByteArray service_bytes(
|
|
311
|
-
// &event.evt.gap_adv_report.data.data.bytes[offset + 4],
|
|
312
|
-
// &event.evt.gap_adv_report.data.data.bytes[offset + data_length]);
|
|
313
|
-
// service_data[service_uuid] = service_bytes;
|
|
314
|
-
// }
|
|
315
|
-
// break;
|
|
316
|
-
|
|
317
|
-
// case 0x21: // Service Data - 128-bit UUID
|
|
318
|
-
// if (data_length >= 16) { // Need at least UUID (16 bytes)
|
|
319
|
-
// // Convert to UUID string format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
|
|
320
|
-
// BluetoothUUID service_uuid = fmt::format(
|
|
321
|
-
// "{:02x}{:02x}{:02x}{:02x}-{:02x}{:02x}-{:02x}{:02x}-{:02x}{:02x}-{:02x}{:02x}{:02x}{:02x}{:02x}{:02x}",
|
|
322
|
-
// event.evt.gap_adv_report.data.data.bytes[offset + 15], // Little endian byte order
|
|
323
|
-
// event.evt.gap_adv_report.data.data.bytes[offset + 14],
|
|
324
|
-
// event.evt.gap_adv_report.data.data.bytes[offset + 13],
|
|
325
|
-
// event.evt.gap_adv_report.data.data.bytes[offset + 12],
|
|
326
|
-
// event.evt.gap_adv_report.data.data.bytes[offset + 11],
|
|
327
|
-
// event.evt.gap_adv_report.data.data.bytes[offset + 10],
|
|
328
|
-
// event.evt.gap_adv_report.data.data.bytes[offset + 9],
|
|
329
|
-
// event.evt.gap_adv_report.data.data.bytes[offset + 8],
|
|
330
|
-
// event.evt.gap_adv_report.data.data.bytes[offset + 7],
|
|
331
|
-
// event.evt.gap_adv_report.data.data.bytes[offset + 6],
|
|
332
|
-
// event.evt.gap_adv_report.data.data.bytes[offset + 5],
|
|
333
|
-
// event.evt.gap_adv_report.data.data.bytes[offset + 4],
|
|
334
|
-
// event.evt.gap_adv_report.data.data.bytes[offset + 3],
|
|
335
|
-
// event.evt.gap_adv_report.data.data.bytes[offset + 2],
|
|
336
|
-
// event.evt.gap_adv_report.data.data.bytes[offset + 1],
|
|
337
|
-
// event.evt.gap_adv_report.data.data.bytes[offset]);
|
|
338
|
-
// ByteArray service_bytes(
|
|
339
|
-
// &event.evt.gap_adv_report.data.data.bytes[offset + 16],
|
|
340
|
-
// &event.evt.gap_adv_report.data.data.bytes[offset + data_length]);
|
|
341
|
-
// service_data[service_uuid] = service_bytes;
|
|
342
|
-
// }
|
|
343
|
-
// break;
|
|
344
|
-
|
|
345
|
-
// default:
|
|
346
|
-
// // Skip unknown AD types
|
|
347
|
-
// break;
|
|
348
|
-
// }
|
|
349
|
-
|
|
350
|
-
// offset += data_length;
|
|
351
|
-
// }
|
|
352
|
-
|
|
353
|
-
// auto advertising_data = advertising_data_t{
|
|
354
|
-
// .identifier = identifier,
|
|
355
|
-
// .address_type = address_type,
|
|
356
|
-
// .mac_address = mac_address,
|
|
357
|
-
// .connectable = event.evt.gap_adv_report.type.connectable,
|
|
358
|
-
// .rssi = event.evt.gap_adv_report.rssi,
|
|
359
|
-
// .tx_power = event.evt.gap_adv_report.tx_power,
|
|
360
|
-
// .manufacturer_data = manufacturer_data,
|
|
361
|
-
// .service_data = service_data,
|
|
362
|
-
// };
|
|
363
|
-
// _scan_received_callback(advertising_data);
|
|
364
|
-
// break;
|
|
365
|
-
// }
|
|
366
|
-
// default:
|
|
367
|
-
// break;
|
|
368
|
-
// }
|
|
226
|
+
case simpleble_Event_value_changed_evt_tag: {
|
|
227
|
+
for (auto& [address, peripheral] : this->peripherals_) {
|
|
228
|
+
if (peripheral->conn_handle() == event.evt.value_changed_evt.conn_handle) {
|
|
229
|
+
peripheral->notify_value_changed(event.evt.value_changed_evt);
|
|
230
|
+
break;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
break;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
369
236
|
}
|
|
@@ -48,7 +48,6 @@ class AdapterDongl : public AdapterBase {
|
|
|
48
48
|
|
|
49
49
|
private:
|
|
50
50
|
void _scan_received_callback(advertising_data_t data);
|
|
51
|
-
void _on_softdevice_event(const sd_Event& event);
|
|
52
51
|
void _on_simpleble_event(const simpleble_Event& event);
|
|
53
52
|
|
|
54
53
|
std::shared_ptr<Dongl::Serial::Protocol> _serial_protocol;
|