1 #ifndef __BT_BASE_H__ 2 #define __BT_BASE_H__ 3 4 #include <stdbool.h> 5 #include <stdlib.h> 6 #include <stdint.h> 7 8 #ifdef __cplusplus 9 extern "C" { 10 #endif 11 12 #define MXA_ADV_DATA_LEN 32 13 #define DEVICE_ADDR_LEN 6 14 15 #define BT_ATT_DEFAULT_LE_MTU 23 16 #define BT_ATT_MAX_LE_MTU 517 17 #define BT_ATT_MAX_VALUE_LEN 512 18 #define BT_ATT_HEADER_LEN 3 19 20 #define RK_BT_TRANSPORT_UNKNOWN 0 21 #define RK_BT_TRANSPORT_BR_EDR 1 22 #define RK_BT_TRANSPORT_LE 2 23 24 typedef unsigned char uint8_t; 25 typedef unsigned short uint16_t; 26 27 typedef struct { 28 #define UUID_16 2 29 #define UUID_32 4 30 #define UUID_128 16 31 32 uint16_t len; //byte 33 const char *uuid; 34 } Ble_Uuid_Type_t; 35 36 enum { 37 BLE_ADVDATA_TYPE_USER = 0, 38 BLE_ADVDATA_TYPE_SYSTEM 39 }; 40 41 typedef enum { 42 PLAYROLE_TYPE_UNKNOWN, 43 PLAYROLE_TYPE_SOURCE, 44 PLAYROLE_TYPE_SINK, 45 } RK_BT_PLAYROLE_TYPE; 46 47 /*BT state*/ 48 typedef enum { 49 RK_BT_STATE_OFF, 50 RK_BT_STATE_ON, 51 RK_BT_STATE_TURNING_ON, 52 RK_BT_STATE_TURNING_OFF, 53 } RK_BT_STATE; 54 55 typedef enum { 56 RK_BT_BOND_STATE_NONE, 57 RK_BT_BOND_STATE_BONDING, 58 RK_BT_BOND_STATE_BONDED, 59 } RK_BT_BOND_STATE; 60 61 typedef enum { 62 SCAN_TYPE_AUTO, //LE, BR/EDR, or both 63 SCAN_TYPE_BREDR, 64 SCAN_TYPE_LE, 65 SCAN_TYPE_PAN, 66 SCAN_TYPE_SPP 67 } RK_BT_SCAN_TYPE; 68 69 /*BT discovery state*/ 70 typedef enum { 71 RK_BT_DISC_STARTED, 72 RK_BT_DISC_START_FAILED, 73 RK_BT_DISC_STOPPED_AUTO, 74 RK_BT_DISC_STOPPED_BY_USER, 75 } RK_BT_DISCOVERY_STATE; 76 77 typedef enum { 78 RK_BT_DEV_PLATFORM_UNKNOWN = 0, /* unknown platform */ 79 RK_BT_DEV_PLATFORM_IOS, /* Apple iOS */ 80 } RK_BT_DEV_PLATFORM_TYPE; 81 82 typedef struct { 83 Ble_Uuid_Type_t server_uuid; 84 Ble_Uuid_Type_t chr_uuid[12]; 85 uint8_t chr_cnt; 86 const char *ble_name; 87 uint8_t ble_addr[DEVICE_ADDR_LEN]; 88 uint8_t advData[MXA_ADV_DATA_LEN]; 89 uint8_t advDataLen; 90 uint8_t respData[MXA_ADV_DATA_LEN]; 91 uint8_t respDataLen; 92 uint8_t advDataType; 93 94 uint8_t tx_power; 95 uint16_t Appearance; 96 uint16_t manufacturer_id; 97 uint8_t manufacturer_data[25]; 98 99 /* recevice data */ 100 void (*cb_ble_recv_fun)(const char *uuid, char *data, int len); 101 /* full data */ 102 void (*cb_ble_request_data)(const char *uuid, char *data, int *len); 103 } RkBleContent; 104 105 typedef struct { 106 RkBleContent ble_content; 107 const char *bt_name; 108 const char *bt_addr; 109 } RkBtContent; 110 111 typedef struct scaned_dev { 112 char *remote_address; 113 char *remote_name; 114 unsigned int cod; //class of device 115 bool is_connected; 116 struct scaned_dev *next; 117 } RkBtScanedDevice; 118 119 typedef void (*RK_BT_STATE_CALLBACK)(RK_BT_STATE state); 120 typedef void (*RK_BT_BOND_CALLBACK)(const char *bd_addr, const char *name, RK_BT_BOND_STATE state); 121 typedef void (*RK_BT_DISCOVERY_CALLBACK)(RK_BT_DISCOVERY_STATE state); 122 typedef void (*RK_BT_DEV_FOUND_CALLBACK)(const char *address, const char *name, unsigned int bt_class, int rssi, int change); 123 typedef void (*RK_BT_NAME_CHANGE_CALLBACK)(const char *bd_addr, const char *name); 124 typedef void (*RK_BT_MTU_CALLBACK)(const char *bd_addr, unsigned int mtu); 125 126 void rk_bt_register_state_callback(RK_BT_STATE_CALLBACK cb); 127 void rk_bt_register_bond_callback(RK_BT_BOND_CALLBACK cb); 128 void rk_bt_register_discovery_callback(RK_BT_DISCOVERY_CALLBACK cb); 129 void rk_bt_register_dev_found_callback(RK_BT_DEV_FOUND_CALLBACK cb); 130 void rk_bt_register_name_change_callback(RK_BT_NAME_CHANGE_CALLBACK cb); 131 int rk_bt_init(RkBtContent *p_bt_content); 132 int rk_bt_deinit(void); 133 int _rk_bt_deinit(void *p); 134 int rk_bt_is_connected(void); 135 int rk_bt_set_class(int value); 136 int rk_bt_set_sleep_mode(void); 137 int rk_bt_enable_reconnect(int value); 138 int rk_bt_start_discovery(unsigned int mseconds, RK_BT_SCAN_TYPE scan_type); 139 int rk_bt_cancel_discovery(); 140 bool rk_bt_is_discovering(); 141 int rk_bt_get_scaned_devices(RkBtScanedDevice **dev_list, int *count); 142 int rk_bt_free_scaned_devices(RkBtScanedDevice *dev_list); 143 void rk_bt_display_devices(); 144 int rk_bt_pair_by_addr(char *addr); 145 int rk_bt_unpair_by_addr(char *addr); 146 int rk_bt_set_device_name(char *name); 147 int rk_bt_get_device_name(char *name, int len); 148 int rk_bt_get_device_addr(char *addr, int len); 149 int rk_bt_get_paired_devices(RkBtScanedDevice **dev_list, int *count); 150 int rk_bt_free_paired_devices(RkBtScanedDevice *dev_list); 151 void rk_bt_display_paired_devices(); 152 int rk_bt_set_visibility(const int visiable, const int connectable); 153 bool rk_bt_get_connected_properties(char *addr); 154 RK_BT_PLAYROLE_TYPE rk_bt_get_playrole_by_addr(char *addr); 155 RK_BT_DEV_PLATFORM_TYPE rk_bt_get_dev_platform(char *addr); 156 int rk_bt_get_eir_data(char *address, char *eir_data, int len); 157 158 //for bsa, default /usr/bin/bsa_server.sh 159 void rk_bt_set_bsa_server_path(char *path); 160 161 //for bsa, bluez don't support 162 //0: TRANSPORT_UNKNOWN, 1: TRANSPORT_BR_EDR, 2: TRANSPORT_LE 163 int rk_bt_read_remote_device_name(char *addr, int transport); 164 165 #ifdef __cplusplus 166 } 167 #endif 168 169 #endif /* __BT_BASE_H__ */ 170