xref: /OK3568_Linux_fs/external/rkwifibt-app/include/RkBtBase.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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