Bluetooth: Use event masks instead of bits in controller and host

To avoid having to define a BIT64() macro in a public namespace, use
instead masks directly instead of bits, and also refactor the host code
so that it uses those instead of the earlier byte array with hardcoded
indices and masks.

Change-id: Ief03db616a96df65349d24289b62566a268ffdd0
Signed-off-by: Vinayak Chettimada <vinayak.kariappa.chettimada@nordicsemi.no>
Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
This commit is contained in:
Carles Cufi 2017-04-18 23:02:28 +02:00 committed by Johan Hedberg
commit 045f076e5e
3 changed files with 105 additions and 107 deletions

View file

@ -1655,52 +1655,56 @@ struct bt_hci_evt_le_chan_sel_algo {
/* Event mask bits */
#define BT_EVT_BIT_INQUIRY_COMPLETE 0
#define BT_EVT_BIT_CONN_COMPLETE 2
#define BT_EVT_BIT_CONN_REQUEST 3
#define BT_EVT_BIT_DISCONN_COMPLETE 4
#define BT_EVT_BIT_AUTH_COMPLETE 5
#define BT_EVT_BIT_REMOTE_NAME_REQ_COMPLETE 6
#define BT_EVT_BIT_ENCRYPT_CHANGE 7
#define BT_EVT_BIT_REMOTE_FEATURES 10
#define BT_EVT_BIT_REMOTE_VERSION_INFO 11
#define BT_EVT_BIT_ROLE_CHANGE 17
#define BT_EVT_BIT_PIN_CODE_REQ 21
#define BT_EVT_BIT_LINK_KEY_REQ 22
#define BT_EVT_BIT_LINK_KEY_NOTIFY 23
#define BT_EVT_BIT_INQUIRY_RESULT_WITH_RSSI 33
#define BT_EVT_BIT_REMOTE_EXT_FEATURES 34
#define BT_EVT_BIT_SYNC_CONN_COMPLETE 43
#define BT_EVT_BIT_EXTENDED_INQUIRY_RESULT 46
#define BT_EVT_BIT_ENCRYPT_KEY_REFRESH_COMPLETE 47
#define BT_EVT_BIT_IO_CAPA_REQ 48
#define BT_EVT_BIT_IO_CAPA_RESP 49
#define BT_EVT_BIT_USER_CONFIRM_REQ 50
#define BT_EVT_BIT_USER_PASSKEY_REQ 51
#define BT_EVT_BIT_SSP_COMPLETE 53
#define BT_EVT_BIT_USER_PASSKEY_NOTIFY 58
#define BT_EVT_BIT_LE_META_EVENT 61
#define BT_EVT_BIT(n) (1ULL << (n))
#define BT_EVT_BIT_LE_CONN_COMPLETE 0
#define BT_EVT_BIT_LE_ADVERTISING_REPORT 1
#define BT_EVT_BIT_LE_CONN_UPDATE_COMPLETE 2
#define BT_EVT_BIT_LE_REMOTE_FEAT_COMPLETE 3
#define BT_EVT_BIT_LE_LTK_REQUEST 4
#define BT_EVT_BIT_LE_CONN_PARAM_REQ 5
#define BT_EVT_BIT_LE_DATA_LEN_CHANGE 6
#define BT_EVT_BIT_LE_P256_PUBLIC_KEY_COMPLETE 7
#define BT_EVT_BIT_LE_GENERATE_DHKEY_COMPLETE 8
#define BT_EVT_BIT_LE_ENH_CONN_COMPLETE 9
#define BT_EVT_BIT_LE_DIRECT_ADV_REPORT 10
#define BT_EVT_BIT_LE_PHY_UPDATE_COMPLETE 11
#define BT_EVT_BIT_LE_EXT_ADVERTISING_REPORT 12
#define BT_EVT_BIT_LE_PER_ADV_SYNC_ESTABLISHED 13
#define BT_EVT_BIT_LE_PER_ADVERTISING_REPORT 14
#define BT_EVT_BIT_LE_PER_ADV_SYNC_LOST 15
#define BT_EVT_BIT_LE_SCAN_TIMEOUT 16
#define BT_EVT_BIT_LE_ADV_SET_TERMINATED 17
#define BT_EVT_BIT_LE_SCAN_REQ_RECEIVED 18
#define BT_EVT_BIT_LE_CHAN_SEL_ALGO 19
#define BT_EVT_MASK_INQUIRY_COMPLETE BT_EVT_BIT(0)
#define BT_EVT_MASK_CONN_COMPLETE BT_EVT_BIT(2)
#define BT_EVT_MASK_CONN_REQUEST BT_EVT_BIT(3)
#define BT_EVT_MASK_DISCONN_COMPLETE BT_EVT_BIT(4)
#define BT_EVT_MASK_AUTH_COMPLETE BT_EVT_BIT(5)
#define BT_EVT_MASK_REMOTE_NAME_REQ_COMPLETE BT_EVT_BIT(6)
#define BT_EVT_MASK_ENCRYPT_CHANGE BT_EVT_BIT(7)
#define BT_EVT_MASK_REMOTE_FEATURES BT_EVT_BIT(10)
#define BT_EVT_MASK_REMOTE_VERSION_INFO BT_EVT_BIT(11)
#define BT_EVT_MASK_HARDWARE_ERROR BT_EVT_BIT(15)
#define BT_EVT_MASK_ROLE_CHANGE BT_EVT_BIT(17)
#define BT_EVT_MASK_PIN_CODE_REQ BT_EVT_BIT(21)
#define BT_EVT_MASK_LINK_KEY_REQ BT_EVT_BIT(22)
#define BT_EVT_MASK_LINK_KEY_NOTIFY BT_EVT_BIT(23)
#define BT_EVT_MASK_DATA_BUFFER_OVERFLOW BT_EVT_BIT(25)
#define BT_EVT_MASK_INQUIRY_RESULT_WITH_RSSI BT_EVT_BIT(33)
#define BT_EVT_MASK_REMOTE_EXT_FEATURES BT_EVT_BIT(34)
#define BT_EVT_MASK_SYNC_CONN_COMPLETE BT_EVT_BIT(43)
#define BT_EVT_MASK_EXTENDED_INQUIRY_RESULT BT_EVT_BIT(46)
#define BT_EVT_MASK_ENCRYPT_KEY_REFRESH_COMPLETE BT_EVT_BIT(47)
#define BT_EVT_MASK_IO_CAPA_REQ BT_EVT_BIT(48)
#define BT_EVT_MASK_IO_CAPA_RESP BT_EVT_BIT(49)
#define BT_EVT_MASK_USER_CONFIRM_REQ BT_EVT_BIT(50)
#define BT_EVT_MASK_USER_PASSKEY_REQ BT_EVT_BIT(51)
#define BT_EVT_MASK_SSP_COMPLETE BT_EVT_BIT(53)
#define BT_EVT_MASK_USER_PASSKEY_NOTIFY BT_EVT_BIT(58)
#define BT_EVT_MASK_LE_META_EVENT BT_EVT_BIT(61)
#define BT_EVT_MASK_LE_CONN_COMPLETE BT_EVT_BIT(0)
#define BT_EVT_MASK_LE_ADVERTISING_REPORT BT_EVT_BIT(1)
#define BT_EVT_MASK_LE_CONN_UPDATE_COMPLETE BT_EVT_BIT(2)
#define BT_EVT_MASK_LE_REMOTE_FEAT_COMPLETE BT_EVT_BIT(3)
#define BT_EVT_MASK_LE_LTK_REQUEST BT_EVT_BIT(4)
#define BT_EVT_MASK_LE_CONN_PARAM_REQ BT_EVT_BIT(5)
#define BT_EVT_MASK_LE_DATA_LEN_CHANGE BT_EVT_BIT(6)
#define BT_EVT_MASK_LE_P256_PUBLIC_KEY_COMPLETE BT_EVT_BIT(7)
#define BT_EVT_MASK_LE_GENERATE_DHKEY_COMPLETE BT_EVT_BIT(8)
#define BT_EVT_MASK_LE_ENH_CONN_COMPLETE BT_EVT_BIT(9)
#define BT_EVT_MASK_LE_DIRECT_ADV_REPORT BT_EVT_BIT(10)
#define BT_EVT_MASK_LE_PHY_UPDATE_COMPLETE BT_EVT_BIT(11)
#define BT_EVT_MASK_LE_EXT_ADVERTISING_REPORT BT_EVT_BIT(12)
#define BT_EVT_MASK_LE_PER_ADV_SYNC_ESTABLISHED BT_EVT_BIT(13)
#define BT_EVT_MASK_LE_PER_ADVERTISING_REPORT BT_EVT_BIT(14)
#define BT_EVT_MASK_LE_PER_ADV_SYNC_LOST BT_EVT_BIT(15)
#define BT_EVT_MASK_LE_SCAN_TIMEOUT BT_EVT_BIT(16)
#define BT_EVT_MASK_LE_ADV_SET_TERMINATED BT_EVT_BIT(17)
#define BT_EVT_MASK_LE_SCAN_REQ_RECEIVED BT_EVT_BIT(18)
#define BT_EVT_MASK_LE_CHAN_SEL_ALGO BT_EVT_BIT(19)
#ifdef __cplusplus
}

