1 /******************************************************************************
2  *
3  *  Copyright (C) 2016 The Android Open Source Project
4  *  Copyright (C) 2009-2012 Broadcom Corporation
5  *  Copyright (C) 2019 Blake Felt
6  *
7  *  Licensed under the Apache License, Version 2.0 (the "License");
8  *  you may not use this file except in compliance with the License.
9  *  You may obtain a copy of the License at:
10  *
11  *  http://www.apache.org/licenses/LICENSE-2.0
12  *
13  *  Unless required by applicable law or agreed to in writing, software
14  *  distributed under the License is distributed on an "AS IS" BASIS,
15  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  *  See the License for the specific language governing permissions and
17  *  limitations under the License.
18  *
19  ******************************************************************************/
20 #ifndef BTC_HD_H
21 #define BTC_HD_H
22 
23 #if BTC_HD_INCLUDED == TRUE
24 
25 #include <stdint.h>
26 #include "bta/bta_hd_api.h"
27 #include "btc/btc_task.h"
28 #include "esp_hidd_api.h"
29 
30 typedef enum {
31     BTC_HD_INIT_EVT = 0,
32     BTC_HD_DEINIT_EVT,
33     BTC_HD_REGISTER_APP_EVT,
34     BTC_HD_UNREGISTER_APP_EVT,
35     BTC_HD_CONNECT_EVT,
36     BTC_HD_DISCONNECT_EVT,
37     BTC_HD_SEND_REPORT_EVT,
38     BTC_HD_REPORT_ERROR_EVT,
39     BTC_HD_UNPLUG_EVT,
40 } BTC_HD_EVT;
41 
42 typedef enum { BTC_HD_DISABLED = 0, BTC_HD_ENABLED, BTC_HD_CONNECTED, BTC_HD_DISABLING } BTC_HD_STATUS;
43 
44 /* BTIF-HD control block */
45 typedef struct {
46     BTC_HD_STATUS status;
47     bool app_registered;
48     bool service_dereg_active;
49     bool forced_disc;
50     tBTA_HD_APP_INFO app_info;
51     tBTA_HD_QOS_INFO in_qos;
52     tBTA_HD_QOS_INFO out_qos;
53 } btc_hd_cb_t;
54 
55 /* btc_hidd_args_t */
56 typedef union {
57     // BTC_HD_CONNECT_EVT
58     struct connect_arg {
59         BD_ADDR bd_addr;
60     } connect;
61 
62     // BTC_HD_REGISTER_APP_EVT
63     struct register_app_arg {
64         esp_hidd_app_param_t *app_param;
65         esp_hidd_qos_param_t *in_qos;
66         esp_hidd_qos_param_t *out_qos;
67     } register_app;
68 
69     // BTC_HD_SEND_REPORT_EVT
70     struct send_report_arg {
71         esp_hidd_report_type_t type;
72         uint8_t id;
73         uint16_t len;
74         uint8_t *data;
75     } send_report;
76 
77     // BTC_HD_REPORT_ERROR_EVT
78     uint8_t error;
79 } btc_hidd_args_t;
80 
81 #ifdef __cplusplus
82 extern "C" {
83 #endif
84 
85 /******************************************************************************
86  * Functions
87  ******************************************************************************/
88 void btc_hd_call_handler(btc_msg_t *msg);
89 
90 void btc_hd_cb_handler(btc_msg_t *msg);
91 
92 // extern btc_hd_cb_t btc_hd_cb;
93 // extern void btc_hd_remove_device(bt_bdaddr_t bd_addr);
94 // extern void btc_hd_service_registration();
95 
96 void btc_hd_arg_deep_copy(btc_msg_t *msg, void *p_dest, void *p_src);
97 void btc_hd_cb_arg_deep_free(btc_msg_t *msg);
98 
99 #ifdef __cplusplus
100 }
101 #endif
102 
103 #endif /* BTC_HD_INCLUDED == TRUE */
104 #endif /* BTC_HD_H */
105