• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 Huawei Device 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 
16 /**
17  * @file softbus_broadcast_type.h
18  * @brief Declare constants for the softbus broadcast.
19  *
20  * @since 4.1
21  * @version 1.0
22  */
23 
24 #ifndef SOFTBUS_BROADCAST_TYPE_H
25 #define SOFTBUS_BROADCAST_TYPE_H
26 
27 #include <stdbool.h>
28 #include <stdint.h>
29 
30 #ifdef __cplusplus
31 extern "C"{
32 #endif
33 
34 /**
35  * @brief Defines mac address length.
36  *
37  * @since 4.1
38  * @version 1.0
39  */
40 #define BC_ADDR_MAC_LEN 6
41 
42 // Bluetooth scan duty cycle, unit: ms
43 #define SOFTBUS_BC_SCAN_INTERVAL_P2 3000
44 #define SOFTBUS_BC_SCAN_INTERVAL_P2_FAST 1500
45 #define SOFTBUS_BC_SCAN_INTERVAL_P10 300
46 #define SOFTBUS_BC_SCAN_INTERVAL_P25 240
47 #define SOFTBUS_BC_SCAN_INTERVAL_P50 60
48 #define SOFTBUS_BC_SCAN_INTERVAL_P75 40
49 #define SOFTBUS_BC_SCAN_INTERVAL_P100 1000
50 #define SOFTBUS_BC_SCAN_WINDOW_P2 60
51 #define SOFTBUS_BC_SCAN_WINDOW_P2_FAST 30
52 #define SOFTBUS_BC_SCAN_WINDOW_P10 30
53 #define SOFTBUS_BC_SCAN_WINDOW_P25 60
54 #define SOFTBUS_BC_SCAN_WINDOW_P50 30
55 #define SOFTBUS_BC_SCAN_WINDOW_P75 30
56 #define SOFTBUS_BC_SCAN_WINDOW_P100 1000
57 
58 /**
59  * @brief Defines the maxium lenght of irk information.
60  *
61  * @since 4.1
62  * @version 1.0
63  */
64 #define BC_IRK_LEN   16
65 
66 /**
67  * @brief Defines the maxium lenght of udid hash information.
68  *
69  * @since 4.1
70  * @version 1.0
71  */
72 #define BC_UDID_HASH_LEN 32
73 
74 /**
75  * @brief Defines the length of local name, the maximum length of complete local name is 30 bytes.
76  *
77  * @since 4.1
78  * @version 1.0
79  */
80 #define BC_LOCAL_NAME_LEN_MAX 30
81 
82 /**
83  * @brief Defines the broadcast service type.
84  *
85  * @since 4.1
86  * @version 1.0
87  */
88 typedef enum {
89     SRV_TYPE_HB, // The service type is heart beat.
90     SRV_TYPE_CONN, // The service type is connection.
91     SRV_TYPE_TRANS_MSG, // The service type is transmission message.
92     SRV_TYPE_DIS, // The service type is distributed discovery.
93     SRV_TYPE_SHARE, // The service type is share discovery.
94     SRV_TYPE_APPROACH, // The service type is approach discovery.
95     SRV_TYPE_LP_BURST, // The service type is burst for lowpower.
96     SRV_TYPE_LP_HB, // The service type is heartbeat for lowpower.
97     SRV_TYPE_FAST_OFFLINE, // The service type is fast offline.
98     SRV_TYPE_VLINK, // The service type is virtual link discovery.
99     SRV_TYPE_TOUCH, // The service type is touch discovery.
100     SRV_TYPE_OOP, // The service type is oop discovery.
101     SRV_TYPE_AUTH_CONN, // The service type is auth connection.
102     SRV_TYPE_OH_APPROACH, // The service type is oh approach discovery.
103     SRV_TYPE_BUTT,
104 } BaseServiceType;
105 
106 /**
107  * @brief Defines the mapping between supported service types and their names.
108  *
109  * @since 4.1
110  * @version 1.0
111  */
112 typedef struct {
113     /** Service types. For details, see {@link BaseServiceType}. */
114     BaseServiceType srvType;
115     /** Service names. For details, see {@link g_srvTypeMap}. */
116     char *service;
117 } SrvTypeMap;
118 
119 /**
120  * @brief Defines the mapping between supported service types and their names.
121  *
122  * Subsequent extensions need to be added in sequence.
123  *
124  * @since 4.1
125  * @version 1.0
126  */
127 static const SrvTypeMap g_srvTypeMap[] = {
128     {SRV_TYPE_HB, (char *)"heart beat"},
129     {SRV_TYPE_CONN, (char *)"connection"},
130     {SRV_TYPE_TRANS_MSG, (char *)"trans msg"},
131     {SRV_TYPE_DIS, (char *)"distributed"},
132     {SRV_TYPE_SHARE, (char *)"share"},
133     {SRV_TYPE_APPROACH, (char *)"approach"},
134     {SRV_TYPE_LP_BURST, (char *)"lp burst"},
135     {SRV_TYPE_LP_HB, (char *)"lp heartbeat"},
136     {SRV_TYPE_FAST_OFFLINE, (char *)"fast offline"},
137     {SRV_TYPE_VLINK, (char *)"virtual link"},
138     {SRV_TYPE_TOUCH, (char *)"touch"},
139     {SRV_TYPE_OOP, (char *)"oop"},
140     {SRV_TYPE_AUTH_CONN, (char *)"authConn"},
141     {SRV_TYPE_OH_APPROACH, (char *)"oh_approach"}
142 };
143 
144 /**
145  * @brief Defines the broadcast type to lp.
146  *
147  * @since 5.0
148  * @version 1.0
149  */
150 typedef enum {
151     SOFTBUS_HEARTBEAT_TYPE = 0,
152     SOFTBUS_BURST_TYPE,
153     SOFTBUS_UNKNOW_TYPE,
154 } LpServerType;
155 
156 /**
157  * @brief Defines the broadcast status type.
158  *
159  * @since 4.1
160  * @version 1.0
161  */
162 typedef enum {
163     SOFTBUS_BC_STATUS_SUCCESS = 0x00,
164     SOFTBUS_BC_STATUS_FAIL,
165     SOFTBUS_BC_STATUS_NOT_READY,
166     SOFTBUS_BC_STATUS_NOMEM,
167     SOFTBUS_BC_STATUS_BUSY,
168     SOFTBUS_BC_STATUS_DONE,
169     SOFTBUS_BC_STATUS_UNSUPPORTED,
170     SOFTBUS_BC_STATUS_PARM_INVALID,
171     SOFTBUS_BC_STATUS_UNHANDLED,
172     SOFTBUS_BC_STATUS_AUTH_FAILURE,
173     SOFTBUS_BC_STATUS_RMT_DEV_DOWN,
174     SOFTBUS_BC_STATUS_AUTH_REJECTED,
175     SOFTBUS_BC_STATUS_DUPLICATED_ADDR
176 } SoftBusBcStatus;
177 
178 /**
179  * @brief Defines the broadcast event type.
180  *
181  * @since 4.1
182  * @version 1.0
183  */
184 typedef enum {
185     SOFTBUS_BC_EVT_NON_CONNECTABLE_NON_SCANNABLE = 0x00,
186     SOFTBUS_BC_EVT_NON_CONNECTABLE_NON_SCANNABLE_DIRECTED = 0x04,
187     SOFTBUS_BC_EVT_CONNECTABLE = 0x01,
188     SOFTBUS_BC_EVT_CONNECTABLE_DIRECTED = 0x05,
189     SOFTBUS_BC_EVT_SCANNABLE = 0x02,
190     SOFTBUS_BC_EVT_SCANNABLE_DIRECTED = 0x06,
191     SOFTBUS_BC_EVT_LEGACY_NON_CONNECTABLE = 0x10,
192     SOFTBUS_BC_EVT_LEGACY_SCANNABLE = 0x12,
193     SOFTBUS_BC_EVT_LEGACY_CONNECTABLE = 0x13,
194     SOFTBUS_BC_EVT_LEGACY_CONNECTABLE_DIRECTED = 0x15,
195     SOFTBUS_BC_EVT_LEGACY_SCAN_RSP_TO_ADV_SCAN = 0x1A,
196     SOFTBUS_BC_EVT_LEGACY_SCAN_RSP_TO_ADV = 0x1B
197 } SoftBusBcScanResultEvtType;
198 
199 /**
200  * @brief Defines the broadcast mac type.
201  *
202  * @since 4.1
203  * @version 1.0
204  */
205 typedef enum {
206     SOFTBUS_BC_PUBLIC_DEVICE_ADDRESS = 0x00,
207     SOFTBUS_BC_RANDOM_DEVICE_ADDRESS = 0x01,
208     SOFTBUS_BC_PUBLIC_IDENTITY_ADDRESS = 0x02,
209     SOFTBUS_BC_RANDOM_STATIC_IDENTITY_ADDRESS = 0x03,
210     SOFTBUS_BC_UNRESOLVABLE_RANDOM_DEVICE_ADDRESS = 0xFE,
211     SOFTBUS_BC_NO_ADDRESS = 0xFF,
212 } SoftBusBcScanResultAddrType;
213 
214 /**
215  * @brief Defines the scan type.
216  *
217  * @since 4.1
218  * @version 1.0
219  */
220 typedef enum {
221     SOFTBUS_BC_SCAN_TYPE_PASSIVE = 0x00,
222     SOFTBUS_BC_SCAN_TYPE_ACTIVE,
223 } SoftBusBcScanType;
224 
225 /**
226  * @brief Defines the scan physics type.
227  *
228  * @since 4.1
229  * @version 1.0
230  */
231 typedef enum {
232     SOFTBUS_BC_SCAN_PHY_NO_PACKET = 0x00,
233     SOFTBUS_BC_SCAN_PHY_1M = 0x01,
234     SOFTBUS_BC_SCAN_PHY_2M = 0x02,
235     SOFTBUS_BC_SCAN_PHY_CODED = 0x03
236 } SoftBusBcScanResultPhyType;
237 
238 /**
239  * @brief Defines the scan filter policy type.
240  *
241  * @since 4.1
242  * @version 1.0
243  */
244 typedef enum {
245     SOFTBUS_BC_SCAN_FILTER_POLICY_ACCEPT_ALL = 0x00,
246     SOFTBUS_BC_SCAN_FILTER_POLICY_ONLY_WHITE_LIST,
247     SOFTBUS_BC_SCAN_FILTER_POLICY_ACCEPT_ALL_AND_RPA,
248     SOFTBUS_BC_SCAN_FILTER_POLICY_ONLY_WHITE_LIST_AND_RPA
249 } SoftBusBcScanFilterPolicy;
250 
251 /**
252  * @brief Defines the broadcast adv type.
253  *
254  * @since 4.1
255  * @version 1.0
256  */
257 typedef enum {
258     SOFTBUS_BC_ADV_IND = 0x00,
259     SOFTBUS_BC_ADV_DIRECT_IND_HIGH = 0x01,
260     SOFTBUS_BC_ADV_SCAN_IND = 0x02,
261     SOFTBUS_BC_ADV_NONCONN_IND = 0x03,
262     SOFTBUS_BC_ADV_DIRECT_IND_LOW  = 0x04,
263 } SoftBusBcAdvType;
264 
265 /**
266  * @brief Defines the broadcast adv filter and allow scan type.
267  *
268  * @since 4.1
269  * @version 1.0
270  */
271 typedef enum {
272     SOFTBUS_BC_ADV_FILTER_ALLOW_SCAN_ANY_CON_ANY = 0x00,
273     SOFTBUS_BC_ADV_FILTER_ALLOW_SCAN_WLST_CON_ANY = 0x01,
274     SOFTBUS_BC_ADV_FILTER_ALLOW_SCAN_ANY_CON_WLST = 0x02,
275     SOFTBUS_BC_ADV_FILTER_ALLOW_SCAN_WLST_CON_WLST = 0x03,
276 } SoftBusBcAdvFilter;
277 
278 /**
279  * @brief Defines the broadcast data status.
280  *
281  * @since 4.1
282  * @version 1.0
283  */
284 typedef enum {
285     SOFTBUS_BC_DATA_COMPLETE = 0x00,
286     SOFTBUS_BC_DATA_INCOMPLETE_MORE_TO_COME = 0x01,
287     SOFTBUS_BC_DATA_INCOMPLETE_TRUNCATED = 0x02,
288 } SoftBusBcScanResultDataStatus;
289 
290 /**
291  * @brief Defines the switch status of the ble and br.
292  *
293  * @since 4.1
294  * @version 1.0
295  */
296 typedef enum {
297     SOFTBUS_BC_BT_STATE_TURNING_ON = 0x0,
298     SOFTBUS_BC_BT_STATE_TURN_ON,
299     SOFTBUS_BC_BT_STATE_TURNING_OFF,
300     SOFTBUS_BC_BT_STATE_TURN_OFF,
301     SOFTBUS_BC_BR_STATE_TURNING_ON,
302     SOFTBUS_BC_BR_STATE_TURN_ON,
303     SOFTBUS_BC_BR_STATE_TURNING_OFF,
304     SOFTBUS_BC_BR_STATE_TURN_OFF
305 } SoftBusBcStackState;
306 
307 /**
308  * @brief Defines the broadcast service type.
309  *
310  * @since 4.1
311  * @version 1.0
312  */
313 typedef enum {
314     BC_DATA_TYPE_SERVICE, // The broadcast data type is service data.
315     BC_DATA_TYPE_MANUFACTURER, // The broadcast data type is manufacturer data.
316     BC_DATA_TYPE_BUTT,
317 } BroadcastDataType;
318 
319 /**
320  * @brief Defines the broadcast data information.
321  *
322  * @since 4.1
323  * @version 1.0
324  */
325 typedef struct {
326     uint16_t id; // broadcast data id, uuid or company id.
327     uint16_t payloadLen;
328     BroadcastDataType type; // broadcast data type {@link BroadcastDataType}.
329     uint8_t *payload; // if pointer defines rsp payload, pointer may be null
330 } BroadcastPayload;
331 
332 /**
333  * @brief Defines the broadcast packet.
334  *
335  * @since 4.1
336  * @version 1.0
337  */
338 typedef struct {
339     // By default, the flag behavior is supported. If the flag behavior is not supported, the value must be set to false
340     bool isSupportFlag;
341     uint8_t flag;
342     BroadcastPayload bcData;
343     BroadcastPayload rspData;
344 } BroadcastPacket;
345 
346 /**
347  * @brief Defines mac address information
348  *
349  * @since 4.1
350  * @version 1.0
351  */
352 typedef struct {
353     uint8_t addr[BC_ADDR_MAC_LEN];
354 } BcMacAddr;
355 
356 /**
357  * @brief Defines uuid information
358  *
359  * @since 4.1
360  * @version 1.0
361  */
362 typedef struct {
363     uint8_t uuidLen;
364     int8_t *uuid;
365 } BroadcastUuid;
366 
367 /**
368  * @brief Defines the device information returned by <b>SoftbusBroadcastCallback</b>.
369  *
370  * @since 4.1
371  * @version 1.0
372  */
373 typedef struct {
374     uint8_t eventType;
375     uint8_t dataStatus;
376     uint8_t primaryPhy;
377     uint8_t secondaryPhy;
378     uint8_t advSid;
379     int8_t txPower;
380     int8_t rssi;
381     uint8_t addrType;
382     uint8_t localName[BC_LOCAL_NAME_LEN_MAX];
383     BcMacAddr addr;
384     int8_t *deviceName;
385     BroadcastPacket packet;
386 } BroadcastReportInfo;
387 
388 /**
389  * @brief Defines the broadcast parameters
390  *
391  * @since 4.1
392  * @version 1.0
393  */
394 typedef struct {
395     uint8_t advType;
396     uint8_t advFilterPolicy;
397     uint8_t ownAddrType;
398     uint8_t peerAddrType;
399     int8_t txPower;
400     bool isSupportRpa;
401     uint8_t ownIrk[BC_IRK_LEN];
402     uint8_t ownUdidHash[BC_UDID_HASH_LEN];
403     BcMacAddr peerAddr;
404     BcMacAddr localAddr;
405     int32_t channelMap;
406     int32_t duration;
407     int32_t minInterval;
408     int32_t maxInterval;
409 } BroadcastParam;
410 
411 /**
412  * @brief Defines broadcast scan filters
413  *
414  * @since 4.1
415  * @version 1.0
416  */
417 typedef struct {
418     bool advIndReport;
419     uint16_t serviceUuid;
420     uint32_t serviceDataLength;
421     uint16_t manufactureId;
422     uint32_t manufactureDataLength;
423     int8_t *address;
424     int8_t *deviceName;
425     uint8_t *serviceData;
426     uint8_t *serviceDataMask;
427     uint8_t *manufactureData;
428     uint8_t *manufactureDataMask;
429     uint8_t filterIndex;
430 } BcScanFilter;
431 
432 /**
433  * @brief Defines broadcast scan parameters
434  *
435  * @since 4.1
436  * @version 1.0
437  */
438 typedef struct {
439     uint8_t scanType;
440     uint8_t scanPhy;
441     uint8_t scanFilterPolicy;
442     uint16_t scanInterval;
443     uint16_t scanWindow;
444 } BcScanParams;
445 
446 /**
447  * @brief Defines broadcast parameters of the low power chip.
448  *
449  * @since 4.1
450  * @version 1.0
451  */
452 typedef struct {
453     int32_t bcHandle;
454     BroadcastPacket packet;
455     BroadcastParam bcParam;
456 } LpBroadcastParam;
457 
458 /**
459  * @brief Defines scan parameters of the low power chip.
460  *
461  * @since 4.1
462  * @version 1.0
463  */
464 typedef struct {
465     BcScanParams scanParam;
466     int32_t listenerId;
467 } LpScanParam;
468 
469 #ifdef __cplusplus
470 }
471 #endif
472 
473 #endif /* SOFTBUS_BROADCAST_TYPE_H */
474