/* * Copyright (c) 2021-2024 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * @addtogroup SoftBus * @{ * * @brief Provides high-speed, secure communication between devices. * * This module implements unified distributed communication capability management between nearby devices, and provides * link-independent device discovery and transmission interfaces to support service publishing and data transmission. * * @since 1.0 * @version 1.0 */ /** @} */ /** * @file softbus_common.h * * @brief Declares common APIs for the Intelligent Soft Bus. * * This file provides common functions and constants for each submodule of the Intelligent Soft Bus, including: \n * * * * @since 1.0 * @version 1.0 */ #ifndef SOFTBUS_CLIENT_COMMON_H #define SOFTBUS_CLIENT_COMMON_H #include #include #ifdef __cplusplus extern "C" { #endif /** * @brief Permission of softbus component * * @since 3.0 * @version 3.0 */ #define OHOS_PERMISSION_DISTRIBUTED_DATASYNC "ohos.permission.DISTRIBUTED_DATASYNC" #define OHOS_PERMISSION_DISTRIBUTED_SOFTBUS_CENTER "ohos.permission.DISTRIBUTED_SOFTBUS_CENTER" /** * @brief Indicates the length of the Bluetooth device MAC address in string format, * including the terminating null character \0. * * @since 1.0 * @version 1.0 */ #define BT_MAC_LEN 18 /** * @brief Indicates the length of the network ID string, including the terminating null character \0. * * @since 1.0 * @version 1.0 */ #define NETWORK_ID_BUF_LEN 65 /** * @brief Indicates the length of the UDID string, including the terminating null character \0. * * @since 1.0 * @version 1.0 */ #define UDID_BUF_LEN 65 /** * @brief Indicates the length of the UDID hash value. * * @since 1.0 * @version 1.0 */ #define UDID_HASH_LEN 32 /** * @brief Indicates the length of the UUID string, including the terminating null character \0. * * @since 1.0 * @version 1.0 */ #define UUID_BUF_LEN 65 /** * @brief Indicates the maximum length of an IP address in string format, * including the terminating null character \0. IPv6 addresses are supported. * * @since 1.0 * @version 1.0 */ #define IP_STR_MAX_LEN 46 /** * @brief Indicates the maximum length of the account hash code in IDiscoveryCallback. * */ #define MAX_ACCOUNT_HASH_LEN 96 /** * @brief Indicates the maximum length of the hash code in HEX calculated by SHA-256. * */ #define SHA_256_HASH_LEN 32 /** * @brief Indicates the maximum length of the hash code in string format calculated by SHA-256, * including the terminating null character \0. * */ #define SHA_256_HEX_HASH_LEN 65 /** * @brief Indicates the maximum length of the capability data in PublishInfo and SubscribeInfo. * */ #define MAX_CAPABILITYDATA_LEN 513 /** * @brief Indicates the maximum length of the custom data in IDiscoveryCallback. * */ #define DISC_MAX_CUST_DATA_LEN 513 /** * @brief Indicates the maximum number of capabilities contained in the bitmap in IDiscoveryCallback. * */ #define DISC_MAX_CAPABILITY_NUM 2 /** * @brief Indicates the maximum length of the device name in IDiscoveryCallback. * */ #define DISC_MAX_DEVICE_NAME_LEN 65 /** * @brief Indicates the maximum length of the device ID in IDiscoveryCallback. * */ #define DISC_MAX_DEVICE_ID_LEN 96 /** * @brief Indicates the maximum length of the network commmon length IDiscoveryCallback. * */ #define LNN_COMMON_LEN 4 /** * @brief Indicates the short hash length of the networkId. * */ #define NODEID_SHORT_HASH_LEN 6 /** * @brief Indicates the short hash length of the udid. * */ #define UDID_SHORT_HASH_LEN 6 /** * @brief Indicates the maximum length of the device database status in INodeStateCb. * */ #define DATA_CHANGE_FLAG_BUF_LEN 2 /** * @brief Indicates the maximum length of the database dynamic level in IDataLevelCb. * */ #define DATA_DYNAMIC_LEVEL_BUF_LEN 2 /** * @brief Indicates the maximum length of the database static level in IDataLevelCb. * */ #define DATA_STATIC_LEVEL_BUF_LEN 2 /** * @brief Indicates the maximum length of the database switch level in IDataLevelCb. * */ #define DATA_SWITCH_LEVEL_BUF_LEN 4 /** * @brief Device screen on/off bool data. * */ #define DATA_DEVICE_SCREEN_STATUS_LEN 1 /** * @brief Indicates the maximum length of the database switch length in IDataLevelCb. * */ #define DATA_SWITCH_LENGTH_BUF_LEN 2 /** * @brief Indicates the maximum length of the node address. * */ #define SHORT_ADDRESS_MAX_LEN 20 /** * @brief Indicates the maximum num of the node status. * */ #define NODE_STATUS_MAX_NUM 32 /** * @brief Indicates the maximum num of the device type size. * */ #define DEVICE_TYPE_MAX_SIZE 3 /** * @brief Indicates the length of the node screen status. * */ #define NODE_SCREEN_STATUS_LEN 1 /** * @brief Enumerates {@link ConnectionAddrType} types of a device that is added to a LNN. * * @since 1.0 * @version 1.0 */ typedef enum { CONNECTION_ADDR_WLAN = 0, /**< WLAN */ CONNECTION_ADDR_BR, /**< BR */ CONNECTION_ADDR_BLE, /**< BLE */ CONNECTION_ADDR_ETH, /**< Ethernet */ CONNECTION_ADDR_SESSION, /**< SESSION */ CONNECTION_ADDR_MAX /**< Invalid type */ } ConnectionAddrType; /** * @brief Enumerates {@link BleProtocolType} types of ble connection type * */ typedef enum { BLE_PROTOCOL_ANY = -1, BLE_GATT = 0, BLE_COC, BLE_PROTOCOL_MAX } BleProtocolType; /** * @brief Defines the address of a device that is added to a LNN. * For details, see {@link ConnectionAddr}. * * @since 1.0 * @version 1.0 */ typedef struct { /**< Address type. This field is used to explain the info field. */ ConnectionAddrType type; /**< Connection address information */ union { /**< BR address */ struct BrAddr { char brMac[BT_MAC_LEN]; /**< BR MAC address in string format */ } br; /**< BLE address */ struct BleAddr { BleProtocolType protocol; char bleMac[BT_MAC_LEN]; /**< BLE MAC address in string format */ uint8_t udidHash[UDID_HASH_LEN]; /**< udid hash value */ uint32_t psm; } ble; /**< IPv4 or IPv6 address */ struct IpAddr { /** * IP address in string format. It can be an IPv4 address written in dotted decimal notation * or an IPv6 address written in hexadecimal colon-separated notation. */ char ip[IP_STR_MAX_LEN]; uint16_t port; /**< Port number represented by the host byte order */ uint8_t udidHash[UDID_HASH_LEN]; /**< udid hash value */ } ip; /**< Session address */ struct SessionAddr { int32_t sessionId; /**< Session Id in int format */ int32_t channelId; /**< Channel Id in int format */ int32_t type; /**< Session type in int format */ } session; } info; char peerUid[MAX_ACCOUNT_HASH_LEN]; } ConnectionAddr; /** * @brief Enumerates the modes in which services are published. * */ typedef enum { /* Passive */ DISCOVER_MODE_PASSIVE = 0x55, /* Proactive */ DISCOVER_MODE_ACTIVE = 0xAA } DiscoverMode; /** * @brief Enumerates media, such as Bluetooth, Wi-Fi, and USB, used for publishing services. * * Currently, only COAP is supported. * When AUTO is selected, all the supported media will be called automatically. */ typedef enum { /** Automatic medium selection */ AUTO = 0, /** Bluetooth */ BLE = 1, /** Wi-Fi */ COAP = 2, /** USB */ USB = 3, /** HiLink */ COAP1 = 4, MEDIUM_BUTT } ExchangeMedium; /** * @brief Enumerates frequencies for publishing services. * * This enumeration applies only to Bluetooth and is not supported currently. */ typedef enum { /** Low */ LOW = 0, /** Medium */ MID = 1, /** High */ HIGH = 2, /** Super-high */ SUPER_HIGH = 3, /** Extreme-high */ EXTREME_HIGH = 4, FREQ_BUTT } ExchangeFreq; /** * @brief Enumerates supported capabilities published by a device. * */ typedef enum { /** MeeTime */ HICALL_CAPABILITY_BITMAP = 0, /** Video reverse connection in the smart domain */ PROFILE_CAPABILITY_BITMAP = 1, /** Gallery in Vision */ HOMEVISIONPIC_CAPABILITY_BITMAP = 2, /** cast+ */ CASTPLUS_CAPABILITY_BITMAP, /** Input method in Vision */ AA_CAPABILITY_BITMAP, /** Device virtualization tool package */ DVKIT_CAPABILITY_BITMAP, /** Distributed middleware */ DDMP_CAPABILITY_BITMAP, /** Osd capability */ OSD_CAPABILITY_BITMAP, /**Share capability */ SHARE_CAPABILITY_BITMAP, /**Approach capability */ APPROACH_CAPABILITY_BITMAP, /**virtual link capability */ VLINK_CAPABILITY_BITMAP, /**Touch capability */ TOUCH_CAPABILITY_BITMAP } DataBitMap; typedef struct { int64_t authId; uint32_t type; } AuthHandle; /** * @brief Defines the mapping between supported capabilities and bitmaps. * */ typedef struct { /** Bitmaps. For details, see {@link DataBitMap}. */ DataBitMap bitmap; /** Capability. For details, see {@link g_capabilityMap}. */ char *capability; } CapabilityMap; /** * @brief Defines the mapping between supported capabilities and bitmaps. * */ static const CapabilityMap g_capabilityMap[] = { {HICALL_CAPABILITY_BITMAP, (char *)"hicall"}, {PROFILE_CAPABILITY_BITMAP, (char *)"profile"}, {HOMEVISIONPIC_CAPABILITY_BITMAP, (char *)"homevisionPic"}, {CASTPLUS_CAPABILITY_BITMAP, (char *)"castPlus"}, {AA_CAPABILITY_BITMAP, (char *)"aaCapability"}, {DVKIT_CAPABILITY_BITMAP, (char *)"dvKit"}, {DDMP_CAPABILITY_BITMAP, (char *)"ddmpCapability"}, {OSD_CAPABILITY_BITMAP, (char *)"osdCapability"}, {SHARE_CAPABILITY_BITMAP, (char *)"share"}, {APPROACH_CAPABILITY_BITMAP, (char *)"approach"}, {VLINK_CAPABILITY_BITMAP, (char *)"virtualLink"}, {TOUCH_CAPABILITY_BITMAP, (char *)"touch"} }; /** * @brief Defines service publishing information. * */ typedef struct { /** Service ID */ int publishId; /** Discovery mode for service publishing. For details, see {@link Discovermode}. */ DiscoverMode mode; /** Service publishing medium. For details, see {@link ExchangeMedium}. */ ExchangeMedium medium; /** Service publishing frequency. For details, see {@link ExchangeFreq}. */ ExchangeFreq freq; /** Service publishing capabilities. For details, see {@link g_capabilityMap}. */ const char *capability; /** Capability data for service publishing, MUST be c-string format. */ unsigned char *capabilityData; /** Maximum length of the capability data for service publishing (512 bytes) */ unsigned int dataLen; /** Whether the device should be ranged by discoverers.*/ bool ranging; } PublishInfo; /** * @brief Defines service subscription information. * */ typedef struct { /** Service ID */ int subscribeId; /** Discovery mode for service subscription. For details, see {@link Discovermode}. */ DiscoverMode mode; /** Service subscription medium. For details, see {@link ExchangeMedium}. */ ExchangeMedium medium; /** Service subscription frequency. For details, see {@link ExchangeFreq}. */ ExchangeFreq freq; /** only find the device with the same account */ bool isSameAccount; /** find the sleeping devices */ bool isWakeRemote; /** Service subscription capability. For details, see {@link g_capabilityMap}. */ const char *capability; /** Capability data for service subscription, MUST be c-string format. */ unsigned char *capabilityData; /** Maximum length of the capability data for service subscription (512 bytes) */ unsigned int dataLen; } SubscribeInfo; /** * @brief Enumerates single heartbeat cycle parameter. * * @since 1.0 * @version 1.0 */ typedef enum { /**< Heartbeat interval 30 sec */ HIGH_FREQ_CYCLE = 30, /**< Heartbeat interval 60 sec */ MID_FREQ_CYCLE = 60, /**< Heartbeat interval 5 * 60 sec */ LOW_FREQ_CYCLE = 5 * 60, /**< Heartbeat interval 10 * 60 sec */ DEFAULT_FREQ_CYCLE = 10 * 60, } ModeCycle; /** * @brief Enumerates duration of heartbeat keeping alive parameter. * * @since 1.0 * @version 1.0 */ typedef enum { /**< Heartbeat continues for 60 sec */ DEFAULT_DURATION = 60, /**< Heartbeat continues for 10 * 60 sec. */ NORMAL_DURATION = 10 * 60, /**< Heartbeat continues for 30 * 60 sec. */ LONG_DURATION = 30 * 60, } ModeDuration; /** * @brief Enumerates device types. * */ typedef enum { /* Smart speaker */ SMART_SPEAKER = 0x00, /* PC */ DESKTOP_PC, /* Laptop */ LAPTOP, /* Mobile phone */ SMART_PHONE, /* Tablet */ SMART_PAD, /* Smart watch */ SMART_WATCH, /* Smart car */ SMART_CAR, /* Kids' watch */ CHILDREN_WATCH, /* Smart TV */ SMART_TV, } DeviceType; /** * @brief Defines the device information returned by IDiscoveryCallback. * */ typedef struct { /** Device ID. Its maximum length is specified by {@link DISC_MAX_DEVICE_ID_LEN}. */ char devId[DISC_MAX_DEVICE_ID_LEN]; /** Account hash code. Its maximum length is specified by {@link MAX_ACCOUNT_HASH_LEN}. */ char accountHash[MAX_ACCOUNT_HASH_LEN]; /** Device type. For details, see {@link DeviceType}. */ DeviceType devType; /** Device name. Its maximum length is specified by {@link DISC_MAX_DEVICE_NAME_LEN}. */ char devName[DISC_MAX_DEVICE_NAME_LEN]; /** Device Online Status **/ bool isOnline; /** Number of available connections */ unsigned int addrNum; /** Connection information. For details, see {@link ConnectionAddr}. */ ConnectionAddr addr[CONNECTION_ADDR_MAX]; /** Number of capabilities */ unsigned int capabilityBitmapNum; /** Device capability bitmap. * The maximum number of capabilities in the bitmap is specified by {@link DISC_MAX_CAPABILITY_NUM}. */ unsigned int capabilityBitmap[DISC_MAX_CAPABILITY_NUM]; /** Custom data. Its length is specified by {@link DISC_MAX_CUST_DATA_LEN}. */ char custData[DISC_MAX_CUST_DATA_LEN]; /** The distance of discovered device, in centimeters(cm)*/ int32_t range; } DeviceInfo; /** * @brief Defines device additional info used by inner * */ typedef struct { /** medium which describe the device found by. */ ExchangeMedium medium; } InnerDeviceInfoAddtions; /** * @brief Defines the capability enumeration of suppressing and restoring ble. * the value same as lnn_heartbeat_utils.h * */ typedef enum { /* Suppress ble */ REQUEST_DISABLE_BLE_DISCOVERY = 100, /* Restore ble */ REQUEST_ENABLE_BLE_DISCOVERY, } StrategyForBle; #ifdef __cplusplus } #endif #endif /** @} */