576 lines
15 KiB
C
576 lines
15 KiB
C
#ifndef _BLUETOOTH_H_
|
|
#define _BLUETOOTH_H_
|
|
|
|
#include "typedef.h"
|
|
|
|
|
|
//LE
|
|
#include "le/ble_data_types.h"
|
|
#include "le/ble_api.h"
|
|
#include "le/le_user.h"
|
|
#include "le/att.h"
|
|
#include "le/gatt.h"
|
|
#include "le/sm.h"
|
|
|
|
|
|
//Classic
|
|
|
|
|
|
|
|
|
|
//Common
|
|
#include "btstack_event.h"
|
|
|
|
|
|
#define HCI_COMMAND_DATA_PACKET 0x01
|
|
#define HCI_ACL_DATA_PACKET 0x02
|
|
#define HCI_SCO_DATA_PACKET 0x03
|
|
#define HCI_EVENT_PACKET 0x04
|
|
|
|
// OGFs
|
|
#define OGF_LINK_CONTROL 0x01
|
|
#define OGF_LINK_POLICY 0x02
|
|
#define OGF_CONTROLLER_BASEBAND 0x03
|
|
#define OGF_INFORMATIONAL_PARAMETERS 0x04
|
|
#define OGF_STATUS_PARAMETERS 0x05
|
|
#define OGF_TESTING 0x06
|
|
#define OGF_LE_CONTROLLER 0x08
|
|
#define OGF_VENDOR_LE_CONTROLLER 0x3e
|
|
#define OGF_VENDOR 0x3f
|
|
|
|
|
|
// Events from host controller to host
|
|
|
|
/**
|
|
* @format 1
|
|
* @param status
|
|
*/
|
|
#define HCI_EVENT_INQUIRY_COMPLETE 0x01
|
|
|
|
/**
|
|
* @format 1B11132
|
|
* @param num_responses
|
|
* @param bd_addr
|
|
* @param page_scan_repetition_mode
|
|
* @param reserved1
|
|
* @param reserved2
|
|
* @param class_of_device
|
|
* @param clock_offset
|
|
*/
|
|
#define HCI_EVENT_INQUIRY_RESULT 0x02
|
|
|
|
/**
|
|
* @format 12B11
|
|
* @param status
|
|
* @param connection_handle
|
|
* @param bd_addr
|
|
* @param link_type
|
|
* @param encryption_enabled
|
|
*/
|
|
#define HCI_EVENT_CONNECTION_COMPLETE 0x03
|
|
/**
|
|
* @format B31
|
|
* @param bd_addr
|
|
* @param class_of_device
|
|
* @param link_type
|
|
*/
|
|
#define HCI_EVENT_CONNECTION_REQUEST 0x04
|
|
/**
|
|
* @format 121
|
|
* @param status
|
|
* @param connection_handle
|
|
* @param reason
|
|
*/
|
|
#define HCI_EVENT_DISCONNECTION_COMPLETE 0x05
|
|
/**
|
|
* @format 12
|
|
* @param status
|
|
* @param connection_handle
|
|
*/
|
|
#define HCI_EVENT_AUTHENTICATION_COMPLETE 0x06
|
|
/**
|
|
* @format 1BN
|
|
* @param status
|
|
* @param bd_addr
|
|
* @param remote_name
|
|
*/
|
|
#define HCI_EVENT_REMOTE_NAME_REQUEST_COMPLETE 0x07
|
|
/**
|
|
* @format 121
|
|
* @param status
|
|
* @param connection_handle
|
|
* @param encryption_enabled
|
|
*/
|
|
#define HCI_EVENT_ENCRYPTION_CHANGE 0x08
|
|
/**
|
|
* @format 12
|
|
* @param status
|
|
* @param connection_handle
|
|
*/
|
|
#define HCI_EVENT_CHANGE_CONNECTION_LINK_KEY_COMPLETE 0x09
|
|
/**
|
|
* @format 121
|
|
* @param status
|
|
* @param connection_handle
|
|
* @param key_flag
|
|
*/
|
|
#define HCI_EVENT_MASTER_LINK_KEY_COMPLETE 0x0A
|
|
|
|
#define HCI_EVENT_READ_REMOTE_SUPPORTED_FEATURES_COMPLETE 0x0B
|
|
|
|
#define HCI_EVENT_READ_REMOTE_VERSION_INFORMATION_COMPLETE 0x0C
|
|
|
|
#define HCI_EVENT_QOS_SETUP_COMPLETE 0x0D
|
|
|
|
/**
|
|
* @format 12R
|
|
* @param num_hci_command_packets
|
|
* @param command_opcode
|
|
* @param return_parameters
|
|
*/
|
|
#define HCI_EVENT_COMMAND_COMPLETE 0x0E
|
|
/**
|
|
* @format 112
|
|
* @param status
|
|
* @param num_hci_command_packets
|
|
* @param command_opcode
|
|
*/
|
|
#define HCI_EVENT_COMMAND_STATUS 0x0F
|
|
|
|
/**
|
|
* @format 1
|
|
* @param hardware_code
|
|
*/
|
|
#define HCI_EVENT_HARDWARE_ERROR 0x10
|
|
|
|
#define HCI_EVENT_FLUSH_OCCURRED 0x11
|
|
|
|
/**
|
|
* @format 1B1
|
|
* @param status
|
|
* @param bd_addr
|
|
* @param role
|
|
*/
|
|
#define HCI_EVENT_ROLE_CHANGE 0x12
|
|
|
|
// TODO: number_of_handles 1, connection_handle[H*i], hc_num_of_completed_packets[2*i]
|
|
#define HCI_EVENT_NUMBER_OF_COMPLETED_PACKETS 0x13
|
|
|
|
/**
|
|
* @format 1H12
|
|
* @param status
|
|
* @param handle
|
|
* @param mode
|
|
* @param interval
|
|
*/
|
|
#define HCI_EVENT_MODE_CHANGE_EVENT 0x14
|
|
|
|
// TODO: num_keys, bd_addr[B*i], link_key[16 octets * i]
|
|
#define HCI_EVENT_RETURN_LINK_KEYS 0x15
|
|
|
|
/**
|
|
* @format B
|
|
* @param bd_addr
|
|
*/
|
|
#define HCI_EVENT_PIN_CODE_REQUEST 0x16
|
|
|
|
/**
|
|
* @format B
|
|
* @param bd_addr
|
|
*/
|
|
#define HCI_EVENT_LINK_KEY_REQUEST 0x17
|
|
|
|
// TODO: bd_addr B, link_key 16octets, key_type 1
|
|
#define HCI_EVENT_LINK_KEY_NOTIFICATION 0x18
|
|
|
|
/**
|
|
* @format 1
|
|
* @param link_type
|
|
*/
|
|
#define HCI_EVENT_DATA_BUFFER_OVERFLOW 0x1A
|
|
|
|
/**
|
|
* @format H1
|
|
* @param handle
|
|
* @param lmp_max_slots
|
|
*/
|
|
#define HCI_EVENT_MAX_SLOTS_CHANGED 0x1B
|
|
|
|
/**
|
|
* @format 1H2
|
|
* @param status
|
|
* @param handle
|
|
* @param clock_offset
|
|
*/
|
|
#define HCI_EVENT_READ_CLOCK_OFFSET_COMPLETE 0x1C
|
|
|
|
/**
|
|
* @format 1H2
|
|
* @param status
|
|
* @param handle
|
|
* @param packet_types
|
|
* @pnote packet_type is in plural to avoid clash with Java binding Packet.getPacketType()
|
|
*/
|
|
#define HCI_EVENT_CONNECTION_PACKET_TYPE_CHANGED 0x1D
|
|
|
|
#define HCI_EVENT_PAGE_SCAN_REPETITION_MODE_CHANGE 0x20
|
|
/**
|
|
* @format 1B11321
|
|
* @param num_responses
|
|
* @param bd_addr
|
|
* @param page_scan_repetition_mode
|
|
* @param reserved
|
|
* @param class_of_device
|
|
* @param clock_offset
|
|
* @param rssi
|
|
*/
|
|
#define HCI_EVENT_INQUIRY_RESULT_WITH_RSSI 0x22
|
|
|
|
#define HCI_EVENT_READ_REMOTE_EXTERNED_FEATURES_COMPLETE 0x23
|
|
/**
|
|
* @format 1HB111221
|
|
* @param status
|
|
* @param handle
|
|
* @param bd_addr
|
|
* @param link_type
|
|
* @param transmission_interval
|
|
* @param retransmission_interval
|
|
* @param rx_packet_length
|
|
* @param tx_packet_length
|
|
* @param air_mode
|
|
*/
|
|
#define HCI_EVENT_SYNCHRONOUS_CONNECTION_COMPLETE 0x2C
|
|
|
|
// TODO: serialize extended_inquiry_response and provide parser
|
|
/**
|
|
* @format 1B11321
|
|
* @param num_responses
|
|
* @param bd_addr
|
|
* @param page_scan_repetition_mode
|
|
* @param reserved
|
|
* @param class_of_device
|
|
* @param clock_offset
|
|
* @param rssi
|
|
*/
|
|
#define HCI_EVENT_EXTENDED_INQUIRY_RESPONSE 0x2F
|
|
#define HCI_EVENT_EXTENDED_INQUIRY_RESULT 0x2F
|
|
|
|
/**
|
|
* @format 1H
|
|
* @param status
|
|
* @param handle
|
|
*/
|
|
#define HCI_EVENT_ENCRYPTION_KEY_REFRESH_COMPLETE 0x30
|
|
|
|
#define HCI_EVENT_IO_CAPABILITY_REQUEST 0x31
|
|
#define HCI_EVENT_IO_CAPABILITY_RESPONSE 0x32
|
|
|
|
/**
|
|
* @format B4
|
|
* @param bd_addr
|
|
* @param numeric_value
|
|
*/
|
|
#define HCI_EVENT_USER_CONFIRMATION_REQUEST 0x33
|
|
|
|
/**
|
|
* @format B
|
|
* @param bd_addr
|
|
*/
|
|
#define HCI_EVENT_USER_PASSKEY_REQUEST 0x34
|
|
|
|
/**
|
|
* @format B
|
|
* @param bd_addr
|
|
*/
|
|
#define HCI_EVENT_REMOTE_OOB_DATA_REQUEST 0x35
|
|
|
|
/**
|
|
* @format 1B
|
|
* @param status
|
|
* @param bd_addr
|
|
*/
|
|
#define HCI_EVENT_SIMPLE_PAIRING_COMPLETE 0x36
|
|
#define HCI_EVENT_LINK_SUPPERVISION_TIMEOUT_CHANGE_EVENT 0x38
|
|
|
|
#define HCI_EVENT_USER_PRESSKEY_NOTIFICATION 0x3B
|
|
#define HCI_EVENT_REMOTE_KEYPRESS_NOTIFICATION 0x3C
|
|
#define HCI_EVENT_REMOTE_SUPPORTED_FEATURES_NOTIFICATION 0x3D
|
|
#define HCI_EVENT_LE_META 0x3E
|
|
|
|
// last used HCI_EVENT in 2.1 is 0x3d
|
|
// last used HCI_EVENT in 4.1 is 0x57
|
|
|
|
//event definition for new vendor sub event
|
|
#define HCI_EVENT_VENDOR_META 0xF5
|
|
#define HCI_SUBEVENT_VENDOR_TEST_MODE_CFG 0x01
|
|
|
|
#define HCI_EVENT_VENDOR_FRE_OFFSET_TRIM 0xF6
|
|
#define HCI_EVENT_VENDOR_ENCRY_COMPLETE 0xF7
|
|
#define HCI_EVENT_VENDOR_NO_RECONN_ADDR 0xF8
|
|
#define HCI_EVENT_VENDOR_SETUP_COMPLETE 0xF9
|
|
#define HCI_EVENT_VENDOR_DUT 0xFA
|
|
#define HCI_EVENT_VENDOR_OSC_INTERNAL 0xFB
|
|
#define HCI_EVENT_VENDOR_FAST_TEST 0xFC
|
|
#define HCI_EVENT_VENDOR_REMOTE_UPDATE 0xFD
|
|
#define HCI_EVENT_VENDOR_REMOTE_TEST 0xFE
|
|
#define HCI_EVENT_VENDOR_SPECIFIC 0xFF
|
|
|
|
#define BTSTACK_EVENT_HCI_CONNECTIONS_DELETE 0x6D
|
|
|
|
/**
|
|
* @format 11H11B2221
|
|
* @param subevent_code
|
|
* @param status
|
|
* @param connection_handle
|
|
* @param role
|
|
* @param peer_address_type
|
|
* @param peer_address
|
|
* @param conn_interval
|
|
* @param conn_latency
|
|
* @param supervision_timeout
|
|
* @param master_clock_accuracy
|
|
*/
|
|
#define HCI_SUBEVENT_LE_CONNECTION_COMPLETE 0x01
|
|
|
|
// array of advertisements, not handled by event accessor generator
|
|
#define HCI_SUBEVENT_LE_ADVERTISING_REPORT 0x02
|
|
|
|
/**
|
|
* @format 11H222
|
|
* @param subevent_code
|
|
* @param status
|
|
* @param connection_handle
|
|
* @param conn_interval
|
|
* @param conn_latency
|
|
* @param supervision_timeout
|
|
*/
|
|
#define HCI_SUBEVENT_LE_CONNECTION_UPDATE_COMPLETE 0x03
|
|
|
|
/**
|
|
* @format 1HD2
|
|
* @param subevent_code
|
|
* @param connection_handle
|
|
* @param random_number
|
|
* @param encryption_diversifier
|
|
*/
|
|
#define HCI_SUBEVENT_LE_READ_REMOTE_USED_FEATURES_COMPLETE 0x04
|
|
|
|
/**
|
|
* @format 1HD2
|
|
* @param subevent_code
|
|
* @param connection_handle
|
|
* @param random_number
|
|
* @param encryption_diversifier
|
|
*/
|
|
#define HCI_SUBEVENT_LE_LONG_TERM_KEY_REQUEST 0x05
|
|
|
|
/**
|
|
* @format 1H2222
|
|
* @param subevent_code
|
|
* @param connection_handle
|
|
* @param interval_min
|
|
* @param interval_max
|
|
* @param latency
|
|
* @param timeout
|
|
*/
|
|
#define HCI_SUBEVENT_LE_REMOTE_CONNECTION_PARAMETER_REQUEST 0x06
|
|
|
|
/**
|
|
* @format 1H2222
|
|
* @param subevent_code
|
|
* @param connection_handle
|
|
* @param max_tx_octets
|
|
* @param max_tx_time
|
|
* @param max_rx_octets
|
|
* @param max_rx_time
|
|
*/
|
|
#define HCI_SUBEVENT_LE_DATA_LENGTH_CHANGE 0x07
|
|
|
|
/**
|
|
* @format 11QQ
|
|
* @param subevent_code
|
|
* @param status
|
|
* @param dhkey_x x coordinate of P256 public key
|
|
* @param dhkey_y y coordinate of P256 public key
|
|
*/
|
|
#define HCI_SUBEVENT_LE_READ_LOCAL_P256_PUBLIC_KEY_COMPLETE 0x08
|
|
/**
|
|
* @format 11Q
|
|
* @param subevent_code
|
|
* @param status
|
|
* @param dhkey Diffie-Hellman key
|
|
*/
|
|
#define HCI_SUBEVENT_LE_GENERATE_DHKEY_COMPLETE 0x09
|
|
|
|
/**
|
|
* @format 11H11BBB2221
|
|
* @param subevent_code
|
|
* @param status
|
|
* @param connection_handle
|
|
* @param role
|
|
* @param peer_address_type
|
|
* @param perr_addresss
|
|
* @param local_resolvable_private_addres
|
|
* @param peer_resolvable_private_addres
|
|
* @param conn_interval
|
|
* @param conn_latency
|
|
* @param supervision_timeout
|
|
* @param master_clock_accuracy
|
|
*/
|
|
#define HCI_SUBEVENT_LE_ENHANCED_CONNECTION_COMPLETE 0x0A
|
|
|
|
// array of advertisements, not handled by event accessor generator
|
|
#define HCI_SUBEVENT_LE_DIRECT_ADVERTISING_REPORT 0x0B
|
|
|
|
/**
|
|
* @format 11211
|
|
* @param subevent_code
|
|
* @param status
|
|
* @param connection_handle
|
|
* @param TX_PHY
|
|
* @param RX_PHY
|
|
*/
|
|
#define HCI_SUBEVENT_LE_PHY_UPDATE_COMPLETE 0x0C
|
|
|
|
// array of advertisements, not handled by event accessor generator
|
|
#define HCI_SUBEVENT_LE_EXTENDED_ADVERTISING_REPORT 0x0D
|
|
|
|
#define HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_SYNC_ESTABLISHED 0x0E
|
|
|
|
/**
|
|
* @format 1211111B
|
|
* @param subevent_code
|
|
* @param sync_handle
|
|
* @param tx_power
|
|
* @param rssi
|
|
* @param unused
|
|
* @param data_status
|
|
* @param data_length
|
|
* @param data
|
|
*/
|
|
#define HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_REPORT 0x0F
|
|
|
|
/**
|
|
* @format 2
|
|
* @param sync_handle
|
|
*/
|
|
#define HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_SYNC_LOST 0x10
|
|
|
|
/**
|
|
* @format
|
|
*/
|
|
#define HCI_SUBEVENT_LE_SCAN_TIMEOUT 0x11
|
|
|
|
/**
|
|
* @format 1121
|
|
* @param subevent_code
|
|
* @param status
|
|
* @param advertising_handle
|
|
* @param connection_handle
|
|
* @param num_completed_extended_advertising_events
|
|
*/
|
|
#define HCI_SUBEVENT_LE_ADVERTISING_SET_TERMINATED 0x12
|
|
|
|
/**
|
|
* @format 1116
|
|
* @param subevent_code
|
|
* @param advertising_handle
|
|
* @param scanner_address_type
|
|
* @param scanner_address
|
|
*/
|
|
#define HCI_SUBEVENT_LE_SCAN_REQUEST_RECEIVED 0x13
|
|
|
|
/**
|
|
* @format 21
|
|
* @param subevent_code
|
|
* @param connection_handle
|
|
* @param channel_selection_algorithm
|
|
*/
|
|
#define HCI_SUBEVENT_LE_CHANNEL_SELECTION_ALGORITHM 0x14
|
|
|
|
|
|
#define HCI_SUBEVENT_LE_VENDOR_INTERVAL_COMPLETE 0xF0
|
|
|
|
/**
|
|
* @format
|
|
*/
|
|
#define HCI_EVENT_ANCS_META 0xEA
|
|
|
|
|
|
/**
|
|
* compact HCI Command packet description
|
|
*/
|
|
typedef struct {
|
|
uint16_t opcode;
|
|
const char *format;
|
|
} hci_cmd_t;
|
|
|
|
int hci_send_cmd(const hci_cmd_t *cmd, ...);
|
|
|
|
|
|
extern const hci_cmd_t hci_reset;
|
|
extern const hci_cmd_t hci_read_bd_addr;
|
|
extern const hci_cmd_t hci_read_local_supported_features;
|
|
extern const hci_cmd_t hci_read_buffer_size;
|
|
extern const hci_cmd_t hci_read_local_supported_commands;
|
|
extern const hci_cmd_t hci_read_local_version_information;
|
|
extern const hci_cmd_t hci_read_le_host_supported;
|
|
extern const hci_cmd_t hci_read_local_name;
|
|
extern const hci_cmd_t hci_write_class_of_device;
|
|
extern const hci_cmd_t hci_write_local_name;
|
|
extern const hci_cmd_t hci_write_scan_enable;
|
|
extern const hci_cmd_t hci_set_event_mask;
|
|
extern const hci_cmd_t hci_le_add_device_to_white_list;
|
|
extern const hci_cmd_t hci_le_clear_white_list;
|
|
extern const hci_cmd_t hci_le_connection_update;
|
|
extern const hci_cmd_t hci_le_create_connection;
|
|
extern const hci_cmd_t hci_le_create_connection_cancel;
|
|
extern const hci_cmd_t hci_le_encrypt;
|
|
extern const hci_cmd_t hci_le_generate_dhkey;
|
|
extern const hci_cmd_t hci_le_long_term_key_negative_reply;
|
|
extern const hci_cmd_t hci_le_long_term_key_request_reply;
|
|
extern const hci_cmd_t hci_le_rand;
|
|
extern const hci_cmd_t hci_le_read_advertising_channel_tx_power;
|
|
extern const hci_cmd_t hci_le_read_buffer_size;
|
|
extern const hci_cmd_t hci_le_read_channel_map;
|
|
extern const hci_cmd_t hci_le_read_local_p256_public_key;
|
|
extern const hci_cmd_t hci_le_read_maximum_data_length;
|
|
extern const hci_cmd_t hci_le_read_remote_used_features;
|
|
extern const hci_cmd_t hci_le_read_suggested_default_data_length;
|
|
extern const hci_cmd_t hci_le_read_supported_features;
|
|
extern const hci_cmd_t hci_le_read_supported_states;
|
|
extern const hci_cmd_t hci_le_read_white_list_size;
|
|
extern const hci_cmd_t hci_le_receiver_test;
|
|
extern const hci_cmd_t hci_le_remove_device_from_white_list;
|
|
extern const hci_cmd_t hci_le_set_advertise_enable;
|
|
extern const hci_cmd_t hci_le_set_advertising_data;
|
|
extern const hci_cmd_t hci_le_set_advertising_parameters;
|
|
extern const hci_cmd_t hci_le_set_data_length;
|
|
extern const hci_cmd_t hci_le_set_event_mask;
|
|
extern const hci_cmd_t hci_le_set_host_channel_classification;
|
|
extern const hci_cmd_t hci_le_set_random_address;
|
|
extern const hci_cmd_t hci_le_set_scan_enable;
|
|
extern const hci_cmd_t hci_le_set_scan_parameters;
|
|
extern const hci_cmd_t hci_le_set_scan_response_data;
|
|
extern const hci_cmd_t hci_le_start_encryption;
|
|
extern const hci_cmd_t hci_le_test_end;
|
|
extern const hci_cmd_t hci_le_transmitter_test;
|
|
extern const hci_cmd_t hci_le_write_suggested_default_data_length;
|
|
extern const hci_cmd_t hci_le_set_phy;
|
|
|
|
extern const hci_cmd_t hci_le_set_ext_advertising_parameters;
|
|
extern const hci_cmd_t hci_le_set_ext_advertising_data;
|
|
extern const hci_cmd_t hci_le_set_ext_advertise_enable;
|
|
extern const hci_cmd_t hci_le_set_ext_scan_parameters;
|
|
extern const hci_cmd_t hci_le_set_ext_scan_enable;
|
|
|
|
enum VENDOR_REMOTE_TEST_VALUE {
|
|
VENDOR_TEST_DISCONNECTED = 0,
|
|
VENDOR_TEST_LEGACY_CONNECTED_BY_BT_CLASSIC,
|
|
VENDOR_TEST_LEGACY_CONNECTED_BY_BLE,
|
|
VENDOR_TEST_CONNECTED_WITH_TWS,
|
|
};
|
|
|
|
|
|
#endif
|