|
49 | 49 | #endif
|
50 | 50 |
|
51 | 51 | /* 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 */ |
54 | 54 |
|
55 | 55 | #define APP_ADV_TIMEOUT_IN_SECONDS 180 /**< The advertising timeout (in units of seconds). */
|
56 | 56 | #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)
|
228 | 228 |
|
229 | 229 | switch (p_ble_evt->header.evt_id) {
|
230 | 230 | 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 | + } |
234 | 242 | break;
|
235 | 243 |
|
236 | 244 | case BLE_GAP_EVT_CONNECTED:
|
@@ -1252,21 +1260,26 @@ void jsble_nfc_start(const uint8_t *data, size_t len) {
|
1252 | 1260 | #if CENTRAL_LINK_COUNT>0
|
1253 | 1261 | void jsble_central_connect(ble_gap_addr_t peer_addr) {
|
1254 | 1262 | 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; |
1256 | 1266 | 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. |
1261 | 1271 |
|
1262 |
| - ble_gap_conn_params_t gap_conn_params; |
| 1272 | + static ble_gap_conn_params_t gap_conn_params; |
1263 | 1273 | 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; |
1268 | 1281 |
|
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); |
1270 | 1283 | if (jsble_check_error(err_code)) {
|
1271 | 1284 | bleCompleteTaskFail(BLETASK_CONNECT, 0);
|
1272 | 1285 | }
|
|
0 commit comments