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