OSDN Git Service

Merge "Revert "Fix potential OOB write in btm_read_remote_ext_features_complete"...
authorAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
Tue, 26 Nov 2019 02:55:04 +0000 (02:55 +0000)
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
Tue, 26 Nov 2019 02:55:04 +0000 (02:55 +0000)
Change-Id: I22fb89a33d6265470d4dc82a19d3ff66ce1ad9fa

1  2 
stack/btm/btm_acl.cc
stack/btm/btm_int.h
stack/btu/btu_hcif.cc
stack/include/hcidefs.h

diff --combined stack/btm/btm_acl.cc
  #include "device/include/interop.h"
  #include "hcidefs.h"
  #include "hcimsgs.h"
- #include "log/log.h"
  #include "l2c_int.h"
  #include "osi/include/osi.h"
  
 -extern fixed_queue_t* btu_general_alarm_queue;
 -
  static void btm_read_remote_features(uint16_t handle);
  static void btm_read_remote_ext_features(uint16_t handle, uint8_t page_number);
  static void btm_process_remote_ext_features(tACL_CONN* p_acl_cb,
@@@ -90,13 -91,16 +89,13 @@@ void btm_acl_init(void) 
   *                 NULL if not found.
   *
   ******************************************************************************/
 -tACL_CONN* btm_bda_to_acl(const BD_ADDR bda, tBT_TRANSPORT transport) {
 +tACL_CONN* btm_bda_to_acl(const RawAddress& bda, tBT_TRANSPORT transport) {
    tACL_CONN* p = &btm_cb.acl_db[0];
    uint16_t xx;
 -  if (bda) {
 -    for (xx = 0; xx < MAX_L2CAP_LINKS; xx++, p++) {
 -      if ((p->in_use) && (!memcmp(p->remote_addr, bda, BD_ADDR_LEN)) &&
 -          p->transport == transport) {
 -        BTM_TRACE_DEBUG("btm_bda_to_acl found");
 -        return (p);
 -      }
 +  for (xx = 0; xx < MAX_L2CAP_LINKS; xx++, p++) {
 +    if ((p->in_use) && p->remote_addr == bda && p->transport == transport) {
 +      BTM_TRACE_DEBUG("btm_bda_to_acl found");
 +      return (p);
      }
    }
  
@@@ -139,29 -143,30 +138,29 @@@ uint8_t btm_handle_to_acl_index(uint16_
   * Returns          success return true, otherwise false.
   *
   ******************************************************************************/
 -bool btm_ble_get_acl_remote_addr(tBTM_SEC_DEV_REC* p_dev_rec, BD_ADDR conn_addr,
 +bool btm_ble_get_acl_remote_addr(tBTM_SEC_DEV_REC* p_dev_rec,
 +                                 RawAddress& conn_addr,
                                   tBLE_ADDR_TYPE* p_addr_type) {
    bool st = true;
  
    if (p_dev_rec == NULL) {
 -    BTM_TRACE_ERROR(
 -        "btm_ble_get_acl_remote_addr can not find device with matching "
 -        "address");
 +    BTM_TRACE_ERROR("%s can not find device with matching address", __func__);
      return false;
    }
  
    switch (p_dev_rec->ble.active_addr_type) {
      case BTM_BLE_ADDR_PSEUDO:
 -      memcpy(conn_addr, p_dev_rec->bd_addr, BD_ADDR_LEN);
 +      conn_addr = p_dev_rec->bd_addr;
        *p_addr_type = p_dev_rec->ble.ble_addr_type;
        break;
  
      case BTM_BLE_ADDR_RRA:
 -      memcpy(conn_addr, p_dev_rec->ble.cur_rand_addr, BD_ADDR_LEN);
 +      conn_addr = p_dev_rec->ble.cur_rand_addr;
        *p_addr_type = BLE_ADDR_RANDOM;
        break;
  
      case BTM_BLE_ADDR_STATIC:
 -      memcpy(conn_addr, p_dev_rec->ble.static_addr, BD_ADDR_LEN);
 +      conn_addr = p_dev_rec->ble.static_addr;
        *p_addr_type = p_dev_rec->ble.static_addr_type;
        break;
  
   * Returns          void
   *
   ******************************************************************************/
 -void btm_acl_created(BD_ADDR bda, DEV_CLASS dc, BD_NAME bdn,
 +void btm_acl_created(const RawAddress& bda, DEV_CLASS dc, BD_NAME bdn,
                       uint16_t hci_handle, uint8_t link_role,
                       tBT_TRANSPORT transport) {
    tBTM_SEC_DEV_REC* p_dev_rec = NULL;
      p->hci_handle = hci_handle;
      p->link_role = link_role;
      p->transport = transport;
 -    BTM_TRACE_DEBUG(
 -        "Duplicate btm_acl_created: RemBdAddr: %02x%02x%02x%02x%02x%02x",
 -        bda[0], bda[1], bda[2], bda[3], bda[4], bda[5]);
 +    VLOG(1) << "Duplicate btm_acl_created: RemBdAddr: " << bda;
      BTM_SetLinkPolicy(p->remote_addr, &btm_cb.btm_def_link_policy);
      return;
    }
        p->hci_handle = hci_handle;
        p->link_role = link_role;
        p->link_up_issued = false;
 -      memcpy(p->remote_addr, bda, BD_ADDR_LEN);
 +      p->remote_addr = bda;
  
        p->transport = transport;
  #if (BLE_PRIVACY_SPT == TRUE)
              bda, btm_cb.ble_ctr_cb.addr_mgnt_cb.private_addr);
  #else
        p->conn_addr_type = BLE_ADDR_PUBLIC;
 -      memcpy(p->conn_addr, &controller_get_interface()->get_address()->address,
 -             BD_ADDR_LEN);
 +      p->conn_addr = *controller_get_interface()->get_address();
  
  #endif
        p->switch_role_failed_attempts = 0;
            BTM_TRACE_API("%s: pend:%d", __func__, req_pend);
            if (req_pend) {
              /* Request for remaining Security Features (if any) */
 -            l2cu_resubmit_pending_sec_req(p_dev_rec->bd_addr);
 +            l2cu_resubmit_pending_sec_req(&p_dev_rec->bd_addr);
            }
            btm_establish_continue(p);
            return;
    }
  }
  
 -void btm_acl_update_conn_addr(uint8_t conn_handle, BD_ADDR address) {
 +void btm_acl_update_conn_addr(uint16_t conn_handle, const RawAddress& address) {
    uint8_t idx = btm_handle_to_acl_index(conn_handle);
    if (idx != MAX_L2CAP_LINKS) {
 -    memcpy(btm_cb.acl_db[idx].conn_addr, address, BD_ADDR_LEN);
 +    btm_cb.acl_db[idx].conn_addr = address;
    }
  }
  
   * Returns          void
   *
   ******************************************************************************/
 -void btm_acl_report_role_change(uint8_t hci_status, BD_ADDR bda) {
 +void btm_acl_report_role_change(uint8_t hci_status, const RawAddress* bda) {
    tBTM_ROLE_SWITCH_CMPL ref_data;
    BTM_TRACE_DEBUG("btm_acl_report_role_change");
    if (btm_cb.devcb.p_switch_role_cb &&
 -      (bda && (0 == memcmp(btm_cb.devcb.switch_role_ref_data.remote_bd_addr,
 -                           bda, BD_ADDR_LEN)))) {
 +      (bda && btm_cb.devcb.switch_role_ref_data.remote_bd_addr == *bda)) {
      memcpy(&ref_data, &btm_cb.devcb.switch_role_ref_data,
             sizeof(tBTM_ROLE_SWITCH_CMPL));
      ref_data.hci_status = hci_status;
   * Returns          void
   *
   ******************************************************************************/
 -void btm_acl_removed(BD_ADDR bda, tBT_TRANSPORT transport) {
 +void btm_acl_removed(const RawAddress& bda, tBT_TRANSPORT transport) {
    tACL_CONN* p;
 -  tBTM_BL_EVENT_DATA evt_data;
    tBTM_SEC_DEV_REC* p_dev_rec = NULL;
    BTM_TRACE_DEBUG("btm_acl_removed");
    p = btm_bda_to_acl(bda, transport);
      p->in_use = false;
  
      /* if the disconnected channel has a pending role switch, clear it now */
 -    btm_acl_report_role_change(HCI_ERR_NO_CONNECTION, bda);
 +    btm_acl_report_role_change(HCI_ERR_NO_CONNECTION, &bda);
  
      /* Only notify if link up has had a chance to be issued */
      if (p->link_up_issued) {
  
        /* If anyone cares, tell him database changed */
        if (btm_cb.p_bl_changed_cb) {
 +        tBTM_BL_EVENT_DATA evt_data;
          evt_data.event = BTM_BL_DISCN_EVT;
 -        evt_data.discn.p_bda = bda;
 +        evt_data.discn.p_bda = &bda;
          evt_data.discn.handle = p->hci_handle;
          evt_data.discn.transport = p->transport;
          (*btm_cb.p_bl_changed_cb)(&evt_data);
@@@ -480,9 -489,7 +479,9 @@@ void btm_acl_update_busy_level(tBTM_BLI
      evt.busy_level = busy_level;
      btm_cb.busy_level = busy_level;
      if (btm_cb.p_bl_changed_cb && (btm_cb.bl_evt_mask & BTM_BL_UPDATE_MASK)) {
 -      (*btm_cb.p_bl_changed_cb)((tBTM_BL_EVENT_DATA*)&evt);
 +      tBTM_BL_EVENT_DATA btm_bl_event_data;
 +      btm_bl_event_data.update = evt;
 +      (*btm_cb.p_bl_changed_cb)(&btm_bl_event_data);
      }
    }
  }
   *                  BTM_UNKNOWN_ADDR if no active link with bd addr specified
   *
   ******************************************************************************/
 -tBTM_STATUS BTM_GetRole(BD_ADDR remote_bd_addr, uint8_t* p_role) {
 +tBTM_STATUS BTM_GetRole(const RawAddress& remote_bd_addr, uint8_t* p_role) {
    tACL_CONN* p;
    BTM_TRACE_DEBUG("BTM_GetRole");
    p = btm_bda_to_acl(remote_bd_addr, BT_TRANSPORT_BR_EDR);
   *                  BTM_BUSY if the previous command is not completed
   *
   ******************************************************************************/
 -tBTM_STATUS BTM_SwitchRole(BD_ADDR remote_bd_addr, uint8_t new_role,
 +tBTM_STATUS BTM_SwitchRole(const RawAddress& remote_bd_addr, uint8_t new_role,
                             tBTM_CMPL_CB* p_cb) {
    tACL_CONN* p;
    tBTM_SEC_DEV_REC* p_dev_rec = NULL;
    tBTM_STATUS status;
    tBTM_PM_MODE pwr_mode;
    tBTM_PM_PWR_MD settings;
 -  BD_ADDR_PTR p_bda;
 -  BTM_TRACE_API("BTM_SwitchRole BDA: %02x-%02x-%02x-%02x-%02x-%02x",
 -                remote_bd_addr[0], remote_bd_addr[1], remote_bd_addr[2],
 -                remote_bd_addr[3], remote_bd_addr[4], remote_bd_addr[5]);
 +  VLOG(1) << __func__ << " BDA: " << remote_bd_addr;
  
    /* Make sure the local device supports switching */
    if (!controller_get_interface()->supports_master_slave_role_switch())
      return (BTM_MODE_UNSUPPORTED);
  
    if (btm_cb.devcb.p_switch_role_cb && p_cb) {
 -    p_bda = btm_cb.devcb.switch_role_ref_data.remote_bd_addr;
 -    BTM_TRACE_DEBUG(
 -        "Role switch on other device is in progress 0x%02x%02x%02x%02x%02x%02x",
 -        p_bda[0], p_bda[1], p_bda[2], p_bda[3], p_bda[4], p_bda[5]);
 +    VLOG(2) << "Role switch on other device is in progress "
 +            << btm_cb.devcb.switch_role_ref_data.remote_bd_addr;
      return (BTM_BUSY);
    }
  
    /* Finished if already in desired role */
    if (p->link_role == new_role) return (BTM_SUCCESS);
  
 -  if (interop_match_addr(INTEROP_DISABLE_ROLE_SWITCH,
 -                         (const bt_bdaddr_t*)&remote_bd_addr)) {
 +  if (interop_match_addr(INTEROP_DISABLE_ROLE_SWITCH, &remote_bd_addr))
      return BTM_DEV_BLACKLISTED;
 -  }
  
  #if (BTM_SCO_INCLUDED == TRUE)
    /* Check if there is any SCO Active on this BD Address */
      return (BTM_BUSY);
    }
  
 -  if (interop_match_addr(INTEROP_DYNAMIC_ROLE_SWITCH,
 -                         (const bt_bdaddr_t*)&remote_bd_addr)) {
 +  if (interop_match_addr(INTEROP_DYNAMIC_ROLE_SWITCH, &remote_bd_addr)) {
      BTM_TRACE_DEBUG("%s, Device blacklisted under INTEROP_DYNAMIC_ROLE_SWITCH.",
                      __func__);
      return BTM_DEV_BLACKLISTED;
  
    /* Initialize return structure in case request fails */
    if (p_cb) {
 -    memcpy(btm_cb.devcb.switch_role_ref_data.remote_bd_addr, remote_bd_addr,
 -           BD_ADDR_LEN);
 +    btm_cb.devcb.switch_role_ref_data.remote_bd_addr = remote_bd_addr;
      btm_cb.devcb.switch_role_ref_data.role = new_role;
      /* initialized to an error code */
      btm_cb.devcb.switch_role_ref_data.hci_status = HCI_ERR_UNSUPPORTED_VALUE;
@@@ -644,6 -660,7 +643,6 @@@ void btm_acl_encrypt_change(uint16_t ha
    tACL_CONN* p;
    uint8_t xx;
    tBTM_SEC_DEV_REC* p_dev_rec;
 -  tBTM_BL_ROLE_CHG_DATA evt;
  
    BTM_TRACE_DEBUG("btm_acl_encrypt_change handle=%d status=%d encr_enabl=%d",
                    handle, status, encr_enable);
      p->switch_role_state = BTM_ACL_SWKEY_STATE_IDLE;
      p->encrypt_state = BTM_ACL_ENCRYPT_STATE_IDLE;
      btm_acl_report_role_change(btm_cb.devcb.switch_role_ref_data.hci_status,
 -                               p->remote_addr);
 +                               &p->remote_addr);
  
      /* if role change event is registered, report it now */
      if (btm_cb.p_bl_changed_cb && (btm_cb.bl_evt_mask & BTM_BL_ROLE_CHG_MASK)) {
 +      tBTM_BL_ROLE_CHG_DATA evt;
        evt.event = BTM_BL_ROLE_CHG_EVT;
        evt.new_role = btm_cb.devcb.switch_role_ref_data.role;
 -      evt.p_bda = btm_cb.devcb.switch_role_ref_data.remote_bd_addr;
 +      evt.p_bda = &btm_cb.devcb.switch_role_ref_data.remote_bd_addr;
        evt.hci_status = btm_cb.devcb.switch_role_ref_data.hci_status;
 -      (*btm_cb.p_bl_changed_cb)((tBTM_BL_EVENT_DATA*)&evt);
 +      tBTM_BL_EVENT_DATA btm_bl_event_data;
 +      btm_bl_event_data.role_chg = evt;
 +      (*btm_cb.p_bl_changed_cb)(&btm_bl_event_data);
  
        BTM_TRACE_DEBUG(
            "Role Switch Event: new_role 0x%02x, HCI Status 0x%02x, rs_st:%d",
   * Returns          status of the operation
   *
   ******************************************************************************/
 -tBTM_STATUS BTM_SetLinkPolicy(BD_ADDR remote_bda, uint16_t* settings) {
 +tBTM_STATUS BTM_SetLinkPolicy(const RawAddress& remote_bda,
 +                              uint16_t* settings) {
    tACL_CONN* p;
    uint8_t* localFeatures = BTM_ReadLocalFeatures();
    BTM_TRACE_DEBUG("%s", __func__);
@@@ -818,7 -831,7 +817,7 @@@ void BTM_SetDefaultLinkPolicy(uint16_t 
    btsnd_hcic_write_def_policy_set(settings);
  }
  
 -void btm_use_preferred_conn_params(BD_ADDR bda) {
 +void btm_use_preferred_conn_params(const RawAddress& bda) {
    tL2C_LCB* p_lcb = l2cu_find_lcb_by_bd_addr(bda, BT_TRANSPORT_LE);
    tBTM_SEC_DEV_REC* p_dev_rec = btm_find_or_alloc_dev(bda);
  
@@@ -940,7 -953,7 +939,7 @@@ void btm_process_remote_ext_features(tA
    BTM_TRACE_API("%s: pend:%d", __func__, req_pend);
    if (req_pend) {
      /* Request for remaining Security Features (if any) */
 -    l2cu_resubmit_pending_sec_req(p_dev_rec->bd_addr);
 +    l2cu_resubmit_pending_sec_req(&p_dev_rec->bd_addr);
    }
  }
  
@@@ -1063,7 -1076,7 +1062,7 @@@ void btm_read_remote_features_complete(
   * Returns          void
   *
   ******************************************************************************/
- void btm_read_remote_ext_features_complete(uint8_t* p, uint8_t evt_len) {
+ void btm_read_remote_ext_features_complete(uint8_t* p) {
    tACL_CONN* p_acl_cb;
    uint8_t page_num, max_page;
    uint16_t handle;
  
    BTM_TRACE_DEBUG("btm_read_remote_ext_features_complete");
  
-   if (evt_len < HCI_EXT_FEATURES_SUCCESS_EVT_LEN) {
-     android_errorWriteLog(0x534e4554, "141552859");
-     BTM_TRACE_ERROR(
-         "btm_read_remote_ext_features_complete evt length too short. length=%d",
-         evt_len);
-     return;
-   }
    ++p;
    STREAM_TO_UINT16(handle, p);
    STREAM_TO_UINT8(page_num, p);
      return;
    }
  
-   if (page_num > max_page) {
-     android_errorWriteLog(0x534e4554, "141552859");
-     BTM_TRACE_ERROR("btm_read_remote_ext_features_complete num_page=%d invalid",
-                     page_num);
-     return;
-   }
    p_acl_cb = &btm_cb.acl_db[acl_idx];
  
    /* Copy the received features page */
@@@ -1196,7 -1194,7 +1180,7 @@@ void btm_establish_continue(tACL_CONN* 
    /* If anyone cares, tell him database changed */
    if (btm_cb.p_bl_changed_cb) {
      evt_data.event = BTM_BL_CONN_EVT;
 -    evt_data.conn.p_bda = p_acl_cb->remote_addr;
 +    evt_data.conn.p_bda = &p_acl_cb->remote_addr;
      evt_data.conn.p_bdn = p_acl_cb->remote_name;
      evt_data.conn.p_dc = p_acl_cb->remote_dc;
      evt_data.conn.p_features = p_acl_cb->peer_lmp_feature_pages[0];
@@@ -1233,8 -1231,7 +1217,8 @@@ void BTM_SetDefaultLinkSuperTout(uint16
   * Returns          status of the operation
   *
   ******************************************************************************/
 -tBTM_STATUS BTM_GetLinkSuperTout(BD_ADDR remote_bda, uint16_t* p_timeout) {
 +tBTM_STATUS BTM_GetLinkSuperTout(const RawAddress& remote_bda,
 +                                 uint16_t* p_timeout) {
    tACL_CONN* p = btm_bda_to_acl(remote_bda, BT_TRANSPORT_BR_EDR);
  
    BTM_TRACE_DEBUG("BTM_GetLinkSuperTout");
   * Returns          status of the operation
   *
   ******************************************************************************/
 -tBTM_STATUS BTM_SetLinkSuperTout(BD_ADDR remote_bda, uint16_t timeout) {
 +tBTM_STATUS BTM_SetLinkSuperTout(const RawAddress& remote_bda,
 +                                 uint16_t timeout) {
    tACL_CONN* p = btm_bda_to_acl(remote_bda, BT_TRANSPORT_BR_EDR);
  
    BTM_TRACE_DEBUG("BTM_SetLinkSuperTout");
        btsnd_hcic_write_link_super_tout(LOCAL_BR_EDR_CONTROLLER_ID,
                                         p->hci_handle, timeout);
        return (BTM_CMD_STARTED);
 -    } else
 +    } else {
        return (BTM_SUCCESS);
 +    }
    }
  
    /* If here, no BD Addr found */
   * Returns          true if connection is up, else false.
   *
   ******************************************************************************/
 -bool BTM_IsAclConnectionUp(BD_ADDR remote_bda, tBT_TRANSPORT transport) {
 +bool BTM_IsAclConnectionUp(const RawAddress& remote_bda,
 +                           tBT_TRANSPORT transport) {
    tACL_CONN* p;
  
 -  BTM_TRACE_API("BTM_IsAclConnectionUp: RemBdAddr: %02x%02x%02x%02x%02x%02x",
 -                remote_bda[0], remote_bda[1], remote_bda[2], remote_bda[3],
 -                remote_bda[4], remote_bda[5]);
 +  VLOG(2) << __func__ << " RemBdAddr: " << remote_bda;
  
    p = btm_bda_to_acl(remote_bda, transport);
    if (p != (tACL_CONN*)NULL) {
@@@ -1348,7 -1344,7 +1332,7 @@@ uint16_t btm_get_acl_disc_reason_code(v
   * Returns          the handle of the connection, or 0xFFFF if none.
   *
   ******************************************************************************/
 -uint16_t BTM_GetHCIConnHandle(const BD_ADDR remote_bda,
 +uint16_t BTM_GetHCIConnHandle(const RawAddress& remote_bda,
                                tBT_TRANSPORT transport) {
    tACL_CONN* p;
    BTM_TRACE_DEBUG("BTM_GetHCIConnHandle");
@@@ -1395,8 -1391,7 +1379,8 @@@ void btm_process_clk_off_comp_evt(uint1
  * Returns          void
  *
  *******************************************************************************/
 -void btm_blacklist_role_change_device(BD_ADDR bd_addr, uint8_t hci_status) {
 +void btm_blacklist_role_change_device(const RawAddress& bd_addr,
 +                                      uint8_t hci_status) {
    tACL_CONN* p = btm_bda_to_acl(bd_addr, BT_TRANSPORT_BR_EDR);
    tBTM_SEC_DEV_REC* p_dev_rec = btm_find_dev(bd_addr);
  
        ((p->switch_role_state == BTM_ACL_SWKEY_STATE_SWITCHING) ||
         (p->switch_role_state == BTM_ACL_SWKEY_STATE_IN_PROGRESS)) &&
        ((cod & cod_audio_device) == cod_audio_device) &&
 -      (!interop_match_addr(INTEROP_DYNAMIC_ROLE_SWITCH,
 -                           (const bt_bdaddr_t*)&bd_addr))) {
 +      (!interop_match_addr(INTEROP_DYNAMIC_ROLE_SWITCH, &bd_addr))) {
      p->switch_role_failed_attempts++;
      if (p->switch_role_failed_attempts == BTM_MAX_SW_ROLE_FAILED_ATTEMPTS) {
        BTM_TRACE_WARNING(
 -          "%s: Device %02x:%02x:%02x:%02x:%02x:%02x blacklisted for role "
 -          "switching - multiple role switch failed attempts: %u",
 -          __func__, bd_addr[0], bd_addr[1], bd_addr[2], bd_addr[3], bd_addr[4],
 -          bd_addr[5], p->switch_role_failed_attempts);
 -      interop_database_add(INTEROP_DYNAMIC_ROLE_SWITCH,
 -                           (const bt_bdaddr_t*)&bd_addr, 3);
 +          "%s: Device %s blacklisted for role switching - "
 +          "multiple role switch failed attempts: %u",
 +          __func__, bd_addr.ToString().c_str(), p->switch_role_failed_attempts);
 +      interop_database_add(INTEROP_DYNAMIC_ROLE_SWITCH, &bd_addr, 3);
      }
    }
  }
   * Returns          void
   *
   ******************************************************************************/
 -void btm_acl_role_changed(uint8_t hci_status, BD_ADDR bd_addr,
 +void btm_acl_role_changed(uint8_t hci_status, const RawAddress* bd_addr,
                            uint8_t new_role) {
 -  uint8_t* p_bda =
 -      (bd_addr) ? bd_addr : btm_cb.devcb.switch_role_ref_data.remote_bd_addr;
 -  tACL_CONN* p = btm_bda_to_acl(p_bda, BT_TRANSPORT_BR_EDR);
 +  const RawAddress* p_bda =
 +      (bd_addr) ? bd_addr : &btm_cb.devcb.switch_role_ref_data.remote_bd_addr;
 +  tACL_CONN* p = btm_bda_to_acl(*p_bda, BT_TRANSPORT_BR_EDR);
    tBTM_ROLE_SWITCH_CMPL* p_data = &btm_cb.devcb.switch_role_ref_data;
    tBTM_SEC_DEV_REC* p_dev_rec;
 -  tBTM_BL_ROLE_CHG_DATA evt;
  
    BTM_TRACE_DEBUG("btm_acl_role_changed");
    /* Ignore any stray events */
  
    if (hci_status == HCI_SUCCESS) {
      p_data->role = new_role;
 -    memcpy(p_data->remote_bd_addr, p_bda, BD_ADDR_LEN);
 +    p_data->remote_bd_addr = *p_bda;
  
      /* Update cached value */
      p->link_role = new_role;
  
    /* if role change event is registered, report it now */
    if (btm_cb.p_bl_changed_cb && (btm_cb.bl_evt_mask & BTM_BL_ROLE_CHG_MASK)) {
 +    tBTM_BL_ROLE_CHG_DATA evt;
      evt.event = BTM_BL_ROLE_CHG_EVT;
      evt.new_role = new_role;
      evt.p_bda = p_bda;
      evt.hci_status = hci_status;
 -    (*btm_cb.p_bl_changed_cb)((tBTM_BL_EVENT_DATA*)&evt);
 +    tBTM_BL_EVENT_DATA btm_bl_event_data;
 +    btm_bl_event_data.role_chg = evt;
 +    (*btm_cb.p_bl_changed_cb)(&btm_bl_event_data);
    }
  
    BTM_TRACE_DEBUG(
  
  #if (BTM_DISC_DURING_RS == TRUE)
    /* If a disconnect is pending, issue it now that role switch has completed */
 -  p_dev_rec = btm_find_dev(p_bda);
 +  p_dev_rec = btm_find_dev(*p_bda);
    if (p_dev_rec != NULL) {
      if (p_dev_rec->rs_disc_pending == BTM_SEC_DISC_PENDING) {
        BTM_TRACE_WARNING(
@@@ -1598,9 -1594,8 +1582,9 @@@ bool BTM_FreeSCN(uint8_t scn) 
    if (scn <= BTM_MAX_SCN) {
      btm_cb.btm_scn[scn - 1] = false;
      return (true);
 -  } else
 +  } else {
      return (false); /* Illegal SCN passed in */
 +  }
  }
  
  /*******************************************************************************
@@@ -1645,7 -1640,7 +1629,7 @@@ tBTM_STATUS btm_set_packet_types(tACL_C
   *                  connection, 0 if connection is not established
   *
   ******************************************************************************/
 -uint16_t btm_get_max_packet_size(BD_ADDR addr) {
 +uint16_t btm_get_max_packet_size(const RawAddress& addr) {
    tACL_CONN* p = btm_bda_to_acl(addr, BT_TRANSPORT_BR_EDR);
    uint16_t pkt_types = 0;
    uint16_t pkt_size = 0;
      pkt_types = p->pkt_types_mask;
    } else {
      /* Special case for when info for the local device is requested */
 -    if (memcmp(controller_get_interface()->get_address(), addr, BD_ADDR_LEN) ==
 -        0) {
 +    if (addr == *controller_get_interface()->get_address()) {
        pkt_types = btm_cb.btm_acl_pkt_types_supported;
      }
    }
   * Returns          If connected report peer device info
   *
   ******************************************************************************/
 -tBTM_STATUS BTM_ReadRemoteVersion(BD_ADDR addr, uint8_t* lmp_version,
 +tBTM_STATUS BTM_ReadRemoteVersion(const RawAddress& addr, uint8_t* lmp_version,
                                    uint16_t* manufacturer,
                                    uint16_t* lmp_sub_version) {
    tACL_CONN* p = btm_bda_to_acl(addr, BT_TRANSPORT_BR_EDR);
   * Returns          pointer to the remote supported features mask (8 bytes)
   *
   ******************************************************************************/
 -uint8_t* BTM_ReadRemoteFeatures(BD_ADDR addr) {
 +uint8_t* BTM_ReadRemoteFeatures(const RawAddress& addr) {
    tACL_CONN* p = btm_bda_to_acl(addr, BT_TRANSPORT_BR_EDR);
    BTM_TRACE_DEBUG("BTM_ReadRemoteFeatures");
    if (p == NULL) {
   *                  or NULL if bad page
   *
   ******************************************************************************/
 -uint8_t* BTM_ReadRemoteExtendedFeatures(BD_ADDR addr, uint8_t page_number) {
 +uint8_t* BTM_ReadRemoteExtendedFeatures(const RawAddress& addr,
 +                                        uint8_t page_number) {
    tACL_CONN* p = btm_bda_to_acl(addr, BT_TRANSPORT_BR_EDR);
    BTM_TRACE_DEBUG("BTM_ReadRemoteExtendedFeatures");
    if (p == NULL) {
   * Returns          number of features pages read from the remote device.
   *
   ******************************************************************************/
 -uint8_t BTM_ReadNumberRemoteFeaturesPages(BD_ADDR addr) {
 +uint8_t BTM_ReadNumberRemoteFeaturesPages(const RawAddress& addr) {
    tACL_CONN* p = btm_bda_to_acl(addr, BT_TRANSPORT_BR_EDR);
    BTM_TRACE_DEBUG("BTM_ReadNumberRemoteFeaturesPages");
    if (p == NULL) {
   * Returns          pointer to all features of the remote (24 bytes).
   *
   ******************************************************************************/
 -uint8_t* BTM_ReadAllRemoteFeatures(BD_ADDR addr) {
 +uint8_t* BTM_ReadAllRemoteFeatures(const RawAddress& addr) {
    tACL_CONN* p = btm_bda_to_acl(addr, BT_TRANSPORT_BR_EDR);
    BTM_TRACE_DEBUG("BTM_ReadAllRemoteFeatures");
    if (p == NULL) {
@@@ -1824,11 -1819,11 +1808,11 @@@ tBTM_STATUS BTM_RegBusyLevelNotif(tBTM_
   * Returns          status of the operation
   *
   ******************************************************************************/
 -tBTM_STATUS BTM_SetQoS(BD_ADDR bd, FLOW_SPEC* p_flow, tBTM_CMPL_CB* p_cb) {
 +tBTM_STATUS BTM_SetQoS(const RawAddress& bd, FLOW_SPEC* p_flow,
 +                       tBTM_CMPL_CB* p_cb) {
    tACL_CONN* p = &btm_cb.acl_db[0];
  
 -  BTM_TRACE_API("BTM_SetQoS: BdAddr: %02x%02x%02x%02x%02x%02x", bd[0], bd[1],
 -                bd[2], bd[3], bd[4], bd[5]);
 +  VLOG(2) << __func__ << " BdAddr: " << bd;
  
    /* If someone already waiting on the version, do not allow another */
    if (btm_cb.devcb.p_qos_setup_cmpl_cb) return (BTM_BUSY);
    p = btm_bda_to_acl(bd, BT_TRANSPORT_BR_EDR);
    if (p != NULL) {
      btm_cb.devcb.p_qos_setup_cmpl_cb = p_cb;
 -    alarm_set_on_queue(btm_cb.devcb.qos_setup_timer, BTM_DEV_REPLY_TIMEOUT_MS,
 -                       btm_qos_setup_timeout, NULL, btu_general_alarm_queue);
 +    alarm_set_on_mloop(btm_cb.devcb.qos_setup_timer, BTM_DEV_REPLY_TIMEOUT_MS,
 +                       btm_qos_setup_timeout, NULL);
  
      btsnd_hcic_qos_setup(p->hci_handle, p_flow->qos_flags, p_flow->service_type,
                           p_flow->token_rate, p_flow->peak_bandwidth,
@@@ -1909,16 -1904,19 +1893,16 @@@ void btm_qos_setup_complete(uint8_t sta
   * Description      This function is called to read the link policy settings.
   *                  The address of link policy results are returned in the
   *                  callback.
 - *                  (tBTM_RSSI_RESULTS)
 + *                  (tBTM_RSSI_RESULT)
   *
   * Returns          BTM_CMD_STARTED if successfully initiated or error code
   *
   ******************************************************************************/
 -tBTM_STATUS BTM_ReadRSSI(const BD_ADDR remote_bda, tBTM_CMPL_CB* p_cb) {
 +tBTM_STATUS BTM_ReadRSSI(const RawAddress& remote_bda, tBTM_CMPL_CB* p_cb) {
    tACL_CONN* p;
    tBT_TRANSPORT transport = BT_TRANSPORT_BR_EDR;
    tBT_DEVICE_TYPE dev_type;
    tBLE_ADDR_TYPE addr_type;
 -  BTM_TRACE_API("BTM_ReadRSSI: RemBdAddr: %02x%02x%02x%02x%02x%02x",
 -                remote_bda[0], remote_bda[1], remote_bda[2], remote_bda[3],
 -                remote_bda[4], remote_bda[5]);
  
    /* If someone already waiting on the version, do not allow another */
    if (btm_cb.devcb.p_rssi_cmpl_cb) return (BTM_BUSY);
    p = btm_bda_to_acl(remote_bda, transport);
    if (p != (tACL_CONN*)NULL) {
      btm_cb.devcb.p_rssi_cmpl_cb = p_cb;
 -    alarm_set_on_queue(btm_cb.devcb.read_rssi_timer, BTM_DEV_REPLY_TIMEOUT_MS,
 -                       btm_read_rssi_timeout, NULL, btu_general_alarm_queue);
 +    alarm_set_on_mloop(btm_cb.devcb.read_rssi_timer, BTM_DEV_REPLY_TIMEOUT_MS,
 +                       btm_read_rssi_timeout, NULL);
  
      btsnd_hcic_read_rssi(p->hci_handle);
      return (BTM_CMD_STARTED);
  
  /*******************************************************************************
   *
 + * Function         BTM_ReadFailedContactCounter
 + *
 + * Description      This function is called to read the failed contact counter.
 + *                  The result is returned in the callback.
 + *                  (tBTM_FAILED_CONTACT_COUNTER_RESULT)
 + *
 + * Returns          BTM_CMD_STARTED if successfully initiated or error code
 + *
 + ******************************************************************************/
 +tBTM_STATUS BTM_ReadFailedContactCounter(const RawAddress& remote_bda,
 +                                         tBTM_CMPL_CB* p_cb) {
 +  tACL_CONN* p;
 +  tBT_TRANSPORT transport = BT_TRANSPORT_BR_EDR;
 +  tBT_DEVICE_TYPE dev_type;
 +  tBLE_ADDR_TYPE addr_type;
 +
 +  /* If someone already waiting on the result, do not allow another */
 +  if (btm_cb.devcb.p_failed_contact_counter_cmpl_cb) return (BTM_BUSY);
 +
 +  BTM_ReadDevInfo(remote_bda, &dev_type, &addr_type);
 +  if (dev_type == BT_DEVICE_TYPE_BLE) transport = BT_TRANSPORT_LE;
 +
 +  p = btm_bda_to_acl(remote_bda, transport);
 +  if (p != (tACL_CONN*)NULL) {
 +    btm_cb.devcb.p_failed_contact_counter_cmpl_cb = p_cb;
 +    alarm_set_on_mloop(btm_cb.devcb.read_failed_contact_counter_timer,
 +                       BTM_DEV_REPLY_TIMEOUT_MS,
 +                       btm_read_failed_contact_counter_timeout, NULL);
 +
 +    btsnd_hcic_read_failed_contact_counter(p->hci_handle);
 +    return (BTM_CMD_STARTED);
 +  }
 +
 +  /* If here, no BD Addr found */
 +  return (BTM_UNKNOWN_ADDR);
 +}
 +
 +/*******************************************************************************
 + *
 + * Function         BTM_ReadAutomaticFlushTimeout
 + *
 + * Description      This function is called to read the automatic flush timeout.
 + *                  The result is returned in the callback.
 + *                  (tBTM_AUTOMATIC_FLUSH_TIMEOUT_RESULT)
 + *
 + * Returns          BTM_CMD_STARTED if successfully initiated or error code
 + *
 + ******************************************************************************/
 +tBTM_STATUS BTM_ReadAutomaticFlushTimeout(const RawAddress& remote_bda,
 +                                          tBTM_CMPL_CB* p_cb) {
 +  tACL_CONN* p;
 +  tBT_TRANSPORT transport = BT_TRANSPORT_BR_EDR;
 +  tBT_DEVICE_TYPE dev_type;
 +  tBLE_ADDR_TYPE addr_type;
 +
 +  /* If someone already waiting on the result, do not allow another */
 +  if (btm_cb.devcb.p_automatic_flush_timeout_cmpl_cb) return (BTM_BUSY);
 +
 +  BTM_ReadDevInfo(remote_bda, &dev_type, &addr_type);
 +  if (dev_type == BT_DEVICE_TYPE_BLE) transport = BT_TRANSPORT_LE;
 +
 +  p = btm_bda_to_acl(remote_bda, transport);
 +  if (!p) return BTM_UNKNOWN_ADDR;
 +
 +  btm_cb.devcb.p_automatic_flush_timeout_cmpl_cb = p_cb;
 +  alarm_set_on_mloop(btm_cb.devcb.read_automatic_flush_timeout_timer,
 +                     BTM_DEV_REPLY_TIMEOUT_MS,
 +                     btm_read_automatic_flush_timeout_timeout, nullptr);
 +
 +  btsnd_hcic_read_automatic_flush_timeout(p->hci_handle);
 +  return BTM_CMD_STARTED;
 +}
 +
 +/*******************************************************************************
 + *
   * Function         BTM_ReadLinkQuality
   *
   * Description      This function is called to read the link qulaity.
   *                  The value of the link quality is returned in the callback.
 - *                  (tBTM_LINK_QUALITY_RESULTS)
 + *                  (tBTM_LINK_QUALITY_RESULT)
   *
   * Returns          BTM_CMD_STARTED if successfully initiated or error code
   *
   ******************************************************************************/
 -tBTM_STATUS BTM_ReadLinkQuality(BD_ADDR remote_bda, tBTM_CMPL_CB* p_cb) {
 -  tACL_CONN* p;
 -
 -  BTM_TRACE_API("BTM_ReadLinkQuality: RemBdAddr: %02x%02x%02x%02x%02x%02x",
 -                remote_bda[0], remote_bda[1], remote_bda[2], remote_bda[3],
 -                remote_bda[4], remote_bda[5]);
 +tBTM_STATUS BTM_ReadLinkQuality(const RawAddress& remote_bda,
 +                                tBTM_CMPL_CB* p_cb) {
 +  VLOG(2) << __func__ << ": RemBdAddr: " << remote_bda;
  
    /* If someone already waiting on the version, do not allow another */
    if (btm_cb.devcb.p_link_qual_cmpl_cb) return (BTM_BUSY);
  
 -  p = btm_bda_to_acl(remote_bda, BT_TRANSPORT_BR_EDR);
 +  tACL_CONN* p = btm_bda_to_acl(remote_bda, BT_TRANSPORT_BR_EDR);
    if (p != (tACL_CONN*)NULL) {
      btm_cb.devcb.p_link_qual_cmpl_cb = p_cb;
 -    alarm_set_on_queue(btm_cb.devcb.read_link_quality_timer,
 +    alarm_set_on_mloop(btm_cb.devcb.read_link_quality_timer,
                         BTM_DEV_REPLY_TIMEOUT_MS, btm_read_link_quality_timeout,
 -                       NULL, btu_general_alarm_queue);
 +                       NULL);
  
      btsnd_hcic_get_link_quality(p->hci_handle);
      return (BTM_CMD_STARTED);
   * Description      This function is called to read the current
   *                  TX power of the connection. The tx power level results
   *                  are returned in the callback.
 - *                  (tBTM_RSSI_RESULTS)
 + *                  (tBTM_RSSI_RESULT)
   *
   * Returns          BTM_CMD_STARTED if successfully initiated or error code
   *
   ******************************************************************************/
 -tBTM_STATUS BTM_ReadTxPower(BD_ADDR remote_bda, tBT_TRANSPORT transport,
 -                            tBTM_CMPL_CB* p_cb) {
 +tBTM_STATUS BTM_ReadTxPower(const RawAddress& remote_bda,
 +                            tBT_TRANSPORT transport, tBTM_CMPL_CB* p_cb) {
    tACL_CONN* p;
  #define BTM_READ_RSSI_TYPE_CUR 0x00
  #define BTM_READ_RSSI_TYPE_MAX 0X01
  
 -  BTM_TRACE_API("BTM_ReadTxPower: RemBdAddr: %02x%02x%02x%02x%02x%02x",
 -                remote_bda[0], remote_bda[1], remote_bda[2], remote_bda[3],
 -                remote_bda[4], remote_bda[5]);
 +  VLOG(2) << __func__ << ": RemBdAddr: " << remote_bda;
  
    /* If someone already waiting on the version, do not allow another */
    if (btm_cb.devcb.p_tx_power_cmpl_cb) return (BTM_BUSY);
    p = btm_bda_to_acl(remote_bda, transport);
    if (p != (tACL_CONN*)NULL) {
      btm_cb.devcb.p_tx_power_cmpl_cb = p_cb;
 -    alarm_set_on_queue(btm_cb.devcb.read_tx_power_timer,
 +    alarm_set_on_mloop(btm_cb.devcb.read_tx_power_timer,
                         BTM_DEV_REPLY_TIMEOUT_MS, btm_read_tx_power_timeout,
 -                       NULL, btu_general_alarm_queue);
 +                       NULL);
  
      if (p->transport == BT_TRANSPORT_LE) {
 -      memcpy(btm_cb.devcb.read_tx_pwr_addr, remote_bda, BD_ADDR_LEN);
 +      btm_cb.devcb.read_tx_pwr_addr = remote_bda;
        btsnd_hcic_ble_read_adv_chnl_tx_power();
      } else {
        btsnd_hcic_read_tx_power(p->hci_handle, BTM_READ_RSSI_TYPE_CUR);
@@@ -2119,8 -2047,10 +2103,8 @@@ void btm_read_tx_power_timeout(UNUSED_A
   ******************************************************************************/
  void btm_read_tx_power_complete(uint8_t* p, bool is_ble) {
    tBTM_CMPL_CB* p_cb = btm_cb.devcb.p_tx_power_cmpl_cb;
 -  tBTM_TX_POWER_RESULTS results;
 -  uint16_t handle;
 +  tBTM_TX_POWER_RESULT result;
    tACL_CONN* p_acl_cb = &btm_cb.acl_db[0];
 -  uint16_t index;
  
    BTM_TRACE_DEBUG("%s", __func__);
    alarm_cancel(btm_cb.devcb.read_tx_power_timer);
  
    /* If there was a registered callback, call it */
    if (p_cb) {
 -    STREAM_TO_UINT8(results.hci_status, p);
 +    STREAM_TO_UINT8(result.hci_status, p);
  
 -    if (results.hci_status == HCI_SUCCESS) {
 -      results.status = BTM_SUCCESS;
 +    if (result.hci_status == HCI_SUCCESS) {
 +      result.status = BTM_SUCCESS;
  
        if (!is_ble) {
 +        uint16_t handle;
          STREAM_TO_UINT16(handle, p);
 -        STREAM_TO_UINT8(results.tx_power, p);
 +        STREAM_TO_UINT8(result.tx_power, p);
  
          /* Search through the list of active channels for the correct BD Addr */
 -        for (index = 0; index < MAX_L2CAP_LINKS; index++, p_acl_cb++) {
 +        for (uint16_t index = 0; index < MAX_L2CAP_LINKS; index++, p_acl_cb++) {
            if ((p_acl_cb->in_use) && (handle == p_acl_cb->hci_handle)) {
 -            memcpy(results.rem_bda, p_acl_cb->remote_addr, BD_ADDR_LEN);
 +            result.rem_bda = p_acl_cb->remote_addr;
              break;
            }
          }
        } else {
 -        STREAM_TO_UINT8(results.tx_power, p);
 -        memcpy(results.rem_bda, btm_cb.devcb.read_tx_pwr_addr, BD_ADDR_LEN);
 +        STREAM_TO_UINT8(result.tx_power, p);
 +        result.rem_bda = btm_cb.devcb.read_tx_pwr_addr;
        }
        BTM_TRACE_DEBUG("BTM TX power Complete: tx_power %d, hci status 0x%02x",
 -                      results.tx_power, results.hci_status);
 -    } else
 -      results.status = BTM_ERR_PROCESSING;
 +                      result.tx_power, result.hci_status);
 +    } else {
 +      result.status = BTM_ERR_PROCESSING;
 +    }
  
 -    (*p_cb)(&results);
 +    (*p_cb)(&result);
    }
  }
  
   *
   ******************************************************************************/
  void btm_read_rssi_timeout(UNUSED_ATTR void* data) {
 -  tBTM_RSSI_RESULTS  results;
 +  tBTM_RSSI_RESULT result;
    tBTM_CMPL_CB* p_cb = btm_cb.devcb.p_rssi_cmpl_cb;
    btm_cb.devcb.p_rssi_cmpl_cb = NULL;
 -  results.status = BTM_DEVICE_TIMEOUT;
 -  if (p_cb)
 -      (*p_cb)(&results);
 +  result.status = BTM_DEVICE_TIMEOUT;
 +  if (p_cb) (*p_cb)(&result);
  }
  
  /*******************************************************************************
   ******************************************************************************/
  void btm_read_rssi_complete(uint8_t* p) {
    tBTM_CMPL_CB* p_cb = btm_cb.devcb.p_rssi_cmpl_cb;
 -  tBTM_RSSI_RESULTS results;
 -  uint16_t handle;
 +  tBTM_RSSI_RESULT result;
    tACL_CONN* p_acl_cb = &btm_cb.acl_db[0];
 -  uint16_t index;
  
    BTM_TRACE_DEBUG("%s", __func__);
    alarm_cancel(btm_cb.devcb.read_rssi_timer);
  
    /* If there was a registered callback, call it */
    if (p_cb) {
 -    STREAM_TO_UINT8(results.hci_status, p);
 +    STREAM_TO_UINT8(result.hci_status, p);
  
 -    if (results.hci_status == HCI_SUCCESS) {
 -      results.status = BTM_SUCCESS;
 +    if (result.hci_status == HCI_SUCCESS) {
 +      uint16_t handle;
 +      result.status = BTM_SUCCESS;
  
        STREAM_TO_UINT16(handle, p);
  
 -      STREAM_TO_UINT8(results.rssi, p);
 +      STREAM_TO_UINT8(result.rssi, p);
        BTM_TRACE_DEBUG("BTM RSSI Complete: rssi %d, hci status 0x%02x",
 -                      results.rssi, results.hci_status);
 +                      result.rssi, result.hci_status);
 +
 +      /* Search through the list of active channels for the correct BD Addr */
 +      for (uint16_t index = 0; index < MAX_L2CAP_LINKS; index++, p_acl_cb++) {
 +        if ((p_acl_cb->in_use) && (handle == p_acl_cb->hci_handle)) {
 +          result.rem_bda = p_acl_cb->remote_addr;
 +          break;
 +        }
 +      }
 +    } else {
 +      result.status = BTM_ERR_PROCESSING;
 +    }
 +
 +    (*p_cb)(&result);
 +  }
 +}
 +
 +/*******************************************************************************
 + *
 + * Function         btm_read_failed_contact_counter_timeout
 + *
 + * Description      Callback when reading the failed contact counter times out.
 + *
 + * Returns          void
 + *
 + ******************************************************************************/
 +void btm_read_failed_contact_counter_timeout(UNUSED_ATTR void* data) {
 +  tBTM_FAILED_CONTACT_COUNTER_RESULT result;
 +  tBTM_CMPL_CB* p_cb = btm_cb.devcb.p_failed_contact_counter_cmpl_cb;
 +  btm_cb.devcb.p_failed_contact_counter_cmpl_cb = NULL;
 +  result.status = BTM_DEVICE_TIMEOUT;
 +  if (p_cb) (*p_cb)(&result);
 +}
 +
 +/*******************************************************************************
 + *
 + * Function         btm_read_failed_contact_counter_complete
 + *
 + * Description      This function is called when the command complete message
 + *                  is received from the HCI for the read failed contact
 + *                  counter request.
 + *
 + * Returns          void
 + *
 + ******************************************************************************/
 +void btm_read_failed_contact_counter_complete(uint8_t* p) {
 +  tBTM_CMPL_CB* p_cb = btm_cb.devcb.p_failed_contact_counter_cmpl_cb;
 +  tBTM_FAILED_CONTACT_COUNTER_RESULT result;
 +  tACL_CONN* p_acl_cb = &btm_cb.acl_db[0];
 +
 +  BTM_TRACE_DEBUG("%s", __func__);
 +  alarm_cancel(btm_cb.devcb.read_failed_contact_counter_timer);
 +  btm_cb.devcb.p_failed_contact_counter_cmpl_cb = NULL;
 +
 +  /* If there was a registered callback, call it */
 +  if (p_cb) {
 +    uint16_t handle;
 +    STREAM_TO_UINT8(result.hci_status, p);
 +
 +    if (result.hci_status == HCI_SUCCESS) {
 +      result.status = BTM_SUCCESS;
 +
 +      STREAM_TO_UINT16(handle, p);
 +
 +      STREAM_TO_UINT16(result.failed_contact_counter, p);
 +      BTM_TRACE_DEBUG(
 +          "BTM Failed Contact Counter Complete: counter %u, hci status 0x%02x",
 +          result.failed_contact_counter, result.hci_status);
  
        /* Search through the list of active channels for the correct BD Addr */
 -      for (index = 0; index < MAX_L2CAP_LINKS; index++, p_acl_cb++) {
 +      for (uint16_t index = 0; index < MAX_L2CAP_LINKS; index++, p_acl_cb++) {
          if ((p_acl_cb->in_use) && (handle == p_acl_cb->hci_handle)) {
 -          memcpy(results.rem_bda, p_acl_cb->remote_addr, BD_ADDR_LEN);
 +          result.rem_bda = p_acl_cb->remote_addr;
            break;
          }
        }
 -    } else
 -      results.status = BTM_ERR_PROCESSING;
 +    } else {
 +      result.status = BTM_ERR_PROCESSING;
 +    }
  
 -    (*p_cb)(&results);
 +    (*p_cb)(&result);
 +  }
 +}
 +
 +/*******************************************************************************
 + *
 + * Function         btm_read_automatic_flush_timeout_timeout
 + *
 + * Description      Callback when reading the automatic flush timeout times out.
 + *
 + * Returns          void
 + *
 + ******************************************************************************/
 +void btm_read_automatic_flush_timeout_timeout(UNUSED_ATTR void* data) {
 +  tBTM_AUTOMATIC_FLUSH_TIMEOUT_RESULT result;
 +  tBTM_CMPL_CB* p_cb = btm_cb.devcb.p_automatic_flush_timeout_cmpl_cb;
 +  btm_cb.devcb.p_automatic_flush_timeout_cmpl_cb = nullptr;
 +  result.status = BTM_DEVICE_TIMEOUT;
 +  if (p_cb) (*p_cb)(&result);
 +}
 +
 +/*******************************************************************************
 + *
 + * Function         btm_read_automatic_flush_timeout_complete
 + *
 + * Description      This function is called when the command complete message
 + *                  is received from the HCI for the read automatic flush
 + *                  timeout request.
 + *
 + * Returns          void
 + *
 + ******************************************************************************/
 +void btm_read_automatic_flush_timeout_complete(uint8_t* p) {
 +  tBTM_CMPL_CB* p_cb = btm_cb.devcb.p_automatic_flush_timeout_cmpl_cb;
 +  tBTM_AUTOMATIC_FLUSH_TIMEOUT_RESULT result;
 +  tACL_CONN* p_acl_cb = &btm_cb.acl_db[0];
 +
 +  BTM_TRACE_DEBUG("%s", __func__);
 +  alarm_cancel(btm_cb.devcb.read_automatic_flush_timeout_timer);
 +  btm_cb.devcb.p_automatic_flush_timeout_cmpl_cb = nullptr;
 +
 +  /* If there was a registered callback, call it */
 +  if (p_cb) {
 +    uint16_t handle;
 +    STREAM_TO_UINT8(result.hci_status, p);
 +
 +    if (result.hci_status == HCI_SUCCESS) {
 +      result.status = BTM_SUCCESS;
 +
 +      STREAM_TO_UINT16(handle, p);
 +
 +      STREAM_TO_UINT16(result.automatic_flush_timeout, p);
 +      BTM_TRACE_DEBUG(
 +          "BTM Automatic Flush Timeout Complete: timeout %u, hci status 0x%02x",
 +          result.automatic_flush_timeout, result.hci_status);
 +
 +      /* Search through the list of active channels for the correct BD Addr */
 +      for (uint16_t index = 0; index < MAX_L2CAP_LINKS; index++, p_acl_cb++) {
 +        if ((p_acl_cb->in_use) && (handle == p_acl_cb->hci_handle)) {
 +          result.rem_bda = p_acl_cb->remote_addr;
 +          break;
 +        }
 +      }
 +    } else {
 +      result.status = BTM_ERR_PROCESSING;
 +    }
 +
 +    (*p_cb)(&result);
    }
  }
  
@@@ -2385,8 -2180,10 +2369,8 @@@ void btm_read_link_quality_timeout(UNUS
   ******************************************************************************/
  void btm_read_link_quality_complete(uint8_t* p) {
    tBTM_CMPL_CB* p_cb = btm_cb.devcb.p_link_qual_cmpl_cb;
 -  tBTM_LINK_QUALITY_RESULTS results;
 -  uint16_t handle;
 +  tBTM_LINK_QUALITY_RESULT result;
    tACL_CONN* p_acl_cb = &btm_cb.acl_db[0];
 -  uint16_t index;
  
    BTM_TRACE_DEBUG("%s", __func__);
    alarm_cancel(btm_cb.devcb.read_link_quality_timer);
  
    /* If there was a registered callback, call it */
    if (p_cb) {
 -    STREAM_TO_UINT8(results.hci_status, p);
 +    STREAM_TO_UINT8(result.hci_status, p);
  
 -    if (results.hci_status == HCI_SUCCESS) {
 -      results.status = BTM_SUCCESS;
 +    if (result.hci_status == HCI_SUCCESS) {
 +      uint16_t handle;
 +      result.status = BTM_SUCCESS;
  
        STREAM_TO_UINT16(handle, p);
  
 -      STREAM_TO_UINT8(results.link_quality, p);
 +      STREAM_TO_UINT8(result.link_quality, p);
        BTM_TRACE_DEBUG(
            "BTM Link Quality Complete: Link Quality %d, hci status 0x%02x",
 -          results.link_quality, results.hci_status);
 +          result.link_quality, result.hci_status);
  
        /* Search through the list of active channels for the correct BD Addr */
 -      for (index = 0; index < MAX_L2CAP_LINKS; index++, p_acl_cb++) {
 +      for (uint16_t index = 0; index < MAX_L2CAP_LINKS; index++, p_acl_cb++) {
          if ((p_acl_cb->in_use) && (handle == p_acl_cb->hci_handle)) {
 -          memcpy(results.rem_bda, p_acl_cb->remote_addr, BD_ADDR_LEN);
 +          result.rem_bda = p_acl_cb->remote_addr;
            break;
          }
        }
 -    } else
 -      results.status = BTM_ERR_PROCESSING;
 +    } else {
 +      result.status = BTM_ERR_PROCESSING;
 +    }
  
 -    (*p_cb)(&results);
 +    (*p_cb)(&result);
    }
  }
  
   *                  BTM_NO_RESOURCES.
   *
   ******************************************************************************/
 -tBTM_STATUS btm_remove_acl(BD_ADDR bd_addr, tBT_TRANSPORT transport) {
 +tBTM_STATUS btm_remove_acl(const RawAddress& bd_addr, tBT_TRANSPORT transport) {
    uint16_t hci_handle = BTM_GetHCIConnHandle(bd_addr, transport);
    tBTM_STATUS status = BTM_SUCCESS;
  
      if (hci_handle != 0xFFFF && p_dev_rec &&
          p_dev_rec->sec_state != BTM_SEC_STATE_DISCONNECTING) {
        btsnd_hcic_disconnect(hci_handle, HCI_ERR_PEER_USER);
 -    } else
 +    } else {
        status = BTM_UNKNOWN_ADDR;
 +    }
    }
  
    return status;
@@@ -2526,6 -2320,7 +2510,6 @@@ void btm_acl_resubmit_page(void) 
    tBTM_SEC_DEV_REC* p_dev_rec;
    BT_HDR* p_buf;
    uint8_t* pp;
 -  BD_ADDR bda;
    BTM_TRACE_DEBUG("btm_acl_resubmit_page");
    /* If there were other page request schedule can start the next one */
    p_buf = (BT_HDR*)fixed_queue_try_dequeue(btm_cb.page_queue);
       * for both create_conn and rmt_name */
      pp = (uint8_t*)(p_buf + 1) + p_buf->offset + 3;
  
 +    RawAddress bda;
      STREAM_TO_BDADDR(bda, pp);
  
      p_dev_rec = btm_find_or_alloc_dev(bda);
  
 -    memcpy(btm_cb.connecting_bda, p_dev_rec->bd_addr, BD_ADDR_LEN);
 +    btm_cb.connecting_bda = p_dev_rec->bd_addr;
      memcpy(btm_cb.connecting_dc, p_dev_rec->dev_class, DEV_CLASS_LEN);
  
      btu_hcif_send_cmd(LOCAL_BR_EDR_CONTROLLER_ID, p_buf);
 -  } else
 +  } else {
      btm_cb.paging = false;
 +  }
  }
  
  /*******************************************************************************
@@@ -2573,23 -2366,30 +2557,23 @@@ void btm_acl_reset_paging(void) 
   * Description      send a paging command or queue it in btm_cb
   *
   ******************************************************************************/
 -void btm_acl_paging(BT_HDR* p, BD_ADDR bda) {
 +void btm_acl_paging(BT_HDR* p, const RawAddress& bda) {
    tBTM_SEC_DEV_REC* p_dev_rec;
  
 -  BTM_TRACE_DEBUG("btm_acl_paging discing:%d, paging:%d BDA: %06x%06x",
 -                  btm_cb.discing, btm_cb.paging,
 -                  (bda[0] << 16) + (bda[1] << 8) + bda[2],
 -                  (bda[3] << 16) + (bda[4] << 8) + bda[5]);
 +  VLOG(2) << __func__ << ":" << btm_cb.discing << " , paging:" << btm_cb.paging
 +          << " BDA: " << bda;
 +
    if (btm_cb.discing) {
      btm_cb.paging = true;
      fixed_queue_enqueue(btm_cb.page_queue, p);
    } else {
      if (!BTM_ACL_IS_CONNECTED(bda)) {
 -      BTM_TRACE_DEBUG(
 -          "connecting_bda: %06x%06x",
 -          (btm_cb.connecting_bda[0] << 16) + (btm_cb.connecting_bda[1] << 8) +
 -              btm_cb.connecting_bda[2],
 -          (btm_cb.connecting_bda[3] << 16) + (btm_cb.connecting_bda[4] << 8) +
 -              btm_cb.connecting_bda[5]);
 -      if (btm_cb.paging &&
 -          memcmp(bda, btm_cb.connecting_bda, BD_ADDR_LEN) != 0) {
 +      VLOG(1) << "connecting_bda: " << btm_cb.connecting_bda;
 +      if (btm_cb.paging && bda != btm_cb.connecting_bda) {
          fixed_queue_enqueue(btm_cb.page_queue, p);
        } else {
          p_dev_rec = btm_find_or_alloc_dev(bda);
 -        memcpy(btm_cb.connecting_bda, p_dev_rec->bd_addr, BD_ADDR_LEN);
 +        btm_cb.connecting_bda = p_dev_rec->bd_addr;
          memcpy(btm_cb.connecting_dc, p_dev_rec->dev_class, DEV_CLASS_LEN);
  
          btu_hcif_send_cmd(LOCAL_BR_EDR_CONTROLLER_ID, p);
   *                  false if no one needs the notification.
   *
   ******************************************************************************/
 -bool btm_acl_notif_conn_collision(BD_ADDR bda) {
 -  tBTM_BL_EVENT_DATA evt_data;
 -
 +bool btm_acl_notif_conn_collision(const RawAddress& bda) {
    /* Report possible collision to the upper layer. */
    if (btm_cb.p_bl_changed_cb) {
 -    BTM_TRACE_DEBUG(
 -        "btm_acl_notif_conn_collision: RemBdAddr: %02x%02x%02x%02x%02x%02x",
 -        bda[0], bda[1], bda[2], bda[3], bda[4], bda[5]);
 +    VLOG(1) << __func__ << " RemBdAddr: " << bda;
  
 +    tBTM_BL_EVENT_DATA evt_data;
      evt_data.event = BTM_BL_COLLISION_EVT;
 -    evt_data.conn.p_bda = bda;
 +    evt_data.conn.p_bda = &bda;
      evt_data.conn.transport = BT_TRANSPORT_BR_EDR;
      evt_data.conn.handle = BTM_INVALID_HCI_HANDLE;
      (*btm_cb.p_bl_changed_cb)(&evt_data);
      return true;
 -  } else
 +  } else {
      return false;
 +  }
  }
  
  /*******************************************************************************
diff --combined stack/btm/btm_int.h
@@@ -51,17 -51,17 +51,17 @@@ extern void btm_init(void)
  /* Internal functions provided by btm_inq.cc
   ******************************************
  */
 -extern tBTM_STATUS btm_initiate_rem_name(BD_ADDR remote_bda, uint8_t origin,
 -                                         period_ms_t timeout_ms,
 +extern tBTM_STATUS btm_initiate_rem_name(const RawAddress& remote_bda,
 +                                         uint8_t origin, period_ms_t timeout_ms,
                                           tBTM_CMPL_CB* p_cb);
  
 -extern void btm_process_remote_name(BD_ADDR bda, BD_NAME name, uint16_t evt_len,
 -                                    uint8_t hci_status);
 +extern void btm_process_remote_name(const RawAddress* bda, BD_NAME name,
 +                                    uint16_t evt_len, uint8_t hci_status);
  extern void btm_inq_rmt_name_failed(void);
  extern void btm_inq_remote_name_timer_timeout(void* data);
  
  /* Inquiry related functions */
 -extern void btm_clr_inq_db(BD_ADDR p_bda);
 +extern void btm_clr_inq_db(const RawAddress* p_bda);
  extern void btm_inq_db_init(void);
  extern void btm_process_inq_results(uint8_t* p, uint8_t inq_res_mode);
  extern void btm_process_inq_complete(uint8_t status, uint8_t mode);
@@@ -69,17 -69,19 +69,17 @@@ extern void btm_process_cancel_complete
  extern void btm_event_filter_complete(uint8_t* p);
  extern void btm_inq_stop_on_ssp(void);
  extern void btm_inq_clear_ssp(void);
 -extern tINQ_DB_ENT* btm_inq_db_find(const BD_ADDR p_bda);
 -extern bool btm_inq_find_bdaddr(BD_ADDR p_bda);
 -
 -extern bool btm_lookup_eir(BD_ADDR_PTR p_rem_addr);
 +extern tINQ_DB_ENT* btm_inq_db_find(const RawAddress& p_bda);
 +extern bool btm_inq_find_bdaddr(const RawAddress& p_bda);
  
  /* Internal functions provided by btm_acl.cc
   *******************************************
  */
  extern void btm_acl_init(void);
 -extern void btm_acl_created(BD_ADDR bda, DEV_CLASS dc, BD_NAME bdn,
 +extern void btm_acl_created(const RawAddress& bda, DEV_CLASS dc, BD_NAME bdn,
                              uint16_t hci_handle, uint8_t link_role,
                              tBT_TRANSPORT transport);
 -extern void btm_acl_removed(BD_ADDR bda, tBT_TRANSPORT transport);
 +extern void btm_acl_removed(const RawAddress& bda, tBT_TRANSPORT transport);
  extern void btm_acl_device_down(void);
  extern void btm_acl_update_busy_level(tBTM_BLI_EVENT event);
  
@@@ -92,12 -94,6 +92,12 @@@ extern void btm_read_link_policy_comple
  extern void btm_read_rssi_timeout(void* data);
  extern void btm_read_rssi_complete(uint8_t* p);
  
 +extern void btm_read_failed_contact_counter_timeout(void* data);
 +extern void btm_read_failed_contact_counter_complete(uint8_t* p);
 +
 +extern void btm_read_automatic_flush_timeout_timeout(void* data);
 +extern void btm_read_automatic_flush_timeout_complete(uint8_t* p);
 +
  extern void btm_read_tx_power_timeout(void* data);
  extern void btm_read_tx_power_complete(uint8_t* p, bool is_ble);
  
@@@ -107,17 -103,16 +107,17 @@@ extern void btm_read_link_quality_compl
  extern tBTM_STATUS btm_set_packet_types(tACL_CONN* p, uint16_t pkt_types);
  extern void btm_process_clk_off_comp_evt(uint16_t hci_handle,
                                           uint16_t clock_offset);
 -extern void btm_acl_role_changed(uint8_t hci_status, BD_ADDR bd_addr,
 +extern void btm_acl_role_changed(uint8_t hci_status, const RawAddress* bd_addr,
                                   uint8_t new_role);
 -extern void btm_blacklist_role_change_device(BD_ADDR bd_addr,
 +extern void btm_blacklist_role_change_device(const RawAddress& bd_addr,
                                               uint8_t hci_status);
  extern void btm_acl_encrypt_change(uint16_t handle, uint8_t status,
                                     uint8_t encr_enable);
  extern uint16_t btm_get_acl_disc_reason_code(void);
 -extern tBTM_STATUS btm_remove_acl(BD_ADDR bd_addr, tBT_TRANSPORT transport);
 +extern tBTM_STATUS btm_remove_acl(const RawAddress& bd_addr,
 +                                  tBT_TRANSPORT transport);
  extern void btm_read_remote_features_complete(uint8_t* p);
- extern void btm_read_remote_ext_features_complete(uint8_t* p, uint8_t evt_len);
+ extern void btm_read_remote_ext_features_complete(uint8_t* p);
  extern void btm_read_remote_ext_features_failed(uint8_t status,
                                                  uint16_t handle);
  extern void btm_read_remote_version_complete(uint8_t* p);
@@@ -126,12 -121,10 +126,12 @@@ extern void btm_establish_continue(tACL
  extern void btm_acl_chk_peer_pkt_type_support(tACL_CONN* p,
                                                uint16_t* p_pkt_type);
  /* Read maximum data packet that can be sent over current connection */
 -extern uint16_t btm_get_max_packet_size(BD_ADDR addr);
 -extern tACL_CONN* btm_bda_to_acl(const BD_ADDR bda, tBT_TRANSPORT transport);
 -extern bool btm_acl_notif_conn_collision(BD_ADDR bda);
 -extern void btm_acl_update_conn_addr(uint8_t conn_handle, BD_ADDR address);
 +extern uint16_t btm_get_max_packet_size(const RawAddress& addr);
 +extern tACL_CONN* btm_bda_to_acl(const RawAddress& bda,
 +                                 tBT_TRANSPORT transport);
 +extern bool btm_acl_notif_conn_collision(const RawAddress& bda);
 +extern void btm_acl_update_conn_addr(uint16_t conn_handle,
 +                                     const RawAddress& address);
  
  extern void btm_pm_reset(void);
  extern void btm_pm_sm_alloc(uint8_t ind);
@@@ -139,7 -132,7 +139,7 @@@ extern void btm_pm_proc_cmd_status(uint
  extern void btm_pm_proc_mode_change(uint8_t hci_status, uint16_t hci_handle,
                                      uint8_t mode, uint16_t interval);
  extern void btm_pm_proc_ssr_evt(uint8_t* p, uint16_t evt_len);
 -extern tBTM_STATUS btm_read_power_mode_state(BD_ADDR remote_bda,
 +extern tBTM_STATUS btm_read_power_mode_state(const RawAddress& remote_bda,
                                               tBTM_PM_STATE* pmState);
  #if (BTM_SCO_INCLUDED == TRUE)
  extern void btm_sco_chk_pend_unpark(uint8_t hci_status, uint16_t hci_handle);
@@@ -155,19 -148,19 +155,19 @@@ extern void btm_qos_setup_complete(uint
   *******************************************
  */
  extern void btm_sco_init(void);
 -extern void btm_sco_connected(uint8_t hci_status, BD_ADDR bda,
 +extern void btm_sco_connected(uint8_t hci_status, const RawAddress* bda,
                                uint16_t hci_handle, tBTM_ESCO_DATA* p_esco_data);
  extern void btm_esco_proc_conn_chg(uint8_t status, uint16_t handle,
                                     uint8_t tx_interval, uint8_t retrans_window,
                                     uint16_t rx_pkt_len, uint16_t tx_pkt_len);
 -extern void btm_sco_conn_req(BD_ADDR bda, DEV_CLASS dev_class,
 +extern void btm_sco_conn_req(const RawAddress& bda, DEV_CLASS dev_class,
                               uint8_t link_type);
  extern void btm_sco_removed(uint16_t hci_handle, uint8_t reason);
 -extern void btm_sco_acl_removed(BD_ADDR bda);
 +extern void btm_sco_acl_removed(const RawAddress* bda);
  extern void btm_route_sco_data(BT_HDR* p_msg);
  extern bool btm_is_sco_active(uint16_t handle);
 -extern void btm_remove_sco_links(BD_ADDR bda);
 -extern bool btm_is_sco_active_by_bdaddr(BD_ADDR remote_bda);
 +extern void btm_remove_sco_links(const RawAddress& bda);
 +extern bool btm_is_sco_active_by_bdaddr(const RawAddress& remote_bda);
  
  extern void btm_read_def_esco_mode(enh_esco_params_t* p_parms);
  extern uint16_t btm_find_scb_by_handle(uint16_t handle);
@@@ -184,8 -177,7 +184,8 @@@ extern void btm_ble_add_2_white_list_co
  extern void btm_ble_remove_from_white_list_complete(uint8_t* p,
                                                      uint16_t evt_len);
  extern void btm_ble_clear_white_list_complete(uint8_t* p, uint16_t evt_len);
 -extern bool btm_ble_addr_resolvable(BD_ADDR rpa, tBTM_SEC_DEV_REC* p_dev_rec);
 +extern bool btm_ble_addr_resolvable(const RawAddress& rpa,
 +                                    tBTM_SEC_DEV_REC* p_dev_rec);
  extern tBTM_STATUS btm_ble_read_resolving_list_entry(
      tBTM_SEC_DEV_REC* p_dev_rec);
  extern bool btm_ble_resolving_list_load_dev(tBTM_SEC_DEV_REC* p_dev_rec);
@@@ -202,34 -194,30 +202,34 @@@ extern void btm_report_device_status(tB
  /* Internal functions provided by btm_dev.cc
   *********************************************
  */
 -extern bool btm_dev_support_switch(BD_ADDR bd_addr);
 +extern bool btm_dev_support_switch(const RawAddress& bd_addr);
  
  extern tBTM_SEC_DEV_REC* btm_sec_allocate_dev_rec(void);
 -extern tBTM_SEC_DEV_REC* btm_sec_alloc_dev(BD_ADDR bd_addr);
 +extern tBTM_SEC_DEV_REC* btm_sec_alloc_dev(const RawAddress& bd_addr);
  extern void btm_sec_free_dev(tBTM_SEC_DEV_REC* p_dev_rec);
 -extern tBTM_SEC_DEV_REC* btm_find_dev(const BD_ADDR bd_addr);
 -extern tBTM_SEC_DEV_REC* btm_find_or_alloc_dev(BD_ADDR bd_addr);
 +extern tBTM_SEC_DEV_REC* btm_find_dev(const RawAddress& bd_addr);
 +extern tBTM_SEC_DEV_REC* btm_find_or_alloc_dev(const RawAddress& bd_addr);
  extern tBTM_SEC_DEV_REC* btm_find_dev_by_handle(uint16_t handle);
 -extern tBTM_BOND_TYPE btm_get_bond_type_dev(BD_ADDR bd_addr);
 -extern bool btm_set_bond_type_dev(BD_ADDR bd_addr, tBTM_BOND_TYPE bond_type);
 +extern tBTM_BOND_TYPE btm_get_bond_type_dev(const RawAddress& bd_addr);
 +extern bool btm_set_bond_type_dev(const RawAddress& bd_addr,
 +                                  tBTM_BOND_TYPE bond_type);
  
  /* Internal functions provided by btm_sec.cc
   *********************************************
  */
 -extern bool btm_dev_support_switch(BD_ADDR bd_addr);
 -extern tBTM_STATUS btm_sec_l2cap_access_req(BD_ADDR bd_addr, uint16_t psm,
 -                                            uint16_t handle,
 +extern bool btm_dev_support_switch(const RawAddress& bd_addr);
 +extern tBTM_STATUS btm_sec_l2cap_access_req(const RawAddress& bd_addr,
 +                                            uint16_t psm, uint16_t handle,
                                              CONNECTION_TYPE conn_type,
                                              tBTM_SEC_CALLBACK* p_callback,
                                              void* p_ref_data);
 -extern tBTM_STATUS btm_sec_mx_access_request(
 -    BD_ADDR bd_addr, uint16_t psm, bool is_originator, uint32_t mx_proto_id,
 -    uint32_t mx_chan_id, tBTM_SEC_CALLBACK* p_callback, void* p_ref_data);
 -extern void btm_sec_conn_req(uint8_t* bda, uint8_t* dc);
 +extern tBTM_STATUS btm_sec_mx_access_request(const RawAddress& bd_addr,
 +                                             uint16_t psm, bool is_originator,
 +                                             uint32_t mx_proto_id,
 +                                             uint32_t mx_chan_id,
 +                                             tBTM_SEC_CALLBACK* p_callback,
 +                                             void* p_ref_data);
 +extern void btm_sec_conn_req(const RawAddress& bda, uint8_t* dc);
  extern void btm_create_conn_cancel_complete(uint8_t* p);
  
  extern void btm_read_inq_tx_power_timeout(void* data);
@@@ -237,27 -225,26 +237,27 @@@ extern void btm_read_inq_tx_power_compl
  
  extern void btm_sec_init(uint8_t sec_mode);
  extern void btm_sec_dev_reset(void);
 -extern void btm_sec_abort_access_req(BD_ADDR bd_addr);
 +extern void btm_sec_abort_access_req(const RawAddress& bd_addr);
  extern void btm_sec_auth_complete(uint16_t handle, uint8_t status);
  extern void btm_sec_encrypt_change(uint16_t handle, uint8_t status,
                                     uint8_t encr_enable);
 -extern void btm_sec_connected(uint8_t* bda, uint16_t handle, uint8_t status,
 -                              uint8_t enc_mode);
 +extern void btm_sec_connected(const RawAddress& bda, uint16_t handle,
 +                              uint8_t status, uint8_t enc_mode);
  extern tBTM_STATUS btm_sec_disconnect(uint16_t handle, uint8_t reason);
  extern void btm_sec_disconnected(uint16_t handle, uint8_t reason);
 -extern void btm_sec_rmt_name_request_complete(uint8_t* bd_addr,
 +extern void btm_sec_rmt_name_request_complete(const RawAddress* bd_addr,
                                                uint8_t* bd_name, uint8_t status);
  extern void btm_sec_rmt_host_support_feat_evt(uint8_t* p);
 -extern void btm_io_capabilities_req(uint8_t* p);
 +extern void btm_io_capabilities_req(const RawAddress& p);
  extern void btm_io_capabilities_rsp(uint8_t* p);
  extern void btm_proc_sp_req_evt(tBTM_SP_EVT event, uint8_t* p);
  extern void btm_keypress_notif_evt(uint8_t* p);
  extern void btm_simple_pair_complete(uint8_t* p);
 -extern void btm_sec_link_key_notification(uint8_t* p_bda, uint8_t* p_link_key,
 +extern void btm_sec_link_key_notification(const RawAddress& p_bda,
 +                                          uint8_t* p_link_key,
                                            uint8_t key_type);
 -extern void btm_sec_link_key_request(uint8_t* p_bda);
 -extern void btm_sec_pin_code_request(uint8_t* p_bda);
 +extern void btm_sec_link_key_request(const RawAddress& p_bda);
 +extern void btm_sec_pin_code_request(const RawAddress& p_bda);
  extern void btm_sec_update_clock_offset(uint16_t handle, uint16_t clock_offset);
  extern void btm_sec_dev_rec_cback_event(tBTM_SEC_DEV_REC* p_dev_rec,
                                          uint8_t res, bool is_le_trasnport);
@@@ -265,27 -252,27 +265,27 @@@ extern void btm_sec_set_peer_sec_caps(t
                                        tBTM_SEC_DEV_REC* p_dev_rec);
  
  extern void btm_sec_clear_ble_keys(tBTM_SEC_DEV_REC* p_dev_rec);
 -extern bool btm_sec_is_a_bonded_dev(BD_ADDR bda);
 +extern bool btm_sec_is_a_bonded_dev(const RawAddress& bda);
  extern void btm_consolidate_dev(tBTM_SEC_DEV_REC* p_target_rec);
 -extern bool btm_sec_is_le_capable_dev(BD_ADDR bda);
 +extern bool btm_sec_is_le_capable_dev(const RawAddress& bda);
  extern bool btm_ble_init_pseudo_addr(tBTM_SEC_DEV_REC* p_dev_rec,
 -                                     BD_ADDR new_pseudo_addr);
 +                                     const RawAddress& new_pseudo_addr);
  extern tBTM_SEC_SERV_REC* btm_sec_find_first_serv(CONNECTION_TYPE conn_type,
                                                    uint16_t psm);
 -extern bool btm_ble_start_sec_check(BD_ADDR bd_addr, uint16_t psm,
 +extern bool btm_ble_start_sec_check(const RawAddress& bd_addr, uint16_t psm,
                                      bool is_originator,
                                      tBTM_SEC_CALLBACK* p_callback,
                                      void* p_ref_data);
  
 -extern tINQ_DB_ENT* btm_inq_db_new(BD_ADDR p_bda);
 +extern tINQ_DB_ENT* btm_inq_db_new(const RawAddress& p_bda);
  
  extern void btm_rem_oob_req(uint8_t* p);
  extern void btm_read_local_oob_complete(uint8_t* p);
  
  extern void btm_acl_resubmit_page(void);
  extern void btm_acl_reset_paging(void);
 -extern void btm_acl_paging(BT_HDR* p, BD_ADDR dest);
 +extern void btm_acl_paging(BT_HDR* p, const RawAddress& dest);
  extern uint8_t btm_sec_clr_service_by_psm(uint16_t psm);
 -extern void btm_sec_clr_temp_auth_service(BD_ADDR bda);
 +extern void btm_sec_clr_temp_auth_service(const RawAddress& bda);
  
  #endif
diff --combined stack/btu/btu_hcif.cc
@@@ -32,7 -32,6 +32,7 @@@
  #include <base/location.h>
  #include <base/logging.h>
  #include <base/threading/thread.h>
 +#include <log/log.h>
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
@@@ -70,8 -69,7 +70,7 @@@ static void btu_hcif_authentication_com
  static void btu_hcif_rmt_name_request_comp_evt(uint8_t* p, uint16_t evt_len);
  static void btu_hcif_encryption_change_evt(uint8_t* p);
  static void btu_hcif_read_rmt_features_comp_evt(uint8_t* p);
- static void btu_hcif_read_rmt_ext_features_comp_evt(uint8_t* p,
-                                                     uint8_t evt_len);
+ static void btu_hcif_read_rmt_ext_features_comp_evt(uint8_t* p);
  static void btu_hcif_read_rmt_version_comp_evt(uint8_t* p);
  static void btu_hcif_qos_setup_comp_evt(uint8_t* p);
  static void btu_hcif_command_complete_evt(BT_HDR* response, void* context);
@@@ -195,7 -193,7 +194,7 @@@ void btu_hcif_process_event(UNUSED_ATT
        btu_hcif_read_rmt_features_comp_evt(p);
        break;
      case HCI_READ_RMT_EXT_FEATURES_COMP_EVT:
-       btu_hcif_read_rmt_ext_features_comp_evt(p, hci_evt_len);
+       btu_hcif_read_rmt_ext_features_comp_evt(p);
        break;
      case HCI_READ_RMT_VERSION_COMP_EVT:
        btu_hcif_read_rmt_version_comp_evt(p);
            btu_ble_data_length_change_evt(p, hci_evt_len);
            break;
  
 -        case HCI_LE_PHY_UPDATE_COMPLETE_EVT:
 +        case HCI_BLE_PHY_UPDATE_COMPLETE_EVT:
            btm_ble_process_phy_update_pkt(ble_evt_len, p);
            break;
  
@@@ -575,7 -573,7 +574,7 @@@ static void btu_hcif_extended_inquiry_r
  static void btu_hcif_connection_comp_evt(uint8_t* p) {
    uint8_t status;
    uint16_t handle;
 -  BD_ADDR bda;
 +  RawAddress bda;
    uint8_t link_type;
    uint8_t enc_mode;
  #if (BTM_SCO_INCLUDED == TRUE)
    else {
      memset(&esco_data, 0, sizeof(tBTM_ESCO_DATA));
      /* esco_data.link_type = HCI_LINK_TYPE_SCO; already zero */
 -    memcpy(esco_data.bd_addr, bda, BD_ADDR_LEN);
 -    btm_sco_connected(status, bda, handle, &esco_data);
 +    esco_data.bd_addr = bda;
 +    btm_sco_connected(status, &bda, handle, &esco_data);
    }
  #endif /* BTM_SCO_INCLUDED */
  }
   *
   ******************************************************************************/
  static void btu_hcif_connection_request_evt(uint8_t* p) {
 -  BD_ADDR bda;
 +  RawAddress bda;
    DEV_CLASS dc;
    uint8_t link_type;
  
@@@ -695,52 -693,18 +694,52 @@@ static void btu_hcif_authentication_com
   ******************************************************************************/
  static void btu_hcif_rmt_name_request_comp_evt(uint8_t* p, uint16_t evt_len) {
    uint8_t status;
 -  BD_ADDR bd_addr;
 +  RawAddress bd_addr;
  
    STREAM_TO_UINT8(status, p);
    STREAM_TO_BDADDR(bd_addr, p);
  
    evt_len -= (1 + BD_ADDR_LEN);
  
 -  btm_process_remote_name(bd_addr, p, evt_len, status);
 +  btm_process_remote_name(&bd_addr, p, evt_len, status);
  
 -  btm_sec_rmt_name_request_complete(bd_addr, p, status);
 +  btm_sec_rmt_name_request_complete(&bd_addr, p, status);
  }
  
 +constexpr uint8_t MIN_KEY_SIZE = 7;
 +
 +static void read_encryption_key_size_complete_after_encryption_change(
 +    uint8_t status, uint16_t handle, uint8_t key_size) {
 +  if (status == HCI_ERR_INSUFFCIENT_SECURITY) {
 +    /* If remote device stop the encryption before we call "Read Encryption Key
 +     * Size", we might receive Insufficient Security, which means that link is
 +     * no longer encrypted. */
 +    HCI_TRACE_WARNING("%s encryption stopped on link: 0x%02x", __func__,
 +                      handle);
 +    return;
 +  }
 +
 +  if (status != HCI_SUCCESS) {
 +    HCI_TRACE_WARNING("%s: disconnecting, status: 0x%02x", __func__, status);
 +    btsnd_hcic_disconnect(handle, HCI_ERR_PEER_USER);
 +    return;
 +  }
 +
 +  if (key_size < MIN_KEY_SIZE) {
 +    android_errorWriteLog(0x534e4554, "124301137");
 +    HCI_TRACE_ERROR(
 +        "%s encryption key too short, disconnecting. handle: 0x%02x, key_size: "
 +        "%d",
 +        __func__, handle, key_size);
 +
 +    btsnd_hcic_disconnect(handle, HCI_ERR_HOST_REJECT_SECURITY);
 +    return;
 +  }
 +
 +  // good key size - succeed
 +  btm_acl_encrypt_change(handle, status, 1 /* enable */);
 +  btm_sec_encrypt_change(handle, status, 1 /* enable */);
 +}
  /*******************************************************************************
   *
   * Function         btu_hcif_encryption_change_evt
@@@ -759,15 -723,8 +758,15 @@@ static void btu_hcif_encryption_change_
    STREAM_TO_UINT16(handle, p);
    STREAM_TO_UINT8(encr_enable, p);
  
 -  btm_acl_encrypt_change(handle, status, encr_enable);
 -  btm_sec_encrypt_change(handle, status, encr_enable);
 +  if (status != HCI_SUCCESS || encr_enable == 0 ||
 +      BTM_IsBleConnection(handle)) {
 +    btm_acl_encrypt_change(handle, status, encr_enable);
 +    btm_sec_encrypt_change(handle, status, encr_enable);
 +  } else {
 +    btsnd_hcic_read_encryption_key_size(
 +        handle,
 +        base::Bind(&read_encryption_key_size_complete_after_encryption_change));
 +  }
  }
  
  /*******************************************************************************
@@@ -792,8 -749,7 +791,7 @@@ static void btu_hcif_read_rmt_features_
   * Returns          void
   *
   ******************************************************************************/
- static void btu_hcif_read_rmt_ext_features_comp_evt(uint8_t* p,
-                                                     uint8_t evt_len) {
+ static void btu_hcif_read_rmt_ext_features_comp_evt(uint8_t* p) {
    uint8_t* p_cur = p;
    uint8_t status;
    uint16_t handle;
    STREAM_TO_UINT8(status, p_cur);
  
    if (status == HCI_SUCCESS)
-     btm_read_remote_ext_features_complete(p, evt_len);
+     btm_read_remote_ext_features_complete(p);
    else {
      STREAM_TO_UINT16(handle, p_cur);
      btm_read_remote_ext_features_failed(status, handle);
@@@ -860,7 -816,7 +858,7 @@@ static void btu_hcif_esco_connection_co
  #if (BTM_SCO_INCLUDED == TRUE)
    tBTM_ESCO_DATA data;
    uint16_t handle;
 -  BD_ADDR bda;
 +  RawAddress bda;
    uint8_t status;
  
    STREAM_TO_UINT8(status, p);
    STREAM_TO_UINT16(data.tx_pkt_len, p);
    STREAM_TO_UINT8(data.air_mode, p);
  
 -  memcpy(data.bd_addr, bda, BD_ADDR_LEN);
 -  btm_sco_connected(status, bda, handle, &data);
 +  data.bd_addr = bda;
 +  btm_sco_connected(status, &bda, handle, &data);
  #endif
  }
  
@@@ -947,14 -903,6 +945,14 @@@ static void btu_hcif_hdl_command_comple
        btm_read_rssi_complete(p);
        break;
  
 +    case HCI_READ_FAILED_CONTACT_COUNTER:
 +      btm_read_failed_contact_counter_complete(p);
 +      break;
 +
 +    case HCI_READ_AUTOMATIC_FLUSH_TIMEOUT:
 +      btm_read_automatic_flush_timeout_complete(p);
 +      break;
 +
      case HCI_READ_TRANSMIT_POWER_LEVEL:
        btm_read_tx_power_complete(p, false);
        break;
@@@ -1079,7 -1027,7 +1077,7 @@@ static void btu_hcif_command_complete_e
  static void btu_hcif_hdl_command_status(uint16_t opcode, uint8_t status,
                                          uint8_t* p_cmd,
                                          void* p_vsc_status_cback) {
 -  BD_ADDR bd_addr;
 +  RawAddress bd_addr;
    uint16_t handle;
  #if (BTM_SCO_INCLUDED == TRUE)
    tBTM_ESCO_DATA esco_data;
              if (p_cmd != NULL) {
                p_cmd++;
                STREAM_TO_BDADDR(bd_addr, p_cmd);
 -              btm_acl_role_changed(status, bd_addr, BTM_ROLE_UNDEFINED);
 +              btm_acl_role_changed(status, &bd_addr, BTM_ROLE_UNDEFINED);
              } else
                btm_acl_role_changed(status, NULL, BTM_ROLE_UNDEFINED);
 -            l2c_link_role_changed(NULL, BTM_ROLE_UNDEFINED,
 +            l2c_link_role_changed(nullptr, BTM_ROLE_UNDEFINED,
                                    HCI_ERR_COMMAND_DISALLOWED);
              break;
  
@@@ -1282,7 -1230,7 +1280,7 @@@ static void btu_hcif_flush_occured_evt(
   ******************************************************************************/
  static void btu_hcif_role_change_evt(uint8_t* p) {
    uint8_t status;
 -  BD_ADDR bda;
 +  RawAddress bda;
    uint8_t role;
  
    STREAM_TO_UINT8(status, p);
    STREAM_TO_UINT8(role, p);
  
    btm_blacklist_role_change_device(bda, status);
 -  l2c_link_role_changed(bda, role, status);
 -  btm_acl_role_changed(status, bda, role);
 +  l2c_link_role_changed(&bda, role, status);
 +  btm_acl_role_changed(status, &bda, role);
  }
  
  /*******************************************************************************
@@@ -1366,7 -1314,7 +1364,7 @@@ static void btu_hcif_ssr_evt(uint8_t* p
   *
   ******************************************************************************/
  static void btu_hcif_pin_code_request_evt(uint8_t* p) {
 -  BD_ADDR bda;
 +  RawAddress bda;
  
    STREAM_TO_BDADDR(bda, p);
  
   *
   ******************************************************************************/
  static void btu_hcif_link_key_request_evt(uint8_t* p) {
 -  BD_ADDR bda;
 +  RawAddress bda;
  
    STREAM_TO_BDADDR(bda, p);
    btm_sec_link_key_request(bda);
   *
   ******************************************************************************/
  static void btu_hcif_link_key_notification_evt(uint8_t* p) {
 -  BD_ADDR bda;
 +  RawAddress bda;
    LINK_KEY key;
    uint8_t key_type;
  
@@@ -1554,9 -1502,7 +1552,9 @@@ static void btu_hcif_host_support_evt(u
   *
   ******************************************************************************/
  static void btu_hcif_io_cap_request_evt(uint8_t* p) {
 -  btm_io_capabilities_req(p);
 +  RawAddress bda;
 +  STREAM_TO_BDADDR(bda, p);
 +  btm_io_capabilities_req(bda);
  }
  
  /*******************************************************************************
@@@ -1666,57 -1612,22 +1664,57 @@@ static void btu_hcif_enhanced_flush_com
   * End of Simple Pairing Events
   **********************************************/
  
 -/**********************************************
 - * BLE Events
 - **********************************************/
 +static void read_encryption_key_size_complete_after_key_refresh(
 +    uint8_t status, uint16_t handle, uint8_t key_size) {
 +  if (status == HCI_ERR_INSUFFCIENT_SECURITY) {
 +    /* If remote device stop the encryption before we call "Read Encryption Key
 +     * Size", we might receive Insufficient Security, which means that link is
 +     * no longer encrypted. */
 +    HCI_TRACE_WARNING("%s encryption stopped on link: 0x%02x", __func__,
 +                      handle);
 +    return;
 +  }
 +
 +  if (status != HCI_SUCCESS) {
 +    HCI_TRACE_WARNING("%s: disconnecting, status: 0x%02x", __func__, status);
 +    btsnd_hcic_disconnect(handle, HCI_ERR_PEER_USER);
 +    return;
 +  }
 +
 +  if (key_size < MIN_KEY_SIZE) {
 +    android_errorWriteLog(0x534e4554, "124301137");
 +    HCI_TRACE_WARNING(
 +        "%s encryption key too short, disconnecting. handle: 0x%02x, key_size: "
 +        "%d",
 +        __func__, handle, key_size);
 +
 +    btsnd_hcic_disconnect(handle, HCI_ERR_HOST_REJECT_SECURITY);
 +    return;
 +  }
 +
 +  btm_sec_encrypt_change(handle, status, 1 /* enc_enable */);
 +}
 +
  static void btu_hcif_encryption_key_refresh_cmpl_evt(uint8_t* p) {
    uint8_t status;
 -  uint8_t enc_enable = 0;
    uint16_t handle;
  
    STREAM_TO_UINT8(status, p);
    STREAM_TO_UINT16(handle, p);
  
 -  if (status == HCI_SUCCESS) enc_enable = 1;
 -
 -  btm_sec_encrypt_change(handle, status, enc_enable);
 +  if (status != HCI_SUCCESS || BTM_IsBleConnection(handle)) {
 +    btm_sec_encrypt_change(handle, status, (status == HCI_SUCCESS) ? 1 : 0);
 +  } else {
 +    btsnd_hcic_read_encryption_key_size(
 +        handle,
 +        base::Bind(&read_encryption_key_size_complete_after_key_refresh));
 +  }
  }
  
 +/**********************************************
 + * BLE Events
 + **********************************************/
 +
  static void btu_ble_ll_conn_complete_evt(uint8_t* p, uint16_t evt_len) {
    btm_ble_conn_complete(p, evt_len, false);
  }
diff --combined stack/include/hcidefs.h
  #define HCI_PROTO_VERSION_2_0 0x03 /* Version for BT spec 2.0          */
  #define HCI_PROTO_VERSION_2_1 0x04 /* Version for BT spec 2.1 [Lisbon] */
  #define HCI_PROTO_VERSION_3_0 0x05 /* Version for BT spec 3.0          */
 -#define HCI_PROTO_VERSION_4_0 0x06 /* Version for BT spec 4.0          */
 +#define HCI_PROTO_VERSION_4_0 0x06 /* Version for BT spec 4.0 [LE]     */
  #define HCI_PROTO_VERSION_4_1 0x07 /* Version for BT spec 4.1          */
  #define HCI_PROTO_VERSION_4_2 0x08 /* Version for BT spec 4.2          */
 +#define HCI_PROTO_VERSION_5_0 0x09 /* Version for BT spec 5.0          */
  
  /*
   *  Definitions for HCI groups
@@@ -38,7 -37,6 +38,7 @@@
  #define HCI_GRP_INFORMATIONAL_PARAMS (0x04 << 10)    /* 0x1000 */
  #define HCI_GRP_STATUS_PARAMS (0x05 << 10)           /* 0x1400 */
  #define HCI_GRP_TESTING_CMDS (0x06 << 10)            /* 0x1800 */
 +#define HCI_GRP_BLE_CMDS (0x08 << 10)               /* 0x2000 (LE Commands) */
  
  #define HCI_GRP_VENDOR_SPECIFIC (0x3F << 10) /* 0xFC00 */
  
  #define HCI_WRITE_CLASS_OF_DEVICE (0x0024 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
  #define HCI_READ_VOICE_SETTINGS (0x0025 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
  #define HCI_WRITE_VOICE_SETTINGS (0x0026 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
 -#define HCI_READ_AUTO_FLUSH_TOUT (0x0027 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
 -#define HCI_WRITE_AUTO_FLUSH_TOUT (0x0028 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
 +#define HCI_READ_AUTOMATIC_FLUSH_TIMEOUT \
 +  (0x0027 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
 +#define HCI_WRITE_AUTOMATIC_FLUSH_TIMEOUT \
 +  (0x0028 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
  #define HCI_READ_NUM_BCAST_REXMITS (0x0029 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
  #define HCI_WRITE_NUM_BCAST_REXMITS (0x002A | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
  #define HCI_READ_HOLD_MODE_ACTIVITY (0x002B | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
  #define HCI_INFORMATIONAL_CMDS_LAST HCI_READ_LOCAL_SUPPORTED_CODECS
  
  /* Commands of HCI_GRP_STATUS_PARAMS group */
 -#define HCI_READ_FAILED_CONTACT_COUNT (0x0001 | HCI_GRP_STATUS_PARAMS)
 -#define HCI_RESET_FAILED_CONTACT_COUNT (0x0002 | HCI_GRP_STATUS_PARAMS)
 +#define HCI_READ_FAILED_CONTACT_COUNTER (0x0001 | HCI_GRP_STATUS_PARAMS)
 +#define HCI_RESET_FAILED_CONTACT_COUNTER (0x0002 | HCI_GRP_STATUS_PARAMS)
  #define HCI_GET_LINK_QUALITY (0x0003 | HCI_GRP_STATUS_PARAMS)
  #define HCI_READ_RSSI (0x0005 | HCI_GRP_STATUS_PARAMS)
  #define HCI_READ_AFH_CH_MAP (0x0006 | HCI_GRP_STATUS_PARAMS)
  #define HCI_READ_LOCAL_AMP_ASSOC (0x000A | HCI_GRP_STATUS_PARAMS)
  #define HCI_WRITE_REMOTE_AMP_ASSOC (0x000B | HCI_GRP_STATUS_PARAMS)
  
 -#define HCI_STATUS_PARAMS_CMDS_FIRST HCI_READ_FAILED_CONTACT_COUNT
 +#define HCI_STATUS_PARAMS_CMDS_FIRST HCI_READ_FAILED_CONTACT_COUNTER
  #define HCI_STATUS_PARAMS_CMDS_LAST HCI_WRITE_REMOTE_AMP_ASSOC
  
  /* Commands of HCI_GRP_TESTING_CMDS group */
  #define HCI_VSC_MULTI_AV_HANDLE 0x0AAA
  #define HCI_VSC_BURST_MODE_HANDLE 0x0BBB
  
 -/* BLE HCI */
 -#define HCI_GRP_BLE_CMDS (0x08 << 10)
 +/* BLE HCI Group Commands */
  /* Commands of BLE Controller setup and configuration */
  #define HCI_BLE_SET_EVENT_MASK (0x0001 | HCI_GRP_BLE_CMDS)
  #define HCI_BLE_READ_BUFFER_SIZE (0x0002 | HCI_GRP_BLE_CMDS)
  #define HCI_BLE_READ_RESOLVABLE_ADDR_LOCAL (0x002C | HCI_GRP_BLE_CMDS)
  #define HCI_BLE_SET_ADDR_RESOLUTION_ENABLE (0x002D | HCI_GRP_BLE_CMDS)
  #define HCI_BLE_SET_RAND_PRIV_ADDR_TIMOUT (0x002E | HCI_GRP_BLE_CMDS)
 -#define HCI_LE_READ_PHY (0x30 | HCI_GRP_BLE_CMDS)
 -#define HCI_LE_SET_DEFAULT_PHY (0x31 | HCI_GRP_BLE_CMDS)
 -#define HCI_LE_SET_PHY (0x32 | HCI_GRP_BLE_CMDS)
 +#define HCI_BLE_READ_PHY (0x0030 | HCI_GRP_BLE_CMDS)
 +#define HCI_BLE_SET_DEFAULT_PHY (0x0031 | HCI_GRP_BLE_CMDS)
 +#define HCI_BLE_SET_PHY (0x0032 | HCI_GRP_BLE_CMDS)
 +#define HCI_BLE_ENH_RECEIVER_TEST (0x0033 | HCI_GRP_BLE_CMDS)
 +#define HCI_BLE_ENH_TRANSMITTER_TEST (0x0034 | HCI_GRP_BLE_CMDS)
  #define HCI_LE_SET_EXT_ADVERTISING_RANDOM_ADDRESS (0x35 | HCI_GRP_BLE_CMDS)
  #define HCI_LE_SET_EXT_ADVERTISING_PARAM (0x36 | HCI_GRP_BLE_CMDS)
  #define HCI_LE_SET_EXT_ADVERTISING_DATA (0x37 | HCI_GRP_BLE_CMDS)
  #define HCI_LE_INIT_MA_STATE 0x00000800
  
  /* LE Supported States */
 -/* Non Connectable Adv state is supported. 0x0000000000000001 */
 -#define HCI_SUPP_LE_STATES_NON_CONN_ADV_MASK 0x01
 -#define HCI_SUPP_LE_STATES_NON_CONN_ADV_OFF 0
 -#define HCI_LE_STATES_NON_CONN_ADV_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_LE_STATES_NON_CONN_ADV_OFF] &   \
 -   HCI_SUPP_LE_STATES_NON_CONN_ADV_MASK)
 -
 -/* Scanneable Connectable Adv state  is supported. 0x0000000000000002 */
 -#define HCI_SUPP_LE_STATES_SCAN_ADV_MASK 0x02
 -#define HCI_SUPP_LE_STATESSCAN_ADV_OFF 0
 -#define HCI_LE_STATES_SCAN_ADV_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_LE_STATESSCAN_ADV_OFF] & HCI_SUPP_LE_STATES_SCAN_ADV_MASK)
 -
 -/* Connectable Adv state is supported. 0x0000000000000004 */
 -#define HCI_SUPP_LE_STATES_CONN_ADV_MASK 0x04
 -#define HCI_SUPP_LE_STATES_CONN_ADV_OFF 0
 -#define HCI_LE_STATES_CONN_ADV_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_LE_STATES_CONN_ADV_OFF] & HCI_SUPP_LE_STATES_CONN_ADV_MASK)
 -
 -/* Hi duty Cycle Directed Adv state is supported. 0x0000000000000008 */
 -#define HCI_SUPP_LE_STATES_HI_DUTY_DIR_ADV_MASK 0x08
 -#define HCI_SUPP_LE_STATES_HI_DUTY_DIR_ADV_OFF 0
 -#define HCI_LE_STATES_HI_DUTY_DIR_ADV_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_LE_STATES_HI_DUTY_DIR_ADV_OFF] &   \
 -   HCI_SUPP_LE_STATES_HI_DUTY_DIR_ADV_MASK)
 -
 -/* Passive Scan state is supported. 0x0000000000000010 */
 -#define HCI_SUPP_LE_STATES_PASS_SCAN_MASK 0x10
 -#define HCI_SUPP_LE_STATES_PASS_SCAN_OFF 0
 -#define HCI_LE_STATES_PASS_SCAN_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_LE_STATES_PASS_SCAN_OFF] & HCI_SUPP_LE_STATES_PASS_SCAN_MASK)
 -
 -/* Active Scan state is supported. 0x0000000000000020 */
 -#define HCI_SUPP_LE_STATES_ACTIVE_SCAN_MASK 0x20
 -#define HCI_SUPP_LE_STATES_ACTIVE_SCAN_OFF 0
 -#define HCI_LE_STATES_ACTIVE_SCAN_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_LE_STATES_ACTIVE_SCAN_OFF] &   \
 -   HCI_SUPP_LE_STATES_ACTIVE_SCAN_MASK)
 -
 -/* Initiating state is supported. 0x0000000000000040 (or connection state in
 - * master role is also supported) */
 -#define HCI_SUPP_LE_STATES_INIT_MASK 0x40
 -#define HCI_SUPP_LE_STATES_INIT_OFF 0
 -#define HCI_LE_STATES_INIT_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_LE_STATES_INIT_OFF] & HCI_SUPP_LE_STATES_INIT_MASK)
 -
 -/* connection state in slave  role is also supported. 0x0000000000000080 */
 -#define HCI_SUPP_LE_STATES_SLAVE_MASK 0x80
 -#define HCI_SUPP_LE_STATES_SLAVE_OFF 0
 -#define HCI_LE_STATES_SLAVE_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_LE_STATES_SLAVE_OFF] & HCI_SUPP_LE_STATES_SLAVE_MASK)
 -
 -/* Non Connectable Adv state and Passive Scanning State combination is
 - * supported. 0x0000000000000100 */
 -#define HCI_SUPP_LE_STATES_NON_CONN_ADV_PASS_SCAN_MASK 0x01
 -#define HCI_SUPP_LE_STATES_NON_CONN_ADV_PASS_SCAN_OFF 1
 -#define HCI_LE_STATES_NON_CONN_ADV_PASS_SCAN_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_LE_STATES_NON_CONN_ADV_PASS_SCAN_OFF] &   \
 -   HCI_SUPP_LE_STATES_NON_CONN_ADV_PASS_SCAN_MASK)
 -
 -/* Scannable Adv state and Passive Scanning State combination is supported.
 - * 0x0000000000000200 */
 -#define HCI_SUPP_LE_STATES_SCAN_ADV_PASS_SCAN_MASK 0x02
 -#define HCI_SUPP_LE_STATES_SCAN_ADV_PASS_SCAN_OFF 1
 -#define HCI_LE_STATES_SCAN_ADV_PASS_SCAN_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_LE_STATES_SCAN_ADV_PASS_SCAN_OFF] &   \
 -   HCI_SUPP_LE_STATES_SCAN_ADV_PASS_SCAN_MASK)
 -
 -/* Connectable Adv state and Passive Scanning State combination is supported.
 - * 0x0000000000000400 */
 -#define HCI_SUPP_LE_STATES_CONN_ADV_PASS_SCAN_MASK 0x04
 -#define HCI_SUPP_LE_STATES_CONN_ADV_PASS_SCAN_OFF 1
 -#define HCI_LE_STATES_CONN_ADV_PASS_SCAN_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_LE_STATES_CONN_ADV_PASS_SCAN_OFF] &   \
 -   HCI_SUPP_LE_STATES_CONN_ADV_PASS_SCAN_MASK)
 -
 -/* High Duty Cycl Directed ADv and Passive Scanning State combination is
 - * supported. 0x0000000000000800 */
 -#define HCI_SUPP_LE_STATES_HI_DUTY_DIR_ADV_PASS_SCAN_MASK 0x08
 -#define HCI_SUPP_LE_STATES_HI_DUTY_DIR_ADV_PASS_SCAN_OFF 1
 -#define HCI_LE_STATES_HI_DUTY_DIR_ADV_PASS_SCAN_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_LE_STATES_HI_DUTY_DIR_ADV_PASS_SCAN_MASK] &  \
 -   HCI_SUPP_LE_STATES_HI_DUTY_DIR_ADV_PASS_SCAN_OFF)
 -
 -/* Non Connectable Adv state and Passive Scanning State combination is
 - * supported. 0x0000000000001000 */
 -#define HCI_SUPP_LE_STATES_NON_CONN_ADV_ACTIVE_SCAN_MASK 0x10
 -#define HCI_SUPP_LE_STATES_NON_CONN_ADV_ACTIVE_SCAN_OFF 1
 -#define HCI_LE_STATES_NON_CONN_ADV_ACTIVE_SCAN_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_LE_STATES_NON_CONN_ADV_ACTIVE_SCAN_OFF] &   \
 -   HCI_SUPP_LE_STATES_NON_CONN_ADV_ACTIVE_SCAN_MASK)
 -
 -/* Scannable Adv state and Active Scanning State combination is supported.
 - * 0x0000000000002000 */
 -#define HCI_SUPP_LE_STATES_SCAN_ADV_ACTIVE_SCAN_MASK 0x20
 -#define HCI_SUPP_LE_STATES_SCAN_ADV_ACTIVE_SCAN_OFF 1
 -#define HCI_LE_STATES_SCAN_ADV_ACTIVE_SCAN_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_LE_STATES_SCAN_ADV_ACTIVE_SCAN_OFF] &   \
 -   HCI_SUPP_LE_STATES_SCAN_ADV_ACTIVE_SCAN_MASK)
 -
 -/* Connectable Adv state and Active Scanning State combination is supported.
 - * 0x0000000000004000 */
 -#define HCI_SUPP_LE_STATES_CONN_ADV_ACTIVE_SCAN_MASK 0x40
 -#define HCI_SUPP_LE_STATES_CONN_ADV_ACTIVE_SCAN_OFF 1
 -#define HCI_LE_STATES_CONN_ADV_ACTIVE_SCAN_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_LE_STATES_CONN_ADV_ACTIVE_SCAN_OFF] &   \
 -   HCI_SUPP_LE_STATES_CONN_ADV_ACTIVE_SCAN_MASK)
 -
 -/* High Duty Cycl Directed ADv and ACtive Scanning State combination is
 - * supported. 0x0000000000008000 */
 -#define HCI_SUPP_LE_STATES_HI_DUTY_DIR_ADV_ACTIVE_SCAN_MASK 0x80
 -#define HCI_SUPP_LE_STATES_HI_DUTY_DIR_ADV_ACTIVE_SCAN_OFF 1
 -#define HCI_LE_STATES_HI_DUTY_DIR_ADV_ACTIVE_SCAN_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_LE_STATES_HI_DUTY_DIR_ADV_ACTIVE_SCAN_MASK] &  \
 -   HCI_SUPP_LE_STATES_HI_DUTY_DIR_ADV_ACTIVE_SCAN_OFF)
 -
 -/* Non-Connectable Adv state and Initiating State combination is supported.
 - * 0x0000000000010000 */
 -#define HCI_SUPP_LE_STATES_NON_CONN_INIT_MASK 0x01
 -#define HCI_SUPP_LE_STATES_NON_CONN_INIT_OFF 2
 -#define HCI_LE_STATES_NON_CONN_INIT_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_LE_STATES_NON_CONN_INIT_OFF] &   \
 -   HCI_SUPP_LE_STATES_NON_CONN_INIT_MASK)
 -
 -/* Scannable Adv state and Initiating State combination is supported.
 - * 0x0000000000020000 */
 -#define HCI_SUPP_LE_STATES_SCAN_ADV_INIT_MASK 0x02
 -#define HCI_SUPP_LE_STATES_SCAN_ADV_INIT_OFF 2
 -#define HCI_LE_STATES_SCAN_ADV_INIT_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_LE_STATES_SCAN_ADV_INIT_OFF] &   \
 -   HCI_SUPP_LE_STATES_SCAN_ADV_INIT_MASK)
 -
 -/* Non-Connectable Adv state and Master Role combination is supported.
 - * 0x0000000000040000 */
 -#define HCI_SUPP_LE_STATES_NON_CONN_ADV_MASTER_MASK 0x04
 -#define HCI_SUPP_LE_STATES_NON_CONN_ADV_MASTER_OFF 2
 -#define HCI_LE_STATES_NON_CONN_ADV_MASTER_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_LE_STATES_NON_CONN_ADV_MASTER_OFF] &   \
 -   HCI_SUPP_LE_STATES_NON_CONN_ADV_MASTER_MASK)
 -
 -/* Scannable Adv state and Master Role combination is supported.
 - * 0x0000000000040000 */
 -#define HCI_SUPP_LE_STATES_SCAN_ADV_MASTER_MASK 0x08
 -#define HCI_SUPP_LE_STATES_SCAN_ADV_MASTER_OFF 2
 -#define HCI_LE_STATES_SCAN_ADV_MASTER_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_LE_STATES_SCAN_ADV_MASTER_OFF] &   \
 -   HCI_SUPP_LE_STATES_SCAN_ADV_MASTER_MASK)
 -
 -/* Non-Connectable Adv and Slave Role combination is supported.
 - * 0x000000000100000 */
 -#define HCI_SUPP_LE_STATES_NON_CONN_ADV_SLAVE_MASK 0x10
 -#define HCI_SUPP_LE_STATES_NON_CONN_ADV_SLAVE_OFF 2
 -#define HCI_LE_STATES_NON_CONN_ADV_SLAVE_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_LE_STATES_NON_CONN_ADV_SLAVE_OFF] &   \
 -   HCI_SUPP_LE_STATES_NON_CONN_ADV_SLAVE_MASK)
 -
 -/* Scannable Adv and Slave Role combination is supported. 0x000000000200000 */
 -#define HCI_SUPP_LE_STATES_SCAN_ADV_SLAVE_MASK 0x20
 -#define HCI_SUPP_LE_STATES_SCAN_ADV_SLAVE_OFF 2
 -#define HCI_LE_STATES_SCAN_ADV_SLAVE_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_LE_STATES_SCAN_ADV_SLAVE_OFF] &   \
 -   HCI_SUPP_LE_STATES_SCAN_ADV_SLAVE_MASK)
 -
 -/* Passive Scan and Initiating State combination is supported.
 - * 0x000000000400000 */
 -#define HCI_SUPP_LE_STATES_PASS_SCAN_INIT_MASK 0x40
 -#define HCI_SUPP_LE_STATES_PASS_SCAN_INIT_OFF 2
 -#define HCI_LE_STATES_PASS_SCAN_INIT_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_LE_STATES_PASS_SCAN_INIT_OFF] &   \
 -   HCI_SUPP_LE_STATES_PASS_SCAN_INIT_MASK)
 -
 -/* Active Scan and Initiating State combination is supported.
 - * 0x000000000800000 */
 -#define HCI_SUPP_LE_STATES_ACTIVE_SCAN_INIT_MASK 0x80
 -#define HCI_SUPP_LE_STATES_ACTIVE_SCAN_INIT_OFF 2
 -#define HCI_LE_STATES_ACTIVE_SCAN_INIT_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_LE_STATES_ACTIVE_SCAN_INIT_OFF] &   \
 -   HCI_SUPP_LE_STATES_ACTIVE_SCAN_INIT_MASK)
 -
 -/* Passive Scan and Master Role combination is supported. 0x000000001000000 */
 -#define HCI_SUPP_LE_STATES_PASS_SCAN_MASTER_MASK 0x01
 -#define HCI_SUPP_LE_STATES_PASS_SCAN_MASTER_OFF 3
 -#define HCI_LE_STATES_PASS_SCAN_MASTER_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_LE_STATES_PASS_SCAN_MASTER_OFF] &   \
 -   HCI_SUPP_LE_STATES_PASS_SCAN_MASTER_MASK)
 -
 -/* Active Scan and Master Role combination is supported. 0x000000002000000 */
 -#define HCI_SUPP_LE_STATES_ACTIVE_SCAN_MASTER_MASK 0x02
 -#define HCI_SUPP_LE_STATES_ACTIVE_SCAN_MASTER_OFF 3
 -#define HCI_LE_STATES_ACTIVE_SCAN_MASTER_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_LE_STATES_ACTIVE_SCAN_MASTER_OFF] &   \
 -   HCI_SUPP_LE_STATES_ACTIVE_SCAN_MASTER_MASK)
 -
 -/* Passive Scan and Slave Role combination is supported. 0x000000004000000 */
 -#define HCI_SUPP_LE_STATES_PASS_SCAN_SLAVE_MASK 0x04
 -#define HCI_SUPP_LE_STATES_PASS_SCAN_SLAVE_OFF 3
 -#define HCI_LE_STATES_PASS_SCAN_SLAVE_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_LE_STATES_PASS_SCAN_SLAVE_OFF] &   \
 -   HCI_SUPP_LE_STATES_PASS_SCAN_SLAVE_MASK)
 -
 -/* Active Scan and Slave Role combination is supported. 0x000000008000000 */
 -#define HCI_SUPP_LE_STATES_ACTIVE_SCAN_SLAVE_MASK 0x08
 -#define HCI_SUPP_LE_STATES_ACTIVE_SCAN_SLAVE_OFF 3
 -#define HCI_LE_STATES_ACTIVE_SCAN_SLAVE_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_LE_STATES_ACTIVE_SCAN_SLAVE_OFF] &   \
 -   HCI_SUPP_LE_STATES_ACTIVE_SCAN_SLAVE_MASK)
 -
 -/* Link Layer Topology Added States Combo */
 -/* Initiating State and Master Role combination supported.
 -  Master Role and Master Role combination is also supported. 0x0000000010000000
 -  */
 -#define HCI_SUPP_LE_STATES_INIT_MASTER_MASK 0x10
 -#define HCI_SUPP_LE_STATES_INIT_MASTER_OFF 3
 -#define HCI_LE_STATES_INIT_MASTER_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_LE_STATES_INIT_MASTER_OFF] &   \
 -   HCI_SUPP_LE_STATES_INIT_MASTER_MASK)
 -
 -/* Low Duty Cycle Directed Advertising State . 0x0000000020000000 */
 -#define HCI_SUPP_LE_STATES_LO_DUTY_DIR_ADV_MASK 0x20
 -#define HCI_SUPP_LE_STATES_LO_DUTY_DIR_ADV_OFF 3
 -#define HCI_LE_STATES_LOW_DUTY_DIR_ADV_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_LE_STATES_LOW_DUTY_DIR_ADV_OFF] &   \
 -   HCI_SUPP_LE_STATES_LOW_DUTY_DIR_ADV_MASK)
 -
 -/* Low Duty Cycle Directed Advertising State and Passive scan combination.
 - * 0x0000000040000000 */
 -#define HCI_SUPP_LE_STATES_LO_DUTY_DIR_ADV_PASS_SCAN_MASK 0x40
 -#define HCI_SUPP_LE_STATES_LO_DUTY_DIR_ADV_PASS_SCAN_OFF 3
 -#define HCI_LE_STATES_LO_DUTY_DIR_ADV_PASS_SCAN_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_LE_STATES_LO_DUTY_DIR_ADV_PASS_SCAN_OFF] &   \
 -   HCI_SUPP_LE_STATES_LO_DUTY_DIR_ADV_PASS_SCAN_MASK)
 -
 -/* Low Duty Cycle Directed Advertising State and Active scan combination.
 - * 0x0000000080000000 */
 -#define HCI_SUPP_LE_STATES_LO_DUTY_DIR_ADV_ACTIVE_SCAN_MASK 0x80
 -#define HCI_SUPP_LE_STATES_LO_DUTY_DIR_ADV_ACTIVE_SCAN_OFF 3
 -#define HCI_LE_STATES_LO_DUTY_DIR_ADV_ACTIVE_SCAN_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_LE_STATES_LO_DUTY_DIR_ADV_ACTIVE_SCAN_OFF] &   \
 -   HCI_SUPP_LE_STATES_LO_DUTY_DIR_ADV_ACTIVE_SCAN_MASK)
 -
 -/* Connectable Advertising State and Initiating State combination supported.
 - * 0x0000000100000000 */
 -#define HCI_SUPP_LE_STATES_CONN_ADV_INIT_MASK 0x01
 -#define HCI_SUPP_LE_STATES_CONN_ADV_INIT_OFF 4
 -#define HCI_LE_STATES_CONN_ADV_INIT_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_LE_STATES_CONN_ADV_INIT_OFF] &   \
 -   HCI_SUPP_LE_STATES_CONN_ADV_INIT_MASK)
 -
 -/* High Duty Cycle Directed Advertising State and Initiating State combination
 - * supported. */
 -#define HCI_SUPP_LE_STATES_HI_DUTY_DIR_ADV_INIT_MASK 0x02
 -#define HCI_SUPP_LE_STATES_HI_DUTY_DIR_ADV_INIT_OFF 4
 -#define HCI_LE_STATES_HI_DUTY_DIR_ADV_INIT_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_LE_STATES_HI_DUTY_DIR_ADV_INIT_OFF] &   \
 -   HCI_SUPP_LE_STATES_HI_DUTY_DIR_ADV_INIT_MASK)
 -
 -/* Low Duty Cycle Directed Advertising State and Initiating State combination
 - * supported.*/
 -#define HCI_SUPP_LE_STATES_LO_DUTY_DIR_ADV_INIT_MASK 0x04
 -#define HCI_SUPP_LE_STATES_LO_DUTY_DIR_ADV_INIT_OFF 4
 -#define HCI_LE_STATES_LO_DUTY_DIR_ADV_INIT_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_LE_STATES_LO_DUTY_DIR_ADV_INIT_OFF] &   \
 -   HCI_SUPP_LE_STATES_LO_DUTY_DIR_ADV_INIT_MASK)
 -
 -/* Connectable Advertising State and Master Role combination supported.*/
 -#define HCI_SUPP_LE_STATES_CONN_ADV_MASTER_MASK 0x08
 -#define HCI_SUPP_LE_STATES_CONN_ADV_MASTER_OFF 4
 -#define HCI_LE_STATES_CONN_ADV_MASTER_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_LE_STATES_CONN_ADV_MASTER_OFF] &   \
 -   HCI_SUPP_LE_STATES_CONN_ADV_MASTER_MASK)
 -
 -/* High Duty Cycle Directed Advertising State and Master Role combination
 - * supported.*/
 -#define HCI_SUPP_LE_STATES_HI_DUTY_DIR_ADV_MASTER_MASK 0x10
 -#define HCI_SUPP_LE_STATES_HI_DUTY_DIR_ADV_MASTER_OFF 4
 -#define HCI_LE_STATES_HI_DUTY_DIR_ADV_MASTER_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_LE_STATES_HI_DUTY_DIR_ADV_MASTER_OFF] &   \
 -   HCI_SUPP_LE_STATES_HI_DUTY_DIR_ADV_MASTER_MASK)
 -
 -/* Low Duty Cycle Directed Advertising State and Master Role combination
 - * supported.*/
 -#define HCI_SUPP_LE_STATES_LO_DUTY_DIR_ADV_MASTER_MASK 0x20
 -#define HCI_SUPP_LE_STATES_LO_DUTY_DIR_ADV_MASTER_OFF 4
 -#define HCI_LE_STATES_LO_DUTY_DIR_ADV_MASTER_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_LE_STATES_LO_DUTY_DIR_ADV_MASTER_OFF] &   \
 -   HCI_SUPP_LE_STATES_LO_DUTY_DIR_ADV_MASTER_MASK)
 -
 -/* Connectable Advertising State and Slave Role combination supported. */
 -#define HCI_SUPP_LE_STATES_CONN_ADV_SLAVE_MASK 0x40
 -#define HCI_SUPP_LE_STATES_CONN_ADV_SLAVE_OFF 4
 -#define HCI_LE_STATES_CONN_ADV_SLAVE_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_LE_STATES_CONN_ADV_SLAVE_OFF] &   \
 -   HCI_SUPP_LE_STATES_CONN_ADV_SLAVE_MASK)
 -
 -/* High Duty Cycle Directed Advertising State and slave Role combination
 - * supported.*/
 -#define HCI_SUPP_LE_STATES_HI_DUTY_DIR_ADV_SLAVE_MASK 0x80
 -#define HCI_SUPP_LE_STATES_HI_DUTY_DIR_ADV_SLAVE_OFF 4
 -#define HCI_LE_STATES_HI_DUTY_DIR_ADV_SLAVE_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_LE_STATES_HI_DUTY_DIR_ADV_SLAVE_OFF] &   \
 -   HCI_SUPP_LE_STATES_HI_DUTY_DIR_ADV_SLAVE_MASK)
 -
 -/* Low Duty Cycle Directed Advertising State and slave Role combination
 - * supported.*/
 -#define HCI_SUPP_LE_STATES_LO_DUTY_DIR_ADV_SLAVE_MASK 0x01
 -#define HCI_SUPP_LE_STATES_LO_DUTY_DIR_ADV_SLAVE_OFF 5
 -#define HCI_LE_STATES_LO_DUTY_DIR_ADV_SLAVE_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_LE_STATES_LO_DUTY_DIR_ADV_SLAVE_OFF] &   \
 -   HCI_SUPP_LE_STATES_LO_DUTY_DIR_ADV_SLAVE_MASK)
 -
 -/* Initiating State and Slave Role combination supported.
 -   Master Role and Slave Role combination also supported.
 - */
 -#define HCI_SUPP_LE_STATES_INIT_MASTER_SLAVE_MASK 0x02
 -#define HCI_SUPP_LE_STATES_INIT_MASTER_SLAVE_OFF 5
 -#define HCI_LE_STATES_INIT_MASTER_SLAVE_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_LE_STATES_INIT_MASTER_SLAVE_OFF] &   \
 -   HCI_SUPP_LE_STATES_INIT_MASTER_SLAVE_MASK)
 +constexpr uint8_t HCI_LE_STATES_NON_CONN_ADV_BIT = 0;
 +constexpr uint8_t HCI_LE_STATES_SCAN_ADV_BIT = 1;
 +constexpr uint8_t HCI_LE_STATES_CONN_ADV_BIT = 2;
 +constexpr uint8_t HCI_LE_STATES_HI_DUTY_DIR_ADV_BIT = 3;
 +constexpr uint8_t HCI_LE_STATES_PASS_SCAN_BIT = 4;
 +constexpr uint8_t HCI_LE_STATES_ACTIVE_SCAN_BIT = 5;
 +constexpr uint8_t HCI_LE_STATES_INIT_BIT = 6;
 +constexpr uint8_t HCI_LE_STATES_SLAVE_BIT = 7;
 +constexpr uint8_t HCI_LE_STATES_NON_CONN_ADV_PASS_SCAN_BIT = 8;
 +constexpr uint8_t HCI_LE_STATES_SCAN_ADV_PASS_SCAN_BIT = 9;
 +constexpr uint8_t HCI_LE_STATES_CONN_ADV_PASS_SCAN_BIT = 10;
 +constexpr uint8_t HCI_LE_STATES_HI_DUTY_DIR_ADV_PASS_SCAN_BIT = 11;
 +constexpr uint8_t HCI_LE_STATES_NON_CONN_ADV_ACTIVE_SCAN_BIT = 12;
 +constexpr uint8_t HCI_LE_STATES_SCAN_ADV_ACTIVE_SCAN_BIT = 13;
 +constexpr uint8_t HCI_LE_STATES_CONN_ADV_ACTIVE_SCAN_BIT = 14;
 +constexpr uint8_t HCI_LE_STATES_HI_DUTY_DIR_ADV_ACTIVE_SCAN_BIT = 15;
 +constexpr uint8_t HCI_LE_STATES_NON_CONN_INIT_BIT = 16;
 +constexpr uint8_t HCI_LE_STATES_SCAN_ADV_INIT_BIT = 17;
 +constexpr uint8_t HCI_LE_STATES_NON_CONN_ADV_MASTER_BIT = 18;
 +constexpr uint8_t HCI_LE_STATES_SCAN_ADV_MASTER_BIT = 19;
 +constexpr uint8_t HCI_LE_STATES_NON_CONN_ADV_SLAVE_BIT = 20;
 +constexpr uint8_t HCI_LE_STATES_SCAN_ADV_SLAVE_BIT = 21;
 +constexpr uint8_t HCI_LE_STATES_PASS_SCAN_INIT_BIT = 22;
 +constexpr uint8_t HCI_LE_STATES_ACTIVE_SCAN_INIT_BIT = 23;
 +constexpr uint8_t HCI_LE_STATES_PASS_SCAN_MASTER_BIT = 24;
 +constexpr uint8_t HCI_LE_STATES_ACTIVE_SCAN_MASTER_BIT = 25;
 +constexpr uint8_t HCI_LE_STATES_PASS_SCAN_SLAVE_BIT = 26;
 +constexpr uint8_t HCI_LE_STATES_ACTIVE_SCAN_SLAVE_BIT = 27;
 +constexpr uint8_t HCI_LE_STATES_INIT_MASTER_BIT = 28;
 +constexpr uint8_t HCI_LE_STATES_LOW_DUTY_DIR_ADV_BIT = 29;
 +constexpr uint8_t HCI_LE_STATES_LO_DUTY_DIR_ADV_PASS_SCAN_BIT = 30;
 +constexpr uint8_t HCI_LE_STATES_LO_DUTY_DIR_ADV_ACTIVE_SCAN_BIT = 31;
 +constexpr uint8_t HCI_LE_STATES_CONN_ADV_INIT_BIT = 32;
 +constexpr uint8_t HCI_LE_STATES_HI_DUTY_DIR_ADV_INIT_BIT = 33;
 +constexpr uint8_t HCI_LE_STATES_LO_DUTY_DIR_ADV_INIT_BIT = 34;
 +constexpr uint8_t HCI_LE_STATES_CONN_ADV_MASTER_BIT = 35;
 +constexpr uint8_t HCI_LE_STATES_HI_DUTY_DIR_ADV_MASTER_BIT = 36;
 +constexpr uint8_t HCI_LE_STATES_LO_DUTY_DIR_ADV_MASTER_BIT = 37;
 +constexpr uint8_t HCI_LE_STATES_CONN_ADV_SLAVE_BIT = 38;
 +constexpr uint8_t HCI_LE_STATES_HI_DUTY_DIR_ADV_SLAVE_BIT = 39;
 +constexpr uint8_t HCI_LE_STATES_LO_DUTY_DIR_ADV_SLAVE_BIT = 40;
 +constexpr uint8_t HCI_LE_STATES_INIT_MASTER_SLAVE_BIT = 41;
  
  /*
   *  Definitions for HCI Events
  #define HCI_BLE_DATA_LENGTH_CHANGE_EVT 0x07
  #define HCI_BLE_ENHANCED_CONN_COMPLETE_EVT 0x0a
  #define HCI_BLE_DIRECT_ADV_EVT 0x0b
 -#define HCI_LE_PHY_UPDATE_COMPLETE_EVT 0x0C
 +#define HCI_BLE_PHY_UPDATE_COMPLETE_EVT 0x0c
  #define HCI_LE_EXTENDED_ADVERTISING_REPORT_EVT 0x0D
  #define HCI_LE_ADVERTISING_SET_TERMINATED_EVT 0x12
  
    (((x)&HCI_AIR_CODING_FORMAT_MASK) == HCI_AIR_CODING_FORMAT_TRANSPNT)
  
  /* Retransmit timer definitions in 0.625 */
 -#define HCI_MAX_AUTO_FLUSH_TOUT 0x07FF
 -#define HCI_DEFAULT_AUTO_FLUSH_TOUT 0 /* No auto flush */
 +#define HCI_MAX_AUTOMATIC_FLUSH_TIMEOUT 0x07FF
 +#define HCI_DEFAULT_AUTOMATIC_FLUSH_TIMEOUT 0 /* No auto flush */
  
  /* Broadcast retransmitions */
  #define HCI_DEFAULT_NUM_BCAST_RETRAN 1
@@@ -1296,347 -1567,1631 +1296,345 @@@ typedef struct 
  
  #define HCI_FEATURE_BYTES_PER_PAGE 8
  
- #define HCI_EXT_FEATURES_SUCCESS_EVT_LEN 13
  #define HCI_FEATURES_KNOWN(x) \
    (((x)[0] | (x)[1] | (x)[2] | (x)[3] | (x)[4] | (x)[5] | (x)[6] | (x)[7]) != 0)
  
 -/*
 - *   LMP features encoding - page 0
 -*/
 -#define HCI_FEATURE_3_SLOT_PACKETS_MASK 0x01
 -#define HCI_FEATURE_3_SLOT_PACKETS_OFF 0
 -#define HCI_3_SLOT_PACKETS_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_3_SLOT_PACKETS_OFF] & HCI_FEATURE_3_SLOT_PACKETS_MASK)
 -
 -#define HCI_FEATURE_5_SLOT_PACKETS_MASK 0x02
 -#define HCI_FEATURE_5_SLOT_PACKETS_OFF 0
 -#define HCI_5_SLOT_PACKETS_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_5_SLOT_PACKETS_OFF] & HCI_FEATURE_5_SLOT_PACKETS_MASK)
 -
 -#define HCI_FEATURE_ENCRYPTION_MASK 0x04
 -#define HCI_FEATURE_ENCRYPTION_OFF 0
 -#define HCI_ENCRYPTION_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_ENCRYPTION_OFF] & HCI_FEATURE_ENCRYPTION_MASK)
 -
 -#define HCI_FEATURE_SLOT_OFFSET_MASK 0x08
 -#define HCI_FEATURE_SLOT_OFFSET_OFF 0
 -#define HCI_SLOT_OFFSET_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_SLOT_OFFSET_OFF] & HCI_FEATURE_SLOT_OFFSET_MASK)
 -
 -#define HCI_FEATURE_TIMING_ACC_MASK 0x10
 -#define HCI_FEATURE_TIMING_ACC_OFF 0
 -#define HCI_TIMING_ACC_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_TIMING_ACC_OFF] & HCI_FEATURE_TIMING_ACC_MASK)
 -
 -#define HCI_FEATURE_SWITCH_MASK 0x20
 -#define HCI_FEATURE_SWITCH_OFF 0
 -#define HCI_SWITCH_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_SWITCH_OFF] & HCI_FEATURE_SWITCH_MASK)
 -
 -#define HCI_FEATURE_HOLD_MODE_MASK 0x40
 -#define HCI_FEATURE_HOLD_MODE_OFF 0
 -#define HCI_HOLD_MODE_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_HOLD_MODE_OFF] & HCI_FEATURE_HOLD_MODE_MASK)
 -
 -#define HCI_FEATURE_SNIFF_MODE_MASK 0x80
 -#define HCI_FEATURE_SNIFF_MODE_OFF 0
 -#define HCI_SNIFF_MODE_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_SNIFF_MODE_OFF] & HCI_FEATURE_SNIFF_MODE_MASK)
 -
 -#define HCI_FEATURE_PARK_MODE_MASK 0x01
 -#define HCI_FEATURE_PARK_MODE_OFF 1
 -#define HCI_PARK_MODE_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_PARK_MODE_OFF] & HCI_FEATURE_PARK_MODE_MASK)
 -
 -#define HCI_FEATURE_RSSI_MASK 0x02
 -#define HCI_FEATURE_RSSI_OFF 1
 -#define HCI_RSSI_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_RSSI_OFF] & HCI_FEATURE_RSSI_MASK)
 -
 -#define HCI_FEATURE_CQM_DATA_RATE_MASK 0x04
 -#define HCI_FEATURE_CQM_DATA_RATE_OFF 1
 -#define HCI_CQM_DATA_RATE_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_CQM_DATA_RATE_OFF] & HCI_FEATURE_CQM_DATA_RATE_MASK)
 -
 -#define HCI_FEATURE_SCO_LINK_MASK 0x08
 -#define HCI_FEATURE_SCO_LINK_OFF 1
 -#define HCI_SCO_LINK_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_SCO_LINK_OFF] & HCI_FEATURE_SCO_LINK_MASK)
 -
 -#define HCI_FEATURE_HV2_PACKETS_MASK 0x10
 -#define HCI_FEATURE_HV2_PACKETS_OFF 1
 -#define HCI_HV2_PACKETS_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_HV2_PACKETS_OFF] & HCI_FEATURE_HV2_PACKETS_MASK)
 -
 -#define HCI_FEATURE_HV3_PACKETS_MASK 0x20
 -#define HCI_FEATURE_HV3_PACKETS_OFF 1
 -#define HCI_HV3_PACKETS_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_HV3_PACKETS_OFF] & HCI_FEATURE_HV3_PACKETS_MASK)
 -
 -#define HCI_FEATURE_U_LAW_MASK 0x40
 -#define HCI_FEATURE_U_LAW_OFF 1
 -#define HCI_LMP_U_LAW_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_U_LAW_OFF] & HCI_FEATURE_U_LAW_MASK)
 -
 -#define HCI_FEATURE_A_LAW_MASK 0x80
 -#define HCI_FEATURE_A_LAW_OFF 1
 -#define HCI_LMP_A_LAW_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_A_LAW_OFF] & HCI_FEATURE_A_LAW_MASK)
 -
 -#define HCI_FEATURE_CVSD_MASK 0x01
 -#define HCI_FEATURE_CVSD_OFF 2
 -#define HCI_LMP_CVSD_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_CVSD_OFF] & HCI_FEATURE_CVSD_MASK)
 -
 -#define HCI_FEATURE_PAGING_SCHEME_MASK 0x02
 -#define HCI_FEATURE_PAGING_SCHEME_OFF 2
 -#define HCI_PAGING_SCHEME_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_PAGING_SCHEME_OFF] & HCI_FEATURE_PAGING_SCHEME_MASK)
 -
 -#define HCI_FEATURE_POWER_CTRL_MASK 0x04
 -#define HCI_FEATURE_POWER_CTRL_OFF 2
 -#define HCI_POWER_CTRL_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_POWER_CTRL_OFF] & HCI_FEATURE_POWER_CTRL_MASK)
 -
 -#define HCI_FEATURE_TRANSPNT_MASK 0x08
 -#define HCI_FEATURE_TRANSPNT_OFF 2
 -#define HCI_LMP_TRANSPNT_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_TRANSPNT_OFF] & HCI_FEATURE_TRANSPNT_MASK)
 -
 -#define HCI_FEATURE_FLOW_CTRL_LAG_MASK 0x70
 -#define HCI_FEATURE_FLOW_CTRL_LAG_OFF 2
 -#define HCI_FLOW_CTRL_LAG_VALUE(x) \
 -  (((x)[HCI_FEATURE_FLOW_CTRL_LAG_OFF] & HCI_FEATURE_FLOW_CTRL_LAG_MASK) >> 4)
 -
 -#define HCI_FEATURE_BROADCAST_ENC_MASK 0x80
 -#define HCI_FEATURE_BROADCAST_ENC_OFF 2
 -#define HCI_LMP_BCAST_ENC_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_BROADCAST_ENC_OFF] & HCI_FEATURE_BROADCAST_ENC_MASK)
 -
 -#define HCI_FEATURE_SCATTER_MODE_MASK 0x01
 -#define HCI_FEATURE_SCATTER_MODE_OFF 3
 -#define HCI_LMP_SCATTER_MODE_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_SCATTER_MODE_OFF] & HCI_FEATURE_SCATTER_MODE_MASK)
 -
 -#define HCI_FEATURE_EDR_ACL_2MPS_MASK 0x02
 -#define HCI_FEATURE_EDR_ACL_2MPS_OFF 3
 -#define HCI_EDR_ACL_2MPS_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_EDR_ACL_2MPS_OFF] & HCI_FEATURE_EDR_ACL_2MPS_MASK)
 -
 -#define HCI_FEATURE_EDR_ACL_3MPS_MASK 0x04
 -#define HCI_FEATURE_EDR_ACL_3MPS_OFF 3
 -#define HCI_EDR_ACL_3MPS_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_EDR_ACL_3MPS_OFF] & HCI_FEATURE_EDR_ACL_3MPS_MASK)
 -
 -#define HCI_FEATURE_ENHANCED_INQ_MASK 0x08
 -#define HCI_FEATURE_ENHANCED_INQ_OFF 3
 -#define HCI_ENHANCED_INQ_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_ENHANCED_INQ_OFF] & HCI_FEATURE_ENHANCED_INQ_MASK)
 -
 -#define HCI_FEATURE_INTERLACED_INQ_SCAN_MASK 0x10
 -#define HCI_FEATURE_INTERLACED_INQ_SCAN_OFF 3
 -#define HCI_LMP_INTERLACED_INQ_SCAN_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_INTERLACED_INQ_SCAN_OFF] &    \
 -   HCI_FEATURE_INTERLACED_INQ_SCAN_MASK)
 -
 -#define HCI_FEATURE_INTERLACED_PAGE_SCAN_MASK 0x20
 -#define HCI_FEATURE_INTERLACED_PAGE_SCAN_OFF 3
 -#define HCI_LMP_INTERLACED_PAGE_SCAN_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_INTERLACED_PAGE_SCAN_OFF] &    \
 -   HCI_FEATURE_INTERLACED_PAGE_SCAN_MASK)
 -
 -#define HCI_FEATURE_INQ_RSSI_MASK 0x40
 -#define HCI_FEATURE_INQ_RSSI_OFF 3
 -#define HCI_LMP_INQ_RSSI_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_INQ_RSSI_OFF] & HCI_FEATURE_INQ_RSSI_MASK)
 -
 -#define HCI_FEATURE_ESCO_EV3_MASK 0x80
 -#define HCI_FEATURE_ESCO_EV3_OFF 3
 -#define HCI_ESCO_EV3_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_ESCO_EV3_OFF] & HCI_FEATURE_ESCO_EV3_MASK)
 -
 -#define HCI_FEATURE_ESCO_EV4_MASK 0x01
 -#define HCI_FEATURE_ESCO_EV4_OFF 4
 -#define HCI_ESCO_EV4_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_ESCO_EV4_OFF] & HCI_FEATURE_ESCO_EV4_MASK)
 -
 -#define HCI_FEATURE_ESCO_EV5_MASK 0x02
 -#define HCI_FEATURE_ESCO_EV5_OFF 4
 -#define HCI_ESCO_EV5_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_ESCO_EV5_OFF] & HCI_FEATURE_ESCO_EV5_MASK)
 -
 -#define HCI_FEATURE_ABSENCE_MASKS_MASK 0x04
 -#define HCI_FEATURE_ABSENCE_MASKS_OFF 4
 -#define HCI_LMP_ABSENCE_MASKS_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_ABSENCE_MASKS_OFF] & HCI_FEATURE_ABSENCE_MASKS_MASK)
 -
 -#define HCI_FEATURE_AFH_CAP_SLAVE_MASK 0x08
 -#define HCI_FEATURE_AFH_CAP_SLAVE_OFF 4
 -#define HCI_LMP_AFH_CAP_SLAVE_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_AFH_CAP_SLAVE_OFF] & HCI_FEATURE_AFH_CAP_SLAVE_MASK)
 -
 -#define HCI_FEATURE_AFH_CLASS_SLAVE_MASK 0x10
 -#define HCI_FEATURE_AFH_CLASS_SLAVE_OFF 4
 -#define HCI_LMP_AFH_CLASS_SLAVE_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_AFH_CLASS_SLAVE_OFF] & HCI_FEATURE_AFH_CLASS_SLAVE_MASK)
 -
 -#define HCI_FEATURE_BREDR_NOT_SPT_MASK 0x20
 -#define HCI_FEATURE_BREDR_NOT_SPT_OFF 4
 -#define HCI_BREDR_NOT_SPT_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_BREDR_NOT_SPT_OFF] & HCI_FEATURE_BREDR_NOT_SPT_MASK)
 -
 -#define HCI_FEATURE_LE_SPT_MASK 0x40
 -#define HCI_FEATURE_LE_SPT_OFF 4
 -#define HCI_LE_SPT_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_LE_SPT_OFF] & HCI_FEATURE_LE_SPT_MASK)
 -
 -#define HCI_FEATURE_3_SLOT_EDR_ACL_MASK 0x80
 -#define HCI_FEATURE_3_SLOT_EDR_ACL_OFF 4
 -#define HCI_3_SLOT_EDR_ACL_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_3_SLOT_EDR_ACL_OFF] & HCI_FEATURE_3_SLOT_EDR_ACL_MASK)
 -
 -#define HCI_FEATURE_5_SLOT_EDR_ACL_MASK 0x01
 -#define HCI_FEATURE_5_SLOT_EDR_ACL_OFF 5
 -#define HCI_5_SLOT_EDR_ACL_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_5_SLOT_EDR_ACL_OFF] & HCI_FEATURE_5_SLOT_EDR_ACL_MASK)
 -
 -#define HCI_FEATURE_SNIFF_SUB_RATE_MASK 0x02
 -#define HCI_FEATURE_SNIFF_SUB_RATE_OFF 5
 -#define HCI_SNIFF_SUB_RATE_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_SNIFF_SUB_RATE_OFF] & HCI_FEATURE_SNIFF_SUB_RATE_MASK)
 -
 -#define HCI_FEATURE_ATOMIC_ENCRYPT_MASK 0x04
 -#define HCI_FEATURE_ATOMIC_ENCRYPT_OFF 5
 -#define HCI_ATOMIC_ENCRYPT_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_ATOMIC_ENCRYPT_OFF] & HCI_FEATURE_ATOMIC_ENCRYPT_MASK)
 -
 -#define HCI_FEATURE_AFH_CAP_MASTR_MASK 0x08
 -#define HCI_FEATURE_AFH_CAP_MASTR_OFF 5
 -#define HCI_LMP_AFH_CAP_MASTR_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_AFH_CAP_MASTR_OFF] & HCI_FEATURE_AFH_CAP_MASTR_MASK)
 -
 -#define HCI_FEATURE_AFH_CLASS_MASTR_MASK 0x10
 -#define HCI_FEATURE_AFH_CLASS_MASTR_OFF 5
 -#define HCI_LMP_AFH_CLASS_MASTR_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_AFH_CLASS_MASTR_OFF] & HCI_FEATURE_AFH_CLASS_MASTR_MASK)
 -
 -#define HCI_FEATURE_EDR_ESCO_2MPS_MASK 0x20
 -#define HCI_FEATURE_EDR_ESCO_2MPS_OFF 5
 -#define HCI_EDR_ESCO_2MPS_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_EDR_ESCO_2MPS_OFF] & HCI_FEATURE_EDR_ESCO_2MPS_MASK)
 -
 -#define HCI_FEATURE_EDR_ESCO_3MPS_MASK 0x40
 -#define HCI_FEATURE_EDR_ESCO_3MPS_OFF 5
 -#define HCI_EDR_ESCO_3MPS_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_EDR_ESCO_3MPS_OFF] & HCI_FEATURE_EDR_ESCO_3MPS_MASK)
 -
 -#define HCI_FEATURE_3_SLOT_EDR_ESCO_MASK 0x80
 -#define HCI_FEATURE_3_SLOT_EDR_ESCO_OFF 5
 -#define HCI_3_SLOT_EDR_ESCO_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_3_SLOT_EDR_ESCO_OFF] & HCI_FEATURE_3_SLOT_EDR_ESCO_MASK)
 -
 -#define HCI_FEATURE_EXT_INQ_RSP_MASK 0x01
 -#define HCI_FEATURE_EXT_INQ_RSP_OFF 6
 -#define HCI_EXT_INQ_RSP_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_EXT_INQ_RSP_OFF] & HCI_FEATURE_EXT_INQ_RSP_MASK)
 -
 -#if 1 /* TOKYO spec definition */
 -#define HCI_FEATURE_SIMUL_LE_BREDR_MASK 0x02
 -#define HCI_FEATURE_SIMUL_LE_BREDR_OFF 6
 -#define HCI_SIMUL_LE_BREDR_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_SIMUL_LE_BREDR_OFF] & HCI_FEATURE_SIMUL_LE_BREDR_MASK)
 -
 -#else
 -#define HCI_FEATURE_ANUM_PIN_AWARE_MASK 0x02
 -#define HCI_FEATURE_ANUM_PIN_AWARE_OFF 6
 -#define HCI_ANUM_PIN_AWARE_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_ANUM_PIN_AWARE_OFF] & HCI_FEATURE_ANUM_PIN_AWARE_MASK)
 -#endif
 -
 -#define HCI_FEATURE_ANUM_PIN_CAP_MASK 0x04
 -#define HCI_FEATURE_ANUM_PIN_CAP_OFF 6
 -#define HCI_ANUM_PIN_CAP_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_ANUM_PIN_CAP_OFF] & HCI_FEATURE_ANUM_PIN_CAP_MASK)
 -
 -#define HCI_FEATURE_SIMPLE_PAIRING_MASK 0x08
 -#define HCI_FEATURE_SIMPLE_PAIRING_OFF 6
 -#define HCI_SIMPLE_PAIRING_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_SIMPLE_PAIRING_OFF] & HCI_FEATURE_SIMPLE_PAIRING_MASK)
 -
 -#define HCI_FEATURE_ENCAP_PDU_MASK 0x10
 -#define HCI_FEATURE_ENCAP_PDU_OFF 6
 -#define HCI_ENCAP_PDU_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_ENCAP_PDU_OFF] & HCI_FEATURE_ENCAP_PDU_MASK)
 -
 -#define HCI_FEATURE_ERROR_DATA_MASK 0x20
 -#define HCI_FEATURE_ERROR_DATA_OFF 6
 -#define HCI_ERROR_DATA_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_ERROR_DATA_OFF] & HCI_FEATURE_ERROR_DATA_MASK)
 -
 -#define HCI_FEATURE_NON_FLUSHABLE_PB_MASK 0x40
 -#define HCI_FEATURE_NON_FLUSHABLE_PB_OFF 6
 -
 +/* LMP features encoding - page 0 */
 +#define HCI_3_SLOT_PACKETS_SUPPORTED(x) ((x)[0] & 0x01)
 +#define HCI_5_SLOT_PACKETS_SUPPORTED(x) ((x)[0] & 0x02)
 +#define HCI_ENCRYPTION_SUPPORTED(x) ((x)[0] & 0x04)
 +#define HCI_SLOT_OFFSET_SUPPORTED(x) ((x)[0] & 0x08)
 +#define HCI_TIMING_ACC_SUPPORTED(x) ((x)[0] & 0x10)
 +#define HCI_SWITCH_SUPPORTED(x) ((x)[0] & 0x20)
 +#define HCI_HOLD_MODE_SUPPORTED(x) ((x)[0] & 0x40)
 +#define HCI_SNIFF_MODE_SUPPORTED(x) ((x)[0] & 0x80)
 +
 +#define HCI_PARK_MODE_SUPPORTED(x) ((x)[1] & 0x01)
 +#define HCI_RSSI_SUPPORTED(x) ((x)[1] & 0x02)
 +#define HCI_CQM_DATA_RATE_SUPPORTED(x) ((x)[1] & 0x04)
 +#define HCI_SCO_LINK_SUPPORTED(x) ((x)[1] & 0x08)
 +#define HCI_HV2_PACKETS_SUPPORTED(x) ((x)[1] & 0x10)
 +#define HCI_HV3_PACKETS_SUPPORTED(x) ((x)[1] & 0x20)
 +#define HCI_LMP_U_LAW_SUPPORTED(x) ((x)[1] & 0x40)
 +#define HCI_LMP_A_LAW_SUPPORTED(x) ((x)[1] & 0x80)
 +
 +#define HCI_LMP_CVSD_SUPPORTED(x) ((x)[2] & 0x01)
 +#define HCI_PAGING_SCHEME_SUPPORTED(x) ((x)[2] & 0x02)
 +#define HCI_POWER_CTRL_SUPPORTED(x) ((x)[2] & 0x04)
 +#define HCI_LMP_TRANSPNT_SUPPORTED(x) ((x)[2] & 0x08)
 +#define HCI_FLOW_CTRL_LAG_VALUE(x) (((x)[2] & 0x70) >> 4)
 +#define HCI_LMP_BCAST_ENC_SUPPORTED(x) ((x)[2] & 0x80)
 +
 +#define HCI_LMP_SCATTER_MODE_SUPPORTED(x) ((x)[3] & 0x01)
 +#define HCI_EDR_ACL_2MPS_SUPPORTED(x) ((x)[3] & 0x02)
 +#define HCI_EDR_ACL_3MPS_SUPPORTED(x) ((x)[3] & 0x04)
 +#define HCI_ENHANCED_INQ_SUPPORTED(x) ((x)[3] & 0x08)
 +#define HCI_LMP_INTERLACED_INQ_SCAN_SUPPORTED(x) ((x)[3] & 0x10)
 +#define HCI_LMP_INTERLACED_PAGE_SCAN_SUPPORTED(x) ((x)[3] & 0x20)
 +#define HCI_LMP_INQ_RSSI_SUPPORTED(x) ((x)[3] & 0x40)
 +#define HCI_ESCO_EV3_SUPPORTED(x) ((x)[3] & 0x80)
 +
 +#define HCI_ESCO_EV4_SUPPORTED(x) ((x)[4] & 0x01)
 +#define HCI_ESCO_EV5_SUPPORTED(x) ((x)[4] & 0x02)
 +#define HCI_LMP_ABSENCE_MASKS_SUPPORTED(x) ((x)[4] & 0x04)
 +#define HCI_LMP_AFH_CAP_SLAVE_SUPPORTED(x) ((x)[4] & 0x08)
 +#define HCI_LMP_AFH_CLASS_SLAVE_SUPPORTED(x) ((x)[4] & 0x10)
 +#define HCI_BREDR_NOT_SPT_SUPPORTED(x) ((x)[4] & 0x20)
 +#define HCI_LE_SPT_SUPPORTED(x) ((x)[4] & 0x40)
 +#define HCI_3_SLOT_EDR_ACL_SUPPORTED(x) ((x)[4] & 0x80)
 +
 +#define HCI_5_SLOT_EDR_ACL_SUPPORTED(x) ((x)[5] & 0x01)
 +#define HCI_SNIFF_SUB_RATE_SUPPORTED(x) ((x)[5] & 0x02)
 +#define HCI_ATOMIC_ENCRYPT_SUPPORTED(x) ((x)[5] & 0x04)
 +#define HCI_LMP_AFH_CAP_MASTR_SUPPORTED(x) ((x)[5] & 0x08)
 +#define HCI_LMP_AFH_CLASS_MASTR_SUPPORTED(x) ((x)[5] & 0x10)
 +#define HCI_EDR_ESCO_2MPS_SUPPORTED(x) ((x)[5] & 0x20)
 +#define HCI_EDR_ESCO_3MPS_SUPPORTED(x) ((x)[5] & 0x40)
 +#define HCI_3_SLOT_EDR_ESCO_SUPPORTED(x) ((x)[5] & 0x80)
 +
 +#define HCI_EXT_INQ_RSP_SUPPORTED(x) ((x)[6] & 0x01)
 +#define HCI_SIMUL_LE_BREDR_SUPPORTED(x) ((x)[6] & 0x02)
 +#define HCI_ANUM_PIN_CAP_SUPPORTED(x) ((x)[6] & 0x04)
 +#define HCI_SIMPLE_PAIRING_SUPPORTED(x) ((x)[6] & 0x08)
 +#define HCI_ENCAP_PDU_SUPPORTED(x) ((x)[6] & 0x10)
 +#define HCI_ERROR_DATA_SUPPORTED(x) ((x)[6] & 0x20)
  /* This feature is causing frequent link drops when doing call switch with
   * certain av/hfp headsets */
 -#define HCI_NON_FLUSHABLE_PB_SUPPORTED(x) \
 -  (0)  //((x)[HCI_FEATURE_NON_FLUSHABLE_PB_OFF] &
 -       // HCI_FEATURE_NON_FLUSHABLE_PB_MASK)
 -
 -#define HCI_FEATURE_LINK_SUP_TO_EVT_MASK 0x01
 -#define HCI_FEATURE_LINK_SUP_TO_EVT_OFF 7
 -#define HCI_LINK_SUP_TO_EVT_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_LINK_SUP_TO_EVT_OFF] & HCI_FEATURE_LINK_SUP_TO_EVT_MASK)
 -
 -#define HCI_FEATURE_INQ_RESP_TX_MASK 0x02
 -#define HCI_FEATURE_INQ_RESP_TX_OFF 7
 -#define HCI_INQ_RESP_TX_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_INQ_RESP_TX_OFF] & HCI_FEATURE_INQ_RESP_TX_MASK)
 -
 -#define HCI_FEATURE_EXTENDED_MASK 0x80
 -#define HCI_FEATURE_EXTENDED_OFF 7
 -#define HCI_LMP_EXTENDED_SUPPORTED(x) \
 -  ((x)[HCI_FEATURE_EXTENDED_OFF] & HCI_FEATURE_EXTENDED_MASK)
 -
 -/*
 - *   LMP features encoding - page 1
 -*/
 -#define HCI_EXT_FEATURE_SSP_HOST_MASK 0x01
 -#define HCI_EXT_FEATURE_SSP_HOST_OFF 0
 -#define HCI_SSP_HOST_SUPPORTED(x) \
 -  ((x)[HCI_EXT_FEATURE_SSP_HOST_OFF] & HCI_EXT_FEATURE_SSP_HOST_MASK)
 -
 -#define HCI_EXT_FEATURE_LE_HOST_MASK 0x02
 -#define HCI_EXT_FEATURE_LE_HOST_OFF 0
 -#define HCI_LE_HOST_SUPPORTED(x) \
 -  ((x)[HCI_EXT_FEATURE_LE_HOST_OFF] & HCI_EXT_FEATURE_LE_HOST_MASK)
 -
 -#define HCI_EXT_FEATURE_SIMUL_DUMO_HOST_MASK 0x04
 -#define HCI_EXT_FEATURE_SIMUL_DUMO_HOST_OFF 0
 -#define HCI_SIMUL_DUMO_HOST_SUPPORTED(x)      \
 -  ((x)[HCI_EXT_FEATURE_SIMUL_DUMO_HOST_OFF] & \
 -   HCI_EXT_FEATURE_SIMUL_DUMO_HOST_MASK)
 -
 -#define HCI_EXT_FEATURE_SC_HOST_MASK 0x08
 -#define HCI_EXT_FEATURE_SC_HOST_OFF 0
 -#define HCI_SC_HOST_SUPPORTED(x) \
 -  ((x)[HCI_EXT_FEATURE_SC_HOST_OFF] & HCI_EXT_FEATURE_SC_HOST_MASK)
 -
 -/*
 - *   LMP features encoding - page 2
 -*/
 -#define HCI_EXT_FEATURE_CSB_MASTER_MASK 0x01
 -#define HCI_EXT_FEATURE_CSB_MASTER_OFF 0
 -#define HCI_CSB_MASTER_SUPPORTED(x) \
 -  ((x)[HCI_EXT_FEATURE_CSB_MASTER_OFF] & HCI_EXT_FEATURE_CSB_MASTER_MASK)
 -
 -#define HCI_EXT_FEATURE_CSB_SLAVE_MASK 0x02
 -#define HCI_EXT_FEATURE_CSB_SLAVE_OFF 0
 -#define HCI_CSB_SLAVE_SUPPORTED(x) \
 -  ((x)[HCI_EXT_FEATURE_CSB_SLAVE_OFF] & HCI_EXT_FEATURE_CSB_SLAVE_MASK)
 -
 -#define HCI_EXT_FEATURE_SYNC_TRAIN_MASTER_MASK 0x04
 -#define HCI_EXT_FEATURE_SYNC_TRAIN_MASTER_OFF 0
 -#define HCI_SYNC_TRAIN_MASTER_SUPPORTED(x)      \
 -  ((x)[HCI_EXT_FEATURE_SYNC_TRAIN_MASTER_OFF] & \
 -   HCI_EXT_FEATURE_SYNC_TRAIN_MASTER_MASK)
 -
 -#define HCI_EXT_FEATURE_SYNC_SCAN_SLAVE_MASK 0x08
 -#define HCI_EXT_FEATURE_SYNC_SCAN_SLAVE_OFF 0
 -#define HCI_SYNC_SCAN_SLAVE_SUPPORTED(x)      \
 -  ((x)[HCI_EXT_FEATURE_SYNC_SCAN_SLAVE_OFF] & \
 -   HCI_EXT_FEATURE_SYNC_SCAN_SLAVE_MASK)
 -
 -#define HCI_EXT_FEATURE_INQ_RESP_NOTIF_MASK 0x10
 -#define HCI_EXT_FEATURE_INQ_RESP_NOTIF_OFF 0
 -#define HCI_INQ_RESP_NOTIF_SUPPORTED(x)      \
 -  ((x)[HCI_EXT_FEATURE_INQ_RESP_NOTIF_OFF] & \
 -   HCI_EXT_FEATURE_INQ_RESP_NOTIF_MASK)
 -
 -#define HCI_EXT_FEATURE_SC_CTRLR_MASK 0x01
 -#define HCI_EXT_FEATURE_SC_CTRLR_OFF 1
 -#define HCI_SC_CTRLR_SUPPORTED(x) \
 -  ((x)[HCI_EXT_FEATURE_SC_CTRLR_OFF] & HCI_EXT_FEATURE_SC_CTRLR_MASK)
 -
 -#define HCI_EXT_FEATURE_PING_MASK 0x02
 -#define HCI_EXT_FEATURE_PING_OFF 1
 -#define HCI_PING_SUPPORTED(x) \
 -  ((x)[HCI_EXT_FEATURE_PING_OFF] & HCI_EXT_FEATURE_PING_MASK)
 -
 -/*
 - *   LE features encoding - page 0 (the only page for now)
 -*/
 -/* LE Encryption */
 -#define HCI_LE_FEATURE_LE_ENCRYPTION_MASK 0x01
 -#define HCI_LE_FEATURE_LE_ENCRYPTION_OFF 0
 -#define HCI_LE_ENCRYPTION_SUPPORTED(x) \
 -  ((x)[HCI_LE_FEATURE_LE_ENCRYPTION_OFF] & HCI_LE_FEATURE_LE_ENCRYPTION_MASK)
 -
 -/* Connection Parameters Request Procedure */
 -#define HCI_LE_FEATURE_CONN_PARAM_REQ_MASK 0x02
 -#define HCI_LE_FEATURE_CONN_PARAM_REQ_OFF 0
 -#define HCI_LE_CONN_PARAM_REQ_SUPPORTED(x) \
 -  ((x)[HCI_LE_FEATURE_CONN_PARAM_REQ_OFF] & HCI_LE_FEATURE_CONN_PARAM_REQ_MASK)
 -
 -/* Extended Reject Indication */
 -#define HCI_LE_FEATURE_EXT_REJ_IND_MASK 0x04
 -#define HCI_LE_FEATURE_EXT_REJ_IND_OFF 0
 -#define HCI_LE_EXT_REJ_IND_SUPPORTED(x) \
 -  ((x)[HCI_LE_FEATURE_EXT_REJ_IND_OFF] & HCI_LE_FEATURE_EXT_REJ_IND_MASK)
 -
 -/* Slave-initiated Features Exchange */
 -#define HCI_LE_FEATURE_SLAVE_INIT_FEAT_EXC_MASK 0x08
 -#define HCI_LE_FEATURE_SLAVE_INIT_FEAT_EXC_OFF 0
 -#define HCI_LE_SLAVE_INIT_FEAT_EXC_SUPPORTED(x)  \
 -  ((x)[HCI_LE_FEATURE_SLAVE_INIT_FEAT_EXC_OFF] & \
 -   HCI_LE_FEATURE_SLAVE_INIT_FEAT_EXC_MASK)
 -
 -/* Enhanced privacy Feature: bit 6 */
 -#define HCI_LE_FEATURE_ENHANCED_PRIVACY_MASK 0x40
 -#define HCI_LE_FEATURE_ENHANCED_PRIVACY_OFF 0
 -#define HCI_LE_ENHANCED_PRIVACY_SUPPORTED(x)  \
 -  ((x)[HCI_LE_FEATURE_ENHANCED_PRIVACY_OFF] & \
 -   HCI_LE_FEATURE_ENHANCED_PRIVACY_MASK)
 -
 -/* Extended scanner filter policy : 7 */
 -#define HCI_LE_FEATURE_EXT_SCAN_FILTER_POLICY_MASK 0x80
 -#define HCI_LE_FEATURE_EXT_SCAN_FILTER_POLICY_OFF 0
 -#define HCI_LE_EXT_SCAN_FILTER_POLICY_SUPPORTED(x)  \
 -  ((x)[HCI_LE_FEATURE_EXT_SCAN_FILTER_POLICY_OFF] & \
 -   HCI_LE_FEATURE_EXT_SCAN_FILTER_POLICY_MASK)
 -
 -/* Slave-initiated Features Exchange */
 -#define HCI_LE_FEATURE_DATA_LEN_EXT_MASK 0x20
 -#define HCI_LE_FEATURE_DATA_LEN_EXT_OFF 0
 -#define HCI_LE_DATA_LEN_EXT_SUPPORTED(x) \
 -  ((x)[HCI_LE_FEATURE_DATA_LEN_EXT_OFF] & HCI_LE_FEATURE_DATA_LEN_EXT_MASK)
 -
 -/*
 - *   Local Supported Commands encoding
 -*/
 +// TODO: move the disabling somewhere else
 +#define HCI_NON_FLUSHABLE_PB_SUPPORTED(x) (0)  //((x)[6] & 0x40)
 +#define HCI_LINK_SUP_TO_EVT_SUPPORTED(x) ((x)[7] & 0x01)
 +#define HCI_INQ_RESP_TX_SUPPORTED(x) ((x)[7] & 0x02)
 +#define HCI_LMP_EXTENDED_SUPPORTED(x) ((x)[7] & 0x80)
 +
 +/* LMP features encoding - page 1 */
 +#define HCI_SSP_HOST_SUPPORTED(x) ((x)[0] & 0x01)
 +#define HCI_LE_HOST_SUPPORTED(x) ((x)[0] & 0x02)
 +#define HCI_SIMUL_DUMO_HOST_SUPPORTED(x) ((x)[0] & 0x04)
 +#define HCI_SC_HOST_SUPPORTED(x) ((x)[0] & 0x08)
 +
 +/* LMP features encoding - page 2 */
 +#define HCI_CSB_MASTER_SUPPORTED(x) ((x)[0] & 0x01)
 +#define HCI_CSB_SLAVE_SUPPORTED(x) ((x)[0] & 0x02)
 +#define HCI_SYNC_TRAIN_MASTER_SUPPORTED(x) ((x)[0] & 0x04)
 +#define HCI_SYNC_SCAN_SLAVE_SUPPORTED(x) ((x)[0] & 0x08)
 +#define HCI_INQ_RESP_NOTIF_SUPPORTED(x) ((x)[0] & 0x10)
 +
 +#define HCI_SC_CTRLR_SUPPORTED(x) ((x)[1] & 0x01)
 +#define HCI_PING_SUPPORTED(x) ((x)[1] & 0x02)
 +
 +/*  LE features encoding - page 0 (the only page for now) */
 +#define HCI_LE_ENCRYPTION_SUPPORTED(x) ((x)[0] & 0x01)
 +#define HCI_LE_CONN_PARAM_REQ_SUPPORTED(x) ((x)[0] & 0x02)
 +#define HCI_LE_EXT_REJ_IND_SUPPORTED(x) ((x)[0] & 0x04)
 +#define HCI_LE_SLAVE_INIT_FEAT_EXC_SUPPORTED(x) ((x)[0] & 0x08)
 +#define HCI_LE_DATA_LEN_EXT_SUPPORTED(x) ((x)[0] & 0x20)
 +#define HCI_LE_ENHANCED_PRIVACY_SUPPORTED(x) ((x)[0] & 0x40)
 +#define HCI_LE_EXT_SCAN_FILTER_POLICY_SUPPORTED(x) ((x)[0] & 0x80)
 +
 +#define HCI_LE_2M_PHY_SUPPORTED(x) ((x)[1] & 0x01)
 +#define HCI_LE_CODED_PHY_SUPPORTED(x) ((x)[1] & 0x08)
 +#define HCI_LE_EXTENDED_ADVERTISING_SUPPORTED(x) ((x)[1] & 0x10)
 +#define HCI_LE_PERIODIC_ADVERTISING_SUPPORTED(x) ((x)[1] & 0x20)
 +
 +/* Supported Commands*/
  #define HCI_NUM_SUPP_COMMANDS_BYTES 64
  
 -/* Supported Commands Byte 0 */
 -#define HCI_SUPP_COMMANDS_INQUIRY_MASK 0x01
 -#define HCI_SUPP_COMMANDS_INQUIRY_OFF 0
 -#define HCI_INQUIRY_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_COMMANDS_INQUIRY_OFF] & HCI_SUPP_COMMANDS_INQUIRY_MASK)
 -
 -#define HCI_SUPP_COMMANDS_INQUIRY_CANCEL_MASK 0x02
 -#define HCI_SUPP_COMMANDS_INQUIRY_CANCEL_OFF 0
 -#define HCI_INQUIRY_CANCEL_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_INQUIRY_CANCEL_OFF] & \
 -   HCI_SUPP_COMMANDS_INQUIRY_CANCEL_MASK)
 -
 -#define HCI_SUPP_COMMANDS_PERIODIC_INQUIRY_MASK 0x04
 -#define HCI_SUPP_COMMANDS_PERIODIC_INQUIRY_OFF 0
 -#define HCI_PERIODIC_INQUIRY_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_PERIODIC_INQUIRY_OFF] & \
 -   HCI_SUPP_COMMANDS_PERIODIC_INQUIRY_MASK)
 -
 -#define HCI_SUPP_COMMANDS_EXIT_PERIODIC_INQUIRY_MASK 0x08
 -#define HCI_SUPP_COMMANDS_EXIT_PERIODIC_INQUIRY_OFF 0
 -#define HCI_EXIT_PERIODIC_INQUIRY_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_EXIT_PERIODIC_INQUIRY_OFF] & \
 -   HCI_SUPP_COMMANDS_EXIT_PERIODIC_INQUIRY_MASK)
 -
 -#define HCI_SUPP_COMMANDS_CREATE_CONN_MASK 0x10
 -#define HCI_SUPP_COMMANDS_CREATE_CONN_OFF 0
 -#define HCI_CREATE_CONN_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_COMMANDS_CREATE_CONN_OFF] & HCI_SUPP_COMMANDS_CREATE_CONN_MASK)
 -
 -#define HCI_SUPP_COMMANDS_DISCONNECT_MASK 0x20
 -#define HCI_SUPP_COMMANDS_DISCONNECT_OFF 0
 -#define HCI_DISCONNECT_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_COMMANDS_DISCONNECT_OFF] & HCI_SUPP_COMMANDS_DISCONNECT_MASK)
 -
 -#define HCI_SUPP_COMMANDS_ADD_SCO_CONN_MASK 0x40
 -#define HCI_SUPP_COMMANDS_ADD_SCO_CONN_OFF 0
 -#define HCI_ADD_SCO_CONN_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_ADD_SCO_CONN_OFF] & \
 -   HCI_SUPP_COMMANDS_ADD_SCO_CONN_MASK)
 -
 -#define HCI_SUPP_COMMANDS_CANCEL_CREATE_CONN_MASK 0x80
 -#define HCI_SUPP_COMMANDS_CANCEL_CREATE_CONN_OFF 0
 -#define HCI_CANCEL_CREATE_CONN_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_CANCEL_CREATE_CONN_OFF] & \
 -   HCI_SUPP_COMMANDS_CANCEL_CREATE_CONN_MASK)
 -
 -#define HCI_SUPP_COMMANDS_ACCEPT_CONN_REQUEST_MASK 0x01
 -#define HCI_SUPP_COMMANDS_ACCEPT_CONN_REQUEST_OFF 1
 -#define HCI_ACCEPT_CONN_REQUEST_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_ACCEPT_CONN_REQUEST_OFF] & \
 -   HCI_SUPP_COMMANDS_ACCEPT_CONN_REQUEST_MASK)
 -
 -#define HCI_SUPP_COMMANDS_REJECT_CONN_REQUEST_MASK 0x02
 -#define HCI_SUPP_COMMANDS_REJECT_CONN_REQUEST_OFF 1
 -#define HCI_REJECT_CONN_REQUEST_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_REJECT_CONN_REQUEST_OFF] & \
 -   HCI_SUPP_COMMANDS_REJECT_CONN_REQUEST_MASK)
 -
 -#define HCI_SUPP_COMMANDS_LINK_KEY_REQUEST_REPLY_MASK 0x04
 -#define HCI_SUPP_COMMANDS_LINK_KEY_REQUEST_REPLY_OFF 1
 -#define HCI_LINK_KEY_REQUEST_REPLY_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_LINK_KEY_REQUEST_REPLY_OFF] & \
 -   HCI_SUPP_COMMANDS_LINK_KEY_REQUEST_REPLY_MASK)
 -
 -#define HCI_SUPP_COMMANDS_LINK_KEY_REQUEST_NEG_REPLY_MASK 0x08
 -#define HCI_SUPP_COMMANDS_LINK_KEY_REQUEST_NEG_REPLY_OFF 1
 -#define HCI_LINK_KEY_REQUEST_NEG_REPLY_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_LINK_KEY_REQUEST_NEG_REPLY_OFF] & \
 -   HCI_SUPP_COMMANDS_LINK_KEY_REQUEST_NEG_REPLY_MASK)
 -
 -#define HCI_SUPP_COMMANDS_PIN_CODE_REQUEST_REPLY_MASK 0x10
 -#define HCI_SUPP_COMMANDS_PIN_CODE_REQUEST_REPLY_OFF 1
 -#define HCI_PIN_CODE_REQUEST_REPLY_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_PIN_CODE_REQUEST_REPLY_OFF] & \
 -   HCI_SUPP_COMMANDS_PIN_CODE_REQUEST_REPLY_MASK)
 -
 -#define HCI_SUPP_COMMANDS_PIN_CODE_REQUEST_NEG_REPLY_MASK 0x20
 -#define HCI_SUPP_COMMANDS_PIN_CODE_REQUEST_NEG_REPLY_OFF 1
 -#define HCI_PIN_CODE_REQUEST_NEG_REPLY_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_PIN_CODE_REQUEST_NEG_REPLY_OFF] & \
 -   HCI_SUPP_COMMANDS_PIN_CODE_REQUEST_NEG_REPLY_MASK)
 -
 -#define HCI_SUPP_COMMANDS_CHANGE_CONN_PKT_TYPE_MASK 0x40
 -#define HCI_SUPP_COMMANDS_CHANGE_CONN_PKT_TYPE_OFF 1
 -#define HCI_CHANGE_CONN_PKT_TYPE_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_CHANGE_CONN_PKT_TYPE_OFF] & \
 -   HCI_SUPP_COMMANDS_CHANGE_CONN_PKT_TYPE_MASK)
 -
 -#define HCI_SUPP_COMMANDS_AUTH_REQUEST_MASK 0x80
 -#define HCI_SUPP_COMMANDS_AUTH_REQUEST_OFF 1
 -#define HCI_AUTH_REQUEST_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_AUTH_REQUEST_OFF] & \
 -   HCI_SUPP_COMMANDS_AUTH_REQUEST_MASK)
 -
 -#define HCI_SUPP_COMMANDS_SET_CONN_ENCRYPTION_MASK 0x01
 -#define HCI_SUPP_COMMANDS_SET_CONN_ENCRYPTION_OFF 2
 -#define HCI_SET_CONN_ENCRYPTION_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_SET_CONN_ENCRYPTION_OFF] & \
 -   HCI_SUPP_COMMANDS_SET_CONN_ENCRYPTION_MASK)
 -
 -#define HCI_SUPP_COMMANDS_CHANGE_CONN_LINK_KEY_MASK 0x02
 -#define HCI_SUPP_COMMANDS_CHANGE_CONN_LINK_KEY_OFF 2
 -#define HCI_CHANGE_CONN_LINK_KEY_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_CHANGE_CONN_LINK_KEY_OFF] & \
 -   HCI_SUPP_COMMANDS_CHANGE_CONN_LINK_KEY_MASK)
 -
 -#define HCI_SUPP_COMMANDS_MASTER_LINK_KEY_MASK 0x04
 -#define HCI_SUPP_COMMANDS_MASTER_LINK_KEY_OFF 2
 -#define HCI_MASTER_LINK_KEY_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_MASTER_LINK_KEY_OFF] & \
 -   HCI_SUPP_COMMANDS_MASTER_LINK_KEY_MASK)
 -
 -#define HCI_SUPP_COMMANDS_REMOTE_NAME_REQUEST_MASK 0x08
 -#define HCI_SUPP_COMMANDS_REMOTE_NAME_REQUEST_OFF 2
 -#define HCI_REMOTE_NAME_REQUEST_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_REMOTE_NAME_REQUEST_OFF] & \
 -   HCI_SUPP_COMMANDS_REMOTE_NAME_REQUEST_MASK)
 -
 -#define HCI_SUPP_COMMANDS_CANCEL_REMOTE_NAME_REQUEST_MASK 0x10
 -#define HCI_SUPP_COMMANDS_CANCEL_REMOTE_NAME_REQUEST_OFF 2
 -#define HCI_CANCEL_REMOTE_NAME_REQUEST_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_CANCEL_REMOTE_NAME_REQUEST_OFF] & \
 -   HCI_SUPP_COMMANDS_CANCEL_REMOTE_NAME_REQUEST_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_REMOTE_SUPP_FEATURES_MASK 0x20
 -#define HCI_SUPP_COMMANDS_READ_REMOTE_SUPP_FEATURES_OFF 2
 -#define HCI_READ_REMOTE_SUPP_FEATURES_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_REMOTE_SUPP_FEATURES_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_REMOTE_SUPP_FEATURES_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_REMOTE_EXT_FEATURES_MASK 0x40
 -#define HCI_SUPP_COMMANDS_READ_REMOTE_EXT_FEATURES_OFF 2
 -#define HCI_READ_REMOTE_EXT_FEATURES_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_REMOTE_EXT_FEATURES_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_REMOTE_EXT_FEATURES_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_REMOTE_VER_INFO_MASK 0x80
 -#define HCI_SUPP_COMMANDS_READ_REMOTE_VER_INFO_OFF 2
 -#define HCI_READ_REMOTE_VER_INFO_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_REMOTE_VER_INFO_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_REMOTE_VER_INFO_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_CLOCK_OFFSET_MASK 0x01
 -#define HCI_SUPP_COMMANDS_READ_CLOCK_OFFSET_OFF 3
 -#define HCI_READ_CLOCK_OFFSET_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_CLOCK_OFFSET_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_CLOCK_OFFSET_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_LMP_HANDLE_MASK 0x02
 -#define HCI_SUPP_COMMANDS_READ_LMP_HANDLE_OFF 3
 -#define HCI_READ_LMP_HANDLE_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_LMP_HANDLE_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_LMP_HANDLE_MASK)
 -
 -#define HCI_SUPP_COMMANDS_HOLD_MODE_CMD_MASK 0x02
 -#define HCI_SUPP_COMMANDS_HOLD_MODE_CMD_OFF 4
 -#define HCI_HOLD_MODE_CMD_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_HOLD_MODE_CMD_OFF] & \
 -   HCI_SUPP_COMMANDS_HOLD_MODE_CMD_MASK)
 -
 -#define HCI_SUPP_COMMANDS_SNIFF_MODE_CMD_MASK 0x04
 -#define HCI_SUPP_COMMANDS_SNIFF_MODE_CMD_OFF 4
 -#define HCI_SNIFF_MODE_CMD_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_SNIFF_MODE_CMD_OFF] & \
 -   HCI_SUPP_COMMANDS_SNIFF_MODE_CMD_MASK)
 -
 -#define HCI_SUPP_COMMANDS_EXIT_SNIFF_MODE_MASK 0x08
 -#define HCI_SUPP_COMMANDS_EXIT_SNIFF_MODE_OFF 4
 -#define HCI_EXIT_SNIFF_MODE_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_EXIT_SNIFF_MODE_OFF] & \
 -   HCI_SUPP_COMMANDS_EXIT_SNIFF_MODE_MASK)
 -
 -#define HCI_SUPP_COMMANDS_PARK_STATE_MASK 0x10
 -#define HCI_SUPP_COMMANDS_PARK_STATE_OFF 4
 -#define HCI_PARK_STATE_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_COMMANDS_PARK_STATE_OFF] & HCI_SUPP_COMMANDS_PARK_STATE_MASK)
 -
 -#define HCI_SUPP_COMMANDS_EXIT_PARK_STATE_MASK 0x20
 -#define HCI_SUPP_COMMANDS_EXIT_PARK_STATE_OFF 4
 -#define HCI_EXIT_PARK_STATE_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_EXIT_PARK_STATE_OFF] & \
 -   HCI_SUPP_COMMANDS_EXIT_PARK_STATE_MASK)
 -
 -#define HCI_SUPP_COMMANDS_QOS_SETUP_MASK 0x40
 -#define HCI_SUPP_COMMANDS_QOS_SETUP_OFF 4
 -#define HCI_QOS_SETUP_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_COMMANDS_QOS_SETUP_OFF] & HCI_SUPP_COMMANDS_QOS_SETUP_MASK)
 -
 -#define HCI_SUPP_COMMANDS_ROLE_DISCOVERY_MASK 0x80
 -#define HCI_SUPP_COMMANDS_ROLE_DISCOVERY_OFF 4
 -#define HCI_ROLE_DISCOVERY_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_ROLE_DISCOVERY_OFF] & \
 -   HCI_SUPP_COMMANDS_ROLE_DISCOVERY_MASK)
 -
 -#define HCI_SUPP_COMMANDS_SWITCH_ROLE_MASK 0x01
 -#define HCI_SUPP_COMMANDS_SWITCH_ROLE_OFF 5
 -#define HCI_SWITCH_ROLE_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_COMMANDS_SWITCH_ROLE_OFF] & HCI_SUPP_COMMANDS_SWITCH_ROLE_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_LINK_POLICY_SET_MASK 0x02
 -#define HCI_SUPP_COMMANDS_READ_LINK_POLICY_SET_OFF 5
 -#define HCI_READ_LINK_POLICY_SET_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_LINK_POLICY_SET_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_LINK_POLICY_SET_MASK)
 -
 -#define HCI_SUPP_COMMANDS_WRITE_LINK_POLICY_SET_MASK 0x04
 -#define HCI_SUPP_COMMANDS_WRITE_LINK_POLICY_SET_OFF 5
 -#define HCI_WRITE_LINK_POLICY_SET_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_WRITE_LINK_POLICY_SET_OFF] & \
 -   HCI_SUPP_COMMANDS_WRITE_LINK_POLICY_SET_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_DEF_LINK_POLICY_SET_MASK 0x08
 -#define HCI_SUPP_COMMANDS_READ_DEF_LINK_POLICY_SET_OFF 5
 -#define HCI_READ_DEF_LINK_POLICY_SET_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_DEF_LINK_POLICY_SET_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_DEF_LINK_POLICY_SET_MASK)
 -
 -#define HCI_SUPP_COMMANDS_WRITE_DEF_LINK_POLICY_SET_MASK 0x10
 -#define HCI_SUPP_COMMANDS_WRITE_DEF_LINK_POLICY_SET_OFF 5
 -#define HCI_WRITE_DEF_LINK_POLICY_SET_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_WRITE_DEF_LINK_POLICY_SET_OFF] & \
 -   HCI_SUPP_COMMANDS_WRITE_DEF_LINK_POLICY_SET_MASK)
 -
 -#define HCI_SUPP_COMMANDS_FLOW_SPECIFICATION_MASK 0x20
 -#define HCI_SUPP_COMMANDS_FLOW_SPECIFICATION_OFF 5
 -#define HCI_FLOW_SPECIFICATION_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_FLOW_SPECIFICATION_OFF] & \
 -   HCI_SUPP_COMMANDS_FLOW_SPECIFICATION_MASK)
 -
 -#define HCI_SUPP_COMMANDS_SET_EVENT_MASK_MASK 0x40
 -#define HCI_SUPP_COMMANDS_SET_EVENT_MASK_OFF 5
 -#define HCI_SET_EVENT_MASK_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_SET_EVENT_MASK_OFF] & \
 -   HCI_SUPP_COMMANDS_SET_EVENT_MASK_MASK)
 -
 -#define HCI_SUPP_COMMANDS_RESET_MASK 0x80
 -#define HCI_SUPP_COMMANDS_RESET_OFF 5
 -#define HCI_RESET_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_COMMANDS_RESET_OFF] & HCI_SUPP_COMMANDS_RESET_MASK)
 -
 -#define HCI_SUPP_COMMANDS_SET_EVENT_FILTER_MASK 0x01
 -#define HCI_SUPP_COMMANDS_SET_EVENT_FILTER_OFF 6
 -#define HCI_SET_EVENT_FILTER_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_SET_EVENT_FILTER_OFF] & \
 -   HCI_SUPP_COMMANDS_SET_EVENT_FILTER_MASK)
 -
 -#define HCI_SUPP_COMMANDS_FLUSH_MASK 0x02
 -#define HCI_SUPP_COMMANDS_FLUSH_OFF 6
 -#define HCI_FLUSH_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_COMMANDS_FLUSH_OFF] & HCI_SUPP_COMMANDS_FLUSH_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_PIN_TYPE_MASK 0x04
 -#define HCI_SUPP_COMMANDS_READ_PIN_TYPE_OFF 6
 -#define HCI_READ_PIN_TYPE_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_PIN_TYPE_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_PIN_TYPE_MASK)
 -
 -#define HCI_SUPP_COMMANDS_WRITE_PIN_TYPE_MASK 0x08
 -#define HCI_SUPP_COMMANDS_WRITE_PIN_TYPE_OFF 6
 -#define HCI_WRITE_PIN_TYPE_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_WRITE_PIN_TYPE_OFF] & \
 -   HCI_SUPP_COMMANDS_WRITE_PIN_TYPE_MASK)
 -
 -#define HCI_SUPP_COMMANDS_CREATE_NEW_UNIT_KEY_MASK 0x10
 -#define HCI_SUPP_COMMANDS_CREATE_NEW_UNIT_KEY_OFF 6
 -#define HCI_CREATE_NEW_UNIT_KEY_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_CREATE_NEW_UNIT_KEY_OFF] & \
 -   HCI_SUPP_COMMANDS_CREATE_NEW_UNIT_KEY_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_STORED_LINK_KEY_MASK 0x20
 -#define HCI_SUPP_COMMANDS_READ_STORED_LINK_KEY_OFF 6
 -#define HCI_READ_STORED_LINK_KEY_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_STORED_LINK_KEY_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_STORED_LINK_KEY_MASK)
 -
 -#define HCI_SUPP_COMMANDS_WRITE_STORED_LINK_KEY_MASK 0x40
 -#define HCI_SUPP_COMMANDS_WRITE_STORED_LINK_KEY_OFF 6
 -#define HCI_WRITE_STORED_LINK_KEY_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_WRITE_STORED_LINK_KEY_OFF] & \
 -   HCI_SUPP_COMMANDS_WRITE_STORED_LINK_KEY_MASK)
 -
 -#define HCI_SUPP_COMMANDS_DELETE_STORED_LINK_KEY_MASK 0x80
 -#define HCI_SUPP_COMMANDS_DELETE_STORED_LINK_KEY_OFF 6
 -#define HCI_DELETE_STORED_LINK_KEY_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_DELETE_STORED_LINK_KEY_OFF] & \
 -   HCI_SUPP_COMMANDS_DELETE_STORED_LINK_KEY_MASK)
 -
 -#define HCI_SUPP_COMMANDS_WRITE_LOCAL_NAME_MASK 0x01
 -#define HCI_SUPP_COMMANDS_WRITE_LOCAL_NAME_OFF 7
 -#define HCI_WRITE_LOCAL_NAME_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_WRITE_LOCAL_NAME_OFF] & \
 -   HCI_SUPP_COMMANDS_WRITE_LOCAL_NAME_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_LOCAL_NAME_MASK 0x02
 -#define HCI_SUPP_COMMANDS_READ_LOCAL_NAME_OFF 7
 -#define HCI_READ_LOCAL_NAME_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_LOCAL_NAME_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_LOCAL_NAME_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_CONN_ACCEPT_TOUT_MASK 0x04
 -#define HCI_SUPP_COMMANDS_READ_CONN_ACCEPT_TOUT_OFF 7
 -#define HCI_READ_CONN_ACCEPT_TOUT_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_CONN_ACCEPT_TOUT_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_CONN_ACCEPT_TOUT_MASK)
 -
 -#define HCI_SUPP_COMMANDS_WRITE_CONN_ACCEPT_TOUT_MASK 0x08
 -#define HCI_SUPP_COMMANDS_WRITE_CONN_ACCEPT_TOUT_OFF 7
 -#define HCI_WRITE_CONN_ACCEPT_TOUT_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_WRITE_CONN_ACCEPT_TOUT_OFF] & \
 -   HCI_SUPP_COMMANDS_WRITE_CONN_ACCEPT_TOUT_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_PAGE_TOUT_MASK 0x10
 -#define HCI_SUPP_COMMANDS_READ_PAGE_TOUT_OFF 7
 -#define HCI_READ_PAGE_TOUT_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_PAGE_TOUT_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_PAGE_TOUT_MASK)
 -
 -#define HCI_SUPP_COMMANDS_WRITE_PAGE_TOUT_MASK 0x20
 -#define HCI_SUPP_COMMANDS_WRITE_PAGE_TOUT_OFF 7
 -#define HCI_WRITE_PAGE_TOUT_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_WRITE_PAGE_TOUT_OFF] & \
 -   HCI_SUPP_COMMANDS_WRITE_PAGE_TOUT_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_SCAN_ENABLE_MASK 0x40
 -#define HCI_SUPP_COMMANDS_READ_SCAN_ENABLE_OFF 7
 -#define HCI_READ_SCAN_ENABLE_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_SCAN_ENABLE_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_SCAN_ENABLE_MASK)
 -
 -#define HCI_SUPP_COMMANDS_WRITE_SCAN_ENABLE_MASK 0x80
 -#define HCI_SUPP_COMMANDS_WRITE_SCAN_ENABLE_OFF 7
 -#define HCI_WRITE_SCAN_ENABLE_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_WRITE_SCAN_ENABLE_OFF] & \
 -   HCI_SUPP_COMMANDS_WRITE_SCAN_ENABLE_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_PAGE_SCAN_ACTIVITY_MASK 0x01
 -#define HCI_SUPP_COMMANDS_READ_PAGE_SCAN_ACTIVITY_OFF 8
 -#define HCI_READ_PAGE_SCAN_ACTIVITY_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_PAGE_SCAN_ACTIVITY_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_PAGE_SCAN_ACTIVITY_MASK)
 -
 -#define HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_ACTIVITY_MASK 0x02
 -#define HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_ACTIVITY_OFF 8
 -#define HCI_WRITE_PAGE_SCAN_ACTIVITY_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_ACTIVITY_OFF] & \
 -   HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_ACTIVITY_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_INQURIY_SCAN_ACTIVITY_MASK 0x04
 -#define HCI_SUPP_COMMANDS_READ_INQURIY_SCAN_ACTIVITY_OFF 8
 -#define HCI_READ_INQURIY_SCAN_ACTIVITY_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_INQURIY_SCAN_ACTIVITY_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_INQURIY_SCAN_ACTIVITY_MASK)
 -
 -#define HCI_SUPP_COMMANDS_WRITE_INQURIY_SCAN_ACTIVITY_MASK 0x08
 -#define HCI_SUPP_COMMANDS_WRITE_INQURIY_SCAN_ACTIVITY_OFF 8
 -#define HCI_WRITE_INQURIY_SCAN_ACTIVITY_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_WRITE_INQURIY_SCAN_ACTIVITY_OFF] & \
 -   HCI_SUPP_COMMANDS_WRITE_INQURIY_SCAN_ACTIVITY_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_AUTH_ENABLE_MASK 0x10
 -#define HCI_SUPP_COMMANDS_READ_AUTH_ENABLE_OFF 8
 -#define HCI_READ_AUTH_ENABLE_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_AUTH_ENABLE_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_AUTH_ENABLE_MASK)
 -
 -#define HCI_SUPP_COMMANDS_WRITE_AUTH_ENABLE_MASK 0x20
 -#define HCI_SUPP_COMMANDS_WRITE_AUTH_ENABLE_OFF 8
 -#define HCI_WRITE_AUTH_ENABLE_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_WRITE_AUTH_ENABLE_OFF] & \
 -   HCI_SUPP_COMMANDS_WRITE_AUTH_ENABLE_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_ENCRYPT_ENABLE_MASK 0x40
 -#define HCI_SUPP_COMMANDS_READ_ENCRYPT_ENABLE_OFF 8
 -#define HCI_READ_ENCRYPT_ENABLE_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_ENCRYPT_ENABLE_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_ENCRYPT_ENABLE_MASK)
 -
 -#define HCI_SUPP_COMMANDS_WRITE_ENCRYPT_ENABLE_MASK 0x80
 -#define HCI_SUPP_COMMANDS_WRITE_ENCRYPT_ENABLE_OFF 8
 -#define HCI_WRITE_ENCRYPT_ENABLE_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_WRITE_ENCRYPT_ENABLE_OFF] & \
 -   HCI_SUPP_COMMANDS_WRITE_ENCRYPT_ENABLE_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_CLASS_DEVICE_MASK 0x01
 -#define HCI_SUPP_COMMANDS_READ_CLASS_DEVICE_OFF 9
 -#define HCI_READ_CLASS_DEVICE_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_CLASS_DEVICE_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_CLASS_DEVICE_MASK)
 -
 -#define HCI_SUPP_COMMANDS_WRITE_CLASS_DEVICE_MASK 0x02
 -#define HCI_SUPP_COMMANDS_WRITE_CLASS_DEVICE_OFF 9
 -#define HCI_WRITE_CLASS_DEVICE_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_WRITE_CLASS_DEVICE_OFF] & \
 -   HCI_SUPP_COMMANDS_WRITE_CLASS_DEVICE_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_VOICE_SETTING_MASK 0x04
 -#define HCI_SUPP_COMMANDS_READ_VOICE_SETTING_OFF 9
 -#define HCI_READ_VOICE_SETTING_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_VOICE_SETTING_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_VOICE_SETTING_MASK)
 -
 -#define HCI_SUPP_COMMANDS_WRITE_VOICE_SETTING_MASK 0x08
 -#define HCI_SUPP_COMMANDS_WRITE_VOICE_SETTING_OFF 9
 -#define HCI_WRITE_VOICE_SETTING_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_WRITE_VOICE_SETTING_OFF] & \
 -   HCI_SUPP_COMMANDS_WRITE_VOICE_SETTING_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_AUTO_FLUSH_TOUT_MASK 0x10
 -#define HCI_SUPP_COMMANDS_READ_AUTO_FLUSH_TOUT_OFF 9
 -#define HCI_READ_AUTO_FLUSH_TOUT_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_AUTO_FLUSH_TOUT_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_AUTO_FLUSH_TOUT_MASK)
 -
 -#define HCI_SUPP_COMMANDS_WRITE_AUTO_FLUSH_TOUT_MASK 0x20
 -#define HCI_SUPP_COMMANDS_WRITE_AUTO_FLUSH_TOUT_OFF 9
 -#define HCI_WRITE_AUTO_FLUSH_TOUT_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_WRITE_AUTO_FLUSH_TOUT_OFF] & \
 -   HCI_SUPP_COMMANDS_WRITE_AUTO_FLUSH_TOUT_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_NUM_BROAD_RETRANS_MASK 0x40
 -#define HCI_SUPP_COMMANDS_READ_NUM_BROAD_RETRANS_OFF 9
 -#define HCI_READ_NUM_BROAD_RETRANS_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_NUM_BROAD_RETRANS_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_NUM_BROAD_RETRANS_MASK)
 -
 -#define HCI_SUPP_COMMANDS_WRITE_NUM_BROAD_RETRANS_MASK 0x80
 -#define HCI_SUPP_COMMANDS_WRITE_NUM_BROAD_RETRANS_OFF 9
 -#define HCI_WRITE_NUM_BROAD_RETRANS_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_WRITE_NUM_BROAD_RETRANS_OFF] & \
 -   HCI_SUPP_COMMANDS_WRITE_NUM_BROAD_RETRANS_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_HOLD_MODE_ACTIVITY_MASK 0x01
 -#define HCI_SUPP_COMMANDS_READ_HOLD_MODE_ACTIVITY_OFF 10
 -#define HCI_READ_HOLD_MODE_ACTIVITY_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_HOLD_MODE_ACTIVITY_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_HOLD_MODE_ACTIVITY_MASK)
 -
 -#define HCI_SUPP_COMMANDS_WRITE_HOLD_MODE_ACTIVITY_MASK 0x02
 -#define HCI_SUPP_COMMANDS_WRITE_HOLD_MODE_ACTIVITY_OFF 10
 -#define HCI_WRITE_HOLD_MODE_ACTIVITY_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_WRITE_HOLD_MODE_ACTIVITY_OFF] & \
 -   HCI_SUPP_COMMANDS_WRITE_HOLD_MODE_ACTIVITY_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_TRANS_PWR_LEVEL_MASK 0x04
 -#define HCI_SUPP_COMMANDS_READ_TRANS_PWR_LEVEL_OFF 10
 -#define HCI_READ_TRANS_PWR_LEVEL_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_TRANS_PWR_LEVEL_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_TRANS_PWR_LEVEL_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_SYNCH_FLOW_CTRL_ENABLE_MASK 0x08
 -#define HCI_SUPP_COMMANDS_READ_SYNCH_FLOW_CTRL_ENABLE_OFF 10
 -#define HCI_READ_SYNCH_FLOW_CTRL_ENABLE_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_SYNCH_FLOW_CTRL_ENABLE_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_SYNCH_FLOW_CTRL_ENABLE_MASK)
 -
 -#define HCI_SUPP_COMMANDS_WRITE_SYNCH_FLOW_CTRL_ENABLE_MASK 0x10
 -#define HCI_SUPP_COMMANDS_WRITE_SYNCH_FLOW_CTRL_ENABLE_OFF 10
 -#define HCI_WRITE_SYNCH_FLOW_CTRL_ENABLE_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_WRITE_SYNCH_FLOW_CTRL_ENABLE_OFF] & \
 -   HCI_SUPP_COMMANDS_WRITE_SYNCH_FLOW_CTRL_ENABLE_MASK)
 -
 -#define HCI_SUPP_COMMANDS_SET_HOST_CTRLR_TO_HOST_FC_MASK 0x20
 -#define HCI_SUPP_COMMANDS_SET_HOST_CTRLR_TO_HOST_FC_OFF 10
 -#define HCI_SET_HOST_CTRLR_TO_HOST_FC_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_SET_HOST_CTRLR_TO_HOST_FC_OFF] & \
 -   HCI_SUPP_COMMANDS_SET_HOST_CTRLR_TO_HOST_FC_MASK)
 -
 -#define HCI_SUPP_COMMANDS_HOST_BUFFER_SIZE_MASK 0x40
 -#define HCI_SUPP_COMMANDS_HOST_BUFFER_SIZE_OFF 10
 -#define HCI_HOST_BUFFER_SIZE_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_HOST_BUFFER_SIZE_OFF] & \
 -   HCI_SUPP_COMMANDS_HOST_BUFFER_SIZE_MASK)
 -
 -#define HCI_SUPP_COMMANDS_HOST_NUM_COMPLETED_PKTS_MASK 0x80
 -#define HCI_SUPP_COMMANDS_HOST_NUM_COMPLETED_PKTS_OFF 10
 -#define HCI_HOST_NUM_COMPLETED_PKTS_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_HOST_NUM_COMPLETED_PKTS_OFF] & \
 -   HCI_SUPP_COMMANDS_HOST_NUM_COMPLETED_PKTS_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_LINK_SUP_TOUT_MASK 0x01
 -#define HCI_SUPP_COMMANDS_READ_LINK_SUP_TOUT_OFF 11
 -#define HCI_READ_LINK_SUP_TOUT_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_LINK_SUP_TOUT_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_LINK_SUP_TOUT_MASK)
 -
 -#define HCI_SUPP_COMMANDS_WRITE_LINK_SUP_TOUT_MASK 0x02
 -#define HCI_SUPP_COMMANDS_WRITE_LINK_SUP_TOUT_OFF 11
 -#define HCI_WRITE_LINK_SUP_TOUT_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_WRITE_LINK_SUP_TOUT_OFF] & \
 -   HCI_SUPP_COMMANDS_WRITE_LINK_SUP_TOUT_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_NUM_SUPP_IAC_MASK 0x04
 -#define HCI_SUPP_COMMANDS_READ_NUM_SUPP_IAC_OFF 11
 -#define HCI_READ_NUM_SUPP_IAC_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_NUM_SUPP_IAC_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_NUM_SUPP_IAC_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_CURRENT_IAC_LAP_MASK 0x08
 -#define HCI_SUPP_COMMANDS_READ_CURRENT_IAC_LAP_OFF 11
 -#define HCI_READ_CURRENT_IAC_LAP_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_CURRENT_IAC_LAP_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_CURRENT_IAC_LAP_MASK)
 -
 -#define HCI_SUPP_COMMANDS_WRITE_CURRENT_IAC_LAP_MASK 0x10
 -#define HCI_SUPP_COMMANDS_WRITE_CURRENT_IAC_LAP_OFF 11
 -#define HCI_WRITE_CURRENT_IAC_LAP_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_WRITE_CURRENT_IAC_LAP_OFF] & \
 -   HCI_SUPP_COMMANDS_WRITE_CURRENT_IAC_LAP_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_PAGE_SCAN_PER_MODE_MASK 0x20
 -#define HCI_SUPP_COMMANDS_READ_PAGE_SCAN_PER_MODE_OFF 11
 -#define HCI_READ_PAGE_SCAN_PER_MODE_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_PAGE_SCAN_PER_MODE_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_PAGE_SCAN_PER_MODE_MASK)
 -
 -#define HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_PER_MODE_MASK 0x40
 -#define HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_PER_MODE_OFF 11
 -#define HCI_WRITE_PAGE_SCAN_PER_MODE_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_PER_MODE_OFF] & \
 -   HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_PER_MODE_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_PAGE_SCAN_MODE_MASK 0x80
 -#define HCI_SUPP_COMMANDS_READ_PAGE_SCAN_MODE_OFF 11
 -#define HCI_READ_PAGE_SCAN_MODE_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_PAGE_SCAN_MODE_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_PAGE_SCAN_MODE_MASK)
 -
 -#define HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_MODE_MASK 0x01
 -#define HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_MODE_OFF 12
 -#define HCI_WRITE_PAGE_SCAN_MODE_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_MODE_OFF] & \
 -   HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_MODE_MASK)
 -
 -#define HCI_SUPP_COMMANDS_SET_AFH_CHNL_CLASS_MASK 0x02
 -#define HCI_SUPP_COMMANDS_SET_AFH_CHNL_CLASS_OFF 12
 -#define HCI_SET_AFH_CHNL_CLASS_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_SET_AFH_CHNL_CLASS_OFF] & \
 -   HCI_SUPP_COMMANDS_SET_AFH_CHNL_CLASS_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_INQUIRY_SCAN_TYPE_MASK 0x10
 -#define HCI_SUPP_COMMANDS_READ_INQUIRY_SCAN_TYPE_OFF 12
 -#define HCI_READ_INQUIRY_SCAN_TYPE_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_INQUIRY_SCAN_TYPE_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_INQUIRY_SCAN_TYPE_MASK)
 -
 -#define HCI_SUPP_COMMANDS_WRITE_INQUIRY_SCAN_TYPE_MASK 0x20
 -#define HCI_SUPP_COMMANDS_WRITE_INQUIRY_SCAN_TYPE_OFF 12
 -#define HCI_WRITE_INQUIRY_SCAN_TYPE_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_WRITE_INQUIRY_SCAN_TYPE_OFF] & \
 -   HCI_SUPP_COMMANDS_WRITE_INQUIRY_SCAN_TYPE_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_INQUIRY_MODE_MASK 0x40
 -#define HCI_SUPP_COMMANDS_READ_INQUIRY_MODE_OFF 12
 -#define HCI_READ_INQUIRY_MODE_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_INQUIRY_MODE_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_INQUIRY_MODE_MASK)
 -
 -#define HCI_SUPP_COMMANDS_WRITE_INQUIRY_MODE_MASK 0x80
 -#define HCI_SUPP_COMMANDS_WRITE_INQUIRY_MODE_OFF 12
 -#define HCI_WRITE_INQUIRY_MODE_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_WRITE_INQUIRY_MODE_OFF] & \
 -   HCI_SUPP_COMMANDS_WRITE_INQUIRY_MODE_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_PAGE_SCAN_TYPE_MASK 0x01
 -#define HCI_SUPP_COMMANDS_READ_PAGE_SCAN_TYPE_OFF 13
 -#define HCI_READ_PAGE_SCAN_TYPE_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_PAGE_SCAN_TYPE_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_PAGE_SCAN_TYPE_MASK)
 -
 -#define HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_TYPE_MASK 0x02
 -#define HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_TYPE_OFF 13
 -#define HCI_WRITE_PAGE_SCAN_TYPE_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_TYPE_OFF] & \
 -   HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_TYPE_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_AFH_CHNL_ASSESS_MODE_MASK 0x04
 -#define HCI_SUPP_COMMANDS_READ_AFH_CHNL_ASSESS_MODE_OFF 13
 -#define HCI_READ_AFH_CHNL_ASSESS_MODE_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_AFH_CHNL_ASSESS_MODE_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_AFH_CHNL_ASSESS_MODE_MASK)
 -
 -#define HCI_SUPP_COMMANDS_WRITE_AFH_CHNL_ASSESS_MODE_MASK 0x08
 -#define HCI_SUPP_COMMANDS_WRITE_AFH_CHNL_ASSESS_MODE_OFF 13
 -#define HCI_WRITE_AFH_CHNL_ASSESS_MODE_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_WRITE_AFH_CHNL_ASSESS_MODE_OFF] & \
 -   HCI_SUPP_COMMANDS_WRITE_AFH_CHNL_ASSESS_MODE_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_LOCAL_VER_INFO_MASK 0x08
 -#define HCI_SUPP_COMMANDS_READ_LOCAL_VER_INFO_OFF 14
 -#define HCI_READ_LOCAL_VER_INFO_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_LOCAL_VER_INFO_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_LOCAL_VER_INFO_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_LOCAL_SUP_CMDS_MASK 0x10
 -#define HCI_SUPP_COMMANDS_READ_LOCAL_SUP_CMDS_OFF 14
 -#define HCI_READ_LOCAL_SUP_CMDS_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_LOCAL_SUP_CMDS_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_LOCAL_SUP_CMDS_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_LOCAL_SUPP_FEATURES_MASK 0x20
 -#define HCI_SUPP_COMMANDS_READ_LOCAL_SUPP_FEATURES_OFF 14
 -#define HCI_READ_LOCAL_SUPP_FEATURES_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_LOCAL_SUPP_FEATURES_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_LOCAL_SUPP_FEATURES_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_LOCAL_EXT_FEATURES_MASK 0x40
 -#define HCI_SUPP_COMMANDS_READ_LOCAL_EXT_FEATURES_OFF 14
 -#define HCI_READ_LOCAL_EXT_FEATURES_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_LOCAL_EXT_FEATURES_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_LOCAL_EXT_FEATURES_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_BUFFER_SIZE_MASK 0x80
 -#define HCI_SUPP_COMMANDS_READ_BUFFER_SIZE_OFF 14
 -#define HCI_READ_BUFFER_SIZE_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_BUFFER_SIZE_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_BUFFER_SIZE_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_COUNTRY_CODE_MASK 0x01
 -#define HCI_SUPP_COMMANDS_READ_COUNTRY_CODE_OFF 15
 -#define HCI_READ_COUNTRY_CODE_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_COUNTRY_CODE_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_COUNTRY_CODE_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_BD_ADDR_MASK 0x02
 -#define HCI_SUPP_COMMANDS_READ_BD_ADDR_OFF 15
 -#define HCI_READ_BD_ADDR_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_BD_ADDR_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_BD_ADDR_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_FAIL_CONTACT_CNTR_MASK 0x04
 -#define HCI_SUPP_COMMANDS_READ_FAIL_CONTACT_CNTR_OFF 15
 -#define HCI_READ_FAIL_CONTACT_CNTR_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_FAIL_CONTACT_CNTR_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_FAIL_CONTACT_CNTR_MASK)
 -
 -#define HCI_SUPP_COMMANDS_RESET_FAIL_CONTACT_CNTR_MASK 0x08
 -#define HCI_SUPP_COMMANDS_RESET_FAIL_CONTACT_CNTR_OFF 15
 -#define HCI_RESET_FAIL_CONTACT_CNTR_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_RESET_FAIL_CONTACT_CNTR_OFF] & \
 -   HCI_SUPP_COMMANDS_RESET_FAIL_CONTACT_CNTR_MASK)
 -
 -#define HCI_SUPP_COMMANDS_GET_LINK_QUALITY_MASK 0x10
 -#define HCI_SUPP_COMMANDS_GET_LINK_QUALITY_OFF 15
 -#define HCI_GET_LINK_QUALITY_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_GET_LINK_QUALITY_OFF] & \
 -   HCI_SUPP_COMMANDS_GET_LINK_QUALITY_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_RSSI_MASK 0x20
 -#define HCI_SUPP_COMMANDS_READ_RSSI_OFF 15
 -#define HCI_READ_RSSI_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_COMMANDS_READ_RSSI_OFF] & HCI_SUPP_COMMANDS_READ_RSSI_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_AFH_CH_MAP_MASK 0x40
 -#define HCI_SUPP_COMMANDS_READ_AFH_CH_MAP_OFF 15
 -#define HCI_READ_AFH_CH_MAP_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_AFH_CH_MAP_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_AFH_CH_MAP_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_BD_CLOCK_MASK 0x80
 -#define HCI_SUPP_COMMANDS_READ_BD_CLOCK_OFF 15
 -#define HCI_READ_BD_CLOCK_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_BD_CLOCK_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_BD_CLOCK_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_LOOPBACK_MODE_MASK 0x01
 -#define HCI_SUPP_COMMANDS_READ_LOOPBACK_MODE_OFF 16
 -#define HCI_READ_LOOPBACK_MODE_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_LOOPBACK_MODE_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_LOOPBACK_MODE_MASK)
 -
 -#define HCI_SUPP_COMMANDS_WRITE_LOOPBACK_MODE_MASK 0x02
 -#define HCI_SUPP_COMMANDS_WRITE_LOOPBACK_MODE_OFF 16
 -#define HCI_WRITE_LOOPBACK_MODE_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_WRITE_LOOPBACK_MODE_OFF] & \
 -   HCI_SUPP_COMMANDS_WRITE_LOOPBACK_MODE_MASK)
 -
 -#define HCI_SUPP_COMMANDS_ENABLE_DEV_UNDER_TEST_MASK 0x04
 -#define HCI_SUPP_COMMANDS_ENABLE_DEV_UNDER_TEST_OFF 16
 -#define HCI_ENABLE_DEV_UNDER_TEST_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_ENABLE_DEV_UNDER_TEST_OFF] & \
 -   HCI_SUPP_COMMANDS_ENABLE_DEV_UNDER_TEST_MASK)
 -
 -#define HCI_SUPP_COMMANDS_SETUP_SYNCH_CONN_MASK 0x08
 -#define HCI_SUPP_COMMANDS_SETUP_SYNCH_CONN_OFF 16
 -#define HCI_SETUP_SYNCH_CONN_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_SETUP_SYNCH_CONN_OFF] & \
 -   HCI_SUPP_COMMANDS_SETUP_SYNCH_CONN_MASK)
 -
 -#define HCI_SUPP_COMMANDS_ACCEPT_SYNCH_CONN_MASK 0x10
 -#define HCI_SUPP_COMMANDS_ACCEPT_SYNCH_CONN_OFF 16
 -#define HCI_ACCEPT_SYNCH_CONN_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_ACCEPT_SYNCH_CONN_OFF] & \
 -   HCI_SUPP_COMMANDS_ACCEPT_SYNCH_CONN_MASK)
 -
 -#define HCI_SUPP_COMMANDS_REJECT_SYNCH_CONN_MASK 0x20
 -#define HCI_SUPP_COMMANDS_REJECT_SYNCH_CONN_OFF 16
 -#define HCI_REJECT_SYNCH_CONN_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_REJECT_SYNCH_CONN_OFF] & \
 -   HCI_SUPP_COMMANDS_REJECT_SYNCH_CONN_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_EXT_INQUIRY_RESP_MASK 0x01
 -#define HCI_SUPP_COMMANDS_READ_EXT_INQUIRY_RESP_OFF 17
 -#define HCI_READ_EXT_INQUIRY_RESP_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_EXT_INQUIRY_RESP_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_EXT_INQUIRY_RESP_MASK)
 -
 -#define HCI_SUPP_COMMANDS_WRITE_EXT_INQUIRY_RESP_MASK 0x02
 -#define HCI_SUPP_COMMANDS_WRITE_EXT_INQUIRY_RESP_OFF 17
 -#define HCI_WRITE_EXT_INQUIRY_RESP_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_WRITE_EXT_INQUIRY_RESP_OFF] & \
 -   HCI_SUPP_COMMANDS_WRITE_EXT_INQUIRY_RESP_MASK)
 -
 -#define HCI_SUPP_COMMANDS_REFRESH_ENCRYPTION_KEY_MASK 0x04
 -#define HCI_SUPP_COMMANDS_REFRESH_ENCRYPTION_KEY_OFF 17
 -#define HCI_REFRESH_ENCRYPTION_KEY_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_REFRESH_ENCRYPTION_KEY_OFF] & \
 -   HCI_SUPP_COMMANDS_REFRESH_ENCRYPTION_KEY_MASK)
 -
 -/* Octet 17, bit 3 is reserved */
 -
 -#define HCI_SUPP_COMMANDS_SNIFF_SUB_RATE_MASK 0x10
 -#define HCI_SUPP_COMMANDS_SNIFF_SUB_RATE_OFF 17
 -#define HCI_SNIFF_SUB_RATE_CMD_SUPPORTED(x)    \
 -  ((x)[HCI_SUPP_COMMANDS_SNIFF_SUB_RATE_OFF] & \
 -   HCI_SUPP_COMMANDS_SNIFF_SUB_RATE_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_SIMPLE_PAIRING_MODE_MASK 0x20
 -#define HCI_SUPP_COMMANDS_READ_SIMPLE_PAIRING_MODE_OFF 17
 -#define HCI_READ_SIMPLE_PAIRING_MODE_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_SIMPLE_PAIRING_MODE_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_SIMPLE_PAIRING_MODE_MASK)
 -
 -#define HCI_SUPP_COMMANDS_WRITE_SIMPLE_PAIRING_MODE_MASK 0x40
 -#define HCI_SUPP_COMMANDS_WRITE_SIMPLE_PAIRING_MODE_OFF 17
 -#define HCI_WRITE_SIMPLE_PAIRING_MODE_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_WRITE_SIMPLE_PAIRING_MODE_OFF] & \
 -   HCI_SUPP_COMMANDS_WRITE_SIMPLE_PAIRING_MODE_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_LOCAL_OOB_DATA_MASK 0x80
 -#define HCI_SUPP_COMMANDS_READ_LOCAL_OOB_DATA_OFF 17
 -#define HCI_READ_LOCAL_OOB_DATA_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_LOCAL_OOB_DATA_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_LOCAL_OOB_DATA_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_INQUIRY_RESPONSE_TX_POWER_MASK 0x01
 -#define HCI_SUPP_COMMANDS_READ_INQUIRY_RESPONSE_TX_POWER_OFF 18
 -#define HCI_READ_INQUIRY_RESPONSE_TX_POWER_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_INQUIRY_RESPONSE_TX_POWER_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_INQUIRY_RESPONSE_TX_POWER_MASK)
 -
 -#define HCI_SUPP_COMMANDS_WRITE_INQUIRY_RESPONSE_TX_POWER_MASK 0x02
 -#define HCI_SUPP_COMMANDS_WRITE_INQUIRY_RESPONSE_TX_POWER_OFF 18
 -#define HCI_WRITE_INQUIRY_RESPONSE_TX_POWER_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_WRITE_INQUIRY_RESPONSE_TX_POWER_OFF] & \
 -   HCI_SUPP_COMMANDS_WRITE_INQUIRY_RESPONSE_TX_POWER_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_DEFAULT_ERRONEOUS_DATA_REPORTING_MASK 0x04
 -#define HCI_SUPP_COMMANDS_READ_DEFAULT_ERRONEOUS_DATA_REPORTING_OFF 18
 -#define HCI_READ_DEFAULT_ERRONEOUS_DATA_REPORTING_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_DEFAULT_ERRONEOUS_DATA_REPORTING_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_DEFAULT_ERRONEOUS_DATA_REPORTING_MASK)
 -
 -#define HCI_SUPP_COMMANDS_WRITE_DEFAULT_ERRONEOUS_DATA_REPORTING_MASK 0x08
 -#define HCI_SUPP_COMMANDS_WRITE_DEFAULT_ERRONEOUS_DATA_REPORTING_OFF 18
 -#define HCI_WRITE_DEFAULT_ERRONEOUS_DATA_REPORTING_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_WRITE_DEFAULT_ERRONEOUS_DATA_REPORTING_OFF] & \
 -   HCI_SUPP_COMMANDS_WRITE_DEFAULT_ERRONEOUS_DATA_REPORTING_MASK)
 -
 -#define HCI_SUPP_COMMANDS_IO_CAPABILITY_REQUEST_REPLY_MASK 0x80
 -#define HCI_SUPP_COMMANDS_IO_CAPABILITY_REQUEST_REPLY_OFF 18
 -#define HCI_IO_CAPABILITY_REQUEST_REPLY_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_IO_CAPABILITY_REQUEST_REPLY_OFF] & \
 -   HCI_SUPP_COMMANDS_IO_CAPABILITY_REQUEST_REPLY_MASK)
 -
 -#define HCI_SUPP_COMMANDS_USER_CONFIRMATION_REQUEST_REPLY_MASK 0x01
 -#define HCI_SUPP_COMMANDS_USER_CONFIRMATION_REQUEST_REPLY_OFF 19
 -#define HCI_USER_CONFIRMATION_REQUEST_REPLY_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_USER_CONFIRMATION_REQUEST_REPLY_OFF] & \
 -   HCI_SUPP_COMMANDS_USER_CONFIRMATION_REQUEST_REPLY_MASK)
 -
 -#define HCI_SUPP_COMMANDS_USER_CONFIRMATION_REQUEST_NEG_REPLY_MASK 0x02
 -#define HCI_SUPP_COMMANDS_USER_CONFIRMATION_REQUEST_NEG_REPLY_OFF 19
 -#define HCI_USER_CONFIRMATION_REQUEST_NEG_REPLY_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_USER_CONFIRMATION_REQUEST_NEG_REPLY_OFF] & \
 -   HCI_SUPP_COMMANDS_USER_CONFIRMATION_REQUEST_NEG_REPLY_MASK)
 -
 -#define HCI_SUPP_COMMANDS_USER_PASSKEY_REQUEST_REPLY_MASK 0x04
 -#define HCI_SUPP_COMMANDS_USER_PASSKEY_REQUEST_REPLY_OFF 19
 -#define HCI_USER_PASSKEY_REQUEST_REPLY_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_USER_PASSKEY_REQUEST_REPLY_OFF] & \
 -   HCI_SUPP_COMMANDS_USER_PASSKEY_REQUEST_REPLY_MASK)
 -
 -#define HCI_SUPP_COMMANDS_USER_PASSKEY_REQUEST_NEG_REPLY_MASK 0x08
 -#define HCI_SUPP_COMMANDS_USER_PASSKEY_REQUEST_NEG_REPLY_OFF 19
 -#define HCI_USER_PASSKEY_REQUEST_NEG_REPLY_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_USER_PASSKEY_REQUEST_NEG_REPLY_OFF] & \
 -   HCI_SUPP_COMMANDS_USER_PASSKEY_REQUEST_NEG_REPLY_MASK)
 -
 -#define HCI_SUPP_COMMANDS_REMOTE_OOB_DATA_REQUEST_REPLY_MASK 0x10
 -#define HCI_SUPP_COMMANDS_REMOTE_OOB_DATA_REQUEST_REPLY_OFF 19
 -#define HCI_REMOTE_OOB_DATA_REQUEST_REPLY_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_REMOTE_OOB_DATA_REQUEST_REPLY_OFF] & \
 -   HCI_SUPP_COMMANDS_REMOTE_OOB_DATA_REQUEST_REPLY_MASK)
 -
 -#define HCI_SUPP_COMMANDS_WRITE_SIMPLE_PAIRING_DBG_MODE_MASK 0x20
 -#define HCI_SUPP_COMMANDS_WRITE_SIMPLE_PAIRING_DBG_MODE_OFF 19
 -#define HCI_WRITE_SIMPLE_PAIRING_DBG_MODE_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_WRITE_SIMPLE_PAIRING_DBG_MODE_OFF] & \
 -   HCI_SUPP_COMMANDS_WRITE_SIMPLE_PAIRING_DBG_MODE_MASK)
 -
 -#define HCI_SUPP_COMMANDS_ENHANCED_FLUSH_MASK 0x40
 -#define HCI_SUPP_COMMANDS_ENHANCED_FLUSH_OFF 19
 -#define HCI_ENHANCED_FLUSH_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_ENHANCED_FLUSH_OFF] & \
 -   HCI_SUPP_COMMANDS_ENHANCED_FLUSH_MASK)
 -
 -#define HCI_SUPP_COMMANDS_REMOTE_OOB_DATA_REQUEST_NEG_REPLY_MASK 0x80
 -#define HCI_SUPP_COMMANDS_REMOTE_OOB_DATA_REQUEST_NEG_REPLY_OFF 19
 -#define HCI_REMOTE_OOB_DATA_REQUEST_NEG_REPLY_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_REMOTE_OOB_DATA_REQUEST_NEG_REPLY_OFF] & \
 -   HCI_SUPP_COMMANDS_REMOTE_OOB_DATA_REQUEST_NEG_REPLY_MASK)
 -
 -/* Supported Commands (Byte 20) */
 -#define HCI_SUPP_COMMANDS_SEND_KEYPRESS_NOTIF_MASK 0x04
 -#define HCI_SUPP_COMMANDS_SEND_KEYPRESS_NOTIF_OFF 20
 -#define HCI_SEND_NOTIF_SUPPORTED(x)                 \
 -  ((x)[HCI_SUPP_COMMANDS_SEND_KEYPRESS_NOTIF_OFF] & \
 -   HCI_SUPP_COMMANDS_SEND_KEYPRESS_NOTIF_MASK)
 -
 -#define HCI_SUPP_COMMANDS_IO_CAP_REQ_NEG_REPLY_MASK 0x08
 -#define HCI_SUPP_COMMANDS_IO_CAP_REQ_NEG_REPLY_OFF 20
 -#define HCI_IO_CAP_REQ_NEG_REPLY_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_IO_CAP_REQ_NEG_REPLY_OFF] & \
 -   HCI_SUPP_COMMANDS_IO_CAP_REQ_NEG_REPLY_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_ENCR_KEY_SIZE_MASK 0x10
 -#define HCI_SUPP_COMMANDS_READ_ENCR_KEY_SIZE_OFF 20
 -#define HCI_READ_ENCR_KEY_SIZE_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_ENCR_KEY_SIZE_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_ENCR_KEY_SIZE_MASK)
 -
 -/* Supported Commands (Byte 21) */
 -#define HCI_SUPP_COMMANDS_CREATE_PHYSICAL_LINK_MASK 0x01
 -#define HCI_SUPP_COMMANDS_CREATE_PHYSICAL_LINK_OFF 21
 -#define HCI_CREATE_PHYSICAL_LINK_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_CREATE_PHYSICAL_LINK_OFF] & \
 -   HCI_SUPP_COMMANDS_CREATE_PHYSICAL_LINK_MASK)
 -
 -#define HCI_SUPP_COMMANDS_ACCEPT_PHYSICAL_LINK_MASK 0x02
 -#define HCI_SUPP_COMMANDS_ACCEPT_PHYSICAL_LINK_OFF 21
 -#define HCI_ACCEPT_PHYSICAL_LINK_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_ACCEPT_PHYSICAL_LINK_OFF] & \
 -   HCI_SUPP_COMMANDS_ACCEPT_PHYSICAL_LINK_MASK)
 -
 -#define HCI_SUPP_COMMANDS_DISCONNECT_PHYSICAL_LINK_MASK 0x04
 -#define HCI_SUPP_COMMANDS_DISCONNECT_PHYSICAL_LINK_OFF 21
 -#define HCI_DISCONNECT_PHYSICAL_LINK_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_DISCONNECT_PHYSICAL_LINK_OFF] & \
 -   HCI_SUPP_COMMANDS_DISCONNECT_PHYSICAL_LINK_MASK)
 -
 -#define HCI_SUPP_COMMANDS_CREATE_LOGICAL_LINK_MASK 0x08
 -#define HCI_SUPP_COMMANDS_CREATE_LOGICAL_LINK_OFF 21
 -#define HCI_CREATE_LOGICAL_LINK_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_CREATE_LOGICAL_LINK_OFF] & \
 -   HCI_SUPP_COMMANDS_CREATE_LOGICAL_LINK_MASK)
 -
 -#define HCI_SUPP_COMMANDS_ACCEPT_LOGICAL_LINK_MASK 0x10
 -#define HCI_SUPP_COMMANDS_ACCEPT_LOGICAL_LINK_OFF 21
 -#define HCI_ACCEPT_LOGICAL_LINK_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_ACCEPT_LOGICAL_LINK_OFF] & \
 -   HCI_SUPP_COMMANDS_ACCEPT_LOGICAL_LINK_MASK)
 -
 -#define HCI_SUPP_COMMANDS_DISCONNECT_LOGICAL_LINK_MASK 0x20
 -#define HCI_SUPP_COMMANDS_DISCONNECT_LOGICAL_LINK_OFF 21
 -#define HCI_DISCONNECT_LOGICAL_LINK_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_DISCONNECT_LOGICAL_LINK_OFF] & \
 -   HCI_SUPP_COMMANDS_DISCONNECT_LOGICAL_LINK_MASK)
 -
 -#define HCI_SUPP_COMMANDS_LOGICAL_LINK_CANCEL_MASK 0x40
 -#define HCI_SUPP_COMMANDS_LOGICAL_LINK_CANCEL_OFF 21
 -#define HCI_LOGICAL_LINK_CANCEL_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_LOGICAL_LINK_CANCEL_OFF] & \
 -   HCI_SUPP_COMMANDS_LOGICAL_LINK_CANCEL_MASK)
 -
 -#define HCI_SUPP_COMMANDS_FLOW_SPEC_MODIFY_MASK 0x80
 -#define HCI_SUPP_COMMANDS_FLOW_SPEC_MODIFY_OFF 21
 -#define HCI_FLOW_SPEC_MODIFY_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_FLOW_SPEC_MODIFY_OFF] & \
 -   HCI_SUPP_COMMANDS_FLOW_SPEC_MODIFY_MASK)
 -
 -/* Supported Commands (Byte 22) */
 -#define HCI_SUPP_COMMANDS_READ_LOGICAL_LINK_ACCEPT_TIMEOUT_MASK 0x01
 -#define HCI_SUPP_COMMANDS_READ_LOGICAL_LINK_ACCEPT_TIMEOUT_OFF 22
 -#define HCI_READ_LOGICAL_LINK_ACCEPT_TIMEOUT_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_LOGICAL_LINK_ACCEPT_TIMEOUT_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_LOGICAL_LINK_ACCEPT_TIMEOUT_MASK)
 -
 -#define HCI_SUPP_COMMANDS_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT_MASK 0x02
 -#define HCI_SUPP_COMMANDS_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT_OFF 22
 -#define HCI_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT_OFF] & \
 -   HCI_SUPP_COMMANDS_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT_MASK)
 -
 -#define HCI_SUPP_COMMANDS_SET_EVENT_MASK_PAGE_2_MASK 0x04
 -#define HCI_SUPP_COMMANDS_SET_EVENT_MASK_PAGE_2_OFF 22
 -#define HCI_SET_EVENT_MASK_PAGE_2_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_SET_EVENT_MASK_PAGE_2_OFF] & \
 -   HCI_SUPP_COMMANDS_SET_EVENT_MASK_PAGE_2_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_LOCATION_DATA_MASK 0x08
 -#define HCI_SUPP_COMMANDS_READ_LOCATION_DATA_OFF 22
 -#define HCI_READ_LOCATION_DATA_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_LOCATION_DATA_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_LOCATION_DATA_MASK)
 -
 -#define HCI_SUPP_COMMANDS_WRITE_LOCATION_DATA_MASK 0x10
 -#define HCI_SUPP_COMMANDS_WRITE_LOCATION_DATA_OFF 22
 -#define HCI_WRITE_LOCATION_DATA_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_WRITE_LOCATION_DATA_OFF] & \
 -   HCI_SUPP_COMMANDS_WRITE_LOCATION_DATA_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_LOCAL_AMP_INFO_MASK 0x20
 -#define HCI_SUPP_COMMANDS_READ_LOCAL_AMP_INFO_OFF 22
 -#define HCI_READ_LOCAL_AMP_INFO_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_LOCAL_AMP_INFO_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_LOCAL_AMP_INFO_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_LOCAL_AMP_ASSOC_MASK 0x40
 -#define HCI_SUPP_COMMANDS_READ_LOCAL_AMP_ASSOC_OFF 22
 -#define HCI_READ_LOCAL_AMP_ASSOC_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_LOCAL_AMP_ASSOC_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_LOCAL_AMP_ASSOC_MASK)
 -
 -#define HCI_SUPP_COMMANDS_WRITE_REMOTE_AMP_ASSOC_MASK 0x80
 -#define HCI_SUPP_COMMANDS_WRITE_REMOTE_AMP_ASSOC_OFF 22
 -#define HCI_WRITE_REMOTE_AMP_ASSOC_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_WRITE_REMOTE_AMP_ASSOC_OFF] & \
 -   HCI_SUPP_COMMANDS_WRITE_REMOTE_AMP_ASSOC_MASK)
 -
 -/* Supported Commands (Byte 23) */
 -#define HCI_SUPP_COMMANDS_READ_FLOW_CONTROL_MODE_MASK 0x01
 -#define HCI_SUPP_COMMANDS_READ_FLOW_CONTROL_MODE_OFF 23
 -#define HCI_READ_FLOW_CONTROL_MODE_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_FLOW_CONTROL_MODE_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_FLOW_CONTROL_MODE_MASK)
 -
 -#define HCI_SUPP_COMMANDS_WRITE_FLOW_CONTROL_MODE_MASK 0x02
 -#define HCI_SUPP_COMMANDS_WRITE_FLOW_CONTROL_MODE_OFF 23
 -#define HCI_WRITE_FLOW_CONTROL_MODE_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_WRITE_FLOW_CONTROL_MODE_OFF] & \
 -   HCI_SUPP_COMMANDS_WRITE_FLOW_CONTROL_MODE_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_DATA_BLOCK_SIZE_MASK 0x04
 -#define HCI_SUPP_COMMANDS_READ_DATA_BLOCK_SIZE_OFF 23
 -#define HCI_READ_DATA_BLOCK_SIZE_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_DATA_BLOCK_SIZE_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_DATA_BLOCK_SIZE_MASK)
 -
 -#define HCI_SUPP_COMMANDS_ENABLE_AMP_RCVR_REPORTS_MASK 0x20
 -#define HCI_SUPP_COMMANDS_ENABLE_AMP_RCVR_REPORTS_OFF 23
 -#define HCI_ENABLE_AMP_RCVR_REPORTS_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_ENABLE_AMP_RCVR_REPORTS_OFF] & \
 -   HCI_SUPP_COMMANDS_ENABLE_AMP_RCVR_REPORTS_MASK)
 -
 -#define HCI_SUPP_COMMANDS_AMP_TEST_END_MASK 0x40
 -#define HCI_SUPP_COMMANDS_AMP_TEST_END_OFF 23
 -#define HCI_AMP_TEST_END_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_AMP_TEST_END_OFF] & \
 -   HCI_SUPP_COMMANDS_AMP_TEST_END_MASK)
 -
 -#define HCI_SUPP_COMMANDS_AMP_TEST_MASK 0x80
 -#define HCI_SUPP_COMMANDS_AMP_TEST_OFF 23
 -#define HCI_AMP_TEST_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_COMMANDS_AMP_TEST_OFF] & HCI_SUPP_COMMANDS_AMP_TEST_MASK)
 -
 -/* Supported Commands (Byte 24) */
 -#define HCI_SUPP_COMMANDS_READ_TRANSMIT_POWER_LEVEL_MASK 0x01
 -#define HCI_SUPP_COMMANDS_READ_TRANSMIT_POWER_LEVEL_OFF 24
 -#define HCI_READ_TRANSMIT_POWER_LEVEL_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_TRANSMIT_POWER_LEVEL_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_TRANSMIT_POWER_LEVEL_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_BE_FLUSH_TOUT_MASK 0x04
 -#define HCI_SUPP_COMMANDS_READ_BE_FLUSH_TOUT_OFF 24
 -#define HCI_READ_BE_FLUSH_TOUT_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_BE_FLUSH_TOUT_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_BE_FLUSH_TOUT_MASK)
 -
 -#define HCI_SUPP_COMMANDS_WRITE_BE_FLUSH_TOUT_MASK 0x08
 -#define HCI_SUPP_COMMANDS_WRITE_BE_FLUSH_TOUT_OFF 24
 -#define HCI_WRITE_BE_FLUSH_TOUT_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_WRITE_BE_FLUSH_TOUT_OFF] & \
 -   HCI_SUPP_COMMANDS_WRITE_BE_FLUSH_TOUT_MASK)
 -
 -#define HCI_SUPP_COMMANDS_SHORT_RANGE_MODE_MASK 0x10
 -#define HCI_SUPP_COMMANDS_SHORT_RANGE_MODE_OFF 24
 -#define HCI_SHORT_RANGE_MODE_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_SHORT_RANGE_MODE_OFF] & \
 -   HCI_SUPP_COMMANDS_SHORT_RANGE_MODE_MASK)
 -
 -/* LE commands TBD
 - * Supported Commands (Byte 24 continued)
 - * Supported Commands (Byte 25)
 - * Supported Commands (Byte 26)
 - * Supported Commands (Byte 27)
 - * Supported Commands (Byte 28)
 -*/
 -
 -/* Supported Commands (Byte 29) */
 -#define HCI_SUPP_COMMANDS_ENH_SETUP_SYNCH_CONN_MASK 0x08
 -#define HCI_SUPP_COMMANDS_ENH_SETUP_SYNCH_CONN_OFF 29
 -#define HCI_ENH_SETUP_SYNCH_CONN_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_ENH_SETUP_SYNCH_CONN_OFF] & \
 -   HCI_SUPP_COMMANDS_ENH_SETUP_SYNCH_CONN_MASK)
 -
 -#define HCI_SUPP_COMMANDS_ENH_ACCEPT_SYNCH_CONN_MASK 0x10
 -#define HCI_SUPP_COMMANDS_ENH_ACCEPT_SYNCH_CONN_OFF 29
 -#define HCI_ENH_ACCEPT_SYNCH_CONN_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_ENH_ACCEPT_SYNCH_CONN_OFF] & \
 -   HCI_SUPP_COMMANDS_ENH_ACCEPT_SYNCH_CONN_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_LOCAL_CODECS_MASK 0x20
 -#define HCI_SUPP_COMMANDS_READ_LOCAL_CODECS_OFF 29
 -#define HCI_READ_LOCAL_CODECS_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_LOCAL_CODECS_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_LOCAL_CODECS_MASK)
 -
 -#define HCI_SUPP_COMMANDS_SET_MWS_CHANN_PARAM_MASK 0x40
 -#define HCI_SUPP_COMMANDS_SET_MWS_CHANN_PARAM_OFF 29
 -#define HCI_SET_MWS_CHANNEL_PARAMETERS_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_COMMANDS_SET_MWS_CHANN_PARAM_OFF] & \
 -   HCI_SUPP_COMMANDS_SET_MWS_CHANN_PARAM_MASK)
 -
 -#define HCI_SUPP_COMMANDS_SET_EXT_FRAME_CONF_MASK 0x80
 -#define HCI_SUPP_COMMANDS_SET_EXT_FRAME_CONF_OFF 29
 -#define HCI_SET_EXTERNAL_FRAME_CONFIGURATION_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_COMMANDS_SET_EXT_FRAME_CONF_OFF] &        \
 -   HCI_SUPP_COMMANDS_SET_EXT_FRAME_CONF_MASK)
 -
 -/* Supported Commands (Byte 30) */
 -#define HCI_SUPP_COMMANDS_SET_MWS_SIGNALING_MASK 0x01
 -#define HCI_SUPP_COMMANDS_SET_MWS_SIGNALING_OFF 30
 -#define HCI_SET_MWS_SIGNALING_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_SET_MWS_SIGNALING_OFF] & \
 -   HCI_SUPP_COMMANDS_SET_MWS_SIGNALING_MASK)
 -
 -#define HCI_SUPP_COMMANDS_SET_MWS_TRANS_LAYER_MASK 0x02
 -#define HCI_SUPP_COMMANDS_SET_MWS_TRANS_LAYER_OFF 30
 -#define HCI_SET_MWS_TRANSPORT_LAYER_SUPPORTED(x)    \
 -  ((x)[HCI_SUPP_COMMANDS_SET_MWS_TRANS_LAYER_OFF] & \
 -   HCI_SUPP_COMMANDS_SET_MWS_TRANS_LAYER_MASK)
 -
 -#define HCI_SUPP_COMMANDS_SET_MWS_SCAN_FREQ_TABLE_MASK 0x04
 -#define HCI_SUPP_COMMANDS_SET_MWS_SCAN_FREQ_TABLE_OFF 30
 -#define HCI_SET_MWS_SCAN_FREQUENCY_TABLE_SUPPORTED(x)   \
 -  ((x)[HCI_SUPP_COMMANDS_SET_MWS_SCAN_FREQ_TABLE_OFF] & \
 -   HCI_SUPP_COMMANDS_SET_MWS_SCAN_FREQ_TABLE_MASK)
 -
 -#define HCI_SUPP_COMMANDS_GET_TRANS_LAYER_CONF_MASK 0x08
 -#define HCI_SUPP_COMMANDS_GET_TRANS_LAYER_CONF_OFF 30
 -#define HCI_GET_MWS_TRANS_LAYER_CFG_SUPPORTED(x)     \
 -  ((x)[HCI_SUPP_COMMANDS_GET_TRANS_LAYER_CONF_OFF] & \
 -   HCI_SUPP_COMMANDS_GET_TRANS_LAYER_CONF_MASK)
 -
 -#define HCI_SUPP_COMMANDS_SET_MWS_PATTERN_CONF_MASK 0x10
 -#define HCI_SUPP_COMMANDS_SET_MWS_PATTERN_CONF_OFF 30
 -#define HCI_SET_MWS_PATTERN_CONFIGURATION_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_COMMANDS_SET_MWS_PATTERN_CONF_OFF] &   \
 -   HCI_SUPP_COMMANDS_SET_MWS_PATTERN_CONF_MASK)
 -
 -/* Supported Commands (Byte 30 bit 5) */
 -#define HCI_SUPP_COMMANDS_SET_TRIG_CLK_CAP_MASK 0x20
 -#define HCI_SUPP_COMMANDS_SET_TRIG_CLK_CAP_OFF 30
 -#define HCI_SET_TRIG_CLK_CAP_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_SET_TRIG_CLK_CAP_OFF] & \
 -   HCI_SUPP_COMMANDS_SET_TRIG_CLK_CAP_MASK)
 -
 -/* Supported Commands (Byte 30 bit 6-7) */
 -#define HCI_SUPP_COMMANDS_TRUNCATED_PAGE 0x06
 -#define HCI_SUPP_COMMANDS_TRUNCATED_PAGE_OFF 30
 -#define HCI_TRUNCATED_PAGE_SUPPORTED(x) \
 -  ((x)[HCI_SUPP_COMMANDS_TRUNCATED_PAGE_OFF] & HCI_SUPP_COMMANDS_TRUNCATED_PAGE)
 -
 -#define HCI_SUPP_COMMANDS_TRUNCATED_PAGE_CANCEL 0x07
 -#define HCI_SUPP_COMMANDS_TRUNCATED_PAGE_CANCEL_OFF 30
 -#define HCI_TRUNCATED_PAGE_CANCEL_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_TRUNCATED_PAGE_CANCEL_OFF] & \
 -   HCI_SUPP_COMMANDS_TRUNCATED_PAGE_CANCEL)
 -
 -/* Supported Commands (Byte 31 bit 6-7) */
 -#define HCI_SUPP_COMMANDS_SET_CONLESS_SLAVE_BRCST 0x00
 -#define HCI_SUPP_COMMANDS_SET_CONLESS_SLAVE_BRCST_OFF 31
 -#define HCI_SET_CONLESS_SLAVE_BRCST_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_SET_CONLESS_SLAVE_BRCST_OFF] & \
 -   HCI_SUPP_COMMANDS_SET_CONLESS_SLAVE_BRCST)
 -
 -#define HCI_SUPP_COMMANDS_SET_CONLESS_SLAVE_BRCST_RECEIVE 0x01
 -#define HCI_SUPP_COMMANDS_SET_CONLESS_SLAVE_BRCST_RECEIVE_OFF 31
 -#define HCI_SET_CONLESS_SLAVE_BRCST_RECEIVE_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_SET_CONLESS_SLAVE_BRCST_RECEIVE_OFF] & \
 -   HCI_SUPP_COMMANDS_SET_CONLESS_SLAVE_BRCST_RECEIVE)
 -
 -#define HCI_SUPP_COMMANDS_START_SYNC_TRAIN 0x02
 -#define HCI_SUPP_COMMANDS_START_SYNC_TRAIN_OFF 31
 -#define HCI_START_SYNC_TRAIN_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_START_SYNC_TRAIN_OFF] & \
 -   HCI_SUPP_COMMANDS_START_SYNC_TRAIN)
 -
 -#define HCI_SUPP_COMMANDS_RECEIVE_SYNC_TRAIN 0x03
 -#define HCI_SUPP_COMMANDS_RECEIVE_SYNC_TRAIN_OFF 31
 -#define HCI_RECEIVE_SYNC_TRAIN_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_RECEIVE_SYNC_TRAIN_OFF] & \
 -   HCI_SUPP_COMMANDS_RECEIVE_SYNC_TRAIN)
 -
 -#define HCI_SUPP_COMMANDS_SET_RESERVED_LT_ADDR 0x04
 -#define HCI_SUPP_COMMANDS_SET_RESERVED_LT_ADDR_OFF 31
 -#define HCI_SET_RESERVED_LT_ADDR_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_SET_RESERVED_LT_ADDR_OFF] & \
 -   HCI_SUPP_COMMANDS_SET_RESERVED_LT_ADDR)
 -
 -#define HCI_SUPP_COMMANDS_DELETE_RESERVED_LT_ADDR 0x05
 -#define HCI_SUPP_COMMANDS_DELETE_RESERVED_LT_ADDR_OFF 31
 -#define HCI_DELETE_RESERVED_LT_ADDR_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_DELETE_RESERVED_LT_ADDR_OFF] & \
 -   HCI_SUPP_COMMANDS_DELETE_RESERVED_LT_ADDR)
 -
 -#define HCI_SUPP_COMMANDS_SET_CONLESS_SLAVE_BRCST_DATA 0x06
 -#define HCI_SUPP_COMMANDS_SET_CONLESS_SLAVE_BRCST_DATA_OFF 31
 -#define HCI_SET_CONLESS_SLAVE_BRCST_DATA_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_SET_CONLESS_SLAVE_BRCST_DATA_OFF] & \
 -   HCI_SUPP_COMMANDS_SET_CONLESS_SLAVE_BRCST_DATA)
 -
 -#define HCI_SUPP_COMMANDS_READ_SYNC_TRAIN_PARAM 0x07
 -#define HCI_SUPP_COMMANDS_READ_SYNC_TRAIN_PARAM_OFF 31
 -#define HCI_READ_SYNC_TRAIN_PARAM_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_SYNC_TRAIN_PARAM_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_SYNC_TRAIN_PARAM)
 -
 -/* Supported Commands (Byte 32 bit 0) */
 -#define HCI_SUPP_COMMANDS_WRITE_SYNC_TRAIN_PARAM 0x00
 -#define HCI_SUPP_COMMANDS_WRITE_SYNC_TRAIN_PARAM_OFF 32
 -#define HCI_WRITE_SYNC_TRAIN_PARAM_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_WRITE_SYNC_TRAIN_PARAM_OFF] & \
 -   HCI_SUPP_COMMANDS_WRITE_SYNC_TRAIN_PARAM)
 -
 -#define HCI_SUPP_COMMANDS_REMOTE_OOB_EXTENDED_DATA_REQUEST_REPLY_MASK 0x02
 -#define HCI_SUPP_COMMANDS_REMOTE_OOB_EXTENDED_DATA_REQUEST_REPLY_OFF 32
 -#define HCI_REMOTE_OOB_EXTENDED_DATA_REQUEST_REPLY_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_REMOTE_OOB_EXTENDED_DATA_REQUEST_REPLY_OFF] & \
 -   HCI_SUPP_COMMANDS_REMOTE_OOB_EXTENDED_DATA_REQUEST_REPLY_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_SECURE_CONNS_SUPPORT_MASK 0x04
 -#define HCI_SUPP_COMMANDS_READ_SECURE_CONNS_SUPPORT_OFF 32
 -#define HCI_READ_SECURE_CONNS_SUPPORT_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_SECURE_CONNS_SUPPORT_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_SECURE_CONNS_SUPPORT_MASK)
 -
 -#define HCI_SUPP_COMMANDS_WRITE_SECURE_CONNS_SUPPORT_MASK 0x08
 -#define HCI_SUPP_COMMANDS_WRITE_SECURE_CONNS_SUPPORT_OFF 32
 -#define HCI_WRITE_SECURE_CONNS_SUPPORT_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_WRITE_SECURE_CONNS_SUPPORT_OFF] & \
 -   HCI_SUPP_COMMANDS_WRITE_SECURE_CONNS_SUPPORT_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_AUTHENT_PAYLOAD_TOUT_MASK 0x10
 -#define HCI_SUPP_COMMANDS_READ_AUTHENT_PAYLOAD_TOUT_OFF 32
 -#define HCI_READ_AUTHENT_PAYLOAD_TOUT_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_AUTHENT_PAYLOAD_TOUT_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_AUTHENT_PAYLOAD_TOUT_MASK)
 -
 -#define HCI_SUPP_COMMANDS_WRITE_AUTHENT_PAYLOAD_TOUT_MASK 0x20
 -#define HCI_SUPP_COMMANDS_WRITE_AUTHENT_PAYLOAD_TOUT_OFF 32
 -#define HCI_WRITE_AUTHENT_PAYLOAD_TOUT_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_WRITE_AUTHENT_PAYLOAD_TOUT_OFF] & \
 -   HCI_SUPP_COMMANDS_WRITE_AUTHENT_PAYLOAD_TOUT_MASK)
 -
 -#define HCI_SUPP_COMMANDS_READ_LOCAL_OOB_EXTENDED_DATA_MASK 0x40
 -#define HCI_SUPP_COMMANDS_READ_LOCAL_OOB_EXTENDED_DATA_OFF 32
 -#define HCI_READ_LOCAL_OOB_EXTENDED_DATA_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_READ_LOCAL_OOB_EXTENDED_DATA_OFF] & \
 -   HCI_SUPP_COMMANDS_READ_LOCAL_OOB_EXTENDED_DATA_MASK)
 -
 -#define HCI_SUPP_COMMANDS_WRITE_SECURE_CONNECTIONS_TEST_MODE_MASK 0x80
 -#define HCI_SUPP_COMMANDS_WRITE_SECURE_CONNECTIONS_TEST_MODE_OFF 32
 -#define HCI_WRITE_SECURE_CONNECTIONS_TEST_MODE_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_WRITE_SECURE_CONNECTIONS_TEST_MODE_OFF] & \
 -   HCI_SUPP_COMMANDS_WRITE_SECURE_CONNECTIONS_TEST_MODE_MASK)
 -
 -/* supported LE remote control connection parameter request reply */
 -#define HCI_SUPP_COMMANDS_LE_RC_CONN_PARAM_UPD_RPY_MASK 0x10
 -#define HCI_SUPP_COMMANDS_LE_RC_CONN_PARAM_UPD_RPY_OFF 33
 -#define HCI_LE_RC_CONN_PARAM_UPD_RPY_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_LE_RC_CONN_PARAM_UPD_RPY_OFF] & \
 -   HCI_SUPP_COMMANDS_LE_RC_CONN_PARAM_UPD_RPY_MASK)
 -
 -#define HCI_SUPP_COMMANDS_RLE_RC_CONN_PARAM_UPD_NEG_RPY_MASK 0x20
 -#define HCI_SUPP_COMMANDS_LE_RC_CONN_PARAM_UPD_NEG_RPY_OFF 33
 -#define HCI_LE_RC_CONN_PARAM_UPD_NEG_RPY_SUPPORTED(x)        \
 -  ((x)[HCI_SUPP_COMMANDS_LE_RC_CONN_PARAM_UPD_NEG_RPY_OFF] & \
 -   HCI_SUPP_COMMANDS_RLE_RC_CONN_PARAM_UPD_NEG_RPY_MASK)
 -
 -#define HCI_LE_2M_PHY_SUPPORTED(x) (((x)[1] & 0x01))     // BIT 8 SET
 -#define HCI_LE_CODED_PHY_SUPPORTED(x) (((x)[1] & 0x08))  // BIT 11 SET
 -
 -/* LE Advertising Extension related Procedurs */
 -#define HCI_LE_EXTENDED_ADVERTISING_SUPPORTED(x) \
 -  (((x)[1] & 0x10))  // BIT 12 SET
 -#define HCI_LE_PERIODIC_ADVERTISING_SUPPORTED(x) \
 -  (((x)[1] & 0x20))  // BIT 13 SET
 +#define HCI_INQUIRY_SUPPORTED(x) ((x)[0] & 0x01)
 +#define HCI_INQUIRY_CANCEL_SUPPORTED(x) ((x)[0] & 0x02)
 +#define HCI_PERIODIC_INQUIRY_SUPPORTED(x) ((x)[0] & 0x04)
 +#define HCI_EXIT_PERIODIC_INQUIRY_SUPPORTED(x) ((x)[0] & 0x08)
 +#define HCI_CREATE_CONN_SUPPORTED(x) ((x)[0] & 0x10)
 +#define HCI_DISCONNECT_SUPPORTED(x) ((x)[0] & 0x20)
 +#define HCI_ADD_SCO_CONN_SUPPORTED(x) ((x)[0] & 0x40)
 +#define HCI_CANCEL_CREATE_CONN_SUPPORTED(x) ((x)[0] & 0x80)
 +
 +#define HCI_ACCEPT_CONN_REQUEST_SUPPORTED(x) ((x)[1] & 0x01)
 +#define HCI_REJECT_CONN_REQUEST_SUPPORTED(x) ((x)[1] & 0x02)
 +#define HCI_LINK_KEY_REQUEST_REPLY_SUPPORTED(x) ((x)[1] & 0x04)
 +#define HCI_LINK_KEY_REQUEST_NEG_REPLY_SUPPORTED(x) ((x)[1] & 0x08)
 +#define HCI_PIN_CODE_REQUEST_REPLY_SUPPORTED(x) ((x)[1] & 0x10)
 +#define HCI_PIN_CODE_REQUEST_NEG_REPLY_SUPPORTED(x) ((x)[1] & 0x20)
 +#define HCI_CHANGE_CONN_PKT_TYPE_SUPPORTED(x) ((x)[1] & 0x40)
 +#define HCI_AUTH_REQUEST_SUPPORTED(x) ((x)[1] & 0x80)
 +
 +#define HCI_SET_CONN_ENCRYPTION_SUPPORTED(x) ((x)[2] & 0x01)
 +#define HCI_CHANGE_CONN_LINK_KEY_SUPPORTED(x) ((x)[2] & 0x02)
 +#define HCI_MASTER_LINK_KEY_SUPPORTED(x) ((x)[2] & 0x04)
 +#define HCI_REMOTE_NAME_REQUEST_SUPPORTED(x) ((x)[2] & 0x08)
 +#define HCI_CANCEL_REMOTE_NAME_REQUEST_SUPPORTED(x) ((x)[2] & 0x10)
 +#define HCI_READ_REMOTE_SUPP_FEATURES_SUPPORTED(x) ((x)[2] & 0x20)
 +#define HCI_READ_REMOTE_EXT_FEATURES_SUPPORTED(x) ((x)[2] & 0x40)
 +#define HCI_READ_REMOTE_VER_INFO_SUPPORTED(x) ((x)[2] & 0x80)
 +
 +#define HCI_READ_CLOCK_OFFSET_SUPPORTED(x) ((x)[3] & 0x01)
 +#define HCI_READ_LMP_HANDLE_SUPPORTED(x) ((x)[3] & 0x02)
 +/* rest of bits in 3-rd byte are reserved */
 +
 +#define HCI_HOLD_MODE_CMD_SUPPORTED(x) ((x)[4] & 0x02)
 +#define HCI_SNIFF_MODE_CMD_SUPPORTED(x) ((x)[4] & 0x04)
 +#define HCI_EXIT_SNIFF_MODE_SUPPORTED(x) ((x)[4] & 0x08)
 +#define HCI_PARK_STATE_SUPPORTED(x) ((x)[4] & 0x10)
 +#define HCI_EXIT_PARK_STATE_SUPPORTED(x) ((x)[4] & 0x20)
 +#define HCI_QOS_SETUP_SUPPORTED(x) ((x)[4] & 0x40)
 +#define HCI_ROLE_DISCOVERY_SUPPORTED(x) ((x)[4] & 0x80)
 +
 +#define HCI_SWITCH_ROLE_SUPPORTED(x) ((x)[5] & 0x01)
 +#define HCI_READ_LINK_POLICY_SET_SUPPORTED(x) ((x)[5] & 0x02)
 +#define HCI_WRITE_LINK_POLICY_SET_SUPPORTED(x) ((x)[5] & 0x04)
 +#define HCI_READ_DEF_LINK_POLICY_SET_SUPPORTED(x) ((x)[5] & 0x08)
 +#define HCI_WRITE_DEF_LINK_POLICY_SET_SUPPORTED(x) ((x)[5] & 0x10)
 +#define HCI_FLOW_SPECIFICATION_SUPPORTED(x) ((x)[5] & 0x20)
 +#define HCI_SET_EVENT_MASK_SUPPORTED(x) ((x)[5] & 0x40)
 +#define HCI_RESET_SUPPORTED(x) ((x)[5] & 0x80)
 +
 +#define HCI_SET_EVENT_FILTER_SUPPORTED(x) ((x)[6] & 0x01)
 +#define HCI_FLUSH_SUPPORTED(x) ((x)[6] & 0x02)
 +#define HCI_READ_PIN_TYPE_SUPPORTED(x) ((x)[6] & 0x04)
 +#define HCI_WRITE_PIN_TYPE_SUPPORTED(x) ((x)[6] & 0x08)
 +#define HCI_CREATE_NEW_UNIT_KEY_SUPPORTED(x) ((x)[6] & 0x10)
 +#define HCI_READ_STORED_LINK_KEY_SUPPORTED(x) ((x)[6] & 0x20)
 +#define HCI_WRITE_STORED_LINK_KEY_SUPPORTED(x) ((x)[6] & 0x40)
 +#define HCI_DELETE_STORED_LINK_KEY_SUPPORTED(x) ((x)[6] & 0x80)
 +
 +#define HCI_WRITE_LOCAL_NAME_SUPPORTED(x) ((x)[7] & 0x01)
 +#define HCI_READ_LOCAL_NAME_SUPPORTED(x) ((x)[7] & 0x02)
 +#define HCI_READ_CONN_ACCEPT_TOUT_SUPPORTED(x) ((x)[7] & 0x04)
 +#define HCI_WRITE_CONN_ACCEPT_TOUT_SUPPORTED(x) ((x)[7] & 0x08)
 +#define HCI_READ_PAGE_TOUT_SUPPORTED(x) ((x)[7] & 0x10)
 +#define HCI_WRITE_PAGE_TOUT_SUPPORTED(x) ((x)[7] & 0x20)
 +#define HCI_READ_SCAN_ENABLE_SUPPORTED(x) ((x)[7] & 0x40)
 +#define HCI_WRITE_SCAN_ENABLE_SUPPORTED(x) ((x)[7] & 0x80)
 +
 +#define HCI_READ_PAGE_SCAN_ACTIVITY_SUPPORTED(x) ((x)[8] & 0x01)
 +#define HCI_WRITE_PAGE_SCAN_ACTIVITY_SUPPORTED(x) ((x)[8] & 0x02)
 +#define HCI_READ_INQURIY_SCAN_ACTIVITY_SUPPORTED(x) ((x)[8] & 0x04)
 +#define HCI_WRITE_INQURIY_SCAN_ACTIVITY_SUPPORTED(x) ((x)[8] & 0x08)
 +#define HCI_READ_AUTH_ENABLE_SUPPORTED(x) ((x)[8] & 0x10)
 +#define HCI_WRITE_AUTH_ENABLE_SUPPORTED(x) ((x)[8] & 0x20)
 +#define HCI_READ_ENCRYPT_ENABLE_SUPPORTED(x) ((x)[8] & 0x40)
 +#define HCI_WRITE_ENCRYPT_ENABLE_SUPPORTED(x) ((x)[8] & 0x80)
 +
 +#define HCI_READ_CLASS_DEVICE_SUPPORTED(x) ((x)[9] & 0x01)
 +#define HCI_WRITE_CLASS_DEVICE_SUPPORTED(x) ((x)[9] & 0x02)
 +#define HCI_READ_VOICE_SETTING_SUPPORTED(x) ((x)[9] & 0x04)
 +#define HCI_WRITE_VOICE_SETTING_SUPPORTED(x) ((x)[9] & 0x08)
 +#define HCI_READ_AUTOMATIC_FLUSH_TIMEOUT_SUPPORTED(x) ((x)[9] & 0x10)
 +#define HCI_WRITE_AUTOMATIC_FLUSH_TIMEOUT_SUPPORTED(x) ((x)[9] & 0x20)
 +#define HCI_READ_NUM_BROAD_RETRANS_SUPPORTED(x) ((x)[9] & 0x40)
 +#define HCI_WRITE_NUM_BROAD_RETRANS_SUPPORTED(x) ((x)[9] & 0x80)
 +
 +#define HCI_READ_HOLD_MODE_ACTIVITY_SUPPORTED(x) ((x)[10] & 0x01)
 +#define HCI_WRITE_HOLD_MODE_ACTIVITY_SUPPORTED(x) ((x)[10] & 0x02)
 +#define HCI_READ_TRANS_PWR_LEVEL_SUPPORTED(x) ((x)[10] & 0x04)
 +#define HCI_READ_SYNCH_FLOW_CTRL_ENABLE_SUPPORTED(x) ((x)[10] & 0x08)
 +#define HCI_WRITE_SYNCH_FLOW_CTRL_ENABLE_SUPPORTED(x) ((x)[10] & 0x10)
 +#define HCI_SET_HOST_CTRLR_TO_HOST_FC_SUPPORTED(x) ((x)[10] & 0x20)
 +#define HCI_HOST_BUFFER_SIZE_SUPPORTED(x) ((x)[10] & 0x40)
 +#define HCI_HOST_NUM_COMPLETED_PKTS_SUPPORTED(x) ((x)[10] & 0x80)
 +
 +#define HCI_READ_LINK_SUP_TOUT_SUPPORTED(x) ((x)[11] & 0x01)
 +#define HCI_WRITE_LINK_SUP_TOUT_SUPPORTED(x) ((x)[11] & 0x02)
 +#define HCI_READ_NUM_SUPP_IAC_SUPPORTED(x) ((x)[11] & 0x04)
 +#define HCI_READ_CURRENT_IAC_LAP_SUPPORTED(x) ((x)[11] & 0x08)
 +#define HCI_WRITE_CURRENT_IAC_LAP_SUPPORTED(x) ((x)[11] & 0x10)
 +#define HCI_READ_PAGE_SCAN_PER_MODE_SUPPORTED(x) ((x)[11] & 0x20)
 +#define HCI_WRITE_PAGE_SCAN_PER_MODE_SUPPORTED(x) ((x)[11] & 0x40)
 +#define HCI_READ_PAGE_SCAN_MODE_SUPPORTED(x) ((x)[11] & 0x80)
 +
 +#define HCI_WRITE_PAGE_SCAN_MODE_SUPPORTED(x) ((x)[12] & 0x01)
 +#define HCI_SET_AFH_CHNL_CLASS_SUPPORTED(x) ((x)[12] & 0x02)
 +#define HCI_READ_INQUIRY_SCAN_TYPE_SUPPORTED(x) ((x)[12] & 0x10)
 +#define HCI_WRITE_INQUIRY_SCAN_TYPE_SUPPORTED(x) ((x)[12] & 0x20)
 +#define HCI_READ_INQUIRY_MODE_SUPPORTED(x) ((x)[12] & 0x40)
 +#define HCI_WRITE_INQUIRY_MODE_SUPPORTED(x) ((x)[12] & 0x80)
 +
 +#define HCI_READ_PAGE_SCAN_TYPE_SUPPORTED(x) ((x)[13] & 0x01)
 +#define HCI_WRITE_PAGE_SCAN_TYPE_SUPPORTED(x) ((x)[13] & 0x02)
 +#define HCI_READ_AFH_CHNL_ASSESS_MODE_SUPPORTED(x) ((x)[13] & 0x04)
 +#define HCI_WRITE_AFH_CHNL_ASSESS_MODE_SUPPORTED(x) ((x)[13] & 0x08)
 +
 +#define HCI_READ_LOCAL_VER_INFO_SUPPORTED(x) ((x)[14] & 0x08)
 +#define HCI_READ_LOCAL_SUP_CMDS_SUPPORTED(x) ((x)[14] & 0x10)
 +#define HCI_READ_LOCAL_SUPP_FEATURES_SUPPORTED(x) ((x)[14] & 0x20)
 +#define HCI_READ_LOCAL_EXT_FEATURES_SUPPORTED(x) ((x)[14] & 0x40)
 +#define HCI_READ_BUFFER_SIZE_SUPPORTED(x) ((x)[14] & 0x80)
 +
 +#define HCI_READ_COUNTRY_CODE_SUPPORTED(x) ((x)[15] & 0x01)
 +#define HCI_READ_BD_ADDR_SUPPORTED(x) ((x)[15] & 0x02)
 +#define HCI_READ_FAIL_CONTACT_CNTR_SUPPORTED(x) ((x)[15] & 0x04)
 +#define HCI_RESET_FAIL_CONTACT_CNTR_SUPPORTED(x) ((x)[15] & 0x08)
 +#define HCI_GET_LINK_QUALITY_SUPPORTED(x) ((x)[15] & 0x10)
 +#define HCI_READ_RSSI_SUPPORTED(x) ((x)[15] & 0x20)
 +#define HCI_READ_AFH_CH_MAP_SUPPORTED(x) ((x)[15] & 0x40)
 +#define HCI_READ_BD_CLOCK_SUPPORTED(x) ((x)[15] & 0x80)
 +
 +#define HCI_READ_LOOPBACK_MODE_SUPPORTED(x) ((x)[16] & 0x01)
 +#define HCI_WRITE_LOOPBACK_MODE_SUPPORTED(x) ((x)[16] & 0x02)
 +#define HCI_ENABLE_DEV_UNDER_TEST_SUPPORTED(x) ((x)[16] & 0x04)
 +#define HCI_SETUP_SYNCH_CONN_SUPPORTED(x) ((x)[16] & 0x08)
 +#define HCI_ACCEPT_SYNCH_CONN_SUPPORTED(x) ((x)[16] & 0x10)
 +#define HCI_REJECT_SYNCH_CONN_SUPPORTED(x) ((x)[16] & 0x20)
 +
 +#define HCI_READ_EXT_INQUIRY_RESP_SUPPORTED(x) ((x)[17] & 0x01)
 +#define HCI_WRITE_EXT_INQUIRY_RESP_SUPPORTED(x) ((x)[17] & 0x02)
 +#define HCI_REFRESH_ENCRYPTION_KEY_SUPPORTED(x) ((x)[17] & 0x04)
 +#define HCI_SNIFF_SUB_RATE_CMD_SUPPORTED(x) ((x)[17] & 0x10)
 +#define HCI_READ_SIMPLE_PAIRING_MODE_SUPPORTED(x) ((x)[17] & 0x20)
 +#define HCI_WRITE_SIMPLE_PAIRING_MODE_SUPPORTED(x) ((x)[17] & 0x40)
 +#define HCI_READ_LOCAL_OOB_DATA_SUPPORTED(x) ((x)[17] & 0x80)
 +
 +#define HCI_READ_INQUIRY_RESPONSE_TX_POWER_SUPPORTED(x) ((x)[18] & 0x01)
 +#define HCI_WRITE_INQUIRY_RESPONSE_TX_POWER_SUPPORTED(x) ((x)[18] & 0x02)
 +#define HCI_READ_DEFAULT_ERRONEOUS_DATA_REPORTING_SUPPORTED(x) ((x)[18] & 0x04)
 +#define HCI_WRITE_DEFAULT_ERRONEOUS_DATA_REPORTING_SUPPORTED(x) ((x)[18] & 0x08)
 +#define HCI_IO_CAPABILITY_REQUEST_REPLY_SUPPORTED(x) ((x)[18] & 0x80)
 +
 +#define HCI_USER_CONFIRMATION_REQUEST_REPLY_SUPPORTED(x) ((x)[19] & 0x01)
 +#define HCI_USER_CONFIRMATION_REQUEST_NEG_REPLY_SUPPORTED(x) ((x)[19] & 0x02)
 +#define HCI_USER_PASSKEY_REQUEST_REPLY_SUPPORTED(x) ((x)[19] & 0x04)
 +#define HCI_USER_PASSKEY_REQUEST_NEG_REPLY_SUPPORTED(x) ((x)[19] & 0x08)
 +#define HCI_REMOTE_OOB_DATA_REQUEST_REPLY_SUPPORTED(x) ((x)[19] & 0x10)
 +#define HCI_WRITE_SIMPLE_PAIRING_DBG_MODE_SUPPORTED(x) ((x)[19] & 0x20)
 +#define HCI_ENHANCED_FLUSH_SUPPORTED(x) ((x)[19] & 0x40)
 +#define HCI_REMOTE_OOB_DATA_REQUEST_NEG_REPLY_SUPPORTED(x) ((x)[19] & 0x80)
 +
 +#define HCI_SEND_NOTIF_SUPPORTED(x) ((x)[20] & 0x04)
 +#define HCI_IO_CAP_REQ_NEG_REPLY_SUPPORTED(x) ((x)[20] & 0x08)
 +#define HCI_READ_ENCR_KEY_SIZE_SUPPORTED(x) ((x)[20] & 0x10)
 +
 +#define HCI_CREATE_PHYSICAL_LINK_SUPPORTED(x) ((x)[21] & 0x01)
 +#define HCI_ACCEPT_PHYSICAL_LINK_SUPPORTED(x) ((x)[21] & 0x02)
 +#define HCI_DISCONNECT_PHYSICAL_LINK_SUPPORTED(x) ((x)[21] & 0x04)
 +#define HCI_CREATE_LOGICAL_LINK_SUPPORTED(x) ((x)[21] & 0x08)
 +#define HCI_ACCEPT_LOGICAL_LINK_SUPPORTED(x) ((x)[21] & 0x10)
 +#define HCI_DISCONNECT_LOGICAL_LINK_SUPPORTED(x) ((x)[21] & 0x20)
 +#define HCI_LOGICAL_LINK_CANCEL_SUPPORTED(x) ((x)[21] & 0x40)
 +#define HCI_FLOW_SPEC_MODIFY_SUPPORTED(x) ((x)[21] & 0x80)
 +
 +#define HCI_READ_LOGICAL_LINK_ACCEPT_TIMEOUT_SUPPORTED(x) ((x)[22] & 0x01)
 +#define HCI_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT_SUPPORTED(x) ((x)[22] & 0x02)
 +#define HCI_SET_EVENT_MASK_PAGE_2_SUPPORTED(x) ((x)[22] & 0x04)
 +#define HCI_READ_LOCATION_DATA_SUPPORTED(x) ((x)[22] & 0x08)
 +#define HCI_WRITE_LOCATION_DATA_SUPPORTED(x) ((x)[22] & 0x10)
 +#define HCI_READ_LOCAL_AMP_INFO_SUPPORTED(x) ((x)[22] & 0x20)
 +#define HCI_READ_LOCAL_AMP_ASSOC_SUPPORTED(x) ((x)[22] & 0x40)
 +#define HCI_WRITE_REMOTE_AMP_ASSOC_SUPPORTED(x) ((x)[22] & 0x80)
 +
 +#define HCI_READ_FLOW_CONTROL_MODE_SUPPORTED(x) ((x)[23] & 0x01)
 +#define HCI_WRITE_FLOW_CONTROL_MODE_SUPPORTED(x) ((x)[23] & 0x02)
 +#define HCI_READ_DATA_BLOCK_SIZE_SUPPORTED(x) ((x)[23] & 0x04)
 +#define HCI_ENABLE_AMP_RCVR_REPORTS_SUPPORTED(x) ((x)[23] & 0x20)
 +#define HCI_AMP_TEST_END_SUPPORTED(x) ((x)[23] & 0x40)
 +#define HCI_AMP_TEST_SUPPORTED(x) ((x)[23] & 0x80)
 +
 +#define HCI_READ_TRANSMIT_POWER_LEVEL_SUPPORTED(x) ((x)[24] & 0x01)
 +#define HCI_READ_BE_FLUSH_TOUT_SUPPORTED(x) ((x)[24] & 0x04)
 +#define HCI_WRITE_BE_FLUSH_TOUT_SUPPORTED(x) ((x)[24] & 0x08)
 +#define HCI_SHORT_RANGE_MODE_SUPPORTED(x) ((x)[24] & 0x10)
 +
 +#define HCI_ENH_SETUP_SYNCH_CONN_SUPPORTED(x) ((x)[29] & 0x08)
 +#define HCI_ENH_ACCEPT_SYNCH_CONN_SUPPORTED(x) ((x)[29] & 0x10)
 +#define HCI_READ_LOCAL_CODECS_SUPPORTED(x) ((x)[29] & 0x20)
 +#define HCI_SET_MWS_CHANNEL_PARAMETERS_SUPPORTED(x) ((x)[29] & 0x40)
 +#define HCI_SET_EXTERNAL_FRAME_CONFIGURATION_SUPPORTED(x) ((x)[29] & 0x80)
 +
 +#define HCI_SET_MWS_SIGNALING_SUPPORTED(x) ((x)[30] & 0x01)
 +#define HCI_SET_MWS_TRANSPORT_LAYER_SUPPORTED(x) ((x)[30] & 0x02)
 +#define HCI_SET_MWS_SCAN_FREQUENCY_TABLE_SUPPORTED(x) ((x)[30] & 0x04)
 +#define HCI_GET_MWS_TRANS_LAYER_CFG_SUPPORTED(x) ((x)[30] & 0x08)
 +#define HCI_SET_MWS_PATTERN_CONFIGURATION_SUPPORTED(x) ((x)[30] & 0x10)
 +#define HCI_SET_TRIG_CLK_CAP_SUPPORTED(x) ((x)[30] & 0x20)
 +#define HCI_TRUNCATED_PAGE_SUPPORTED(x) ((x)[30] & 0x40)
 +#define HCI_TRUNCATED_PAGE_CANCEL_SUPPORTED(x) ((x)[30] & 0x80)
 +
 +#define HCI_SET_CONLESS_SLAVE_BRCST_SUPPORTED(x) ((x)[31] & 0x01)
 +#define HCI_SET_CONLESS_SLAVE_BRCST_RECEIVE_SUPPORTED(x) ((x)[31] & 0x02)
 +#define HCI_START_SYNC_TRAIN_SUPPORTED(x) ((x)[31] & 0x04)
 +#define HCI_RECEIVE_SYNC_TRAIN_SUPPORTED(x) ((x)[31] & 0x08)
 +#define HCI_SET_RESERVED_LT_ADDR_SUPPORTED(x) ((x)[31] & 0x10)
 +#define HCI_DELETE_RESERVED_LT_ADDR_SUPPORTED(x) ((x)[31] & 0x20)
 +#define HCI_SET_CONLESS_SLAVE_BRCST_DATA_SUPPORTED(x) ((x)[31] & 0x40)
 +#define HCI_READ_SYNC_TRAIN_PARAM_SUPPORTED(x) ((x)[31] & 0x80)
 +
 +#define HCI_WRITE_SYNC_TRAIN_PARAM_SUPPORTED(x) ((x)[32] & 0x01)
 +#define HCI_REMOTE_OOB_EXTENDED_DATA_REQUEST_REPLY_SUPPORTED(x) ((x)[32] & 0x02)
 +#define HCI_READ_SECURE_CONNS_SUPPORT_SUPPORTED(x) ((x)[32] & 0x04)
 +#define HCI_WRITE_SECURE_CONNS_SUPPORT_SUPPORTED(x) ((x)[32] & 0x08)
 +#define HCI_READ_AUTHENT_PAYLOAD_TOUT_SUPPORTED(x) ((x)[32] & 0x10)
 +#define HCI_WRITE_AUTHENT_PAYLOAD_TOUT_SUPPORTED(x) ((x)[32] & 0x20)
 +#define HCI_READ_LOCAL_OOB_EXTENDED_DATA_SUPPORTED(x) ((x)[32] & 0x40)
 +#define HCI_WRITE_SECURE_CONNECTIONS_TEST_MODE_SUPPORTED(x) ((x)[32] & 0x80)
 +
 +#define HCI_LE_RC_CONN_PARAM_UPD_RPY_SUPPORTED(x) ((x)[33] & 0x10)
 +#define HCI_LE_RC_CONN_PARAM_UPD_NEG_RPY_SUPPORTED(x) ((x)[33] & 0x20)
 +
 +#define HCI_LE_READ_PHY_SUPPORTED(x) ((x)[35] & 0x10)
 +#define HCI_LE_SET_DEFAULT_PHY_SUPPORTED(x) ((x)[35] & 0x20)
 +#define HCI_LE_SET_PHY_SUPPORTED(x) ((x)[35] & 0x40)
 +#define HCI_LE_ENH_RX_TEST_SUPPORTED(x) ((x)[35] & 0x80)
 +
 +#define HCI_LE_ENH_TX_TEST_SUPPORTED(x) ((x)[36] & 0x01)
 +
 +#define HCI_LE_SET_PRIVACY_MODE_SUPPORTED(x) ((x)[39] & 0x04)
  
  #endif