PASII/CandeII_1.4/Lib/lib.h

862 lines
23 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef _BLE_LIB_H_
#define _BLE_LIB_H_
#include "ARMCM0.h"
enum _RETURN_STATUS_ {
_PARAM_ERROR_ = 0x00,
_NO_ERROR_ = 0x01,
};
enum _COMPANY_ID_ {
COMPANY_ID_SYD = 0x0,
};
enum _QFN_TYPE_ {
T_QFN_48 = 0,
T_QFN_32 = 1,
};
#ifndef CONFIG_TARGET_LIB
#pragma pack(1)
#define MAX_ATT_REPORT_HDL 20
#define MAX_ATT_DATA_SZ 23
#define BD_ADDR_SZ 6
#define MAX_KEY_SZ 16
#define MIN_KEY_SZ 7
#define MAX_RAND_SZ 8
#define MAX_EDIV_SZ 2
#define ACCESS_CODE_SZ 4
#define MAX_ADV_DATA_SZ 31
#define MAX_SCAN_DEV_NUM 8
#define DIR_IN 0
#define DIR_OUT 1
enum SCAN_TYPE {
PASSIVE_SCAN = 0x00,
ACTIVE_SCAN = 0x01,
};
enum _BLE_ADDRESS_TYPE_ {
PUBLIC_ADDRESS_TYPE = 0x00,
RANDOM_ADDRESS_TYPE = 0x01,
};
enum GAP_RET_STATUS {
RET_FAIL = 0x00,
RET_SUCCESS = 0x01,
};
enum _EVT_TYPE_ {
GAP_EVT = 0x00,
};
enum _GAP_EVT_ {
GAP_EVT_ADV_END = 0x00000001,
GAP_EVT_CONNECTED = 0x00000002,
GAP_EVT_DISCONNECTED = 0x00000004,
GAP_EVT_PAIRING_COMP = 0x00000008,
GAP_EVT_PASSKEY_REQ = 0x00000010,
GAP_EVT_SHOW_PASSKEY_REQ = 0x00000020,
GAP_EVT_CONNECTION_INTERVAL = 0x00000040,
GAP_EVT_CONNECTION_SLEEP = 0x00000080,
GAP_EVT_ATT_READ = 0x00000100,
GAP_EVT_ATT_WRITE = 0x00000200,
GAP_EVT_ATT_PREPARE_WRITE = 0x00000400,
GAP_EVT_ATT_EXECUTE_WRITE = 0x00000800,
GAP_EVT_ATT_HANDLE_CONFIRMATION = 0x00001000,
GAP_EVT_ATT_HANDLE_CONFIGURE = 0x00002000,
GAP_EVT_ENC_START = 0x00004000,
GAP_EVT_L2CAP_UPDATE_RSP = 0x00008000,
GAP_EVT_CONN_UPDATE_COMP = 0x00010000,
GAP_EVT_SCAN_REPORT = 0x00020000,
GAP_EVT_SCAN_END = 0x00040000,
GAP_EVT_PAIRING_START = 0x00080000,
};
enum _ADV_CH_PKT_TYPE_ {
ADV_IND = 0x00,
ADV_DIRECT_IND = 0x01,
ADV_NOCONN_IND = 0x02,
SCAN_REQ = 0x03,
SCAN_RSP = 0x04,
CONNECT_REQ = 0x05,
ADV_SCAN_IND = 0x06,
};
enum BLE_SEND_TYPE {
BLE_GATT_NOTIFICATION = 0x0001,
BLE_GATT_INDICATION = 0x0002,
};
enum WAKEUP_TYPE {
SLEEP_WAKEUP = 0,
POWERDOWN_WAKEUP = 1,
};
enum SMP_IO_CAPABILITY {
IO_DISPLAY_ONLY = 0x00,
IO_DISPLAY_YESNO = 0x01,
IO_KEYBOARD_ONLY = 0x02,
IO_NO_INPUT_OUTPUT = 0x03,
IO_KEYBOARD_DISPLAY = 0x04,
};
enum SMP_OOB_FLAG {
OOB_AUTH_NOT_PRESENT = 0x00,
OOB_AUTH_PRESENT = 0x01,
};
enum SMP_BONDING_FLAGS {
AUTHREQ_NO_BONDING = 0x00,
AUTHREQ_BONDING = 0x01,
};
enum SMP_KEY_DISTRIBUTION {
SMP_KEY_MASTER_IDEN = 0x01,
SMP_KEY_ADDR_INFO = 0x02,
SMP_KEY_SIGNIN_INFO = 0x04,
};
enum SMP_FAILED_CODE {
SMP_RESERVED = 0x00,
SMP_PASSKEY_ENTRY_FAILED = 0x01,
SMP_OOB_NOT_AVAILABLE = 0x02,
SMP_AUTH_REQUIREMENTS = 0x03,
SMP_CONFIRM_VALUE_FAILED = 0x04,
SMP_PAIRING_NOT_SUPPORTED = 0x05,
SMP_ENCTYPTION_KEY_SZ = 0x06,
SMP_COMMAND_NOT_SUPPORTED = 0x07,
SMP_UNSPECIFIED_REASON = 0x08,
SMP_REPEATED_ATTEMPTS = 0x09,
SMP_INVALID_PARAMETERS = 0x0A,
SMP_FAIL_TIMEOUT = 0xFF,
};
enum _SYSTEM_CLOCK_SEL_ {
SYSTEM_CLOCK_64M_RCOSC = 0x00,
SYSTEM_CLOCK_32M_RCOSC = 0x01,
SYSTEM_CLOCK_16M_RCOSC = 0x02,
SYSTEM_CLOCK_8M_RCOSC = 0x03,
SYSTEM_CLOCK_4M_RCOSC = 0x04,
SYSTEM_CLOCK_2M_RCOSC = 0x05,
SYSTEM_CLOCK_1M_RCOSC = 0x06,
SYSTEM_CLOCK_500k_RCOSC = 0x07,
SYSTEM_CLOCK_32M_XOSC = 0x08,
};
enum _32K_CLOCK_SEL_ {
SYSTEM_32K_CLOCK_RCOSC = 0x00,
SYSTEM_32K_CLOCK_XOSC = 0x01,
SYSTEM_32K_CLOCK_32MXO_DIV = 0x02,
};
enum SOFT_TIMER_CTRL_TYPE {
/* 0x0001 ~ 0x0010 internal used */
SOFT_TIMER_0 = 0x0020,
SOFT_TIMER_1 = 0x0040,
SOFT_TIMER_2 = 0x0080,
SOFT_TIMER_3 = 0x0100,
SOFT_TIMER_4 = 0x0200,
};
typedef void (*sys_timer_cb)(void);
struct gap_ble_addr {
uint8_t type; // \ref _BLE_ADDRESS_TYPE_
uint8_t addr[BD_ADDR_SZ];
};
struct gap_key_params {
uint8_t ediv[MAX_EDIV_SZ];
uint8_t rand[MAX_RAND_SZ];
uint8_t ltk[MAX_KEY_SZ];
uint8_t iden[MAX_KEY_SZ];
};
struct gap_bond_dev {
struct gap_ble_addr addr;
struct gap_key_params key;
};
struct gap_adv_params {
uint8_t type; // \ref _ADV_CH_PKT_TYPE_
struct gap_ble_addr peer_addr;
uint8_t policy;
uint8_t channel;
uint16_t interval; /**< Between 0x0020 and 0x4000 in 0.625 ms units (20ms to 10.24s) */
uint16_t timeout; /**< Between 0x0001 and 0x3FFF in seconds, 0x0000 is disable */
};
struct gap_scan_params {
uint8_t mode; // \ref SCAN_TYPE
uint8_t channel;
uint16_t interval;
uint16_t window;
uint16_t timeout;
};
struct gap_scan_dev {
uint8_t adv_type; // \ref _ADV_CH_PKT_TYPE_
struct gap_ble_addr peer_addr;
};
struct gap_scan_report_evt {
struct gap_scan_dev dev;
uint8_t data_len;
uint8_t adv_data[MAX_ADV_DATA_SZ];
uint8_t rssi;
};
struct gap_scan_end_evt {
uint8_t dev_cnt;
struct gap_scan_dev *p_dev_list;
};
struct gap_update_params {
uint16_t updateitv_min;
uint16_t updateitv_max;
uint16_t updatelatency;
uint16_t updatesvto;
};
struct gap_disconnected_evt {
uint8_t reason; // HCI error codes
};
struct gap_pairing_comp_evt {
uint8_t status; // \ref GAP_RET_STATUS
uint8_t dir; // \ref DIR_IN or DIR_OUT
uint8_t reason; // \ref SMP_FAILED_CODE
struct gap_key_params enc_key;
};
struct gap_att_read_evt {
uint16_t primary;
uint16_t uuid;
uint16_t hdl;
uint16_t offset;
};
struct gap_att_write_evt {
uint16_t primary;
uint16_t uuid;
uint16_t hdl;
uint8_t sz;
uint8_t data[MAX_ATT_DATA_SZ];
};
struct gap_att_pre_write_evt {
uint16_t primary;
uint16_t uuid;
uint16_t hdl;
uint16_t offset;
uint8_t sz;
uint8_t data[MAX_ATT_DATA_SZ];
};
struct gap_att_exec_write_evt {
uint8_t flags;
};
struct gap_att_handle_configure_evt {
uint16_t uuid;
uint16_t hdl;
uint16_t value;
};
enum L2CAP_UPDATE_RSP_RES {
CONN_PARAMS_ACCEPTED = 0x0000,
CONN_PARAMS_REJECTED = 0x0001,
CONN_PARAM_SMART_TIMEROUT = 0x0002, //<2F><><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DZ<EFBFBD>׼<EFBFBD><D7BC>BLE<4C>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>smart_update<74><65><EFBFBD>ܶ<EFBFBD><DCB6><EFBFBD><EFBFBD>ӵģ<D3B5><C4A3><EFBFBD>ʹ<EFBFBD><CAB9>smart_update<74><65><EFBFBD>ܲ<EFBFBD><DCB2><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD>¼<EFBFBD>
CONN_PARAM_SMART_SUCCEED = 0x0003, //<2F><><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DZ<EFBFBD>׼<EFBFBD><D7BC>BLE<4C>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>smart_update<74><65><EFBFBD>ܶ<EFBFBD><DCB6><EFBFBD><EFBFBD>ӵģ<D3B5><C4A3><EFBFBD>ʹ<EFBFBD><CAB9>smart_update<74><65><EFBFBD>ܲ<EFBFBD><DCB2><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD>¼<EFBFBD>
CONN_PARAM_LATENCY_ENABLE = 0x0004, //<2F><><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DZ<EFBFBD>׼<EFBFBD><D7BC>BLE<4C>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>smart_update<74><65><EFBFBD>ܶ<EFBFBD><DCB6><EFBFBD><EFBFBD>ӵģ<D3B5><C4A3><EFBFBD>ʹ<EFBFBD><CAB9>smart_update<74><65><EFBFBD>ܲ<EFBFBD><DCB2><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD>¼<EFBFBD>
CONN_PARAM_LATENCY_DISABLE = 0x0005, //<2F><><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DZ<EFBFBD>׼<EFBFBD><D7BC>BLE<4C>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>smart_update<74><65><EFBFBD>ܶ<EFBFBD><DCB6><EFBFBD><EFBFBD>ӵģ<D3B5><C4A3><EFBFBD>ʹ<EFBFBD><CAB9>smart_update<74><65><EFBFBD>ܲ<EFBFBD><DCB2><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD>
};
struct gap_l2cap_update_rsp_evt {
uint16_t result; // \ref L2CAP_UPDATE_RSP_RES
};
struct gap_link_params {
uint16_t interval;
uint16_t latency;
uint16_t svto;
};
struct gap_ble_evt {
uint8_t evt_type; // \ref _EVT_TYPE_
uint32_t evt_code; // \ref _GAP_EVT_
union
{
struct gap_disconnected_evt disconn_evt; // \ref GAP_EVT_DISCONNECTED
struct gap_ble_addr bond_dev_evt; // \ref GAP_EVT_CONNECTED
struct gap_pairing_comp_evt pairing_comp_evt; // \ref GAP_EVT_PAIRING_COMP
struct gap_att_read_evt att_read_evt; // \ref GAP_EVT_ATT_READ
struct gap_att_write_evt att_write_evt; // \ref GAP_EVT_ATT_WRITE
struct gap_att_pre_write_evt att_pre_write_evt; // \ref GAP_EVT_ATT_PREPARE_WRITE
struct gap_att_exec_write_evt att_exec_write_evt; // \ref GAP_EVT_ATT_EXECUTE_WRITE
struct gap_att_handle_configure_evt att_handle_config_evt; // \ref GAP_EVT_ATT_HANDLE_CONFIGURE
struct gap_l2cap_update_rsp_evt l2cap_update_rsp_evt; // \ref GAP_EVT_L2CAP_UPDATE_RSP
struct gap_link_params conn_update_complete_evt; // \ref GAP_EVT_CONN_UPDATE_COMP
struct gap_scan_report_evt scan_report_evt; // \ref GAP_EVT_SCAN_REPORT
struct gap_scan_end_evt scan_end_evt; // \ref GAP_EVT_SCAN_END
} evt;
};
struct gap_evt_callback {
uint32_t evt_mask;
void (*p_callback)(struct gap_ble_evt *p_evt);
};
struct gap_att_report {
uint16_t primary;
uint16_t uuid;
uint16_t hdl;
uint16_t config;
uint16_t value;
};
struct gap_att_report_handle {
uint8_t cnt;
struct gap_att_report report[MAX_ATT_REPORT_HDL];
};
struct gap_wakeup_config {
uint8_t wakeup_type;
bool timer_wakeup_en;
bool gpi_wakeup_en;
bool wdt_wakeup_en;
bool rtc_wakeup_en;
bool capdet_wakeup_en;
bool ana_wakeup_en;
uint32_t gpi_wakeup_cfg;
};
struct smp_pairing_req {
uint8_t io;
uint8_t oob;
uint8_t flags:2;
uint8_t mitm:1;
uint8_t rsvd:5;
uint8_t max_enc_sz;
uint8_t init_key;
uint8_t rsp_key;
};
/* attc */
enum ATT_CMD_CODE {
ATT_ERR_RSP = 0x01,
ATT_MTU_REQ = 0x02,
ATT_MTU_RSP = 0x03,
ATT_FIND_INFO_REQ = 0x04,
ATT_FIND_INFO_RSP = 0x05,
ATT_FIND_BY_TYPE_VALUE_REQ = 0x06,
ATT_FIND_BY_TYPE_VALUE_RSP = 0x07,
ATT_READ_BY_TYPE_REQ = 0x08,
ATT_READ_BY_TYPE_RSP = 0x09,
ATT_READ_REQ = 0x0A,
ATT_READ_RSP = 0x0B,
ATT_READ_BLOB_REQ = 0x0C,
ATT_READ_BLOB_RSP = 0x0D,
ATT_READ_MULTIPLE_REQ = 0x0E,
ATT_READ_MULTIPLE_RSP = 0x0F,
ATT_READ_BY_GROUP_TYPE_REQ = 0x10,
ATT_READ_BY_GROUP_TYPE_RSP = 0x11,
ATT_WRITE_REQ = 0x12,
ATT_WRITE_RSP = 0x13,
ATT_WRITE_CMD = 0x52,
ATT_PREPARE_WRITE_REQ = 0x16,
ATT_PREPARE_WRITE_RSP = 0x17,
ATT_EXECUTE_WRITE_REQ = 0x18,
ATT_EXECUTE_WRITE_RSP = 0x19,
ATT_HANDLE_VAL_NOTIFICATION = 0x1B,
ATT_HANDLE_VAL_INDICATION = 0x1D,
ATT_HANDLE_VAL_CONFIRMATION = 0x1E,
ATT_SIGNED_WRITE_CMD = 0xD2,
};
enum ATT_ERROR_CODE {
ATT_INVALID_HANDLE = 0x01,
ATT_READ_NOT_PEMITTED = 0x02,
ATT_WRITE_NOT_PEMITTED = 0x03,
ATT_INVALID_PDU = 0x04,
ATT_INSUFFICIENT_AUTHEN = 0x05,
ATT_REQ_NOT_SUPPORTED = 0x06,
ATT_INVALID_OFFSET = 0x07,
ATT_INSUFFICIENT_AUTHOR = 0x08,
ATT_PREPARE_QUEUE_FULL = 0x09,
ATT_ATTRIBUTE_NOT_FOUND = 0x0A,
ATT_ATTRIBUTE_NOT_LONG = 0x0B,
ATT_INSUFFICIENT_ENC_KEY_SZ = 0x0C,
ATT_INVALID_ATTRIBUTE_VAL_LEN= 0x0D,
ATT_UNLIKELY_ERROR = 0x0E,
ATT_INSUFFICIENT_ENC = 0x0F,
ATT_UNSUPPORTED_GROUP_TYPE = 0x10,
ATT_INSUFFICIENT_RESOURCES = 0x11,
};
enum ATT_CHAR_PROPERTY {
ATT_CHAR_BROADCAST = 0x01,
ATT_CHAR_READ = 0x02,
ATT_CHAR_WEIRE_WO_RSP = 0x04,
ATT_CHAR_WEIRE = 0x08,
ATT_CHAR_NOTIFY = 0x10,
ATT_CHAR_INDICATE = 0x20,
ATT_CHAR_AUTH_SIGNED_WRITE = 0x40,
ATT_CHAR_EXTEND_PROPERTY = 0x80,
};
struct att_err_rsp {
uint8_t opcode; // \ref ATT_CMD_CODE
uint16_t hdl;
uint8_t err; // \ref ATT_ERROR_CODE
};
struct att_mtu_req {
uint16_t mtu;
};
struct att_mtu_rsp {
uint16_t mtu;
};
struct att_find_info_req {
uint16_t start_hdl;
uint16_t end_hdl;
};
struct att_find_info_16 {
uint16_t hdl;
uint8_t uuid[2];
};
struct att_find_info_128 {
uint16_t hdl;
uint8_t uuid[16];
};
union att_find_info_payload {
struct att_find_info_16 uuid16[5];
struct att_find_info_128 uuid128;
};
struct att_find_info_rsp {
uint8_t format;
union att_find_info_payload pair;
};
enum _GATT_FIND_INFO_UUID_TYPE_ {
GATT_FIND_INFO_UUID_16 = 0x01,
GATT_FIND_INFO_UUID_128 = 0x02,
};
struct att_find_by_type_val_req {
uint16_t start_hdl;
uint16_t end_hdl;
uint16_t att_type;
uint8_t att_val[MAX_ATT_DATA_SZ-7];
};
struct att_find_by_type_val_rsp {
uint8_t list[MAX_ATT_DATA_SZ-1];
};
struct att_read_by_type_req {
uint16_t start_hdl;
uint16_t end_hdl;
uint8_t att_type[16];
};
struct att_read_by_type_service_16 {
uint16_t hdl;
uint8_t uuid[2];
};
struct att_read_by_type_service_128 {
uint16_t hdl;
uint8_t uuid[16];
};
union att_read_by_type_service_payload {
struct att_read_by_type_service_16 uuid16[3];
struct att_read_by_type_service_128 uuid128;
};
struct att_read_by_type_service_rsp {
uint8_t length;
union att_read_by_type_service_payload pair;
};
struct att_read_by_type_16 {
uint16_t hdl;
uint8_t property;
uint16_t val_hdl;
uint8_t char_uuid[2];
};
struct att_read_by_type_128 {
uint16_t hdl;
uint8_t property;
uint16_t val_hdl;
uint8_t char_uuid[16];
};
union att_read_by_type_payload {
struct att_read_by_type_16 uuid16[3];
struct att_read_by_type_128 uuid128;
};
struct att_read_by_type_rsp {
uint8_t length;
union att_read_by_type_payload pair;
};
struct att_read_by_type_pair_val {
uint16_t hdl;
uint8_t val[10];
};
struct att_read_by_type_val_rsp {
uint8_t length;
struct att_read_by_type_pair_val pair[1];
};
struct att_read_by_type_chartextend_rsp {
uint8_t length;
uint16_t hdl;
uint8_t val[MAX_ATT_DATA_SZ-4];
};
struct att_read_by_type_include_rsp {
uint8_t length;
uint16_t hdl;
uint8_t buf[MAX_ATT_DATA_SZ-2];
};
struct att_read_req {
uint16_t hdl;
};
struct att_read_rsp {
uint8_t buf[MAX_ATT_DATA_SZ-1];
};
struct att_read_blob_req {
uint16_t hdl;
uint16_t offset;
};
struct att_read_blob_rsp {
uint8_t buf[MAX_ATT_DATA_SZ-1];
};
struct att_read_multiple_req {
uint16_t hdl[MAX_ATT_DATA_SZ-1];
};
struct att_read_multiple_rsp {
uint8_t val[MAX_ATT_DATA_SZ-1];
};
struct att_read_by_group_type_req {
uint16_t start_hdl;
uint16_t end_hdl;
uint8_t att_group_type[16];
};
struct att_read_by_group_type_16 {
uint16_t hdl;
uint16_t end_hdl;
uint8_t uuid[2];
};
struct att_read_by_group_type_128 {
uint16_t hdl;
uint16_t end_hdl;
uint8_t uuid[16];
};
union att_read_by_group_type_payload {
struct att_read_by_group_type_16 uuid16[3];
struct att_read_by_group_type_128 uuid128;
};
struct att_read_by_group_type_rsp {
uint8_t length;
union att_read_by_group_type_payload pair;
};
struct att_write_req {
uint16_t hdl;
uint8_t buf[MAX_ATT_DATA_SZ-3];
};
struct att_write_cmd {
uint16_t hdl;
uint8_t buf[MAX_ATT_DATA_SZ-3];
};
struct att_prepare_write_req {
uint16_t hdl;
uint16_t offset;
uint8_t buf[MAX_ATT_DATA_SZ-5];
};
struct att_prepare_write_rsp {
uint16_t hdl;
uint16_t offset;
uint8_t buf[MAX_ATT_DATA_SZ-5];
};
struct att_execute_write_req {
uint8_t flags;
};
struct att_hdl_val_notifivation {
uint16_t hdl;
uint8_t buf[MAX_ATT_DATA_SZ-3];
};
struct att_hdl_val_indication {
uint16_t hdl;
uint8_t buf[MAX_ATT_DATA_SZ-3];
};
struct attc_ble_evt {
uint8_t attc_code; // \ref ATT_CMD_CODE
uint8_t attc_sz;
union
{
struct att_err_rsp AttErrRsp;
struct att_mtu_rsp AttMtuRsp;
struct att_find_info_rsp AttFindInfoRsp;
struct att_find_by_type_val_rsp AttFindByTypeValRsp;
struct att_read_by_type_rsp AttReadByTypeRsp;
struct att_read_by_type_include_rsp AttReadByTypeIncludeRsp;
struct att_read_by_type_val_rsp AttReadByTypeValRsp;
struct att_read_by_type_service_rsp AttReadByTypeServiceRsp;
struct att_read_by_type_chartextend_rsp AttReadByTypeChartExtendRsp;
struct att_read_rsp AttReadRsp;
struct att_read_blob_rsp AttReadBlobRsp;
struct att_read_multiple_rsp AttReadMultipleRsp;
struct att_read_by_group_type_rsp AttReadByGroupTypeRsp;
struct att_hdl_val_notifivation AttHdlValNotification;
struct att_hdl_val_indication AttHdlValIndication;
} attc;
};
typedef void (*p_attc_callback)(struct attc_ble_evt *p_evt);
/* attc end*/
#define CONFIRMATION_EVT_NUM 10
#define MAX_UPDATE_ADJ_NUM 4
enum GAP_SMART_UPDATE_DIRECTION {
UPDATE_DIRECTION_UP = 0x01,
UPDATE_DIRECTION_DOWN = 0x01,
};
enum GAP_SMART_UPDATE_STATE {
UPDATE_STATE_LATENCY = 0x80,
UPDATE_STATE_TIMEROUT = 0x40,
UPDATE_STATE_ADJFINISH = 0x20,
UPDATE_STATE_WAITANCHOR = 0x10,
UPDATE_STATE_START = 0x08,
UPDATE_REQ_END = 0x04,
UPDATE_LATENCY_STATE = 0x02,
UPDATE_STATE_CHANGE = 0x01,
};
enum GAP_SMART_CONTROL_SET {
SMART_CONTROL_LATENCY = 0x80,
SMART_CONTROL_UPDATE = 0x40,
};
struct gap_smart_update_params {
uint8_t updatectrl;
uint8_t updateadj_num;
uint16_t updateitv_target;
uint16_t updatelatency;
uint16_t updatesvto;
};
struct GAP_smart_update_ctrol {
uint8_t update_state;
uint8_t update_direction;
uint8_t updateadj_cnt;
uint16_t loop_num;
uint16_t updateitv_step;
struct gap_smart_update_params update_params;
};
typedef enum {
BLE_TX_POWER_MINUS_31_DBM = 0,
BLE_TX_POWER_MINUS_25_DBM = 1,
BLE_TX_POWER_MINUS_19_DBM = 2,
BLE_TX_POWER_MINUS_13_DBM = 3,
BLE_TX_POWER_MINUS_8_DBM = 4,
BLE_TX_POWER_MINUS_3_DBM = 5,
BLE_TX_POWER_0_DBM = 6,
BLE_TX_POWER_2_DBM = 7,
BLE_TX_POWER_4_DBM = 8,
} BLE_TX_POWER;
#pragma pack()
#endif
#ifdef _BLE_LIB_C
#else
/* ble protocol */
extern uint8_t BleInit(void);
extern uint8_t DisConnect(void);
extern uint8_t SetDevAddr(struct gap_ble_addr* p_dev_addr);
extern uint8_t GetDevAddr(struct gap_ble_addr* p_dev_addr);
extern uint8_t SetLEFeature(uint8_t *p_feature);
extern uint8_t SetAdvParams(struct gap_adv_params *p_adv_params);
extern uint8_t SetAdvData(uint8_t *p_adv, uint8_t adv_sz, uint8_t *p_scan, uint8_t sacn_sz);
extern uint8_t StartAdv(void);
extern uint8_t StopAdv(void);
extern uint8_t SetScanParams(struct gap_scan_params *p_scan_params);
extern uint8_t StartScan(void);
extern uint8_t StopScan(void);
extern uint8_t SetSecParams(struct smp_pairing_req *p_sec_params);
extern uint8_t SetPasskey(uint32_t passkey);
extern uint8_t SecurityReq(uint8_t flag, uint8_t mitm);
extern uint8_t SetConnectionUpdate(struct gap_update_params *p_update_params);
extern uint8_t GetLinkParameters(struct gap_link_params* p_link);
extern uint8_t SetWinWideMinusCnt(uint8_t cnt);
extern uint8_t GAPConnectionLatencyMode(uint8_t en);
extern uint8_t SetEvtCallback(struct gap_evt_callback* p_callback);
extern uint8_t GetGATTReportHandle(struct gap_att_report_handle** p_hdl);
extern uint8_t SetGATTReadRsp(uint8_t len,uint8_t *p_data);
extern uint8_t CheckFIFOFull(void);
extern uint8_t GATTDataSend(uint8_t type, struct gap_att_report* p_report, uint8_t len, uint8_t *p_data);
extern uint8_t Rand(void);
extern void DelayUS(uint16_t dly);
extern void DelayMS(uint32_t dly);
extern uint8_t GetCompanyID(void);
extern uint8_t GetQFNType(void);
extern void RFRead(uint8_t addr, uint8_t * data);
extern void RFWrite(uint8_t addr, uint8_t data);
extern void ble_sched_execute(void);
extern bool ble_sched_finish(void);
/* system clock */
extern uint8_t LPOCalibration(void);
extern uint8_t RCOSCCalibration(void);
extern uint8_t MCUClockSwitch(uint8_t sel);
extern uint8_t ClockSwitch(uint8_t sel);
extern uint8_t GetMCUClock(uint8_t *p_sel);
extern uint8_t GetClock(uint8_t *p_sel);
/* timer */
extern uint8_t TimerStart(uint16_t type, uint32_t timecnt_100ms, bool reload, sys_timer_cb pfnCallback);
extern void TimerStop(uint16_t type);
/* sleep & power down */
extern uint8_t WakeupConfig(struct gap_wakeup_config *p_cfg);
extern uint8_t LLSleep(void);
extern uint8_t SystemSleep(void);
extern uint8_t SystemPowerDown(void);
extern uint8_t SystemReset(void);
extern uint8_t RFSleep(void);
extern uint8_t RFWakeup(void);
extern uint8_t UartEn(uint8_t en);
/* bond Manager */
extern uint8_t SetBondManagerIndex(uint8_t idx);
extern uint8_t GetBondDevice(struct gap_bond_dev *p_device);
extern uint8_t AddBondDevice(struct gap_bond_dev *p_device);
extern uint8_t DelBondDevice(void);
extern uint8_t DelAllBondDevice(void);
/* read&write flash */
extern uint8_t ReadProfileData(uint16_t addr, uint16_t len, uint8_t *p_buf);
extern uint8_t WriteProfileData(uint16_t addr, uint16_t len, uint8_t *p_buf);
extern uint8_t EraseFlashData(uint32_t addr, uint8_t sector_num);
extern uint8_t ReadFlashData(uint32_t addr, uint16_t len, uint8_t *p_buf);
extern uint8_t WriteFlashData(uint32_t addr, uint16_t len, uint8_t *p_buf);
/* fw upgrade */
extern uint8_t CodeErase(void);
extern uint8_t CodeWrite(uint32_t offset, uint32_t len, uint8_t *p_buf);
extern uint8_t CodeUpdate(uint8_t *p_desc, uint8_t *p_ver, uint32_t sz, uint16_t checksum);
/* att client */
extern uint8_t ATTCSetCallback(p_attc_callback pfn_callback);
extern uint8_t ATTCMTUReq(uint16_t mtu);
extern uint8_t ATTCFindInfoReq(uint16_t start_hdl, uint16_t end_hdl);
extern uint8_t ATTCFindByTypeValueReq(uint16_t start_hdl, uint16_t end_hdl, uint16_t type, uint8_t val_sz, uint8_t *p_val);
extern uint8_t ATTCReadByTypeReq(uint16_t start_hdl, uint16_t end_hdl, uint16_t type_sz, uint8_t *p_type);
extern uint8_t ATTCReadReq(uint16_t hdl);
extern uint8_t ATTCReadBlobReq(uint16_t hdl, uint16_t offset);
extern uint8_t ATTCReadMultipleReq(uint8_t hdl_sz, uint8_t *p_hdl);
extern uint8_t ATTCReadByGroupTypeReq(uint16_t start_hdl, uint16_t end_hdl, uint16_t type_sz, uint8_t *p_type);
extern uint8_t ATTCWriteReq(uint16_t hdl, uint16_t sz, uint8_t *p_buf);
extern uint8_t ATTCWriteCmdReq(uint16_t hdl, uint16_t sz, uint8_t *p_buf);
extern uint8_t ATTCPrepareWriteReq(uint16_t hdl, uint16_t offset, uint16_t sz, uint8_t *p_buf);
extern uint8_t ATTCExecuteWriteReq(uint8_t flags);
extern uint8_t ATTCConfirmation(void);
extern void GPADC_Manual_Calibration(uint8_t trim);
extern void BBRFWrite(uint8_t addr, uint8_t data);
extern void BBRFRead(uint8_t addr, uint8_t* data);
extern uint8_t APPtimer_enable(uint8_t id, uint32_t intv, void * p_callback);
extern uint8_t APPtimer_disable(uint8_t id);
extern void GAPBBDelayUS(uint16_t us);
extern void GAPBBDelayMS(uint32_t us);
extern uint8_t Setting4kUpdate(uint8_t *data, uint32_t checksum, uint8_t Xor);
extern uint8_t gap_s_smart_update_latency(struct gap_smart_update_params *p_smart_params);
extern bool GAPGetRFAutoSleep(void);
extern void GAPSetRFAutoSleep(bool en);
extern bool GAPGetUartEn(void);
extern void GAPUartEn(bool en);
extern uint8_t Setting4kUpdate(uint8_t *data, uint32_t checksum, uint8_t Xor);
extern void SetDevAddr_toflash(struct gap_ble_addr* p_dev);
extern uint8_t flash_peotect_key_confirm(uint32_t key,uint32_t key1);
extern uint8_t EraseCodeB(uint32_t addr, uint8_t sector_num);
extern uint8_t ReadCodeB(uint32_t addr, uint16_t len, uint8_t *p_buf);
extern uint8_t WriteCodeB(uint32_t addr, uint16_t len, uint8_t *p_buf);
extern void ble_SetTxPower(BLE_TX_POWER value);
extern uint8_t FlashDataUpdate( uint32_t sz, uint16_t checksum);
extern uint32_t flash_data_size_get(void);
extern uint8_t code_idx_get(void);
extern uint8_t flash_data_size_set(uint32_t sz);
extern uint8_t GPADC_Get_Calibration(void);
extern uint8_t Get_RSSI_Last_RX(void);
extern uint8_t APP_Read_Attribute_Encrypt(uint16_t hdl,uint8_t *enc);
extern uint8_t APP_Write_Attribute_Encrypt(uint16_t hdl,uint8_t *enc);
extern uint8_t APP_Read_Charact_Permission(uint16_t hdl,uint8_t *permission);
extern uint8_t APP_Write_Effect(void);
extern void smp_aes_encrypt(uint8_t *k, uint8_t* p, uint8_t* c);
extern void syd_set_chip_flash_all_size(uint32_t size);
extern uint8_t Xtal_trim_get(void);
extern uint8_t Xtal_trim_set(uint8_t trim);
#endif
#endif