Home | History | Annotate | Download | only in hardware
      1 /*
      2  * Copyright (C) 2012 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 #ifndef ANDROID_INCLUDE_BT_HH_H
     18 #define ANDROID_INCLUDE_BT_HH_H
     19 
     20 #include <stdint.h>
     21 
     22 __BEGIN_DECLS
     23 
     24 #define BTHH_MAX_DSC_LEN   884
     25 
     26 /* HH connection states */
     27 typedef enum
     28 {
     29     BTHH_CONN_STATE_CONNECTED              = 0,
     30     BTHH_CONN_STATE_CONNECTING,
     31     BTHH_CONN_STATE_DISCONNECTED,
     32     BTHH_CONN_STATE_DISCONNECTING,
     33     BTHH_CONN_STATE_FAILED_MOUSE_FROM_HOST,
     34     BTHH_CONN_STATE_FAILED_KBD_FROM_HOST,
     35     BTHH_CONN_STATE_FAILED_TOO_MANY_DEVICES,
     36     BTHH_CONN_STATE_FAILED_NO_BTHID_DRIVER,
     37     BTHH_CONN_STATE_FAILED_GENERIC,
     38     BTHH_CONN_STATE_UNKNOWN
     39 } bthh_connection_state_t;
     40 
     41 typedef enum
     42 {
     43     BTHH_OK                = 0,
     44     BTHH_HS_HID_NOT_READY,        /* handshake error : device not ready */
     45     BTHH_HS_INVALID_RPT_ID,       /* handshake error : invalid report ID */
     46     BTHH_HS_TRANS_NOT_SPT,        /* handshake error : transaction not spt */
     47     BTHH_HS_INVALID_PARAM,        /* handshake error : invalid paremter */
     48     BTHH_HS_ERROR,                /* handshake error : unspecified HS error */
     49     BTHH_ERR,                     /* general BTA HH error */
     50     BTHH_ERR_SDP,                 /* SDP error */
     51     BTHH_ERR_PROTO,               /* SET_Protocol error,
     52                                                                 only used in BTA_HH_OPEN_EVT callback */
     53     BTHH_ERR_DB_FULL,             /* device database full error, used  */
     54     BTHH_ERR_TOD_UNSPT,           /* type of device not supported */
     55     BTHH_ERR_NO_RES,              /* out of system resources */
     56     BTHH_ERR_AUTH_FAILED,         /* authentication fail */
     57     BTHH_ERR_HDL
     58 }bthh_status_t;
     59 
     60 /* Protocol modes */
     61 typedef enum {
     62     BTHH_REPORT_MODE       = 0x00,
     63     BTHH_BOOT_MODE         = 0x01,
     64     BTHH_UNSUPPORTED_MODE  = 0xff
     65 }bthh_protocol_mode_t;
     66 
     67 /* Report types */
     68 typedef enum {
     69     BTHH_INPUT_REPORT      = 1,
     70     BTHH_OUTPUT_REPORT,
     71     BTHH_FEATURE_REPORT
     72 }bthh_report_type_t;
     73 
     74 typedef struct
     75 {
     76     int         attr_mask;
     77     uint8_t     sub_class;
     78     uint8_t     app_id;
     79     int         vendor_id;
     80     int         product_id;
     81     int         version;
     82     uint8_t     ctry_code;
     83     int         dl_len;
     84     uint8_t     dsc_list[BTHH_MAX_DSC_LEN];
     85 } bthh_hid_info_t;
     86 
     87 /** Callback for connection state change.
     88  *  state will have one of the values from bthh_connection_state_t
     89  */
     90 typedef void (* bthh_connection_state_callback)(bt_bdaddr_t *bd_addr, bthh_connection_state_t state);
     91 
     92 /** Callback for vitual unplug api.
     93  *  the status of the vitual unplug
     94  */
     95 typedef void (* bthh_virtual_unplug_callback)(bt_bdaddr_t *bd_addr, bthh_status_t hh_status);
     96 
     97 /** Callback for get hid info
     98  *  hid_info will contain attr_mask, sub_class, app_id, vendor_id, product_id, version, ctry_code, len
     99  */
    100 typedef void (* bthh_hid_info_callback)(bt_bdaddr_t *bd_addr, bthh_hid_info_t hid_info);
    101 
    102 /** Callback for get protocol api.
    103  *  the protocol mode is one of the value from bthh_protocol_mode_t
    104  */
    105 typedef void (* bthh_protocol_mode_callback)(bt_bdaddr_t *bd_addr, bthh_status_t hh_status, bthh_protocol_mode_t mode);
    106 
    107 /** Callback for get/set_idle_time api.
    108  */
    109 typedef void (* bthh_idle_time_callback)(bt_bdaddr_t *bd_addr, bthh_status_t hh_status, int idle_rate);
    110 
    111 
    112 /** Callback for get report api.
    113  *  if staus is ok rpt_data contains the report data
    114  */
    115 typedef void (* bthh_get_report_callback)(bt_bdaddr_t *bd_addr, bthh_status_t hh_status, uint8_t* rpt_data, int rpt_size);
    116 
    117 /** Callback for set_report/set_protocol api and if error
    118  *  occurs for get_report/get_protocol api.
    119  */
    120 typedef void (* bthh_handshake_callback)(bt_bdaddr_t *bd_addr, bthh_status_t hh_status);
    121 
    122 
    123 /** BT-HH callback structure. */
    124 typedef struct {
    125     /** set to sizeof(BtHfCallbacks) */
    126     size_t      size;
    127     bthh_connection_state_callback  connection_state_cb;
    128     bthh_hid_info_callback          hid_info_cb;
    129     bthh_protocol_mode_callback     protocol_mode_cb;
    130     bthh_idle_time_callback         idle_time_cb;
    131     bthh_get_report_callback        get_report_cb;
    132     bthh_virtual_unplug_callback    virtual_unplug_cb;
    133     bthh_handshake_callback         handshake_cb;
    134 
    135 } bthh_callbacks_t;
    136 
    137 
    138 
    139 /** Represents the standard BT-HH interface. */
    140 typedef struct {
    141 
    142     /** set to sizeof(BtHhInterface) */
    143     size_t          size;
    144 
    145     /**
    146      * Register the BtHh callbacks
    147      */
    148     bt_status_t (*init)( bthh_callbacks_t* callbacks );
    149 
    150     /** connect to hid device */
    151     bt_status_t (*connect)( bt_bdaddr_t *bd_addr);
    152 
    153     /** dis-connect from hid device */
    154     bt_status_t (*disconnect)( bt_bdaddr_t *bd_addr );
    155 
    156     /** Virtual UnPlug (VUP) the specified HID device */
    157     bt_status_t (*virtual_unplug)(bt_bdaddr_t *bd_addr);
    158 
    159     /** Set the HID device descriptor for the specified HID device. */
    160     bt_status_t (*set_info)(bt_bdaddr_t *bd_addr, bthh_hid_info_t hid_info );
    161 
    162     /** Get the HID proto mode. */
    163     bt_status_t (*get_protocol) (bt_bdaddr_t *bd_addr, bthh_protocol_mode_t protocolMode);
    164 
    165     /** Set the HID proto mode. */
    166     bt_status_t (*set_protocol)(bt_bdaddr_t *bd_addr, bthh_protocol_mode_t protocolMode);
    167 
    168     /** Send a GET_REPORT to HID device. */
    169     bt_status_t (*get_report)(bt_bdaddr_t *bd_addr, bthh_report_type_t reportType, uint8_t reportId, int bufferSize);
    170 
    171     /** Send a SET_REPORT to HID device. */
    172     bt_status_t (*set_report)(bt_bdaddr_t *bd_addr, bthh_report_type_t reportType, char* report);
    173 
    174     /** Send data to HID device. */
    175     bt_status_t (*send_data)(bt_bdaddr_t *bd_addr, char* data);
    176 
    177 	/** Closes the interface. */
    178     void  (*cleanup)( void );
    179 
    180 } bthh_interface_t;
    181 __END_DECLS
    182 
    183 #endif /* ANDROID_INCLUDE_BT_HH_H */
    184 
    185 
    186