Merge pull request #115 from MariuszSkamra/hs_dbg_le_evt

debug: Add missing debug logs for LE Meta Events
This commit is contained in:
Szymon Janc
2018-05-28 11:28:03 +02:00
committed by GitHub
2 changed files with 265 additions and 0 deletions
+182
View File
@@ -149,6 +149,188 @@ ble_hs_dbg_le_event_disp(uint8_t subev, uint8_t len, uint8_t *evdata)
get_le16(evdata + 1), evdata[3], evdata[4]);
break;
case BLE_HCI_LE_SUBEV_DIRECT_ADV_RPT:
{
struct hci_le_subev_direct_adv_rpt *data = (void *) evdata;
struct hci_le_subev_direct_adv_rpt_param *params = data->params;
if (len < sizeof(*data) ||
len < sizeof(*data) + data->num_reports * sizeof(*params)) {
BLE_HS_LOG(DEBUG, "Corrupted LE Directed Advertising Report "
"len=%u\n", len);
break;
}
BLE_HS_LOG(DEBUG, "LE Directed Advertising Report len=%u "
"num=0x%02x ", len, data->num_reports);
for (i = 0; i < data->num_reports; i++) {
BLE_HS_LOG(DEBUG, "[%d]={evttype=0x%02x}\n", i, params->evt_type);
params += 1;
}
break;
}
case BLE_HCI_LE_SUBEV_RD_LOC_P256_PUBKEY:
{
struct hci_le_subev_rd_loc_p256_pubkey *data = (void *) evdata;
if (len != sizeof(*data)) {
BLE_HS_LOG(DEBUG, "Corrupted LE Read Local P-256 Public Key "
"Complete Event len=%u\n", len);
break;
}
BLE_HS_LOG(DEBUG, "LE Read Local P-256 Public Key Complete "
"len=%u status=0x%02x", len, data->status);
break;
}
case BLE_HCI_LE_SUBEV_GEN_DHKEY_COMPLETE:
{
struct hci_le_subev_gen_dhkey_complete *data = (void *) evdata;
if (len != sizeof(*data)) {
BLE_HS_LOG(DEBUG, "Corrupted LE Generate DHKey Complete "
"len=%u\n", len);
break;
}
BLE_HS_LOG(DEBUG, "LE Generate DHKey Complete Event len=%u "
"status=0x%02x", len, data->status);
break;
}
#if MYNEWT_VAL(BLE_EXT_ADV)
case BLE_HCI_LE_SUBEV_EXT_ADV_RPT:
{
struct hci_le_subev_ext_adv_rpt *data = (void *) evdata;
struct hci_ext_adv_report_param *params;
if (len < sizeof(*data) + sizeof(*params)) {
BLE_HS_LOG(DEBUG, "Corrupted LE Extended Advertising Report "
"len=%u\n", len);
break;
}
BLE_HS_LOG(DEBUG, "LE Extended Advertising Report len=%u num=0x%02x ",
len, data->num_reports);
for (i = 0, dptr = &evdata[1]; i < data->num_reports; i++) {
params = (void *) dptr;
BLE_HS_LOG(DEBUG, "[%d]={evttype=0x%04x advlen=%u}\n",
i, le16toh(params->evt_type), params->adv_data_len);
dptr += sizeof(*params) + params->adv_data_len;
}
break;
}
case BLE_HCI_LE_SUBEV_PER_ADV_SYNC_ESTAB:
{
struct hci_le_subev_per_adv_sync_estab *data = (void *) evdata;
if (len != sizeof(*data)) {
BLE_HS_LOG(DEBUG, "Corrupted LE Periodic Advertising Sync "
"Established len=%u\n", len);
break;
}
BLE_HS_LOG(DEBUG, "LE Periodic Advertising Sync Established "
"len=%u status=0x%02x handle=0x%04x", len, data->status,
le16toh(data->sync_handle));
break;
}
case BLE_HCI_LE_SUBEV_PER_ADV_RPT:
{
struct hci_le_subev_per_adv_rpt *data = (void *) evdata;
if (len < sizeof(*data) || len != sizeof(*data) + data->data_length) {
BLE_HS_LOG(DEBUG, "Corrupted LE Periodic Advertising Report "
"len=%u\n", len);
break;
}
BLE_HS_LOG(DEBUG, "LE Periodic Advertising Report "
"len=%u handle=0x%04x data_status=0x%02x data_len=0x%02x",
len, le16toh(data->sync_handle), data->data_status,
data->data_length);
break;
}
case BLE_HCI_LE_SUBEV_PER_ADV_SYNC_LOST:
{
struct hci_le_subev_per_adv_sync_lost *data = (void *) evdata;
if (len != sizeof(*data)) {
BLE_HS_LOG(DEBUG, "Corrupted LE Periodic Advertising Sync Lost "
"len=%u\n", len);
break;
}
BLE_HS_LOG(DEBUG, "LE Periodic Advertising Sync Lost "
"len=%u handle=0x%04x", len, le16toh(data->sync_handle));
break;
}
case BLE_HCI_LE_SUBEV_SCAN_TIMEOUT:
if (len) {
BLE_HS_LOG(DEBUG, "Corrupted LE Scan Timeout len=%u", len);
break;
}
BLE_HS_LOG(DEBUG, "LE Scan Timeout Event len=%u", len);
break;
case BLE_HCI_LE_SUBEV_ADV_SET_TERMINATED:
{
struct hci_le_subev_adv_set_terminated *data = (void *) evdata;
if (len != sizeof(*data)) {
BLE_HS_LOG(DEBUG, "Corrupted LE Advertising Set Terminated "
"len=%u\n", len);
break;
}
BLE_HS_LOG(DEBUG, "LE Advertising Set Terminated len=%u "
"status=0x%02x adv_handle=0x%02x conn_handle=0x%04x "
"num_compl_ext_adv_ev=0x%02x", len, data->adv_handle,
le16toh(data->conn_handle), data->num_compl_ext_adv_ev);
break;
}
case BLE_HCI_LE_SUBEV_SCAN_REQ_RCVD:
{
struct hci_le_subev_scan_req_rcvd *data = (void *) evdata;
if (len != sizeof(*data)) {
BLE_HS_LOG(DEBUG, "Corrupted LE Scan Request Received "
"len=%u\n", len);
break;
}
BLE_HS_LOG(DEBUG, "LE Scan Request Received len=%u "
"adv_handle=0x%02x", len, data->adv_handle);
break;
}
#endif /* MYNEWT_VAL(BLE_EXT_ADV) */
case BLE_HCI_LE_SUBEV_CHAN_SEL_ALG:
{
struct hci_le_subev_chan_sel_alg *data = (void *) evdata;
if (len != sizeof(*data)) {
BLE_HS_LOG(DEBUG, "Corrupted LE Channel Selection Algorithm "
"len=%u\n", len);
break;
}
BLE_HS_LOG(DEBUG, "LE Channel Selection Algorithm len=%u "
"conn_handle=0x%04x chan_sel_alg=0x%02x", len,
le16toh(data->conn_handle), data->chan_sel_alg);
break;
}
default:
BLE_HS_LOG(DEBUG, "LE Meta SubEvent op=0x%02x\n", subev);
break;
+83
View File
@@ -879,6 +879,33 @@ struct hci_create_conn
uint16_t max_ce_len;
};
/* LE Read Local P-256 Public Key Complete Event */
struct hci_le_subev_rd_loc_p256_pubkey {
uint8_t status;
uint8_t pubkey[64];
} __attribute__((packed));
/* LE Generate DHKey Complete Event */
struct hci_le_subev_gen_dhkey_complete {
uint8_t status;
uint8_t dhkey[32];
} __attribute__((packed));
/* LE Directed Advertising Report Event */
struct hci_le_subev_direct_adv_rpt_param {
uint8_t evt_type;
uint8_t addr_type;
uint8_t addr[6];
uint8_t dir_addr_type;
uint8_t dir_addr[6];
int8_t rssi;
} __attribute__((packed));
struct hci_le_subev_direct_adv_rpt {
uint8_t num_reports;
struct hci_le_subev_direct_adv_rpt_param params[0];
} __attribute__((packed));
#if MYNEWT_VAL(BLE_EXT_ADV)
/* LE create connection command (ocf=0x0043). */
struct hci_ext_conn_params
@@ -952,8 +979,64 @@ struct hci_ext_adv_params
uint8_t sid;
uint8_t scan_req_notif;
};
/* LE Extended Advertising Report Event */
struct hci_le_subev_ext_adv_rpt {
uint8_t num_reports;
struct hci_ext_adv_report_param params[0];
} __attribute__((packed));
/* LE Periodic Advertising Sync Established Event */
struct hci_le_subev_per_adv_sync_estab {
uint8_t status;
uint16_t sync_handle;
uint8_t sid;
uint8_t adv_addr_type;
uint8_t adv_addr[6];
uint8_t adv_phy;
uint16_t per_adv_ival;
uint8_t adv_clk_accuracy;
} __attribute__((packed));
/* LE Periodic Advertising Report Event */
struct hci_le_subev_per_adv_rpt {
uint16_t sync_handle;
uint8_t tx_power;
int8_t rssi;
uint8_t _unused;
uint8_t data_status;
uint8_t data_length;
uint8_t data[0];
} __attribute__((packed));
/* LE Periodic Advertising Sync Lost Event */
struct hci_le_subev_per_adv_sync_lost {
uint16_t sync_handle;
} __attribute__((packed));
/* LE Advertising Set Terminated Event */
struct hci_le_subev_adv_set_terminated {
uint8_t status;
uint8_t adv_handle;
uint16_t conn_handle;
uint8_t num_compl_ext_adv_ev;
} __attribute__((packed));
/* LE Scan Request Received Event */
struct hci_le_subev_scan_req_rcvd {
uint8_t adv_handle;
uint8_t scan_addr_type;
uint8_t scan_addr[6];
} __attribute__((packed));
#endif
/* LE Channel Selection Algorithm Event */
struct hci_le_subev_chan_sel_alg {
uint16_t conn_handle;
uint8_t chan_sel_alg;
} __attribute__((packed));
/* LE connection update command (ocf=0x0013). */
struct hci_conn_update
{