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

376 lines
10 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.
#pragma once
#include "bk_dm_ble_types.h"
#ifdef __cplusplus
extern"C" {
#endif
/**
* @brief dm_ble APIs Version 1.0
* @defgroup bk_dm_ble_api_v1 New dm ble api group
* @{
*/
/**
* @brief Register dm_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
* @endcode
* @return
* - void
*/
void bk_ble_set_event_callback(ble_event_cb_t func);
/**
@brief Set adv param
@param param: adv param see @ref ble_adv_parameter_t
@param callback: register a callback for this action, ble_cmd_t: BLE_CREATE_ADV
@attention 1.you must wait callback status, 0 mean success.
@return
- BK_ERR_BLE_SUCCESS: succeed
- others: other errors.
*/
ble_err_t bk_ble_set_advertising_params(
ble_adv_parameter_t *param,
ble_cmd_cb_t callback);
/**
@brief Set adv data
@param adv_len: adv data len
@param adv_buff: adv data
@param callback: register a callback for this action, ble_cmd_t: BLE_SET_ADV_DATA
@attention 1.you must wait callback status, 0 mean success.
@return
- BK_ERR_BLE_SUCCESS: succeed
- others: other errors.
*/
ble_err_t bk_ble_set_advertising_data(
uint8_t adv_len,
uint8_t *adv_buff,
ble_cmd_cb_t callback);
/**
@brief Set adv scan response data.
@param scan_response_data_length: data len
@param scan_response_data: data
@param callback: register a callback for this action, ble_cmd_t: BLE_SET_RSP_DATA
@attention 1.you must wait callback status, 0 mean success.
@return
- BK_ERR_BLE_SUCCESS: succeed
- others: other errors.
*/
ble_err_t bk_ble_set_scan_response_data(
uint8_t scan_response_data_length,
uint8_t *scan_response_data,
ble_cmd_cb_t callback);
/**
@brief Set enable/disable adv
@param enable: enable or disable
@param callback: register a callback for this action, ble_cmd_t: BLE_START_ADV(enable) BLE_STOP_ADV(disable)
@attention 1.you must wait callback status, 0 mean success.
@return
- BK_ERR_BLE_SUCCESS: succeed
- others: other errors.
*/
ble_err_t bk_ble_set_advertising_enable(
uint8_t enable,
ble_cmd_cb_t callback);
/**
@brief disconnect ble connection
@param addr: peer addr
@param callback: register a callback for this action, ble_cmd_t: BLE_CONN_DIS_CONN
@attention 1.you must wait callback status, 0 mean success.
@return
- BK_ERR_BLE_SUCCESS: succeed
- others: other errors.
*/
ble_err_t bk_ble_disconnect_connection(bd_addr_t *addr, ble_cmd_cb_t callback);
/**
@brief add a primary service in gatt db
@param service_info: service info
@param num_attr_handles: how many attr in this service
@param[out] service_handle: out put a handle to user.
User example:
@code
GATT_DB_SERVICE_INFO service_info;
uint16_t num_attr_handles;
uint16_t service_handle;
service_info.is_primary = 1;
service_info.uuid.uuid_format = ATT_16_BIT_UUID_FORMAT;
service_info.uuid.uuid.uuid_16 = GATT_BOARDING_SERVICE_UUID;
service_info.link_req = GATT_DB_SER_SUPPORT_ANY_LINK_TYPE;
service_info.sec_req = GATT_DB_SER_NO_SECURITY_PROPERTY;
num_attr_handles = 30U;
retval = bk_ble_gatt_db_add_service
(
&service_info,
num_attr_handles,
&service_handle
);
@endcode
@attention 1.you must wait callback status, 0 mean success.
@return
- BK_ERR_BLE_SUCCESS: succeed
- others: other errors.
*/
ble_err_t bk_ble_gatt_db_add_service
(
/* IN */ GATT_DB_SERVICE_INFO *service_info,
/* IN */ uint16_t num_attr_handles,
/* OUT */ uint16_t *service_handle
);
/**
@brief add a characteristic in a gatt service
@param service_handle: service handle, get from bk_ble_gatt_db_add_service
@param char_uuid: characteristic's uuid, in ATT_UUID16 or ATT_UUID128, see @ref GATT_DB_UUID_TYPE
@param perm: permission, such as GATT_DB_PERM_READ GATT_DB_PERM_WRITE
@param property: property, such as @ref GATT_DB_CHAR_READ_PROPERTY @ref GATT_DB_CHAR_NOTIFY_PROPERTY
@param char_value: att data, see @ref ATT_VALUE
@param[out] char_handle: output a handle
User example:
@code
GATT_DB_UUID_TYPE char_uuid;
uint16_t perm;
uint16_t property;
ATT_VALUE char_value;
UINT16 char_handle;
char_uuid.uuid_format = ATT_16_BIT_UUID_FORMAT;
char_uuid.uuid.uuid_16 = GATT_BOARDING_NOTIFY_CHARACTERISTIC;
perm = GATT_DB_PERM_READ;
property = (GATT_DB_CHAR_READ_PROPERTY | GATT_DB_CHAR_NOTIFY_PROPERTY);
char_value.val = s_boarding_notify;
char_value.len = sizeof(s_boarding_notify);
char_value.actual_len = char_value.len;
retval = bk_ble_gatt_db_add_characteristic
(
service_handle,
&char_uuid,
perm,
property,
&char_value,
&char_handle
);
@endcode
@attention 1.you must wait callback status, 0 mean success.
@return
- BK_ERR_BLE_SUCCESS: succeed
- others: other errors.
*/
ble_err_t bk_ble_gatt_db_add_characteristic
(
/* IN */ uint16_t service_handle,
/* IN */ GATT_DB_UUID_TYPE *char_uuid,
/* IN */ uint16_t perm,
/* IN */ uint16_t property,
/* IN */ ATT_VALUE *char_value,
/* OUT */ uint16_t *char_handle
);
/**
@brief add a characteristic descriptor in a characteristic
@param service_handle: service handle, get from bk_ble_gatt_db_add_service
@param char_handle: get from bk_ble_gatt_db_add_characteristic
@param desc_uuid: characteristic's uuid, in ATT_UUID16 or ATT_UUID128, see @ref GATT_DB_UUID_TYPE
@param perm: permission, such as @ref GATT_DB_PERM_READ @ref GATT_DB_PERM_WRITE
@param desc_value: att data, see @ref ATT_VALUE
User example:
@code
GATT_DB_UUID_TYPE desc_uuid;
ATT_VALUE desc_value;
uint8_t cccd_value[2U] = { 0x00U, 0x00U };
desc_uuid.uuid_format = ATT_16_BIT_UUID_FORMAT;
desc_uuid.uuid.uuid_16 = GATT_CLIENT_CONFIG;
perm = (GATT_DB_PERM_READ | GATT_DB_PERM_WRITE);
desc_value.val = cccd_value;
desc_value.len = 2U;
desc_value.actual_len = desc_value.len;
// Add descriptor CCCD
retval = bk_ble_gatt_db_add_characteristic_descriptor
(
service_handle,
boarding_env.chara_notify_handle,
&desc_uuid,
perm,
&desc_value
);
@endcode
@attention 1.you must wait callback status, 0 mean success.
@return
- BK_ERR_BLE_SUCCESS: succeed
- others: other errors.
*/
ble_err_t bk_ble_gatt_db_add_characteristic_descriptor
(
/* IN */ uint16_t service_handle,
/* IN */ uint16_t char_handle,
/* IN */ GATT_DB_UUID_TYPE *desc_uuid,
/* IN */ uint16_t perm,
/* IN */ ATT_VALUE *desc_value
);
/**
@brief call when gatt db add completed
@attention 1.you must wait callback status, 0 mean success.
@return
- BK_ERR_BLE_SUCCESS: succeed
- others: other errors.
*/
ble_err_t bk_ble_gatt_db_add_completed(void);
/**
@brief set callback, when recv write read req
@param hndlr_cb: callback, see \ref ble_gatt_db_callback_t
@attention 1.you must wait callback status, 0 mean success.
@return
- BK_ERR_BLE_SUCCESS: succeed
- others: other errors.
*/
ble_err_t bk_ble_gatt_db_set_callback(ble_gatt_db_callback_t hndlr_cb);
/**
@brief When recv GATT_DB_CHAR_PEER_READ_REQ, async response
@param conn_handle: connection handle
@param value: a point to buffer
@param length: buffer len
@attention 1.you must wait callback status, 0 mean success.
@return
- BK_ERR_BLE_SUCCESS: succeed
- others: other errors.
*/
ble_err_t bk_ble_gatt_read_resp(uint8_t conn_handle, uint8_t *value, uint16_t length);
/**
@brief send notify when recv enable notify
@param conn_handle: connection handle
@param adv service_handle: from bk_ble_gatt_db_add_service
@param char_handle: get from bk_ble_gatt_db_add_characteristic
@param data: a point to buffer
@param len: buffer len
@attention 1.you must wait callback status, 0 mean success.
@return
- BK_ERR_BLE_SUCCESS: succeed
- others: other errors.
*/
ble_err_t bk_ble_send_notify
(
uint8_t conn_handle,
uint16_t service_handle,
uint16_t char_handle,
uint8_t *data,
uint16_t len
);
/**
@brief get db value
@param handle: handle
@param attr_value: attr
@attention 1.you must wait callback status, 0 mean success.
@return
- BK_ERR_BLE_SUCCESS: succeed
- others: other errors.
*/
ble_err_t bk_ble_gatt_get_char_val(GATT_DB_HANDLE *handle, ATT_VALUE *attr_value);
/**
@brief set random addr
@param addr: addr
@param callback: register a callback for this action, ble_cmd_t: BLE_SET_RANDOM_ADDR
@attention 1.you must wait callback status, 0 mean success.
@attention 2.this api must call after bk_ble_set_advertising_params now !
@return
- BK_ERR_BLE_SUCCESS: succeed
- others: other errors.
*/
ble_err_t bk_ble_set_random_addr(bd_addr_t *addr, ble_cmd_cb_t callback);
/**
@brief update connection param, result as BK_DM_BLE_EVENT_CONN_UPDATA
@param conn_param: ble_update_conn_param_t
@attention 1.you must wait callback status, 0 mean success.
@return
- BK_ERR_BLE_SUCCESS: succeed
- others: other errors.
*/
ble_err_t bk_ble_update_connection_params(ble_update_conn_param_t *conn_param);
/*
* @}
*/
#ifdef __cplusplus
}
#endif