1 /******************************************************************************
2  *
3  *  Copyright 2016 The Android Open Source Project
4  *  Copyright 2005-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 
20 /******************************************************************************
21  *
22  *  This file contains BTA HID Device internal definitions
23  *
24  ******************************************************************************/
25 
26 #ifndef BTA_HD_INT_H
27 #define BTA_HD_INT_H
28 
29 #include "bta_hd_api.h"
30 #include "bta_sys.h"
31 #include "hiddefs.h"
32 
33 enum {
34   BTA_HD_API_REGISTER_APP_EVT = BTA_SYS_EVT_START(BTA_ID_HD),
35   BTA_HD_API_UNREGISTER_APP_EVT,
36   BTA_HD_API_CONNECT_EVT,
37   BTA_HD_API_DISCONNECT_EVT,
38   BTA_HD_API_ADD_DEVICE_EVT,
39   BTA_HD_API_REMOVE_DEVICE_EVT,
40   BTA_HD_API_SEND_REPORT_EVT,
41   BTA_HD_API_REPORT_ERROR_EVT,
42   BTA_HD_API_VC_UNPLUG_EVT,
43   BTA_HD_INT_OPEN_EVT,
44   BTA_HD_INT_CLOSE_EVT,
45   BTA_HD_INT_INTR_DATA_EVT,
46   BTA_HD_INT_GET_REPORT_EVT,
47   BTA_HD_INT_SET_REPORT_EVT,
48   BTA_HD_INT_SET_PROTOCOL_EVT,
49   BTA_HD_INT_VC_UNPLUG_EVT,
50   BTA_HD_INT_SUSPEND_EVT,
51   BTA_HD_INT_EXIT_SUSPEND_EVT,
52 
53   /* handled outside state machine */
54   BTA_HD_API_ENABLE_EVT,
55   BTA_HD_API_DISABLE_EVT
56 };
57 typedef uint16_t tBTA_HD_INT_EVT;
58 
59 #define BTA_HD_INVALID_EVT (BTA_HD_API_DISABLE_EVT + 1)
60 
61 typedef struct {
62   BT_HDR hdr;
63   tBTA_HD_CBACK* p_cback;
64 } tBTA_HD_API_ENABLE;
65 
66 #define BTA_HD_APP_NAME_LEN 50
67 #define BTA_HD_APP_DESCRIPTION_LEN 50
68 #define BTA_HD_APP_PROVIDER_LEN 50
69 #define BTA_HD_APP_DESCRIPTOR_LEN HIDD_APP_DESCRIPTOR_LEN
70 
71 #define BTA_HD_STATE_DISABLED 0x00
72 #define BTA_HD_STATE_ENABLED 0x01
73 #define BTA_HD_STATE_IDLE 0x02
74 #define BTA_HD_STATE_CONNECTED 0x03
75 #define BTA_HD_STATE_DISABLING 0x04
76 #define BTA_HD_STATE_REMOVING 0x05
77 
78 typedef struct {
79   BT_HDR hdr;
80   char name[BTA_HD_APP_NAME_LEN];
81   char description[BTA_HD_APP_DESCRIPTION_LEN];
82   char provider[BTA_HD_APP_PROVIDER_LEN];
83   uint8_t subclass;
84   uint16_t d_len;
85   uint8_t d_data[BTA_HD_APP_DESCRIPTOR_LEN];
86 
87   tBTA_HD_QOS_INFO in_qos;
88   tBTA_HD_QOS_INFO out_qos;
89 } tBTA_HD_REGISTER_APP;
90 
91 #define BTA_HD_REPORT_LEN HID_DEV_MTU_SIZE
92 
93 typedef struct {
94   BT_HDR hdr;
95   bool use_intr;
96   uint8_t type;
97   uint8_t id;
98   uint16_t len;
99   uint8_t data[BTA_HD_REPORT_LEN];
100 } tBTA_HD_SEND_REPORT;
101 
102 typedef struct {
103   BT_HDR hdr;
104   RawAddress addr;
105 } tBTA_HD_DEVICE_CTRL;
106 
107 typedef struct {
108   BT_HDR hdr;
109   uint8_t error;
110 } tBTA_HD_REPORT_ERR;
111 
112 /* union of all event data types */
113 typedef union {
114   BT_HDR hdr;
115   tBTA_HD_API_ENABLE api_enable;
116   tBTA_HD_REGISTER_APP register_app;
117   tBTA_HD_SEND_REPORT send_report;
118   tBTA_HD_DEVICE_CTRL device_ctrl;
119   tBTA_HD_REPORT_ERR report_err;
120 } tBTA_HD_DATA;
121 
122 typedef struct {
123   BT_HDR hdr;
124   RawAddress addr;
125   uint32_t data;
126   BT_HDR* p_data;
127 } tBTA_HD_CBACK_DATA;
128 
129 /******************************************************************************
130  * Main Control Block
131  ******************************************************************************/
132 typedef struct {
133   tBTA_HD_CBACK* p_cback;
134   uint32_t sdp_handle;
135   uint8_t trace_level;
136   uint8_t state;
137   RawAddress bd_addr;
138   bool use_report_id;
139   bool boot_mode;
140   bool vc_unplug;
141   bool disable_w4_close;
142 } tBTA_HD_CB;
143 
144 extern tBTA_HD_CB bta_hd_cb;
145 
146 /*****************************************************************************
147  *  Function prototypes
148  ****************************************************************************/
149 extern bool bta_hd_hdl_event(BT_HDR* p_msg);
150 
151 extern void bta_hd_api_enable(tBTA_HD_DATA* p_data);
152 extern void bta_hd_api_disable(void);
153 
154 extern void bta_hd_register_act(tBTA_HD_DATA* p_data);
155 extern void bta_hd_unregister_act(tBTA_HD_DATA* p_data);
156 extern void bta_hd_unregister2_act(tBTA_HD_DATA* p_data);
157 extern void bta_hd_connect_act(tBTA_HD_DATA* p_data);
158 extern void bta_hd_disconnect_act(tBTA_HD_DATA* p_data);
159 extern void bta_hd_add_device_act(tBTA_HD_DATA* p_data);
160 extern void bta_hd_remove_device_act(tBTA_HD_DATA* p_data);
161 extern void bta_hd_send_report_act(tBTA_HD_DATA* p_data);
162 extern void bta_hd_report_error_act(tBTA_HD_DATA* p_data);
163 extern void bta_hd_vc_unplug_act(tBTA_HD_DATA* p_data);
164 
165 extern void bta_hd_open_act(tBTA_HD_DATA* p_data);
166 extern void bta_hd_close_act(tBTA_HD_DATA* p_data);
167 extern void bta_hd_intr_data_act(tBTA_HD_DATA* p_data);
168 extern void bta_hd_get_report_act(tBTA_HD_DATA* p_data);
169 extern void bta_hd_set_report_act(tBTA_HD_DATA* p_data);
170 extern void bta_hd_set_protocol_act(tBTA_HD_DATA* p_data);
171 extern void bta_hd_vc_unplug_done_act(tBTA_HD_DATA* p_data);
172 extern void bta_hd_suspend_act(tBTA_HD_DATA* p_data);
173 extern void bta_hd_exit_suspend_act(tBTA_HD_DATA* p_data);
174 
175 #endif
176