blob: b87b129bb121edba50ff4f4e8fb9350a046c4dc6 [file] [log] [blame]
Jakub Pawlowskif2f207a2017-09-23 14:47:20 -07001/*
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
Jakub Pawlowski3a3b82c2017-10-18 20:49:54 -070024#define BTHH_MAX_DSC_LEN 884
Jakub Pawlowskif2f207a2017-09-23 14:47:20 -070025
26/* HH connection states */
Jakub Pawlowski3a3b82c2017-10-18 20:49:54 -070027typedef enum {
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
Jakub Pawlowskif2f207a2017-09-23 14:47:20 -070038} bthh_connection_state_t;
39
Jakub Pawlowski3a3b82c2017-10-18 20:49:54 -070040typedef enum {
41 BTHH_OK = 0,
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
51 callback */
52 BTHH_ERR_DB_FULL, /* device database full error, used */
53 BTHH_ERR_TOD_UNSPT, /* type of device not supported */
54 BTHH_ERR_NO_RES, /* out of system resources */
55 BTHH_ERR_AUTH_FAILED, /* authentication fail */
56 BTHH_ERR_HDL
57} bthh_status_t;
Jakub Pawlowskif2f207a2017-09-23 14:47:20 -070058
59/* Protocol modes */
60typedef enum {
Jakub Pawlowski3a3b82c2017-10-18 20:49:54 -070061 BTHH_REPORT_MODE = 0x00,
62 BTHH_BOOT_MODE = 0x01,
63 BTHH_UNSUPPORTED_MODE = 0xff
64} bthh_protocol_mode_t;
Jakub Pawlowskif2f207a2017-09-23 14:47:20 -070065
66/* Report types */
67typedef enum {
Jakub Pawlowski3a3b82c2017-10-18 20:49:54 -070068 BTHH_INPUT_REPORT = 1,
69 BTHH_OUTPUT_REPORT,
70 BTHH_FEATURE_REPORT
71} bthh_report_type_t;
Jakub Pawlowskif2f207a2017-09-23 14:47:20 -070072
Jakub Pawlowski3a3b82c2017-10-18 20:49:54 -070073typedef struct {
74 int attr_mask;
75 uint8_t sub_class;
76 uint8_t app_id;
77 int vendor_id;
78 int product_id;
79 int version;
80 uint8_t ctry_code;
81 int dl_len;
82 uint8_t dsc_list[BTHH_MAX_DSC_LEN];
Jakub Pawlowskif2f207a2017-09-23 14:47:20 -070083} bthh_hid_info_t;
84
85/** Callback for connection state change.
86 * state will have one of the values from bthh_connection_state_t
87 */
Jakub Pawlowski3a3b82c2017-10-18 20:49:54 -070088typedef void (*bthh_connection_state_callback)(RawAddress* bd_addr,
89 bthh_connection_state_t state);
Jakub Pawlowskif2f207a2017-09-23 14:47:20 -070090
91/** Callback for vitual unplug api.
92 * the status of the vitual unplug
93 */
Jakub Pawlowski3a3b82c2017-10-18 20:49:54 -070094typedef void (*bthh_virtual_unplug_callback)(RawAddress* bd_addr,
95 bthh_status_t hh_status);
Jakub Pawlowskif2f207a2017-09-23 14:47:20 -070096
97/** Callback for get hid info
Jakub Pawlowski3a3b82c2017-10-18 20:49:54 -070098 * hid_info will contain attr_mask, sub_class, app_id, vendor_id, product_id,
99 * version, ctry_code, len
Jakub Pawlowskif2f207a2017-09-23 14:47:20 -0700100 */
Jakub Pawlowski3a3b82c2017-10-18 20:49:54 -0700101typedef void (*bthh_hid_info_callback)(RawAddress* bd_addr,
102 bthh_hid_info_t hid_info);
Jakub Pawlowskif2f207a2017-09-23 14:47:20 -0700103
104/** Callback for get protocol api.
105 * the protocol mode is one of the value from bthh_protocol_mode_t
106 */
Jakub Pawlowski3a3b82c2017-10-18 20:49:54 -0700107typedef void (*bthh_protocol_mode_callback)(RawAddress* bd_addr,
108 bthh_status_t hh_status,
109 bthh_protocol_mode_t mode);
Jakub Pawlowskif2f207a2017-09-23 14:47:20 -0700110
111/** Callback for get/set_idle_time api.
112 */
Jakub Pawlowski3a3b82c2017-10-18 20:49:54 -0700113typedef void (*bthh_idle_time_callback)(RawAddress* bd_addr,
114 bthh_status_t hh_status, int idle_rate);
Jakub Pawlowskif2f207a2017-09-23 14:47:20 -0700115
116/** Callback for get report api.
117 * if staus is ok rpt_data contains the report data
118 */
Jakub Pawlowski3a3b82c2017-10-18 20:49:54 -0700119typedef void (*bthh_get_report_callback)(RawAddress* bd_addr,
120 bthh_status_t hh_status,
121 uint8_t* rpt_data, int rpt_size);
Jakub Pawlowskif2f207a2017-09-23 14:47:20 -0700122
123/** Callback for set_report/set_protocol api and if error
124 * occurs for get_report/get_protocol api.
125 */
Jakub Pawlowski3a3b82c2017-10-18 20:49:54 -0700126typedef void (*bthh_handshake_callback)(RawAddress* bd_addr,
127 bthh_status_t hh_status);
Jakub Pawlowskif2f207a2017-09-23 14:47:20 -0700128
129/** BT-HH callback structure. */
130typedef struct {
Jakub Pawlowski3a3b82c2017-10-18 20:49:54 -0700131 /** set to sizeof(BtHfCallbacks) */
132 size_t size;
133 bthh_connection_state_callback connection_state_cb;
134 bthh_hid_info_callback hid_info_cb;
135 bthh_protocol_mode_callback protocol_mode_cb;
136 bthh_idle_time_callback idle_time_cb;
137 bthh_get_report_callback get_report_cb;
138 bthh_virtual_unplug_callback virtual_unplug_cb;
139 bthh_handshake_callback handshake_cb;
Jakub Pawlowskif2f207a2017-09-23 14:47:20 -0700140
141} bthh_callbacks_t;
142
Jakub Pawlowskif2f207a2017-09-23 14:47:20 -0700143/** Represents the standard BT-HH interface. */
144typedef struct {
Jakub Pawlowski3a3b82c2017-10-18 20:49:54 -0700145 /** set to sizeof(BtHhInterface) */
146 size_t size;
Jakub Pawlowskif2f207a2017-09-23 14:47:20 -0700147
Jakub Pawlowski3a3b82c2017-10-18 20:49:54 -0700148 /**
149 * Register the BtHh callbacks
150 */
151 bt_status_t (*init)(bthh_callbacks_t* callbacks);
Jakub Pawlowskif2f207a2017-09-23 14:47:20 -0700152
Jakub Pawlowski3a3b82c2017-10-18 20:49:54 -0700153 /** connect to hid device */
154 bt_status_t (*connect)(RawAddress* bd_addr);
Jakub Pawlowskif2f207a2017-09-23 14:47:20 -0700155
Jakub Pawlowski3a3b82c2017-10-18 20:49:54 -0700156 /** dis-connect from hid device */
157 bt_status_t (*disconnect)(RawAddress* bd_addr);
Jakub Pawlowskif2f207a2017-09-23 14:47:20 -0700158
Jakub Pawlowski3a3b82c2017-10-18 20:49:54 -0700159 /** Virtual UnPlug (VUP) the specified HID device */
160 bt_status_t (*virtual_unplug)(RawAddress* bd_addr);
Jakub Pawlowskif2f207a2017-09-23 14:47:20 -0700161
Jakub Pawlowski3a3b82c2017-10-18 20:49:54 -0700162 /** Set the HID device descriptor for the specified HID device. */
163 bt_status_t (*set_info)(RawAddress* bd_addr, bthh_hid_info_t hid_info);
Jakub Pawlowskif2f207a2017-09-23 14:47:20 -0700164
Jakub Pawlowski3a3b82c2017-10-18 20:49:54 -0700165 /** Get the HID proto mode. */
166 bt_status_t (*get_protocol)(RawAddress* bd_addr,
167 bthh_protocol_mode_t protocolMode);
Jakub Pawlowskif2f207a2017-09-23 14:47:20 -0700168
Jakub Pawlowski3a3b82c2017-10-18 20:49:54 -0700169 /** Set the HID proto mode. */
170 bt_status_t (*set_protocol)(RawAddress* bd_addr,
171 bthh_protocol_mode_t protocolMode);
Jakub Pawlowskif2f207a2017-09-23 14:47:20 -0700172
Jakub Pawlowski3a3b82c2017-10-18 20:49:54 -0700173 /** Get the HID Idle Time */
174 bt_status_t (*get_idle_time)(RawAddress* bd_addr);
Jakub Pawlowskif2f207a2017-09-23 14:47:20 -0700175
Jakub Pawlowski3a3b82c2017-10-18 20:49:54 -0700176 /** Set the HID Idle Time */
177 bt_status_t (*set_idle_time)(RawAddress* bd_addr, uint8_t idleTime);
Jakub Pawlowskif2f207a2017-09-23 14:47:20 -0700178
Jakub Pawlowski3a3b82c2017-10-18 20:49:54 -0700179 /** Send a GET_REPORT to HID device. */
180 bt_status_t (*get_report)(RawAddress* bd_addr, bthh_report_type_t reportType,
181 uint8_t reportId, int bufferSize);
Jakub Pawlowskif2f207a2017-09-23 14:47:20 -0700182
Jakub Pawlowski3a3b82c2017-10-18 20:49:54 -0700183 /** Send a SET_REPORT to HID device. */
184 bt_status_t (*set_report)(RawAddress* bd_addr, bthh_report_type_t reportType,
185 char* report);
Jakub Pawlowskif2f207a2017-09-23 14:47:20 -0700186
Jakub Pawlowski3a3b82c2017-10-18 20:49:54 -0700187 /** Send data to HID device. */
188 bt_status_t (*send_data)(RawAddress* bd_addr, char* data);
Jakub Pawlowskif2f207a2017-09-23 14:47:20 -0700189
Jakub Pawlowski3a3b82c2017-10-18 20:49:54 -0700190 /** Closes the interface. */
191 void (*cleanup)(void);
Jakub Pawlowskif2f207a2017-09-23 14:47:20 -0700192
193} bthh_interface_t;
194__END_DECLS
195
196#endif /* ANDROID_INCLUDE_BT_HH_H */