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_BUTT,
101 } BaseServiceType;
102 
103 /**
104  * @brief Defines the mapping between supported service types and their names.
105  *
106  * @since 4.1
107  * @version 1.0
108  */
109 typedef struct {
110     /** Service types. For details, see {@link BaseServiceType}. */
111     BaseServiceType srvType;
112     /** Service names. For details, see {@link g_srvTypeMap}. */
113     char *service;
114 } SrvTypeMap;
115 
116 /**
117  * @brief Defines the mapping between supported service types and their names.
118  *
119  * Subsequent extensions need to be added in sequence.
120  *
121  * @since 4.1
122  * @version 1.0
123  */
124 static const SrvTypeMap g_srvTypeMap[] = {
125     {SRV_TYPE_HB, (char *)"heart beat"},
126     {SRV_TYPE_CONN, (char *)"connection"},
127     {SRV_TYPE_TRANS_MSG, (char *)"trans msg"},
128     {SRV_TYPE_DIS, (char *)"distributed"},
129     {SRV_TYPE_SHARE, (char *)"share"},
130     {SRV_TYPE_APPROACH, (char *)"approach"},
131     {SRV_TYPE_LP_BURST, (char *)"lp burst"},
132     {SRV_TYPE_LP_HB, (char *)"lp heartbeat"},
133     {SRV_TYPE_FAST_OFFLINE, (char *)"fast offline"},
134     {SRV_TYPE_VLINK, (char *)"virtual link"},
135     {SRV_TYPE_TOUCH, (char *)"touch"}
136 };
137 
138 /**
139  * @brief Defines the broadcast type to lp.
140  *
141  * @since 5.0
142  * @version 1.0
143  */
144 typedef enum {
145     SOFTBUS_HEARTBEAT_TYPE = 0,
146     SOFTBUS_BURST_TYPE,
147     SOFTBUS_UNKNOW_TYPE,
148 } LpServerType;
149 
150 /**
151  * @brief Defines the broadcast status type.
152  *
153  * @since 4.1
154  * @version 1.0
155  */
156 typedef enum {
157     SOFTBUS_BC_STATUS_SUCCESS = 0x00,
158     SOFTBUS_BC_STATUS_FAIL,
159     SOFTBUS_BC_STATUS_NOT_READY,
160     SOFTBUS_BC_STATUS_NOMEM,
161     SOFTBUS_BC_STATUS_BUSY,
162     SOFTBUS_BC_STATUS_DONE,
163     SOFTBUS_BC_STATUS_UNSUPPORTED,
164     SOFTBUS_BC_STATUS_PARM_INVALID,
165     SOFTBUS_BC_STATUS_UNHANDLED,
166     SOFTBUS_BC_STATUS_AUTH_FAILURE,
167     SOFTBUS_BC_STATUS_RMT_DEV_DOWN,
168     SOFTBUS_BC_STATUS_AUTH_REJECTED,
169     SOFTBUS_BC_STATUS_DUPLICATED_ADDR
170 } SoftBusBcStatus;
171 
172 /**
173  * @brief Defines the broadcast event type.
174  *
175  * @since 4.1
176  * @version 1.0
177  */
178 typedef enum {
179     SOFTBUS_BC_EVT_NON_CONNECTABLE_NON_SCANNABLE = 0x00,
180     SOFTBUS_BC_EVT_NON_CONNECTABLE_NON_SCANNABLE_DIRECTED = 0x04,
181     SOFTBUS_BC_EVT_CONNECTABLE = 0x01,
182     SOFTBUS_BC_EVT_CONNECTABLE_DIRECTED = 0x05,
183     SOFTBUS_BC_EVT_SCANNABLE = 0x02,
184     SOFTBUS_BC_EVT_SCANNABLE_DIRECTED = 0x06,
185     SOFTBUS_BC_EVT_LEGACY_NON_CONNECTABLE = 0x10,
186     SOFTBUS_BC_EVT_LEGACY_SCANNABLE = 0x12,
187     SOFTBUS_BC_EVT_LEGACY_CONNECTABLE = 0x13,
188     SOFTBUS_BC_EVT_LEGACY_CONNECTABLE_DIRECTED = 0x15,
189     SOFTBUS_BC_EVT_LEGACY_SCAN_RSP_TO_ADV_SCAN = 0x1A,
190     SOFTBUS_BC_EVT_LEGACY_SCAN_RSP_TO_ADV = 0x1B
191 } SoftBusBcScanResultEvtType;
192 
193 /**
194  * @brief Defines the broadcast mac type.
195  *
196  * @since 4.1
197  * @version 1.0
198  */
199 typedef enum {
200     SOFTBUS_BC_PUBLIC_DEVICE_ADDRESS = 0x00,
201     SOFTBUS_BC_RANDOM_DEVICE_ADDRESS = 0x01,
202     SOFTBUS_BC_PUBLIC_IDENTITY_ADDRESS = 0x02,
203     SOFTBUS_BC_RANDOM_STATIC_IDENTITY_ADDRESS = 0x03,
204     SOFTBUS_BC_UNRESOLVABLE_RANDOM_DEVICE_ADDRESS = 0xFE,
205     SOFTBUS_BC_NO_ADDRESS = 0xFF,
206 } SoftBusBcScanResultAddrType;
207 
208 /**
209  * @brief Defines the scan type.
210  *
211  * @since 4.1
212  * @version 1.0
213  */
214 typedef enum {
215     SOFTBUS_BC_SCAN_TYPE_PASSIVE = 0x00,
216     SOFTBUS_BC_SCAN_TYPE_ACTIVE,
217 } SoftBusBcScanType;
218 
219 /**
220  * @brief Defines the scan physics type.
221  *
222  * @since 4.1
223  * @version 1.0
224  */
225 typedef enum {
226     SOFTBUS_BC_SCAN_PHY_NO_PACKET = 0x00,
227     SOFTBUS_BC_SCAN_PHY_1M = 0x01,
228     SOFTBUS_BC_SCAN_PHY_2M = 0x02,
229     SOFTBUS_BC_SCAN_PHY_CODED = 0x03
230 } SoftBusBcScanResultPhyType;
231 
232 /**
233  * @brief Defines the scan filter policy type.
234  *
235  * @since 4.1
236  * @version 1.0
237  */
238 typedef enum {
239     SOFTBUS_BC_SCAN_FILTER_POLICY_ACCEPT_ALL = 0x00,
240     SOFTBUS_BC_SCAN_FILTER_POLICY_ONLY_WHITE_LIST,
241     SOFTBUS_BC_SCAN_FILTER_POLICY_ACCEPT_ALL_AND_RPA,
242     SOFTBUS_BC_SCAN_FILTER_POLICY_ONLY_WHITE_LIST_AND_RPA
243 } SoftBusBcScanFilterPolicy;
244 
245 /**
246  * @brief Defines the broadcast adv type.
247  *
248  * @since 4.1
249  * @version 1.0
250  */
251 typedef enum {
252     SOFTBUS_BC_ADV_IND = 0x00,
253     SOFTBUS_BC_ADV_DIRECT_IND_HIGH = 0x01,
254     SOFTBUS_BC_ADV_SCAN_IND = 0x02,
255     SOFTBUS_BC_ADV_NONCONN_IND = 0x03,
256     SOFTBUS_BC_ADV_DIRECT_IND_LOW  = 0x04,
257 } SoftBusBcAdvType;
258 
259 /**
260  * @brief Defines the broadcast adv filter and allow scan type.
261  *
262  * @since 4.1
263  * @version 1.0
264  */
265 typedef enum {
266     SOFTBUS_BC_ADV_FILTER_ALLOW_SCAN_ANY_CON_ANY = 0x00,
267     SOFTBUS_BC_ADV_FILTER_ALLOW_SCAN_WLST_CON_ANY = 0x01,
268     SOFTBUS_BC_ADV_FILTER_ALLOW_SCAN_ANY_CON_WLST = 0x02,
269     SOFTBUS_BC_ADV_FILTER_ALLOW_SCAN_WLST_CON_WLST = 0x03,
270 } SoftBusBcAdvFilter;
271 
272 /**
273  * @brief Defines the broadcast data status.
274  *
275  * @since 4.1
276  * @version 1.0
277  */
278 typedef enum {
279     SOFTBUS_BC_DATA_COMPLETE = 0x00,
280     SOFTBUS_BC_DATA_INCOMPLETE_MORE_TO_COME = 0x01,
281     SOFTBUS_BC_DATA_INCOMPLETE_TRUNCATED = 0x02,
282 } SoftBusBcScanResultDataStatus;
283 
284 /**
285  * @brief Defines the switch status of the ble and br.
286  *
287  * @since 4.1
288  * @version 1.0
289  */
290 typedef enum {
291     SOFTBUS_BC_BT_STATE_TURNING_ON = 0x0,
292     SOFTBUS_BC_BT_STATE_TURN_ON,
293     SOFTBUS_BC_BT_STATE_TURNING_OFF,
294     SOFTBUS_BC_BT_STATE_TURN_OFF,
295     SOFTBUS_BC_BR_STATE_TURNING_ON,
296     SOFTBUS_BC_BR_STATE_TURN_ON,
297     SOFTBUS_BC_BR_STATE_TURNING_OFF,
298     SOFTBUS_BC_BR_STATE_TURN_OFF
299 } SoftBusBcStackState;
300 
301 /**
302  * @brief Defines the broadcast service type.
303  *
304  * @since 4.1
305  * @version 1.0
306  */
307 typedef enum {
308     BC_DATA_TYPE_SERVICE, // The broadcast data type is service data.
309     BC_DATA_TYPE_MANUFACTURER, // The broadcast data type is manufacturer data.
310     BC_DATA_TYPE_BUTT,
311 } BroadcastDataType;
312 
313 /**
314  * @brief Defines the broadcast data information.
315  *
316  * @since 4.1
317  * @version 1.0
318  */
319 typedef struct {
320     BroadcastDataType type; // broadcast data type {@link BroadcastDataType}.
321     uint16_t id; // broadcast data id, uuid or company id.
322     uint16_t payloadLen;
323     uint8_t *payload; // if pointer defines rsp payload, pointer may be null
324 } BroadcastPayload;
325 
326 /**
327  * @brief Defines the broadcast packet.
328  *
329  * @since 4.1
330  * @version 1.0
331  */
332 typedef struct {
333     BroadcastPayload bcData;
334     BroadcastPayload rspData;
335     // By default, the flag behavior is supported. If the flag behavior is not supported, the value must be set to false
336     bool isSupportFlag;
337     uint8_t flag;
338 } BroadcastPacket;
339 
340 /**
341  * @brief Defines mac address information
342  *
343  * @since 4.1
344  * @version 1.0
345  */
346 typedef struct {
347     uint8_t addr[BC_ADDR_MAC_LEN];
348 } BcMacAddr;
349 
350 /**
351  * @brief Defines uuid information
352  *
353  * @since 4.1
354  * @version 1.0
355  */
356 typedef struct {
357     uint8_t uuidLen;
358     int8_t *uuid;
359 } BroadcastUuid;
360 
361 /**
362  * @brief Defines the device information returned by <b>SoftbusBroadcastCallback</b>.
363  *
364  * @since 4.1
365  * @version 1.0
366  */
367 typedef struct {
368     uint8_t eventType;
369     uint8_t dataStatus;
370     uint8_t primaryPhy;
371     uint8_t secondaryPhy;
372     uint8_t advSid;
373     int8_t txPower;
374     int8_t rssi;
375     uint8_t addrType;
376     BcMacAddr addr;
377     int8_t *deviceName;
378     uint8_t localName[BC_LOCAL_NAME_LEN_MAX];
379     BroadcastPacket packet;
380 } BroadcastReportInfo;
381 
382 /**
383  * @brief Defines the broadcast parameters
384  *
385  * @since 4.1
386  * @version 1.0
387  */
388 typedef struct {
389     int32_t minInterval;
390     int32_t maxInterval;
391     uint8_t advType;
392     uint8_t advFilterPolicy;
393     uint8_t ownAddrType;
394     uint8_t peerAddrType;
395     BcMacAddr peerAddr;
396     int32_t channelMap;
397     int32_t duration;
398     int8_t txPower;
399     bool isSupportRpa;
400     uint8_t ownIrk[BC_IRK_LEN];
401     uint8_t ownUdidHash[BC_UDID_HASH_LEN];
402     BcMacAddr localAddr;
403 } BroadcastParam;
404 
405 /**
406  * @brief Defines broadcast scan filters
407  *
408  * @since 4.1
409  * @version 1.0
410  */
411 typedef struct {
412     int8_t *address;
413     int8_t *deviceName;
414     uint16_t serviceUuid;
415     uint32_t serviceDataLength;
416     uint8_t *serviceData;
417     uint8_t *serviceDataMask;
418     uint16_t manufactureId;
419     uint32_t manufactureDataLength;
420     uint8_t *manufactureData;
421     uint8_t *manufactureDataMask;
422     bool advIndReport;
423 } BcScanFilter;
424 
425 /**
426  * @brief Defines broadcast scan parameters
427  *
428  * @since 4.1
429  * @version 1.0
430  */
431 typedef struct {
432     uint16_t scanInterval;
433     uint16_t scanWindow;
434     uint8_t scanType;
435     uint8_t scanPhy;
436     uint8_t scanFilterPolicy;
437 } BcScanParams;
438 
439 /**
440  * @brief Defines broadcast parameters of the low power chip.
441  *
442  * @since 4.1
443  * @version 1.0
444  */
445 typedef struct {
446     int32_t bcHandle;
447     BroadcastPacket packet;
448     BroadcastParam bcParam;
449 } LpBroadcastParam;
450 
451 /**
452  * @brief Defines scan parameters of the low power chip.
453  *
454  * @since 4.1
455  * @version 1.0
456  */
457 typedef struct {
458     BcScanParams scanParam;
459     int32_t listenerId;
460 } LpScanParam;
461 
462 #ifdef __cplusplus
463 }
464 #endif
465 
466 #endif /* SOFTBUS_BROADCAST_TYPE_H */
467