nimble/controller: Fix build with extended advertising disabled

X-Original-Commit: cf1aa4deb5050d299a6a9f7175d49de15405b2ee
This commit is contained in:
Szymon Janc
2017-06-29 23:20:17 +02:00
parent 85ff7e4bb7
commit 6aa48e00a3
2 changed files with 53 additions and 1 deletions
+49 -1
View File
@@ -308,6 +308,7 @@ ble_ll_adv_legacy_pdu_make(struct ble_ll_adv_sm *advsm, struct os_mbuf *m)
} }
} }
#if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_EXT_ADV)
/* TODO this shouldn't be needed /* TODO this shouldn't be needed
* *
* PDU could be constructed before scheduling and held in mbuf until * PDU could be constructed before scheduling and held in mbuf until
@@ -512,6 +513,7 @@ ble_ll_adv_pdu_make(struct ble_ll_adv_sm *advsm, struct os_mbuf *m)
dptr += advsm->adv_len; dptr += advsm->adv_len;
} }
} }
#endif
static struct os_mbuf * static struct os_mbuf *
ble_ll_adv_scan_rsp_legacy_pdu_make(struct ble_ll_adv_sm *advsm) ble_ll_adv_scan_rsp_legacy_pdu_make(struct ble_ll_adv_sm *advsm)
@@ -560,6 +562,7 @@ ble_ll_adv_scan_rsp_legacy_pdu_make(struct ble_ll_adv_sm *advsm)
return m; return m;
} }
#if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_EXT_ADV)
/** /**
* Create a scan response PDU * Create a scan response PDU
* *
@@ -698,6 +701,7 @@ ble_ll_adv_aux_conn_rsp_pdu_make(struct ble_ll_adv_sm *advsm, uint8_t *peer,
return m; return m;
} }
#endif
/** /**
* Called to indicate the advertising event is over. * Called to indicate the advertising event is over.
@@ -814,6 +818,7 @@ ble_ll_adv_tx_start_cb(struct ble_ll_sched_item *sch)
goto adv_tx_done; goto adv_tx_done;
} }
#if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_EXT_ADV)
advsm->adv_secondary = 0; advsm->adv_secondary = 0;
ble_ll_adv_pdu_make(advsm, adv_pdu); ble_ll_adv_pdu_make(advsm, adv_pdu);
@@ -823,6 +828,12 @@ ble_ll_adv_tx_start_cb(struct ble_ll_sched_item *sch)
} else { } else {
ble_phy_mode_set(advsm->pri_phy, advsm->pri_phy); ble_phy_mode_set(advsm->pri_phy, advsm->pri_phy);
} }
#endif
#else
ble_ll_adv_legacy_pdu_make(advsm, adv_pdu);
#if (BLE_LL_BT5_PHY_SUPPORTED == 1)
ble_phy_mode_set(BLE_PHY_MODE_1M, BLE_PHY_MODE_1M);
#endif
#endif #endif
/* Transmit advertisement */ /* Transmit advertisement */
@@ -864,11 +875,15 @@ ble_ll_adv_set_sched(struct ble_ll_adv_sm *advsm)
sch->sched_type = BLE_LL_SCHED_TYPE_ADV; sch->sched_type = BLE_LL_SCHED_TYPE_ADV;
/* Set end time to maximum time this schedule item may take */ /* Set end time to maximum time this schedule item may take */
#if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_EXT_ADV)
if (advsm->props & BLE_HCI_LE_SET_EXT_ADV_PROP_LEGACY) { if (advsm->props & BLE_HCI_LE_SET_EXT_ADV_PROP_LEGACY) {
max_usecs = ble_ll_pdu_tx_time_get(advsm->adv_pdu_len, BLE_PHY_MODE_1M); max_usecs = ble_ll_pdu_tx_time_get(advsm->adv_pdu_len, BLE_PHY_MODE_1M);
} else { } else {
max_usecs = ble_ll_pdu_tx_time_get(advsm->adv_pdu_len, advsm->pri_phy); max_usecs = ble_ll_pdu_tx_time_get(advsm->adv_pdu_len, advsm->pri_phy);
} }
#else
max_usecs = ble_ll_pdu_tx_time_get(advsm->adv_pdu_len, BLE_PHY_MODE_1M);
#endif
if (advsm->props & BLE_HCI_LE_SET_EXT_ADV_PROP_DIRECTED) { if (advsm->props & BLE_HCI_LE_SET_EXT_ADV_PROP_DIRECTED) {
max_usecs += BLE_LL_SCHED_DIRECT_ADV_MAX_USECS; max_usecs += BLE_LL_SCHED_DIRECT_ADV_MAX_USECS;
@@ -888,6 +903,7 @@ ble_ll_adv_set_sched(struct ble_ll_adv_sm *advsm)
os_cputime_usecs_to_ticks(max_usecs); os_cputime_usecs_to_ticks(max_usecs);
} }
#if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_EXT_ADV)
static int static int
ble_ll_adv_secondary_tx_start_cb(struct ble_ll_sched_item *sch) ble_ll_adv_secondary_tx_start_cb(struct ble_ll_sched_item *sch)
{ {
@@ -1022,7 +1038,7 @@ ble_ll_adv_secondary_set_sched(struct ble_ll_adv_sm *advsm)
sch->end_time = advsm->adv_secondary_start_time + sch->end_time = advsm->adv_secondary_start_time +
os_cputime_usecs_to_ticks(max_usecs); os_cputime_usecs_to_ticks(max_usecs);
} }
#endif
/** /**
* Called when advertising need to be halted. This normally should not be called * Called when advertising need to be halted. This normally should not be called
@@ -1185,9 +1201,11 @@ ble_ll_adv_sm_stop(struct ble_ll_adv_sm *advsm)
/* Remove any scheduled advertising items */ /* Remove any scheduled advertising items */
ble_ll_sched_rmv_elem(&advsm->adv_sch); ble_ll_sched_rmv_elem(&advsm->adv_sch);
#if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_EXT_ADV)
if (!(advsm->props & BLE_HCI_LE_SET_EXT_ADV_PROP_LEGACY)) { if (!(advsm->props & BLE_HCI_LE_SET_EXT_ADV_PROP_LEGACY)) {
ble_ll_sched_rmv_elem(&advsm->adv_secondary_sch); ble_ll_sched_rmv_elem(&advsm->adv_secondary_sch);
} }
#endif
/* Set to standby if we are no longer advertising */ /* Set to standby if we are no longer advertising */
OS_ENTER_CRITICAL(sr); OS_ENTER_CRITICAL(sr);
@@ -1245,6 +1263,7 @@ ble_ll_adv_scheduled(struct ble_ll_adv_sm *advsm, uint32_t sch_start)
os_cputime_usecs_to_ticks(BLE_LL_ADV_STATE_HD_MAX * 1000); os_cputime_usecs_to_ticks(BLE_LL_ADV_STATE_HD_MAX * 1000);
} }
#if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_EXT_ADV)
static void static void
ble_ll_set_adv_secondary_start_time(struct ble_ll_adv_sm *advsm) ble_ll_set_adv_secondary_start_time(struct ble_ll_adv_sm *advsm)
{ {
@@ -1270,6 +1289,7 @@ ble_ll_adv_secondary_scheduled(struct ble_ll_adv_sm *advsm, uint32_t sch_start)
{ {
advsm->adv_secondary_start_time = sch_start; advsm->adv_secondary_start_time = sch_start;
} }
#endif
/** /**
* Start the advertising state machine. This is called when the host sends * Start the advertising state machine. This is called when the host sends
@@ -1382,12 +1402,14 @@ ble_ll_adv_sm_start(struct ble_ll_adv_sm *advsm)
ble_ll_adv_set_sched(advsm); ble_ll_adv_set_sched(advsm);
ble_ll_sched_adv_new(&advsm->adv_sch, ble_ll_adv_scheduled); ble_ll_sched_adv_new(&advsm->adv_sch, ble_ll_adv_scheduled);
#if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_EXT_ADV)
if (!(advsm->props & BLE_HCI_LE_SET_EXT_ADV_PROP_LEGACY)) { if (!(advsm->props & BLE_HCI_LE_SET_EXT_ADV_PROP_LEGACY)) {
ble_ll_set_adv_secondary_start_time(advsm); ble_ll_set_adv_secondary_start_time(advsm);
ble_ll_adv_secondary_set_sched(advsm); ble_ll_adv_secondary_set_sched(advsm);
ble_ll_sched_adv_new(&advsm->adv_secondary_sch, ble_ll_sched_adv_new(&advsm->adv_secondary_sch,
ble_ll_adv_secondary_scheduled); ble_ll_adv_secondary_scheduled);
} }
#endif
return BLE_ERR_SUCCESS; return BLE_ERR_SUCCESS;
} }
@@ -1432,9 +1454,11 @@ ble_ll_adv_set_enable(uint8_t instance, uint8_t enable, uint16_t duration,
rc = BLE_ERR_SUCCESS; rc = BLE_ERR_SUCCESS;
if (enable == 1) { if (enable == 1) {
#if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_EXT_ADV)
advsm->duration = duration; advsm->duration = duration;
advsm->events_max = events; advsm->events_max = events;
advsm->events = 0; advsm->events = 0;
#endif
/* If already enabled, do nothing */ /* If already enabled, do nothing */
if (!advsm->adv_enabled) { if (!advsm->adv_enabled) {
@@ -1486,6 +1510,7 @@ ble_ll_adv_set_scan_rsp_data(uint8_t *cmd, uint8_t instance, uint8_t operation)
} }
break; break;
#if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_EXT_ADV)
case BLE_HCI_LE_SET_EXT_SCAN_RSP_DATA_OPER_LAST: case BLE_HCI_LE_SET_EXT_SCAN_RSP_DATA_OPER_LAST:
/* TODO mark scan rsp as complete? */ /* TODO mark scan rsp as complete? */
/* fall through */ /* fall through */
@@ -1518,6 +1543,7 @@ ble_ll_adv_set_scan_rsp_data(uint8_t *cmd, uint8_t instance, uint8_t operation)
} }
break; break;
#endif
default: default:
return BLE_ERR_INV_HCI_CMD_PARMS; return BLE_ERR_INV_HCI_CMD_PARMS;
} }
@@ -1528,8 +1554,10 @@ ble_ll_adv_set_scan_rsp_data(uint8_t *cmd, uint8_t instance, uint8_t operation)
return BLE_ERR_MEM_CAPACITY; return BLE_ERR_MEM_CAPACITY;
} }
#if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_EXT_ADV)
/* DID shall be updated when host provides new scan response data */ /* DID shall be updated when host provides new scan response data */
advsm->did = rand() & 0x0fff; advsm->did = rand() & 0x0fff;
#endif
/* Copy the new data into the advertising structure. */ /* Copy the new data into the advertising structure. */
advsm->scan_rsp_len = datalen + off; advsm->scan_rsp_len = datalen + off;
@@ -1581,6 +1609,7 @@ ble_ll_adv_set_adv_data(uint8_t *cmd, uint8_t instance, uint8_t operation)
} }
break; break;
#if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_EXT_ADV)
case BLE_HCI_LE_SET_EXT_ADV_DATA_OPER_UNCHANGED: case BLE_HCI_LE_SET_EXT_ADV_DATA_OPER_UNCHANGED:
if (advsm->props & BLE_HCI_LE_SET_EXT_ADV_PROP_LEGACY) { if (advsm->props & BLE_HCI_LE_SET_EXT_ADV_PROP_LEGACY) {
return BLE_ERR_INV_HCI_CMD_PARMS; return BLE_ERR_INV_HCI_CMD_PARMS;
@@ -1625,6 +1654,7 @@ ble_ll_adv_set_adv_data(uint8_t *cmd, uint8_t instance, uint8_t operation)
} }
break; break;
#endif
default: default:
return BLE_ERR_INV_HCI_CMD_PARMS; return BLE_ERR_INV_HCI_CMD_PARMS;
} }
@@ -1635,8 +1665,10 @@ ble_ll_adv_set_adv_data(uint8_t *cmd, uint8_t instance, uint8_t operation)
return BLE_ERR_MEM_CAPACITY; return BLE_ERR_MEM_CAPACITY;
} }
#if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_EXT_ADV)
/* DID shall be updated when host provides new advertising data */ /* DID shall be updated when host provides new advertising data */
advsm->did = rand() & 0x0fff; advsm->did = rand() & 0x0fff;
#endif
/* Copy the new data into the advertising structure. */ /* Copy the new data into the advertising structure. */
advsm->adv_len = datalen + off; advsm->adv_len = datalen + off;
@@ -2101,12 +2133,16 @@ ble_ll_adv_rx_req(uint8_t pdu_type, struct os_mbuf *rxpdu)
rc = -1; rc = -1;
if (pdu_type == BLE_ADV_PDU_TYPE_SCAN_REQ) { if (pdu_type == BLE_ADV_PDU_TYPE_SCAN_REQ) {
#if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_EXT_ADV)
if (advsm->flags & BLE_LL_ADV_SM_FLAG_SCAN_REQ_NOTIF) { if (advsm->flags & BLE_LL_ADV_SM_FLAG_SCAN_REQ_NOTIF) {
ble_ll_hci_ev_send_scan_req_recv(advsm->adv_instance, peer, ble_ll_hci_ev_send_scan_req_recv(advsm->adv_instance, peer,
peer_addr_type); peer_addr_type);
} }
rsp = ble_ll_adv_scan_rsp_pdu_make(advsm); rsp = ble_ll_adv_scan_rsp_pdu_make(advsm);
#else
rsp = ble_ll_adv_scan_rsp_legacy_pdu_make(advsm);
#endif
if (rsp) { if (rsp) {
/* XXX TODO: assume we do not need to change phy mode */ /* XXX TODO: assume we do not need to change phy mode */
ble_phy_set_txend_cb(ble_ll_adv_tx_done, advsm); ble_phy_set_txend_cb(ble_ll_adv_tx_done, advsm);
@@ -2128,6 +2164,7 @@ ble_ll_adv_rx_req(uint8_t pdu_type, struct os_mbuf *rxpdu)
} }
} }
#if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_EXT_ADV)
if (advsm->props & BLE_HCI_LE_SET_EXT_ADV_PROP_LEGACY) { if (advsm->props & BLE_HCI_LE_SET_EXT_ADV_PROP_LEGACY) {
return -1; return -1;
} }
@@ -2145,6 +2182,7 @@ ble_ll_adv_rx_req(uint8_t pdu_type, struct os_mbuf *rxpdu)
} }
os_mbuf_free_chain(rsp); os_mbuf_free_chain(rsp);
} }
#endif
} }
return rc; return rc;
@@ -2415,6 +2453,7 @@ ble_ll_adv_rx_isr_start(uint8_t pdu_type)
return rc; return rc;
} }
#if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_EXT_ADV)
static void static void
ble_ll_adv_secondary_done(struct ble_ll_adv_sm *advsm) ble_ll_adv_secondary_done(struct ble_ll_adv_sm *advsm)
{ {
@@ -2453,6 +2492,7 @@ ble_ll_adv_secondary_done(struct ble_ll_adv_sm *advsm)
os_eventq_put(&g_ble_ll_data.ll_evq, &advsm->adv_txdone_ev); os_eventq_put(&g_ble_ll_data.ll_evq, &advsm->adv_txdone_ev);
} }
} }
#endif
/** /**
* Called when an advertising event is over. * Called when an advertising event is over.
@@ -2476,6 +2516,7 @@ ble_ll_adv_done(struct ble_ll_adv_sm *advsm)
assert(advsm->adv_enabled); assert(advsm->adv_enabled);
#if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_EXT_ADV)
/* stop advertising this was due to transmitting connection response */ /* stop advertising this was due to transmitting connection response */
if (advsm->flags & BLE_LL_ADV_SM_FLAG_CONN_RSP_TXD) { if (advsm->flags & BLE_LL_ADV_SM_FLAG_CONN_RSP_TXD) {
ble_ll_adv_sm_stop(advsm); ble_ll_adv_sm_stop(advsm);
@@ -2486,6 +2527,7 @@ ble_ll_adv_done(struct ble_ll_adv_sm *advsm)
ble_ll_adv_secondary_done(advsm); ble_ll_adv_secondary_done(advsm);
return; return;
} }
#endif
/* Remove the element from the schedule if it is still there. */ /* Remove the element from the schedule if it is still there. */
ble_ll_sched_rmv_elem(&advsm->adv_sch); ble_ll_sched_rmv_elem(&advsm->adv_sch);
@@ -2500,9 +2542,11 @@ ble_ll_adv_done(struct ble_ll_adv_sm *advsm)
final_adv_chan = ble_ll_adv_final_chan(advsm); final_adv_chan = ble_ll_adv_final_chan(advsm);
if (advsm->adv_chan == final_adv_chan) { if (advsm->adv_chan == final_adv_chan) {
#if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_EXT_ADV)
if (advsm->events_max) { if (advsm->events_max) {
advsm->events++; advsm->events++;
} }
#endif
/* Check if we need to resume scanning */ /* Check if we need to resume scanning */
ble_ll_scan_chk_resume(); ble_ll_scan_chk_resume();
@@ -2586,6 +2630,7 @@ ble_ll_adv_done(struct ble_ll_adv_sm *advsm)
} }
} }
#if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_EXT_ADV)
if (advsm->events_max && (advsm->events >= advsm->events_max)) { if (advsm->events_max && (advsm->events >= advsm->events_max)) {
/* Legacy PDUs need to be stop here, for ext adv it will be stopped when /* Legacy PDUs need to be stop here, for ext adv it will be stopped when
* AUX is done. * AUX is done.
@@ -2602,6 +2647,7 @@ ble_ll_adv_done(struct ble_ll_adv_sm *advsm)
return; return;
} }
#endif
/* We need to regenerate our RPA's if we have passed timeout */ /* We need to regenerate our RPA's if we have passed timeout */
#if (MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_PRIVACY) == 1) #if (MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_PRIVACY) == 1)
@@ -2691,8 +2737,10 @@ ble_ll_adv_send_conn_comp_ev(struct ble_ll_conn_sm *connsm,
ble_ll_conn_comp_event_send(connsm, BLE_ERR_SUCCESS, evbuf, advsm); ble_ll_conn_comp_event_send(connsm, BLE_ERR_SUCCESS, evbuf, advsm);
#if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_EXT_ADV)
ble_ll_hci_ev_send_adv_set_terminated(0, advsm->adv_instance, ble_ll_hci_ev_send_adv_set_terminated(0, advsm->adv_instance,
connsm->conn_handle, advsm->events); connsm->conn_handle, advsm->events);
#endif
#if (MYNEWT_VAL(BLE_LL_CFG_FEAT_LE_CSA2) == 1) #if (MYNEWT_VAL(BLE_LL_CFG_FEAT_LE_CSA2) == 1)
ble_ll_hci_ev_le_csa(connsm); ble_ll_hci_ev_le_csa(connsm);
+4
View File
@@ -297,6 +297,7 @@ ble_ll_hci_ev_le_csa(struct ble_ll_conn_sm *connsm)
* Sends the LE Scan Request Received event * Sends the LE Scan Request Received event
* *
*/ */
#if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_EXT_ADV)
void void
ble_ll_hci_ev_send_scan_req_recv(uint8_t adv_handle, const uint8_t *peer, ble_ll_hci_ev_send_scan_req_recv(uint8_t adv_handle, const uint8_t *peer,
uint8_t peer_addr_type) uint8_t peer_addr_type)
@@ -316,11 +317,13 @@ ble_ll_hci_ev_send_scan_req_recv(uint8_t adv_handle, const uint8_t *peer,
} }
} }
} }
#endif
/** /**
* Sends the LE Advertising Set Terminated event * Sends the LE Advertising Set Terminated event
* *
*/ */
#if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_EXT_ADV)
void void
ble_ll_hci_ev_send_adv_set_terminated(uint8_t status, uint8_t adv_handle, ble_ll_hci_ev_send_adv_set_terminated(uint8_t status, uint8_t adv_handle,
uint16_t conn_handle, uint8_t events) uint16_t conn_handle, uint8_t events)
@@ -341,6 +344,7 @@ ble_ll_hci_ev_send_adv_set_terminated(uint8_t status, uint8_t adv_handle,
} }
} }
} }
#endif
/** /**
* Send a PHY update complete event * Send a PHY update complete event