/**
*****************************************************************************************
* Copyright(c) 2017, Realtek Semiconductor Corporation. All rights reserved.
*****************************************************************************************
* @file gap_vendor.h
* @brief
* @details
* @author ranhui_xia
* @date 2017-08-02
* @version v1.0
******************************************************************************
* @attention
*
© COPYRIGHT 2017 Realtek Semiconductor Corporation
******************************************************************************
*/
#ifndef GAP_VNR_H
#define GAP_VNR_H
#include
/** @addtogroup GAP_LE_VENDOR GAP LE vendor command API.
* @brief GAP LE vendor command API provides extended function for controller.
* @{
*/
/*============================================================================*
* Macros
*============================================================================*/
/** @defgroup Gap_LE_Vendor_Exported_Macros GAP LE Vendor Exported Macros
* @{
*/
/** @defgroup GAP_LE_MSG_Types GAP LE Msg Types
* @{
*/
#define GAP_MSG_LE_VENDOR_ADV_3_DATA_ENABLE 0xA0 //! Not send @ref GAP_VENDOR_MSG_TYPE messages to APP.
* @arg Other -> Use application defined callback function.
* @return void
*
* Example usage
* \code{.c}
void app_le_gap_init(void)
{
......
gap_register_vendor_cb(app_gap_vendor_callback);
}
void app_gap_vendor_callback(uint8_t cb_type, void *p_cb_data)
{
T_GAP_VENDOR_CB_DATA cb_data;
memcpy(&cb_data, p_cb_data, sizeof(T_GAP_VENDOR_CB_DATA));
APP_PRINT_INFO1("app_gap_vendor_callback: cb_type is %d", cb_type);
switch (cb_type)
{
case GAP_MSG_GAP_VENDOR_SET_ANT_CTRL:
APP_PRINT_INFO1("GAP_MSG_GAP_VENDOR_SET_ANT_CTRL: cause 0x%x",
cb_data.gap_vendor_cause.cause);
break;
default:
break;
}
return;
}
\endcode
*/
void gap_register_vendor_cb(P_FUN_GAP_APP_CB vendor_callback);
/**
* @brief Enable 3 advertising channel advertising data.
* Set 3 adv data please refence to @ref le_vendor_adv_3_data_enable.
*
* @param[in] enable 0: disable, 1: enable each adv channel with diff data.
*
* @return Operation result.
* @retval GAP_CAUSE_SUCCESS: Operation success.
* @retval GAP_CAUSE_SEND_REQ_FAILED: Operation fail.
*
* Example usage
* \code{.c}
void gap_vendor_test(bool enable)
{
...
cause = le_vendor_adv_3_data_enable(enable);
return cause;
}
T_APP_RESULT app_gap_callback(uint8_t cb_type, void *p_cb_data)
{
T_APP_RESULT result = APP_RESULT_SUCCESS;
T_LE_CB_DATA cb_data;
memcpy(&cb_data, p_cb_data, sizeof(T_LE_CB_DATA));
APP_PRINT_TRACE1("app_gap_callback: cb_type = %d", cb_type);
switch (cb_type)
{
...
case GAP_MSG_LE_VENDOR_ADV_3_DATA_ENABLE:
APP_PRINT_INFO1("GAP_MSG_LE_VENDOR_ADV_3_DATA_ENABLE: cause 0x%x",
p_data->le_cause.cause);
break;
}
...
}
* \endcode
*/
T_GAP_CAUSE le_vendor_adv_3_data_enable(bool enable);
/**
* @brief Set different advertising date or scan response data in 3 advertising channel.
* This command is used to set 38 / 39 channel data, set 37 channel data please use normal HCI command.
* It is necessary to enable 3 adv data with @ref le_vendor_adv_3_data_enable.
*
* @param[in] type LE vendor advertising data type @ref T_GAP_ADV_VENDOR_DATA_TYPE.
* @param[in] len The number of significant octets in the advertising data.
* @param[in] p_data Pointer to data to write
*
* @return Operation result.
* @retval GAP_CAUSE_SUCCESS: Operation success.
* @retval GAP_CAUSE_SEND_REQ_FAILED: Operation fail.
* @retval GAP_CAUSE_INVALID_PARAM: Invalid parameter.
*
* Example usage
* \code{.c}
T_GAP_CAUSE gap_vendor_test(T_USER_CMD_PARSED_VALUE *p_parse_value)
{
T_GAP_CAUSE cause;
T_GAP_ADV_VENDOR_DATA_TYPE type = (T_GAP_ADV_VENDOR_DATA_TYPE)p_parse_value->dw_param[0];
uint8_t len = p_parse_value->dw_param[1];
uint8_t value = p_parse_value->dw_param[2];
uint8_t adv_data[31];
if (len > GAP_MAX_ADV_LEN)
{
return (RESULT_ERR);
}
memset(adv_data, value, len);
cause = le_vendor_adv_3_data_set((T_GAP_ADV_VENDOR_DATA_TYPE)type, len, adv_data);
return (T_GAP_CAUSE)cause;
}
T_APP_RESULT app_gap_callback(uint8_t cb_type, void *p_cb_data)
{
T_APP_RESULT result = APP_RESULT_SUCCESS;
T_LE_CB_DATA cb_data;
memcpy(&cb_data, p_cb_data, sizeof(T_LE_CB_DATA));
APP_PRINT_TRACE1("app_gap_callback: cb_type = %d", cb_type);
switch (cb_type)
{
...
case GAP_MSG_LE_VENDOR_ADV_3_DATA_SET:
APP_PRINT_INFO2("GAP_MSG_LE_VENDOR_ADV_3_DATA_SET: type %d, cause 0x%x",
p_data->p_le_vendor_adv_3_data_set_rsp->type,
p_data->p_le_vendor_adv_3_data_set_rsp->cause);
break;
...
}
* \endcode
*/
T_GAP_CAUSE le_vendor_adv_3_data_set(T_GAP_ADV_VENDOR_DATA_TYPE type,
uint8_t len, uint8_t *p_data);
/**
* @brief LE Drop Acl Data
*
* Drop pending LE acl packet that assigned by user except the acl packet which is currently waiting for ack.
* The packet-dropping rule is cleared if link is disconnected or HCI_RESET.
*
* @param[in] conn_id Connection ID for this link.
* @param[in] mask Assign the mask to compare with data.
* @param[in] pattern Drop data that match pattern
* @param[in] offset The offset in bytes started from Data
* @return Operation result.
* @retval GAP_CAUSE_SUCCESS: Operation success.
* @retval GAP_CAUSE_SEND_REQ_FAILED: Operation fail.
*
* Example usage
* \code{.c}
static T_USER_CMD_PARSE_RESULT cmd_vdropdata(T_USER_CMD_PARSED_VALUE *p_parse_value)
{
T_GAP_CAUSE cause;
uint8_t conn_id = p_parse_value->dw_param[0];
cause = le_vendor_drop_acl_data(conn_id, 0xffff, 0x0015, 5);
return (T_USER_CMD_PARSE_RESULT)cause;
}
T_APP_RESULT app_gap_callback(uint8_t cb_type, void *p_cb_data)
{
T_APP_RESULT result = APP_RESULT_SUCCESS;
T_LE_CB_DATA cb_data;
memcpy(&cb_data, p_cb_data, sizeof(T_LE_CB_DATA));
APP_PRINT_TRACE1("app_gap_callback: cb_type = %d", cb_type);
switch (cb_type)
{
...
case GAP_MSG_LE_VENDOR_DROP_ACL_DATA:
APP_PRINT_INFO1("GAP_MSG_LE_VENDOR_DROP_ACL_DATA: cause 0x%x",
p_data->le_cause.cause);
break;
...
}
* \endcode
*/
T_GAP_CAUSE le_vendor_drop_acl_data(uint8_t conn_id, uint16_t mask, uint16_t pattern,
uint8_t offset);
/**
* @brief Modify BT LE Fw Policy
*
* Modify the firmware bt le policy
*
* @param[in] mask Assign the mask to compare with data.
* @param[in] mask Assign the mask to compare with data.
* @return Operation result.
* @retval GAP_CAUSE_SUCCESS: Operation success.
* @retval GAP_CAUSE_SEND_REQ_FAILED: Operation fail.
*/
T_GAP_CAUSE le_vendor_modify_bt_le_fw_policy(uint32_t mask, uint32_t value);
/**
* @brief Reset BT controller
*
* @param[in] reset_mode GAP software reset mode @ref T_GAP_SW_RESET_MODE.
* @return Operation result.
* @retval GAP_CAUSE_SUCCESS: Operation success.
* @retval GAP_CAUSE_SEND_REQ_FAILED: Operation fail.
*
* Example usage
* \code{.c}
static T_USER_CMD_PARSE_RESULT cmd_reset(T_USER_CMD_PARSED_VALUE *p_parse_value)
{
T_GAP_CAUSE cause;
T_GAP_SW_RESET_MODE reset_mode = (T_GAP_SW_RESET_MODE)p_parse_value->dw_param[0];
cause = gap_sw_reset_req(reset_mode);
return (T_USER_CMD_PARSE_RESULT)cause;
}
T_APP_RESULT app_gap_callback(uint8_t cb_type, void *p_cb_data)
{
T_APP_RESULT result = APP_RESULT_SUCCESS;
T_LE_CB_DATA cb_data;
memcpy(&cb_data, p_cb_data, sizeof(T_LE_CB_DATA));
APP_PRINT_TRACE1("app_gap_callback: cb_type = %d", cb_type);
switch (cb_type)
{
...
case GAP_MSG_GAP_SW_RESET:
APP_PRINT_INFO1("GAP_MSG_GAP_SW_RESET: cause 0x%x",
p_data->le_cause.cause);
break;
...
}
* \endcode
*/
T_GAP_CAUSE gap_sw_reset_req(T_GAP_SW_RESET_MODE reset_mode);
/**
* @brief Set platform bootup active time.
*
* Platform allowed to enter low power mode after this timeout value.
* Can use this command in any time even low power mode is set.
*
* @param[in] active_time Unit: 50msec, Range:0x03-0x800. Default value is 5 sec.
* @return Operation result.
* @retval true Operation success.
* @retval false Operation fail.
*
* Example usage
* \code{.c}
static T_USER_CMD_PARSE_RESULT cmd_lpstime(T_USER_CMD_PARSED_VALUE *p_parse_value)
{
uint16_t active_time = p_parse_value->dw_param[0];
if(gap_set_lps_bootup_active_time(active_time))
{
return RESULT_SUCESS;
}
else
{
return RESULT_GAP_CAUSE_INVALID_PARAM;
}
}
T_APP_RESULT app_gap_callback(uint8_t cb_type, void *p_cb_data)
{
T_APP_RESULT result = APP_RESULT_SUCCESS;
T_LE_CB_DATA cb_data;
memcpy(&cb_data, p_cb_data, sizeof(T_LE_CB_DATA));
APP_PRINT_TRACE1("app_gap_callback: cb_type = %d", cb_type);
switch (cb_type)
{
...
case GAP_MSG_GAP_SET_LPS_BOOTUP_ACTIVE_TIME:
APP_PRINT_INFO1("GAP_MSG_GAP_SET_LPS_BOOTUP_ACTIVE_TIME: cause 0x%x",
p_data->le_cause.cause);
break;
...
}
* \endcode
*/
bool gap_set_lps_bootup_active_time(uint16_t active_time);
/**
* @brief Configure coding scheme of LE Coded PHY when device uses LE Advertising Extensions.
*
* NOTE: Advertiser should delete advertising set before changing coding scheme.
*
* @param[in] coding_scheme Coding scheme of LE Coded PHY when when device uses LE Advertising Extensions, @ref T_GAP_AE_CODING_SCHEME.
* @return Operation result.
* @retval GAP_CAUSE_SUCCESS Send request success.
* @retval other Send request failed.
*
* Example usage
* \code{.c}
void test(void)
{
le_ae_coding_scheme(GAP_AE_CODING_SCHEME_S8);
}
T_APP_RESULT app_gap_callback(uint8_t cb_type, void *p_cb_data)
{
T_APP_RESULT result = APP_RESULT_SUCCESS;
T_LE_CB_DATA cb_data;
memcpy(&cb_data, p_cb_data, sizeof(T_LE_CB_DATA));
APP_PRINT_TRACE1("app_gap_callback: cb_type = %d", cb_type);
switch (cb_type)
{
...
case GAP_MSG_LE_AE_CODING_SCHEME:
APP_PRINT_INFO1("GAP_MSG_LE_AE_CODING_SCHEME: cause 0x%x",
cb_data->le_cause.cause);
break;
...
}
* \endcode
*/
T_GAP_CAUSE le_ae_coding_scheme(T_GAP_AE_CODING_SCHEME coding_scheme);
/** End of GAP_LE_VENDOR_Exported_Functions
* @}
*/
/** End of GAP_LE_VENDOR
* @}
*/
#endif /* GAP_VNR_H */