Andre Eisenbach | 05f4954 | 2012-09-18 12:15:26 -0700 | [diff] [blame] | 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 | |
Mike J. Chen | 753c442 | 2014-02-25 19:25:55 -0800 | [diff] [blame] | 102 | /** Callback for get protocol api. |
Andre Eisenbach | 05f4954 | 2012-09-18 12:15:26 -0700 | [diff] [blame] | 103 | * the protocol mode is one of the value from bthh_protocol_mode_t |
| 104 | */ |
Mike J. Chen | 753c442 | 2014-02-25 19:25:55 -0800 | [diff] [blame] | 105 | typedef void (* bthh_protocol_mode_callback)(bt_bdaddr_t *bd_addr, bthh_status_t hh_status, bthh_protocol_mode_t mode); |
Andre Eisenbach | 05f4954 | 2012-09-18 12:15:26 -0700 | [diff] [blame] | 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 | |
Mike J. Chen | 753c442 | 2014-02-25 19:25:55 -0800 | [diff] [blame] | 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 | |
Andre Eisenbach | 05f4954 | 2012-09-18 12:15:26 -0700 | [diff] [blame] | 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; |
Mike J. Chen | 753c442 | 2014-02-25 19:25:55 -0800 | [diff] [blame] | 133 | bthh_handshake_callback handshake_cb; |
Andre Eisenbach | 05f4954 | 2012-09-18 12:15:26 -0700 | [diff] [blame] | 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 | |
Hemant Gupta | 9625ea7 | 2013-07-30 16:13:46 +0530 | [diff] [blame^] | 168 | /** Get the HID Idle Time */ |
| 169 | bt_status_t (*get_idle_time)(bt_bdaddr_t *bd_addr); |
| 170 | |
| 171 | /** Set the HID Idle Time */ |
| 172 | bt_status_t (*set_idle_time)(bt_bdaddr_t *bd_addr, uint8_t idleTime); |
| 173 | |
Andre Eisenbach | 05f4954 | 2012-09-18 12:15:26 -0700 | [diff] [blame] | 174 | /** Send a GET_REPORT to HID device. */ |
| 175 | bt_status_t (*get_report)(bt_bdaddr_t *bd_addr, bthh_report_type_t reportType, uint8_t reportId, int bufferSize); |
| 176 | |
| 177 | /** Send a SET_REPORT to HID device. */ |
| 178 | bt_status_t (*set_report)(bt_bdaddr_t *bd_addr, bthh_report_type_t reportType, char* report); |
| 179 | |
| 180 | /** Send data to HID device. */ |
| 181 | bt_status_t (*send_data)(bt_bdaddr_t *bd_addr, char* data); |
| 182 | |
Hemant Gupta | 9625ea7 | 2013-07-30 16:13:46 +0530 | [diff] [blame^] | 183 | /** Closes the interface. */ |
Andre Eisenbach | 05f4954 | 2012-09-18 12:15:26 -0700 | [diff] [blame] | 184 | void (*cleanup)( void ); |
| 185 | |
| 186 | } bthh_interface_t; |
| 187 | __END_DECLS |
| 188 | |
| 189 | #endif /* ANDROID_INCLUDE_BT_HH_H */ |
| 190 | |
| 191 | |