/** * @file wm_bt_def.h * * @brief Bluetooth Define * * @author WinnerMicro * * Copyright (c) 2020 Winner Microelectronics Co., Ltd. */ #ifndef WM_BT_DEF_H #define WM_BT_DEF_H /** Bluetooth Error Status */ typedef enum { TLS_BT_STATUS_SUCCESS, /**< success */ TLS_BT_STATUS_FAIL, TLS_BT_STATUS_NOT_READY, TLS_BT_STATUS_NOMEM, /**< alloc memory failed */ TLS_BT_STATUS_BUSY, TLS_BT_STATUS_DONE, /**< request already completed */ TLS_BT_STATUS_UNSUPPORTED, TLS_BT_STATUS_PARM_INVALID, TLS_BT_STATUS_UNHANDLED, TLS_BT_STATUS_AUTH_FAILURE, TLS_BT_STATUS_RMT_DEV_DOWN, TLS_BT_STATUS_AUTH_REJECTED, TLS_BT_STATUS_THREAD_FAILED, /**< create internal thread failed */ TLS_BT_STATUS_INTERNAL_ERROR, /**< controller stack internal error */ TLS_BT_STATUS_CTRL_ENABLE_FAILED, TLS_BT_STATUS_HOST_ENABLE_FAILED, TLS_BT_STATUS_CTRL_DISABLE_FAILED, TLS_BT_STATUS_HOST_DISABLE_FAILED, } tls_bt_status_t; typedef enum { TLS_BT_CTRL_IDLE = (1<<0), TLS_BT_CTRL_ENABLED = (1<<1), TLS_BT_CTRL_SLEEPING = (1<<2), TLS_BT_CTRL_BLE_ROLE_MASTER = (1<<3), TLS_BT_CTRL_BLE_ROLE_SLAVE = (1<<4), TLS_BT_CTRL_BLE_ROLE_END = (1<<5), TLS_BT_CTRL_BLE_STATE_IDLE = (1<<6), TLS_BT_CTRL_BLE_STATE_ADVERTISING = (1<<7), TLS_BT_CTRL_BLE_STATE_SCANNING = (1<<8), TLS_BT_CTRL_BLE_STATE_INITIATING = (1<<9), TLS_BT_CTRL_BLE_STATE_STOPPING = (1<<10), TLS_BT_CTRL_BLE_STATE_TESTING = (1<<11), } tls_bt_ctrl_status_t; /** Bluetooth Adapter State */ typedef enum { WM_BT_STATE_OFF, WM_BT_STATE_ON } tls_bt_state_t; /** bluetooth host statck events */ typedef enum { WM_BT_ADAPTER_STATE_CHG_EVT = (0x01<<0), WM_BT_ADAPTER_PROP_CHG_EVT = (0x01<<1), WM_BT_RMT_DEVICE_PROP_EVT = (0x01<<2), WM_BT_DEVICE_FOUND_EVT = (0x01<<3), WM_BT_DISCOVERY_STATE_CHG_EVT=(0x01<<4), WM_BT_REQUEST_EVT = (0x01<<5), WM_BT_SSP_REQUEST_EVT = (0x01<<6), WM_BT_PIN_REQUEST_EVT = (0x01<<7), WM_BT_BOND_STATE_CHG_EVT = (0x01<<8), WM_BT_ACL_STATE_CHG_EVT = (0x01<<9), WM_BT_ENERGY_INFO_EVT = (0x01<<10), WM_BT_LE_TEST_EVT = (0x01<<11), } tls_bt_host_evt_t; typedef struct { tls_bt_state_t status; /**< bluetooth adapter state */ } tls_bt_adapter_state_change_msg_t; /** Bluetooth Adapter and Remote Device property types */ typedef enum { /* Properties common to both adapter and remote device */ /** * Description - Bluetooth Device Name * Access mode - Adapter name can be GET/SET. Remote device can be GET * Data type - bt_bdname_t */ WM_BT_PROPERTY_BDNAME = 0x1, /** * Description - Bluetooth Device Address * Access mode - Only GET. * Data type - bt_bdaddr_t */ WM_BT_PROPERTY_BDADDR, /** * Description - Bluetooth Service 128-bit UUIDs * Access mode - Only GET. * Data type - Array of bt_uuid_t (Array size inferred from property length). */ WM_BT_PROPERTY_UUIDS, /** * Description - Bluetooth Class of Device as found in Assigned Numbers * Access mode - Only GET. * Data type - uint32_t. */ WM_BT_PROPERTY_CLASS_OF_DEVICE, /** * Description - Device Type - BREDR, BLE or DUAL Mode * Access mode - Only GET. * Data type - bt_device_type_t */ WM_BT_PROPERTY_TYPE_OF_DEVICE, /** * Description - Bluetooth Service Record * Access mode - Only GET. * Data type - bt_service_record_t */ WM_BT_PROPERTY_SERVICE_RECORD, /* Properties unique to adapter */ /** * Description - Bluetooth Adapter scan mode * Access mode - GET and SET * Data type - bt_scan_mode_t. */ WM_BT_PROPERTY_ADAPTER_SCAN_MODE, /** * Description - List of bonded devices * Access mode - Only GET. * Data type - Array of bt_bdaddr_t of the bonded remote devices * (Array size inferred from property length). */ WM_BT_PROPERTY_ADAPTER_BONDED_DEVICES, /** * Description - Bluetooth Adapter Discovery timeout (in seconds) * Access mode - GET and SET * Data type - uint32_t */ WM_BT_PROPERTY_ADAPTER_DISCOVERY_TIMEOUT, /* Properties unique to remote device */ /** * Description - User defined friendly name of the remote device * Access mode - GET and SET * Data type - bt_bdname_t. */ WM_BT_PROPERTY_REMOTE_FRIENDLY_NAME, /** * Description - RSSI value of the inquired remote device * Access mode - Only GET. * Data type - int32_t. */ WM_BT_PROPERTY_REMOTE_RSSI, /** * Description - Remote version info * Access mode - SET/GET. * Data type - bt_remote_version_t. */ WM_BT_PROPERTY_REMOTE_VERSION_INFO, /** * Description - Local LE features * Access mode - GET. * Data type - bt_local_le_features_t. */ WM_BT_PROPERTY_LOCAL_LE_FEATURES, WM_BT_PROPERTY_REMOTE_DEVICE_TIMESTAMP = 0xFF, } tls_bt_property_type_t; /** Bluetooth Adapter Property data structure */ typedef struct { tls_bt_property_type_t type; int len; void *val; } tls_bt_property_t; typedef struct { tls_bt_status_t status; int num_properties; tls_bt_property_t *properties; /**< bluetooth adapter property data */ } tls_bt_adapter_prop_msg_t; typedef enum { WM_BLE_SCAN_STOP = 0, WM_BLE_SCAN_PASSIVE = 1, WM_BLE_SCAN_ACTIVE = 2, } wm_ble_scan_type_t; typedef enum { WM_BLE_ADV_DATA = 0, WM_BLE_ADV_RSP_DATA, } wm_ble_gap_data_t; typedef enum{ WM_BLE_ADV_STOP = 0, WM_BLE_ADV_IND, WM_BLE_ADV_DIRECT_IND_HDC, /**/ WM_BLE_ADV_SCAN_IND, WM_BLE_ADV_NONCONN_IND, WM_BLE_ADV_DIRECT_IND_LDC, /**/ } wm_ble_adv_type_t; #define WM_BLE_GAP_EVENT_CONNECT (0x01<<0) #define WM_BLE_GAP_EVENT_DISCONNECT (0x01<<1) /* Reserved 2 */ #define WM_BLE_GAP_EVENT_CONN_UPDATE (0x01<<3) #define WM_BLE_GAP_EVENT_CONN_UPDATE_REQ (0x01<<4) #define WM_BLE_GAP_EVENT_L2CAP_UPDATE_REQ (0x01<<5) #define WM_BLE_GAP_EVENT_TERM_FAILURE (0x01<<6) #define WM_BLE_GAP_EVENT_DISC (0x01<<7) #define WM_BLE_GAP_EVENT_DISC_COMPLETE (0x01<<8) #define WM_BLE_GAP_EVENT_ADV_COMPLETE (0x01<<9) #define WM_BLE_GAP_EVENT_ENC_CHANGE (0x01<<10) #define WM_BLE_GAP_EVENT_PASSKEY_ACTION (0x01<<11) #define WM_BLE_GAP_EVENT_NOTIFY_RX (0x01<<12) #define WM_BLE_GAP_EVENT_NOTIFY_TX (0x01<<13) #define WM_BLE_GAP_EVENT_SUBSCRIBE (0x01<<14) #define WM_BLE_GAP_EVENT_MTU (0x01<<15) #define WM_BLE_GAP_EVENT_IDENTITY_RESOLVED (0x01<<16) #define WM_BLE_GAP_EVENT_REPEAT_PAIRING (0x01<<17) #define WM_BLE_GAP_EVENT_PHY_UPDATE_COMPLETE (0x01<<18) #define WM_BLE_GAP_EVENT_EXT_DISC (0x01<<19) #define WM_BLE_GAP_EVENT_PERIODIC_SYNC (0x01<<20) #define WM_BLE_GAP_EVENT_PERIODIC_REPORT (0x01<<21) #define WM_BLE_GAP_EVENT_PERIODIC_SYNC_LOST (0x01<<22) #define WM_BLE_GAP_EVENT_SCAN_REQ_RCVD (0x01<<23) #define WM_BLE_GAP_EVENT_PERIODIC_TRANSFER (0x01<<24) #define WM_BLE_GAP_EVENT_HOST_SHUTDOWN (0x01<<31) /** Bluetooth Address */ typedef struct { uint8_t address[6]; } __attribute__((packed))tls_bt_addr_t; typedef struct { tls_bt_status_t status; tls_bt_addr_t *address; int num_properties; tls_bt_property_t *properties; /**< bluetooth adapter property data */ } tls_bt_remote_dev_prop_msg_t; typedef struct { int num_properties; tls_bt_property_t *properties; /**< bluetooth adapter property data */ } tls_bt_device_found_msg_t; /** Bluetooth Adapter Discovery state */ typedef enum { WM_BT_DISCOVERY_STOPPED, WM_BT_DISCOVERY_STARTED } tls_bt_discovery_state_t; typedef struct { tls_bt_discovery_state_t state; } tls_bt_discovery_state_chg_msg_t; /** Bluetooth Device Name */ typedef struct { uint8_t name[249]; } __attribute__((packed))tls_bt_bdname_t; typedef struct { tls_bt_addr_t *remote_bd_addr; tls_bt_bdname_t *bd_name; uint32_t cod; uint8_t min_16_digit; } tls_bt_pin_request_msg_t; /** Bluetooth SSP Bonding Variant */ typedef enum { WM_BT_SSP_VARIANT_PASSKEY_CONFIRMATION, WM_BT_SSP_VARIANT_PASSKEY_ENTRY, WM_BT_SSP_VARIANT_CONSENT, WM_BT_SSP_VARIANT_PASSKEY_NOTIFICATION } tls_bt_ssp_variant_t; /** Bluetooth PinKey Code */ typedef struct { uint8_t pin[16]; } __attribute__((packed))tls_bt_pin_code_t; typedef struct { tls_bt_addr_t *remote_bd_addr; tls_bt_bdname_t *bd_name; uint32_t cod; tls_bt_ssp_variant_t pairing_variant; uint32_t pass_key; } tls_bt_ssp_request_msg_t; /** Bluetooth Bond state */ typedef enum { WM_BT_BOND_STATE_NONE, WM_BT_BOND_STATE_BONDING, WM_BT_BOND_STATE_BONDED } tls_bt_bond_state_t; typedef struct { tls_bt_status_t status; tls_bt_addr_t *remote_bd_addr; tls_bt_bond_state_t state; } tls_bt_bond_state_chg_msg_t; /** Bluetooth ACL connection state */ typedef enum { WM_BT_ACL_STATE_CONNECTED, WM_BT_ACL_STATE_DISCONNECTED } tls_bt_acl_state_t; typedef struct { tls_bt_status_t status; tls_bt_addr_t *remote_address; uint8_t link_type; tls_bt_acl_state_t state; } tls_bt_acl_state_chg_msg_t; typedef struct { uint8_t status; uint8_t ctrl_state; /* stack reported state */ uint64_t tx_time; /* in ms */ uint64_t rx_time; /* in ms */ uint64_t idle_time; /* in ms */ uint64_t energy_used; /* a product of mA, V and ms */ } __attribute__((packed))tls_bt_activity_energy_info; typedef struct { tls_bt_activity_energy_info *energy_info; } tls_bt_energy_info_msg_t; typedef struct { uint8_t status; uint32_t count; } tls_bt_ble_test_msg_t; typedef union { tls_bt_adapter_state_change_msg_t adapter_state_change; tls_bt_adapter_prop_msg_t adapter_prop; tls_bt_remote_dev_prop_msg_t remote_device_prop; tls_bt_device_found_msg_t device_found; tls_bt_discovery_state_chg_msg_t discovery_state; tls_bt_pin_request_msg_t pin_request; tls_bt_ssp_request_msg_t ssp_request; tls_bt_bond_state_chg_msg_t bond_state; tls_bt_acl_state_chg_msg_t acl_state; tls_bt_energy_info_msg_t energy_info; tls_bt_ble_test_msg_t ble_test; } tls_bt_host_msg_t; /** BT host callback function */ typedef void (*tls_bt_host_callback_t)(tls_bt_host_evt_t event, tls_bt_host_msg_t *p_data); typedef enum { TLS_BT_LOG_NONE = 0, TLS_BT_LOG_ERROR = 1, TLS_BT_LOG_WARNING = 2, TLS_BT_LOG_API = 3, TLS_BT_LOG_EVENT = 4, TLS_BT_LOG_DEBUG = 5, TLS_BT_LOG_VERBOSE = 6, } tls_bt_log_level_t; typedef struct { uint8_t uart_index; /**< uart port index, 1~4 */ uint32_t band_rate; /**< band rate: 115200 ~ 2M */ uint8_t data_bit; /**< data bit:5 ~ 8 */ uint8_t verify_bit; /**< 0:NONE, 1 ODD, 2 EVEN */ uint8_t stop_bit; /**< 0:1bit; 1:1.5bit; 2:2bits */ } tls_bt_hci_if_t; typedef enum { TLS_BLE_PWR_TYPE_CONN_HDL0, TLS_BLE_PWR_TYPE_CONN_HDL1, TLS_BLE_PWR_TYPE_CONN_HDL2, TLS_BLE_PWR_TYPE_CONN_HDL3, TLS_BLE_PWR_TYPE_CONN_HDL4, TLS_BLE_PWR_TYPE_CONN_HDL5, TLS_BLE_PWR_TYPE_CONN_HDL6, TLS_BLE_PWR_TYPE_CONN_HDL7, TLS_BLE_PWR_TYPE_CONN_HDL8, TLS_BLE_PWR_TYPE_ADV, TLS_BLE_PWR_TYPE_SCAN, TLS_BLE_PWR_TYPE_DEFAULT, } tls_ble_power_type_t; typedef enum { WM_AUDIO_OVER_HCI = 0, WM_AUDIO_INTERNAL_MODE, } tls_sco_data_path_t; typedef struct { void (*notify_controller_avaiable_hci_buffer)(int cnt); void (*notify_host_recv_h4)(uint8_t *ptr, uint16_t length); } tls_bt_host_if_t; /***************************************************************************** ** Constants and Type Definitions *****************************************************************************/ /** Attribute permissions */ #define WM_GATT_PERM_READ (1 << 0) /**< bit 0 - 0x0001 */ #define WM_GATT_PERM_READ_ENCRYPTED (1 << 1) /**< bit 1 - 0x0002 */ #define WM_GATT_PERM_READ_ENC_MITM (1 << 2) /**< bit 2 - 0x0004 */ #define WM_GATT_PERM_WRITE (1 << 4) /**< bit 4 - 0x0010 */ #define WM_GATT_PERM_WRITE_ENCRYPTED (1 << 5) /**< bit 5 - 0x0020 */ #define WM_GATT_PERM_WRITE_ENC_MITM (1 << 6) /**< bit 6 - 0x0040 */ #define WM_GATT_PERM_WRITE_SIGNED (1 << 7) /**< bit 7 - 0x0080 */ #define WM_GATT_PERM_WRITE_SIGNED_MITM (1 << 8) /**< bit 8 - 0x0100 */ /** definition of characteristic properties */ #define WM_GATT_CHAR_PROP_BIT_BROADCAST (1 << 0) /**< 0x01 */ #define WM_GATT_CHAR_PROP_BIT_READ (1 << 1) /**< 0x02 */ #define WM_GATT_CHAR_PROP_BIT_WRITE_NR (1 << 2) /**< 0x04 */ #define WM_GATT_CHAR_PROP_BIT_WRITE (1 << 3) /**< 0x08 */ #define WM_GATT_CHAR_PROP_BIT_NOTIFY (1 << 4) /**< 0x10 */ #define WM_GATT_CHAR_PROP_BIT_INDICATE (1 << 5) /**< 0x20 */ #define WM_GATT_CHAR_PROP_BIT_AUTH (1 << 6) /**< 0x40 */ #define WM_GATT_CHAR_PROP_BIT_EXT_PROP (1 << 7) /**< 0x80 */ #define WM_BLE_MAX_ATTR_LEN 600 /** max client application WM BLE Client can support */ #ifndef WM_BLE_CLIENT_MAX #define WM_BLE_CLIENT_MAX 3 #endif /** max server application WM BLE Server can support */ #define WM_BLE_SERVER_MAX 4 #define WM_BLE_ATTRIBUTE_MAX 50 #ifndef WM_BLE_SERVER_SECURITY #define WM_BLE_SERVER_SECURITY BTA_DM_BLE_SEC_NONE #endif #define WM_BLE_INVALID_IF 0xFF #define WM_BLE_INVALID_CONN 0xFFFF #define WM_BLE_GATT_TRANSPORT_LE 0x02 #define WM_BLE_GATT_TRANSPORT_BR_EDR 0x01 #define WM_BLE_GATT_TRANSPORT_LE_BR_EDR 0x03 #define WM_BLE_MAX_PDU_LENGTH 251 /** BLE events */ typedef enum { /** BLE Client events */ WM_BLE_CL_REGISTER_EVT, /**< BLE client is registered. */ WM_BLE_CL_DEREGISTER_EVT, /**< BLE client is deregistered. */ WM_BLE_CL_READ_CHAR_EVT, WM_BLE_CL_WRITE_CHAR_EVT, WM_BLE_CL_PREP_WRITE_EVT, WM_BLE_CL_EXEC_CMPL_EVT, /**< Execute complete event */ WM_BLE_CL_SEARCH_CMPL_EVT, /**< GATT discovery complete event */ WM_BLE_CL_SEARCH_RES_EVT, /**< GATT discovery result event */ WM_BLE_CL_READ_DESCR_EVT, WM_BLE_CL_WRITE_DESCR_EVT, WM_BLE_CL_NOTIF_EVT, /**< GATT attribute notification event */ WM_BLE_CL_OPEN_EVT, /**< BLE open request status event */ WM_BLE_CL_CLOSE_EVT, /**< GATTC close request status event */ WM_BLE_CL_LISTEN_EVT, WM_BLE_CL_CFG_MTU_EVT, /**< configure MTU complete event */ WM_BLE_CL_CONGEST_EVT, /**< GATT congestion/uncongestion event */ WM_BLE_CL_REPORT_DB_EVT, WM_BLE_CL_REG_NOTIFY_EVT, WM_BLE_CL_DEREG_NOTIFY_EVT, /** BLE Server events */ WM_BLE_SE_REGISTER_EVT, /**< BLE Server is registered */ WM_BLE_SE_DEREGISTER_EVT, /**< BLE Server is deregistered */ WM_BLE_SE_CONNECT_EVT, WM_BLE_SE_DISCONNECT_EVT, WM_BLE_SE_CREATE_EVT, /**< Service is created */ WM_BLE_SE_ADD_INCL_SRVC_EVT, WM_BLE_SE_ADD_CHAR_EVT, /**< char data is added */ WM_BLE_SE_ADD_CHAR_DESCR_EVT, WM_BLE_SE_START_EVT, /**< Service is started */ WM_BLE_SE_STOP_EVT, /**< Service is stopped */ WM_BLE_SE_DELETE_EVT, WM_BLE_SE_READ_EVT, /**< Read request from client */ WM_BLE_SE_WRITE_EVT, /**< Write request from client */ WM_BLE_SE_EXEC_WRITE_EVT, /**< Execute Write request from client */ WM_BLE_SE_CONFIRM_EVT, /**< Confirm event */ WM_BLE_SE_RESP_EVT, WM_BLE_SE_CONGEST_EVT, /**< Congestion event */ WM_BLE_SE_MTU_EVT, } tls_ble_evt_t; /* WM BLE Client Host callback events */ /* Client callback function events */ /** Bluetooth 128-bit UUID */ typedef struct { uint8_t uu[16]; } tls_bt_uuid_t; /* callback event data for WM_BLE_CL_REGISTER_EVT/ event */ typedef struct { uint8_t status; /**< operation status */ uint8_t client_if; /**< Client interface ID */ tls_bt_uuid_t app_uuid; /**< Client uuid*/ } tls_ble_cl_register_msg_t; /** callback event data for WM_BLE_CL_READ_CHAR_EVT /WM_BLE_CL_READ_CHAR_EVTevent */ typedef struct { uint16_t conn_id; uint8_t status; uint16_t handle; uint16_t len; uint8_t *value; uint16_t value_type; } tls_ble_cl_read_msg_t; /** callback event data for WM_BLE_CL_WRITE_CHAR_EVT/WM_BLE_CL_PREP_WRITE_EVT/WM_BLE_CL_WRITE_DESCR_EVT event */ typedef struct { uint16_t conn_id; uint8_t status; uint16_t handle; } tls_ble_cl_write_msg_t; /** callback event data for WM_BLE_CL_EXEC_CMPL_EVT event */ typedef struct { uint16_t conn_id; uint8_t status; } tls_ble_cl_exec_cmpl_msg_t; /** callback event data for WM_BLE_CL_SEARCH_CMPL_EVT event */ typedef struct { uint16_t conn_id; uint8_t status; /**< operation status */ } tls_ble_cl_search_cmpl_msg_t; /** callback event data for WM_BLE_CL_SEARCH_RES_EVT event */ typedef struct { uint16_t conn_id; tls_bt_uuid_t uuid; uint8_t inst_id; } tls_ble_cl_search_res_msg_t; /** callback event data for WM_BLE_CL_NOTIF_EVT event */ typedef struct { uint16_t conn_id; uint8_t *value; uint8_t bda[6]; uint16_t handle; uint16_t len; bool is_notify; } tls_ble_cl_notify_msg_t; /** callback event data for WM_BLE_CL_OPEN_EVT event */ typedef struct { uint16_t conn_id; uint8_t status; /**< operation status */ uint8_t client_if; /**< Client interface ID */ uint8_t bd_addr[6]; } tls_ble_cl_open_msg_t; /** callback event data for WM_BLE_CL_CLOSE_EVT event */ typedef struct { uint16_t conn_id; uint8_t status; uint8_t client_if; uint8_t remote_bda[6]; uint16_t reason; /**< disconnect reason code, not useful when connect event is reported */ } tls_ble_cl_close_msg_t; /** callback event data for WM_BLE_CL_LISTEN_EVT event */ typedef struct { uint8_t status; uint8_t client_if; } tls_ble_cl_listen_msg_t; /** callback event data for WM_BLE_CL_CFG_MTU_EVT event */ typedef struct { uint16_t conn_id; uint8_t status; uint16_t mtu; } tls_ble_cl_cfg_mtu_msg_t; typedef struct { uint16_t conn_id; bool congested; /**< congestion indicator */ } tls_ble_cl_congest_msg_t; typedef enum { WM_BTGATT_DB_PRIMARY_SERVICE, WM_BTGATT_DB_SECONDARY_SERVICE, WM_BTGATT_DB_INCLUDED_SERVICE, WM_BTGATT_DB_CHARACTERISTIC, WM_BTGATT_DB_DESCRIPTOR, } tls_bt_gatt_db_attribute_type_t; typedef struct { uint16_t id; tls_bt_uuid_t uuid; tls_bt_gatt_db_attribute_type_t type; uint16_t attribute_handle; /* * If |type| is |BTGATT_DB_PRIMARY_SERVICE|, or * |BTGATT_DB_SECONDARY_SERVICE|, this contains the start and end attribute * handles. */ uint16_t start_handle; uint16_t end_handle; /* * If |type| is |BTGATT_DB_CHARACTERISTIC|, this contains the properties of * the characteristic. */ uint8_t properties; } tls_btgatt_db_element_t; typedef struct { uint16_t conn_id; tls_btgatt_db_element_t *db; int count; uint8_t status; } tls_ble_cl_gatt_db_msg_t; typedef struct { uint16_t conn_id; uint8_t status; bool reg; uint16_t handle; } tls_ble_cl_reg_notify_msg_t; /* WM BLE Server Host callback events */ /* Server callback function events */ /** callback event data for WM_BLE_SE_REGISTER_EVT/WM_BLE_SE_DEREGISTER_EVT event */ typedef struct { uint8_t status; /* operation status */ uint8_t server_if; /* Server interface ID */ tls_bt_uuid_t app_uuid; } tls_ble_se_register_msg_t; /** callback event data for WM_BLE_SE_CONNECT_EVT/WM_BLE_SE_DISCONNECT_EVT event */ typedef struct { uint16_t conn_id; uint8_t server_if; /**< Server interface ID */ bool connected; uint16_t reason; uint8_t addr[6]; } tls_ble_se_connect_msg_t; typedef tls_ble_se_connect_msg_t tls_ble_se_disconnect_msg_t; /** callback event data for WM_BLE_SE_CREATE_EVT event */ typedef struct { uint8_t status; /**< operation status */ uint8_t server_if; bool is_primary; uint8_t inst_id; tls_bt_uuid_t uuid; uint16_t service_id; } tls_ble_se_create_msg_t; /** callback event data for WM_BLE_SE_ADD_INCL_SRVC_EVT event */ typedef struct { uint8_t status; /**< operation status */ uint8_t server_if; uint16_t service_id; uint16_t attr_id; } tls_ble_se_add_incl_srvc_msg_t; /** callback event data for WM_BLE_SE_ADDCHAR_EVT event */ typedef struct { uint8_t status; /**< operation status */ uint8_t server_if; tls_bt_uuid_t uuid; uint16_t service_id; uint16_t attr_id; } tls_ble_se_add_char_msg_t; typedef tls_ble_se_add_char_msg_t tls_ble_se_add_char_descr_msg_t; /** callback event data for WM_BLE_SE_START_EVT event */ typedef struct { uint8_t status; /**< operation status */ uint8_t server_if; uint16_t service_id; } tls_ble_se_start_msg_t; typedef tls_ble_se_start_msg_t tls_ble_se_stop_msg_t; typedef tls_ble_se_start_msg_t tls_ble_se_delete_msg_t; typedef struct { uint16_t conn_id; uint32_t trans_id; uint8_t remote_bda[6]; uint16_t handle; uint16_t offset; bool is_long; } tls_ble_se_read_msg_t; typedef struct { uint16_t conn_id; uint32_t trans_id; uint8_t remote_bda[6]; uint16_t handle; /**< attribute handle */ uint16_t offset; /**< attribute value offset, if no offset is needed for the command, ignore it */ uint16_t len; /**< length of attribute value */ bool need_rsp; /**< need write response */ bool is_prep; /**< is prepare write */ uint8_t *value; /**< the actual attribute value */ } tls_ble_se_write_msg_t; typedef struct { uint16_t conn_id; uint32_t trans_id; uint8_t remote_bda[6]; uint8_t exec_write; } tls_ble_se_exec_write_msg_t; typedef struct { uint16_t conn_id; uint8_t status; /**< operation status */ } tls_ble_se_confirm_msg_t; typedef struct { uint8_t status; /* operation status */ uint16_t conn_id; uint16_t trans_id; } tls_ble_se_response_msg_t; typedef struct { uint16_t conn_id; bool congested; /**< congestion indicator */ } tls_ble_se_congest_msg_t; typedef struct { uint16_t conn_id; uint16_t mtu; } tls_ble_se_mtu_msg_t; /** Union of data associated with HD callback */ typedef union { tls_ble_cl_register_msg_t cli_register; /**< WM_BLE_CL_REGISTER_EVT */ tls_ble_cl_read_msg_t cli_read; /**< WM_BLE_CL_READ_EVT */ tls_ble_cl_write_msg_t cli_write; /**< WM_BLE_CL_WRITE_EVT */ tls_ble_cl_exec_cmpl_msg_t cli_exec_cmpl; /**< WM_BLE_CL_EXEC_CMPL_EVT */ tls_ble_cl_search_cmpl_msg_t cli_search_cmpl; /**< WM_BLE_CL_SEARCH_CMPL_EVT */ tls_ble_cl_search_res_msg_t cli_search_res; /**< WM_BLE_CL_SEARCH_RES_EVT */ tls_ble_cl_notify_msg_t cli_notif; /**< WM_BLE_CL_NOTIF_EVT */ tls_ble_cl_open_msg_t cli_open; /**< WM_BLE_CL_OPEN_EVT */ tls_ble_cl_close_msg_t cli_close; /**< WM_BLE_CL_CLOSE_EVT */ tls_ble_cl_listen_msg_t cli_listen; /**< WM_BLE_CL_LISTEN_EVT */ tls_ble_cl_cfg_mtu_msg_t cli_cfg_mtu; /**< WM_BLE_CL_CFG_MTU_EVT */ tls_ble_cl_congest_msg_t cli_congest; /**< WM_BLE_CL_CONGEST_EVT */ tls_ble_cl_gatt_db_msg_t cli_db; /* WM_BLE_CL_REPORT_DB_EVT*/ tls_ble_cl_reg_notify_msg_t cli_reg_notify; tls_ble_se_register_msg_t ser_register; /**< WM_BLE_SE_REGISTER_EVT */ tls_ble_se_connect_msg_t ser_connect; /**< WM_BLE_SE_OPEN_EVT */ tls_ble_se_disconnect_msg_t ser_disconnect; /**< WM_BLE_SE_CLOSE_EVT */ tls_ble_se_create_msg_t ser_create; /**< WM_BLE_SE_CREATE_EVT */ tls_ble_se_add_incl_srvc_msg_t ser_add_incl_srvc; tls_ble_se_add_char_msg_t ser_add_char; /**< WM_BLE_SE_ADDCHAR_EVT */ tls_ble_se_add_char_descr_msg_t ser_add_char_descr; tls_ble_se_start_msg_t ser_start_srvc; /**< WM_BLE_SE_START_EVT */ tls_ble_se_stop_msg_t ser_stop_srvc; /**< WM_BLE_SE_STOP_EVT */ tls_ble_se_delete_msg_t ser_delete_srvc; tls_ble_se_read_msg_t ser_read; /**< WM_BLE_SE_READ_EVT */ tls_ble_se_write_msg_t ser_write; /**< WM_BLE_SE_WRITE_EVT */ tls_ble_se_exec_write_msg_t ser_exec_write; /**< WM_BLE_SE_EXEC_WRITE_EVT */ tls_ble_se_confirm_msg_t ser_confirm; /**< WM_BLE_SE_CONFIRM_EVT */ tls_ble_se_congest_msg_t ser_congest; /**< WM_BLE_CL_CONGEST_EVT */ tls_ble_se_mtu_msg_t ser_mtu; tls_ble_se_response_msg_t ser_resp; } tls_ble_msg_t; /** WM BLE Client callback function */ typedef void (*tls_ble_callback_t)(tls_ble_evt_t event, tls_ble_msg_t *p_data); typedef void (*tls_ble_output_func_ptr)(uint8_t *p_data, uint32_t length); /** BLE dm events */ typedef enum { WM_BLE_DM_SET_ADV_DATA_CMPL_EVT = (0x01<<0), /**< BLE DM set advertisement data completed*/ WM_BLE_DM_TIMER_EXPIRED_EVT = (0x01<<1), /**< BLE DM timer expired event. */ WM_BLE_DM_TRIGER_EVT = (0x01<<2), /**< BLE DM event trigered event, async processing*/ WM_BLE_DM_SCAN_RES_EVT = (0x01<<3), /**< BLE DM scan result evt*/ WM_BLE_DM_SET_SCAN_PARAM_CMPL_EVT=(0x01<<4), WM_BLE_DM_REPORT_RSSI_EVT = (0x01<<5), WM_BLE_DM_SCAN_RES_CMPL_EVT = (0x01<<6), WM_BLE_DM_SEC_EVT = (0x01<<7), WM_BLE_DM_ADV_STARTED_EVT = (0x01<<8), WM_BLE_DM_ADV_STOPPED_EVT = (0x01<<9), WM_BLE_DM_HOST_SHUTDOWN_EVT = (0x01<<31), } tls_ble_dm_evt_t; /** callback event data for WM_BLE_DM_SET_ADV_DATA */ typedef struct { uint8_t status; /**< operation status */ } tls_ble_dm_set_adv_data_cmpl_msg_t; typedef struct { uint8_t status; uint8_t dm_id; //dummy value; who care this value; } tls_ble_dm_set_scan_param_cmpl_msg_t; typedef struct { uint32_t id; int32_t func_ptr; } tls_ble_dm_timer_expired_msg_t; typedef tls_ble_dm_timer_expired_msg_t tls_ble_dm_evt_triger_msg_t; typedef struct { uint8_t address[6]; /**< device address */ int8_t rssi; /**< signal strength */ uint8_t *value; /**< adv /scan resp value */ } tls_ble_dm_scan_res_msg_t; typedef struct { uint8_t address[6]; int8_t rssi; uint8_t status; } tls_ble_report_rssi_msg_t; typedef struct { uint8_t address[6]; int8_t transport; uint8_t status; } tls_ble_sec_msg_t; typedef struct { uint16_t num_responses; } tls_ble_dm_scan_res_cmpl_msg_t; typedef tls_ble_dm_set_adv_data_cmpl_msg_t tls_ble_dm_adv_cmpl_msg_t; typedef union { tls_ble_dm_set_adv_data_cmpl_msg_t dm_set_adv_data_cmpl; tls_ble_dm_timer_expired_msg_t dm_timer_expired; tls_ble_dm_evt_triger_msg_t dm_evt_trigered; tls_ble_dm_scan_res_msg_t dm_scan_result; tls_ble_dm_set_scan_param_cmpl_msg_t dm_set_scan_param_cmpl; tls_ble_dm_scan_res_cmpl_msg_t dm_scan_result_cmpl; tls_ble_report_rssi_msg_t dm_report_rssi; tls_ble_sec_msg_t dm_sec_result; tls_ble_dm_adv_cmpl_msg_t dm_adv_cmpl; } tls_ble_dm_msg_t; typedef struct { bool set_scan_rsp; bool include_name; bool include_txpower; bool pure_data; int min_interval; int max_interval; int appearance; uint16_t manufacturer_len; uint8_t manufacturer_data[31]; uint16_t service_data_len; uint8_t service_data[31]; uint16_t service_uuid_len; uint8_t service_uuid[31]; } __attribute__((packed)) tls_ble_dm_adv_data_t; typedef struct { uint16_t adv_int_min; /* minimum adv interval */ uint16_t adv_int_max; /* maximum adv interval */ tls_bt_addr_t *dir_addr; } __attribute__((packed)) tls_ble_dm_adv_param_t; typedef struct { uint16_t adv_int_min; /* minimum adv interval */ uint16_t adv_int_max; /* maximum adv interval */ uint8_t adv_type; uint8_t own_addr_type; uint8_t chnl_map; uint8_t afp; uint8_t peer_addr_type; tls_bt_addr_t *dir_addr; } __attribute__((packed)) tls_ble_dm_adv_ext_param_t; /** WM BLE device manager callback function */ typedef void (*tls_ble_dm_callback_t)(tls_ble_dm_evt_t event, tls_ble_dm_msg_t *p_data); /** WM BLE dm timer callback function */ typedef void (*tls_ble_dm_timer_callback_t)(uint8_t timer_id); /** WM BLE device evt triger callback function */ typedef void (*tls_ble_dm_triger_callback_t)(uint32_t evt_id); typedef void (*tls_ble_scan_res_notify_t)(tls_ble_dm_scan_res_msg_t *msg); /*********************************************************************************************************/ /* Bluetooth AV connection states */ typedef enum { WM_BTAV_CONNECTION_STATE_DISCONNECTED = 0, WM_BTAV_CONNECTION_STATE_CONNECTING, WM_BTAV_CONNECTION_STATE_CONNECTED, WM_BTAV_CONNECTION_STATE_DISCONNECTING } tls_btav_connection_state_t; /* Bluetooth AV datapath states */ typedef enum { WM_BTAV_AUDIO_STATE_REMOTE_SUSPEND = 0, WM_BTAV_AUDIO_STATE_STOPPED, WM_BTAV_AUDIO_STATE_STARTED, } tls_btav_audio_state_t; /** BR-EDR A2DP sink events */ typedef enum { WMBT_A2DP_CONNECTION_STATE_EVT, WMBT_A2DP_AUDIO_STATE_EVT, WMBT_A2DP_AUDIO_CONFIG_EVT, WMBT_A2DP_AUDIO_PAYLOAD_EVT, } tls_bt_av_evt_t; typedef struct { tls_btav_connection_state_t stat; tls_bt_addr_t *bd_addr; } tls_bt_av_connection_state_t; typedef struct { tls_btav_audio_state_t stat; tls_bt_addr_t *bd_addr; } tls_bt_av_audio_state_t; typedef struct { tls_bt_addr_t *bd_addr; uint32_t sample_rate; uint8_t channel_count; } tls_bt_av_audio_config_t; typedef struct { tls_bt_addr_t *bd_addr; uint8_t audio_format; uint8_t *payload; uint16_t payload_length; } tls_bt_av_audio_payload_t; typedef union { tls_bt_av_connection_state_t av_connection_state; tls_bt_av_audio_state_t av_audio_state; tls_bt_av_audio_config_t av_audio_config; tls_bt_av_audio_payload_t av_audio_payload; } tls_bt_av_msg_t; /** WM BT A2DP SINK callback function */ typedef void (*tls_bt_a2dp_sink_callback_t)(tls_bt_av_evt_t event, tls_bt_av_msg_t *p_data); /**WM BT A2DP SRC callback function */ ///////////////TODO//////////////// typedef void (*tls_bt_a2dp_src_callback_t)(tls_bt_av_evt_t event, tls_bt_av_msg_t *p_data); /** BR-EDR WMBT-RC Controller callback events */ #define WM_BTRC_MAX_ATTR_STR_LEN 255 #define WM_BTRC_UID_SIZE 8 #define WM_BTRC_MAX_APP_SETTINGS 8 #define WM_BTRC_MAX_FOLDER_DEPTH 4 #define WM_BTRC_MAX_APP_ATTR_SIZE 16 #define WM_BTRC_MAX_ELEM_ATTR_SIZE 7 typedef uint8_t tls_btrc_uid_t[WM_BTRC_UID_SIZE]; typedef enum { WM_BTRC_PLAYSTATE_STOPPED = 0x00, /* Stopped */ WM_BTRC_PLAYSTATE_PLAYING = 0x01, /* Playing */ WM_BTRC_PLAYSTATE_PAUSED = 0x02, /* Paused */ WM_BTRC_PLAYSTATE_FWD_SEEK = 0x03, /* Fwd Seek*/ WM_BTRC_PLAYSTATE_REV_SEEK = 0x04, /* Rev Seek*/ WM_BTRC_PLAYSTATE_ERROR = 0xFF, /* Error */ } tls_btrc_play_status_t; typedef enum { WM_BTRC_FEAT_NONE = 0x00, /* AVRCP 1.0 */ WM_BTRC_FEAT_METADATA = 0x01, /* AVRCP 1.3 */ WM_BTRC_FEAT_ABSOLUTE_VOLUME = 0x02, /* Supports TG role and volume sync */ WM_BTRC_FEAT_BROWSE = 0x04, /* AVRCP 1.4 and up, with Browsing support */ } tls_btrc_remote_features_t; typedef enum { WM_BTRC_NOTIFICATION_TYPE_INTERIM = 0, WM_BTRC_NOTIFICATION_TYPE_CHANGED = 1, } tls_btrc_notification_type_t; typedef enum { WM_BTRC_PLAYER_ATTR_EQUALIZER = 0x01, WM_BTRC_PLAYER_ATTR_REPEAT = 0x02, WM_BTRC_PLAYER_ATTR_SHUFFLE = 0x03, WM_BTRC_PLAYER_ATTR_SCAN = 0x04, } tls_btrc_player_attr_t; typedef enum { WM_BTRC_MEDIA_ATTR_TITLE = 0x01, WM_BTRC_MEDIA_ATTR_ARTIST = 0x02, WM_BTRC_MEDIA_ATTR_ALBUM = 0x03, WM_BTRC_MEDIA_ATTR_TRACK_NUM = 0x04, WM_BTRC_MEDIA_ATTR_NUM_TRACKS = 0x05, WM_BTRC_MEDIA_ATTR_GENRE = 0x06, WM_BTRC_MEDIA_ATTR_PLAYING_TIME = 0x07, } tls_btrc_media_attr_t; typedef enum { WM_BTRC_PLAYER_VAL_OFF_REPEAT = 0x01, WM_BTRC_PLAYER_VAL_SINGLE_REPEAT = 0x02, WM_BTRC_PLAYER_VAL_ALL_REPEAT = 0x03, WM_BTRC_PLAYER_VAL_GROUP_REPEAT = 0x04 } tls_btrc_player_repeat_val_t; typedef enum { WM_BTRC_EVT_PLAY_STATUS_CHANGED = 0x01, WM_BTRC_EVT_TRACK_CHANGE = 0x02, WM_BTRC_EVT_TRACK_REACHED_END = 0x03, WM_BTRC_EVT_TRACK_REACHED_START = 0x04, WM_BTRC_EVT_PLAY_POS_CHANGED = 0x05, WM_BTRC_EVT_APP_SETTINGS_CHANGED = 0x08, } tls_btrc_event_id_t; typedef struct { uint8_t num_attr; uint8_t attr_ids[WM_BTRC_MAX_APP_SETTINGS]; uint8_t attr_values[WM_BTRC_MAX_APP_SETTINGS]; } tls_btrc_player_settings_t; typedef struct { uint32_t attr_id; uint8_t text[WM_BTRC_MAX_ATTR_STR_LEN]; } tls_btrc_element_attr_val_t; typedef struct { uint8_t attr_id; uint8_t num_val; uint8_t attr_val[WM_BTRC_MAX_APP_ATTR_SIZE]; } tls_btrc_player_app_attr_t; typedef struct { uint8_t val; uint16_t charset_id; uint16_t str_len; uint8_t *p_str; } tls_btrc_player_app_ext_attr_val_t; typedef struct { uint8_t attr_id; uint16_t charset_id; uint16_t str_len; uint8_t *p_str; uint8_t num_val; tls_btrc_player_app_ext_attr_val_t ext_attr_val[WM_BTRC_MAX_APP_ATTR_SIZE]; } tls_btrc_player_app_ext_attr_t; typedef union { tls_btrc_play_status_t play_status; tls_btrc_uid_t track; /* queue position in NowPlaying */ uint32_t song_pos; tls_btrc_player_settings_t player_setting; } tls_btrc_register_notification_t; typedef enum { WM_BTRC_PASSTHROUGH_RSP_EVT, WM_BTRC_GROUPNAVIGATION_RSP_EVT, WM_BTRC_CONNECTION_STATE_EVT, WM_BTRC_CTRL_GETRCFEATURES_EVT, WM_BTRC_CTRL_SETPLAYERAPPLICATIONSETTING_RSP_EVT, WM_BTRC_CTRL_PLAYERAPPLICATIONSETTING_EVT, WM_BTRC_CTRL_PLAYERAPPLICATIONSETTING_CHANGED_EVT, WM_BTRC_CTRL_SETABSVOL_CMD_EVT, WM_BTRC_CTRL_REGISTERNOTIFICATION_ABS_VOL_EVT, WM_BTRC_CTRL_TRACK_CHANGED_EVT, WM_BTRC_CTRL_PLAY_POSITION_CHANGED_EVT, WM_BTRC_CTRL_PLAY_STATUS_CHANGED_EVT, } tls_btrc_ctrl_evt_t; typedef struct { int id; int key_state; } tls_btrc_passthrough_rsp_msg_t; typedef struct { int id; int key_state; } tls_btrc_groupnavigation_rsp_msg_t; typedef struct { uint8_t state; tls_bt_addr_t *bd_addr; } tls_btrc_connection_state_msg_t; typedef struct { tls_bt_addr_t *bd_addr; int features; } tls_btrc_ctrl_getrcfeatures_msg_t; typedef struct { tls_bt_addr_t *bd_addr; uint8_t abs_vol; uint8_t label; } tls_btrc_ctrl_setabsvol_msg_t; typedef struct { tls_bt_addr_t *bd_addr; uint8_t label; } tls_btrc_ctrl_registernotification_abs_vol_msg_t; typedef struct { tls_bt_addr_t *bd_addr; uint8_t accepted; } tls_btrc_ctrl_setplayerapplicationsetting_rsp_msg_t; typedef struct { tls_bt_addr_t *bd_addr; uint8_t num_attr; tls_btrc_player_app_attr_t *app_attrs; uint8_t num_ext_attr; tls_btrc_player_app_ext_attr_t *ext_attrs; } tls_btrc_ctrl_playerapplicationsetting_msg_t; typedef struct { tls_bt_addr_t *bd_addr; tls_btrc_player_settings_t *p_vals; } tls_btrc_ctrl_playerapplicationsetting_changed_msg_t; typedef struct { tls_bt_addr_t *bd_addr; uint8_t num_attr; tls_btrc_element_attr_val_t *p_attrs; } tls_btrc_ctrl_track_changed_msg_t; typedef struct { tls_bt_addr_t *bd_addr; uint32_t song_len; uint32_t song_pos; } tls_btrc_ctrl_play_position_changed_msg_t; typedef struct { tls_bt_addr_t *bd_addr; tls_btrc_play_status_t play_status; } tls_btrc_ctrl_play_status_changed_msg_t; typedef union { tls_btrc_passthrough_rsp_msg_t passthrough_rsp; tls_btrc_groupnavigation_rsp_msg_t groupnavigation_rsp; tls_btrc_connection_state_msg_t connection_state; tls_btrc_ctrl_getrcfeatures_msg_t getrcfeatures; tls_btrc_ctrl_setabsvol_msg_t setabsvol; tls_btrc_ctrl_registernotification_abs_vol_msg_t registernotification_abs_vol; tls_btrc_ctrl_setplayerapplicationsetting_rsp_msg_t setplayerapplicationsetting_rsp; tls_btrc_ctrl_playerapplicationsetting_msg_t playerapplicationsetting; tls_btrc_ctrl_playerapplicationsetting_changed_msg_t playerapplicationsetting_changed; tls_btrc_ctrl_track_changed_msg_t track_changed; tls_btrc_ctrl_play_position_changed_msg_t play_position_changed; tls_btrc_ctrl_play_status_changed_msg_t play_status_changed; } tls_btrc_ctrl_msg_t; /** WM BT RC CTRL callback function */ typedef void (*tls_btrc_ctrl_callback_t)(tls_btrc_ctrl_evt_t event, tls_btrc_ctrl_msg_t *p_data); typedef enum { WM_BTRC_REMOTE_FEATURE_EVT, WM_BTRC_GET_PLAY_STATUS_EVT, WM_BTRC_LIST_PLAYER_APP_ATTR_EVT, WM_BTRC_LIST_PLAYER_APP_VALUES_EVT, WM_BTRC_GET_PLAYER_APP_VALUE_EVT, WM_BTRC_GET_PLAYER_APP_ATTRS_TEXT_EVT, WM_BTRC_GET_PLAYER_APP_VALUES_TEXT_EVT, WM_BTRC_SET_PLAYER_APP_VALUE_EVT, WM_BTRC_GET_ELEMENT_ATTR_EVT, WM_BTRC_REGISTER_NOTIFICATION_EVT, WM_BTRC_VOLUME_CHANGED_EVT, WM_BTRC_PASSTHROUGH_CMD_EVT, } tls_btrc_evt_t; typedef struct { tls_bt_addr_t *bd_addr; tls_btrc_remote_features_t features; } tls_btrc_remote_features_msg_t; typedef struct { void *reserved; } tls_btrc_get_play_status_msg_t; typedef struct { void *reserved; } tls_btrc_list_player_app_attr_msg_t; typedef struct { tls_btrc_player_attr_t attr_id; } tls_btrc_list_player_app_values_msg_t; typedef struct { uint8_t num_attr; tls_btrc_player_attr_t *p_attrs; } tls_btrc_get_player_app_value_msg_t; typedef struct { uint8_t attr_id; uint8_t num_val; uint8_t *p_vals; } tls_btrc_get_player_app_attrs_text_msg_t; typedef struct { uint8_t num_attr; tls_btrc_player_attr_t *p_attrs; } tls_btrc_get_player_app_values_text_msg_t; typedef struct { tls_btrc_player_settings_t *p_vals; } tls_btrc_set_player_app_value_msg_t; typedef struct { uint8_t num_attr; tls_btrc_media_attr_t *p_attrs; } tls_btrc_get_element_attr_msg_t; typedef struct { tls_btrc_event_id_t event_id; uint32_t param; } tls_btrc_register_notification_msg_t; typedef struct { uint8_t volume; uint8_t ctype; } tls_btrc_volume_change_msg_t; typedef struct { int id; int key_state; } tls_btrc_passthrough_cmd_msg_t; typedef union { tls_btrc_remote_features_msg_t remote_features; tls_btrc_get_play_status_msg_t get_play_status; tls_btrc_list_player_app_attr_msg_t list_player_app_attr; tls_btrc_list_player_app_values_msg_t list_player_app_values; tls_btrc_get_player_app_value_msg_t get_player_app_value; tls_btrc_get_player_app_attrs_text_msg_t get_player_app_attrs_text; tls_btrc_get_player_app_values_text_msg_t get_player_app_values_text; tls_btrc_set_player_app_value_msg_t set_player_app_value; tls_btrc_get_element_attr_msg_t get_element_attr; tls_btrc_register_notification_msg_t register_notification; tls_btrc_volume_change_msg_t volume_change; tls_btrc_passthrough_cmd_msg_t passthrough_cmd; } tls_btrc_msg_t; /** WM BT RC callback function */ typedef void (*tls_btrc_callback_t)(tls_btrc_evt_t event, tls_btrc_msg_t *p_data); /*************************************************************************************************************/ typedef enum { WM_BTHF_CLIENT_CONNECTION_STATE_DISCONNECTED = 0, WM_BTHF_CLIENT_CONNECTION_STATE_CONNECTING, WM_BTHF_CLIENT_CONNECTION_STATE_CONNECTED, WM_BTHF_CLIENT_CONNECTION_STATE_SLC_CONNECTED, WM_BTHF_CLIENT_CONNECTION_STATE_DISCONNECTING } tls_bthf_client_connection_state_t; typedef enum { WM_BTHF_CLIENT_AUDIO_STATE_DISCONNECTED = 0, WM_BTHF_CLIENT_AUDIO_STATE_CONNECTING, WM_BTHF_CLIENT_AUDIO_STATE_CONNECTED, WM_BTHF_CLIENT_AUDIO_STATE_CONNECTED_MSBC, } tls_bthf_client_audio_state_t; typedef enum { WM_BTHF_CLIENT_VR_STATE_STOPPED = 0, WM_BTHF_CLIENT_VR_STATE_STARTED } tls_bthf_client_vr_state_t; typedef enum { WM_BTHF_CLIENT_VOLUME_TYPE_SPK = 0, WM_BTHF_CLIENT_VOLUME_TYPE_MIC } tls_bthf_client_volume_type_t; typedef enum { WM_BTHF_CLIENT_NETWORK_STATE_NOT_AVAILABLE = 0, WM_BTHF_CLIENT_NETWORK_STATE_AVAILABLE } tls_bthf_client_network_state_t; typedef enum { WM_BTHF_CLIENT_SERVICE_TYPE_HOME = 0, WM_BTHF_CLIENT_SERVICE_TYPE_ROAMING } tls_bthf_client_service_type_t; typedef enum { WM_BTHF_CLIENT_CALL_STATE_ACTIVE = 0, WM_BTHF_CLIENT_CALL_STATE_HELD, WM_BTHF_CLIENT_CALL_STATE_DIALING, WM_BTHF_CLIENT_CALL_STATE_ALERTING, WM_BTHF_CLIENT_CALL_STATE_INCOMING, WM_BTHF_CLIENT_CALL_STATE_WAITING, WM_BTHF_CLIENT_CALL_STATE_HELD_BY_RESP_HOLD, } tls_bthf_client_call_state_t; typedef enum { WM_BTHF_CLIENT_CALL_NO_CALLS_IN_PROGRESS = 0, WM_BTHF_CLIENT_CALL_CALLS_IN_PROGRESS } tls_bthf_client_call_t; typedef enum { WM_BTHF_CLIENT_CALLSETUP_NONE = 0, WM_BTHF_CLIENT_CALLSETUP_INCOMING, WM_BTHF_CLIENT_CALLSETUP_OUTGOING, WM_BTHF_CLIENT_CALLSETUP_ALERTING } tls_bthf_client_callsetup_t; typedef enum { WM_BTHF_CLIENT_CALLHELD_NONE = 0, WM_BTHF_CLIENT_CALLHELD_HOLD_AND_ACTIVE, WM_BTHF_CLIENT_CALLHELD_HOLD, } tls_bthf_client_callheld_t; typedef enum { WM_BTHF_CLIENT_RESP_AND_HOLD_HELD = 0, WM_BTRH_CLIENT_RESP_AND_HOLD_ACCEPT, WM_BTRH_CLIENT_RESP_AND_HOLD_REJECT, } tls_bthf_client_resp_and_hold_t; typedef enum { WM_BTHF_CLIENT_CALL_DIRECTION_OUTGOING = 0, WM_BTHF_CLIENT_CALL_DIRECTION_INCOMING } tls_bthf_client_call_direction_t; typedef enum { WM_BTHF_CLIENT_CALL_MPTY_TYPE_SINGLE = 0, WM_BTHF_CLIENT_CALL_MPTY_TYPE_MULTI } tls_bthf_client_call_mpty_type_t; typedef enum { WM_BTHF_CLIENT_CMD_COMPLETE_OK = 0, WM_BTHF_CLIENT_CMD_COMPLETE_ERROR, WM_BTHF_CLIENT_CMD_COMPLETE_ERROR_NO_CARRIER, WM_BTHF_CLIENT_CMD_COMPLETE_ERROR_BUSY, WM_BTHF_CLIENT_CMD_COMPLETE_ERROR_NO_ANSWER, WM_BTHF_CLIENT_CMD_COMPLETE_ERROR_DELAYED, WM_BTHF_CLIENT_CMD_COMPLETE_ERROR_BLACKLISTED, WM_BTHF_CLIENT_CMD_COMPLETE_ERROR_CME } tls_bthf_client_cmd_complete_t; typedef enum { WM_BTHF_CLIENT_CALL_ACTION_CHLD_0 = 0, WM_BTHF_CLIENT_CALL_ACTION_CHLD_1, WM_BTHF_CLIENT_CALL_ACTION_CHLD_2, WM_BTHF_CLIENT_CALL_ACTION_CHLD_3, WM_BTHF_CLIENT_CALL_ACTION_CHLD_4, WM_BTHF_CLIENT_CALL_ACTION_CHLD_1x, WM_BTHF_CLIENT_CALL_ACTION_CHLD_2x, WM_BTHF_CLIENT_CALL_ACTION_ATA, WM_BTHF_CLIENT_CALL_ACTION_CHUP, WM_BTHF_CLIENT_CALL_ACTION_BTRH_0, WM_BTHF_CLIENT_CALL_ACTION_BTRH_1, WM_BTHF_CLIENT_CALL_ACTION_BTRH_2, } tls_bthf_client_call_action_t; typedef enum { WM_BTHF_CLIENT_SERVICE_UNKNOWN = 0, WM_BTHF_CLIENT_SERVICE_VOICE, WM_BTHF_CLIENT_SERVICE_FAX } tls_bthf_client_subscriber_service_type_t; typedef enum { WM_BTHF_CLIENT_IN_BAND_RINGTONE_NOT_PROVIDED = 0, WM_BTHF_CLIENT_IN_BAND_RINGTONE_PROVIDED, } tls_bthf_client_in_band_ring_state_t; /* Peer features masks */ #define WM_BTHF_CLIENT_PEER_FEAT_3WAY 0x00000001 /* Three-way calling */ #define WM_BTHF_CLIENT_PEER_FEAT_ECNR 0x00000002 /* Echo cancellation and/or noise reduction */ #define WM_BTHF_CLIENT_PEER_FEAT_VREC 0x00000004 /* Voice recognition */ #define WM_BTHF_CLIENT_PEER_FEAT_INBAND 0x00000008 /* In-band ring tone */ #define WM_BTHF_CLIENT_PEER_FEAT_VTAG 0x00000010 /* Attach a phone number to a voice tag */ #define WM_BTHF_CLIENT_PEER_FEAT_REJECT 0x00000020 /* Ability to reject incoming call */ #define WM_BTHF_CLIENT_PEER_FEAT_ECS 0x00000040 /* Enhanced Call Status */ #define WM_BTHF_CLIENT_PEER_FEAT_ECC 0x00000080 /* Enhanced Call Control */ #define WM_BTHF_CLIENT_PEER_FEAT_EXTERR 0x00000100 /* Extended error codes */ #define WM_BTHF_CLIENT_PEER_FEAT_CODEC 0x00000200 /* Codec Negotiation */ /* Peer call handling features masks */ #define WM_BTHF_CLIENT_CHLD_FEAT_REL 0x00000001 /* 0 Release waiting call or held calls */ #define WM_BTHF_CLIENT_CHLD_FEAT_REL_ACC 0x00000002 /* 1 Release active calls and accept other (waiting or held) cal */ #define WM_BTHF_CLIENT_CHLD_FEAT_REL_X 0x00000004 /* 1x Release specified active call only */ #define WM_BTHF_CLIENT_CHLD_FEAT_HOLD_ACC 0x00000008 /* 2 Active calls on hold and accept other (waiting or held) call */ #define WM_BTHF_CLIENT_CHLD_FEAT_PRIV_X 0x00000010 /* 2x Request private mode with specified call (put the rest on hold) */ #define WM_BTHF_CLIENT_CHLD_FEAT_MERGE 0x00000020 /* 3 Add held call to multiparty */ #define WM_BTHF_CLIENT_CHLD_FEAT_MERGE_DETACH 0x00000040 /* 4 Connect two calls and leave (disconnect from) multiparty */ typedef enum { WM_BTHF_CLIENT_CONNECTION_STATE_EVT, WM_BTHF_CLIENT_AUDIO_STATE_EVT, WM_BTHF_CLIENT_VR_CMD_EVT, WM_BTHF_CLIENT_NETWORK_STATE_EVT, WM_BTHF_CLIENT_NETWORK_ROAMING_EVT, WM_BTHF_CLIENT_NETWORK_SIGNAL_EVT, WM_BTHF_CLIENT_BATTERY_LEVEL_EVT, WM_BTHF_CLIENT_CURRENT_OPERATOR_EVT, WM_BTHF_CLIENT_CALL_EVT, WM_BTHF_CLIENT_CALLSETUP_EVT, WM_BTHF_CLIENT_CALLHELD_EVT, WM_BTHF_CLIENT_RESP_AND_HOLD_EVT, WM_BTHF_CLIENT_CLIP_EVT, WM_BTHF_CLIENT_CALL_WAITING_EVT, WM_BTHF_CLIENT_CURRENT_CALLS_EVT, WM_BTHF_CLIENT_VOLUME_CHANGE_EVT, WM_BTHF_CLIENT_CMD_COMPLETE_EVT, WM_BTHF_CLIENT_SUBSCRIBER_INFO_EVT, WM_BTHF_CLIENT_IN_BAND_RING_TONE_EVT, WM_BTHF_CLIENT_LAST_VOICE_TAG_NUMBER_EVT, WM_BTHF_CLIENT_RING_INDICATION_EVT, WM_BTHF_CLIENT_AUDIO_PAYLOAD_EVT, } tls_bthf_client_evt_t; typedef struct { tls_bthf_client_connection_state_t state; unsigned int peer_feat; unsigned int chld_feat; tls_bt_addr_t *bd_addr; } tls_bthf_client_connection_state_msg_t; typedef struct { tls_bthf_client_audio_state_t state; tls_bt_addr_t *bd_addr; } tls_bthf_client_audio_state_msg_t; typedef struct { tls_bthf_client_vr_state_t state; } tls_bthf_client_vr_cmd_msg_t; typedef struct { tls_bthf_client_network_state_t state; } tls_bthf_client_network_state_msg_t; typedef struct { tls_bthf_client_service_type_t type; } tls_bthf_client_network_roaming_msg_t; typedef struct { int signal_strength; } tls_bthf_client_network_signal_msg_t; typedef struct { int battery_level; } tls_bthf_client_battery_level_msg_t; typedef struct { char* name; } tls_bthf_client_current_operator_msg_t; typedef struct { tls_bthf_client_call_t call; } tls_bthf_client_call_msg_t; typedef struct { tls_bthf_client_callsetup_t callsetup; } tls_bthf_client_callsetup_msg_t; typedef struct { tls_bthf_client_callheld_t callheld; } tls_bthf_client_callheld_msg_t; typedef struct { tls_bthf_client_resp_and_hold_t resp_and_hold; } tls_bthf_client_resp_and_hold_msg_t; typedef struct { char *number; } tls_bthf_client_clip_msg_t; typedef struct { char *number; } tls_bthf_client_call_waiting_msg_t; typedef struct { int index; tls_bthf_client_call_direction_t dir; tls_bthf_client_call_state_t state; tls_bthf_client_call_mpty_type_t mpty; char *number; } tls_bthf_client_current_calls_msg_t; typedef struct { tls_bthf_client_volume_type_t type; int volume; } tls_bthf_client_volume_change_msg_t; typedef struct { tls_bthf_client_cmd_complete_t type; int cme; } tls_bthf_client_cmd_complete_msg_t; typedef struct { const char *name; tls_bthf_client_subscriber_service_type_t type; } tls_bthf_client_subscriber_info_msg_t; typedef struct { tls_bthf_client_in_band_ring_state_t state; } tls_bthf_client_in_band_ring_tone_msg_t; typedef struct { char *number; } tls_bthf_client_last_voice_tag_number_msg_t; typedef struct { int ring; } tls_bthf_client_ring_indication_msg_t; typedef struct { tls_bt_addr_t *bd_addr; uint8_t audio_format; uint8_t *payload; uint16_t payload_length; } tls_bthf_audio_payload_msg_t; typedef union { tls_bthf_client_connection_state_msg_t connection_state_msg; tls_bthf_client_audio_state_msg_t audio_state_msg; tls_bthf_client_vr_cmd_msg_t vr_cmd_msg; tls_bthf_client_network_state_msg_t network_state_msg; tls_bthf_client_network_roaming_msg_t network_roaming_msg; tls_bthf_client_network_signal_msg_t network_signal_msg; tls_bthf_client_battery_level_msg_t battery_level_msg; tls_bthf_client_current_operator_msg_t current_operator_msg; tls_bthf_client_call_msg_t call_msg; tls_bthf_client_callsetup_msg_t callsetup_msg; tls_bthf_client_callheld_msg_t callheld_msg; tls_bthf_client_resp_and_hold_msg_t resp_and_hold_msg; tls_bthf_client_clip_msg_t clip_msg; tls_bthf_client_call_waiting_msg_t call_waiting_msg; tls_bthf_client_current_calls_msg_t current_calls_msg; tls_bthf_client_volume_change_msg_t volume_change_msg; tls_bthf_client_cmd_complete_msg_t cmd_complete_msg; tls_bthf_client_subscriber_info_msg_t subscriber_info_msg; tls_bthf_client_in_band_ring_tone_msg_t in_band_ring_tone_msg; tls_bthf_client_last_voice_tag_number_msg_t last_voice_tag_number_msg; tls_bthf_client_ring_indication_msg_t ring_indication_msg; tls_bthf_audio_payload_msg_t audio_payload_msg; } tls_bthf_client_msg_t; /** WM BT HFP CLIENT callback function */ typedef void (*tls_bthf_client_callback_t)(tls_bthf_client_evt_t event, tls_bthf_client_msg_t *p_data); /******************************************************************************************/ /* Security Setting Mask */ #define WM_SPP_SEC_NONE 0x0000 /* No security*/ #define WM_SPP_SEC_AUTHORIZE 0x0001 /*Authorization required (only needed for out going connection ) */ #define WM_SPP_SEC_AUTHENTICATE 0x0012 /*Authentication required*/ #define WM_SPP_SEC_ENCRYPT 0x0024 /*Encryption required*/ #define WM_SPP_SEC_MODE4_LEVEL4 0x0040 /*Mode 4 level 4 service, i.e. incoming/outgoing MITM and P-256 encryption*/ #define WM_SPP_SEC_MITM 0x3000 /*Man-In-The_Middle protection*/ #define WM_SPP_SEC_IN_16_DIGITS 0x4000 /*Min 16 digit for pin code*/ typedef uint16_t wm_spp_sec_t; #define WM_SPP_MAX_SCN 31 typedef enum { WM_SPP_ROLE_CLIENT = 0, WM_SPP_ROLE_SERVER = 1, } tls_spp_role_t; typedef enum { WM_SPP_INIT_EVT = 0, WM_SPP_DISCOVERY_COMP_EVT = 8, WM_SPP_OPEN_EVT = 26, WM_SPP_CLOSE_EVT = 27, WM_SPP_START_EVT = 28, WM_SPP_CL_INIT_EVT = 29, WM_SPP_DATA_IND_EVT = 30, WM_SPP_CONG_EVT = 31, WM_SPP_WRITE_EVT = 33, WM_SPP_SRV_OPEN_EVT = 34, } tls_spp_event_t; typedef struct { uint8_t status; } tls_spp_init_msg_t ; typedef struct { uint8_t status; uint8_t scn_num; uint8_t scn[WM_SPP_MAX_SCN]; } tls_spp_disc_comp_msg_t; typedef struct { uint8_t status; uint32_t handle; uint8_t addr[6]; } tls_spp_open_msg_t; typedef struct { uint8_t status; uint32_t handle; uint32_t new_listen_handle; uint8_t addr[6]; } tls_spp_srv_open_msg_t; typedef struct { uint8_t status; uint32_t port_status; uint32_t handle; bool local; } tls_spp_close_msg_t; typedef struct { uint8_t status; uint32_t handle; uint8_t sec_id; bool use_co_rfc; } tls_spp_start_msg_t; typedef struct { uint8_t status; uint32_t handle; uint8_t sec_id; bool use_co_rfc; } tls_spp_cli_init_msg_t; typedef struct { uint8_t status; uint32_t handle; int length; bool congest; } tls_spp_write_msg_t; typedef struct { uint8_t status; uint32_t handle; uint16_t length; uint8_t *data; } tls_spp_data_ind_msg_t; typedef struct { uint8_t status; uint32_t handle; bool congest; } tls_spp_cong_msg_t; typedef union { tls_spp_init_msg_t init_msg; tls_spp_disc_comp_msg_t disc_comp_msg; tls_spp_open_msg_t open_msg; tls_spp_srv_open_msg_t srv_open_msg; tls_spp_close_msg_t close_msg; tls_spp_start_msg_t start_msg; tls_spp_cli_init_msg_t cli_init_msg; tls_spp_write_msg_t write_msg; tls_spp_data_ind_msg_t data_ind_msg; tls_spp_cong_msg_t congest_msg; } tls_spp_msg_t; /** WM BT SPP callback function */ typedef void (*tls_bt_spp_callback_t)(tls_spp_event_t event, tls_spp_msg_t *p_data); typedef enum { BLE_UART_SERVER_MODE, BLE_UART_CLIENT_MODE, BLE_UART_UNKNOWN_MODE, } tls_ble_uart_mode_t; typedef enum{ UART_OUTPUT_DATA=0, UART_OUTPUT_CMD_ADVERTISING, UART_OUTPUT_CMD_CONNECTED, UART_OUTPUT_CMD_DISCONNECTED, } tls_uart_msg_out_t; /**uart output function pointer, ble server send the received data to uart */ typedef void (*tls_ble_uart_output_ptr)(tls_uart_msg_out_t type,uint8_t *payload, int length); /**uart sent function pointer, after ble server sending the uart data, it will be called */ typedef void (*tls_ble_uart_sent_ptr)(tls_ble_uart_mode_t mode, int status); /**WM Mesh definition*/ typedef enum{ MESH_ROLE_UNKNOWN = 0x00, MESH_ROLE_NODE, MESH_ROLE_PROVISIONER } tls_bt_mesh_role_t; #ifndef BIT #define BIT(n) (1UL << (n)) #endif #define BIT_MASK(n) (BIT(n) - 1) #define TLS_BT_MESH_TRANSMIT_INT(transmit) ((((transmit) >> 3) + 1) * 10) #define TLS_BT_MESH_TRANSMIT_COUNT(transmit) (((transmit) & (uint8_t)BIT_MASK(3))) #define TLS_BT_MESH_TRANSMIT(count, int_ms) ((count) | (((int_ms / 10) - 1) << 3)) #define TLS_BT_MESH_PUB_TRANSMIT(count, int_ms) TLS_BT_MESH_TRANSMIT(count, \ (int_ms) / 5) #define TLS_BT_MESH_PUB_TRANSMIT_INT(transmit) ((((transmit) >> 3) + 1) * 50) #define TLS_BT_MESH_PUB_TRANSMIT_COUNT(transmit) TLS_BT_MESH_TRANSMIT_COUNT(transmit) typedef struct { uint8_t net_transmit_count; /* Network Transmit state */ uint8_t net_transmit_intvl; /* Network Transmit state */ uint8_t relay; /* Relay Mode state */ uint8_t relay_retransmit_count; /* Relay Retransmit state */ uint8_t relay_retransmit_intvl; /* Relay Retransmit state */ uint8_t beacon; /* Secure Network Beacon state */ uint8_t gatt_proxy; /* GATT Proxy state */ uint8_t frnd; /* Friend state */ uint8_t default_ttl; /* Default TTL */ } tls_mesh_primary_cfg_t; typedef struct { uint16_t addr; uint16_t app_idx; uint8_t cred_flag; uint8_t ttl; uint8_t period; uint8_t transmit; } tls_bt_mesh_cfg_mod_pub ; typedef struct { uint16_t dst; uint8_t count; uint8_t period; uint8_t ttl; uint16_t feat; uint16_t net_idx; } tls_bt_mesh_cfg_hb_pub; typedef struct { uint16_t src; uint16_t dst; uint8_t period; uint8_t count; uint8_t min; uint8_t max; } tls_bt_mesh_cfg_hb_sub; typedef struct{ uint8_t addr[6]; uint8_t addr_type; uint8_t uuid[16]; uint32_t oob_info; uint32_t uri_hash; } tls_mesh_unprov_msg_t; typedef struct{ uint16_t net_idx; uint16_t addr; uint8_t num_elem; } tls_mesh_node_added_msg_t; typedef struct{ uint16_t net_idx; uint16_t addr; } tls_mesh_prov_complete_msg_t; typedef struct{ char *str; } tls_mesh_oob_output_str_msg_t; typedef struct{ uint32_t number; } tls_mesh_oob_output_number_msg_t; typedef struct{ uint32_t act; } tls_mesh_oob_input_msg_t; typedef struct{ bool success; uint16_t net_idx; uint16_t addr; uint8_t num_elem; } tls_mesh_prov_end_msg_t; typedef union { tls_mesh_unprov_msg_t unprov_msg; tls_mesh_node_added_msg_t node_added_msg; tls_mesh_oob_output_str_msg_t oob_output_string_msg; tls_mesh_oob_output_number_msg_t oob_output_number_msg; tls_mesh_prov_complete_msg_t prov_cmplt_msg; tls_mesh_oob_input_msg_t oob_input_msg; tls_mesh_prov_end_msg_t prov_end_msg; } tls_mesh_msg_t; typedef enum{ WM_MESH_UNPROVISION_BEACON_EVT = (0x01<<1), WM_MESH_SECURE_BEACON_EVT = (0x01<<2), WM_MESH_NODE_ADDED_EVT = (0x01<<3), WM_MESH_OOB_STRING_EVT = (0x01<<4), WM_MESH_OOB_NUMBER_EVT = (0x01<<5), WM_MESH_PROV_CMPLT_EVT = (0x01<<6), WM_MESH_OOB_INPUT_EVT = (0x01<<7), WM_MESH_PROV_END_EVT = (0x01<<8), } tls_mesh_event_t; typedef void (*tls_bt_mesh_at_callback_t)(tls_mesh_event_t event, tls_mesh_msg_t *p_data); typedef void (*tls_bt_controller_sleep_enter_func_ptr)(uint32_t sleep_duration_ms); typedef void (*tls_bt_controller_sleep_exit_func_ptr)(void); typedef void (*tls_bt_app_pending_process_func_ptr)(void); #define TLS_HAL_AT_NOTIFY(P_CB, PARAM1, PARAM2)\ if (P_CB) { \ P_CB(PARAM1, PARAM2); \ } #define TLS_HAL_CBACK(P_CB, P_CBACK, ...)\ if (P_CB && P_CB->P_CBACK) { \ P_CB->P_CBACK(__VA_ARGS__); \ } \ else { \ assert(0); \ } #endif /* WM_BT_DEF_H */