@@ -132,6 +132,7 @@ bool jsble_check_error(uint32_t err_code) {
132
132
if (!err_code ) return false;
133
133
const char * name = 0 ;
134
134
if (err_code == NRF_ERROR_INVALID_PARAM ) name = "INVALID_PARAM" ;
135
+ else if (err_code == NRF_ERROR_DATA_SIZE ) name = "DATA_SIZE" ;
135
136
if (name ) jsExceptionHere (JSET_ERROR , "Got BLE error %s" , name );
136
137
else jsExceptionHere (JSET_ERROR , "Got BLE error code %d" , err_code );
137
138
return true;
@@ -427,10 +428,11 @@ static void on_ble_evt(ble_evt_t * p_ble_evt)
427
428
#if CENTRAL_LINK_COUNT > 0
428
429
// For discovery....
429
430
case BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP : {
431
+ bool done = true;
432
+
433
+ JsVar * srvcs = jsvObjectGetChild (execInfo .hiddenRoot , "bleSvcs" , JSV_ARRAY );
430
434
if (p_ble_evt -> evt .gattc_evt .gatt_status == BLE_GATT_STATUS_SUCCESS &&
431
435
p_ble_evt -> evt .gattc_evt .params .prim_srvc_disc_rsp .count != 0 ) {
432
-
433
- JsVar * srvcs = jsvObjectGetChild (execInfo .hiddenRoot , "bleSvcs" , JSV_ARRAY );
434
436
if (srvcs ) {
435
437
int i ;
436
438
// Should actually return 'BLEService' object here
@@ -452,23 +454,23 @@ static void on_ble_evt(ble_evt_t * p_ble_evt)
452
454
453
455
uint16_t last = p_ble_evt -> evt .gattc_evt .params .prim_srvc_disc_rsp .count - 1 ;
454
456
if (p_ble_evt -> evt .gattc_evt .params .prim_srvc_disc_rsp .services [last ].handle_range .end_handle < 0xFFFF ) {
455
- jsvUnLock (srvcs );
456
457
// Now try again
457
458
uint16_t start_handle = p_ble_evt -> evt .gattc_evt .params .prim_srvc_disc_rsp .services [last ].handle_range .end_handle + 1 ;
458
- sd_ble_gattc_primary_services_discover (p_ble_evt -> evt .gap_evt .conn_handle , start_handle , NULL );
459
- } else {
460
- // When done, send the result to the handler
461
- if (srvcs && bleUUIDFilter .type != BLE_UUID_TYPE_UNKNOWN ) {
462
- // single item because filtering
463
- JsVar * t = jsvSkipNameAndUnLock (jsvArrayPopFirst (srvcs ));
464
- jsvUnLock (srvcs );
465
- srvcs = t ;
466
- }
467
- bleCompleteTaskSuccess (BLETASK_PRIMARYSERVICE , srvcs );
459
+ done = sd_ble_gattc_primary_services_discover (p_ble_evt -> evt .gap_evt .conn_handle , start_handle , NULL ) != NRF_SUCCESS ;;
460
+ }
461
+ }
462
+ if (done ) {
463
+ // When done, send the result to the handler
464
+ if (srvcs && bleUUIDFilter .type != BLE_UUID_TYPE_UNKNOWN ) {
465
+ // single item because filtering
466
+ JsVar * t = jsvSkipNameAndUnLock (jsvArrayPopFirst (srvcs ));
468
467
jsvUnLock (srvcs );
469
- jsvObjectSetChild ( execInfo . hiddenRoot , "bleSvcs" , 0 ) ;
468
+ srvcs = t ;
470
469
}
470
+ bleCompleteTaskSuccess (BLETASK_PRIMARYSERVICE , srvcs );
471
+ jsvObjectSetChild (execInfo .hiddenRoot , "bleSvcs" , 0 );
471
472
} // else error
473
+ jsvUnLock (srvcs );
472
474
break ;
473
475
}
474
476
case BLE_GATTC_EVT_CHAR_DISC_RSP : {
@@ -846,10 +848,7 @@ static void ble_stack_init() {
846
848
& ble_enable_params );
847
849
APP_ERROR_CHECK (err_code );
848
850
849
- uint32_t softdevice_extra_ram_hack = 0 ;
850
-
851
851
ble_enable_params .common_enable_params .vs_uuid_count = 3 ;
852
- softdevice_extra_ram_hack += 32 ; // now we have more UUIDs, SD needs more RAM
853
852
854
853
//Check the ram settings against the used number of links
855
854
CHECK_RAM_START_ADDR (CENTRAL_LINK_COUNT , PERIPHERAL_LINK_COUNT );
@@ -1260,7 +1259,7 @@ void jsble_nfc_start(const uint8_t *data, size_t len) {
1260
1259
#if CENTRAL_LINK_COUNT > 0
1261
1260
void jsble_central_connect (ble_gap_addr_t peer_addr ) {
1262
1261
uint32_t err_code ;
1263
- // TODO: do these need to be static?
1262
+ // TODO: do these really need to be static?
1264
1263
1265
1264
static ble_gap_scan_params_t m_scan_param ;
1266
1265
memset (& m_scan_param , 0 , sizeof (m_scan_param ));
@@ -1310,18 +1309,19 @@ void jsble_central_getCharacteristics(JsVar *service, ble_uuid_t uuid) {
1310
1309
}
1311
1310
1312
1311
void jsble_central_characteristicWrite (JsVar * characteristic , char * dataPtr , size_t dataLen ) {
1313
- const ble_gattc_write_params_t write_params = {
1314
- .write_op = BLE_GATT_OP_WRITE_CMD ,
1315
- .flags = BLE_GATT_EXEC_WRITE_FLAG_PREPARED_WRITE ,
1316
- .handle = jsvGetIntegerAndUnLock (jsvObjectGetChild (characteristic , "handle_value" , 0 )),
1317
- .offset = 0 ,
1318
- .len = dataLen ,
1319
- .p_value = (uint8_t * )dataPtr
1320
- };
1321
- uint32_t err_code ;
1322
- err_code = sd_ble_gattc_write (m_central_conn_handle , & write_params );
1323
- if (jsble_check_error (err_code ))
1324
- bleCompleteTaskFail (BLETASK_CHARACTERISTIC_WRITE , 0 );
1312
+ ble_gattc_write_params_t write_params ;
1313
+ memset (& write_params , 0 , sizeof (write_params ));
1314
+ write_params .write_op = BLE_GATT_OP_WRITE_CMD ;
1315
+ write_params .flags = BLE_GATT_EXEC_WRITE_FLAG_PREPARED_WRITE ;
1316
+ write_params .handle = jsvGetIntegerAndUnLock (jsvObjectGetChild (characteristic , "handle_value" , 0 ));
1317
+ write_params .offset = 0 ;
1318
+ write_params .len = dataLen ;
1319
+ write_params .p_value = (uint8_t * )dataPtr ;
1320
+
1321
+ uint32_t err_code ;
1322
+ err_code = sd_ble_gattc_write (m_central_conn_handle , & write_params );
1323
+ if (jsble_check_error (err_code ))
1324
+ bleCompleteTaskFail (BLETASK_CHARACTERISTIC_WRITE , 0 );
1325
1325
}
1326
1326
1327
1327
void jsble_central_characteristicRead (JsVar * characteristic ) {
0 commit comments