2 * Copyright (C) 2012 The Android Open Source Project
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 #ifndef ANDROID_INCLUDE_BT_HH_H
18 #define ANDROID_INCLUDE_BT_HH_H
24 #define BTHH_MAX_DSC_LEN 884
26 /* HH connection states */
28 BTHH_CONN_STATE_CONNECTED = 0,
29 BTHH_CONN_STATE_CONNECTING,
30 BTHH_CONN_STATE_DISCONNECTED,
31 BTHH_CONN_STATE_DISCONNECTING,
32 BTHH_CONN_STATE_FAILED_MOUSE_FROM_HOST,
33 BTHH_CONN_STATE_FAILED_KBD_FROM_HOST,
34 BTHH_CONN_STATE_FAILED_TOO_MANY_DEVICES,
35 BTHH_CONN_STATE_FAILED_NO_BTHID_DRIVER,
36 BTHH_CONN_STATE_FAILED_GENERIC,
37 BTHH_CONN_STATE_UNKNOWN
38 } bthh_connection_state_t;
42 BTHH_HS_HID_NOT_READY, /* handshake error : device not ready */
43 BTHH_HS_INVALID_RPT_ID, /* handshake error : invalid report ID */
44 BTHH_HS_TRANS_NOT_SPT, /* handshake error : transaction not spt */
45 BTHH_HS_INVALID_PARAM, /* handshake error : invalid paremter */
46 BTHH_HS_ERROR, /* handshake error : unspecified HS error */
47 BTHH_ERR, /* general BTA HH error */
48 BTHH_ERR_SDP, /* SDP error */
49 BTHH_ERR_PROTO, /* SET_Protocol error,
50 only used in BTA_HH_OPEN_EVT callback */
51 BTHH_ERR_DB_FULL, /* device database full error, used */
52 BTHH_ERR_TOD_UNSPT, /* type of device not supported */
53 BTHH_ERR_NO_RES, /* out of system resources */
54 BTHH_ERR_AUTH_FAILED, /* authentication fail */
60 BTHH_REPORT_MODE = 0x00,
61 BTHH_BOOT_MODE = 0x01,
62 BTHH_UNSUPPORTED_MODE = 0xff
63 } bthh_protocol_mode_t;
67 BTHH_INPUT_REPORT = 1,
81 uint8_t dsc_list[BTHH_MAX_DSC_LEN];
84 /** Callback for connection state change.
85 * state will have one of the values from bthh_connection_state_t
87 typedef void (*bthh_connection_state_callback)(bt_bdaddr_t *bd_addr, bthh_connection_state_t state);
89 /** Callback for vitual unplug api.
90 * the status of the vitual unplug
92 typedef void (*bthh_virtual_unplug_callback)(bt_bdaddr_t *bd_addr, bthh_status_t hh_status);
94 /** Callback for get hid info
95 * hid_info will contain attr_mask, sub_class, app_id, vendor_id, product_id, version, ctry_code, len
97 typedef void (*bthh_hid_info_callback)(bt_bdaddr_t *bd_addr, bthh_hid_info_t *hid_info);
99 /** Callback for get protocol api.
100 * the protocol mode is one of the value from bthh_protocol_mode_t
102 typedef void (*bthh_protocol_mode_callback)(bt_bdaddr_t *bd_addr, bthh_status_t hh_status, bthh_protocol_mode_t mode);
104 /** Callback for get/set_idle_time api.
106 typedef void (*bthh_idle_time_callback)(bt_bdaddr_t *bd_addr, bthh_status_t hh_status, int idle_rate);
108 /** Callback for get report api.
109 * if staus is ok rpt_data contains the report data
111 typedef void (*bthh_get_report_callback)(bt_bdaddr_t *bd_addr, bthh_status_t hh_status, uint8_t* rpt_data, int rpt_size);
113 /** Callback for set_report/set_protocol api and if error
114 * occurs for get_report/get_protocol api.
116 typedef void (*bthh_handshake_callback)(bt_bdaddr_t *bd_addr, bthh_status_t hh_status);
118 /** BT-HH callback structure. */
120 /** set to sizeof(BtHfCallbacks) */
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 bthh_handshake_callback handshake_cb;
131 /** Represents the standard BT-HH interface. */
134 /** set to sizeof(BtHhInterface) */
138 * Register the BtHh callbacks
140 bt_status_t (*init)(bthh_callbacks_t* callbacks);
142 /** connect to hid device */
143 bt_status_t (*connect)(bt_bdaddr_t *bd_addr);
145 /** dis-connect from hid device */
146 bt_status_t (*disconnect)(bt_bdaddr_t *bd_addr);
148 /** Virtual UnPlug (VUP) the specified HID device */
149 bt_status_t (*virtual_unplug)(bt_bdaddr_t *bd_addr);
151 /** Set the HID device descriptor for the specified HID device. */
152 bt_status_t (*set_info)(bt_bdaddr_t *bd_addr, bthh_hid_info_t *hid_info);
154 /** Get the HID proto mode. */
155 bt_status_t (*get_protocol) (bt_bdaddr_t *bd_addr, bthh_protocol_mode_t protocolMode);
157 /** Set the HID proto mode. */
158 bt_status_t (*set_protocol)(bt_bdaddr_t *bd_addr, bthh_protocol_mode_t protocolMode);
160 /** Send a GET_REPORT to HID device. */
161 bt_status_t (*get_report)(bt_bdaddr_t *bd_addr, bthh_report_type_t reportType, uint8_t reportId, int bufferSize);
163 /** Send a SET_REPORT to HID device. */
164 bt_status_t (*set_report)(bt_bdaddr_t *bd_addr, bthh_report_type_t reportType, char* report);
166 /** Send data to HID device. */
167 bt_status_t (*send_data)(bt_bdaddr_t *bd_addr, char* data);
169 /** Closes the interface. */
170 void (*cleanup)(void);
175 #endif /* ANDROID_INCLUDE_BT_HH_H */