From cad1a2e4dc57720d924aafa171cf2e4acee6ef02 Mon Sep 17 00:00:00 2001 From: Szymon Janc Date: Thu, 7 Mar 2019 15:57:58 +0100 Subject: [PATCH 1/2] nimble/ll: Fix PHY validation in LE Set Extended Advertising Parameters Valid PHYs depends pon supported PHYs. This fix assert when starting advertising configured for unsupported PHY. --- nimble/controller/src/ble_ll_adv.c | 37 +++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/nimble/controller/src/ble_ll_adv.c b/nimble/controller/src/ble_ll_adv.c index 7af35c295..c30e639ef 100644 --- a/nimble/controller/src/ble_ll_adv.c +++ b/nimble/controller/src/ble_ll_adv.c @@ -2299,6 +2299,38 @@ ble_ll_adv_set_adv_data(uint8_t *cmd, uint8_t cmd_len, uint8_t instance, } #if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_EXT_ADV) +static bool +pri_phy_valid(uint8_t phy) +{ + switch (phy) { +#if MYNEWT_VAL(BLE_LL_CFG_FEAT_LE_CODED_PHY) + case BLE_HCI_LE_PHY_CODED: +#endif + case BLE_HCI_LE_PHY_1M: + return true; + default: + return false; + } + +} + +static bool +sec_phy_valid(uint8_t phy) +{ + switch (phy) { +#if MYNEWT_VAL(BLE_LL_CFG_FEAT_LE_CODED_PHY) + case BLE_HCI_LE_PHY_CODED: +#endif +#if MYNEWT_VAL(BLE_LL_CFG_FEAT_LE_2M_PHY) + case BLE_HCI_LE_PHY_2M: +#endif + case BLE_HCI_LE_PHY_1M: + return true; + default: + return false; + } +} + int ble_ll_adv_ext_set_param(uint8_t *cmdbuf, uint8_t *rspbuf, uint8_t *rsplen) { @@ -2440,14 +2472,13 @@ ble_ll_adv_ext_set_param(uint8_t *cmdbuf, uint8_t *rspbuf, uint8_t *rsplen) } pri_phy = cmdbuf[20]; - if (pri_phy != BLE_HCI_LE_PHY_1M && pri_phy != BLE_HCI_LE_PHY_CODED) { + if (!pri_phy_valid(pri_phy)) { rc = BLE_ERR_INV_HCI_CMD_PARMS; goto done; } sec_phy = cmdbuf[22]; - if (sec_phy != BLE_HCI_LE_PHY_1M && sec_phy != BLE_HCI_LE_PHY_2M && - sec_phy != BLE_HCI_LE_PHY_CODED) { + if (!sec_phy_valid(sec_phy)) { rc = BLE_ERR_INV_HCI_CMD_PARMS; goto done; } From 483b3b96241a9445b1b3bdab3811531ec1dff774 Mon Sep 17 00:00:00 2001 From: Szymon Janc Date: Thu, 7 Mar 2019 16:01:08 +0100 Subject: [PATCH 2/2] nimble/ll/dtm: Minor remainder calculation fix --- nimble/controller/src/ble_ll_adv.c | 1 - nimble/controller/src/ble_ll_dtm.c | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/nimble/controller/src/ble_ll_adv.c b/nimble/controller/src/ble_ll_adv.c index c30e639ef..27e70dff9 100644 --- a/nimble/controller/src/ble_ll_adv.c +++ b/nimble/controller/src/ble_ll_adv.c @@ -2311,7 +2311,6 @@ pri_phy_valid(uint8_t phy) default: return false; } - } static bool diff --git a/nimble/controller/src/ble_ll_dtm.c b/nimble/controller/src/ble_ll_dtm.c index 33a0e02b7..68dfd22f3 100644 --- a/nimble/controller/src/ble_ll_dtm.c +++ b/nimble/controller/src/ble_ll_dtm.c @@ -147,9 +147,9 @@ ble_ll_dtm_set_next(struct dtm_ctx *ctx) sch->start_time += ctx->itvl_ticks; sch->remainder += ctx->itvl_rem_usec; - if (sch->remainder > 30) { + if (sch->remainder >= 31) { sch->start_time++; - sch->remainder -= 30; + sch->remainder -= 31; } sch->start_time -= g_ble_ll_sched_offset_ticks;