Commit | Line | Data |
---|---|---|
1e494cf4 JB |
1 | /* |
2 | * Copyright (C) 2012 The Android Open Source Project | |
3 | * | |
4 | * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | * you may not use this file except in compliance with the License. | |
6 | * You may obtain a copy of the License at | |
7 | * | |
8 | * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | * | |
10 | * Unless required by applicable law or agreed to in writing, software | |
11 | * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | * See the License for the specific language governing permissions and | |
14 | * limitations under the License. | |
15 | */ | |
16 | ||
17 | #ifndef ANDROID_INCLUDE_BT_HH_H | |
18 | #define ANDROID_INCLUDE_BT_HH_H | |
19 | ||
20 | #include <stdint.h> | |
21 | ||
22 | __BEGIN_DECLS | |
23 | ||
24 | #define BTHH_MAX_DSC_LEN 884 | |
25 | ||
26 | /* HH connection states */ | |
27 | typedef enum | |
28 | { | |
29 | BTHH_CONN_STATE_CONNECTED = 0, | |
30 | BTHH_CONN_STATE_CONNECTING, | |
31 | BTHH_CONN_STATE_DISCONNECTED, | |
32 | BTHH_CONN_STATE_DISCONNECTING, | |
33 | BTHH_CONN_STATE_FAILED_MOUSE_FROM_HOST, | |
34 | BTHH_CONN_STATE_FAILED_KBD_FROM_HOST, | |
35 | BTHH_CONN_STATE_FAILED_TOO_MANY_DEVICES, | |
36 | BTHH_CONN_STATE_FAILED_NO_BTHID_DRIVER, | |
37 | BTHH_CONN_STATE_FAILED_GENERIC, | |
38 | BTHH_CONN_STATE_UNKNOWN | |
39 | } bthh_connection_state_t; | |
40 | ||
41 | typedef enum | |
42 | { | |
43 | BTHH_OK = 0, | |
44 | BTHH_HS_HID_NOT_READY, /* handshake error : device not ready */ | |
45 | BTHH_HS_INVALID_RPT_ID, /* handshake error : invalid report ID */ | |
46 | BTHH_HS_TRANS_NOT_SPT, /* handshake error : transaction not spt */ | |
47 | BTHH_HS_INVALID_PARAM, /* handshake error : invalid paremter */ | |
48 | BTHH_HS_ERROR, /* handshake error : unspecified HS error */ | |
49 | BTHH_ERR, /* general BTA HH error */ | |
50 | BTHH_ERR_SDP, /* SDP error */ | |
51 | BTHH_ERR_PROTO, /* SET_Protocol error, | |
52 | only used in BTA_HH_OPEN_EVT callback */ | |
53 | BTHH_ERR_DB_FULL, /* device database full error, used */ | |
54 | BTHH_ERR_TOD_UNSPT, /* type of device not supported */ | |
55 | BTHH_ERR_NO_RES, /* out of system resources */ | |
56 | BTHH_ERR_AUTH_FAILED, /* authentication fail */ | |
57 | BTHH_ERR_HDL | |
58 | }bthh_status_t; | |
59 | ||
60 | /* Protocol modes */ | |
61 | typedef enum { | |
62 | BTHH_REPORT_MODE = 0x00, | |
63 | BTHH_BOOT_MODE = 0x01, | |
64 | BTHH_UNSUPPORTED_MODE = 0xff | |
65 | }bthh_protocol_mode_t; | |
66 | ||
67 | /* Report types */ | |
68 | typedef enum { | |
69 | BTHH_INPUT_REPORT = 1, | |
70 | BTHH_OUTPUT_REPORT, | |
71 | BTHH_FEATURE_REPORT | |
72 | }bthh_report_type_t; | |
73 | ||
74 | typedef struct | |
75 | { | |
76 | int attr_mask; | |
77 | uint8_t sub_class; | |
78 | uint8_t app_id; | |
79 | int vendor_id; | |
80 | int product_id; | |
81 | int version; | |
82 | uint8_t ctry_code; | |
83 | int dl_len; | |
84 | uint8_t dsc_list[BTHH_MAX_DSC_LEN]; | |
85 | } bthh_hid_info_t; | |
86 | ||
87 | /** Callback for connection state change. | |
88 | * state will have one of the values from bthh_connection_state_t | |
89 | */ | |
90 | typedef void (* bthh_connection_state_callback)(bt_bdaddr_t *bd_addr, bthh_connection_state_t state); | |
91 | ||
92 | /** Callback for vitual unplug api. | |
93 | * the status of the vitual unplug | |
94 | */ | |
95 | typedef void (* bthh_virtual_unplug_callback)(bt_bdaddr_t *bd_addr, bthh_status_t hh_status); | |
96 | ||
97 | /** Callback for get hid info | |
98 | * hid_info will contain attr_mask, sub_class, app_id, vendor_id, product_id, version, ctry_code, len | |
99 | */ | |
100 | typedef void (* bthh_hid_info_callback)(bt_bdaddr_t *bd_addr, bthh_hid_info_t hid_info); | |
101 | ||
102 | /** Callback for get/set protocal api. | |
103 | * the protocol mode is one of the value from bthh_protocol_mode_t | |
104 | */ | |
105 | typedef void (* bthh_protocol_mode_callback)(bt_bdaddr_t *bd_addr, bthh_status_t hh_status,bthh_protocol_mode_t mode); | |
106 | ||
107 | /** Callback for get/set_idle_time api. | |
108 | */ | |
109 | typedef void (* bthh_idle_time_callback)(bt_bdaddr_t *bd_addr, bthh_status_t hh_status, int idle_rate); | |
110 | ||
111 | ||
112 | /** Callback for get report api. | |
113 | * if staus is ok rpt_data contains the report data | |
114 | */ | |
115 | typedef void (* bthh_get_report_callback)(bt_bdaddr_t *bd_addr, bthh_status_t hh_status, uint8_t* rpt_data, int rpt_size); | |
116 | ||
117 | ||
118 | /** BT-HH callback structure. */ | |
119 | typedef struct { | |
120 | /** set to sizeof(BtHfCallbacks) */ | |
121 | size_t size; | |
122 | bthh_connection_state_callback connection_state_cb; | |
123 | bthh_hid_info_callback hid_info_cb; | |
124 | bthh_protocol_mode_callback protocol_mode_cb; | |
125 | bthh_idle_time_callback idle_time_cb; | |
126 | bthh_get_report_callback get_report_cb; | |
127 | bthh_virtual_unplug_callback virtual_unplug_cb; | |
128 | ||
129 | } bthh_callbacks_t; | |
130 | ||
131 | ||
132 | ||
133 | /** Represents the standard BT-HH interface. */ | |
134 | typedef struct { | |
135 | ||
136 | /** set to sizeof(BtHhInterface) */ | |
137 | size_t size; | |
138 | ||
139 | /** | |
140 | * Register the BtHh callbacks | |
141 | */ | |
142 | bt_status_t (*init)( bthh_callbacks_t* callbacks ); | |
143 | ||
144 | /** connect to hid device */ | |
145 | bt_status_t (*connect)( bt_bdaddr_t *bd_addr); | |
146 | ||
147 | /** dis-connect from hid device */ | |
148 | bt_status_t (*disconnect)( bt_bdaddr_t *bd_addr ); | |
149 | ||
150 | /** Virtual UnPlug (VUP) the specified HID device */ | |
151 | bt_status_t (*virtual_unplug)(bt_bdaddr_t *bd_addr); | |
152 | ||
153 | /** Set the HID device descriptor for the specified HID device. */ | |
154 | bt_status_t (*set_info)(bt_bdaddr_t *bd_addr, bthh_hid_info_t hid_info ); | |
155 | ||
156 | /** Get the HID proto mode. */ | |
157 | bt_status_t (*get_protocol) (bt_bdaddr_t *bd_addr, bthh_protocol_mode_t protocolMode); | |
158 | ||
159 | /** Set the HID proto mode. */ | |
160 | bt_status_t (*set_protocol)(bt_bdaddr_t *bd_addr, bthh_protocol_mode_t protocolMode); | |
161 | ||
162 | /** Send a GET_REPORT to HID device. */ | |
163 | bt_status_t (*get_report)(bt_bdaddr_t *bd_addr, bthh_report_type_t reportType, uint8_t reportId, int bufferSize); | |
164 | ||
165 | /** Send a SET_REPORT to HID device. */ | |
166 | bt_status_t (*set_report)(bt_bdaddr_t *bd_addr, bthh_report_type_t reportType, char* report); | |
167 | ||
168 | /** Send data to HID device. */ | |
169 | bt_status_t (*send_data)(bt_bdaddr_t *bd_addr, char* data); | |
170 | ||
171 | /** Closes the interface. */ | |
172 | void (*cleanup)( void ); | |
173 | ||
174 | } bthh_interface_t; | |
175 | __END_DECLS | |
176 | ||
177 | #endif /* ANDROID_INCLUDE_BT_HH_H */ | |
178 | ||
179 |