1 /******************************************************************************
2  *
3  *  Copyright (C) 2002-2012 Broadcom Corporation
4  *
5  *  Licensed under the Apache License, Version 2.0 (the "License");
6  *  you may not use this file except in compliance with the License.
7  *  You may obtain a copy of the License at:
8  *
9  *  http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  *
17  ******************************************************************************/
18 
19 /******************************************************************************
20  *
21  *  This file contains HID protocol definitions
22  *
23  ******************************************************************************/
24 
25 #ifndef HIDDEFS_H
26 #define HIDDEFS_H
27 #include "common/bt_target.h"
28 
29 #if (HID_HOST_INCLUDED == TRUE || HID_DEV_INCLUDED == TRUE)
30 
31 #if (SDP_INCLUDED == TRUE)
32 #include "stack/sdp_api.h"
33 #endif    ///SDP_INCLUDED == TRUE
34 /*
35 ** tHID_STATUS: HID result codes, returned by HID and device and host functions.
36 */
37 enum {
38     HID_SUCCESS,
39     HID_ERR_NOT_REGISTERED,
40     HID_ERR_ALREADY_REGISTERED,
41     HID_ERR_NO_RESOURCES,
42     HID_ERR_NO_CONNECTION,
43     HID_ERR_INVALID_PARAM,
44     HID_ERR_UNSUPPORTED,
45     HID_ERR_UNKNOWN_COMMAND,
46     HID_ERR_CONGESTED,
47     HID_ERR_CONN_IN_PROCESS,
48     HID_ERR_ALREADY_CONN,
49     HID_ERR_DISCONNECTING,
50     HID_ERR_SET_CONNABLE_FAIL,
51     /* Device specific error codes */
52     HID_ERR_HOST_UNKNOWN,
53     HID_ERR_L2CAP_FAILED,
54     HID_ERR_AUTH_FAILED,
55     HID_ERR_SDP_BUSY,
56     HID_ERR_GATT,
57 
58     HID_ERR_INVALID = 0xFF
59 };
60 
61 typedef UINT8 tHID_STATUS;
62 
63 #define    HID_L2CAP_CONN_FAIL (0x0100) /* Connection Attempt was made but failed */
64 #define    HID_L2CAP_REQ_FAIL  (0x0200)  /* L2CAP_ConnectReq API failed */
65 #define    HID_L2CAP_CFG_FAIL  (0x0400) /* L2CAP Configuration was rejected by peer */
66 
67 
68 
69 /* Define the HID transaction types
70 */
71 #define HID_TRANS_HANDSHAKE     (0)
72 #define HID_TRANS_CONTROL       (1)
73 #define HID_TRANS_GET_REPORT    (4)
74 #define HID_TRANS_SET_REPORT    (5)
75 #define HID_TRANS_GET_PROTOCOL  (6)
76 #define HID_TRANS_SET_PROTOCOL  (7)
77 #define HID_TRANS_GET_IDLE      (8)
78 #define HID_TRANS_SET_IDLE      (9)
79 #define HID_TRANS_DATA          (10)
80 #define HID_TRANS_DATAC         (11)
81 
82 #define HID_GET_TRANS_FROM_HDR(x) ((x >> 4) & 0x0f)
83 #define HID_GET_PARAM_FROM_HDR(x) (x & 0x0f)
84 #define HID_BUILD_HDR(t,p)  (UINT8)((t << 4) | (p & 0x0f))
85 
86 
87 /* Parameters for Handshake
88 */
89 #define HID_PAR_HANDSHAKE_RSP_SUCCESS               (0)
90 #define HID_PAR_HANDSHAKE_RSP_NOT_READY             (1)
91 #define HID_PAR_HANDSHAKE_RSP_ERR_INVALID_REP_ID    (2)
92 #define HID_PAR_HANDSHAKE_RSP_ERR_UNSUPPORTED_REQ   (3)
93 #define HID_PAR_HANDSHAKE_RSP_ERR_INVALID_PARAM     (4)
94 #define HID_PAR_HANDSHAKE_RSP_ERR_UNKNOWN           (14)
95 #define HID_PAR_HANDSHAKE_RSP_ERR_FATAL             (15)
96 
97 
98 /* Parameters for Control
99 */
100 #define HID_PAR_CONTROL_NOP                         (0)
101 #define HID_PAR_CONTROL_HARD_RESET                  (1)
102 #define HID_PAR_CONTROL_SOFT_RESET                  (2)
103 #define HID_PAR_CONTROL_SUSPEND                     (3)
104 #define HID_PAR_CONTROL_EXIT_SUSPEND                (4)
105 #define HID_PAR_CONTROL_VIRTUAL_CABLE_UNPLUG        (5)
106 
107 
108 /* Different report types in get, set, data
109 */
110 #define HID_PAR_REP_TYPE_MASK                       (0x03)
111 #define HID_PAR_REP_TYPE_OTHER                      (0x00)
112 #define HID_PAR_REP_TYPE_INPUT                      (0x01)
113 #define HID_PAR_REP_TYPE_OUTPUT                     (0x02)
114 #define HID_PAR_REP_TYPE_FEATURE                    (0x03)
115 
116 /* Parameters for Get Report
117 */
118 
119 /* Buffer size in two bytes after Report ID */
120 #define HID_PAR_GET_REP_BUFSIZE_FOLLOWS             (0x08)
121 
122 
123 /* Parameters for Protocol Type
124 */
125 #define HID_PAR_PROTOCOL_MASK                       (0x01)
126 #define HID_PAR_PROTOCOL_REPORT                     (0x01)
127 #define HID_PAR_PROTOCOL_BOOT_MODE                  (0x00)
128 
129 #define HID_PAR_REP_TYPE_MASK                       (0x03)
130 
131 /* Descriptor types in the SDP record
132 */
133 #define HID_SDP_DESCRIPTOR_REPORT                   (0x22)
134 #define HID_SDP_DESCRIPTOR_PHYSICAL                 (0x23)
135 
136 typedef struct desc_info {
137     UINT16 dl_len;
138     UINT8 *dsc_list;
139 } tHID_DEV_DSCP_INFO;
140 
141 #define HID_SSR_PARAM_INVALID    0xffff
142 
143 typedef struct sdp_info {
144     char svc_name[HID_MAX_SVC_NAME_LEN];   /*Service Name */
145     char svc_descr[HID_MAX_SVC_DESCR_LEN]; /*Service Description*/
146     char prov_name[HID_MAX_PROV_NAME_LEN]; /*Provider Name.*/
147     UINT16    rel_num;    /*Release Number */
148     UINT16    hpars_ver;  /*HID Parser Version.*/
149     UINT16    ssr_max_latency; /* HIDSSRHostMaxLatency value, if HID_SSR_PARAM_INVALID not used*/
150     UINT16    ssr_min_tout; /* HIDSSRHostMinTimeout value, if HID_SSR_PARAM_INVALID not used* */
151     UINT8     sub_class;    /*Device Subclass.*/
152     UINT8     ctry_code;     /*Country Code.*/
153     UINT16    sup_timeout;/* Supervisory Timeout */
154 
155     tHID_DEV_DSCP_INFO  dscp_info;   /* Descriptor list and Report list to be set in the SDP record.
156                                        This parameter is used if HID_DEV_USE_GLB_SDP_REC is set to FALSE.*/
157 #if(SDP_INCLUDED == TRUE)
158     tSDP_DISC_REC       *p_sdp_layer_rec;
159 #endif  ///SDP_INCLUDED == TRUE
160 } tHID_DEV_SDP_INFO;
161 
162 #endif  ///HID_HOST_INCLUDED == TRUE
163 #endif
164