/*
* Copyright (C) 2021 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 Bluetooth
* @{
*
* @brief Provides basic Bluetooth capabilities.
*
* This module allows you to enable and disable Bluetooth, and access basic Bluetooth capabilities.\n
* Bluetooth uses profiles such as BT-GAP, BLE, BLE-GATT, BT-data transmission, HFP, A2DP, AVRCP, MAP, and PBAP.
*
* @since 6
*/
/**
* @file ohos_bt_def.h
*
* @brief Declares basic data structures, macros, enumerations, and structures for Bluetooth services.
*
* @since 6
*/
#ifndef OHOS_BT_DEF_H
#define OHOS_BT_DEF_H
/**
* @brief Defines the address length of a Bluetooth device.
*
*/
#define OHOS_BD_ADDR_LEN 6
/**
* @brief Defines the maximum length of a Bluetooth UUID, in bytes.
*
*/
#define OHOS_BLE_UUID_MAX_LEN 16
/**
* @brief Defines the maximum duration of low power device advertise, *10 = 655350 ms(spec_5.3_7.8.56)
*
*/
#define LPDEVICE_ADVERTISING_DURATION_MAX 65535
/**
* @brief Defines the minmum duration of low power device advertise. no_duration(spec_5.3_7.8.56)
*
*/
#define LPDEVICE_ADVERTISING_DURATION_MIN 0
/**
* @brief Defines the maximum low power device advertise adv event, 1 octet(spec_5.3_7.8.56)
*
*/
#define LPDEVICE_ADVERTISING_EXTADVEVENT_MAX 255
/**
* @brief Defines the minmum low power device advertise adv event. no max number of adv events(spec_5.3_7.8.56)
*
*/
#define LPDEVICE_ADVERTISING_EXTADVEVENT_MIN 0
/**
* @brief Defines the maxmum low power device advertise interval. ms (1105 support)
*
*/
#define LPDEVICE_ADVERTISING_INTERVAL_MAX 16777215
/**
* @brief Defines the minmum low power device advertise interval. ms (1105 support)
*
*/
#define LPDEVICE_ADVERTISING_INTERVAL_MIN 0
/**
* @brief Defines the maxmum low power device advertise window. ms (1105 support)
*
*/
#define LPDEVICE_ADVERTISING_WINDOW_MAX 16777215
/**
* @brief Defines the minmum low power device advertise window. ms (1105 support)
*
*/
#define LPDEVICE_ADVERTISING_WINDOW_MIN 0
/**
* @brief Defines the device id length
*
*/
#define OHOS_ACTIVE_DEVICE_ID_LEN 8
/**
* @brief Enumerates characteristic properties.
*
* Characteristic properties determine how characteristic values are used and\n
* how characteristic descriptors are accessed. If there are multiple properties,\n
* their values can be connected using the logical operator OR.\n
* For example, 0x01 | 0x02 indicates that the characteristic value can be broadcast and read.
*
* @since 6
*/
typedef enum {
/** The characteristic value can be broadcast. */
OHOS_GATT_CHARACTER_PROPERTY_BIT_BROADCAST = 0x01,
/** The characteristic value can be read. */
OHOS_GATT_CHARACTER_PROPERTY_BIT_READ = 0x02,
/** The characteristic value can be written, and no response needs to be sent to the client. */
OHOS_GATT_CHARACTER_PROPERTY_BIT_WRITE_NO_RSP = 0x04,
/** The characteristic value can be written, and a response needs to be sent to the client. */
OHOS_GATT_CHARACTER_PROPERTY_BIT_WRITE = 0x08,
/**
* The characteristic value can be sent to the client through a notification, and the client does not need to
* reply with a confirmation message.
*/
OHOS_GATT_CHARACTER_PROPERTY_BIT_NOTIFY = 0x10,
/**
* The characteristic value can be sent to the client through an indication, and the client does not need to
* reply with a confirmation message.
*/
OHOS_GATT_CHARACTER_PROPERTY_BIT_INDICATE = 0x20,
/** The characteristic value can be written with a signature. */
OHOS_GATT_CHARACTER_PROPERTY_BIT_SIGNED_WRITE = 0x40,
/** The characteristic has extended properties. */
OHOS_GATT_CHARACTER_PROPERTY_BIT_EXTENDED_PROPERTY = 0x80
} GattCharacteristicProperty;
/**
* @brief Enumerates permissions for an attribute.
*
* If there are multiple permissions, their values can be connected using the logical operator OR.\n
* For example, 0x01 | 0x02 indicates the reading and encrypted reading permissions.
*
* @since 6
*/
typedef enum {
/** Reading */
OHOS_GATT_PERMISSION_READ = 0x01,
/** Encrypted reading */
OHOS_GATT_PERMISSION_READ_ENCRYPTED = 0x02,
/** Encrypted reading with man-in-the-middle (MITM) protection */
OHOS_GATT_PERMISSION_READ_ENCRYPTED_MITM = 0x04,
/** Writing */
OHOS_GATT_PERMISSION_WRITE = 0x10,
/** Encrypted writing */
OHOS_GATT_PERMISSION_WRITE_ENCRYPTED = 0x20,
/** Encrypted writing with MITM protection */
OHOS_GATT_PERMISSION_WRITE_ENCRYPTED_MITM = 0x40,
/** Signed writing */
OHOS_GATT_PERMISSION_WRITE_SIGNED = 0x80,
/** Signed writing with MITM protection */
OHOS_GATT_PERMISSION_WRITE_SIGNED_MITM = 0x100
} GattAttributePermission;
/**
* @brief Enumerates transport IDs.
*
* @since 6
*/
typedef enum {
/** Invalid transport ID */
OHOS_BT_TRANSPORT_INVALID = 0x00,
/** BR/EDR */
OHOS_BT_TRANSPORT_BR_EDR = 0x01,
/** LE */
OHOS_BT_TRANSPORT_LE = 0x02
} BtTransportId;
/**
* @brief Enumerates Bluetooth statuses.
*
* @since 6
*/
typedef enum {
/** Success */
OHOS_BT_STATUS_SUCCESS = 0x00,
/** Failure */
OHOS_BT_STATUS_FAIL,
/** Bluetooth not ready */
OHOS_BT_STATUS_NOT_READY,
/** Insufficient memory */
OHOS_BT_STATUS_NOMEM,
/** System busy */
OHOS_BT_STATUS_BUSY,
/** Operation completed */
OHOS_BT_STATUS_DONE,
/** Bluetooth not supported by the current version or device */
OHOS_BT_STATUS_UNSUPPORTED,
/** Invalid parameters */
OHOS_BT_STATUS_PARM_INVALID,
/** Request unhandled */
OHOS_BT_STATUS_UNHANDLED,
/** Authentication failure */
OHOS_BT_STATUS_AUTH_FAILURE,
/** Remote device shut down */
OHOS_BT_STATUS_RMT_DEV_DOWN,
/** Authentication rejected */
OHOS_BT_STATUS_AUTH_REJECTED,
/** Duplicate advertising address */
OHOS_BT_STATUS_DUPLICATED_ADDR
} BtStatus;
/**
* @brief Enumerates result codes for GATT attribute operations.
*
* The error codes are based on Bluetooth Core Specification Version 5.2 | Vol 3, Part F, Table 3.4.
*
* @since 6
*/
typedef enum {
/** Success */
OHOS_GATT_SUCCESS = 0x00,
/** Invalid attribute handle */
OHOS_GATT_INVALID_HANDLE = 0x01,
/** Attribute unreadable */
OHOS_GATT_READ_NOT_PERMITTED = 0x02,
/** Attribute unwritable */
OHOS_GATT_WRITE_NOT_PERMITTED = 0x03,
/** Invalid attribute PDU */
OHOS_GATT_INVALID_PDU = 0x04,
/** Authentication required for reading or writing the attribute */
OHOS_GATT_INSUFFICIENT_AUTHENTICATION = 0x05,
/** Request not supported */
OHOS_GATT_REQUEST_NOT_SUPPORTED = 0x06,
/** Invalid offset */
OHOS_GATT_INVALID_OFFSET = 0x07,
/** Authorization required for reading or writing the attribute */
OHOS_GATT_INSUFFICIENT_AUTHORIZATION = 0x08,
/** The queue is full of prepare writes. */
OHOS_GATT_PREPARE_QUEUE_FULL = 0x09,
/** Attribute not found in the specified attribute handle */
OHOS_GATT_ATTRIBUTE_NOT_FOUND = 0x0A,
/** The attribute is not a long attribute and cannot use the ATT_READ_BLOB_REQ PDU. */
OHOS_GATT_ATTRIBUTE_NOT_LONG = 0x0B,
/** Insufficient size for the encryption key */
OHOS_GATT_INSUFFICIENT_ENCRYPTION_KEY_SIZE = 0x0C,
/** Invalid attribute value length */
OHOS_GATT_INVALID_ATTRIBUTE_VALUE_LENGTH = 0x0D,
/** Unlikely error */
OHOS_GATT_UNLIKELY_ERROR = 0x0E,
/** Encryption required for reading or writing the attribute */
OHOS_GATT_INSUFFICIENT_ENCRYPTION = 0x0F,
/** Unsupported grouping attribute */
OHOS_GATT_UNSUPPORTED_GROUP_TYPE = 0x10,
/** Insufficient resources */
OHOS_GATT_INSUFFICIENT_RESOURCES = 0x11,
/** The server needs to request the client to rediscover the database. */
OHOS_GATT_DATABASE_OUT_OF_SYNC = 0x12,
/** Attribute value not allowed */
OHOS_GATT_VALUE_NOT_ALLOWED = 0x13,
} GattStatus;
/**
* @brief Enumerates attribute types.
*
* @since 6
*/
typedef enum {
/** Service */
OHOS_BLE_ATTRIB_TYPE_SERVICE = 0x00,
/** Characteristic */
OHOS_BLE_ATTRIB_TYPE_CHAR,
/** Characteristic value */
OHOS_BLE_ATTRIB_TYPE_CHAR_VALUE,
/** Client characteristic configuration */
OHOS_BLE_ATTRIB_TYPE_CHAR_CLIENT_CONFIG,
/** Characteristic user description */
OHOS_BLE_ATTRIB_TYPE_CHAR_USER_DESCR,
} BleAttribType;
/**
* @brief Enumerates UUID types.
*
* @since 6
*/
typedef enum {
/** Invalid UUID */
OHOS_UUID_TYPE_NULL = 0x00,
/** 16-bit UUID */
OHOS_UUID_TYPE_16_BIT,
/** 32-bit UUID */
OHOS_UUID_TYPE_32_BIT,
/** 128-bit UUID */
OHOS_UUID_TYPE_128_BIT,
} UuidType;
/**
* @brief Enumerates types of characteristic and descriptor write operations performed by the GATT client.
*
* @since 6
*/
typedef enum {
/** Write operation without requiring a response from the server */
OHOS_GATT_WRITE_NO_RSP = 0x01,
/** Write operation requiring a response from the server */
OHOS_GATT_WRITE_DEFAULT = 0x02,
/** Prepare write requiring a response from the server */
OHOS_GATT_WRITE_PREPARE = 0x03,
/** Write operation with an authentication signature */
OHOS_GATT_WRITE_SIGNED = 0x04,
/** unknown type */
OHOS_GATT_WRITE_TYPE_UNKNOWN = 0xFF,
} BtGattWriteType;
/**
* @brief Enumerates profile connection statuses.
*
* @since 6
*/
typedef enum {
/** Connecting */
OHOS_PROFILE_STATE_CONNECTING = 0x01,
/** Connected */
OHOS_PROFILE_STATE_CONNECTED = 0x02,
/** Disconnecting */
OHOS_PROFILE_STATE_DISCONNECTING = 0x03,
/** Disconnected */
OHOS_PROFILE_STATE_DISCONNECTED = 0x04
} BtProfileConnectState;
/**
* @brief Enumerates connection strategies.
*
* @since 6
*/
typedef enum {
/** Unknown strategy */
OHOS_CONNECTION_UNKNOWN = 0x00,
/** Allowing connections */
OHOS_CONNECTION_ALLOWED,
/** Forbidding connections */
OHOS_CONNECTION_FORBIDDEN
} BtConnectStrategyType;
/**
* @brief Enumerates A2DP playing states of the device.
*
* @since 6
*/
typedef enum {
/** Not playing */
OHOS_A2DP_NOT_PLAYING = 0x00,
/** Playing */
OHOS_A2DP_IS_PLAYING
} BtA2dpPlayingState;
typedef enum {
OHOS_STATE_CONNECTING = 0x00,
OHOS_STATE_CONNECTED,
OHOS_STATE_DISCONNECTING,
OHOS_STATE_DISCONNECTED,
} BtConnectState;
/**
* @brief Enumerates Acl connection states of the device.
*
* @since 6
*/
typedef enum {
ACL_CONNECTION_STATE_DISCONNECTED = 0x00,
ACL_CONNECTION_STATE_CONNECTED = 0x01,
} BtAclState;
/**
* @brief Defines the Bluetooth address of the device.
*
* @since 6
*/
typedef struct {
/** Bluetooth address */
unsigned char addr[OHOS_BD_ADDR_LEN];
} BdAddr;
/**
* @brief Defines the UUID.
*
* @since 6
*/
typedef struct {
/** UUID length */
unsigned char uuidLen;
/** UUID field */
char *uuid;
} BtUuid;
#endif
/** @} */