Home | History | Annotate | Download | only in hd
      1 /******************************************************************************
      2  *
      3  *  Copyright (C) 2016 The Android Open Source Project
      4  *  Copyright (C) 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 2048
     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 + 1];
     81   char description[BTA_HD_APP_DESCRIPTION_LEN + 1];
     82   char provider[BTA_HD_APP_PROVIDER_LEN + 1];
     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 #if BTA_DYNAMIC_MEMORY == FALSE
    145 extern tBTA_HD_CB bta_hd_cb;
    146 #else
    147 extern tBTA_HD_CB* bta_hd_cb_ptr;
    148 #define bta_hd_cb (*bta_hd_cb_ptr)
    149 #endif
    150 
    151 /*****************************************************************************
    152  *  Function prototypes
    153  ****************************************************************************/
    154 extern bool bta_hd_hdl_event(BT_HDR* p_msg);
    155 
    156 extern void bta_hd_api_enable(tBTA_HD_DATA* p_data);
    157 extern void bta_hd_api_disable(void);
    158 
    159 extern void bta_hd_register_act(tBTA_HD_DATA* p_data);
    160 extern void bta_hd_unregister_act(tBTA_HD_DATA* p_data);
    161 extern void bta_hd_unregister2_act(tBTA_HD_DATA* p_data);
    162 extern void bta_hd_connect_act(tBTA_HD_DATA* p_data);
    163 extern void bta_hd_disconnect_act(tBTA_HD_DATA* p_data);
    164 extern void bta_hd_add_device_act(tBTA_HD_DATA* p_data);
    165 extern void bta_hd_remove_device_act(tBTA_HD_DATA* p_data);
    166 extern void bta_hd_send_report_act(tBTA_HD_DATA* p_data);
    167 extern void bta_hd_report_error_act(tBTA_HD_DATA* p_data);
    168 extern void bta_hd_vc_unplug_act(tBTA_HD_DATA* p_data);
    169 
    170 extern void bta_hd_open_act(tBTA_HD_DATA* p_data);
    171 extern void bta_hd_close_act(tBTA_HD_DATA* p_data);
    172 extern void bta_hd_intr_data_act(tBTA_HD_DATA* p_data);
    173 extern void bta_hd_get_report_act(tBTA_HD_DATA* p_data);
    174 extern void bta_hd_set_report_act(tBTA_HD_DATA* p_data);
    175 extern void bta_hd_set_protocol_act(tBTA_HD_DATA* p_data);
    176 extern void bta_hd_vc_unplug_done_act(tBTA_HD_DATA* p_data);
    177 extern void bta_hd_suspend_act(tBTA_HD_DATA* p_data);
    178 extern void bta_hd_exit_suspend_act(tBTA_HD_DATA* p_data);
    179 
    180 #endif
    181