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