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.
Files changed (30) hide show
  1. package/NitroSimplejsble.podspec +1 -0
  2. package/VERSION +1 -1
  3. package/dependencies/external/kvn/kvn_bytearray.h +7 -0
  4. package/lib/index.d.ts +3 -0
  5. package/lib/index.d.ts.map +1 -0
  6. package/lib/index.js +2 -0
  7. package/lib/specs/Adapter.nitro.d.ts +10 -0
  8. package/lib/specs/Adapter.nitro.d.ts.map +1 -0
  9. package/lib/specs/Adapter.nitro.js +1 -0
  10. package/package.json +2 -2
  11. package/simpleble/CMakeLists.txt +1 -6
  12. package/simpleble/src/backends/dongl/AdapterDongl.cpp +10 -143
  13. package/simpleble/src/backends/dongl/AdapterDongl.h +0 -1
  14. package/simpleble/src/backends/dongl/PeripheralDongl.cpp +120 -118
  15. package/simpleble/src/backends/dongl/PeripheralDongl.h +9 -2
  16. package/simpleble/src/backends/dongl/protocol/d2h.pb.h +9 -26
  17. package/simpleble/src/backends/dongl/protocol/h2d.pb.h +2 -12
  18. package/simpleble/src/backends/dongl/serial/Protocol.cpp +1 -755
  19. package/simpleble/src/backends/dongl/serial/Protocol.h +0 -75
  20. package/simpleble/test/src/test_bytearray.cpp +7 -0
  21. package/simpleble/src/backends/dongl/protocol/softdevice.pb.c +0 -18
  22. package/simpleble/src/backends/dongl/protocol/softdevice.pb.h +0 -815
  23. package/simpleble/src/backends/dongl/protocol/softdevice_gap.pb.c +0 -339
  24. package/simpleble/src/backends/dongl/protocol/softdevice_gap.pb.h +0 -2086
  25. package/simpleble/src/backends/dongl/protocol/softdevice_gattc.pb.c +0 -114
  26. package/simpleble/src/backends/dongl/protocol/softdevice_gattc.pb.h +0 -772
  27. package/simpleble/src/backends/dongl/protocol/softdevice_gatts.pb.c +0 -117
  28. package/simpleble/src/backends/dongl/protocol/softdevice_gatts.pb.h +0 -766
  29. package/simpleble/src/backends/dongl/protocol/softdevice_types.pb.c +0 -207
  30. package/simpleble/src/backends/dongl/protocol/softdevice_types.pb.h +0 -1686
@@ -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.10.4
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,3 @@
1
+ import type { Adapter } from "./specs/Adapter.nitro";
2
+ export declare const HybridAdapter: Adapter;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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,2 @@
1
+ import { NitroModules } from "react-native-nitro-modules";
2
+ export const HybridAdapter = NitroModules.createHybridObject("Adapter");
@@ -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.29",
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",
@@ -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
- void AdapterDongl::_on_softdevice_event(const sd_Event& event) {
232
- // //fmt::print("Received event: {}\n", event.which_evt);
233
-
234
- // switch (event.which_evt) {
235
- // case sd_Event_gap_adv_report_tag: {
236
- // BluetoothAddress mac_address = fmt::format(
237
- // "{:02X}:{:02X}:{:02X}:{:02X}:{:02X}:{:02X}", event.evt.gap_adv_report.peer_addr.addr[0],
238
- // event.evt.gap_adv_report.peer_addr.addr[1], event.evt.gap_adv_report.peer_addr.addr[2],
239
- // event.evt.gap_adv_report.peer_addr.addr[3], event.evt.gap_adv_report.peer_addr.addr[4],
240
- // event.evt.gap_adv_report.peer_addr.addr[5]);
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;