1/******************************************************************************
2 *
3 *  Copyright (C) 2016 The Android Open Source Project
4 *  Copyright (C) 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 HIDD_API_H
20#define HIDD_API_H
21
22#include "hiddefs.h"
23#include "sdp_api.h"
24
25/*****************************************************************************
26 *  Type Definitions
27 ****************************************************************************/
28
29enum { HID_CHANNEL_INTR, HID_CHANNEL_CTRL };
30
31/*
32    HID_DHOST_EVT_OPEN  - connected to host device (CTRL and INTR), data = n/a
33    HID_DHOST_EVT_CLOSE - disconnected from host device, data=reason
34    HID_DHOST_EVT_GET_REPORT - got GET_REPORT from host
35    HID_DHOST_EVT_SET_REPORT - got SET_REPORT from host
36    HID_DHOST_EVT_SET_PROTOCOL - got SET_PROTOCOL from host
37*/
38
39enum {
40  HID_DHOST_EVT_OPEN,
41  HID_DHOST_EVT_CLOSE,
42  HID_DHOST_EVT_GET_REPORT,
43  HID_DHOST_EVT_SET_REPORT,
44  HID_DHOST_EVT_SET_PROTOCOL,
45  HID_DHOST_EVT_INTR_DATA,
46  HID_DHOST_EVT_VC_UNPLUG,
47  HID_DHOST_EVT_SUSPEND,
48  HID_DHOST_EVT_EXIT_SUSPEND,
49};
50typedef void(tHID_DEV_HOST_CALLBACK)(BD_ADDR bd_addr, uint8_t event,
51                                     uint32_t data, BT_HDR* p_buf);
52
53/*****************************************************************************
54 *  External Function Declarations
55 ****************************************************************************/
56#ifdef __cplusplus
57extern "C" {
58#endif
59
60/*******************************************************************************
61 *
62 * Function         HID_DevInit
63 *
64 * Description      Initializes control block
65 *
66 * Returns          void
67 *
68 ******************************************************************************/
69extern void HID_DevInit(void);
70
71/*******************************************************************************
72 *
73 * Function         HID_DevRegister
74 *
75 * Description      Registers HID device with lower layers
76 *
77 * Returns          tHID_STATUS
78 *
79 ******************************************************************************/
80extern tHID_STATUS HID_DevRegister(tHID_DEV_HOST_CALLBACK* host_cback);
81
82/*******************************************************************************
83 *
84 * Function         HID_DevDeregister
85 *
86 * Description      Deregisters HID device with lower layers
87 *
88 * Returns          tHID_STATUS
89 *
90 ******************************************************************************/
91extern tHID_STATUS HID_DevDeregister(void);
92
93/*******************************************************************************
94 *
95 * Function         HID_DevSetSecurityLevel
96 *
97 * Description      Sets security level for HID device connections
98 *
99 * Returns          tHID_STATUS
100 *
101 ******************************************************************************/
102extern tHID_STATUS HID_DevSetSecurityLevel(uint8_t sec_lvl);
103
104/*******************************************************************************
105 *
106 * Function         HID_DevAddRecord
107 *
108 * Description      Creates SDP record for HID device
109 *
110 * Returns          tHID_STATUS
111 *
112 ******************************************************************************/
113extern tHID_STATUS HID_DevAddRecord(uint32_t handle, char* p_name,
114                                    char* p_description, char* p_provider,
115                                    uint16_t subclass, uint16_t desc_len,
116                                    uint8_t* p_desc_data);
117
118/*******************************************************************************
119 *
120 * Function         HID_DevSendReport
121 *
122 * Description      Sends report
123 *
124 * Returns          tHID_STATUS
125 *
126 ******************************************************************************/
127extern tHID_STATUS HID_DevSendReport(uint8_t channel, uint8_t type, uint8_t id,
128                                     uint16_t len, uint8_t* p_data);
129
130/*******************************************************************************
131 *
132 * Function         HID_DevVirtualCableUnplug
133 *
134 * Description      Sends Virtual Cable Unplug
135 *
136 * Returns          tHID_STATUS
137 *
138 ******************************************************************************/
139extern tHID_STATUS HID_DevVirtualCableUnplug(void);
140
141/*******************************************************************************
142 *
143 * Function         HID_DevPlugDevice
144 *
145 * Description      Establishes virtual cable to given host
146 *
147 * Returns          tHID_STATUS
148 *
149 ******************************************************************************/
150extern tHID_STATUS HID_DevPlugDevice(BD_ADDR addr);
151
152/*******************************************************************************
153 *
154 * Function         HID_DevUnplugDevice
155 *
156 * Description      Unplugs virtual cable from given host
157 *
158 * Returns          tHID_STATUS
159 *
160 ******************************************************************************/
161extern tHID_STATUS HID_DevUnplugDevice(BD_ADDR addr);
162
163/*******************************************************************************
164 *
165 * Function         HID_DevConnect
166 *
167 * Description      Connects to device
168 *
169 * Returns          tHID_STATUS
170 *
171 ******************************************************************************/
172extern tHID_STATUS HID_DevConnect(void);
173
174/*******************************************************************************
175 *
176 * Function         HID_DevDisconnect
177 *
178 * Description      Disconnects from device
179 *
180 * Returns          tHID_STATUS
181 *
182 ******************************************************************************/
183extern tHID_STATUS HID_DevDisconnect(void);
184
185/*******************************************************************************
186 *
187 * Function         HID_DevSetIncomingPolicy
188 *
189 * Description      Sets policy for incoming connections (allowed/disallowed)
190 *
191 * Returns          tHID_STATUS
192 *
193 ******************************************************************************/
194extern tHID_STATUS HID_DevSetIncomingPolicy(bool allow);
195
196/*******************************************************************************
197 *
198 * Function         HID_DevReportError
199 *
200 * Description      Reports error for Set Report via HANDSHAKE
201 *
202 * Returns          tHID_STATUS
203 *
204 ******************************************************************************/
205extern tHID_STATUS HID_DevReportError(uint8_t error);
206
207/*******************************************************************************
208 *
209 * Function         HID_DevGetDevice
210 *
211 * Description      Returns the BD Address of virtually cabled device
212 *
213 * Returns          tHID_STATUS
214 *
215 ******************************************************************************/
216extern tHID_STATUS HID_DevGetDevice(BD_ADDR* addr);
217
218/*******************************************************************************
219 *
220 * Function         HID_DevSetIncomingQos
221 *
222 * Description      Sets Incoming QoS values for Interrupt L2CAP Channel
223 *
224 * Returns          tHID_STATUS
225 *
226 ******************************************************************************/
227extern tHID_STATUS HID_DevSetIncomingQos(
228    uint8_t service_type, uint32_t token_rate, uint32_t token_bucket_size,
229    uint32_t peak_bandwidth, uint32_t latency, uint32_t delay_variation);
230
231/*******************************************************************************
232 *
233 * Function         HID_DevSetOutgoingQos
234 *
235 * Description      Sets Outgoing QoS values for Interrupt L2CAP Channel
236 *
237 * Returns          tHID_STATUS
238 *
239 ******************************************************************************/
240extern tHID_STATUS HID_DevSetOutgoingQos(
241    uint8_t service_type, uint32_t token_rate, uint32_t token_bucket_size,
242    uint32_t peak_bandwidth, uint32_t latency, uint32_t delay_variation);
243
244/*******************************************************************************
245 *
246 * Function         HID_DevSetTraceLevel
247 *
248 * Description      This function sets the trace level for HID Dev. If called
249 *                  with a value of 0xFF, it simply reads the current trace level.
250 *
251 * Returns          the new (current) trace level
252 *
253 ******************************************************************************/
254extern uint8_t HID_DevSetTraceLevel(uint8_t new_level);
255
256#ifdef __cplusplus
257}
258#endif
259
260#endif /* HIDD_API_H */
261