/**
******************************************************************************
* @file bluenrg1_hci_le.c
* @author AMG - RF Application team
* @version V1.0.0
* @date 31 May 2018
* @brief Source file for external uC - BlueNRG-x in network coprocessor mode (hci_le)
* Autogenerated files, do not edit!!
******************************************************************************
* @attention
*
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
* TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
*
*
© COPYRIGHT STMicroelectronics
******************************************************************************
*/
#include "bluenrg1_hci_le.h"
#include "osal.h"
tBleStatus hci_disconnect(uint16_t Connection_Handle,
uint8_t Reason)
{
struct hci_request rq;
uint8_t cmd_buffer[258];
hci_disconnect_cp0 *cp0 = (hci_disconnect_cp0*)(cmd_buffer);
tBleStatus status = 0;
uint8_t index_input = 0;
cp0->Connection_Handle = htob(Connection_Handle, 2);
index_input += 2;
cp0->Reason = htob(Reason, 1);
index_input += 1;
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x01;
rq.ocf = 0x006;
rq.event = 0x0F;
rq.cparam = cmd_buffer;
rq.clen = index_input;
rq.rparam = &status;
rq.rlen = 1;
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (status) {
return status;
}
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_read_remote_version_information(uint16_t Connection_Handle)
{
struct hci_request rq;
uint8_t cmd_buffer[258];
hci_read_remote_version_information_cp0 *cp0 = (hci_read_remote_version_information_cp0*)(cmd_buffer);
tBleStatus status = 0;
uint8_t index_input = 0;
cp0->Connection_Handle = htob(Connection_Handle, 2);
index_input += 2;
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x01;
rq.ocf = 0x01d;
rq.event = 0x0F;
rq.cparam = cmd_buffer;
rq.clen = index_input;
rq.rparam = &status;
rq.rlen = 1;
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (status) {
return status;
}
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_set_event_mask(uint8_t Event_Mask[8])
{
struct hci_request rq;
uint8_t cmd_buffer[258];
hci_set_event_mask_cp0 *cp0 = (hci_set_event_mask_cp0*)(cmd_buffer);
tBleStatus status = 0;
uint8_t index_input = 0;
Osal_MemCpy((void *) &cp0->Event_Mask, (const void *) Event_Mask, 8);
index_input += 8;
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x03;
rq.ocf = 0x001;
rq.cparam = cmd_buffer;
rq.clen = index_input;
rq.rparam = &status;
rq.rlen = 1;
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (status) {
return status;
}
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_reset(void)
{
struct hci_request rq;
tBleStatus status = 0;
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x03;
rq.ocf = 0x003;
rq.rparam = &status;
rq.rlen = 1;
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (status) {
return status;
}
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_read_transmit_power_level(uint16_t Connection_Handle,
uint8_t Type,
uint8_t *Transmit_Power_Level)
{
struct hci_request rq;
uint8_t cmd_buffer[258];
hci_read_transmit_power_level_cp0 *cp0 = (hci_read_transmit_power_level_cp0*)(cmd_buffer);
hci_read_transmit_power_level_rp0 resp;
Osal_MemSet(&resp, 0, sizeof(resp));
uint8_t index_input = 0;
cp0->Connection_Handle = htob(Connection_Handle, 2);
index_input += 2;
cp0->Type = htob(Type, 1);
index_input += 1;
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x03;
rq.ocf = 0x02d;
rq.cparam = cmd_buffer;
rq.clen = index_input;
rq.rparam = &resp;
rq.rlen = sizeof(resp);
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (resp.Status) {
return resp.Status;
}
*Transmit_Power_Level = btoh(resp.Transmit_Power_Level, 1);
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_read_local_version_information(uint8_t *HCI_Version,
uint16_t *HCI_Revision,
uint8_t *LMP_PAL_Version,
uint16_t *Manufacturer_Name,
uint16_t *LMP_PAL_Subversion)
{
struct hci_request rq;
hci_read_local_version_information_rp0 resp;
Osal_MemSet(&resp, 0, sizeof(resp));
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x04;
rq.ocf = 0x001;
rq.rparam = &resp;
rq.rlen = sizeof(resp);
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (resp.Status) {
return resp.Status;
}
*HCI_Version = btoh(resp.HCI_Version, 1);
*HCI_Revision = btoh(resp.HCI_Revision, 2);
*LMP_PAL_Version = btoh(resp.LMP_PAL_Version, 1);
*Manufacturer_Name = btoh(resp.Manufacturer_Name, 2);
*LMP_PAL_Subversion = btoh(resp.LMP_PAL_Subversion, 2);
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_read_local_supported_commands(uint8_t Supported_Commands[64])
{
struct hci_request rq;
hci_read_local_supported_commands_rp0 resp;
Osal_MemSet(&resp, 0, sizeof(resp));
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x04;
rq.ocf = 0x002;
rq.rparam = &resp;
rq.rlen = sizeof(resp);
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (resp.Status) {
return resp.Status;
}
Osal_MemCpy((void *) Supported_Commands, (const void *) resp.Supported_Commands, 64);
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_read_local_supported_features(uint8_t LMP_Features[8])
{
struct hci_request rq;
hci_read_local_supported_features_rp0 resp;
Osal_MemSet(&resp, 0, sizeof(resp));
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x04;
rq.ocf = 0x003;
rq.rparam = &resp;
rq.rlen = sizeof(resp);
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (resp.Status) {
return resp.Status;
}
Osal_MemCpy((void *) LMP_Features, (const void *) resp.LMP_Features, 8);
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_read_bd_addr(uint8_t BD_ADDR[6])
{
struct hci_request rq;
hci_read_bd_addr_rp0 resp;
Osal_MemSet(&resp, 0, sizeof(resp));
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x04;
rq.ocf = 0x009;
rq.rparam = &resp;
rq.rlen = sizeof(resp);
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (resp.Status) {
return resp.Status;
}
Osal_MemCpy((void *) BD_ADDR, (const void *) resp.BD_ADDR, 6);
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_read_rssi(uint16_t Connection_Handle,
uint8_t *RSSI)
{
struct hci_request rq;
uint8_t cmd_buffer[258];
hci_read_rssi_cp0 *cp0 = (hci_read_rssi_cp0*)(cmd_buffer);
hci_read_rssi_rp0 resp;
Osal_MemSet(&resp, 0, sizeof(resp));
uint8_t index_input = 0;
cp0->Connection_Handle = htob(Connection_Handle, 2);
index_input += 2;
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x05;
rq.ocf = 0x005;
rq.cparam = cmd_buffer;
rq.clen = index_input;
rq.rparam = &resp;
rq.rlen = sizeof(resp);
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (resp.Status) {
return resp.Status;
}
*RSSI = btoh(resp.RSSI, 1);
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_set_event_mask(uint8_t LE_Event_Mask[8])
{
struct hci_request rq;
uint8_t cmd_buffer[258];
hci_le_set_event_mask_cp0 *cp0 = (hci_le_set_event_mask_cp0*)(cmd_buffer);
tBleStatus status = 0;
uint8_t index_input = 0;
Osal_MemCpy((void *) &cp0->LE_Event_Mask, (const void *) LE_Event_Mask, 8);
index_input += 8;
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x001;
rq.cparam = cmd_buffer;
rq.clen = index_input;
rq.rparam = &status;
rq.rlen = 1;
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (status) {
return status;
}
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_read_buffer_size(uint16_t *HC_LE_ACL_Data_Packet_Length,
uint8_t *HC_Total_Num_LE_ACL_Data_Packets)
{
struct hci_request rq;
hci_le_read_buffer_size_rp0 resp;
Osal_MemSet(&resp, 0, sizeof(resp));
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x002;
rq.rparam = &resp;
rq.rlen = sizeof(resp);
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (resp.Status) {
return resp.Status;
}
*HC_LE_ACL_Data_Packet_Length = btoh(resp.HC_LE_ACL_Data_Packet_Length, 2);
*HC_Total_Num_LE_ACL_Data_Packets = btoh(resp.HC_Total_Num_LE_ACL_Data_Packets, 1);
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_read_local_supported_features(uint8_t LE_Features[8])
{
struct hci_request rq;
hci_le_read_local_supported_features_rp0 resp;
Osal_MemSet(&resp, 0, sizeof(resp));
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x003;
rq.rparam = &resp;
rq.rlen = sizeof(resp);
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (resp.Status) {
return resp.Status;
}
Osal_MemCpy((void *) LE_Features, (const void *) resp.LE_Features, 8);
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_set_random_address(uint8_t Random_Address[6])
{
struct hci_request rq;
uint8_t cmd_buffer[258];
hci_le_set_random_address_cp0 *cp0 = (hci_le_set_random_address_cp0*)(cmd_buffer);
tBleStatus status = 0;
uint8_t index_input = 0;
Osal_MemCpy((void *) &cp0->Random_Address, (const void *) Random_Address, 6);
index_input += 6;
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x005;
rq.cparam = cmd_buffer;
rq.clen = index_input;
rq.rparam = &status;
rq.rlen = 1;
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (status) {
return status;
}
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_set_advertising_parameters(uint16_t Advertising_Interval_Min,
uint16_t Advertising_Interval_Max,
uint8_t Advertising_Type,
uint8_t Own_Address_Type,
uint8_t Peer_Address_Type,
uint8_t Peer_Address[6],
uint8_t Advertising_Channel_Map,
uint8_t Advertising_Filter_Policy)
{
struct hci_request rq;
uint8_t cmd_buffer[258];
hci_le_set_advertising_parameters_cp0 *cp0 = (hci_le_set_advertising_parameters_cp0*)(cmd_buffer);
tBleStatus status = 0;
uint8_t index_input = 0;
cp0->Advertising_Interval_Min = htob(Advertising_Interval_Min, 2);
index_input += 2;
cp0->Advertising_Interval_Max = htob(Advertising_Interval_Max, 2);
index_input += 2;
cp0->Advertising_Type = htob(Advertising_Type, 1);
index_input += 1;
cp0->Own_Address_Type = htob(Own_Address_Type, 1);
index_input += 1;
cp0->Peer_Address_Type = htob(Peer_Address_Type, 1);
index_input += 1;
Osal_MemCpy((void *) &cp0->Peer_Address, (const void *) Peer_Address, 6);
index_input += 6;
cp0->Advertising_Channel_Map = htob(Advertising_Channel_Map, 1);
index_input += 1;
cp0->Advertising_Filter_Policy = htob(Advertising_Filter_Policy, 1);
index_input += 1;
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x006;
rq.cparam = cmd_buffer;
rq.clen = index_input;
rq.rparam = &status;
rq.rlen = 1;
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (status) {
return status;
}
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_read_advertising_channel_tx_power(uint8_t *Transmit_Power_Level)
{
struct hci_request rq;
hci_le_read_advertising_channel_tx_power_rp0 resp;
Osal_MemSet(&resp, 0, sizeof(resp));
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x007;
rq.rparam = &resp;
rq.rlen = sizeof(resp);
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (resp.Status) {
return resp.Status;
}
*Transmit_Power_Level = btoh(resp.Transmit_Power_Level, 1);
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_set_advertising_data(uint8_t Advertising_Data_Length,
uint8_t Advertising_Data[31])
{
struct hci_request rq;
uint8_t cmd_buffer[258];
hci_le_set_advertising_data_cp0 *cp0 = (hci_le_set_advertising_data_cp0*)(cmd_buffer);
tBleStatus status = 0;
uint8_t index_input = 0;
cp0->Advertising_Data_Length = htob(Advertising_Data_Length, 1);
index_input += 1;
Osal_MemCpy((void *) &cp0->Advertising_Data, (const void *) Advertising_Data, 31);
index_input += 31;
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x008;
rq.cparam = cmd_buffer;
rq.clen = index_input;
rq.rparam = &status;
rq.rlen = 1;
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (status) {
return status;
}
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_set_scan_response_data(uint8_t Scan_Response_Data_Length,
uint8_t Scan_Response_Data[31])
{
struct hci_request rq;
uint8_t cmd_buffer[258];
hci_le_set_scan_response_data_cp0 *cp0 = (hci_le_set_scan_response_data_cp0*)(cmd_buffer);
tBleStatus status = 0;
uint8_t index_input = 0;
cp0->Scan_Response_Data_Length = htob(Scan_Response_Data_Length, 1);
index_input += 1;
Osal_MemCpy((void *) &cp0->Scan_Response_Data, (const void *) Scan_Response_Data, 31);
index_input += 31;
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x009;
rq.cparam = cmd_buffer;
rq.clen = index_input;
rq.rparam = &status;
rq.rlen = 1;
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (status) {
return status;
}
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_set_advertise_enable(uint8_t Advertising_Enable)
{
struct hci_request rq;
uint8_t cmd_buffer[258];
hci_le_set_advertise_enable_cp0 *cp0 = (hci_le_set_advertise_enable_cp0*)(cmd_buffer);
tBleStatus status = 0;
uint8_t index_input = 0;
cp0->Advertising_Enable = htob(Advertising_Enable, 1);
index_input += 1;
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x00a;
rq.cparam = cmd_buffer;
rq.clen = index_input;
rq.rparam = &status;
rq.rlen = 1;
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (status) {
return status;
}
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_set_scan_parameters(uint8_t LE_Scan_Type,
uint16_t LE_Scan_Interval,
uint16_t LE_Scan_Window,
uint8_t Own_Address_Type,
uint8_t Scanning_Filter_Policy)
{
struct hci_request rq;
uint8_t cmd_buffer[258];
hci_le_set_scan_parameters_cp0 *cp0 = (hci_le_set_scan_parameters_cp0*)(cmd_buffer);
tBleStatus status = 0;
uint8_t index_input = 0;
cp0->LE_Scan_Type = htob(LE_Scan_Type, 1);
index_input += 1;
cp0->LE_Scan_Interval = htob(LE_Scan_Interval, 2);
index_input += 2;
cp0->LE_Scan_Window = htob(LE_Scan_Window, 2);
index_input += 2;
cp0->Own_Address_Type = htob(Own_Address_Type, 1);
index_input += 1;
cp0->Scanning_Filter_Policy = htob(Scanning_Filter_Policy, 1);
index_input += 1;
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x00b;
rq.cparam = cmd_buffer;
rq.clen = index_input;
rq.rparam = &status;
rq.rlen = 1;
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (status) {
return status;
}
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_set_scan_enable(uint8_t LE_Scan_Enable,
uint8_t Filter_Duplicates)
{
struct hci_request rq;
uint8_t cmd_buffer[258];
hci_le_set_scan_enable_cp0 *cp0 = (hci_le_set_scan_enable_cp0*)(cmd_buffer);
tBleStatus status = 0;
uint8_t index_input = 0;
cp0->LE_Scan_Enable = htob(LE_Scan_Enable, 1);
index_input += 1;
cp0->Filter_Duplicates = htob(Filter_Duplicates, 1);
index_input += 1;
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x00c;
rq.cparam = cmd_buffer;
rq.clen = index_input;
rq.rparam = &status;
rq.rlen = 1;
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (status) {
return status;
}
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_create_connection(uint16_t LE_Scan_Interval,
uint16_t LE_Scan_Window,
uint8_t Initiator_Filter_Policy,
uint8_t Peer_Address_Type,
uint8_t Peer_Address[6],
uint8_t Own_Address_Type,
uint16_t Conn_Interval_Min,
uint16_t Conn_Interval_Max,
uint16_t Conn_Latency,
uint16_t Supervision_Timeout,
uint16_t Minimum_CE_Length,
uint16_t Maximum_CE_Length)
{
struct hci_request rq;
uint8_t cmd_buffer[258];
hci_le_create_connection_cp0 *cp0 = (hci_le_create_connection_cp0*)(cmd_buffer);
tBleStatus status = 0;
uint8_t index_input = 0;
cp0->LE_Scan_Interval = htob(LE_Scan_Interval, 2);
index_input += 2;
cp0->LE_Scan_Window = htob(LE_Scan_Window, 2);
index_input += 2;
cp0->Initiator_Filter_Policy = htob(Initiator_Filter_Policy, 1);
index_input += 1;
cp0->Peer_Address_Type = htob(Peer_Address_Type, 1);
index_input += 1;
Osal_MemCpy((void *) &cp0->Peer_Address, (const void *) Peer_Address, 6);
index_input += 6;
cp0->Own_Address_Type = htob(Own_Address_Type, 1);
index_input += 1;
cp0->Conn_Interval_Min = htob(Conn_Interval_Min, 2);
index_input += 2;
cp0->Conn_Interval_Max = htob(Conn_Interval_Max, 2);
index_input += 2;
cp0->Conn_Latency = htob(Conn_Latency, 2);
index_input += 2;
cp0->Supervision_Timeout = htob(Supervision_Timeout, 2);
index_input += 2;
cp0->Minimum_CE_Length = htob(Minimum_CE_Length, 2);
index_input += 2;
cp0->Maximum_CE_Length = htob(Maximum_CE_Length, 2);
index_input += 2;
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x00d;
rq.event = 0x0F;
rq.cparam = cmd_buffer;
rq.clen = index_input;
rq.rparam = &status;
rq.rlen = 1;
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (status) {
return status;
}
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_create_connection_cancel(void)
{
struct hci_request rq;
tBleStatus status = 0;
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x00e;
rq.rparam = &status;
rq.rlen = 1;
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (status) {
return status;
}
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_read_white_list_size(uint8_t *White_List_Size)
{
struct hci_request rq;
hci_le_read_white_list_size_rp0 resp;
Osal_MemSet(&resp, 0, sizeof(resp));
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x00f;
rq.rparam = &resp;
rq.rlen = sizeof(resp);
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (resp.Status) {
return resp.Status;
}
*White_List_Size = btoh(resp.White_List_Size, 1);
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_clear_white_list(void)
{
struct hci_request rq;
tBleStatus status = 0;
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x010;
rq.rparam = &status;
rq.rlen = 1;
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (status) {
return status;
}
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_add_device_to_white_list(uint8_t Address_Type,
uint8_t Address[6])
{
struct hci_request rq;
uint8_t cmd_buffer[258];
hci_le_add_device_to_white_list_cp0 *cp0 = (hci_le_add_device_to_white_list_cp0*)(cmd_buffer);
tBleStatus status = 0;
uint8_t index_input = 0;
cp0->Address_Type = htob(Address_Type, 1);
index_input += 1;
Osal_MemCpy((void *) &cp0->Address, (const void *) Address, 6);
index_input += 6;
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x011;
rq.cparam = cmd_buffer;
rq.clen = index_input;
rq.rparam = &status;
rq.rlen = 1;
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (status) {
return status;
}
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_remove_device_from_white_list(uint8_t Address_Type,
uint8_t Address[6])
{
struct hci_request rq;
uint8_t cmd_buffer[258];
hci_le_remove_device_from_white_list_cp0 *cp0 = (hci_le_remove_device_from_white_list_cp0*)(cmd_buffer);
tBleStatus status = 0;
uint8_t index_input = 0;
cp0->Address_Type = htob(Address_Type, 1);
index_input += 1;
Osal_MemCpy((void *) &cp0->Address, (const void *) Address, 6);
index_input += 6;
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x012;
rq.cparam = cmd_buffer;
rq.clen = index_input;
rq.rparam = &status;
rq.rlen = 1;
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (status) {
return status;
}
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_connection_update(uint16_t Connection_Handle,
uint16_t Conn_Interval_Min,
uint16_t Conn_Interval_Max,
uint16_t Conn_Latency,
uint16_t Supervision_Timeout,
uint16_t Minimum_CE_Length,
uint16_t Maximum_CE_Length)
{
struct hci_request rq;
uint8_t cmd_buffer[258];
hci_le_connection_update_cp0 *cp0 = (hci_le_connection_update_cp0*)(cmd_buffer);
tBleStatus status = 0;
uint8_t index_input = 0;
cp0->Connection_Handle = htob(Connection_Handle, 2);
index_input += 2;
cp0->Conn_Interval_Min = htob(Conn_Interval_Min, 2);
index_input += 2;
cp0->Conn_Interval_Max = htob(Conn_Interval_Max, 2);
index_input += 2;
cp0->Conn_Latency = htob(Conn_Latency, 2);
index_input += 2;
cp0->Supervision_Timeout = htob(Supervision_Timeout, 2);
index_input += 2;
cp0->Minimum_CE_Length = htob(Minimum_CE_Length, 2);
index_input += 2;
cp0->Maximum_CE_Length = htob(Maximum_CE_Length, 2);
index_input += 2;
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x013;
rq.event = 0x0F;
rq.cparam = cmd_buffer;
rq.clen = index_input;
rq.rparam = &status;
rq.rlen = 1;
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (status) {
return status;
}
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_set_host_channel_classification(uint8_t LE_Channel_Map[5])
{
struct hci_request rq;
uint8_t cmd_buffer[258];
hci_le_set_host_channel_classification_cp0 *cp0 = (hci_le_set_host_channel_classification_cp0*)(cmd_buffer);
tBleStatus status = 0;
uint8_t index_input = 0;
Osal_MemCpy((void *) &cp0->LE_Channel_Map, (const void *) LE_Channel_Map, 5);
index_input += 5;
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x014;
rq.cparam = cmd_buffer;
rq.clen = index_input;
rq.rparam = &status;
rq.rlen = 1;
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (status) {
return status;
}
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_read_channel_map(uint16_t Connection_Handle,
uint8_t LE_Channel_Map[5])
{
struct hci_request rq;
uint8_t cmd_buffer[258];
hci_le_read_channel_map_cp0 *cp0 = (hci_le_read_channel_map_cp0*)(cmd_buffer);
hci_le_read_channel_map_rp0 resp;
Osal_MemSet(&resp, 0, sizeof(resp));
uint8_t index_input = 0;
cp0->Connection_Handle = htob(Connection_Handle, 2);
index_input += 2;
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x015;
rq.cparam = cmd_buffer;
rq.clen = index_input;
rq.rparam = &resp;
rq.rlen = sizeof(resp);
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (resp.Status) {
return resp.Status;
}
Osal_MemCpy((void *) LE_Channel_Map, (const void *) resp.LE_Channel_Map, 5);
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_read_remote_used_features(uint16_t Connection_Handle)
{
struct hci_request rq;
uint8_t cmd_buffer[258];
hci_le_read_remote_used_features_cp0 *cp0 = (hci_le_read_remote_used_features_cp0*)(cmd_buffer);
tBleStatus status = 0;
uint8_t index_input = 0;
cp0->Connection_Handle = htob(Connection_Handle, 2);
index_input += 2;
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x016;
rq.event = 0x0F;
rq.cparam = cmd_buffer;
rq.clen = index_input;
rq.rparam = &status;
rq.rlen = 1;
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (status) {
return status;
}
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_encrypt(uint8_t Key[16],
uint8_t Plaintext_Data[16],
uint8_t Encrypted_Data[16])
{
struct hci_request rq;
uint8_t cmd_buffer[258];
hci_le_encrypt_cp0 *cp0 = (hci_le_encrypt_cp0*)(cmd_buffer);
hci_le_encrypt_rp0 resp;
Osal_MemSet(&resp, 0, sizeof(resp));
uint8_t index_input = 0;
Osal_MemCpy((void *) &cp0->Key, (const void *) Key, 16);
index_input += 16;
Osal_MemCpy((void *) &cp0->Plaintext_Data, (const void *) Plaintext_Data, 16);
index_input += 16;
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x017;
rq.cparam = cmd_buffer;
rq.clen = index_input;
rq.rparam = &resp;
rq.rlen = sizeof(resp);
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (resp.Status) {
return resp.Status;
}
Osal_MemCpy((void *) Encrypted_Data, (const void *) resp.Encrypted_Data, 16);
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_rand(uint8_t Random_Number[8])
{
struct hci_request rq;
hci_le_rand_rp0 resp;
Osal_MemSet(&resp, 0, sizeof(resp));
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x018;
rq.rparam = &resp;
rq.rlen = sizeof(resp);
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (resp.Status) {
return resp.Status;
}
Osal_MemCpy((void *) Random_Number, (const void *) resp.Random_Number, 8);
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_start_encryption(uint16_t Connection_Handle,
uint8_t Random_Number[8],
uint16_t Encrypted_Diversifier,
uint8_t Long_Term_Key[16])
{
struct hci_request rq;
uint8_t cmd_buffer[258];
hci_le_start_encryption_cp0 *cp0 = (hci_le_start_encryption_cp0*)(cmd_buffer);
tBleStatus status = 0;
uint8_t index_input = 0;
cp0->Connection_Handle = htob(Connection_Handle, 2);
index_input += 2;
Osal_MemCpy((void *) &cp0->Random_Number, (const void *) Random_Number, 8);
index_input += 8;
cp0->Encrypted_Diversifier = htob(Encrypted_Diversifier, 2);
index_input += 2;
Osal_MemCpy((void *) &cp0->Long_Term_Key, (const void *) Long_Term_Key, 16);
index_input += 16;
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x019;
rq.event = 0x0F;
rq.cparam = cmd_buffer;
rq.clen = index_input;
rq.rparam = &status;
rq.rlen = 1;
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (status) {
return status;
}
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_long_term_key_request_reply(uint16_t Connection_Handle,
uint8_t Long_Term_Key[16])
{
struct hci_request rq;
uint8_t cmd_buffer[258];
hci_le_long_term_key_request_reply_cp0 *cp0 = (hci_le_long_term_key_request_reply_cp0*)(cmd_buffer);
hci_le_long_term_key_request_reply_rp0 resp;
Osal_MemSet(&resp, 0, sizeof(resp));
uint8_t index_input = 0;
cp0->Connection_Handle = htob(Connection_Handle, 2);
index_input += 2;
Osal_MemCpy((void *) &cp0->Long_Term_Key, (const void *) Long_Term_Key, 16);
index_input += 16;
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x01a;
rq.cparam = cmd_buffer;
rq.clen = index_input;
rq.rparam = &resp;
rq.rlen = sizeof(resp);
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (resp.Status) {
return resp.Status;
}
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_long_term_key_requested_negative_reply(uint16_t Connection_Handle)
{
struct hci_request rq;
uint8_t cmd_buffer[258];
hci_le_long_term_key_requested_negative_reply_cp0 *cp0 = (hci_le_long_term_key_requested_negative_reply_cp0*)(cmd_buffer);
hci_le_long_term_key_requested_negative_reply_rp0 resp;
Osal_MemSet(&resp, 0, sizeof(resp));
uint8_t index_input = 0;
cp0->Connection_Handle = htob(Connection_Handle, 2);
index_input += 2;
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x01b;
rq.cparam = cmd_buffer;
rq.clen = index_input;
rq.rparam = &resp;
rq.rlen = sizeof(resp);
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (resp.Status) {
return resp.Status;
}
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_read_supported_states(uint8_t LE_States[8])
{
struct hci_request rq;
hci_le_read_supported_states_rp0 resp;
Osal_MemSet(&resp, 0, sizeof(resp));
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x01c;
rq.rparam = &resp;
rq.rlen = sizeof(resp);
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (resp.Status) {
return resp.Status;
}
Osal_MemCpy((void *) LE_States, (const void *) resp.LE_States, 8);
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_receiver_test(uint8_t RX_Frequency)
{
struct hci_request rq;
uint8_t cmd_buffer[258];
hci_le_receiver_test_cp0 *cp0 = (hci_le_receiver_test_cp0*)(cmd_buffer);
tBleStatus status = 0;
uint8_t index_input = 0;
cp0->RX_Frequency = htob(RX_Frequency, 1);
index_input += 1;
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x01d;
rq.cparam = cmd_buffer;
rq.clen = index_input;
rq.rparam = &status;
rq.rlen = 1;
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (status) {
return status;
}
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_transmitter_test(uint8_t TX_Frequency,
uint8_t Length_Of_Test_Data,
uint8_t Packet_Payload)
{
struct hci_request rq;
uint8_t cmd_buffer[258];
hci_le_transmitter_test_cp0 *cp0 = (hci_le_transmitter_test_cp0*)(cmd_buffer);
tBleStatus status = 0;
uint8_t index_input = 0;
cp0->TX_Frequency = htob(TX_Frequency, 1);
index_input += 1;
cp0->Length_Of_Test_Data = htob(Length_Of_Test_Data, 1);
index_input += 1;
cp0->Packet_Payload = htob(Packet_Payload, 1);
index_input += 1;
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x01e;
rq.cparam = cmd_buffer;
rq.clen = index_input;
rq.rparam = &status;
rq.rlen = 1;
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (status) {
return status;
}
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_test_end(uint16_t *Number_Of_Packets)
{
struct hci_request rq;
hci_le_test_end_rp0 resp;
Osal_MemSet(&resp, 0, sizeof(resp));
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x01f;
rq.rparam = &resp;
rq.rlen = sizeof(resp);
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (resp.Status) {
return resp.Status;
}
*Number_Of_Packets = btoh(resp.Number_Of_Packets, 2);
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_set_data_length(uint16_t Connection_Handle,
uint16_t TxOctets,
uint16_t TxTime)
{
struct hci_request rq;
uint8_t cmd_buffer[258];
hci_le_set_data_length_cp0 *cp0 = (hci_le_set_data_length_cp0*)(cmd_buffer);
hci_le_set_data_length_rp0 resp;
Osal_MemSet(&resp, 0, sizeof(resp));
uint8_t index_input = 0;
cp0->Connection_Handle = htob(Connection_Handle, 2);
index_input += 2;
cp0->TxOctets = htob(TxOctets, 2);
index_input += 2;
cp0->TxTime = htob(TxTime, 2);
index_input += 2;
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x022;
rq.cparam = cmd_buffer;
rq.clen = index_input;
rq.rparam = &resp;
rq.rlen = sizeof(resp);
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (resp.Status) {
return resp.Status;
}
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_read_suggested_default_data_length(uint16_t *SuggestedMaxTxOctets,
uint16_t *SuggestedMaxTxTime)
{
struct hci_request rq;
hci_le_read_suggested_default_data_length_rp0 resp;
Osal_MemSet(&resp, 0, sizeof(resp));
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x023;
rq.rparam = &resp;
rq.rlen = sizeof(resp);
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (resp.Status) {
return resp.Status;
}
*SuggestedMaxTxOctets = btoh(resp.SuggestedMaxTxOctets, 2);
*SuggestedMaxTxTime = btoh(resp.SuggestedMaxTxTime, 2);
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_write_suggested_default_data_length(uint16_t SuggestedMaxTxOctets,
uint16_t SuggestedMaxTxTime)
{
struct hci_request rq;
uint8_t cmd_buffer[258];
hci_le_write_suggested_default_data_length_cp0 *cp0 = (hci_le_write_suggested_default_data_length_cp0*)(cmd_buffer);
tBleStatus status = 0;
uint8_t index_input = 0;
cp0->SuggestedMaxTxOctets = htob(SuggestedMaxTxOctets, 2);
index_input += 2;
cp0->SuggestedMaxTxTime = htob(SuggestedMaxTxTime, 2);
index_input += 2;
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x024;
rq.cparam = cmd_buffer;
rq.clen = index_input;
rq.rparam = &status;
rq.rlen = 1;
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (status) {
return status;
}
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_read_local_p256_public_key(void)
{
struct hci_request rq;
tBleStatus status = 0;
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x025;
rq.event = 0x0F;
rq.rparam = &status;
rq.rlen = 1;
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (status) {
return status;
}
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_generate_dhkey(uint8_t Remote_P256_Public_Key[64])
{
struct hci_request rq;
uint8_t cmd_buffer[258];
hci_le_generate_dhkey_cp0 *cp0 = (hci_le_generate_dhkey_cp0*)(cmd_buffer);
tBleStatus status = 0;
uint8_t index_input = 0;
Osal_MemCpy((void *) &cp0->Remote_P256_Public_Key, (const void *) Remote_P256_Public_Key, 64);
index_input += 64;
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x026;
rq.event = 0x0F;
rq.cparam = cmd_buffer;
rq.clen = index_input;
rq.rparam = &status;
rq.rlen = 1;
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (status) {
return status;
}
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_add_device_to_resolving_list(uint8_t Peer_Identity_Address_Type,
uint8_t Peer_Identity_Address[6],
uint8_t Peer_IRK[16],
uint8_t Local_IRK[16])
{
struct hci_request rq;
uint8_t cmd_buffer[258];
hci_le_add_device_to_resolving_list_cp0 *cp0 = (hci_le_add_device_to_resolving_list_cp0*)(cmd_buffer);
tBleStatus status = 0;
uint8_t index_input = 0;
cp0->Peer_Identity_Address_Type = htob(Peer_Identity_Address_Type, 1);
index_input += 1;
Osal_MemCpy((void *) &cp0->Peer_Identity_Address, (const void *) Peer_Identity_Address, 6);
index_input += 6;
Osal_MemCpy((void *) &cp0->Peer_IRK, (const void *) Peer_IRK, 16);
index_input += 16;
Osal_MemCpy((void *) &cp0->Local_IRK, (const void *) Local_IRK, 16);
index_input += 16;
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x027;
rq.cparam = cmd_buffer;
rq.clen = index_input;
rq.rparam = &status;
rq.rlen = 1;
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (status) {
return status;
}
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_remove_device_from_resolving_list(uint8_t Peer_Identity_Address_Type,
uint8_t Peer_Identity_Address[6])
{
struct hci_request rq;
uint8_t cmd_buffer[258];
hci_le_remove_device_from_resolving_list_cp0 *cp0 = (hci_le_remove_device_from_resolving_list_cp0*)(cmd_buffer);
tBleStatus status = 0;
uint8_t index_input = 0;
cp0->Peer_Identity_Address_Type = htob(Peer_Identity_Address_Type, 1);
index_input += 1;
Osal_MemCpy((void *) &cp0->Peer_Identity_Address, (const void *) Peer_Identity_Address, 6);
index_input += 6;
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x028;
rq.cparam = cmd_buffer;
rq.clen = index_input;
rq.rparam = &status;
rq.rlen = 1;
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (status) {
return status;
}
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_clear_resolving_list(void)
{
struct hci_request rq;
tBleStatus status = 0;
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x029;
rq.rparam = &status;
rq.rlen = 1;
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (status) {
return status;
}
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_read_resolving_list_size(uint8_t *Resolving_List_Size)
{
struct hci_request rq;
hci_le_read_resolving_list_size_rp0 resp;
Osal_MemSet(&resp, 0, sizeof(resp));
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x02a;
rq.rparam = &resp;
rq.rlen = sizeof(resp);
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (resp.Status) {
return resp.Status;
}
*Resolving_List_Size = btoh(resp.Resolving_List_Size, 1);
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_read_peer_resolvable_address(uint8_t Peer_Identity_Address_Type,
uint8_t Peer_Identity_Address[6],
uint8_t Peer_Resolvable_Address[6])
{
struct hci_request rq;
uint8_t cmd_buffer[258];
hci_le_read_peer_resolvable_address_cp0 *cp0 = (hci_le_read_peer_resolvable_address_cp0*)(cmd_buffer);
hci_le_read_peer_resolvable_address_rp0 resp;
Osal_MemSet(&resp, 0, sizeof(resp));
uint8_t index_input = 0;
cp0->Peer_Identity_Address_Type = htob(Peer_Identity_Address_Type, 1);
index_input += 1;
Osal_MemCpy((void *) &cp0->Peer_Identity_Address, (const void *) Peer_Identity_Address, 6);
index_input += 6;
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x02b;
rq.cparam = cmd_buffer;
rq.clen = index_input;
rq.rparam = &resp;
rq.rlen = sizeof(resp);
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (resp.Status) {
return resp.Status;
}
Osal_MemCpy((void *) Peer_Resolvable_Address, (const void *) resp.Peer_Resolvable_Address, 6);
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_read_local_resolvable_address(uint8_t Peer_Identity_Address_Type,
uint8_t Peer_Identity_Address[6],
uint8_t Local_Resolvable_Address[6])
{
struct hci_request rq;
uint8_t cmd_buffer[258];
hci_le_read_local_resolvable_address_cp0 *cp0 = (hci_le_read_local_resolvable_address_cp0*)(cmd_buffer);
hci_le_read_local_resolvable_address_rp0 resp;
Osal_MemSet(&resp, 0, sizeof(resp));
uint8_t index_input = 0;
cp0->Peer_Identity_Address_Type = htob(Peer_Identity_Address_Type, 1);
index_input += 1;
Osal_MemCpy((void *) &cp0->Peer_Identity_Address, (const void *) Peer_Identity_Address, 6);
index_input += 6;
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x02c;
rq.cparam = cmd_buffer;
rq.clen = index_input;
rq.rparam = &resp;
rq.rlen = sizeof(resp);
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (resp.Status) {
return resp.Status;
}
Osal_MemCpy((void *) Local_Resolvable_Address, (const void *) resp.Local_Resolvable_Address, 6);
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_set_address_resolution_enable(uint8_t Address_Resolution_Enable)
{
struct hci_request rq;
uint8_t cmd_buffer[258];
hci_le_set_address_resolution_enable_cp0 *cp0 = (hci_le_set_address_resolution_enable_cp0*)(cmd_buffer);
tBleStatus status = 0;
uint8_t index_input = 0;
cp0->Address_Resolution_Enable = htob(Address_Resolution_Enable, 1);
index_input += 1;
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x02d;
rq.cparam = cmd_buffer;
rq.clen = index_input;
rq.rparam = &status;
rq.rlen = 1;
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (status) {
return status;
}
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_set_resolvable_private_address_timeout(uint16_t RPA_Timeout)
{
struct hci_request rq;
uint8_t cmd_buffer[258];
hci_le_set_resolvable_private_address_timeout_cp0 *cp0 = (hci_le_set_resolvable_private_address_timeout_cp0*)(cmd_buffer);
tBleStatus status = 0;
uint8_t index_input = 0;
cp0->RPA_Timeout = htob(RPA_Timeout, 2);
index_input += 2;
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x02e;
rq.cparam = cmd_buffer;
rq.clen = index_input;
rq.rparam = &status;
rq.rlen = 1;
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (status) {
return status;
}
return BLE_STATUS_SUCCESS;
}
tBleStatus hci_le_read_maximum_data_length(uint16_t *supportedMaxTxOctets,
uint16_t *supportedMaxTxTime,
uint16_t *supportedMaxRxOctets,
uint16_t *supportedMaxRxTime)
{
struct hci_request rq;
hci_le_read_maximum_data_length_rp0 resp;
Osal_MemSet(&resp, 0, sizeof(resp));
Osal_MemSet(&rq, 0, sizeof(rq));
rq.ogf = 0x08;
rq.ocf = 0x02f;
rq.rparam = &resp;
rq.rlen = sizeof(resp);
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (resp.Status) {
return resp.Status;
}
*supportedMaxTxOctets = btoh(resp.supportedMaxTxOctets, 2);
*supportedMaxTxTime = btoh(resp.supportedMaxTxTime, 2);
*supportedMaxRxOctets = btoh(resp.supportedMaxRxOctets, 2);
*supportedMaxRxTime = btoh(resp.supportedMaxRxTime, 2);
return BLE_STATUS_SUCCESS;
}