• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 Hunan OpenValley Digital Industry Development Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *    http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #ifndef __BLEGAP_H__
16 #define __BLEGAP_H__
17 #include <stdint.h>
18 #include <string.h>
19 #include <stdbool.h>
20 #include <stdio.h>
21 #include "esp_bt.h"
22 #include "esp_gap_ble_api.h"
23 #include "esp_gatt_defs.h"
24 #include "esp_bt_main.h"
25 #include "esp_gatt_common_api.h"
26 #include "esp_log.h"
27 #include "ohos_bt_def.h"
28 #include "esp_system.h"
29 
30 #define GattInterfaceType esp_gatt_if_t
31 #define BleGapParam esp_ble_gap_cb_param_t
32 #define BleGattcParam esp_ble_gattc_cb_param_t
33 #define BleScanParams esp_ble_scan_params_t
34 #define BT_DEBUG printf
35 
36 #define OHOS_GATT_PREP_WRITE_CANCEL 0x00
37 #define OHOS_GATT_PREP_WRITE_EXEC   0x01
38 #define OHOS_GATT_UUID_CHAR_CLIENT_CONFIG 0x2902
39 #define OHOS_GATT_UUID_CHAR_SRVR_CONFIG 0x2903
40 #define OHOS_GATT_IF_NONE    0xff
41 #define GattInterfaceType esp_gatt_if_t
42 #define BtUuids esp_bt_uuid_t
43 #define BleConnUpdateParams esp_ble_conn_update_params_t
44 #define BT_LOGE(format, ...) printf("[%s] " format "\r\n", __FUNCTION__, ##__VA_ARGS__)
45 
46 #define OHOS_BLE_ADV_FLAG_LIMIT_DISC (0x01 << 0)
47 #define OHOS_BLE_ADV_FLAG_GEN_DISC (0x01 << 1)
48 #define OHOS_BLE_ADV_FLAG_BREDR_NOT_SPT (0x01 << 2)
49 #define OHOS_BLE_ADV_FLAG_DMT_CONTROLLER_SPT (0x01 << 3)
50 #define OHOS_BLE_ADV_FLAG_DMT_HOST_SPT (0x01 << 4)
51 #define OHOS_BLE_ADV_FLAG_NON_LIMIT_DISC (0x00)
52 
53 /* 特征属性的定义 */
54 #define    OHOS_GATT_CHAR_PROP_BIT_BROADCAST    (1 << 0)
55 #define    OHOS_GATT_CHAR_PROP_BIT_READ   (1 << 1)
56 #define    OHOS_GATT_CHAR_PROP_BIT_WRITE_NR     (1 << 2)
57 #define    OHOS_GATT_CHAR_PROP_BIT_WRITE  (1 << 3)
58 #define    OHOS_GATT_CHAR_PROP_BIT_NOTIFY (1 << 4)
59 #define    OHOS_GATT_CHAR_PROP_BIT_INDICATE     (1 << 5)
60 #define    OHOS_GATT_CHAR_PROP_BIT_AUTH   (1 << 6)
61 #define    OHOS_GATT_CHAR_PROP_BIT_EXT_PROP     (1 << 7)
62 
63 typedef enum {
64     BT_ERROR = -1,
65     BT_SUCCESS = 0,
66     BT_USERAUTHID_ERROR = 1,
67     BT_DEVICETYPE_ERROR = 2,
68     BT_PARAMINPUT_ERROR = 3,
69 } BtError;
70 
71 typedef enum {
72     OHOS_BT_TRANSPORT_TYPE_AUTO = 0x0,
73     OHOS_BT_TRANSPORT_TYPE_LE,
74     OHOS_BT_TRANSPORT_TYPE_CLASSIC,
75 } BtTransportType;
76 
77 typedef enum {
78     OHOS_GAP_BLE_ADV_DATA_SET_COMPLETE_EVT = 0,
79     OHOS_GAP_BLE_SCAN_RSP_DATA_SET_COMPLETE_EVT,
80     OHOS_GAP_BLE_SCAN_PARAM_SET_COMPLETE_EVT,
81     OHOS_GAP_BLE_SCAN_RESULT_EVT,
82     OHOS_GAP_BLE_ADV_DATA_RAW_SET_COMPLETE_EVT,
83     OHOS_GAP_BLE_SCAN_RSP_DATA_RAW_SET_COMPLETE_EVT,
84     OHOS_GAP_BLE_ADV_START_COMPLETE_EVT,
85     OHOS_GAP_BLE_SCAN_START_COMPLETE_EVT,
86     OHOS_GAP_BLE_AUTH_CMPL_EVT = 8,
87     OHOS_GAP_BLE_KEY_EVT,
88     OHOS_GAP_BLE_SEC_REQ_EVT,
89     OHOS_GAP_BLE_PASSKEY_NOTIF_EVT,
90     OHOS_GAP_BLE_PASSKEY_REQ_EVT,
91     OHOS_GAP_BLE_OOB_REQ_EVT,
92     OHOS_GAP_BLE_LOCAL_IR_EVT,
93     OHOS_GAP_BLE_LOCAL_ER_EVT,
94     OHOS_GAP_BLE_NC_REQ_EVT,
95     OHOS_GAP_BLE_ADV_STOP_COMPLETE_EVT,
96     OHOS_GAP_BLE_SCAN_STOP_COMPLETE_EVT,
97     OHOS_GAP_BLE_SET_STATIC_RAND_ADDR_EVT = 19,
98     OHOS_GAP_BLE_UPDATE_CONN_PARAMS_EVT,
99     OHOS_GAP_BLE_SET_PKT_LENGTH_COMPLETE_EVT,
100     OHOS_GAP_BLE_SET_LOCAL_PRIVACY_COMPLETE_EVT,
101     OHOS_GAP_BLE_REMOVE_BOND_DEV_COMPLETE_EVT,
102     OHOS_GAP_BLE_CLEAR_BOND_DEV_COMPLETE_EVT,
103     OHOS_GAP_BLE_GET_BOND_DEV_COMPLETE_EVT,
104     OHOS_GAP_BLE_READ_RSSI_COMPLETE_EVT,
105     OHOS_GAP_BLE_UPDATE_WHITELIST_COMPLETE_EVT,
106     OHOS_GAP_BLE_UPDATE_DUPLICATE_EXCEPTIONAL_LIST_COMPLETE_EVT,
107     OHOS_GAP_BLE_SET_CHANNELS_EVT = 29,
108     OHOS_GAP_BLE_EVT_MAX,
109 } GapBleCallbackEvent;
110 
111 typedef enum {
112     OHOS_GAP_SEARCH_INQ_RES_EVT = 0, /*!< Inquiry result for a peer device. */
113     OHOS_GAP_SEARCH_INQ_CMPL_EVT = 1, /*!< Inquiry complete. */
114     OHOS_GAP_SEARCH_DISC_RES_EVT = 2, /*!< Discovery result for a peer device. */
115     OHOS_GAP_SEARCH_DISC_BLE_RES_EVT = 3, /*!< Discovery result for BL */
116     OHOS_GAP_SEARCH_DISC_CMPL_EVT = 4, /*!< Discovery complete. */
117     OHOS_GAP_SEARCH_DI_DISC_CMPL_EVT = 5, /*!< Discovery complete. */
118     OHOS_GAP_SEARCH_SEARCH_CANCEL_CMPL_EVT = 6, /*!< Search cancelled */
119     OHOS_GAP_SEARCH_INQ_DISCARD_NUM_EVT = 7, /*!< The number of pkt discarded by flow control */
120 } GapSearchEvent;
121 
122 /// The type of advertising data(not adv_type)
123 typedef enum {
124     OHOS_BLE_AD_TYPE_FLAG   = 0x01, /* relate to BTM_BLE_AD_TYPE_FLAG */
125     OHOS_BLE_AD_TYPE_16SRV_PART   = 0x02, /* relate to BTM_BLE_AD_TYPE_16SRV_PAR */
126     OHOS_BLE_AD_TYPE_16SRV_CMPL   = 0x03, /* relate to BTM_BLE_AD_TYPE_16SRV_CMPL */
127     OHOS_BLE_AD_TYPE_32SRV_PART   = 0x04, /* relate to BTM_BLE_AD_TYPE_32SRV_PART */
128     OHOS_BLE_AD_TYPE_32SRV_CMPL   = 0x05, /* relate to BTM_BLE_AD_TYPE_32SRV_CMPL */
129     OHOS_BLE_AD_TYPE_128SRV_PART  = 0x06, /* relate to BTM_BLE_AD_TYPE_128SRV_PART */
130     OHOS_BLE_AD_TYPE_128SRV_CMPL  = 0x07, /* relate to BTM_BLE_AD_TYPE_128SRV_CMPL */
131     OHOS_BLE_AD_TYPE_NAME_SHORT   = 0x08, /* relate to BTM_BLE_AD_TYPE_NAME_SHORT */
132     OHOS_BLE_AD_TYPE_NAME_CMPL    = 0x09, /* relate to BTM_BLE_AD_TYPE_NAME_CMPL */
133     OHOS_BLE_AD_TYPE_TX_PWR = 0x0A, /* relate to BTM_BLE_AD_TYPE_TX_PWR */
134     OHOS_BLE_AD_TYPE_DEV_CLASS    = 0x0D, /* relate to BTM_BLE_AD_TYPE_DEV_CLASS */
135     OHOS_BLE_AD_TYPE_SM_TK  = 0x10, /* relate to BTM_BLE_AD_TYPE_SM_TK */
136     OHOS_BLE_AD_TYPE_SM_OOB_FLAG  = 0x11, /* relate to BTM_BLE_AD_TYPE_SM_OOB_FLAG */
137     OHOS_BLE_AD_TYPE_INT_RANGE    = 0x12, /* relate to BTM_BLE_AD_TYPE_INT_RANGE */
138     OHOS_BLE_AD_TYPE_SOL_SRV_UUID = 0x14, /* relate to BTM_BLE_AD_TYPE_SOL_SRV_UUID */
139     OHOS_BLE_AD_TYPE_128SOL_SRV_UUID    = 0x15, /* relate to BTM_BLE_AD_TYPE_128SOL_SRV_UUID */
140     OHOS_BLE_AD_TYPE_SERVICE_DATA = 0x16, /* relate to BTM_BLE_AD_TYPE_SERVICE_DATA */
141     OHOS_BLE_AD_TYPE_PUBLIC_TARGET = 0x17, /* relate to BTM_BLE_AD_TYPE_PUBLIC_TARGET */
142     OHOS_BLE_AD_TYPE_RANDOM_TARGET = 0x18, /* relate to BTM_BLE_AD_TYPE_RANDOM_TARGET */
143     OHOS_BLE_AD_TYPE_APPEARANCE   = 0x19, /* relate to BTM_BLE_AD_TYPE_APPEARANCE */
144     OHOS_BLE_AD_TYPE_ADV_INT = 0x1A, /* relate to BTM_BLE_AD_TYPE_ADV_INT */
145     OHOS_BLE_AD_TYPE_LE_DEV_ADDR  = 0x1b, /* relate to BTM_BLE_AD_TYPE_LE_DEV_ADDR */
146     OHOS_BLE_AD_TYPE_LE_ROLE = 0x1c, /* relate to BTM_BLE_AD_TYPE_LE_ROLE */
147     OHOS_BLE_AD_TYPE_SPAIR_C256   = 0x1d, /* relate to BTM_BLE_AD_TYPE_SPAIR_C256 */
148     OHOS_BLE_AD_TYPE_SPAIR_R256   = 0x1e, /* relate to BTM_BLE_AD_TYPE_SPAIR_R256 */
149     OHOS_BLE_AD_TYPE_32SOL_SRV_UUID     = 0x1f, /* relate to BTM_BLE_AD_TYPE_32SOL_SRV_UUID */
150     OHOS_BLE_AD_TYPE_32SERVICE_DATA     = 0x20, /* relate to BTM_BLE_AD_TYPE_32SERVICE_DATA */
151     OHOS_BLE_AD_TYPE_128SERVICE_DATA    = 0x21, /* relate to BTM_BLE_AD_TYPE_128SERVICE_DATA */
152     OHOS_BLE_AD_TYPE_LE_SECURE_CONFIRM  = 0x22, /* relate to BTM_BLE_AD_TYPE_LE_SECURE_CONFIRM */
153     OHOS_BLE_AD_TYPE_LE_SECURE_RANDOM   = 0x23, /* relate to BTM_BLE_AD_TYPE_LE_SECURE_RANDOM */
154     OHOS_BLE_AD_TYPE_URI    = 0x24, /* relate to BTM_BLE_AD_TYPE_URI */
155     OHOS_BLE_AD_TYPE_INDOOR_POSITION    = 0x25, /* relate to BTM_BLE_AD_TYPE_INDOOR_POSITION */
156     OHOS_BLE_AD_TYPE_TRANS_DISC_DATA    = 0x26, /* relate to BTM_BLE_AD_TYPE_TRANS_DISC_DATA */
157     OHOS_BLE_AD_TYPE_LE_SUPPORT_FEATURE = 0x27, /* relate to BTM_BLE_AD_TYPE_LE_SUPPORT_FEATURE */
158     OHOS_BLE_AD_TYPE_CHAN_MAP_UPDATE    = 0x28, /* relate to BTM_BLE_AD_TYPE_CHAN_MAP_UPDATE */
159     OHOS_BLE_AD_MANUFACTURER_SPECIFIC_TYPE = 0xFF, /* relate to BTM_BLE_AD_MANUFACTURER_SPECIFIC_TYPE */
160 } BleAdvDataType;
161 
162 /**
163   * @brief Gatt写类型
164   */
165 typedef enum {
166     OHOS_GATT_WRITE_TYPE_NO_RSP = 1, /*!< Gatt write attribute need no response */
167     OHOS_GATT_WRITE_TYPE_RSP, /*!< Gatt write attribute need remote response */
168 } GattBleWriteType;
169 
170 typedef void (* GapBleCallback)(GapBleCallbackEvent event, BleGapParam *param);
171 
172 BtError EnableBle(void);
173 
174 BtError DisableBle(void);
175 
176 BtError SetLocalName(unsigned char *localName, unsigned char length);
177 
178 BtError GetLocalAddr(unsigned char *mac, unsigned int len);
179 
180 BtError BleStartScan(void);
181 
182 BtError BleStopScan2(void);
183 
184 BtError BleGapUpdateConnParams(BleConnUpdateParams *params);
185 
186 BtError BleGatSetScanParams(BleScanParams *scan_params);
187 
188 BtError BleGapDisconnect(BdAddr remote_device);
189 
190 uint8_t *BleResolveAdvData(uint8_t *adv_data, uint8_t type, uint8_t *length);
191 
192 #endif
193