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