tizen 2.3 release
[framework/connectivity/bluez.git] / android / hardware / bt_hh.h
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/set protocal 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
118 /** BT-HH callback structure. */
119 typedef struct {
120     /** set to sizeof(BtHfCallbacks) */
121     size_t      size;
122     bthh_connection_state_callback  connection_state_cb;
123     bthh_hid_info_callback          hid_info_cb;
124     bthh_protocol_mode_callback     protocol_mode_cb;
125     bthh_idle_time_callback         idle_time_cb;
126     bthh_get_report_callback        get_report_cb;
127     bthh_virtual_unplug_callback    virtual_unplug_cb;
128
129 } bthh_callbacks_t;
130
131
132
133 /** Represents the standard BT-HH interface. */
134 typedef struct {
135
136     /** set to sizeof(BtHhInterface) */
137     size_t          size;
138
139     /**
140      * Register the BtHh callbacks
141      */
142     bt_status_t (*init)( bthh_callbacks_t* callbacks );
143
144     /** connect to hid device */
145     bt_status_t (*connect)( bt_bdaddr_t *bd_addr);
146
147     /** dis-connect from hid device */
148     bt_status_t (*disconnect)( bt_bdaddr_t *bd_addr );
149
150     /** Virtual UnPlug (VUP) the specified HID device */
151     bt_status_t (*virtual_unplug)(bt_bdaddr_t *bd_addr);
152
153     /** Set the HID device descriptor for the specified HID device. */
154     bt_status_t (*set_info)(bt_bdaddr_t *bd_addr, bthh_hid_info_t hid_info );
155
156     /** Get the HID proto mode. */
157     bt_status_t (*get_protocol) (bt_bdaddr_t *bd_addr, bthh_protocol_mode_t protocolMode);
158
159     /** Set the HID proto mode. */
160     bt_status_t (*set_protocol)(bt_bdaddr_t *bd_addr, bthh_protocol_mode_t protocolMode);
161
162     /** Send a GET_REPORT to HID device. */
163     bt_status_t (*get_report)(bt_bdaddr_t *bd_addr, bthh_report_type_t reportType, uint8_t reportId, int bufferSize);
164
165     /** Send a SET_REPORT to HID device. */
166     bt_status_t (*set_report)(bt_bdaddr_t *bd_addr, bthh_report_type_t reportType, char* report);
167
168     /** Send data to HID device. */
169     bt_status_t (*send_data)(bt_bdaddr_t *bd_addr, char* data);
170
171         /** Closes the interface. */
172     void  (*cleanup)( void );
173
174 } bthh_interface_t;
175 __END_DECLS
176
177 #endif /* ANDROID_INCLUDE_BT_HH_H */
178
179