This is an automated email from the ASF dual-hosted git repository. andk pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/mynewt-nimble.git
commit fe2e4fc6b6d2148a3cf7bd4068a4549b959253f3 Author: Andrzej Kaczmarek <andrzej.kaczma...@codecoup.pl> AuthorDate: Tue Jun 13 15:40:10 2023 +0200 nimble/ll: Simplify connsm flags Since we no longer use union with uint32_t to clear flags, there's no point in having union so let's just convert it to regular struct. --- nimble/controller/include/controller/ble_ll_conn.h | 109 ++++++++++----------- nimble/controller/src/ble_ll_conn.c | 100 +++++++++---------- nimble/controller/src/ble_ll_conn_hci.c | 26 ++--- nimble/controller/src/ble_ll_ctrl.c | 66 +++++++------ nimble/controller/src/ble_ll_hci_ev.c | 2 +- 5 files changed, 152 insertions(+), 151 deletions(-) diff --git a/nimble/controller/include/controller/ble_ll_conn.h b/nimble/controller/include/controller/ble_ll_conn.h index fa1b9267..234c164c 100644 --- a/nimble/controller/include/controller/ble_ll_conn.h +++ b/nimble/controller/include/controller/ble_ll_conn.h @@ -98,47 +98,46 @@ struct ble_ll_conn_enc_data #endif /* Connection state machine flags. */ -union ble_ll_conn_sm_flags { - struct { - uint32_t pkt_rxd:1; - uint32_t terminate_ind_txd:1; - uint32_t terminate_ind_rxd:1; - uint32_t terminate_ind_rxd_acked:1; - uint32_t allow_periph_latency:1; - uint32_t periph_set_last_anchor:1; - uint32_t awaiting_host_reply:1; - uint32_t terminate_started:1; - uint32_t conn_update_sched:1; - uint32_t conn_update_use_cp:1; - uint32_t host_expects_upd_event:1; - uint32_t version_ind_sent:1; - uint32_t rxd_version_ind:1; - uint32_t chanmap_update_scheduled:1; - uint32_t conn_empty_pdu_txd:1; - uint32_t last_txd_md:1; - uint32_t conn_req_txd:1; - uint32_t send_ltk_req:1; - uint32_t encrypted:1; - uint32_t encrypt_chg_sent:1; - uint32_t le_ping_supp:1; - uint32_t csa2_supp:1; - uint32_t host_phy_update: 1; - uint32_t phy_update_sched: 1; - uint32_t ctrlr_phy_update: 1; - uint32_t phy_update_event: 1; - uint32_t peer_phy_update: 1; /* XXX:combine with ctrlr udpate bit? */ - uint32_t aux_conn_req: 1; - uint32_t rxd_features:1; - uint32_t pending_hci_rd_features:1; +struct ble_ll_conn_sm_flags { + uint32_t pkt_rxd : 1; + uint32_t terminate_ind_txd : 1; + uint32_t terminate_ind_rxd : 1; + uint32_t terminate_ind_rxd_acked : 1; + uint32_t allow_periph_latency : 1; + uint32_t periph_set_last_anchor : 1; + uint32_t awaiting_host_reply : 1; + uint32_t terminate_started : 1; + uint32_t conn_update_sched : 1; + uint32_t conn_update_use_cp : 1; + uint32_t host_expects_upd_event : 1; + uint32_t version_ind_sent : 1; + uint32_t rxd_version_ind : 1; + uint32_t chanmap_update_scheduled : 1; + uint32_t conn_empty_pdu_txd : 1; + uint32_t last_txd_md : 1; + uint32_t conn_req_txd : 1; + uint32_t send_ltk_req : 1; + uint32_t encrypted : 1; + uint32_t encrypt_chg_sent : 1; + uint32_t le_ping_supp : 1; + uint32_t csa2_supp : 1; + uint32_t host_phy_update: 1; + uint32_t phy_update_sched: 1; + uint32_t ctrlr_phy_update: 1; + uint32_t phy_update_event: 1; + uint32_t peer_phy_update: 1; /* XXX:combine with ctrlr udpate bit? */ + uint32_t aux_conn_req: 1; + uint32_t rxd_features : 1; + uint32_t pending_hci_rd_features : 1; #if MYNEWT_VAL(BLE_LL_CONN_INIT_AUTO_DLE) - uint32_t pending_initiate_dle:1; + uint32_t pending_initiate_dle : 1; #endif - uint32_t subrate_trans:1; - uint32_t subrate_ind_txd:1; - uint32_t subrate_host_req:1; - } cfbit; - uint32_t conn_flags; -} __attribute__((packed)); +#if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_ENHANCED_CONN_UPDATE) + uint8_t subrate_trans : 1; + uint8_t subrate_ind_txd : 1; + uint8_t subrate_host_req : 1; +#endif +}; /** * Structure used for PHY data inside a connection. @@ -207,7 +206,7 @@ struct ble_ll_conn_subrate_req_params { struct ble_ll_conn_sm { /* Connection state machine flags */ - union ble_ll_conn_sm_flags csmflags; + struct ble_ll_conn_sm_flags flags; /* Current connection handle, state and role */ uint16_t conn_handle; @@ -402,21 +401,21 @@ struct ble_ll_conn_sm }; /* Flags */ -#define CONN_F_UPDATE_SCHED(csm) ((csm)->csmflags.cfbit.conn_update_sched) -#define CONN_F_EMPTY_PDU_TXD(csm) ((csm)->csmflags.cfbit.conn_empty_pdu_txd) -#define CONN_F_LAST_TXD_MD(csm) ((csm)->csmflags.cfbit.last_txd_md) -#define CONN_F_CONN_REQ_TXD(csm) ((csm)->csmflags.cfbit.conn_req_txd) -#define CONN_F_ENCRYPTED(csm) ((csm)->csmflags.cfbit.encrypted) -#define CONN_F_ENC_CHANGE_SENT(csm) ((csm)->csmflags.cfbit.encrypt_chg_sent) -#define CONN_F_LE_PING_SUPP(csm) ((csm)->csmflags.cfbit.le_ping_supp) -#define CONN_F_TERMINATE_STARTED(csm) ((csm)->csmflags.cfbit.terminate_started) -#define CONN_F_CSA2_SUPP(csm) ((csm)->csmflags.cfbit.csa2_supp) -#define CONN_F_HOST_PHY_UPDATE(csm) ((csm)->csmflags.cfbit.host_phy_update) -#define CONN_F_PHY_UPDATE_SCHED(csm) ((csm)->csmflags.cfbit.phy_update_sched) -#define CONN_F_CTRLR_PHY_UPDATE(csm) ((csm)->csmflags.cfbit.ctrlr_phy_update) -#define CONN_F_PHY_UPDATE_EVENT(csm) ((csm)->csmflags.cfbit.phy_update_event) -#define CONN_F_PEER_PHY_UPDATE(csm) ((csm)->csmflags.cfbit.peer_phy_update) -#define CONN_F_AUX_CONN_REQ(csm) ((csm)->csmflags.cfbit.aux_conn_req) +#define CONN_F_UPDATE_SCHED(csm) ((csm)->csmflags.conn_update_sched) +#define CONN_F_EMPTY_PDU_TXD(csm) ((csm)->flags.conn_empty_pdu_txd) +#define CONN_F_LAST_TXD_MD(csm) ((csm)->flags.last_txd_md) +#define CONN_F_CONN_REQ_TXD(csm) ((csm)->csmflags.conn_req_txd) +#define CONN_F_ENCRYPTED(csm) ((csm)->flags.encrypted) +#define CONN_F_ENC_CHANGE_SENT(csm) ((csm)->flags.encrypt_chg_sent) +#define CONN_F_LE_PING_SUPP(csm) ((csm)->flags.le_ping_supp) +#define CONN_F_TERMINATE_STARTED(csm) ((csm)->flags.terminate_started) +#define CONN_F_CSA2_SUPP(csm) ((csm)->flags.csa2_supp) +#define CONN_F_HOST_PHY_UPDATE(csm) ((csm)->flags.host_phy_update) +#define CONN_F_PHY_UPDATE_SCHED(csm) ((csm)->flags.phy_update_sched) +#define CONN_F_CTRLR_PHY_UPDATE(csm) ((csm)->flags.ctrlr_phy_update) +#define CONN_F_PHY_UPDATE_EVENT(csm) ((csm)->flags.phy_update_event) +#define CONN_F_PEER_PHY_UPDATE(csm) ((csm)->flags.peer_phy_update) +#define CONN_F_AUX_CONN_REQ(csm) ((csm)->csmflags.aux_conn_req) /* Role */ #if MYNEWT_VAL(BLE_LL_ROLE_CENTRAL) diff --git a/nimble/controller/src/ble_ll_conn.c b/nimble/controller/src/ble_ll_conn.c index a1ace9fb..d39fbe59 100644 --- a/nimble/controller/src/ble_ll_conn.c +++ b/nimble/controller/src/ble_ll_conn.c @@ -969,7 +969,7 @@ ble_ll_conn_chk_csm_flags(struct ble_ll_conn_sm *connsm) uint8_t update_status; #if MYNEWT_VAL(BLE_LL_CFG_FEAT_LE_ENCRYPTION) - if (connsm->csmflags.cfbit.send_ltk_req) { + if (connsm->flags.send_ltk_req) { /* * Send Long term key request event to host. If masked, we need to * send a REJECT_IND. @@ -978,7 +978,7 @@ ble_ll_conn_chk_csm_flags(struct ble_ll_conn_sm *connsm) ble_ll_ctrl_reject_ind_send(connsm, BLE_LL_CTRL_ENC_REQ, BLE_ERR_PINKEY_MISSING); } - connsm->csmflags.cfbit.send_ltk_req = 0; + connsm->flags.send_ltk_req = 0; } #endif @@ -988,7 +988,7 @@ ble_ll_conn_chk_csm_flags(struct ble_ll_conn_sm *connsm) * has passed the instant. * 2) We successfully sent the reject reason. */ - if (connsm->csmflags.cfbit.host_expects_upd_event) { + if (connsm->flags.host_expects_upd_event) { update_status = BLE_ERR_SUCCESS; if (IS_PENDING_CTRL_PROC(connsm, BLE_LL_CTRL_PROC_CONN_UPDATE)) { ble_ll_ctrl_proc_stop(connsm, BLE_LL_CTRL_PROC_CONN_UPDATE); @@ -999,7 +999,7 @@ ble_ll_conn_chk_csm_flags(struct ble_ll_conn_sm *connsm) } } ble_ll_hci_ev_conn_update(connsm, update_status); - connsm->csmflags.cfbit.host_expects_upd_event = 0; + connsm->flags.host_expects_upd_event = 0; } /* Check if we need to send PHY update complete event */ @@ -1014,12 +1014,12 @@ ble_ll_conn_chk_csm_flags(struct ble_ll_conn_sm *connsm) #if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_ENHANCED_CONN_UPDATE) #if MYNEWT_VAL(BLE_LL_ROLE_CENTRAL) - if (connsm->csmflags.cfbit.subrate_ind_txd) { + if (connsm->flags.subrate_ind_txd) { ble_ll_conn_subrate_set(connsm, &connsm->subrate_trans); connsm->subrate_trans.subrate_factor = 0; ble_ll_ctrl_proc_stop(connsm, BLE_LL_CTRL_PROC_SUBRATE_UPDATE); - connsm->csmflags.cfbit.subrate_ind_txd = 0; - connsm->csmflags.cfbit.subrate_host_req = 0; + connsm->flags.subrate_ind_txd = 0; + connsm->flags.subrate_host_req = 0; } #endif /* BLE_LL_CTRL_SUBRATE_IND */ #endif /* BLE_LL_CFG_FEAT_LL_ENHANCED_CONN_UPDATE */ @@ -1109,7 +1109,7 @@ ble_ll_conn_tx_pdu(struct ble_ll_conn_sm *connsm) md = 0; hdr_byte = BLE_LL_LLID_DATA_FRAG; - if (connsm->csmflags.cfbit.terminate_ind_rxd) { + if (connsm->flags.terminate_ind_rxd) { /* We just received terminate indication. * Just send empty packet as an ACK */ @@ -1337,7 +1337,7 @@ conn_tx_pdu: * We could do this. Now, we just keep going and hope that we dont * overrun next scheduled item. */ - if ((connsm->csmflags.cfbit.terminate_ind_rxd) || + if ((connsm->flags.terminate_ind_rxd) || (CONN_IS_PERIPHERAL(connsm) && (md == 0) && (connsm->cons_rxd_bad_crc == 0) && ((connsm->last_rxd_hdr_byte & BLE_LL_DATA_HDR_MD_MASK) == 0) && @@ -1449,8 +1449,8 @@ conn_tx_pdu: /* Increment packets transmitted */ if (CONN_F_EMPTY_PDU_TXD(connsm)) { - if (connsm->csmflags.cfbit.terminate_ind_rxd) { - connsm->csmflags.cfbit.terminate_ind_rxd_acked = 1; + if (connsm->flags.terminate_ind_rxd) { + connsm->flags.terminate_ind_rxd_acked = 1; } STATS_INC(ble_ll_conn_stats, tx_empty_pdus); } else if ((hdr_byte & BLE_LL_DATA_HDR_LLID_MASK) == BLE_LL_LLID_CTRL) { @@ -1582,7 +1582,7 @@ ble_ll_conn_event_start_cb(struct ble_ll_sched_item *sch) * Set flag that tells peripheral to set last anchor point if a packet * has been received. */ - connsm->csmflags.cfbit.periph_set_last_anchor = 1; + connsm->flags.periph_set_last_anchor = 1; /* * Set the wait for response time. The anchor point is when we @@ -1976,7 +1976,7 @@ ble_ll_conn_sm_new(struct ble_ll_conn_sm *connsm) struct ble_ll_conn_global_params *conn_params; /* Reset following elements */ - memset(&connsm->csmflags, 0, sizeof(connsm->csmflags)); + memset(&connsm->flags, 0, sizeof(connsm->flags)); connsm->event_cntr = 0; connsm->conn_state = BLE_LL_CONN_STATE_IDLE; connsm->disconnect_reason = 0; @@ -2239,19 +2239,19 @@ ble_ll_conn_end(struct ble_ll_conn_sm *connsm, uint8_t ble_err) * If we have features and there's pending HCI command, send an event before * disconnection event so it does make sense to host. */ - if (connsm->csmflags.cfbit.pending_hci_rd_features && - connsm->csmflags.cfbit.rxd_features) { + if (connsm->flags.pending_hci_rd_features && + connsm->flags.rxd_features) { ble_ll_hci_ev_rd_rem_used_feat(connsm, BLE_ERR_SUCCESS); - connsm->csmflags.cfbit.pending_hci_rd_features = 0; + connsm->flags.pending_hci_rd_features = 0; } /* * If there is still pending read features request HCI command, send an * event to complete it. */ - if (connsm->csmflags.cfbit.pending_hci_rd_features) { + if (connsm->flags.pending_hci_rd_features) { ble_ll_hci_ev_rd_rem_used_feat(connsm, ble_err); - connsm->csmflags.cfbit.pending_hci_rd_features = 0; + connsm->flags.pending_hci_rd_features = 0; } /* @@ -2263,7 +2263,7 @@ ble_ll_conn_end(struct ble_ll_conn_sm *connsm, uint8_t ble_err) * received and we should not send an event. */ if (ble_err && (ble_err != BLE_ERR_UNK_CONN_ID || - connsm->csmflags.cfbit.terminate_ind_rxd)) { + connsm->flags.terminate_ind_rxd)) { ble_ll_disconn_comp_event_send(connsm, ble_err); } @@ -2413,11 +2413,11 @@ ble_ll_conn_next_event(struct ble_ll_conn_sm *connsm) /* Set event counter to the next connection event that we will tx/rx in */ use_periph_latency = next_is_subrated && - connsm->csmflags.cfbit.allow_periph_latency && - !connsm->csmflags.cfbit.conn_update_sched && - !connsm->csmflags.cfbit.phy_update_sched && - !connsm->csmflags.cfbit.chanmap_update_scheduled && - connsm->csmflags.cfbit.pkt_rxd; + connsm->flags.allow_periph_latency && + !connsm->flags.conn_update_sched && + !connsm->flags.phy_update_sched && + !connsm->flags.chanmap_update_scheduled && + connsm->flags.pkt_rxd; if (next_is_subrated) { next_event_cntr = base_event_cntr + subrate_factor; @@ -2429,7 +2429,7 @@ ble_ll_conn_next_event(struct ble_ll_conn_sm *connsm) /* If we are in subrate transition mode, we should also listen on * subrated connection events based on new parameters. */ - if (connsm->csmflags.cfbit.subrate_trans) { + if (connsm->flags.subrate_trans) { BLE_LL_ASSERT(CONN_IS_CENTRAL(connsm)); cstp = &connsm->subrate_trans; @@ -2455,7 +2455,7 @@ ble_ll_conn_next_event(struct ble_ll_conn_sm *connsm) * and one connection event before instant regardless of subrating. */ if (CONN_IS_PERIPHERAL(connsm) && - connsm->csmflags.cfbit.conn_update_sched && + connsm->flags.conn_update_sched && (connsm->subrate_factor > 1)) { subrate_conn_upd_event_cntr = connsm->conn_update_req.instant - 1; if (connsm->event_cntr == subrate_conn_upd_event_cntr) { @@ -2524,7 +2524,7 @@ ble_ll_conn_next_event(struct ble_ll_conn_sm *connsm) * connection by the the transmit window offset. We also copy in the * update parameters as they now should take effect. */ - if (connsm->csmflags.cfbit.conn_update_sched && + if (connsm->flags.conn_update_sched && (connsm->event_cntr == connsm->conn_update_req.instant)) { /* Set flag so we send connection update event */ @@ -2535,7 +2535,7 @@ ble_ll_conn_next_event(struct ble_ll_conn_sm *connsm) (connsm->conn_itvl != upd->interval) || (connsm->periph_latency != upd->latency) || (connsm->supervision_tmo != upd->timeout)) { - connsm->csmflags.cfbit.host_expects_upd_event = 1; + connsm->flags.host_expects_upd_event = 1; } #if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_ENHANCED_CONN_UPDATE) @@ -2602,7 +2602,7 @@ ble_ll_conn_next_event(struct ble_ll_conn_sm *connsm) connsm->last_rxd_pdu_cputime = connsm->anchor_point; /* Reset update scheduled flag */ - connsm->csmflags.cfbit.conn_update_sched = 0; + connsm->flags.conn_update_sched = 0; } /* @@ -2614,7 +2614,7 @@ ble_ll_conn_next_event(struct ble_ll_conn_sm *connsm) * new channel map once the event counter equals or has passed channel * map update instant. */ - if (connsm->csmflags.cfbit.chanmap_update_scheduled && + if (connsm->flags.chanmap_update_scheduled && ((int16_t)(connsm->chanmap_instant - connsm->event_cntr) <= 0)) { /* XXX: there is a chance that the control packet is still on @@ -2625,7 +2625,7 @@ ble_ll_conn_next_event(struct ble_ll_conn_sm *connsm) ble_ll_utils_chan_map_used_get(connsm->req_chanmap); memcpy(connsm->chan_map, connsm->req_chanmap, BLE_LL_CHAN_MAP_LEN); - connsm->csmflags.cfbit.chanmap_update_scheduled = 0; + connsm->flags.chanmap_update_scheduled = 0; ble_ll_ctrl_proc_stop(connsm, BLE_LL_CTRL_PROC_CHAN_MAP_UPD); @@ -2773,7 +2773,7 @@ ble_ll_conn_created(struct ble_ll_conn_sm *connsm, struct ble_mbuf_hdr *rxhdr) connsm->conn_state = BLE_LL_CONN_STATE_CREATED; /* Clear packet received flag */ - connsm->csmflags.cfbit.pkt_rxd = 0; + connsm->flags.pkt_rxd = 0; /* Consider time created the last scheduled time */ connsm->last_scheduled = ble_ll_tmr_get(); @@ -2929,10 +2929,10 @@ ble_ll_conn_event_end(struct ble_npl_event *ev) ble_ll_scan_chk_resume(); /* If we have transmitted the terminate IND successfully, we are done */ - if ((connsm->csmflags.cfbit.terminate_ind_txd) || - (connsm->csmflags.cfbit.terminate_ind_rxd && - connsm->csmflags.cfbit.terminate_ind_rxd_acked)) { - if (connsm->csmflags.cfbit.terminate_ind_txd) { + if ((connsm->flags.terminate_ind_txd) || + (connsm->flags.terminate_ind_rxd && + connsm->flags.terminate_ind_rxd_acked)) { + if (connsm->flags.terminate_ind_txd) { ble_err = BLE_ERR_CONN_TERM_LOCAL; } else { /* Make sure the disconnect reason is valid! */ @@ -2952,7 +2952,7 @@ ble_ll_conn_event_end(struct ble_npl_event *ev) * If we have received a packet, we can set the current transmit window * usecs to 0 since we dont need to listen in the transmit window. */ - if (connsm->csmflags.cfbit.pkt_rxd) { + if (connsm->flags.pkt_rxd) { connsm->periph_cur_tx_win_usecs = 0; } @@ -2979,7 +2979,7 @@ ble_ll_conn_event_end(struct ble_npl_event *ev) /* Reset "per connection event" variables */ connsm->cons_rxd_bad_crc = 0; - connsm->csmflags.cfbit.pkt_rxd = 0; + connsm->flags.pkt_rxd = 0; /* See if we need to start any control procedures */ ble_ll_ctrl_chk_proc_start(connsm); @@ -3030,10 +3030,10 @@ ble_ll_conn_event_end(struct ble_npl_event *ev) ble_ll_conn_num_comp_pkts_event_send(connsm); /* If we have features and there's pending HCI command, send an event */ - if (connsm->csmflags.cfbit.pending_hci_rd_features && - connsm->csmflags.cfbit.rxd_features) { + if (connsm->flags.pending_hci_rd_features && + connsm->flags.rxd_features) { ble_ll_hci_ev_rd_rem_used_feat(connsm, BLE_ERR_SUCCESS); - connsm->csmflags.cfbit.pending_hci_rd_features = 0; + connsm->flags.pending_hci_rd_features = 0; } } @@ -3192,7 +3192,7 @@ ble_ll_conn_event_halt(void) { ble_ll_state_set(BLE_LL_STATE_STANDBY); if (g_ble_ll_conn_cur_sm) { - g_ble_ll_conn_cur_sm->csmflags.cfbit.pkt_rxd = 0; + g_ble_ll_conn_cur_sm->flags.pkt_rxd = 0; ble_ll_event_add(&g_ble_ll_conn_cur_sm->conn_ev_end); g_ble_ll_conn_cur_sm = NULL; } @@ -3400,14 +3400,14 @@ ble_ll_conn_rx_isr_start(struct ble_mbuf_hdr *rxhdr, uint32_t aa) rxhdr->rxinfo.handle = connsm->conn_handle; /* Set flag denoting we have received a packet in connection event */ - connsm->csmflags.cfbit.pkt_rxd = 1; + connsm->flags.pkt_rxd = 1; /* Connection is established */ connsm->conn_state = BLE_LL_CONN_STATE_ESTABLISHED; /* Set anchor point (and last) if 1st rxd frame in connection event */ - if (connsm->csmflags.cfbit.periph_set_last_anchor) { - connsm->csmflags.cfbit.periph_set_last_anchor = 0; + if (connsm->flags.periph_set_last_anchor) { + connsm->flags.periph_set_last_anchor = 0; connsm->last_anchor_point = rxhdr->beg_cputime; connsm->anchor_point = connsm->last_anchor_point; connsm->anchor_point_usecs = rxhdr->rem_usecs; @@ -3519,7 +3519,7 @@ ble_ll_conn_rx_data_pdu(struct os_mbuf *rxpdu, struct ble_mbuf_hdr *hdr) #if MYNEWT_VAL(BLE_LL_ROLE_PERIPHERAL) if (connsm->conn_role == BLE_LL_CONN_ROLE_PERIPHERAL) { if (hdr_byte & BLE_LL_DATA_HDR_NESN_MASK) { - connsm->csmflags.cfbit.allow_periph_latency = 1; + connsm->flags.allow_periph_latency = 1; } } #endif @@ -3857,7 +3857,7 @@ chk_rx_terminate_ind: if (BLE_LL_LLID_IS_CTRL(hdr_byte) && (opcode == BLE_LL_CTRL_TERMINATE_IND) && (rx_pyld_len == (1 + BLE_LL_CTRL_TERMINATE_IND_LEN))) { - connsm->csmflags.cfbit.terminate_ind_rxd = 1; + connsm->flags.terminate_ind_rxd = 1; connsm->rxd_disconnect_reason = rxbuf[3]; } @@ -4244,14 +4244,14 @@ ble_ll_conn_subrate_req_hci(struct ble_ll_conn_sm *connsm, connsm->subrate_trans.periph_latency = srp->max_latency; connsm->subrate_trans.cont_num = srp->cont_num; connsm->subrate_trans.supervision_tmo = srp->supervision_tmo; - connsm->csmflags.cfbit.subrate_host_req = 1; + connsm->flags.subrate_host_req = 1; ble_ll_ctrl_proc_start(connsm, BLE_LL_CTRL_PROC_SUBRATE_UPDATE, NULL); break; #endif #if MYNEWT_VAL(BLE_LL_ROLE_PERIPHERAL) case BLE_LL_CONN_ROLE_PERIPHERAL: connsm->subrate_req = *srp; - connsm->csmflags.cfbit.subrate_host_req = 1; + connsm->flags.subrate_host_req = 1; ble_ll_ctrl_proc_start(connsm, BLE_LL_CTRL_PROC_SUBRATE_REQ, NULL); break; #endif @@ -4316,7 +4316,7 @@ ble_ll_conn_subrate_set(struct ble_ll_conn_sm *connsm, /* Assume parameters were checked by caller */ - send_ev = connsm->csmflags.cfbit.subrate_host_req || + send_ev = connsm->flags.subrate_host_req || (connsm->subrate_factor != sp->subrate_factor) || (connsm->periph_latency != sp->periph_latency) || (connsm->cont_num != sp->cont_num) || diff --git a/nimble/controller/src/ble_ll_conn_hci.c b/nimble/controller/src/ble_ll_conn_hci.c index 175a6426..3cedc12f 100644 --- a/nimble/controller/src/ble_ll_conn_hci.c +++ b/nimble/controller/src/ble_ll_conn_hci.c @@ -921,7 +921,7 @@ ble_ll_conn_hci_read_rem_features(const uint8_t *cmdbuf, uint8_t len) } /* If already pending exit with error */ - if (connsm->csmflags.cfbit.pending_hci_rd_features) { + if (connsm->flags.pending_hci_rd_features) { return BLE_ERR_CMD_DISALLOWED; } @@ -929,8 +929,8 @@ ble_ll_conn_hci_read_rem_features(const uint8_t *cmdbuf, uint8_t len) * Start control procedure if we did not receive peer's features and did not * start procedure already. */ - if (!connsm->csmflags.cfbit.rxd_features && - !IS_PENDING_CTRL_PROC(connsm, BLE_LL_CTRL_PROC_FEATURE_XCHG)) { + if (!connsm->flags.rxd_features && + !IS_PENDING_CTRL_PROC(connsm, BLE_LL_CTRL_PROC_FEATURE_XCHG)) { #if MYNEWT_VAL(BLE_LL_ROLE_PERIPHERAL) if ((connsm->conn_role == BLE_LL_CONN_ROLE_PERIPHERAL) && !(ble_ll_read_supp_features() & BLE_LL_FEAT_PERIPH_INIT)) { @@ -941,7 +941,7 @@ ble_ll_conn_hci_read_rem_features(const uint8_t *cmdbuf, uint8_t len) ble_ll_ctrl_proc_start(connsm, BLE_LL_CTRL_PROC_FEATURE_XCHG, NULL); } - connsm->csmflags.cfbit.pending_hci_rd_features = 1; + connsm->flags.pending_hci_rd_features = 1; return BLE_ERR_SUCCESS; } @@ -1062,11 +1062,11 @@ ble_ll_conn_hci_update(const uint8_t *cmdbuf, uint8_t len) * peripheral has initiated the procedure, we need to send a reject to the * peripheral. */ - if (connsm->csmflags.cfbit.awaiting_host_reply) { + if (connsm->flags.awaiting_host_reply) { switch (connsm->conn_role) { #if MYNEWT_VAL(BLE_LL_ROLE_CENTRAL) case BLE_LL_CONN_ROLE_CENTRAL: - connsm->csmflags.cfbit.awaiting_host_reply = 0; + connsm->flags.awaiting_host_reply = 0; /* XXX: If this fails no reject ind will be sent! */ ble_ll_ctrl_reject_ind_send(connsm, connsm->host_reply_opcode, @@ -1089,7 +1089,7 @@ ble_ll_conn_hci_update(const uint8_t *cmdbuf, uint8_t len) * update procedure we should deny the peripheral request for now. */ #if MYNEWT_VAL(BLE_LL_ROLE_PERIPHERAL) - if (connsm->csmflags.cfbit.chanmap_update_scheduled) { + if (connsm->flags.chanmap_update_scheduled) { if (connsm->conn_role == BLE_LL_CONN_ROLE_PERIPHERAL) { return BLE_ERR_DIFF_TRANS_COLL; } @@ -1159,7 +1159,7 @@ ble_ll_conn_hci_param_rr(const uint8_t *cmdbuf, uint8_t len, rc = ble_ll_conn_process_conn_params(cmd, connsm); /* The connection should be awaiting a reply. If not, just discard */ - if (connsm->csmflags.cfbit.awaiting_host_reply) { + if (connsm->flags.awaiting_host_reply) { /* Get a control packet buffer */ if (rc == BLE_ERR_SUCCESS) { om = os_msys_get_pkthdr(BLE_LL_CTRL_MAX_PDU_LEN, @@ -1177,7 +1177,7 @@ ble_ll_conn_hci_param_rr(const uint8_t *cmdbuf, uint8_t len, ble_ll_ctrl_reject_ind_send(connsm, connsm->host_reply_opcode, BLE_ERR_CONN_PARMS); } - connsm->csmflags.cfbit.awaiting_host_reply = 0; + connsm->flags.awaiting_host_reply = 0; /* XXX: if we cant get a buffer, what do we do? We need to remember * reason if it was a negative reply. We also would need to have @@ -1224,11 +1224,11 @@ ble_ll_conn_hci_param_nrr(const uint8_t *cmdbuf, uint8_t len, rc = BLE_ERR_SUCCESS; /* The connection should be awaiting a reply. If not, just discard */ - if (connsm->csmflags.cfbit.awaiting_host_reply) { + if (connsm->flags.awaiting_host_reply) { /* XXX: check return code and deal */ ble_ll_ctrl_reject_ind_send(connsm, connsm->host_reply_opcode, cmd->reason); - connsm->csmflags.cfbit.awaiting_host_reply = 0; + connsm->flags.awaiting_host_reply = 0; /* XXX: if we cant get a buffer, what do we do? We need to remember * reason if it was a negative reply. We also would need to have @@ -1393,7 +1393,7 @@ ble_ll_conn_hci_rd_rem_ver_cmd(const uint8_t *cmdbuf, uint8_t len) * NOTE: we cant just send the event here. That would cause the event to * be queued before the command status. */ - if (!connsm->csmflags.cfbit.version_ind_sent) { + if (!connsm->flags.version_ind_sent) { ble_ll_ctrl_proc_start(connsm, BLE_LL_CTRL_PROC_VERSION_XCHG, NULL); } else { connsm->pending_ctrl_procs |= (1 << BLE_LL_CTRL_PROC_VERSION_XCHG); @@ -1468,7 +1468,7 @@ ble_ll_conn_hci_rd_chan_map(const uint8_t *cmdbuf, uint8_t len, rc = BLE_ERR_UNK_CONN_ID; memset(rsp->chan_map, 0, sizeof(rsp->chan_map)); } else { - if (connsm->csmflags.cfbit.chanmap_update_scheduled) { + if (connsm->flags.chanmap_update_scheduled) { memcpy(rsp->chan_map, connsm->req_chanmap, BLE_LL_CHAN_MAP_LEN); } else { memcpy(rsp->chan_map, connsm->chan_map, BLE_LL_CHAN_MAP_LEN); diff --git a/nimble/controller/src/ble_ll_ctrl.c b/nimble/controller/src/ble_ll_ctrl.c index af227cb5..726a44de 100644 --- a/nimble/controller/src/ble_ll_ctrl.c +++ b/nimble/controller/src/ble_ll_ctrl.c @@ -367,7 +367,7 @@ conn_parm_req_do_indicate: */ ble_ll_hci_ev_rem_conn_parm_req(connsm, req); connsm->host_reply_opcode = opcode; - connsm->csmflags.cfbit.awaiting_host_reply = 1; + connsm->flags.awaiting_host_reply = 1; rsp_opcode = 255; } else { /* Create reply to connection request */ @@ -392,8 +392,8 @@ ble_ll_ctrl_conn_update_init_proc(struct ble_ll_conn_sm *connsm, * instant is in the future. */ - connsm->csmflags.cfbit.conn_update_sched = 0; - connsm->csmflags.cfbit.conn_update_use_cp = (cp != NULL); + connsm->flags.conn_update_sched = 0; + connsm->flags.conn_update_use_cp = (cp != NULL); if (cp) { connsm->conn_cp = *cp; @@ -414,7 +414,7 @@ ble_ll_ctrl_conn_update_make_ind_pdu(struct ble_ll_conn_sm *connsm, struct hci_conn_update *hcu; struct ble_ll_conn_upd_req *req; - if (connsm->csmflags.cfbit.conn_update_use_cp) { + if (connsm->flags.conn_update_use_cp) { cp = &connsm->conn_cp; } @@ -570,11 +570,11 @@ ble_ll_ctrl_proc_unk_rsp(struct ble_ll_conn_sm *connsm, uint8_t *dptr, uint8_t * if (ctrl_proc == BLE_LL_CTRL_PROC_CONN_PARAM_REQ) { ble_ll_hci_ev_conn_update(connsm, BLE_ERR_UNSUPP_REM_FEATURE); } else if (ctrl_proc == BLE_LL_CTRL_PROC_FEATURE_XCHG) { - if (connsm->csmflags.cfbit.pending_hci_rd_features) { + if (connsm->flags.pending_hci_rd_features) { ble_ll_hci_ev_rd_rem_used_feat(connsm, BLE_ERR_UNSUPP_REM_FEATURE); } - connsm->csmflags.cfbit.pending_hci_rd_features = 0; + connsm->flags.pending_hci_rd_features = 0; } } @@ -1290,7 +1290,7 @@ ble_ll_ctrl_rx_subrate_ind(struct ble_ll_conn_sm *connsm, uint8_t *req, ble_ll_conn_subrate_set(connsm, sp); ble_ll_ctrl_proc_stop(connsm, BLE_LL_CTRL_PROC_SUBRATE_REQ); - connsm->csmflags.cfbit.subrate_host_req = 0; + connsm->flags.subrate_host_req = 0; return BLE_ERR_MAX; } @@ -1875,7 +1875,7 @@ static void ble_ll_ctrl_version_ind_make(struct ble_ll_conn_sm *connsm, uint8_t *pyld) { /* Set flag to denote we have sent/received this */ - connsm->csmflags.cfbit.version_ind_sent = 1; + connsm->flags.version_ind_sent = 1; /* Fill out response */ pyld[0] = BLE_HCI_VER_BCS; @@ -1901,7 +1901,7 @@ ble_ll_ctrl_chanmap_req_make(struct ble_ll_conn_sm *connsm, uint8_t *pyld) put_le16(pyld + BLE_LL_CHAN_MAP_LEN, connsm->chanmap_instant); /* Set scheduled flag */ - connsm->csmflags.cfbit.chanmap_update_scheduled = 1; + connsm->flags.chanmap_update_scheduled = 1; } /** @@ -2073,7 +2073,7 @@ ble_ll_ctrl_rx_conn_update(struct ble_ll_conn_sm *connsm, uint8_t *dptr) if (conn_events >= 32767) { ble_ll_conn_timeout(connsm, BLE_ERR_INSTANT_PASSED); } else { - connsm->csmflags.cfbit.conn_update_sched = 1; + connsm->flags.conn_update_sched = 1; /* * Errata says that receiving a connection update when the event @@ -2125,7 +2125,7 @@ ble_ll_ctrl_update_features(struct ble_ll_conn_sm *connsm, uint8_t *feat) memcpy(connsm->remote_features, feat + 1, 7); /* If we received peer's features for the 1st time, we should try DLE */ - if (!connsm->csmflags.cfbit.rxd_features) { + if (!connsm->flags.rxd_features) { #if MYNEWT_VAL(BLE_LL_CFG_FEAT_LE_CODED_PHY) /* * If connection was established on uncoded PHY, by default we use @@ -2151,10 +2151,10 @@ ble_ll_ctrl_update_features(struct ble_ll_conn_sm *connsm, uint8_t *feat) #endif #if MYNEWT_VAL(BLE_LL_CONN_INIT_AUTO_DLE) - connsm->csmflags.cfbit.pending_initiate_dle = 1; + connsm->flags.pending_initiate_dle = 1; #endif - connsm->csmflags.cfbit.rxd_features = 1; + connsm->flags.rxd_features = 1; } } @@ -2234,9 +2234,9 @@ ble_ll_ctrl_rx_feature_rsp(struct ble_ll_conn_sm *connsm, uint8_t *dptr) } /* Send event to host if pending features read */ - if (connsm->csmflags.cfbit.pending_hci_rd_features) { + if (connsm->flags.pending_hci_rd_features) { ble_ll_hci_ev_rd_rem_used_feat(connsm, BLE_ERR_SUCCESS); - connsm->csmflags.cfbit.pending_hci_rd_features = 0; + connsm->flags.pending_hci_rd_features = 0; } } @@ -2265,7 +2265,7 @@ ble_ll_ctrl_rx_conn_param_req(struct ble_ll_conn_sm *connsm, uint8_t *dptr, * well. This is not expected to happen anyway. A return of BLE_ERR_MAX * means that we will simply discard the connection parameter request */ - if (connsm->csmflags.cfbit.awaiting_host_reply) { + if (connsm->flags.awaiting_host_reply) { return BLE_ERR_MAX; } @@ -2326,7 +2326,7 @@ ble_ll_ctrl_rx_conn_param_req(struct ble_ll_conn_sm *connsm, uint8_t *dptr, */ #if MYNEWT_VAL(BLE_LL_ROLE_CENTRAL) if ((connsm->conn_role == BLE_LL_CONN_ROLE_CENTRAL) && - (connsm->csmflags.cfbit.chanmap_update_scheduled)) { + (connsm->flags.chanmap_update_scheduled)) { rsp_opcode = BLE_LL_CTRL_REJECT_IND_EXT; rspbuf[1] = BLE_LL_CTRL_CONN_PARM_REQ; rspbuf[2] = BLE_ERR_DIFF_TRANS_COLL; @@ -2359,8 +2359,8 @@ ble_ll_ctrl_rx_conn_param_rsp(struct ble_ll_conn_sm *connsm, uint8_t *dptr, * state just clear the awaiting reply. The peripheral will hopefully stop its * procedure when we reply. */ - if (connsm->csmflags.cfbit.awaiting_host_reply) { - connsm->csmflags.cfbit.awaiting_host_reply = 0; + if (connsm->flags.awaiting_host_reply) { + connsm->flags.awaiting_host_reply = 0; } /* If we receive a response and no procedure is pending, just leave */ @@ -2395,10 +2395,10 @@ ble_ll_ctrl_rx_version_ind(struct ble_ll_conn_sm *connsm, uint8_t *dptr, connsm->vers_nr = dptr[0]; connsm->comp_id = get_le16(dptr + 1); connsm->sub_vers_nr = get_le16(dptr + 3); - connsm->csmflags.cfbit.rxd_version_ind = 1; + connsm->flags.rxd_version_ind = 1; rsp_opcode = BLE_ERR_MAX; - if (!connsm->csmflags.cfbit.version_ind_sent) { + if (!connsm->flags.version_ind_sent) { rsp_opcode = BLE_LL_CTRL_VERSION_IND; ble_ll_ctrl_version_ind_make(connsm, rspbuf); } @@ -2439,7 +2439,7 @@ ble_ll_ctrl_rx_chanmap_req(struct ble_ll_conn_sm *connsm, uint8_t *dptr) } else { connsm->chanmap_instant = instant; memcpy(connsm->req_chanmap, dptr, BLE_LL_CHAN_MAP_LEN); - connsm->csmflags.cfbit.chanmap_update_scheduled = 1; + connsm->flags.chanmap_update_scheduled = 1; } return BLE_ERR_MAX; @@ -2734,7 +2734,7 @@ ble_ll_ctrl_chk_proc_start(struct ble_ll_conn_sm *connsm) * received the information dont start it. */ if ((i == BLE_LL_CTRL_PROC_VERSION_XCHG) && - (connsm->csmflags.cfbit.rxd_version_ind)) { + (connsm->flags.rxd_version_ind)) { ble_ll_hci_ev_rd_rem_ver(connsm, BLE_ERR_SUCCESS); CLR_PENDING_CTRL_PROC(connsm, i); } else { @@ -3067,8 +3067,8 @@ ll_ctrl_send_rsp: } #if MYNEWT_VAL(BLE_LL_CONN_INIT_AUTO_DLE) - if (connsm->csmflags.cfbit.pending_initiate_dle) { - connsm->csmflags.cfbit.pending_initiate_dle = 0; + if (connsm->flags.pending_initiate_dle) { + connsm->flags.pending_initiate_dle = 0; ble_ll_ctrl_initiate_dle(connsm, true); } #endif @@ -3134,11 +3134,13 @@ ble_ll_ctrl_tx_start(struct ble_ll_conn_sm *connsm, struct os_mbuf *txpdu) switch (opcode) { case BLE_LL_CTRL_CONN_UPDATE_IND: ble_ll_ctrl_conn_update_make_ind_pdu(connsm, ctrdata); - connsm->csmflags.cfbit.conn_update_sched = 1; + connsm->flags.conn_update_sched = 1; break; +#if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_ENHANCED_CONN_UPDATE) case BLE_LL_CTRL_SUBRATE_IND: - connsm->csmflags.cfbit.subrate_trans = 1; + connsm->flags.subrate_trans = 1; break; +#endif } return 0; @@ -3170,7 +3172,7 @@ ble_ll_ctrl_tx_done(struct os_mbuf *txpdu, struct ble_ll_conn_sm *connsm) opcode = txpdu->om_data[0]; switch (opcode) { case BLE_LL_CTRL_TERMINATE_IND: - connsm->csmflags.cfbit.terminate_ind_txd = 1; + connsm->flags.terminate_ind_txd = 1; rc = -1; break; case BLE_LL_CTRL_REJECT_IND_EXT: @@ -3182,7 +3184,7 @@ ble_ll_ctrl_tx_done(struct os_mbuf *txpdu, struct ble_ll_conn_sm *connsm) if (txpdu->om_data[1] == BLE_LL_CTRL_CONN_PARM_REQ && txpdu->om_data[2] != BLE_ERR_LMP_COLLISION) { connsm->reject_reason = txpdu->om_data[2]; - connsm->csmflags.cfbit.host_expects_upd_event = 1; + connsm->flags.host_expects_upd_event = 1; } } #if MYNEWT_VAL(BLE_LL_CFG_FEAT_LE_ENCRYPTION) @@ -3204,7 +3206,7 @@ ble_ll_ctrl_tx_done(struct os_mbuf *txpdu, struct ble_ll_conn_sm *connsm) break; case BLE_LL_CTRL_ENC_RSP: connsm->enc_data.enc_state = CONN_ENC_S_LTK_REQ_WAIT; - connsm->csmflags.cfbit.send_ltk_req = 1; + connsm->flags.send_ltk_req = 1; break; #if MYNEWT_VAL(BLE_LL_ROLE_PERIPHERAL) case BLE_LL_CTRL_START_ENC_RSP: @@ -3240,8 +3242,8 @@ ble_ll_ctrl_tx_done(struct os_mbuf *txpdu, struct ble_ll_conn_sm *connsm) #if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_ENHANCED_CONN_UPDATE) #if MYNEWT_VAL(BLE_LL_ROLE_CENTRAL) case BLE_LL_CTRL_SUBRATE_IND: - connsm->csmflags.cfbit.subrate_trans = 0; - connsm->csmflags.cfbit.subrate_ind_txd = 1; + connsm->flags.subrate_trans = 0; + connsm->flags.subrate_ind_txd = 1; break; #endif /* BLE_LL_CTRL_SUBRATE_IND */ #endif /* BLE_LL_CFG_FEAT_LL_ENHANCED_CONN_UPDATE */ diff --git a/nimble/controller/src/ble_ll_hci_ev.c b/nimble/controller/src/ble_ll_hci_ev.c index 6588fabe..fb3d3dd7 100644 --- a/nimble/controller/src/ble_ll_hci_ev.c +++ b/nimble/controller/src/ble_ll_hci_ev.c @@ -331,7 +331,7 @@ ble_ll_hci_ev_le_csa(struct ble_ll_conn_sm *connsm) ev->subev_code = BLE_HCI_LE_SUBEV_CHAN_SEL_ALG; ev->conn_handle = htole16(connsm->conn_handle); - ev->csa = connsm->csmflags.cfbit.csa2_supp ? 0x01 : 0x00; + ev->csa = connsm->flags.csa2_supp ? 0x01 : 0x00; ble_ll_hci_event_send(hci_ev); }