Skip to content

Commit fa5307f

Browse files
committed
tweaks for BLE connection
1 parent 566e0c4 commit fa5307f

File tree

2 files changed

+35
-19
lines changed

2 files changed

+35
-19
lines changed

libs/bluetooth/jswrap_bluetooth.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ void bleCompleteTask(BleTask task, bool ok, JsVar *data) {
6767
if (blePromise) {
6868
if (ok) jspromise_resolve(blePromise, data);
6969
else jspromise_reject(blePromise, data);
70+
jsvUnLock(blePromise);
71+
blePromise = 0;
7072
}
7173
jshHadEvent();
7274
}
@@ -1053,7 +1055,7 @@ Write a characteristic's value
10531055
var device;
10541056
NRF.connect(device_address).then(function(d) {
10551057
device = d;
1056-
return d.getPrimaryService("service_uuid);
1058+
return d.getPrimaryService("service_uuid");
10571059
}).then(function(s) {
10581060
console.log("Service ",s);
10591061
return s.getCharacteristic(characteristic_uuid);
@@ -1097,7 +1099,7 @@ Read a characteristic's value
10971099
var device;
10981100
NRF.connect(device_address).then(function(d) {
10991101
device = d;
1100-
return d.getPrimaryService("service_uuid);
1102+
return d.getPrimaryService("service_uuid");
11011103
}).then(function(s) {
11021104
console.log("Service ",s);
11031105
return s.getCharacteristic(characteristic_uuid);
@@ -1133,8 +1135,9 @@ JsVar *jswrap_nrf_BluetoothRemoteGATTCharacteristic_readValue(JsVar *characteris
11331135
// Scanning, getting a service, characteristic, and then writing it
11341136
11351137
NRF.setScan(function(d) {
1136-
console.log(JSON.stringify(d,null,2));
1138+
console.log(JSON.stringify(d.addr,null,2));
11371139
});
1140+
NRF.setScan(function(d) { console.log(d.addr); });
11381141
NRF.setScan(false);
11391142
11401143
// getting all services

targets/nrf5x/bluetooth.c

Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@
4949
#endif
5050

5151
/* We want to listen as much of the time as possible. Not sure if 100/100 is feasible (50/100 is what's used in examples), but it seems to work fine like this. */
52-
#define SCAN_INTERVAL 0x00A0 /**< Scan interval in units of 0.625 millisecond. 100ms */
53-
#define SCAN_WINDOW 0x00A0 /**< Scan window in units of 0.625 millisecond. 100ms */
52+
#define SCAN_INTERVAL MSEC_TO_UNITS(100, UNIT_0_625_MS) /**< Scan interval in units of 0.625 millisecond - 100 msec */
53+
#define SCAN_WINDOW MSEC_TO_UNITS(100, UNIT_0_625_MS) /**< Scan window in units of 0.625 millisecond - 100 msec */
5454

5555
#define APP_ADV_TIMEOUT_IN_SECONDS 180 /**< The advertising timeout (in units of seconds). */
5656
#define MIN_CONN_INTERVAL MSEC_TO_UNITS(7.5, UNIT_1_25_MS) /**< Minimum acceptable connection interval (7.5 ms), Connection interval uses 1.25 ms units. */
@@ -228,9 +228,17 @@ static void on_ble_evt(ble_evt_t * p_ble_evt)
228228

229229
switch (p_ble_evt->header.evt_id) {
230230
case BLE_GAP_EVT_TIMEOUT:
231-
// the timeout for sd_ble_gap_adv_start expired - kick it off again
232-
bleStatus &= ~BLE_IS_ADVERTISING; // we still think we're advertising, but we stopped
233-
jsble_advertising_start();
231+
#if CENTRAL_LINK_COUNT>0
232+
if (bleInTask(BLETASK_CONNECT)) {
233+
// timeout!
234+
bleCompleteTaskFail(BLETASK_CONNECT, 0);
235+
} else
236+
#endif
237+
{
238+
// the timeout for sd_ble_gap_adv_start expired - kick it off again
239+
bleStatus &= ~BLE_IS_ADVERTISING; // we still think we're advertising, but we stopped
240+
jsble_advertising_start();
241+
}
234242
break;
235243

236244
case BLE_GAP_EVT_CONNECTED:
@@ -1252,21 +1260,26 @@ void jsble_nfc_start(const uint8_t *data, size_t len) {
12521260
#if CENTRAL_LINK_COUNT>0
12531261
void jsble_central_connect(ble_gap_addr_t peer_addr) {
12541262
uint32_t err_code;
1255-
ble_gap_scan_params_t m_scan_param;
1263+
// TODO: do these need to be static?
1264+
1265+
static ble_gap_scan_params_t m_scan_param;
12561266
memset(&m_scan_param, 0, sizeof(m_scan_param));
1257-
m_scan_param.active = 0; // Active scanning set.
1258-
m_scan_param.interval = SCAN_INTERVAL;// Scan interval.
1259-
m_scan_param.window = SCAN_WINDOW; // Scan window.
1260-
m_scan_param.timeout = 0x0000; // No timeout.
1267+
m_scan_param.active = 1; // Active scanning set.
1268+
m_scan_param.interval = MSEC_TO_UNITS(100, UNIT_0_625_MS); // Scan interval.
1269+
m_scan_param.window = MSEC_TO_UNITS(50, UNIT_0_625_MS); // Scan window.
1270+
m_scan_param.timeout = 4; // 4 second timeout.
12611271

1262-
ble_gap_conn_params_t gap_conn_params;
1272+
static ble_gap_conn_params_t gap_conn_params;
12631273
memset(&gap_conn_params, 0, sizeof(gap_conn_params));
1264-
gap_conn_params.min_conn_interval = MIN_CONN_INTERVAL;
1265-
gap_conn_params.max_conn_interval = MAX_CONN_INTERVAL;
1266-
gap_conn_params.slave_latency = SLAVE_LATENCY;
1267-
gap_conn_params.conn_sup_timeout = CONN_SUP_TIMEOUT;
1274+
gap_conn_params.min_conn_interval = MSEC_TO_UNITS(7.5, UNIT_1_25_MS);
1275+
gap_conn_params.max_conn_interval = MSEC_TO_UNITS(75, UNIT_1_25_MS);
1276+
gap_conn_params.slave_latency = 0;
1277+
gap_conn_params.conn_sup_timeout = MSEC_TO_UNITS(4000, UNIT_10_MS);
1278+
1279+
static ble_gap_addr_t addr;
1280+
addr = peer_addr;
12681281

1269-
err_code = sd_ble_gap_connect(&peer_addr, &m_scan_param, &gap_conn_params);
1282+
err_code = sd_ble_gap_connect(&addr, &m_scan_param, &gap_conn_params);
12701283
if (jsble_check_error(err_code)) {
12711284
bleCompleteTaskFail(BLETASK_CONNECT, 0);
12721285
}

0 commit comments

Comments
 (0)