1/******************************************************************************
2 *
3 *  Copyright 2016 The Android Open Source Project
4 *  Copyright 2002-2012 Broadcom Corporation
5 *
6 *  Licensed under the Apache License, Version 2.0 (the "License");
7 *  you may not use this file except in compliance with the License.
8 *  You may obtain a copy of the License at:
9 *
10 *  http://www.apache.org/licenses/LICENSE-2.0
11 *
12 *  Unless required by applicable law or agreed to in writing, software
13 *  distributed under the License is distributed on an "AS IS" BASIS,
14 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 *  See the License for the specific language governing permissions and
16 *  limitations under the License.
17 *
18 ******************************************************************************/
19#ifndef BTA_HD_API_H
20#define BTA_HD_API_H
21
22#include "bta_api.h"
23#include "hidd_api.h"
24
25/*****************************************************************************
26 *  Constants and Type Definitions
27 ****************************************************************************/
28#ifndef BTA_HD_DEBUG
29#define BTA_HD_DEBUG FALSE
30#endif
31
32/* BTA HID Device callback events */
33#define BTA_HD_ENABLE_EVT 0         /* BT-HD enabled */
34#define BTA_HD_DISABLE_EVT 1        /* BT-HD disabled */
35#define BTA_HD_REGISTER_APP_EVT 2   /* application registered */
36#define BTA_HD_UNREGISTER_APP_EVT 3 /* application unregistered */
37#define BTA_HD_OPEN_EVT 4           /* connection to host opened */
38#define BTA_HD_CLOSE_EVT 5          /* connection to host closed */
39#define BTA_HD_GET_REPORT_EVT 6     /* GET_REPORT request from host */
40#define BTA_HD_SET_REPORT_EVT 7     /* SET_REPORT request from host */
41#define BTA_HD_SET_PROTOCOL_EVT 8   /* SET_PROTOCOL request from host */
42#define BTA_HD_INTR_DATA_EVT 9      /* DATA received from host on intr */
43#define BTA_HD_VC_UNPLUG_EVT 10     /* Virtual Cable Unplug */
44#define BTA_HD_CONN_STATE_EVT 11    /* Report connection state change */
45#define BTA_HD_API_ERR_EVT 99       /* BT-HD API error */
46
47typedef uint16_t tBTA_HD_EVT;
48
49enum { BTA_HD_OK, BTA_HD_ERROR };
50typedef uint8_t tBTA_HD_STATUS;
51
52typedef tHID_DEV_DSCP_INFO tBTA_HD_DEV_DESCR;
53
54typedef struct {
55  char* p_name;
56  char* p_description;
57  char* p_provider;
58  uint8_t subclass;
59  tBTA_HD_DEV_DESCR descriptor;
60} tBTA_HD_APP_INFO;
61
62typedef struct {
63  uint8_t service_type;
64  uint32_t token_rate;
65  uint32_t token_bucket_size;
66  uint32_t peak_bandwidth;
67  uint32_t access_latency;
68  uint32_t delay_variation;
69} tBTA_HD_QOS_INFO;
70
71typedef struct {
72  bool use_intr;
73  uint8_t type;
74  uint8_t id;
75  uint16_t len;
76  uint8_t* p_data;
77} tBTA_HD_REPORT;
78
79typedef struct {
80  tBTA_HD_STATUS status;
81  bool in_use;
82  RawAddress bda;
83} tBTA_HD_REG_STATUS;
84
85typedef struct {
86  RawAddress bda;
87  tBTA_HD_STATUS status;
88} tBTA_HD_CONN;
89
90typedef struct {
91  uint8_t report_type;
92  uint8_t report_id;
93  uint16_t buffer_size;
94} tBTA_HD_GET_REPORT;
95
96typedef struct {
97  uint8_t report_type;
98  uint8_t report_id;
99  uint16_t len;
100  uint8_t* p_data;
101} tBTA_HD_SET_REPORT;
102
103typedef uint8_t tBTA_HD_SET_PROTOCOL;
104
105typedef struct {
106  uint8_t report_id;
107  uint16_t len;
108  uint8_t* p_data;
109} tBTA_HD_INTR_DATA;
110
111/* union of data associated with HD callback */
112typedef union {
113  tBTA_HD_STATUS status;             /* BTA_HD_ENABLE_EVT
114                                        BTA_HD_DISABLE_EVT
115                                        BTA_HD_UNREGISTER_APP_EVT */
116  tBTA_HD_REG_STATUS reg_status;     /* BTA_HD_REGISTER_APP_EVT */
117  tBTA_HD_CONN conn;                 /* BTA_HD_OPEN_EVT
118                                        BTA_HD_CLOSE_EVT
119                                        BTA_HD_VC_UNPLUG_EVT
120                                        BTA_HD_OWN_VC_UNPLUG_EVT */
121  tBTA_HD_GET_REPORT get_report;     /* BTA_HD_GET_REPORT */
122  tBTA_HD_SET_REPORT set_report;     /* BTA_HD_SET_REPORT */
123  tBTA_HD_SET_PROTOCOL set_protocol; /* BTA_HD_SETPROTOCOL */
124  tBTA_HD_INTR_DATA intr_data;       /* BTA_HD_INTR_DATA_EVT */
125} tBTA_HD;
126
127/* BTA HD callback function */
128typedef void(tBTA_HD_CBACK)(tBTA_HD_EVT event, tBTA_HD* p_data);
129
130/*****************************************************************************
131 *  External Function Declarations
132 ****************************************************************************/
133#ifdef __cplusplus
134extern "C" {
135#endif
136
137/*******************************************************************************
138 *
139 * Function         BTA_HhRegister
140 *
141 * Description      This function enable HID host and registers HID-Host with
142 *                  lower layers.
143 *
144 * Returns          void
145 *
146 ******************************************************************************/
147extern void BTA_HdEnable(tBTA_HD_CBACK* p_cback);
148
149/*******************************************************************************
150 *
151 * Function         BTA_HhDeregister
152 *
153 * Description      This function is called when the host is about power down.
154 *
155 * Returns          void
156 *
157 ******************************************************************************/
158extern void BTA_HdDisable(void);
159
160/*******************************************************************************
161 *
162 * Function         BTA_HdRegisterApp
163 *
164 * Description      This function is called when application should be
165*registered
166 *
167 * Returns          void
168 *
169 ******************************************************************************/
170extern void BTA_HdRegisterApp(tBTA_HD_APP_INFO* p_app_info,
171                              tBTA_HD_QOS_INFO* p_in_qos,
172                              tBTA_HD_QOS_INFO* p_out_qos);
173
174/*******************************************************************************
175 *
176 * Function         BTA_HdUnregisterApp
177 *
178 * Description      This function is called when application should be
179*unregistered
180 *
181 * Returns          void
182 *
183 ******************************************************************************/
184extern void BTA_HdUnregisterApp(void);
185
186/*******************************************************************************
187 *
188 * Function         BTA_HdSendReport
189 *
190 * Description      This function is called when report is to be sent
191 *
192 * Returns          void
193 *
194 ******************************************************************************/
195extern void BTA_HdSendReport(tBTA_HD_REPORT* p_report);
196
197/*******************************************************************************
198 *
199 * Function         BTA_HdVirtualCableUnplug
200 *
201 * Description      This function is called when VCU shall be sent
202 *
203 * Returns          void
204 *
205 ******************************************************************************/
206extern void BTA_HdVirtualCableUnplug(void);
207
208/*******************************************************************************
209 *
210 * Function         BTA_HdConnect
211 *
212 * Description      This function is called when connection to host shall be
213 *                  made
214 *
215 * Returns          void
216 *
217 ******************************************************************************/
218extern void BTA_HdConnect(const RawAddress& addr);
219
220/*******************************************************************************
221 *
222 * Function         BTA_HdDisconnect
223 *
224 * Description      This function is called when host shall be disconnected
225 *
226 * Returns          void
227 *
228 ******************************************************************************/
229extern void BTA_HdDisconnect(void);
230
231/*******************************************************************************
232 *
233 * Function         BTA_HdAddDevice
234 *
235 * Description      This function is called when a device is virtually cabled
236 *
237 * Returns          void
238 *
239 ******************************************************************************/
240extern void BTA_HdAddDevice(const RawAddress& addr);
241
242/*******************************************************************************
243 *
244 * Function         BTA_HdRemoveDevice
245 *
246 * Description      This function is called when a device is virtually uncabled
247 *
248 * Returns          void
249 *
250 ******************************************************************************/
251extern void BTA_HdRemoveDevice(const RawAddress& addr);
252
253/*******************************************************************************
254 *
255 * Function         BTA_HdReportError
256 *
257 * Description      This function is called when reporting error for set report
258 *
259 * Returns          void
260 *
261 ******************************************************************************/
262extern void BTA_HdReportError(uint8_t error);
263
264#ifdef __cplusplus
265}
266#endif
267
268#endif /* BTA_HD_API_H */
269