From a7587563d8a1bac8e3404b7296217f1057bef84f Mon Sep 17 00:00:00 2001 From: Szymon Janc Date: Tue, 24 Apr 2018 10:58:51 +0200 Subject: [PATCH] nimble/host: Fix data_status in BLE_GAP_EVENT_EXT_DISC Since we decode this from HCI props host needs to have dedicated defines as those no longer match HCI properties mask. --- nimble/host/include/host/ble_gap.h | 5 +++++ nimble/host/src/ble_hs_hci_evt.c | 19 +++++++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/nimble/host/include/host/ble_gap.h b/nimble/host/include/host/ble_gap.h index 6170f63f6..10350319a 100644 --- a/nimble/host/include/host/ble_gap.h +++ b/nimble/host/include/host/ble_gap.h @@ -225,6 +225,11 @@ struct ble_gap_passkey_params { }; #if MYNEWT_VAL(BLE_EXT_ADV) + +#define BLE_GAP_EXT_ADV_DATA_STATUS_COMPLETE 0x00 +#define BLE_GAP_EXT_ADV_DATA_STATUS_INCOMPLETE 0x01 +#define BLE_GAP_EXT_ADV_DATA_STATUS_TRUNCATED 0x02 + struct ble_gap_ext_disc_desc { /*** Common fields. */ uint8_t props; diff --git a/nimble/host/src/ble_hs_hci_evt.c b/nimble/host/src/ble_hs_hci_evt.c index 989bc3d23..db62d54fa 100644 --- a/nimble/host/src/ble_hs_hci_evt.c +++ b/nimble/host/src/ble_hs_hci_evt.c @@ -553,7 +553,7 @@ static int ble_hs_hci_evt_le_ext_adv_rpt(uint8_t subevent, uint8_t *data, int len) { #if MYNEWT_VAL(BLE_EXT_ADV) - struct ble_gap_ext_disc_desc desc = {0}; + struct ble_gap_ext_disc_desc desc; struct hci_ext_adv_report *ext_adv; struct hci_ext_adv_report_param *params; int num_reports; @@ -578,6 +578,8 @@ ble_hs_hci_evt_le_ext_adv_rpt(uint8_t subevent, uint8_t *data, int len) params = &ext_adv->params[0]; for (i = 0; i < num_reports; i++) { + memset(&desc, 0, sizeof(desc)); + desc.props = (params->evt_type) & 0x1F; if (desc.props & BLE_HCI_ADV_LEGACY_MASK) { legacy_event_type = ble_hs_hci_decode_legacy_type(params->evt_type); @@ -586,8 +588,21 @@ ble_hs_hci_evt_le_ext_adv_rpt(uint8_t subevent, uint8_t *data, int len) continue; } desc.legacy_event_type = legacy_event_type; + desc.data_status = BLE_GAP_EXT_ADV_DATA_STATUS_COMPLETE; } else { - desc.data_status = (params->evt_type & BLE_HCI_ADV_DATA_STATUS_MASK) >> 5; + switch(params->evt_type & BLE_HCI_ADV_DATA_STATUS_MASK) { + case BLE_HCI_ADV_DATA_STATUS_COMPLETE: + desc.data_status = BLE_GAP_EXT_ADV_DATA_STATUS_COMPLETE; + break; + case BLE_HCI_ADV_DATA_STATUS_INCOMPLETE: + desc.data_status = BLE_GAP_EXT_ADV_DATA_STATUS_INCOMPLETE; + break; + case BLE_HCI_ADV_DATA_STATUS_TRUNCATED: + desc.data_status = BLE_GAP_EXT_ADV_DATA_STATUS_TRUNCATED; + break; + default: + assert(false); + } } desc.addr.type = params->addr_type; memcpy(desc.addr.val, params->addr, 6);