| /****************************************************************************** |
| * @file hci_cmd.h |
| * |
| * @brief for TLSR chips |
| * |
| * @author public@telink-semi.com; |
| * @date Sep. 30, 2010 |
| * |
| * @attention |
| * |
| * Copyright (C) 2019-2020 Telink Semiconductor (Shanghai) Co., Ltd. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| *****************************************************************************/ |
| #ifndef HCI_CMD_H_ |
| #define HCI_CMD_H_ |
| |
| |
| #include "stack/ble/ble_format.h" |
| |
| |
| /** |
| * @brief Command Parameters for "7.8.5 LE Set Advertising Parameters command" |
| */ |
| /* Advertising Parameters structure */ |
| typedef struct { |
| u16 intervalMin; // Minimum advertising interval for non-directed advertising, time = N * 0.625ms |
| u16 intervalMax; // Maximum advertising interval for non-directed advertising, time = N * 0.625ms |
| u8 advType; // Advertising |
| u8 ownAddrType; |
| u8 peerAddrType; |
| u8 peerAddr[6];//BLE_ADDR_LEN]; |
| u8 advChannelMap; |
| u8 advFilterPolicy; |
| } adv_para_t; |
| |
| |
| /* Advertising_Interval, Time = N * 0.625 ms, |
| * Notice that these are just part of but not all Advertising_Interval value */ |
| typedef enum{ |
| ADV_INTERVAL_3_125MS = 5, |
| ADV_INTERVAL_3_75MS = 6, |
| ADV_INTERVAL_10MS = 16, |
| ADV_INTERVAL_15MS = 24, |
| ADV_INTERVAL_20MS = 32, |
| ADV_INTERVAL_25MS = 40, |
| ADV_INTERVAL_30MS = 48, |
| ADV_INTERVAL_35MS = 56, |
| ADV_INTERVAL_40MS = 64, |
| ADV_INTERVAL_45MS = 72, |
| ADV_INTERVAL_50MS = 80, |
| ADV_INTERVAL_55MS = 88, |
| ADV_INTERVAL_60MS = 96, |
| ADV_INTERVAL_70MS = 112, |
| ADV_INTERVAL_80MS = 128, |
| ADV_INTERVAL_90MS = 144, |
| ADV_INTERVAL_100MS = 160, |
| ADV_INTERVAL_150MS = 240, |
| ADV_INTERVAL_105MS = 168, |
| ADV_INTERVAL_200MS = 320, |
| ADV_INTERVAL_205MS = 328, |
| ADV_INTERVAL_250MS = 400, |
| ADV_INTERVAL_300MS = 480, |
| ADV_INTERVAL_305MS = 488, |
| ADV_INTERVAL_350MS = 560, |
| ADV_INTERVAL_400MS = 640, |
| ADV_INTERVAL_405MS = 648, |
| ADV_INTERVAL_450MS = 720, |
| ADV_INTERVAL_500MS = 800, |
| ADV_INTERVAL_505MS = 808, |
| ADV_INTERVAL_600MS = 960, |
| ADV_INTERVAL_700MS = 1120, |
| ADV_INTERVAL_800MS = 1280, |
| ADV_INTERVAL_900MS = 1440, |
| ADV_INTERVAL_1S = 1600, |
| ADV_INTERVAL_1S5 = 2400, |
| ADV_INTERVAL_2S = 3200, |
| ADV_INTERVAL_1_28_S = 2048, |
| ADV_INTERVAL_10_24S = 16384, |
| }adv_inter_t; |
| |
| /* Periodic_adv_Interval, Time = N * 1.25 ms, |
| * Notice that these are just part of but not all Periodic_adv_Interval value */ |
| typedef enum{ |
| PERADV_INTERVAL_7P5MS = 6, |
| PERADV_INTERVAL_8P75MS = 7, |
| PERADV_INTERVAL_10MS = 8, |
| PERADV_INTERVAL_11P25MS = 9, |
| PERADV_INTERVAL_12P5MS = 10, |
| PERADV_INTERVAL_13P75MS = 11, |
| PERADV_INTERVAL_15MS = 12, |
| PERADV_INTERVAL_16P25MS = 13, |
| PERADV_INTERVAL_17P5MS = 14, |
| PERADV_INTERVAL_18P75MS = 15, |
| PERADV_INTERVAL_20MS = 16, |
| PERADV_INTERVAL_21P25MS = 17, |
| PERADV_INTERVAL_22P5MS = 18, |
| PERADV_INTERVAL_23P75MS = 19, |
| PERADV_INTERVAL_25MS = 20, |
| PERADV_INTERVAL_26P25MS = 21, |
| PERADV_INTERVAL_27P5MS = 22, |
| PERADV_INTERVAL_28P75MS = 23, |
| PERADV_INTERVAL_30MS = 24, |
| PERADV_INTERVAL_31P25MS = 25, |
| PERADV_INTERVAL_32P5MS = 26, |
| PERADV_INTERVAL_33P75MS = 27, |
| PERADV_INTERVAL_35MS = 28, |
| PERADV_INTERVAL_36P25MS = 29, |
| PERADV_INTERVAL_37P5MS = 30, |
| PERADV_INTERVAL_38P75MS = 31, |
| PERADV_INTERVAL_40MS = 32, |
| PERADV_INTERVAL_41P25MS = 33, |
| PERADV_INTERVAL_42P5MS = 34, |
| PERADV_INTERVAL_43P75MS = 35, |
| PERADV_INTERVAL_45MS = 36, |
| PERADV_INTERVAL_46P25MS = 37, |
| PERADV_INTERVAL_47P5MS = 38, |
| PERADV_INTERVAL_48P75MS = 39, |
| PERADV_INTERVAL_50MS = 40, |
| PERADV_INTERVAL_55MS = 44, |
| PERADV_INTERVAL_60MS = 48, |
| PERADV_INTERVAL_62P5MS = 50, |
| PERADV_INTERVAL_65MS = 52, |
| PERADV_INTERVAL_70MS = 56, |
| PERADV_INTERVAL_75MS = 60, |
| PERADV_INTERVAL_80MS = 64, |
| PERADV_INTERVAL_85MS = 68, |
| PERADV_INTERVAL_90MS = 72, |
| PERADV_INTERVAL_95MS = 78, |
| PERADV_INTERVAL_100MS = 80, |
| PERADV_INTERVAL_110MS = 88, |
| PERADV_INTERVAL_120MS = 96, |
| PERADV_INTERVAL_130MS = 104, |
| PERADV_INTERVAL_140MS = 112, |
| PERADV_INTERVAL_150MS = 120, |
| PERADV_INTERVAL_180MS = 144, |
| PERADV_INTERVAL_200MS = 160, |
| PERADV_INTERVAL_250MS = 200, |
| PERADV_INTERVAL_300MS = 240, |
| PERADV_INTERVAL_320MS = 256, |
| }periodic_adv_inter_t; |
| |
| /* Advertisement Type */ |
| typedef enum{ |
| ADV_TYPE_CONNECTABLE_UNDIRECTED = 0x00, // ADV_IND |
| ADV_TYPE_CONNECTABLE_DIRECTED_HIGH_DUTY = 0x01, // ADV_INDIRECT_IND (high duty cycle) |
| ADV_TYPE_SCANNABLE_UNDIRECTED = 0x02 , // ADV_SCAN_IND |
| ADV_TYPE_NONCONNECTABLE_UNDIRECTED = 0x03 , // ADV_NONCONN_IND |
| ADV_TYPE_CONNECTABLE_DIRECTED_LOW_DUTY = 0x04, // ADV_INDIRECT_IND (low duty cycle) |
| }adv_type_t; |
| |
| /* Own Address Type */ |
| typedef enum{ |
| OWN_ADDRESS_PUBLIC = 0, |
| OWN_ADDRESS_RANDOM = 1, |
| OWN_ADDRESS_RESOLVE_PRIVATE_PUBLIC = 2, |
| OWN_ADDRESS_RESOLVE_PRIVATE_RANDOM = 3, |
| }own_addr_type_t; |
| |
| /* Advertising_Channel_Map */ |
| typedef enum{ |
| BLT_ENABLE_ADV_37 = BIT(0), |
| BLT_ENABLE_ADV_38 = BIT(1), |
| BLT_ENABLE_ADV_39 = BIT(2), |
| BLT_ENABLE_ADV_ALL = (BLT_ENABLE_ADV_37 | BLT_ENABLE_ADV_38 | BLT_ENABLE_ADV_39), |
| }adv_chn_map_t; |
| |
| /* Advertising_Filter_Policy */ |
| typedef enum { |
| ADV_FP_ALLOW_SCAN_ANY_ALLOW_CONN_ANY = 0x00, // Process scan and connection requests from all devices |
| ADV_FP_ALLOW_SCAN_WL_ALLOW_CONN_ANY = 0x01, // Process connection requests from all devices and only scan requests from devices that are in the White List. |
| ADV_FP_ALLOW_SCAN_ANY_ALLOW_CONN_WL = 0x02, // Process scan requests from all devices and only connection requests from devices that are in the White List.. |
| ADV_FP_ALLOW_SCAN_WL_ALLOW_CONN_WL = 0x03, // Process scan and connection requests only from devices in the White List. |
| |
| ADV_FP_NONE = ADV_FP_ALLOW_SCAN_ANY_ALLOW_CONN_ANY, //adv filter policy set to zero, not use whitelist |
| } adv_fp_type_t; //adv_filterPolicy_type_t |
| |
| |
| #define ALLOW_SCAN_WL BIT(0) |
| #define ALLOW_CONN_WL BIT(1) |
| |
| |
| |
| |
| /** |
| * @brief Command Parameters for "7.8.9 LE Set Advertising Enable command" |
| */ |
| typedef enum { |
| BLC_ADV_DISABLE = 0x00, |
| BLC_ADV_ENABLE = 0x01, |
| } ll_adv_en_t; |
| |
| |
| |
| |
| /** |
| * @brief Command Parameters for "7.8.10 LE Set Scan Parameters command" |
| */ |
| typedef enum { |
| SCAN_TYPE_PASSIVE = 0x00, |
| SCAN_TYPE_ACTIVE = 0x01, |
| } scan_type_t; |
| |
| |
| /* Scannning_Interval, Time = N * 0.625 ms, |
| * Notice that these are just part of but not all Scannning_Interval value */ |
| typedef enum{ |
| SCAN_INTERVAL_10MS = 16, |
| SCAN_INTERVAL_20MS = 32, |
| SCAN_INTERVAL_30MS = 48, |
| SCAN_INTERVAL_40MS = 64, |
| SCAN_INTERVAL_50MS = 80, |
| SCAN_INTERVAL_60MS = 96, |
| SCAN_INTERVAL_70MS = 112, |
| SCAN_INTERVAL_80MS = 128, |
| SCAN_INTERVAL_90MS = 144, |
| SCAN_INTERVAL_100MS = 160, |
| SCAN_INTERVAL_150MS = 240, |
| SCAN_INTERVAL_200MS = 320, |
| SCAN_INTERVAL_250MS = 400, |
| SCAN_INTERVAL_300MS = 480, |
| SCAN_INTERVAL_350MS = 560, |
| SCAN_INTERVAL_400MS = 640, |
| SCAN_INTERVAL_450MS = 720, |
| SCAN_INTERVAL_500MS = 800, |
| SCAN_INTERVAL_600MS = 960, |
| SCAN_INTERVAL_700MS = 1120, |
| SCAN_INTERVAL_800MS = 1280, |
| SCAN_INTERVAL_900MS = 1440, |
| SCAN_INTERVAL_1000MS = 1600, |
| }scan_inter_t; |
| |
| /* Scannning_Window, Time = N * 0.625 ms, |
| * Notice that these are just part of but not all Scannning_Window value */ |
| typedef enum{ |
| SCAN_WINDOW_10MS = 16, |
| SCAN_WINDOW_20MS = 32, |
| SCAN_WINDOW_30MS = 48, |
| SCAN_WINDOW_40MS = 64, |
| SCAN_WINDOW_50MS = 80, |
| SCAN_WINDOW_60MS = 96, |
| SCAN_WINDOW_70MS = 112, |
| SCAN_WINDOW_80MS = 128, |
| SCAN_WINDOW_90MS = 144, |
| SCAN_WINDOW_100MS = 160, |
| SCAN_WINDOW_150MS = 240, |
| SCAN_WINDOW_200MS = 320, |
| SCAN_WINDOW_250MS = 400, |
| SCAN_WINDOW_300MS = 480, |
| SCAN_WINDOW_350MS = 560, |
| SCAN_WINDOW_400MS = 640, |
| SCAN_WINDOW_450MS = 720, |
| SCAN_WINDOW_500MS = 800, |
| SCAN_WINDOW_600MS = 960, |
| SCAN_WINDOW_700MS = 1120, |
| SCAN_WINDOW_800MS = 1280, |
| SCAN_WINDOW_900MS = 1440, |
| SCAN_WINDOW_1000MS = 1600, |
| }scan_wind_t; |
| |
| /* Scanning_Filter_Policy */ |
| typedef enum { |
| SCAN_FP_ALLOW_ADV_ANY = 0x00, //except direct adv address not match |
| SCAN_FP_ALLOW_ADV_WL = 0x01, //except direct adv address not match |
| SCAN_FP_ALLOW_UNDIRECT_ADV = 0x02, //and direct adv address match initiator's resolvable private MAC |
| SCAN_FP_ALLOW_ADV_WL_DIRECT_ADV_MACTH = 0x03, //and direct adv address match initiator's resolvable private MAC |
| |
| } scan_fp_type_t; |
| |
| |
| |
| /** |
| * @brief Command Parameters for "7.8.11 LE Set Scan Enable command" |
| */ |
| /* LE_Scan_Enable */ |
| typedef enum { |
| BLC_SCAN_DISABLE = 0x00, |
| BLC_SCAN_ENABLE = 0x01, |
| } scan_en_t; |
| |
| /* Filter_Duplicates */ |
| typedef enum { |
| DUP_FILTER_DISABLE = 0x00, |
| DUP_FILTER_ENABLE = 0x01, |
| } dupFilter_en_t; |
| |
| |
| |
| |
| /** |
| * @brief Command Parameters for "7.8.12 LE Create Connection command" |
| */ |
| |
| /* Initiator_Filter_Policy */ |
| typedef enum { |
| INITIATE_FP_ADV_SPECIFY = 0x00, //connect ADV specified by host |
| INITIATE_FP_ADV_WL = 0x01, //connect ADV in whiteList |
| |
| } init_fp_type_t; //init_filterPolicy_type_t |
| |
| /* Connection_Interval, Time = N * 1.25 ms, |
| * Notice that these are just part of but not all Connection_Interval value */ |
| typedef enum{ |
| CONN_INTERVAL_7P5MS = 6, |
| CONN_INTERVAL_8P75MS = 7, |
| CONN_INTERVAL_10MS = 8, |
| CONN_INTERVAL_11P25MS = 9, |
| CONN_INTERVAL_12P5MS = 10, |
| CONN_INTERVAL_13P75MS = 11, |
| CONN_INTERVAL_15MS = 12, |
| CONN_INTERVAL_16P25MS = 13, |
| CONN_INTERVAL_17P5MS = 14, |
| CONN_INTERVAL_18P75MS = 15, |
| CONN_INTERVAL_20MS = 16, |
| CONN_INTERVAL_21P25MS = 17, |
| CONN_INTERVAL_22P5MS = 18, |
| CONN_INTERVAL_23P75MS = 19, |
| CONN_INTERVAL_25MS = 20, |
| CONN_INTERVAL_26P25MS = 21, |
| CONN_INTERVAL_27P5MS = 22, |
| CONN_INTERVAL_28P75MS = 23, |
| CONN_INTERVAL_30MS = 24, |
| CONN_INTERVAL_31P25MS = 25, |
| CONN_INTERVAL_32P5MS = 26, |
| CONN_INTERVAL_33P75MS = 27, |
| CONN_INTERVAL_35MS = 28, |
| CONN_INTERVAL_36P25MS = 29, |
| CONN_INTERVAL_37P5MS = 30, |
| CONN_INTERVAL_38P75MS = 31, |
| CONN_INTERVAL_40MS = 32, |
| CONN_INTERVAL_41P25MS = 33, |
| CONN_INTERVAL_42P5MS = 34, |
| CONN_INTERVAL_43P75MS = 35, |
| CONN_INTERVAL_45MS = 36, |
| CONN_INTERVAL_46P25MS = 37, |
| CONN_INTERVAL_47P5MS = 38, |
| CONN_INTERVAL_48P75MS = 39, |
| CONN_INTERVAL_50MS = 40, |
| CONN_INTERVAL_55MS = 44, |
| CONN_INTERVAL_60MS = 48, |
| CONN_INTERVAL_62P5MS = 50, |
| CONN_INTERVAL_65MS = 52, |
| CONN_INTERVAL_70MS = 56, |
| CONN_INTERVAL_75MS = 60, |
| CONN_INTERVAL_80MS = 64, |
| CONN_INTERVAL_85MS = 68, |
| CONN_INTERVAL_90MS = 72, |
| CONN_INTERVAL_95MS = 78, |
| CONN_INTERVAL_100MS = 80, |
| CONN_INTERVAL_110MS = 88, |
| CONN_INTERVAL_120MS = 96, |
| CONN_INTERVAL_130MS = 104, |
| CONN_INTERVAL_140MS = 112, |
| CONN_INTERVAL_150MS = 120, |
| CONN_INTERVAL_180MS = 144, |
| CONN_INTERVAL_200MS = 160, |
| CONN_INTERVAL_250MS = 200, |
| CONN_INTERVAL_300MS = 240, |
| CONN_INTERVAL_320MS = 256, |
| }conn_inter_t; |
| |
| |
| /* Supervision_Timeout, Time = N * 10 ms, |
| * Notice that these are just part of but not all Supervision_Timeout value */ |
| typedef enum{ |
| CONN_TIMEOUT_500MS = 50, |
| CONN_TIMEOUT_1S = 100, |
| CONN_TIMEOUT_1S5 = 150, |
| CONN_TIMEOUT_2S = 200, |
| CONN_TIMEOUT_2S5 = 250, |
| CONN_TIMEOUT_3S = 300, |
| CONN_TIMEOUT_3S5 = 350, |
| CONN_TIMEOUT_4S = 400, |
| CONN_TIMEOUT_4S5 = 450, |
| CONN_TIMEOUT_5S = 500, |
| CONN_TIMEOUT_6S = 600, |
| CONN_TIMEOUT_7S = 700, |
| CONN_TIMEOUT_8S = 800, |
| CONN_TIMEOUT_9S = 900, |
| CONN_TIMEOUT_10S = 1000, |
| CONN_TIMEOUT_15S = 1500, |
| CONN_TIMEOUT_20S = 2000, |
| }conn_tm_t; |
| |
| |
| |
| |
| |
| |
| |
| /** |
| * @brief Return Parameters for "7.8.46 LE Read Maximum Data Length command" |
| */ |
| typedef struct { |
| u8 status; |
| u16 support_max_tx_oct; |
| u16 support_max_tx_time; |
| u16 support_max_rx_oct; |
| u16 support_max_rx_time; |
| } hci_le_readMaxDataLengthCmd_retParam_t; |
| |
| |
| |
| |
| |
| /** |
| * @brief Return Parameters for "7.8.47 LE Read PHY command" |
| */ |
| typedef struct { |
| u8 status; |
| u8 handle[2]; |
| u8 tx_phy; |
| u8 rx_phy; |
| } hci_le_readPhyCmd_retParam_t; |
| |
| |
| |
| /** |
| * @brief Command Parameters for "7.8.48 LE Set Default PHY command" |
| */ |
| |
| |
| /** |
| * @brief Command Parameters for "7.8.49 LE Set PHY command" |
| */ |
| |
| typedef struct { |
| u16 connHandle; |
| u8 all_phys; |
| u8 tx_phys; |
| u8 rx_phys; |
| u16 phy_options; |
| } hci_le_setPhyCmd_param_t; |
| |
| |
| |
| |
| typedef enum { |
| BLE_PHY_1M = 0x01, |
| BLE_PHY_2M = 0x02, |
| BLE_PHY_CODED = 0x03, |
| } le_phy_type_t; |
| |
| typedef enum { |
| PHY_PREFER_1M = BIT(0), |
| PHY_PREFER_2M = BIT(1), |
| PHY_PREFER_CODED = BIT(2), |
| } le_phy_prefer_type_t; |
| |
| typedef enum { |
| PHY_TRX_PREFER = 0, //has preference among TX & RX PHYs |
| PHY_TX_NO_PREFER = BIT(0), //has no preference among TX PHYs |
| PHY_RX_NO_PREFER = BIT(1), //has no preference among RX PHYs |
| PHY_TRX_NO_PREFER = (BIT(0) | BIT(1)), //has no preference among TX & RX PHYs |
| } le_phy_prefer_mask_t; |
| |
| typedef enum { |
| CODED_PHY_PREFER_NONE = 0, |
| CODED_PHY_PREFER_S2 = 1, |
| CODED_PHY_PREFER_S8 = 2, |
| } le_ci_prefer_t; //LE coding indication prefer |
| |
| |
| |
| |
| |
| |
| |
| /** |
| * @brief Command Parameters for "7.8.53 LE Set Extended Advertising Parameters command" |
| */ |
| typedef struct { |
| u8 adv_handle; |
| u16 advEvt_props; |
| u8 pri_advIntMin[3]; |
| u8 pri_advIntMax[3]; |
| u8 pri_advChnMap; |
| u8 ownAddrType; |
| u8 peerAddrType; |
| u8 peerAddr[6]; |
| u8 advFilterPolicy; |
| u8 adv_tx_pow; |
| u8 pri_adv_phy; |
| u8 sec_adv_max_skip; |
| u8 sec_adv_phy; |
| u8 adv_sid; |
| u8 scan_req_noti_en; |
| }hci_le_setExtAdvParam_cmdParam_t; |
| |
| /* Advertising_Handle */ |
| typedef enum{ |
| ADV_HANDLE0 = 0x00, |
| ADV_HANDLE1 = 0x01, |
| ADV_HANDLE2 = 0x02, |
| }adv_handle_t; |
| |
| |
| |
| /* Advertising Event Properties mask*/ |
| typedef enum{ |
| ADVEVT_PROP_MASK_CONNECTABLE = BIT(0), |
| ADVEVT_PROP_MASK_SCANNABLE = BIT(1), |
| ADVEVT_PROP_MASK_DIRECTED = BIT(2), |
| ADVEVT_PROP_MASK_HD_DIRECTED = BIT(3), |
| ADVEVT_PROP_MASK_LEGACY = BIT(4), |
| ADVEVT_PROP_MASK_ANON_ADV = BIT(5), |
| ADVEVT_PROP_MASK_INC_TX_PWR = BIT(6), |
| }advEvtProp_mask_t; |
| |
| |
| #define ADVEVT_PROP_MASK_CONNECTABLE_SCANNABLE (0x0003) // ADVEVT_PROP_MASK_CONNECTABLE | ADVEVT_PROP_MASK_SCANNABLE |
| #define ADVEVT_PROP_MASK_LEGACY_SCANNABLE (0x0012) // ADVEVT_PROP_MASK_LEGACY | ADVEVT_PROP_MASK_SCANNABLE |
| #define ADVEVT_PROP_MASK_LEGACY_DIRECTED (0x0014) // ADVEVT_PROP_MASK_LEGACY | ADVEVT_PROP_MASK_DIRECTED |
| #define ADVEVT_PROP_MASK_LEGACY_HD_DIRECTED (0x0018) // ADVEVT_PROP_MASK_LEGACY | ADVEVT_PROP_MASK_HD_DIRECTED |
| #define ADVEVT_PROP_MASK_LEGACY_CONNECTABLE_SCANNABLE (0x0013) // ADVEVT_PROP_MASK_LEGACY | ADVEVT_PROP_MASK_CONNECTABLE | ADVEVT_PROP_MASK_SCANNABLE |
| |
| /* Advertising Event Properties |
| * See the Core_v5.0(Vol 2/Part E/7.8.53 & Vol 6/Part B/4.4.2/Table 4.1) for more information |
| */ |
| typedef enum{ |
| ADV_EVT_PROP_LEGACY_CONNECTABLE_SCANNABLE_UNDIRECTED = 0x0013, // 0001 0011'b ADV_IND |
| ADV_EVT_PROP_LEGACY_CONNECTABLE_DIRECTED_LOW_DUTY = 0x0015, // 0001 0101'b ADV_DIRECT_IND(low duty cycle) |
| ADV_EVT_PROP_LEGACY_CONNECTABLE_DIRECTED_HIGH_DUTY = 0x001D, // 0001 1101'b ADV_DIRECT_IND(high duty cycle) |
| ADV_EVT_PROP_LEGACY_SCANNABLE_UNDIRECTED = 0x0012, // 0001 0010'b ADV_SCAN_IND |
| ADV_EVT_PROP_LEGACY_NON_CONNECTABLE_NON_SCANNABLE_UNDIRECTED = 0x0010, // 0001 0000'b ADV_NONCONN_IND |
| |
| |
| ADV_EVT_PROP_EXTENDED_NON_CONNECTABLE_NON_SCANNABLE_UNDIRECTED = 0x0000, // 0000 0000'b ADV_EXT_IND + AUX_ADV_IND/AUX_CHAIN_IND |
| ADV_EVT_PROP_EXTENDED_CONNECTABLE_UNDIRECTED = 0x0001, // 0000 0001'b ADV_EXT_IND + AUX_ADV_IND/AUX_CHAIN_IND |
| ADV_EVT_PROP_EXTENDED_SCANNABLE_UNDIRECTED = 0x0002, // 0000 0010'b ADV_EXT_IND + AUX_ADV_IND/AUX_CHAIN_IND |
| ADV_EVT_PROP_EXTENDED_NON_CONNECTABLE_NON_SCANNABLE_DIRECTED = 0x0004, // 0000 0100'b ADV_EXT_IND + AUX_ADV_IND/AUX_CHAIN_IND |
| ADV_EVT_PROP_EXTENDED_CONNECTABLE_DIRECTED = 0x0005, // 0000 0101'b ADV_EXT_IND + AUX_ADV_IND/AUX_CHAIN_IND |
| ADV_EVT_PROP_EXTENDED_SCANNABLE_DIRECTED = 0x0006, // 0000 0110'b ADV_EXT_IND + AUX_ADV_IND/AUX_CHAIN_IND |
| |
| |
| ADV_EVT_PROP_EXTENDED_MASK_ANONYMOUS_ADV = 0x0020, //if this mask on(only extended ADV event can mask it), anonymous advertising |
| ADV_EVT_PROP_EXTENDED_MASK_TX_POWER_INCLUDE = 0x0040, //if this mask on(only extended ADV event can mask it), TX power include |
| |
| }advEvtProp_type_t; |
| |
| |
| |
| /* Advertising_TX_Power */ |
| typedef enum { |
| TX_POWER_0dBm = 0, |
| TX_POWER_1dBm = 1, |
| TX_POWER_2dBm = 2, |
| TX_POWER_3dBm = 3, |
| TX_POWER_4dBm = 4, |
| TX_POWER_5dBm = 5, |
| TX_POWER_6dBm = 6, |
| TX_POWER_7dBm = 7, |
| TX_POWER_8dBm = 8, |
| TX_POWER_9dBm = 9, |
| TX_POWER_10dBm = 10, |
| } tx_power_t; |
| |
| |
| |
| /* Advertising_SID */ |
| typedef enum{ |
| ADV_SID_0 = 0x00, |
| ADV_SID_1 = 0x01, |
| ADV_SID_2 = 0x02, |
| ADV_SID_3 = 0x03, |
| }adv_sid_t; |
| |
| |
| |
| |
| /** |
| * @brief Command Parameters for "7.8.54 LE Set Extended Advertising Data command" |
| */ |
| |
| /* Operation */ |
| typedef enum { |
| DATA_OPER_INTER = 0x00, |
| DATA_OPER_FIRST = 0x01, |
| DATA_OPER_LAST = 0x02, |
| DATA_OPER_COMPLETE = 0x03, |
| DATA_OPER_UNCHANGEED = 0x04, |
| } data_oper_t; |
| |
| |
| /* Fragment_Preference */ |
| typedef enum { |
| DATA_FRAGM_ALLOWED = 0x00, |
| DATA_FRAGM_NONE_OR_MINIMIZE = 0x01, |
| } data_fragm_t; |
| |
| |
| |
| |
| |
| /** |
| * @brief Command Parameters for "7.8.56 LE Set Extended Advertising Enable command" |
| */ |
| |
| typedef struct{ |
| u8 adv_handle; |
| u16 duration; |
| u8 max_ext_adv_evts; |
| } extAdvEn_Cfg_t; |
| |
| typedef struct{ |
| u8 enable; |
| u8 num_sets; |
| extAdvEn_Cfg_t cisCfg[3]; // ADV_SETS_NUMBER_MAX |
| } hci_le_setExtAdvEn_cmdParam_t; |
| |
| |
| |
| /** |
| * @brief Command Parameters for "7.8.61 LE Set Periodic Advertising Parameters command" |
| */ |
| typedef enum{ |
| |
| PERD_ADV_PROP_MASK_NONE = 0, |
| |
| PERD_ADV_PROP_MASK_TX_POWER_INCLUDE = BIT(6), |
| |
| }perd_adv_prop_t; |
| |
| |
| |
| /** |
| * @brief Command Parameters for "7.8.64 LE Set Extended Scan Parameters command" |
| */ |
| typedef struct{ |
| u8 scan_type; |
| u16 scan_interval; |
| u16 scan_window; |
| } ext_scan_cfg_t; |
| |
| typedef struct{ |
| u8 ownAddress_type; |
| u8 scan_filter_policy; |
| u8 scan_PHYs; |
| ext_scan_cfg_t scanCfg[2]; //at most 2 kind of PHY: 1M and Coded |
| } hci_le_setExtScan_cmdParam_t; |
| |
| |
| /* Scanning_PHYs */ |
| typedef enum { |
| SCAN_PHY_1M = BIT(0), |
| SCAN_PHY_CODED = BIT(2), |
| SCAN_PHY_1M_CODED = (SCAN_PHY_1M | SCAN_PHY_CODED), |
| } scan_phy_t; |
| |
| |
| |
| |
| /** |
| * @brief Command Parameters for "7.8.65 LE Set Extended Scan Enable command" |
| */ |
| |
| /* Filter_Duplicates for Extended Scan*/ |
| typedef enum { |
| DUPE_FLTR_DISABLE = 0x00, |
| DUPE_FLTR_ENABLE = 0x01, |
| DUPE_FLTR_ENABLE_RST_PERIOD = 0x02, |
| } dupe_fltr_en_t; |
| |
| |
| /* Scan duration, Range: 0x0001 to 0xFFFF, Time = N * 10 ms, Time Range: 10 ms to 655.35 s, |
| * Notice that these are just part of but not all Scan duration value */ |
| typedef enum{ |
| SCAN_DURATION_CONTINUOUS = 0, |
| SCAN_DURATION_50MS = 5, |
| SCAN_DURATION_100MS = 10, |
| SCAN_DURATION_150MS = 15, |
| SCAN_DURATION_200MS = 20, |
| SCAN_DURATION_250MS = 25, |
| SCAN_DURATION_300MS = 30, |
| SCAN_DURATION_350MS = 35, |
| SCAN_DURATION_400MS = 40, |
| SCAN_DURATION_450MS = 45, |
| SCAN_DURATION_500MS = 50, |
| SCAN_DURATION_550MS = 55, |
| SCAN_DURATION_600MS = 60, |
| SCAN_DURATION_650MS = 65, |
| SCAN_DURATION_700MS = 70, |
| SCAN_DURATION_750MS = 75, |
| SCAN_DURATION_800MS = 80, |
| SCAN_DURATION_850MS = 85, |
| SCAN_DURATION_900MS = 90, |
| SCAN_DURATION_950MS = 96, |
| SCAN_DURATION_1S = 100, |
| SCAN_DURATION_1S2 = 120, |
| SCAN_DURATION_1S5 = 150, |
| SCAN_DURATION_1S6 = 160, |
| SCAN_DURATION_1S8 = 180, |
| SCAN_DURATION_2S = 200, |
| SCAN_DURATION_3S = 300, |
| SCAN_DURATION_4S = 400, |
| SCAN_DURATION_5S = 500, |
| SCAN_DURATION_6S = 600, |
| SCAN_DURATION_7S = 700, |
| SCAN_DURATION_8S = 800, |
| SCAN_DURATION_9S = 900, |
| SCAN_DURATION_10S = 1000, |
| }scan_durn_t; |
| |
| /* Scan period, Range: 0x0001 to 0xFFFF, Time = N * 1.28 sec, Time Range: 1.28 s to 83,884.8 s |
| * Notice that these are just part of but not all Scan period value */ |
| typedef enum{ |
| SCAN_WINDOW_CONTINUOUS = 0, |
| SCAN_WINDOW_1S28 = 1, |
| SCAN_WINDOW_2S56 = 2, |
| SCAN_WINDOW_3S84 = 3, |
| SCAN_WINDOW_5S12 = 4, |
| SCAN_WINDOW_6S4 = 5, |
| SCAN_WINDOW_7S68 = 6, |
| SCAN_WINDOW_8S92 = 7, |
| SCAN_WINDOW_10S24 = 8, |
| SCAN_WINDOW_11S52 = 9, |
| SCAN_WINDOW_12S8 = 10, |
| }scan_period_t; |
| |
| |
| |
| /** |
| * @brief Command Parameters for "7.8.66 LE Extended Create Connection command" |
| */ |
| typedef struct{ |
| u16 scan_interval; |
| u16 scan_window; |
| u16 connInter_min; |
| u16 connInter_max; |
| u16 connLatency; |
| u16 connTimeout; |
| u16 ceLen_min; |
| u16 ceLen_max; |
| } ext_init_cfg_t; |
| |
| typedef struct{ |
| u8 init_filter_policy; |
| u8 ownAddr_type; |
| u8 peerAddr_type; |
| u8 peer_addr[6]; |
| u8 init_PHYs; |
| ext_init_cfg_t initCfg[3]; |
| } hci_le_ext_createConn_cmdParam_t; |
| |
| #define EXT_CREATE_CONN_CMD_PARAM_MAX_LENGTH (10 + 16 * 3) //10 + sizeof(ext_init_cfg_t) * 3 |
| |
| /* Initiating_PHYs */ |
| typedef enum { |
| INIT_PHY_1M = BIT(0), |
| INIT_PHY_2M = BIT(1), |
| INIT_PHY_CODED = BIT(2), |
| INIT_PHY_1M_2M = (INIT_PHY_1M | INIT_PHY_2M), |
| INIT_PHY_1M_CODED = (INIT_PHY_1M | INIT_PHY_CODED), |
| INIT_PHY_2M_CODED = (INIT_PHY_2M | INIT_PHY_CODED), |
| INIT_PHY_1M_2M_CODED = (INIT_PHY_1M | INIT_PHY_2M | INIT_PHY_1M_CODED), |
| } init_phy_t; |
| |
| |
| |
| |
| |
| /** |
| * @brief Command Parameters for "7.8.67 LE Periodic Advertising Create Sync command" |
| */ |
| /* Options */ |
| typedef enum { |
| |
| /* BIT(0) |
| * 0: Use the adv_sid, adv_addr_type, and adv_address parameters to determine which advertiser to listen to. |
| * 1: Use the Periodic Advertiser List to determine which advertiser to listen to. */ |
| SYNC_ADV_SPECIFY = 0, |
| SYNC_ADV_FROM_LIST = BIT(0), |
| |
| /* BIT(1) ~ BIT(7) reserved */ |
| } option_msk_t; |
| |
| |
| |
| |
| |
| |
| |
| |
| /** |
| * @brief Command Parameters for "7.8.97 LE Set CIG Parameters command" |
| */ |
| typedef struct { |
| u8 cig_id; |
| u8 sdu_int_m2s[3]; |
| u8 sdu_int_s2m[3]; |
| u8 sca; |
| u8 packing; |
| u8 framing; |
| u16 max_trans_lat_m2s; |
| u16 max_trans_lat_s2m; |
| u8 cis_count; |
| u8* restparam; |
| } hci_le_setCigParam_cmdParam_t; |
| |
| typedef struct{ |
| u8 cis_id; |
| u8 nse; |
| u16 max_sdu_m2s; |
| u16 max_sdu_s2m; |
| u16 max_pdu_m2s; |
| u16 max_pdu_s2m; |
| u8 phy_m2s; |
| u8 phy_s2m; |
| u8 bn_m2s; |
| u8 bn_s2m; |
| } cigParamTest_cisCfg_t; |
| |
| /* Slaves_Clock_Accuracy */ |
| typedef enum { |
| PPM_251_500 = 0x00, |
| PPM_151_250 = 0x01, |
| PPM_101_150 = 0x02, |
| PPM_76_100 = 0x03, |
| PPM_51_75 = 0x04, |
| PPM_31_50 = 0x05, |
| PPM_21_30 = 0x06, |
| PPM_0_20 = 0x07, |
| } slv_clk_accuracy_t; |
| |
| |
| /* Packing */ |
| typedef enum { |
| PACK_SEQUENTIAL = 0x00, |
| PACK_INTERLEAVED = 0x01, |
| } packing_type_t; |
| |
| /* Framing */ |
| typedef enum { |
| UNFRAMED = 0x00, |
| FRAMED = 0x01, |
| } framing_t; |
| |
| |
| |
| /** |
| * @brief Command Parameters for "7.8.98 LE Set CIG Parameters Test command" |
| */ |
| typedef struct{ |
| u8 cig_id; |
| u8 sdu_int_m2s[3]; |
| u8 sdu_int_s2m[3]; |
| u8 ft_m2s; |
| u8 ft_s2m; |
| u16 iso_intvl; |
| u8 sca; |
| u8 packing; |
| u8 framing; |
| u8 cis_count; //15 B above |
| cigParamTest_cisCfg_t cisCfg[1]; //14 B for one CIS configuration |
| } hci_le_setCigParamTest_cmdParam_t; |
| |
| |
| |
| /** |
| * @brief Return Parameters for "LE Set CIG Parameters command" and "LE Set CIG Parameters Test command" |
| */ |
| typedef struct { |
| u8 status; |
| u8 cig_id; |
| u8 cis_count; |
| u16 cis_connHandle[1]; //not 4 byte aligned, but no problem |
| } hci_le_setCigParam_retParam_t; |
| |
| |
| /* ISO_Interval, Time = N * 1.25 ms, |
| * Notice that these are just part of but not all ISO_Interval value */ |
| typedef enum{ |
| ISO_INTERVAL_5MS = 4, |
| ISO_INTERVAL_6P75MS = 5, |
| ISO_INTERVAL_7P5MS = 6, |
| ISO_INTERVAL_8P75MS = 7, |
| ISO_INTERVAL_10MS = 8, |
| ISO_INTERVAL_11P25MS = 9, |
| ISO_INTERVAL_12P5MS = 10, |
| ISO_INTERVAL_15MS = 12, |
| ISO_INTERVAL_18P75MS = 15, |
| ISO_INTERVAL_20MS = 16, |
| ISO_INTERVAL_25MS = 20, |
| ISO_INTERVAL_27P5MS = 22, |
| ISO_INTERVAL_30MS = 24, |
| ISO_INTERVAL_31P25MS = 25, |
| ISO_INTERVAL_38P75MS = 31, |
| ISO_INTERVAL_40MS = 32, |
| ISO_INTERVAL_48P75MS = 39, |
| ISO_INTERVAL_50MS = 40, |
| ISO_INTERVAL_100MS = 80, |
| }iso_inter_t; |
| |
| |
| |
| |
| /** |
| * @brief Command Parameters for "7.8.99 LE Create CIS command" |
| */ |
| typedef struct |
| { |
| u16 cis_handle; |
| u16 acl_handle; |
| } cisConnParams_t; |
| |
| typedef struct |
| { |
| u8 cis_count; |
| cisConnParams_t cisConn[1]; |
| }hci_le_CreateCisParams_t; |
| |
| |
| |
| #if 0 |
| /** |
| * @brief Command Parameters for "7.8.102 LE Reject CIS Request command" |
| */ |
| typedef struct |
| { |
| u16 cis_handle; |
| u8 reason; |
| } hci_le_rejectCisReqParams_t; |
| #endif |
| |
| |
| |
| /** |
| * @brief Command Parameters for "7.8.103 LE Create BIG command" |
| */ |
| typedef struct |
| { |
| u8 big_handle; /* Used to identify the BIG */ |
| u8 adv_handle; /* Used to identify the periodic advertising train */ |
| u8 num_bis; /* Total number of BISes in the BIG */ |
| u8 sdu_intvl[3]; /* The interval, in microseconds, of periodic SDUs */ |
| u16 max_sdu; /* Maximum size of an SDU, in octets */ |
| u16 max_trans_lat; /* Maximum time, in milliseconds, for transmitting an SDU */ |
| u8 rtn; /* The maximum number of times that every BIS Data PDU should be retransmitted */ |
| u8 phy; /* The transmitter PHY of packets */ |
| packing_type_t packing; //type same as u8 |
| framing_t framing; //type same as u8 |
| u8 enc; /* Encryption flag */ |
| u8 broadcast_code[16]; /* The code used to derive the session key that is used to encrypt and decrypt BIS payloads */ |
| } hci_le_createBigParams_t; |
| |
| |
| |
| |
| /** |
| * @brief Command Parameters for "7.8.104 LE Create BIG Test command" |
| */ |
| typedef struct |
| { |
| u8 big_handle; /* Used to identify the BIG */ |
| u8 adv_handle; /* Used to identify the periodic advertising train */ |
| u8 num_bis; /* Total number of BISes in the BIG */ |
| u8 sdu_intvl[3]; /* The interval, in microseconds, of periodic SDUs */ |
| u16 iso_intvl; /* The time between consecutive BIG anchor points */ |
| u8 nse; /* The total number of subevents in each interval of each BIS in the BIG */ |
| u16 max_sdu; /* Maximum size of an SDU, in octets */ |
| u16 max_pdu; /* Maximum size, in octets, of payload */ |
| u8 phy; /* The transmitter PHY of packets */ |
| packing_type_t packing : 8; //type same as u8 |
| framing_t framing : 8; //type same as u8 |
| u8 bn; /* The number of new payloads in each interval for each BIS */ |
| u8 irc; /* The number of times the scheduled payload(s) are transmitted in a given event*/ |
| u8 pto; /* Offset used for pre-transmissions */ |
| u8 enc; /* Encryption flag */ |
| u8 broadcast_code[16]; /* The code used to derive the session key that is used to encrypt and decrypt BIS payloads */ |
| } hci_le_createBigParamsTest_t; |
| |
| |
| |
| |
| /** |
| * @brief Command Parameters for "7.8.105 LE Terminate BIG command" |
| */ |
| typedef struct |
| { |
| u8 big_handle; |
| u8 reason; |
| } hci_le_terminateBigParams_t; |
| |
| |
| |
| |
| typedef struct |
| { |
| u8 big_handle; /* Used to identify the BIG */ |
| u16 sync_handle; /* Identifier of the periodic advertising train */ |
| u8 enc; /* Encryption flag */ |
| u8 broadcast_code[16]; /* The code used to derive the session key that is used to encrypt and decrypt BIS payloads */ |
| u8 mse; /* The Controller can schedule reception of any number of subevents up to NSE */ |
| u16 big_sync_timeout; /* Synchronization timeout for the BIG */ |
| u16 max_trans_lat; /* Maximum time, in milliseconds, for transmitting an SDU */ |
| u8 num_bis; /* Total number of BISes to synchronize */ |
| u8* bis; /* List of indices of BISes */ |
| } hci_le_bigCreateSyncParams_t; |
| |
| |
| |
| |
| /** |
| * @brief Command Parameters for "7.8.109 LE Setup ISO Data Path command" |
| */ |
| typedef struct |
| { |
| u16 conn_handle; |
| u8 data_path_direction; |
| u8 data_path_id; |
| u8 codec_id[5]; |
| |
| u32 controller_delay :24; |
| u32 codec_configration_length :8; |
| |
| u8 codec_config[1]; |
| |
| }hci_le_setupIsoDataPathCmdParams_t; |
| |
| |
| |
| |
| |
| #endif /* HCI_CMD_H_ */ |