2025-10-10 16:07:00 +08:00

1306 lines
37 KiB
C

// Copyright 2020-2021 Beken
//
// 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.
#ifndef INCLUDE_MODULES_BK_BLE_API_H_
#define INCLUDE_MODULES_BK_BLE_API_H_
#include "components/bluetooth/bk_ble_types.h"
#ifdef __cplusplus
extern"C" {
#endif
/**
* @brief ble APIs Version 1.0
* @defgroup bk_ble_api_v1 New ble api group
* @{
*/
/**
* @brief Register a gatt service
* @param
* - ble_db_cfg: service param
*
* User example:
* First we must build test_service_db
* test_service_db is a database for att, which used in ble discovery. reading writing and other operation is used on a att database.
*
*
* @code
* enum {
* TEST_IDX_SVC,
* TEST_IDX_CHAR_DECL,
* TEST_IDX_CHAR_VALUE,
* TEST_IDX_CHAR_DESC,
*
* TEST_IDX_CHAR_DATALEN_DECL,
* TEST_IDX_CHAR_DATALEN_VALUE,
*
* TEST_IDX_CHAR_INTER_DECL,
* TEST_IDX_CHAR_INTER_VALUE,
*
* TEST_IDX_NB,
* };
*
* //att records database.
*
* ble_attm_desc_t test_service_db[TEST_IDX_NB] = {
* // Service Declaration
* [TEST_IDX_SVC] = {DECL_PRIMARY_SERVICE_128, BK_BLE_PERM_SET(RD, ENABLE), 0, 0},
* // Characteristic declare
* [TEST_IDX_CHAR_DECL] = {DECL_CHARACTERISTIC_128, BK_BLE_PERM_SET(RD, ENABLE), 0, 0},
* // Characteristic Value
* [TEST_IDX_CHAR_VALUE] = {{0x34, 0x12, 0}, BK_BLE_PERM_SET(NTF, ENABLE), BK_BLE_PERM_SET(RI, ENABLE) | BK_BLE_PERM_SET(UUID_LEN, UUID_16), 128},
* //Client Characteristic Configuration Descriptor
* [TEST_IDX_CHAR_DESC] = {DESC_CLIENT_CHAR_CFG_128, BK_BLE_PERM_SET(RD, ENABLE) | BK_BLE_PERM_SET(WRITE_REQ, ENABLE), 0, 0},
* };
* @endcode
* TEST_IDX_SVC is nessecery, is declare a primary att service. The macro define is:
*
* @code
* #define DECL_PRIMARY_SERVICE_128 {0x00,0x28,0}
* @endcode
*
* which is an UUID say it is a "primary service"
* BK_BLE_PERM_SET(RD, ENABLE) means it can be read, and must be read, so it can be discove by peer master.
*
* TEST_IDX_CHAR_DECL declare a characteristic as a element in service, it must be BK_BLE_PERM_SET(RD, ENABLE)
*
* @code
* #define DECL_CHARACTERISTIC_128 {0x03,0x28,0}
* @endcode
* show it's a "characteristic"
*
* BK_BLE_PERM_SET(RD, ENABLE) means it can be read, and must be read, so it can be discove by peer master.
*
*
* TEST_IDX_CHAR_VALUE is the real value of TEST_IDX_CHAR_DECL,
* {0x34, 0x12, 0} means it's type is 0x1234, you can determine by you self
* BK_BLE_PERM_SET(NTF, ENABLE) means it cant notify peer, such as value change. For exzample, BLE mouse report pos by "notify" peer.
* BK_BLE_PERM_SET(RI, ENABLE) means if peer read this att record, it will enable notification.
* BK_BLE_PERM_SET(UUID_LEN, UUID_16) means the first elem's max len of TEST_IDX_CHAR_VALUE.
*
* TEST_IDX_CHAR_DESC is a Client Characteristic Configuration Descriptor for TEST_IDX_CHAR_VALUE, it used by peer master as know as a client.
* As common usage, it config TEST_IDX_CHAR_VALUE indication or notification. Peer can write this att handle to triggle it.
* Must be BK_BLE_PERM_SET(RD, ENABLE) | BK_BLE_PERM_SET(WRITE_REQ, ENABLE)
*
* Now, you have a basic database for peer, in this case, peer write TEST_IDX_CHAR_DESC or read TEST_IDX_CHAR_VALUE to enable notification, and then we notify peer by TEST_IDX_CHAR_VALUE
*
*
* Secondlly, we build ble_db_cfg
* @code
* struct bk_ble_db_cfg ble_db_cfg;
*
* ble_db_cfg.att_db = (ble_attm_desc_t *)test_service_db;
* ble_db_cfg.att_db_nb = TEST_IDX_NB;
* ble_db_cfg.prf_task_id = g_test_prf_task_id;
* ble_db_cfg.start_hdl = 0;
* ble_db_cfg.svc_perm = BK_BLE_PERM_SET(SVC_UUID_LEN, UUID_16);
* @endcode
* prf_task_id is app handle. If you have multi att service, used prf_task_id to distinguish it.
* svc_perm show TEST_IDX_SVC UUID type's len.
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: other errors.
*/
ble_err_t bk_ble_create_db (struct bk_ble_db_cfg* ble_db_cfg);
/**
* @brief Register ble event notification callback
*
* @param
* - func: event callback
*
* @attention 1. you must regist it, otherwise you cant get any event !
* @attention 2. you must regist it before bk_ble_create_db, otherwise you cant get BLE_5_CREATE_DB event
*
* User example:
* @code
* void ble_at_notice_cb(ble_notice_t notice, void *param)
{
switch (notice) {
case BLE_5_WRITE_EVENT: {
if (w_req->prf_id == g_test_prf_task_id)
{
switch(w_req->att_idx)
{
case TEST_IDX_CHAR_DECL:
break;
case TEST_IDX_CHAR_VALUE:
break;
case TEST_IDX_CHAR_DESC:
//when peer enable notification, we create time and notify peer, such as
//write_buffer = (uint8_t *)os_malloc(s_test_data_len);
//bk_ble_send_noti_value(s_test_data_len, write_buffer, g_test_prf_task_id, TEST_IDX_CHAR_VALUE);
break;
default:
break;
}
}
break;
}
case BLE_5_CREATE_DB:
//bk_ble_create_db success here
break;
}
}
bk_ble_set_notice_cb(ble_at_notice_cb);
* @endcode
* @return
* - void
*/
void bk_ble_set_notice_cb(ble_notice_cb_t func);
/**
* @brief Get device name
*
* @param
* - name: store the device name
* - buf_len: the length of buf to store the device name
*
* @return
* - length: the length of device name
*/
uint8_t bk_ble_appm_get_dev_name(uint8_t* name, uint32_t buf_len);
/**
* @brief Set device name
*
* @param
* - len: the length of device name
* - name: the device name to be set
*
* @return
* - length: the length of device name
*/
uint8_t bk_ble_appm_set_dev_name(uint8_t len, uint8_t* name);
/**
* @brief Create a ble advertising activity
*
* @param
* - actv_idx: the index of activity
* - adv_param: the advertising parameter
* - callback: register a callback for this action, ble_cmd_t: BLE_CREATE_ADV
* @attention 1.you must wait callback status, 0 mean success.
*
* User example:
* @code
* ble_adv_param_t adv_param;
*
* adv_param.own_addr_type = 0;//BLE_STATIC_ADDR
* adv_param.adv_type = 0; //ADV_IND
* adv_param.chnl_map = 7;
* adv_param.adv_prop = 3;
* adv_param.adv_intv_min = 0x120; //min
* adv_param.adv_intv_max = 0x160; //max
* adv_param.prim_phy = 1;// 1M
* adv_param.second_phy = 1;// 1M
* actv_idx = bk_ble_get_idle_actv_idx_handle();
* if (actv_idx != UNKNOW_ACT_IDX) {
* bk_ble_create_advertising(actv_idx, &adv_param, ble_at_cmd_cb);
* }
* @endcode
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: other errors.
*/
ble_err_t bk_ble_create_advertising(uint8_t actv_idx, ble_adv_param_t *adv_param, ble_cmd_cb_t callback);
/**
* @brief Start a ble advertising
*
* @param
* - actv_idx: the index of activity
* - duration: Advertising duration (in unit of 10ms). 0 means that advertising continues
* - callback: register a callback for this action, ble_cmd_t: BLE_START_ADV
*
* @attention 1.you must wait callback status, 0 mean success.
* @attention 2.must used after bk_ble_create_advertising
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: other errors.
*/
ble_err_t bk_ble_start_advertising(uint8_t actv_idx, uint16 duration, ble_cmd_cb_t callback);
/**
* @brief Stop the advertising that has been started
*
* @param
* - actv_idx: the index of activity
* - callback: register a callback for this action, ble_cmd_t: BLE_STOP_ADV
* @attention 1.you must wait callback status, 0 mean success.
* @attention 2.must used after bk_ble_start_advertising
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: other errors.
*/
ble_err_t bk_ble_stop_advertising(uint8_t actv_idx, ble_cmd_cb_t callback);
/**
* @brief Delete the advertising that has been created
*
* @param
* - actv_idx: the index of activity
* - callback: register a callback for this action, ble_cmd_t: BLE_DELETE_ADV
* @attention 1.you must wait callback status, 0 mean success.
* @attention 2.must used after bk_ble_create_advertising
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: other errors.
*/
ble_err_t bk_ble_delete_advertising(uint8_t actv_idx, ble_cmd_cb_t callback);
/**
* @brief Set the advertising data
*
* @param
* - actv_idx: the index of activity
* - adv_buff: advertising data
* - adv_len: the length of advertising data
* - callback: register a callback for this action, ble_cmd_t: BLE_SET_ADV_DATA
* @attention 1.you must wait callback status, 0 mean success.
* @attention 2.must used after bk_ble_create_advertising
*
*
* User example:
* @code
* const uint8_t adv_data[] = {0x02, 0x01, 0x06, 0x0A, 0x09, 0x37 0x32, 0x33, 0x31, 0x4e, 0x5f, 0x42, 0x4c, 0x45};
* bk_ble_set_adv_data(actv_idx, adv_data, sizeof(adv_data), ble_at_cmd_cb);
* @endcode
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: other errors.
*/
ble_err_t bk_ble_set_adv_data(uint8_t actv_idx, uint8_t* adv_buff, uint8_t adv_len, ble_cmd_cb_t callback);
/**
* @brief Set the scan response data
*
* @param
* - actv_idx: the index of activity
* - scan_buff: scan response data
* - scan_len: the length of scan response data
* - callback: register a callback for this action, ble_cmd_t: BLE_SET_RSP_DATA
* @attention 1.you must wait callback status, 0 mean success.
* @attention 2.scan rsp data similaly to adv data
* @attention 3.must used after bk_ble_create_advertising
*
*
* User example:
* @code
* const uint8_t scan_data[] = {0x02, 0x01, 0x06, 0x0A, 0x09, 0x37 0x32, 0x33, 0x31, 0x4e, 0x5f, 0x42, 0x4c, 0x45};
* bk_ble_set_scan_rsp_data(actv_idx, scan_data, sizeof(scan_data), ble_at_cmd_cb);
* @endcode
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: other errors.
*/
ble_err_t bk_ble_set_scan_rsp_data(uint8_t actv_idx, uint8_t* scan_buff, uint8_t scan_len, ble_cmd_cb_t callback);
/**
* @brief Set the periodic advertising data
*
* @param
* - actv_idx: the index of activity
* - per_adv_buff: periodic advertising data
* - per_adv_len: the length of periodic advertising data
* - callback: register a callback for this action, ble_cmd_t: BLE_SET_ADV_DATA????
* @attention 1.you must wait callback status, 0 mean success.
* @attention 2.must used after bk_ble_create_advertising
*
* User example:
* @code
* const uint8_t adv_data[] = {0x02, 0x01, 0x06, 0x0A, 0x09, 0x37 0x32, 0x33, 0x31, 0x4e, 0x5f, 0x42, 0x4c, 0x45};
* bk_ble_set_per_adv_data(actv_idx, adv_data, sizeof(adv_data), ble_at_cmd_cb);
* @endcode
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: other errors.
*/
ble_err_t bk_ble_set_per_adv_data(uint8_t actv_idx, uint8_t* per_adv_buff, uint8_t per_adv_len, ble_cmd_cb_t callback);
/**
* @brief Set the adv random addr
*
* @param
* - actv_idx: the index of activity
* - addr: random address
* - callback: register a callback for this action, ble_cmd_t: BLE_SET_ADV_RANDOM_ADDR
* @attention 1.you must wait callback status, 0 mean success.
* @attention 2.must used after bk_ble_create_advertising
*
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: other errors.
*/
ble_err_t bk_ble_set_adv_random_addr(uint8_t actv_idx, uint8_t* addr, ble_cmd_cb_t callback);
/**
* @brief Read the phy of connection device
*
* @param
* - conn_idx: the index of connection device
* @attention 1.must used after after connected
*
* User example:
* @code
* bk_ble_read_phy(conn_idx);
* @endcode
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: other errors.
*/
ble_err_t bk_ble_read_phy(uint8_t conn_idx);
/**
* @brief Set the phy of connection device
*
* @param
* - conn_idx: the index of connection device
* - phy_info: phy parameters
* @attention 1.must used after after connected
*
* User example:
* @code
* ble_set_phy_t * phy = {0x04, 0x01, 0x01};
* //set tx phy to s2 coded phy, and set rx phy to 1M phy
* bk_ble_set_phy(1, phy);
* @endcode
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: other errors.
*/
ble_err_t bk_ble_set_phy(uint8_t conn_idx, ble_set_phy_t * phy_info);
/**
* @brief Update connection parameters
*
* @param
* - conn_idx: the index of connection
* - conn_param: connection parameters
* @attention 1.must used after connected
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: other errors.
*/
ble_err_t bk_ble_update_param(uint8_t conn_idx, ble_conn_param_t *conn_param);
/**
* @brief Disconnect a ble connection
*
* @param
* - conn_idx: the index of connection
* @attention 1.must used after connected
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: other errors.
*/
ble_err_t bk_ble_disconnect(uint8_t conn_idx);
/**
* @brief Exchange MTU
*
* @param
* - conn_idx: the index of connection
* @attention 1.must used after connected
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: other errors.
*/
ble_err_t bk_ble_gatt_mtu_change(uint8_t conn_idx);
/**
* @brief Set maximal Exchange MTU
*
* @param
* - max_mtu: the value to set
* @attention 1.must used before connected
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: other errors.
*/
ble_err_t bk_ble_set_max_mtu(uint16_t max_mtu);
/**
* @brief Create a ble scan activity
*
* @param
* - actv_idx: the index of activity
* - scan_param: the scan parameter
* - callback: register a callback for this action, ble_cmd_t: BLE_CREATE_SCAN
*
* @attention 1.you must wait callback status, 0 mean success.
*
* User exzample:
* @code
ble_scan_param_t scan_param;
scan_param.own_addr_type = 0;//BLE_STATIC_ADDR
scan_param.scan_phy = 5;
scan_param.scan_intv = 0x64; //interval
scan_param.scan_wd = 0x1e; //windows
bk_ble_create_scaning(actv_idx, &, ble_at_cmd);
*
* @endcode
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: other errors.
*/
ble_err_t bk_ble_create_scaning(uint8_t actv_idx, ble_scan_param_t *scan_param, ble_cmd_cb_t callback);
/**
* @brief Start a ble scan
*
* @param
* - actv_idx: the index of activity
* - callback: register a callback for this action, ble_cmd_t: BLE_START_SCAN
*
* @attention 1.you must wait callback status, 0 mean success.
* @attention 2.must used after bk_ble_create_scaning
* @attention 3.adv will report in ble_notice_cb_t as BLE_5_REPORT_ADV
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: other errors.
*/
ble_err_t bk_ble_start_scaning(uint8_t actv_idx, ble_cmd_cb_t callback);
ble_err_t bk_ble_start_scaning_ex(uint8_t actv_idx, uint8_t filt_duplicate, uint16_t duration, uint16_t period, ble_cmd_cb_t callback);
/**
* @brief Stop the scan that has been started
*
* @param
* - actv_idx: the index of activity
* - callback: register a callback for this action, ble_cmd_t: BLE_STOP_SCAN
*
* @attention 1.you must wait callback status, 0 mean success.
* @attention 2.must used after bk_ble_start_scaning
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: other errors.
*/
ble_err_t bk_ble_stop_scaning(uint8_t actv_idx, ble_cmd_cb_t callback);
/**
* @brief Delete the scan that has been created
*
* @param
* - actv_idx: the index of activity
* - callback: register a callback for this action, ble_cmd_t: BLE_DELETE_SCAN
*
* @attention 1.you must wait callback status, 0 mean success.
* @attention 2.must used after bk_ble_create_scaning
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: other errors.
*/
ble_err_t bk_ble_delete_scaning(uint8_t actv_idx, ble_cmd_cb_t callback);
/**
* @brief Create a activity for initiating a connection
*
* @param
* - con_idx: the index of connection
* - conn_param: the connection parameter
* - callback: register a callback for this action, ble_cmd_t: BLE_INIT_CREATE
*
* @attention 1.you must wait callback status, 0 mean success.
*
* User example:
* @code
*
* ble_conn_param_t conn_param;
conn_param.intv_min = 0x40; //interval
conn_param.intv_max = 0x40; //interval
conn_param.con_latency = 0;
conn_param.sup_to = 0x200;//supervision timeout
conn_param.init_phys = 1;// 1M
bk_ble_create_init(con_idx, &conn_param, ble_at_cmd);
* @endcode
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: other errors.
*/
ble_err_t bk_ble_create_init(uint8_t con_idx, ble_conn_param_t *conn_param, ble_cmd_cb_t callback);
/**
* @brief Initiate a connection
*
* @param
* - con_idx: the index of connection
* - callback: register a callback for this action, ble_cmd_t: BLE_INIT_START_CONN
*
* @attention 1.you must wait callback status, 0 mean success.
* @attention 2.must used after bk_ble_create_init
* @attention 3.when connect result, will recv BLE_5_INIT_CONNECT_EVENT in ble_notice_cb_t
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: other errors.
*/
ble_err_t bk_ble_init_start_conn(uint8_t con_idx, ble_cmd_cb_t callback);
/**
* @brief Stop a connection
*
* @param
* - con_idx: the index of connection
* - callback: register a callback for this action, ble_cmd_t: BLE_INIT_STOP_CONN
*
* @attention 1.you must wait callback status, 0 mean success.
* @attention 2.must used after bk_ble_init_start_conn
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: other errors.
*/
ble_err_t bk_ble_init_stop_conn(uint8_t con_idx,ble_cmd_cb_t callback);//todo: upper feature
/**
* @brief Set the address of the device to be connected
*
* @param
* - connidx: the index of connection
* - bdaddr: the address of the device to be connected
* - addr_type: the address type of the device to be connected, 0: public 1: random
*
*
* @attention 1.you must wait callback status, 0 mean success.
* @attention 2.must used after bk_ble_create_init
* @attention 3.addr_type must right, if wrong, cant connect
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: other errors.
*/
ble_err_t bk_ble_init_set_connect_dev_addr(uint8_t connidx, bd_addr_t *bdaddr, uint8_t addr_type);
ble_err_t bk_ble_create_periodic_sync(uint8_t actv_idx, ble_cmd_cb_t callback);
ble_err_t bk_ble_start_periodic_sync(uint8_t actv_idx, ble_periodic_param_t *param, ble_cmd_cb_t callback);
ble_err_t bk_ble_stop_periodic_sync(uint8_t actv_idx, ble_cmd_cb_t callback);
ble_err_t bk_ble_delete_periodic_sync(uint8_t actv_idx, ble_cmd_cb_t callback);
/**
* @brief Get an idle activity
*
* @return
* - xx: the idle activity's index
*/
uint8_t bk_ble_get_idle_actv_idx_handle(void);
/**
* @brief Get the maximum count of activities
*
* @return
* - xx: the maximum count of activities
*/
uint8_t bk_ble_get_max_actv_idx_count(void);
/**
* @brief Get the maximum count of supported connections
*
* @return
* - xx: the maximum count of supported connections
*/
uint8_t bk_ble_get_max_conn_idx_count(void);
/**
* @brief Get an idle connection activity
*
* @return
* - xx: the idle connection activity's index
*/
uint8_t bk_ble_get_idle_conn_idx_handle(void);
/**
* @brief Find the specific connection activity by address
*
* @param
* - connt_addr: the address of the connected device
*
* @return
* - xx: the index of the connection activity meeting the address
*/
uint8_t bk_ble_find_conn_idx_from_addr(bd_addr_t *connt_addr);
/**
* @brief Get the connection state of the specific device
*
* @param
* - connt_addr: the device's address
*
* @return
* - 1: this device is connected
* - 0: this device is disconnected
*/
uint8_t bk_ble_get_connect_state(bd_addr_t * connt_addr);
/**
* @brief get ble mac addr,this api is deprecated,please use bk_bluetooth_get_address
*
* @attention 1. return mac is 6 bytes.
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: other errors.
*/
ble_err_t bk_ble_get_mac(uint8_t *mac);
/**
* @brief As slaver, send a notification of an attribute's value
*
* @param
* - con_idx: the index of connection
* - len: the length of attribute's value
* - buf: attribute's value
* - prf_id: The id of the profile
* - att_idx: The index of the attribute
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: other errors.
*/
ble_err_t bk_ble_send_noti_value(uint8_t con_idx,uint32_t len, uint8_t *buf, uint16_t prf_id, uint16_t att_idx);
/**
* @brief As slaver, send an indication of an attribute's value
*
* @param
* - con_idx: the index of connection
* - len: the length of attribute's value
* - buf: attribute's value
* - prf_id: The id of the profile
* - att_idx: The index of the attribute
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: other errors.
*/
ble_err_t bk_ble_send_ind_value(uint8_t con_idx,uint32_t len, uint8_t *buf, uint16_t prf_id, uint16_t att_idx);
/**
* @brief reg hci recv callback
*
* @param
* - evt_cb: evt callback function
* - acl_cb: acl callback function
*
* @attention 1. you must call this after recv BLE_5_STACK_OK evt !
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: other errors.
*/
ble_err_t bk_ble_reg_hci_recv_callback(ble_hci_to_host_cb evt_cb, ble_hci_to_host_cb acl_cb);
/**
* @brief send hci to controller.
*
*
* @param
* - type: see \ref BK_BLE_HCI_TYPE.
* - buf: payload
* - len: buf's len
*
* @attention 1. you must call this after bk_ble_reg_hci_recv_callback !
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
**/
ble_err_t bk_ble_hci_to_controller(uint8_t type, uint8_t *buf, uint16_t len);
/**
* @brief send hci cmd to controller.
*
*
* @param
* - buf: payload
* - len: buf's len
*
* @attention 1. you must call this after bk_ble_reg_hci_recv_callback !
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
**/
ble_err_t bk_ble_hci_cmd_to_controller(uint8_t *buf, uint16_t len);
/**
* @brief send hci acl to controller.
*
*
* @param
* - buf: payload
* - len: buf's len
*
* @attention 1. you must call this after bk_ble_reg_hci_recv_callback !
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
**/
ble_err_t bk_ble_hci_acl_to_controller(uint8_t *buf, uint16_t len);
/*
* @brief get if stack support central and link count
*
* @param
* - count: if return true, show how many central link can be support, otherwise not used.
*
* @return
* - 1: support
* - 0: not support.
*/
uint8_t bk_ble_if_support_central(uint8_t *count);
/*
* @brief get controller stack type
*
* @return
* enum BK_BLE_CONTROLLER_STACK_TYPE
*/
BK_BLE_CONTROLLER_STACK_TYPE bk_ble_get_controller_stack_type(void);
/*
* @brief get host stack type
*
* @return
* enum BK_BLE_HOST_STACK_TYPE
*/
BK_BLE_HOST_STACK_TYPE bk_ble_get_host_stack_type(void);
/*
* @brief get ble environment state,this api is deprecated,please use bk_bluetooth_get_status.
*
* @return
* - 1: ready
* - 0: not ready
*/
uint8_t bk_ble_get_env_state(void);
/*
* @brief set ble task stack size, default is 3072
*
* @param
* - size: stack size
*
*
* @attention 1.you must call it before app_ble_init !!!!
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - BK_ERR_BLE_FAIL: fail, because you call this func before app_ble_init !!!
*/
ble_err_t bk_ble_set_task_stack_size(uint16_t size);
/*
* @brief register a callback that will report the action of notification/indication/read/write
*
* @param
* - cb: callback
*
* @return
* - void
*/
void bk_ble_register_app_sdp_charac_callback(app_sdp_charac_callback cb);
/*
* @brief register a callback that will report the result of gatt operation
*
* @param
* - cb: callback
*
* @return
* - void
*/
void bk_ble_register_app_sdp_common_callback(app_sdp_comm_callback cb);
/**
* @brief As master, enable notification or indication
*
* @param
* - con_idx: the index of connection
* - ccc_handle: the handle of Client Characteristic Configuration descriptor
* - ccc_value: descriptor value, 0x01 means notification ,0x02 means indication
*
* @return
* - 0: succeed
* - others: errors.
*/
uint8_t bk_ble_gatt_write_ccc(uint8_t con_idx,uint16_t ccc_handle,uint16_t ccc_value);
/**
* @brief As master, write attribute value
*
* @param
* - con_idx: the index of connection
* - att_handle: the handle of attribute value
* - data: value data
* - len: the length of attribute value
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: fail
*/
ble_err_t bk_ble_gatt_write_value(uint8_t con_idx, uint16_t att_handle, uint16_t len, uint8_t *data);
/**
* @brief As slaver, send response value
*
* @param
* - con_idx: the idx of app connections
* - len: the length of attribute's value
* - buf: attribute's value
* - prf_id: The id of the profile
* - att_idx: The index of the attribute
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: fail
*/
ble_err_t bk_ble_read_response_value(uint8_t con_idx, uint32_t len, uint8_t *buf, uint16_t prf_id, uint16_t att_idx);
/**
* @brief As master, configure attribute value
*
* @param
* - con_idx: the index of connection
* - mode: authentication features
* - iocap: IO Capability Values
* - sec_req: Security Defines
* - oob: OOB Data Present Flag Values
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: fail
*/
ble_err_t bk_ble_sec_send_auth_mode(uint8_t con_idx, uint8_t mode, uint8_t iocap, uint8_t sec_req, uint8_t oob);
/**
* @brief As master, configure auth mode param
*
* @param
* - con_idx: the index of connection
* - mode: authentication features
* - iocap: IO Capability Values
* - sec_req: Security Defines
* - oob: OOB Data Present Flag Values
* - initiator_key_distr: init key distr, see gap_key_distr
* - responder_key_distr: resp key distr, see gap_key_distr
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: fail
*/
ble_err_t bk_ble_sec_send_auth_mode_ext(uint8_t con_idx, uint8_t mode, uint8_t iocap, uint8_t sec_req, uint8_t oob, uint8_t initiator_key_distr, uint8_t responder_key_distr);
/**
* @brief ble init function,this api is deprecated,please use bk_bluetooth_init.
*
* @param
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: fail
*/
ble_err_t bk_ble_init(void);
/**
* @brief ble deinit function,this api is deprecated,please use bk_bluetooth_deinit.
*
* @param
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: fail
*/
ble_err_t bk_ble_deinit(void);
/**
* @brief Unregister a gatt service
* @param
* - ble_db_cfg: service param
*
* @attention 1.you must set the uuid of service and the len of uuid.
*
* User example:
* @code
* struct bk_ble_db_cfg ble_db_cfg;
* uint16 service_uuid = 0x1800;
*
* os_memcpy(&(ble_db_cfg.uuid[0]), &service_uuid, 2);
* ble_db_cfg.svc_perm = BK_BLE_PERM_SET(SVC_UUID_LEN, UUID_16);
* @endcode
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: other errors.
*/
ble_err_t bk_ble_delete_service(struct bk_ble_db_cfg* ble_db_cfg);
/**
* @brief As master, read attribute value, the result is reported in the callback registered through bk_ble_register_app_sdp_charac_callback
*
* @param
* - con_idx: the index of connection
* - att_handle: the handle of attribute value
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: fail
*/
ble_err_t bk_ble_att_read(uint8_t con_idx, uint16_t att_handle);
/**
* @brief start authentication the link
*
* @param
* - con_idx: the index of connection
* - auth: authentication features(see enum \ref gap_auth)
* - iocap: IO Capability Values(see enum \ref bk_ble_gap_io_cap)
* - sec_req: Security Defines(see enum \ref gap_sec_req)
* - oob: OOB Data Present Flag Values(see enum \ref gap_oob)
*
* @attention if the link has not been bonded, it will trigger pairing, otherwise it will trigger the link encryption.
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: fail
*/
ble_err_t bk_ble_create_bond(uint8_t con_idx, uint8_t auth, uint8_t iocap, uint8_t sec_req, uint8_t oob);
/**
* @brief create bond
*
* @param
* - con_idx: the index of connection
* - auth: authentication features(see enum \ref gap_auth)
* - iocap: IO Capability Values(see enum \ref bk_ble_gap_io_cap)
* - sec_req: Security Defines(see enum \ref gap_sec_req)
* - oob: OOB Data Present Flag Values(see enum \ref gap_oob)
* - initiator_key_distr: init key distr, see gap_key_distr
* - responder_key_distr: resp key distr, see gap_key_distr
*
* @attention if the link has not been bonded, it will trigger pairing, otherwise it will trigger the link encryption.
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: fail
*/
ble_err_t bk_ble_create_bond_ext(uint8_t con_idx, uint8_t auth, uint8_t iocap, uint8_t sec_req, uint8_t oob, uint8_t initiator_key_distr, uint8_t responder_key_distr);
/**
* @brief send passkey when pairing
*
* @param
* - con_idx: the index of connection
* - accept: accept pair
* - passkey: the num that peer need to input or local need to input
*
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: fail
*/
ble_err_t bk_ble_passkey_send(uint8_t con_idx, uint8_t accept, uint32_t passkey);
/**
* @brief send number compare accept when pairing
*
* @param
* - con_idx: the index of connection
* - accept: accept pair
*
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: fail
*/
ble_err_t bk_ble_number_compare_send(uint8_t con_idx, uint8_t accept);
/**
* @brief Read the rssi of connection device. The result will report in callback registered through bk_ble_set_notice_cb with evt BLE_5_READ_RSSI_CMPL_EVENT, and param is ble_read_rssi_rsp_t *
*
* @param
* - conn_idx: the index of connection device
* @attention 1.must used after after connected
*
* User example:
* @code
* bk_ble_read_rssi(conn_idx);
* @endcode
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: other errors.
*/
ble_err_t bk_ble_read_rssi(uint8_t conn_idx);
/**
* @brief set local gap appearance
*
*
* @param[in] appearance - External appearance value, these values are defined by the Bluetooth SIG, please refer to
* https://specificationrefs.bluetooth.com/assigned-values/Appearance%20Values.pdf
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: other errors.
*/
ble_err_t bk_ble_config_local_appearance(uint16_t appearance);
/**
* @brief Discover peer primary service. The result is report in the callback registered through bk_ble_register_app_sdp_common_callback, and evt is MST_TYPE_DISCOVER_PRI_SERVICE_RSP.
* When completed, callback will report MST_TYPE_DISCOVER_COMPLETED with ble_descover_complete_inf and MST_TYPE_DISCOVER_PRI_SERVICE_RSP.
*
*
* @param
* - sh: att start handle
* - eh: att end handle
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: fail
*/
ble_err_t bk_ble_discover_primary_service(uint8_t conn_id, uint16_t sh, uint16_t eh);
/**
* @brief Discover peer primary service. The result is report in the callback registered through bk_ble_register_app_sdp_common_callback, and evt is MST_TYPE_DISCOVER_PRI_SERVICE_BY_UUID_RSP.
* When completed, callback will report MST_TYPE_DISCOVER_COMPLETED with ble_descover_complete_inf and MST_TYPE_DISCOVER_PRI_SERVICE_BY_UUID_RSP.
*
*
* @param
* - sh: att start handle
* - eh: att end handle
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
*/
ble_err_t bk_ble_discover_primary_service_by_uuid(uint8_t conn_id, uint16_t sh, uint16_t eh, uint16_t uuid);
/**
* @brief Discover peer primary service. The result is report in the callback registered through bk_ble_register_app_sdp_common_callback, and evt is MST_TYPE_DISCOVER_PRI_SERVICE_BY_128_UUID_RSP.
* When completed, callback will report MST_TYPE_DISCOVER_COMPLETED with ble_descover_complete_inf and MST_TYPE_DISCOVER_PRI_SERVICE_BY_128_UUID_RSP.
* bk_ble_read_rssi(conn_idx);
* @param
* - conn_id: the index of connection
* - sh: att start handle
* - eh: att end handle
* - uuid: uuid that service need to find in 128bits
*
* @return
* - others: fail
*/
ble_err_t bk_ble_discover_primary_service_by_128uuid(uint8_t conn_id, uint16_t sh, uint16_t eh, uint8_t *uuid);
/**
* @brief Discover peer characteristic. The result is report in the callback registered through bk_ble_register_app_sdp_common_callback, and evt is MST_TYPE_DISCOVER_CHAR_RSP.
* When completed, callback will report MST_TYPE_DISCOVER_COMPLETED with ble_descover_complete_inf and MST_TYPE_DISCOVER_CHAR_RSP.
*
*
* @param
* - conn_id: the index of connection
* - sh: att start handle
* - eh: att end handle
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: fail
*/
ble_err_t bk_ble_discover_characteristic(uint8_t conn_id, uint16_t sh, uint16_t eh);
/**
* @brief Discover peer characteristic. The result is report in the callback registered through bk_ble_register_app_sdp_common_callback, and evt is MST_TYPE_DISCOVER_CHAR_BY_UUID_RSP.
* When completed, callback will report MST_TYPE_DISCOVER_COMPLETED with ble_descover_complete_inf and MST_TYPE_DISCOVER_CHAR_BY_UUID_RSP.
*
*
* @param
* - conn_id: the index of connection
* - sh: att start handle
* - eh: att end handle
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: fail
*/
ble_err_t bk_ble_discover_characteristic_by_uuid(uint8_t conn_id, uint16_t sh, uint16_t eh, uint16_t uuid);
/**
* @brief Discover peer characteristic. The result is report in the callback registered through bk_ble_register_app_sdp_common_callback, and evt is MST_TYPE_DISCOVER_CHAR_BY_128_UUID_RSP.
* When completed, callback will report MST_TYPE_DISCOVER_COMPLETED with ble_descover_complete_inf and MST_TYPE_DISCOVER_CHAR_BY_128_UUID_RSP.
*
* @param
* - conn_id: the index of connection
* - sh: att start handle
* - eh: att end handle
*
* @return
* - others: fail
*/
ble_err_t bk_ble_discover_characteristic_by_128uuid(uint8_t conn_id, uint16_t sh, uint16_t eh, uint8_t *uuid);
/**
* @brief Discover peer characteristic descriptor. The result is report in the callback registered through bk_ble_register_app_sdp_common_callback, and evt is MST_TYPE_DISCOVER_CHAR_DESC.
* When completed, callback will report MST_TYPE_DISCOVER_COMPLETED with ble_descover_complete_inf and MST_TYPE_DISCOVER_CHAR_DESC.
*
*
* @param
* - conn_id: the index of connection
* - sh: att start handle
* - eh: att end handle
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: fail
*/
ble_err_t bk_ble_discover_characteristic_descriptor(uint8_t conn_id, uint16_t sh, uint16_t eh);
/**
* @brief As master, read attribute value, the result is reported in the callback registered through bk_ble_register_app_sdp_charac_callback
*
* @param
* - con_idx: the index of connection
* - att_handle: the handle of attribute value
* - offset: the offset of attribute value
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: fail
*/
ble_err_t bk_ble_gattc_read(uint8_t con_idx, uint16_t att_handle, uint16_t offset);
/**
* @brief As master, read attribute value, the result is reported in the callback registered through bk_ble_register_app_sdp_charac_callback
*
* @param
* - con_idx: the index of connection
* - sh: the start handle of attribute
* - eh: the end handle of attribute
* - uuid: uuid
* - uuid_len: uuid len, may be 2 or 16
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: fail
*/
ble_err_t bk_ble_gattc_read_by_uuid(uint8_t conn_id, uint16_t sh, uint16_t eh, uint8_t *uuid, uint8_t uuid_len);
/**
* @brief As master, write attribute value
*
* @param
* - con_idx: the index of connection
* - att_handle: the handle of attribute value
* - data: value data
* - len: the length of attribute value
* - is_write_cmd: when true, will trigger write cmd, otherwise write req.
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: fail
*/
ble_err_t bk_ble_gattc_write(uint8_t con_idx, uint16_t att_handle, uint8_t *data, uint16_t len, uint8_t is_write_cmd);
/**
* @brief clear the white list.
*
* @param
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: fail
*/
ble_err_t bk_ble_clear_white_list(void);
/**
* @brief Add a device to the while list.
*
*
* @param
* - addr: the address of the device.
* - addr_type: the type of the address, 0 is public address, 1 is random address.
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: fail
*/
ble_err_t bk_ble_add_devices_to_while_list(bd_addr_t *addr, uint8_t addr_type);
/**
* @brief Remove a device from the while list.
*
*
* @param
* - addr: the address of the device.
* - addr_type: the type of the address, 0 is public address, 1 is random address.
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: fail
*/
ble_err_t bk_ble_remove_devices_from_while_list(bd_addr_t *addr, uint8_t addr_type);
/**
* @brief Set tx power.
*
*
* @param
* - pwr_gain: tx power gain
*
* @return
* - BK_ERR_BLE_SUCCESS: succeed
* - others: fail
*/
ble_err_t bk_ble_tx_power_set(float pwr_gain);
/*
* @}
*/
#ifdef __cplusplus
}
#endif
//#endif
#endif