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