xref: /OK3568_Linux_fs/external/rkwifibt-app/include/RkBleClient.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun #ifndef __BLUETOOTH_BLE_CLIENT_H__
2*4882a593Smuzhiyun #define __BLUETOOTH_BLE_CLIENT_H__
3*4882a593Smuzhiyun 
4*4882a593Smuzhiyun #include <RkBtBase.h>
5*4882a593Smuzhiyun 
6*4882a593Smuzhiyun #ifdef __cplusplus
7*4882a593Smuzhiyun extern "C" {
8*4882a593Smuzhiyun #endif
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun #define DESCRIBE_BUG_LEN	50
11*4882a593Smuzhiyun #define UUID_BUF_LEN		40
12*4882a593Smuzhiyun #define PATH_BUF_LEN		70
13*4882a593Smuzhiyun #define MAX_ATTR_VAL_LEN	512
14*4882a593Smuzhiyun 
15*4882a593Smuzhiyun #define SERVICE_COUNT_MAX	10
16*4882a593Smuzhiyun #define CHRC_COUNT_MAX		20
17*4882a593Smuzhiyun #define DESC_COUNT_MAX		5
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun /*
20*4882a593Smuzhiyun  * ATT attribute permission bitfield values. Permissions are grouped as
21*4882a593Smuzhiyun  * "Access", "Encryption", "Authentication", and "Authorization". A bitmask of
22*4882a593Smuzhiyun  * permissions is a byte that encodes a combination of these.
23*4882a593Smuzhiyun  */
24*4882a593Smuzhiyun #define BT_ATT_PERM_READ		0x01
25*4882a593Smuzhiyun #define BT_ATT_PERM_WRITE		0x02
26*4882a593Smuzhiyun #define BT_ATT_PERM_READ_ENCRYPT	0x04
27*4882a593Smuzhiyun #define BT_ATT_PERM_WRITE_ENCRYPT	0x08
28*4882a593Smuzhiyun #define BT_ATT_PERM_ENCRYPT		(BT_ATT_PERM_READ_ENCRYPT | \
29*4882a593Smuzhiyun 					BT_ATT_PERM_WRITE_ENCRYPT)
30*4882a593Smuzhiyun #define BT_ATT_PERM_READ_AUTHEN		0x10
31*4882a593Smuzhiyun #define BT_ATT_PERM_WRITE_AUTHEN	0x20
32*4882a593Smuzhiyun #define BT_ATT_PERM_AUTHEN		(BT_ATT_PERM_READ_AUTHEN | \
33*4882a593Smuzhiyun 					BT_ATT_PERM_WRITE_AUTHEN)
34*4882a593Smuzhiyun #define BT_ATT_PERM_AUTHOR		0x40
35*4882a593Smuzhiyun #define BT_ATT_PERM_NONE		0x80
36*4882a593Smuzhiyun #define BT_ATT_PERM_READ_SECURE		0x0100
37*4882a593Smuzhiyun #define BT_ATT_PERM_WRITE_SECURE	0x0200
38*4882a593Smuzhiyun #define BT_ATT_PERM_SECURE		(BT_ATT_PERM_READ_SECURE | \
39*4882a593Smuzhiyun 					BT_ATT_PERM_WRITE_SECURE)
40*4882a593Smuzhiyun 
41*4882a593Smuzhiyun /* GATT Characteristic Properties Bitfield values */
42*4882a593Smuzhiyun #define BT_GATT_CHRC_PROP_BROADCAST			0x01 /* broadcast */
43*4882a593Smuzhiyun #define BT_GATT_CHRC_PROP_READ				0x02 /* read */
44*4882a593Smuzhiyun #define BT_GATT_CHRC_PROP_WRITE_WITHOUT_RESP		0x04 /* write-without-response */
45*4882a593Smuzhiyun #define BT_GATT_CHRC_PROP_WRITE				0x08 /* write */
46*4882a593Smuzhiyun #define BT_GATT_CHRC_PROP_NOTIFY			0x10 /* notify */
47*4882a593Smuzhiyun #define BT_GATT_CHRC_PROP_INDICATE			0x20 /* indicate */
48*4882a593Smuzhiyun #define BT_GATT_CHRC_PROP_AUTH				0x40 /* authenticated-signed-writes */
49*4882a593Smuzhiyun #define BT_GATT_CHRC_PROP_EXT_PROP			0x80 /* extended-properties */
50*4882a593Smuzhiyun 
51*4882a593Smuzhiyun /* GATT Characteristic Extended Properties Bitfield values */
52*4882a593Smuzhiyun #define BT_GATT_CHRC_EXT_PROP_RELIABLE_WRITE		0x01 /* reliable-write */
53*4882a593Smuzhiyun #define BT_GATT_CHRC_EXT_PROP_WRITABLE_AUX		0x02 /* writable-auxiliaries */
54*4882a593Smuzhiyun #define BT_GATT_CHRC_EXT_PROP_ENC_READ			0x04 /* encrypt-read */
55*4882a593Smuzhiyun #define BT_GATT_CHRC_EXT_PROP_ENC_WRITE			0x08 /* encrypt-write */
56*4882a593Smuzhiyun #define BT_GATT_CHRC_EXT_PROP_ENC	(BT_GATT_CHRC_EXT_PROP_ENC_READ | \
57*4882a593Smuzhiyun 					BT_GATT_CHRC_EXT_PROP_ENC_WRITE)
58*4882a593Smuzhiyun #define BT_GATT_CHRC_EXT_PROP_AUTH_READ			0x10 /* encrypt-authenticated-read */
59*4882a593Smuzhiyun #define BT_GATT_CHRC_EXT_PROP_AUTH_WRITE		0x20 /* encrypt-authenticated-write */
60*4882a593Smuzhiyun #define BT_GATT_CHRC_EXT_PROP_AUTH	(BT_GATT_CHRC_EXT_PROP_AUTH_READ | \
61*4882a593Smuzhiyun 					BT_GATT_CHRC_EXT_PROP_AUTH_WRITE)
62*4882a593Smuzhiyun 
63*4882a593Smuzhiyun typedef enum {
64*4882a593Smuzhiyun 	RK_BLE_CLIENT_STATE_IDLE = 0,
65*4882a593Smuzhiyun 	RK_BLE_CLIENT_STATE_CONNECT,
66*4882a593Smuzhiyun 	RK_BLE_CLIENT_STATE_DISCONNECT,
67*4882a593Smuzhiyun 	RK_BLE_CLIENT_WRITE_SUCCESS,
68*4882a593Smuzhiyun 	RK_BLE_CLIENT_WRITE_ERROR,
69*4882a593Smuzhiyun } RK_BLE_CLIENT_STATE;
70*4882a593Smuzhiyun 
71*4882a593Smuzhiyun typedef struct {
72*4882a593Smuzhiyun 	char describe[DESCRIBE_BUG_LEN];
73*4882a593Smuzhiyun 	char path[PATH_BUF_LEN];
74*4882a593Smuzhiyun 	char uuid[UUID_BUF_LEN];
75*4882a593Smuzhiyun } RK_BLE_CLIENT_DESC;
76*4882a593Smuzhiyun 
77*4882a593Smuzhiyun typedef struct {
78*4882a593Smuzhiyun 	char describe[DESCRIBE_BUG_LEN];
79*4882a593Smuzhiyun 	char path[PATH_BUF_LEN];
80*4882a593Smuzhiyun 	char uuid[UUID_BUF_LEN];
81*4882a593Smuzhiyun 	unsigned int props;
82*4882a593Smuzhiyun 	unsigned int ext_props;
83*4882a593Smuzhiyun 	unsigned int perm;
84*4882a593Smuzhiyun 	bool notifying;
85*4882a593Smuzhiyun 	int desc_cnt;
86*4882a593Smuzhiyun 	RK_BLE_CLIENT_DESC desc[DESC_COUNT_MAX];
87*4882a593Smuzhiyun } RK_BLE_CLIENT_CHRC;
88*4882a593Smuzhiyun 
89*4882a593Smuzhiyun typedef struct {
90*4882a593Smuzhiyun 	char describe[DESCRIBE_BUG_LEN];
91*4882a593Smuzhiyun 	char path[PATH_BUF_LEN];
92*4882a593Smuzhiyun 	char uuid[UUID_BUF_LEN];
93*4882a593Smuzhiyun 	int chrc_cnt;
94*4882a593Smuzhiyun 	RK_BLE_CLIENT_CHRC chrc[CHRC_COUNT_MAX];
95*4882a593Smuzhiyun } RK_BLE_CLIENT_SERVICE;
96*4882a593Smuzhiyun 
97*4882a593Smuzhiyun typedef struct {
98*4882a593Smuzhiyun 	int service_cnt;
99*4882a593Smuzhiyun 	RK_BLE_CLIENT_SERVICE service[SERVICE_COUNT_MAX];
100*4882a593Smuzhiyun } RK_BLE_CLIENT_SERVICE_INFO;
101*4882a593Smuzhiyun 
102*4882a593Smuzhiyun typedef void (*RK_BLE_CLIENT_STATE_CALLBACK)(const char *bd_addr, const char *name, RK_BLE_CLIENT_STATE state);
103*4882a593Smuzhiyun typedef void (*RK_BLE_CLIENT_RECV_CALLBACK)(const char *uuid, char *data, int len);
104*4882a593Smuzhiyun 
105*4882a593Smuzhiyun void rk_ble_client_register_state_callback(RK_BLE_CLIENT_STATE_CALLBACK cb);
106*4882a593Smuzhiyun void rk_ble_client_register_recv_callback(RK_BLE_CLIENT_RECV_CALLBACK cb);
107*4882a593Smuzhiyun void rk_ble_client_register_mtu_callback(RK_BT_MTU_CALLBACK cb);
108*4882a593Smuzhiyun int rk_ble_client_open(bool mtu_change);
109*4882a593Smuzhiyun void rk_ble_client_close(void);
110*4882a593Smuzhiyun RK_BLE_CLIENT_STATE rk_ble_client_get_state();
111*4882a593Smuzhiyun int rk_ble_client_get_service_info(char *address, RK_BLE_CLIENT_SERVICE_INFO *info);
112*4882a593Smuzhiyun int rk_ble_client_write(const char *uuid, char *data, int data_len);
113*4882a593Smuzhiyun int rk_ble_client_read(const char *uuid);
114*4882a593Smuzhiyun int rk_ble_client_connect(char *address);
115*4882a593Smuzhiyun int rk_ble_client_disconnect(char *address);
116*4882a593Smuzhiyun bool rk_ble_client_is_notifying(const char *uuid);
117*4882a593Smuzhiyun 
118*4882a593Smuzhiyun //is_indicate: only for bsa
119*4882a593Smuzhiyun int rk_ble_client_notify(const char *uuid, bool is_indicate, bool enable);
120*4882a593Smuzhiyun 
121*4882a593Smuzhiyun //get broadcast of the remote device
122*4882a593Smuzhiyun int rk_ble_client_get_eir_data(char *address, char *eir_data, int len);
123*4882a593Smuzhiyun 
124*4882a593Smuzhiyun //only for bsa, hci le write suggested default data length(27 byte)
125*4882a593Smuzhiyun int rk_ble_client_default_data_length();
126*4882a593Smuzhiyun 
127*4882a593Smuzhiyun #ifdef __cplusplus
128*4882a593Smuzhiyun }
129*4882a593Smuzhiyun #endif
130*4882a593Smuzhiyun 
131*4882a593Smuzhiyun #endif /* __BLUETOOTH_BLE_CLIENT_H__ */
132