1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2026-01-01 01:41:18 +01:00

Merge pull request #14445 from haukepetersen/opt_nimble_tparams

nimble/x: update NimBLE ver + timing param cleanup
This commit is contained in:
Martine Lenders 2020-07-08 10:15:35 +02:00 committed by GitHub
commit a80455fa2a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 64 additions and 57 deletions

View File

@ -1,6 +1,6 @@
PKG_NAME = nimble
PKG_URL = https://github.com/apache/mynewt-nimble.git
PKG_VERSION = 37245d0c3f239c35c0c734a337c7b6301fcfd70b
PKG_VERSION = cd7d7aa286ee1083818cbaac1e89bf69fe554f42
PKG_LICENSE = Apache-2.0
include $(RIOTBASE)/pkg/pkg.mk

View File

@ -27,38 +27,38 @@ extern "C" {
* @name Default parameters used for the nimble_netif_autoconn module
* @{
*/
#ifndef NIMBLE_AUTOCONN_PERIOD_SCAN
#define NIMBLE_AUTOCONN_PERIOD_SCAN (2000U) /* 2s */
#ifndef NIMBLE_AUTOCONN_PERIOD_SCAN_MS
#define NIMBLE_AUTOCONN_PERIOD_SCAN_MS (2000U) /* 2s */
#endif
#ifndef NIMBLE_AUTOCONN_PERIOD_ADV
#define NIMBLE_AUTOCONN_PERIOD_ADV (10000U) /* 10s */
#ifndef NIMBLE_AUTOCONN_PERIOD_ADV_MS
#define NIMBLE_AUTOCONN_PERIOD_ADV_MS (10000U) /* 10s */
#endif
#ifndef NIMBLE_AUTOCONN_PERIOD_JITTER
#define NIMBLE_AUTOCONN_PERIOD_JITTER (5000U) /* 0-5s */
#ifndef NIMBLE_AUTOCONN_PERIOD_JITTER_MS
#define NIMBLE_AUTOCONN_PERIOD_JITTER_MS (5000U) /* 0-5s */
#endif
#ifndef NIMBLE_AUTOCONN_ADV_ITVL
#define NIMBLE_AUTOCONN_ADV_ITVL (100U) /* 100ms */
#ifndef NIMBLE_AUTOCONN_ADV_ITVL_MS
#define NIMBLE_AUTOCONN_ADV_ITVL_MS (100U) /* 100ms */
#endif
#ifndef NIMBLE_AUTOCONN_SCAN_ITVL
#define NIMBLE_AUTOCONN_SCAN_ITVL (1500U) /* 1.5s */
#ifndef NIMBLE_AUTOCONN_SCAN_ITVL_MS
#define NIMBLE_AUTOCONN_SCAN_ITVL_MS (1500U) /* 1.5s */
#endif
#ifndef NIMBLE_AUTOCONN_SCAN_WIN
#define NIMBLE_AUTOCONN_SCAN_WIN (110U) /* 110ms */
#ifndef NIMBLE_AUTOCONN_SCAN_WIN_MS
#define NIMBLE_AUTOCONN_SCAN_WIN_MS (110U) /* 110ms */
#endif
#ifndef NIMBLE_AUTOCONN_CONN_TIMEOUT
#define NIMBLE_AUTOCONN_CONN_TIMEOUT (330U) /* 3 * SCAN_WIN */
#ifndef NIMBLE_AUTOCONN_CONN_TIMEOUT_MS
#define NIMBLE_AUTOCONN_CONN_TIMEOUT_MS (3 * NIMBLE_AUTOCONN_SCAN_WIN_MS)
#endif
#ifndef NIMBLE_AUTOCONN_CONN_ITVL
#define NIMBLE_AUTOCONN_CONN_ITVL (75U) /* 75ms */
#ifndef NIMBLE_AUTOCONN_CONN_ITVL_MS
#define NIMBLE_AUTOCONN_CONN_ITVL_MS (75U) /* 75ms */
#endif
#ifndef NIMBLE_AUTOCONN_CONN_LATENCY
#define NIMBLE_AUTOCONN_CONN_LATENCY (0)
#endif
#ifndef NIMBLE_AUTOCONN_CONN_SUPER_TO
#define NIMBLE_AUTOCONN_CONN_SUPER_TO (2500U) /* 2.5s */
#ifndef NIMBLE_AUTOCONN_CONN_SVTO_MS
#define NIMBLE_AUTOCONN_CONN_SVTO_MS (2500U) /* 2.5s */
#endif
#ifndef NIMBLE_AUTOCONN_NODE_ID
@ -66,17 +66,17 @@ extern "C" {
#endif
#ifndef NIMBLE_AUTOCONN_PARAMS
#define NIMBLE_AUTOCONN_PARAMS \
{ .period_scan = NIMBLE_AUTOCONN_PERIOD_SCAN, \
.period_adv = NIMBLE_AUTOCONN_PERIOD_ADV, \
.period_jitter = NIMBLE_AUTOCONN_PERIOD_JITTER, \
.adv_itvl = NIMBLE_AUTOCONN_ADV_ITVL, \
.scan_itvl = NIMBLE_AUTOCONN_SCAN_ITVL, \
.scan_win = NIMBLE_AUTOCONN_SCAN_WIN, \
.conn_timeout = NIMBLE_AUTOCONN_CONN_TIMEOUT, \
.conn_itvl = NIMBLE_AUTOCONN_CONN_ITVL, \
.conn_latency = NIMBLE_AUTOCONN_CONN_LATENCY, \
.conn_super_to = NIMBLE_AUTOCONN_CONN_SUPER_TO, \
#define NIMBLE_AUTOCONN_PARAMS \
{ .period_scan = NIMBLE_AUTOCONN_PERIOD_SCAN_MS, \
.period_adv = NIMBLE_AUTOCONN_PERIOD_ADV_MS, \
.period_jitter = NIMBLE_AUTOCONN_PERIOD_JITTER_MS, \
.adv_itvl = NIMBLE_AUTOCONN_ADV_ITVL_MS, \
.scan_itvl = NIMBLE_AUTOCONN_SCAN_ITVL_MS, \
.scan_win = NIMBLE_AUTOCONN_SCAN_WIN_MS, \
.conn_timeout = NIMBLE_AUTOCONN_CONN_TIMEOUT_MS, \
.conn_itvl = NIMBLE_AUTOCONN_CONN_ITVL_MS, \
.conn_latency = NIMBLE_AUTOCONN_CONN_LATENCY, \
.conn_super_to = NIMBLE_AUTOCONN_CONN_SVTO_MS, \
.node_id = NIMBLE_AUTOCONN_NODE_ID, }
#endif
/**@}*/

View File

@ -279,15 +279,16 @@ int nimble_autoconn_update(const nimble_autoconn_params_t *params,
ble_npl_time_ms_to_ticks(params->period_jitter, &_period_jitter);
/* populate the connection parameters */
_conn_params.scan_itvl = ((params->scan_win * 1000) / BLE_HCI_SCAN_ITVL);
_conn_params.scan_window = ((params->scan_win * 1000) / BLE_HCI_SCAN_ITVL);
_conn_params.itvl_min = ((params->conn_itvl * 1000) / BLE_HCI_CONN_ITVL);
_conn_params.itvl_max = ((params->conn_itvl * 1000) / BLE_HCI_CONN_ITVL);
_conn_params.scan_itvl = BLE_GAP_SCAN_ITVL_MS(params->scan_win);
_conn_params.scan_window = _conn_params.scan_itvl;
_conn_params.itvl_min = BLE_GAP_CONN_ITVL_MS(params->conn_itvl);
_conn_params.itvl_max = _conn_params.itvl_min;
_conn_params.latency = 0;
_conn_params.supervision_timeout = (params->conn_super_to / 10);
_conn_params.supervision_timeout = BLE_GAP_SUPERVISION_TIMEOUT_MS(
params->conn_super_to);
_conn_params.min_ce_len = 0;
_conn_params.max_ce_len = 0;
_conn_timeout = ((params->conn_timeout * 1000) / BLE_HCI_SCAN_ITVL);
_conn_timeout = params->conn_timeout;
/* we use the same values to updated existing connections */
struct ble_gap_upd_params conn_update_params;
@ -300,18 +301,18 @@ int nimble_autoconn_update(const nimble_autoconn_params_t *params,
/* calculate the used scan parameters */
struct ble_gap_disc_params scan_params;
scan_params.itvl = ((params->scan_itvl * 1000) / BLE_HCI_SCAN_ITVL),
scan_params.window = ((params->scan_win * 1000) / BLE_HCI_SCAN_ITVL),
scan_params.filter_policy = 0,
scan_params.limited = 0,
scan_params.passive = 0,
scan_params.filter_duplicates = 1,
scan_params.itvl = BLE_GAP_SCAN_ITVL_MS(params->scan_itvl);
scan_params.window = BLE_GAP_SCAN_WIN_MS(params->scan_win);
scan_params.filter_policy = 0;
scan_params.limited = 0;
scan_params.passive = 0;
scan_params.filter_duplicates = 1;
/* set the advertising parameters used */
_adv_params.conn_mode = BLE_GAP_CONN_MODE_UND;
_adv_params.disc_mode = BLE_GAP_DISC_MODE_GEN;
_adv_params.itvl_min = ((params->adv_itvl * 1000) / BLE_HCI_ADV_ITVL);
_adv_params.itvl_max = ((params->adv_itvl * 1000) / BLE_HCI_ADV_ITVL);
_adv_params.itvl_min = BLE_GAP_ADV_ITVL_MS(params->adv_itvl);
_adv_params.itvl_max = _adv_params.itvl_min;
_adv_params.channel_map = 0;
_adv_params.filter_policy = 0;
_adv_params.high_duty_cycle = 0;

View File

@ -176,19 +176,20 @@ void nimble_statconn_init(void)
/* set the advertising parameters used */
_adv_params.conn_mode = BLE_GAP_CONN_MODE_UND;
_adv_params.disc_mode = BLE_GAP_DISC_MODE_GEN;
_adv_params.itvl_min = ((NIMBLE_STATCONN_ADV_ITVL_MS * 1000) / BLE_HCI_ADV_ITVL);
_adv_params.itvl_max = ((NIMBLE_STATCONN_ADV_ITVL_MS * 1000) / BLE_HCI_ADV_ITVL);
_adv_params.itvl_min = BLE_GAP_ADV_ITVL_MS(NIMBLE_STATCONN_ADV_ITVL_MS);
_adv_params.itvl_max = _adv_params.itvl_min;
_adv_params.channel_map = 0;
_adv_params.filter_policy = 0;
_adv_params.high_duty_cycle = 0;
/* set connection parameters */
_conn_params.scan_itvl = ((NIMBLE_STATCONN_CONN_WIN_MS * 1000) / BLE_HCI_SCAN_ITVL);
_conn_params.scan_window = ((NIMBLE_STATCONN_CONN_WIN_MS * 1000) / BLE_HCI_SCAN_ITVL);
_conn_params.itvl_min = ((NIMBLE_STATCONN_CONN_ITVL_MS * 1000) / BLE_HCI_CONN_ITVL);
_conn_params.itvl_max = ((NIMBLE_STATCONN_CONN_ITVL_MS * 1000) / BLE_HCI_CONN_ITVL);
_conn_params.scan_itvl = BLE_GAP_SCAN_ITVL_MS(NIMBLE_STATCONN_CONN_WIN_MS);
_conn_params.scan_window = _conn_params.scan_itvl;
_conn_params.itvl_min = BLE_GAP_CONN_ITVL_MS(NIMBLE_STATCONN_CONN_ITVL_MS);
_conn_params.itvl_max = _conn_params.itvl_min;
_conn_params.latency = NIMBLE_STATCONN_CONN_LATENCY;
_conn_params.supervision_timeout = (NIMBLE_STATCONN_CONN_SUPERTO_MS / 10);
_conn_params.supervision_timeout = BLE_GAP_SUPERVISION_TIMEOUT_MS(
NIMBLE_STATCONN_CONN_SUPERTO_MS);
_conn_params.min_ce_len = 0;
_conn_params.max_ce_len = 0;
_conn_timeout = NIMBLE_STATCONN_CONN_TIMEOUT_MS;

View File

@ -343,8 +343,8 @@ static void _cmd_close(int handle)
static void _cmd_update(int handle, int itvl, int timeout)
{
struct ble_gap_upd_params params;
params.itvl_min = (uint16_t)((itvl * 1000) / BLE_HCI_CONN_ITVL);
params.itvl_max = (uint16_t)((itvl * 1000) / BLE_HCI_CONN_ITVL);
params.itvl_min = (uint16_t)BLE_GAP_CONN_ITVL_MS(itvl);
params.itvl_max = (uint16_t)BLE_GAP_CONN_ITVL_MS(itvl);
params.latency = 0;
params.supervision_timeout = (uint16_t)(timeout / 10);
params.min_ce_len = BLE_GAP_INITIAL_CONN_MIN_CE_LEN;

View File

@ -329,9 +329,11 @@ int main(void)
/* wait until we are connected to the test server */
thread_flags_wait_all(FLAG_UP);
struct ble_l2cap_chan_info info;
ble_l2cap_get_chan_info(_coc, &info);
puts("# Connection established");
printf("# MTUs: our %i, remote %i\n",
ble_l2cap_get_our_mtu(_coc), ble_l2cap_get_peer_mtu(_coc));
(int)info.our_l2cap_mtu, (int)info.peer_l2cap_mtu);
/* start shell */
puts("# Shell is now available");

View File

@ -100,12 +100,15 @@ static int _on_l2cap_evt(struct ble_l2cap_event *event, void *arg)
(void)arg;
switch (event->type) {
case BLE_L2CAP_EVENT_COC_CONNECTED:
case BLE_L2CAP_EVENT_COC_CONNECTED: {
_coc = event->connect.chan;
struct ble_l2cap_chan_info info;
ble_l2cap_get_chan_info(_coc, &info);
puts("# L2CAP: CONNECTED");
printf("# MTUs: our %i, remote %i\n",
ble_l2cap_get_our_mtu(_coc), ble_l2cap_get_peer_mtu(_coc));
(int)info.our_l2cap_mtu, (int)info.peer_l2cap_mtu);
break;
}
case BLE_L2CAP_EVENT_COC_DISCONNECTED:
_coc = NULL;
puts("# L2CAP: DISCONNECTED");

View File

@ -25,7 +25,7 @@ CFLAGS += -DAPP_CID=$(APP_CID)
# configure NimBLE
USEPKG += nimble
MSYS_CNT ?= 23
MSYS_CNT ?= 40
CFLAGS += -DMYNEWT_VAL_BLE_L2CAP_COC_MAX_NUM=1
CFLAGS += -DMYNEWT_VAL_BLE_L2CAP_COC_MPS=250
CFLAGS += -DMYNEWT_VAL_BLE_MAX_CONNECTIONS=1