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