View file

@ -46,7 +46,6 @@ static int32_t dup_count;
static uint32_t dup_curr;
#endif
#define BIT64(n) (1ULL << (n))
#define DEFAULT_EVENT_MASK 0x1fffffffffff
#define DEFAULT_LE_EVENT_MASK 0x1f
@ -1010,8 +1009,8 @@ static void le_advertising_report(struct pdu_data *pdu_data, uint8_t *b,
uint8_t *rssi;
uint8_t info_len;
if (!(event_mask & BIT64(BT_EVT_BIT_LE_META_EVENT)) ||
!(le_event_mask & BIT64(BT_EVT_BIT_LE_ADVERTISING_REPORT))) {
if (!(event_mask & BT_EVT_MASK_LE_META_EVENT) ||
!(le_event_mask & BT_EVT_MASK_LE_ADVERTISING_REPORT)) {
return;
}
@ -1090,8 +1089,8 @@ static void le_conn_complete(struct pdu_data *pdu_data, uint16_t handle,
struct bt_hci_evt_le_conn_complete *sep;
struct radio_le_conn_cmplt *radio_cc;
if (!(event_mask & BIT64(BT_EVT_BIT_LE_META_EVENT)) ||
!(le_event_mask & BIT64(BT_EVT_BIT_LE_CONN_COMPLETE))) {
if (!(event_mask & BT_EVT_MASK_LE_META_EVENT) ||
!(le_event_mask & BT_EVT_MASK_LE_CONN_COMPLETE)) {
return;
}
@ -1115,7 +1114,7 @@ static void disconn_complete(struct pdu_data *pdu_data, uint16_t handle,
{
struct bt_hci_evt_disconn_complete *ep;
if (!(event_mask & BIT64(BT_EVT_BIT_DISCONN_COMPLETE))) {
if (!(event_mask & BT_EVT_MASK_DISCONN_COMPLETE)) {
return;
}
@ -1133,8 +1132,8 @@ static void le_conn_update_complete(struct pdu_data *pdu_data, uint16_t handle,
struct bt_hci_evt_le_conn_update_complete *sep;
struct radio_le_conn_update_cmplt *radio_cu;
if (!(event_mask & BIT64(BT_EVT_BIT_LE_META_EVENT)) ||
!(le_event_mask & BIT64(BT_EVT_BIT_LE_CONN_UPDATE_COMPLETE))) {
if (!(event_mask & BT_EVT_MASK_LE_META_EVENT) ||
!(le_event_mask & BT_EVT_MASK_LE_CONN_UPDATE_COMPLETE)) {
return;
}
@ -1155,7 +1154,7 @@ static void enc_refresh_complete(struct pdu_data *pdu_data, uint16_t handle,
{
struct bt_hci_evt_encrypt_key_refresh_complete *ep;
if (!(event_mask & BIT64(BT_EVT_BIT_ENCRYPT_KEY_REFRESH_COMPLETE))) {
if (!(event_mask & BT_EVT_MASK_ENCRYPT_KEY_REFRESH_COMPLETE)) {
return;
}
@ -1250,8 +1249,8 @@ static void le_ltk_request(struct pdu_data *pdu_data, uint16_t handle,
{
struct bt_hci_evt_le_ltk_request *sep;
if (!(event_mask & BIT64(BT_EVT_BIT_LE_META_EVENT)) ||
!(le_event_mask & BIT64(BT_EVT_BIT_LE_LTK_REQUEST))) {
if (!(event_mask & BT_EVT_MASK_LE_META_EVENT) ||
!(le_event_mask & BT_EVT_MASK_LE_LTK_REQUEST)) {
return;
}
@ -1269,7 +1268,7 @@ static void encrypt_change(uint8_t err, uint16_t handle,
{
struct bt_hci_evt_encrypt_change *ep;
if (!(event_mask & BIT64(BT_EVT_BIT_ENCRYPT_CHANGE))) {
if (!(event_mask & BT_EVT_MASK_ENCRYPT_CHANGE)) {
return;
}
@ -1286,8 +1285,8 @@ static void le_remote_feat_complete(uint8_t status, struct pdu_data *pdu_data,
{
struct bt_hci_ev_le_remote_feat_complete *sep;
if (!(event_mask & BIT64(BT_EVT_BIT_LE_META_EVENT)) ||
!(le_event_mask & BIT64(BT_EVT_BIT_LE_REMOTE_FEAT_COMPLETE))) {
if (!(event_mask & BT_EVT_MASK_LE_META_EVENT) ||
!(le_event_mask & BT_EVT_MASK_LE_REMOTE_FEAT_COMPLETE)) {
return;
}
@ -1326,7 +1325,7 @@ static void remote_version_info(struct pdu_data *pdu_data, uint16_t handle,
{
struct bt_hci_evt_remote_version_info *ep;
if (!(event_mask & BIT64(BT_EVT_BIT_REMOTE_VERSION_INFO))) {
if (!(event_mask & BT_EVT_MASK_REMOTE_VERSION_INFO)) {
return;
}
@ -1348,8 +1347,8 @@ static void le_conn_param_req(struct pdu_data *pdu_data, uint16_t handle,
{
struct bt_hci_evt_le_conn_param_req *sep;
if (!(event_mask & BIT64(BT_EVT_BIT_LE_META_EVENT)) ||
!(le_event_mask & BIT64(BT_EVT_BIT_LE_CONN_PARAM_REQ))) {
if (!(event_mask & BT_EVT_MASK_LE_META_EVENT) ||
!(le_event_mask & BT_EVT_MASK_LE_CONN_PARAM_REQ)) {
return;
}
@ -1369,8 +1368,8 @@ static void le_data_len_change(struct pdu_data *pdu_data, uint16_t handle,
{
struct bt_hci_evt_le_data_len_change *sep;
if (!(event_mask & BIT64(BT_EVT_BIT_LE_META_EVENT)) ||
!(le_event_mask & BIT64(BT_EVT_BIT_LE_DATA_LEN_CHANGE))) {
if (!(event_mask & BT_EVT_MASK_LE_META_EVENT) ||
!(le_event_mask & BT_EVT_MASK_LE_DATA_LEN_CHANGE)) {
return;
}

View file

@ -2979,6 +2979,7 @@ static int le_init(void)
struct bt_hci_cp_le_set_event_mask *cp_mask;
struct net_buf *buf;
struct net_buf *rsp;
uint64_t mask = 0;
int err;
/* For now we only support LE capable controllers */
@ -3044,22 +3045,17 @@ static int le_init(void)
}
cp_mask = net_buf_add(buf, sizeof(*cp_mask));
memset(cp_mask, 0, sizeof(*cp_mask));
cp_mask->events[0] |= 0x02; /* LE Advertising Report Event */
mask |= BT_EVT_MASK_LE_ADVERTISING_REPORT;
if (IS_ENABLED(CONFIG_BLUETOOTH_CONN)) {
/* LE Connection Complete Event */
cp_mask->events[0] |= 0x01;
/* LE Connection Update Complete Event */
cp_mask->events[0] |= 0x04;
/* LE Read Remote Used Features Compl Evt */
cp_mask->events[0] |= 0x08;
mask |= BT_EVT_MASK_LE_CONN_COMPLETE;
mask |= BT_EVT_MASK_LE_CONN_UPDATE_COMPLETE;
mask |= BT_EVT_MASK_LE_REMOTE_FEAT_COMPLETE;
}
if (IS_ENABLED(CONFIG_BLUETOOTH_SMP)) {
/* LE Long Term Key Request Event */
cp_mask->events[0] |= 0x10;
mask |= BT_EVT_MASK_LE_LTK_REQUEST;
}
/*
@ -3068,10 +3064,11 @@ static int le_init(void)
*/
if ((bt_dev.supported_commands[34] & 0x02) &&
(bt_dev.supported_commands[34] & 0x04)) {
cp_mask->events[0] |= 0x80; /* LE Read Local P-256 PKey Compl */
cp_mask->events[1] |= 0x01; /* LE Generate DHKey Compl Event */
mask |= BT_EVT_MASK_LE_P256_PUBLIC_KEY_COMPLETE;
mask |= BT_EVT_MASK_LE_GENERATE_DHKEY_COMPLETE;
}
sys_put_le64(mask, cp_mask->events);
err = bt_hci_cmd_send_sync(BT_HCI_OP_LE_SET_EVENT_MASK, buf, NULL);
if (err) {
return err;
@ -3293,6 +3290,7 @@ static int set_event_mask(void)
{
struct bt_hci_cp_set_event_mask *ev;
struct net_buf *buf;
uint64_t mask = 0;
buf = bt_hci_cmd_create(BT_HCI_OP_SET_EVENT_MASK, sizeof(*ev));
if (!buf) {
@ -3300,49 +3298,46 @@ static int set_event_mask(void)
}
ev = net_buf_add(buf, sizeof(*ev));
memset(ev, 0, sizeof(*ev));
if (IS_ENABLED(CONFIG_BLUETOOTH_BREDR)) {
ev->events[0] |= 0x01; /* Inquiry Complete */
ev->events[0] |= 0x04; /* Connection Complete */
ev->events[0] |= 0x08; /* Connection Request */
ev->events[0] |= 0x20; /* Authentication Complete */
ev->events[0] |= 0x40; /* Remote Name Request Complete */
ev->events[1] |= 0x04; /* Read Remote Feature Complete */
ev->events[2] |= 0x02; /* Role Change */
ev->events[2] |= 0x20; /* Pin Code Request */
ev->events[2] |= 0x40; /* Link Key Request */
ev->events[2] |= 0x80; /* Link Key Notif */
ev->events[4] |= 0x02; /* Inquiry Result With RSSI */
ev->events[4] |= 0x04; /* Remote Extended Features Complete */
ev->events[5] |= 0x08; /* Synchronous Conn Complete Event */
ev->events[5] |= 0x40; /* Extended Inquiry Result */
ev->events[6] |= 0x01; /* IO Capability Request */
ev->events[6] |= 0x02; /* IO Capability Response */
ev->events[6] |= 0x04; /* User Confirmation Request */
ev->events[6] |= 0x08; /* User Passkey Request */
ev->events[6] |= 0x20; /* Simple Pairing Complete */
ev->events[7] |= 0x04; /* User Passkey Notification */
mask |= BT_EVT_MASK_INQUIRY_COMPLETE;
mask |= BT_EVT_MASK_CONN_COMPLETE;
mask |= BT_EVT_MASK_CONN_REQUEST;
mask |= BT_EVT_MASK_AUTH_COMPLETE;
mask |= BT_EVT_MASK_REMOTE_NAME_REQ_COMPLETE;
mask |= BT_EVT_MASK_REMOTE_FEATURES;
mask |= BT_EVT_MASK_ROLE_CHANGE;
mask |= BT_EVT_MASK_PIN_CODE_REQ;
mask |= BT_EVT_MASK_LINK_KEY_REQ;
mask |= BT_EVT_MASK_LINK_KEY_NOTIFY;
mask |= BT_EVT_MASK_INQUIRY_RESULT_WITH_RSSI;
mask |= BT_EVT_MASK_REMOTE_EXT_FEATURES;
mask |= BT_EVT_MASK_SYNC_CONN_COMPLETE;
mask |= BT_EVT_MASK_EXTENDED_INQUIRY_RESULT;
mask |= BT_EVT_MASK_IO_CAPA_REQ;
mask |= BT_EVT_MASK_IO_CAPA_RESP;
mask |= BT_EVT_MASK_USER_CONFIRM_REQ;
mask |= BT_EVT_MASK_USER_PASSKEY_REQ;
mask |= BT_EVT_MASK_SSP_COMPLETE;
mask |= BT_EVT_MASK_USER_PASSKEY_NOTIFY;
}
ev->events[1] |= 0x20; /* Command Complete */
ev->events[1] |= 0x40; /* Command Status */
ev->events[1] |= 0x80; /* Hardware Error */
ev->events[3] |= 0x02; /* Data Buffer Overflow */
ev->events[7] |= 0x20; /* LE Meta-Event */
mask |= BT_EVT_MASK_HARDWARE_ERROR;
mask |= BT_EVT_MASK_DATA_BUFFER_OVERFLOW;
mask |= BT_EVT_MASK_LE_META_EVENT;
if (IS_ENABLED(CONFIG_BLUETOOTH_CONN)) {
ev->events[0] |= 0x10; /* Disconnection Complete */
ev->events[1] |= 0x08; /* Read Remote Version Info Complete */
ev->events[2] |= 0x04; /* Number of Completed Packets */
mask |= BT_EVT_MASK_DISCONN_COMPLETE;
mask |= BT_EVT_MASK_REMOTE_VERSION_INFO;
}
if (IS_ENABLED(CONFIG_BLUETOOTH_SMP) &&
BT_FEAT_LE_ENCR(bt_dev.le.features)) {
ev->events[0] |= 0x80; /* Encryption Change */
ev->events[5] |= 0x80; /* Encryption Key Refresh Complete */
mask |= BT_EVT_MASK_ENCRYPT_CHANGE;
mask |= BT_EVT_MASK_ENCRYPT_KEY_REFRESH_COMPLETE;
}
sys_put_le64(mask, ev->events);
return bt_hci_cmd_send_sync(BT_HCI_OP_SET_EVENT_MASK, buf, NULL);
}