bta_hh_api.c revision 82d0a118de082b95cc41b63de8fcd79c9f1f0831
1e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang/******************************************************************************
2cec3590a151059813b91b33cd5e000c94f5bccaaGeoff Lang *
3e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang *  Copyright (C) 2005-2012 Broadcom Corporation
4e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang *
5e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang *  Licensed under the Apache License, Version 2.0 (the "License");
6e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang *  you may not use this file except in compliance with the License.
7e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang *  You may obtain a copy of the License at:
8e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang *
9e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang *  http://www.apache.org/licenses/LICENSE-2.0
1026e9195fdcf536f07e4760656b063262bda9b60dJamie Madill *
1126e9195fdcf536f07e4760656b063262bda9b60dJamie Madill *  Unless required by applicable law or agreed to in writing, software
12e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang *  distributed under the License is distributed on an "AS IS" BASIS,
13e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang *  See the License for the specific language governing permissions and
15e261b44af7631c31ddca8601490e7445af5a3341Jamie Madill *  limitations under the License.
16e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang *
17e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang ******************************************************************************/
18db2f14c0b1133507215dd3b7a30155b70885973aJamie Madill
193639892dee8ec8cecf4bae4b0585a7cefde98d80Jamie Madill/******************************************************************************
20250d33fb25761753061afd70f64aeff4ccecaa5bJamie Madill *
21d4cfa57df4df85546a969f66ec50d364f6e6d4feJamie Madill *  This file contains the HID HOST API in the subsystem of BTA.
222b97681b9ac01909bc60f5c6caecef3599b2acf9Jamie Madill *
23e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang ******************************************************************************/
24e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang
25e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang#include "bt_target.h"
26e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang
27e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang#if defined(BTA_HH_INCLUDED) && (BTA_HH_INCLUDED == TRUE)
28e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang
29e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang#include <stdlib.h>
300550d0389a59a50a1df0df3484ecefc864715e26Geoff Lang#include <string.h>
310550d0389a59a50a1df0df3484ecefc864715e26Geoff Lang#include <stdio.h>
320550d0389a59a50a1df0df3484ecefc864715e26Geoff Lang
330550d0389a59a50a1df0df3484ecefc864715e26Geoff Lang#include "bta_hh_api.h"
340550d0389a59a50a1df0df3484ecefc864715e26Geoff Lang#include "bta_hh_int.h"
350550d0389a59a50a1df0df3484ecefc864715e26Geoff Lang#include "l2c_api.h"
360550d0389a59a50a1df0df3484ecefc864715e26Geoff Lang#include "utl.h"
370550d0389a59a50a1df0df3484ecefc864715e26Geoff Lang
380550d0389a59a50a1df0df3484ecefc864715e26Geoff Lang/*****************************************************************************
390550d0389a59a50a1df0df3484ecefc864715e26Geoff Lang**  Constants
400550d0389a59a50a1df0df3484ecefc864715e26Geoff Lang*****************************************************************************/
410550d0389a59a50a1df0df3484ecefc864715e26Geoff Lang
420550d0389a59a50a1df0df3484ecefc864715e26Geoff Langstatic const tBTA_SYS_REG bta_hh_reg =
430550d0389a59a50a1df0df3484ecefc864715e26Geoff Lang{
440550d0389a59a50a1df0df3484ecefc864715e26Geoff Lang    bta_hh_hdl_event,
450550d0389a59a50a1df0df3484ecefc864715e26Geoff Lang    BTA_HhDisable
460550d0389a59a50a1df0df3484ecefc864715e26Geoff Lang};
470550d0389a59a50a1df0df3484ecefc864715e26Geoff Lang
480550d0389a59a50a1df0df3484ecefc864715e26Geoff Lang/*******************************************************************************
490550d0389a59a50a1df0df3484ecefc864715e26Geoff Lang**
500550d0389a59a50a1df0df3484ecefc864715e26Geoff Lang** Function         BTA_HhEnable
510550d0389a59a50a1df0df3484ecefc864715e26Geoff Lang**
521fc7e2c5961207aa2bd1a99978d661b4cbcbf144Jamie Madill** Description      Enable the HID host.  This function must be called before
5335d1501b7bcbacd7af96a65a52fb545c772e41bfJamie Madill**                  any other functions in the HID host API are called. When the
54d7460c7e3769793f62749c137fe7c82e7eda5cc9Jamie Madill**                  enable operation is complete the callback function will be
5535d1501b7bcbacd7af96a65a52fb545c772e41bfJamie Madill**                  called with BTA_HH_ENABLE_EVT.
56d7460c7e3769793f62749c137fe7c82e7eda5cc9Jamie Madill**
57d7460c7e3769793f62749c137fe7c82e7eda5cc9Jamie Madill**
58d7460c7e3769793f62749c137fe7c82e7eda5cc9Jamie Madill** Returns          void
59d7460c7e3769793f62749c137fe7c82e7eda5cc9Jamie Madill**
60d7460c7e3769793f62749c137fe7c82e7eda5cc9Jamie Madill*******************************************************************************/
61d7460c7e3769793f62749c137fe7c82e7eda5cc9Jamie Madillvoid BTA_HhEnable(tBTA_SEC sec_mask, tBTA_HH_CBACK *p_cback)
62d7460c7e3769793f62749c137fe7c82e7eda5cc9Jamie Madill{
6335d1501b7bcbacd7af96a65a52fb545c772e41bfJamie Madill    tBTA_HH_API_ENABLE *p_buf;
64d7460c7e3769793f62749c137fe7c82e7eda5cc9Jamie Madill
65d7460c7e3769793f62749c137fe7c82e7eda5cc9Jamie Madill    /* register with BTA system manager */
66d7460c7e3769793f62749c137fe7c82e7eda5cc9Jamie Madill    bta_sys_register(BTA_ID_HH, &bta_hh_reg);
6735d1501b7bcbacd7af96a65a52fb545c772e41bfJamie Madill
6835d1501b7bcbacd7af96a65a52fb545c772e41bfJamie Madill    APPL_TRACE_ERROR0("Calling BTA_HhEnable");
694dfed837cbbdf55d82b2a602d9f5806201f80fa7Shannon Woods    p_buf = (tBTA_HH_API_ENABLE *)GKI_getbuf((UINT16)sizeof(tBTA_HH_API_ENABLE));
704dfed837cbbdf55d82b2a602d9f5806201f80fa7Shannon Woods
714dfed837cbbdf55d82b2a602d9f5806201f80fa7Shannon Woods    if (p_buf != NULL)
72560a8d889b6866d7d29da968971818437e9cde36Jamie Madill    {
734dfed837cbbdf55d82b2a602d9f5806201f80fa7Shannon Woods        memset(p_buf, 0, sizeof(tBTA_HH_API_ENABLE));
744dfed837cbbdf55d82b2a602d9f5806201f80fa7Shannon Woods
754dfed837cbbdf55d82b2a602d9f5806201f80fa7Shannon Woods        p_buf->hdr.event = BTA_HH_API_ENABLE_EVT;
764dfed837cbbdf55d82b2a602d9f5806201f80fa7Shannon Woods        p_buf->p_cback = p_cback;
774dfed837cbbdf55d82b2a602d9f5806201f80fa7Shannon Woods        p_buf->sec_mask = sec_mask;
784dfed837cbbdf55d82b2a602d9f5806201f80fa7Shannon Woods
794dfed837cbbdf55d82b2a602d9f5806201f80fa7Shannon Woods        bta_sys_sendmsg(p_buf);
804dfed837cbbdf55d82b2a602d9f5806201f80fa7Shannon Woods    }
814dfed837cbbdf55d82b2a602d9f5806201f80fa7Shannon Woods}
824dfed837cbbdf55d82b2a602d9f5806201f80fa7Shannon Woods
834dfed837cbbdf55d82b2a602d9f5806201f80fa7Shannon Woods/*******************************************************************************
844dfed837cbbdf55d82b2a602d9f5806201f80fa7Shannon Woods**
854dfed837cbbdf55d82b2a602d9f5806201f80fa7Shannon Woods** Function         BTA_HhDisable
864dfed837cbbdf55d82b2a602d9f5806201f80fa7Shannon Woods**
874dfed837cbbdf55d82b2a602d9f5806201f80fa7Shannon Woods** Description      Disable the HID host. If the server is currently
884dfed837cbbdf55d82b2a602d9f5806201f80fa7Shannon Woods**                  connected, the connection will be closed.
894dfed837cbbdf55d82b2a602d9f5806201f80fa7Shannon Woods**
904dfed837cbbdf55d82b2a602d9f5806201f80fa7Shannon Woods** Returns          void
914dfed837cbbdf55d82b2a602d9f5806201f80fa7Shannon Woods**
924dfed837cbbdf55d82b2a602d9f5806201f80fa7Shannon Woods*******************************************************************************/
931fc7e2c5961207aa2bd1a99978d661b4cbcbf144Jamie Madillvoid BTA_HhDisable(void)
941fc7e2c5961207aa2bd1a99978d661b4cbcbf144Jamie Madill{
951fc7e2c5961207aa2bd1a99978d661b4cbcbf144Jamie Madill    BT_HDR  *p_buf;
961fc7e2c5961207aa2bd1a99978d661b4cbcbf144Jamie Madill
971fc7e2c5961207aa2bd1a99978d661b4cbcbf144Jamie Madill    bta_sys_deregister(BTA_ID_HH);
981fc7e2c5961207aa2bd1a99978d661b4cbcbf144Jamie Madill    if ((p_buf = (BT_HDR *)GKI_getbuf(sizeof(BT_HDR))) != NULL)
991fc7e2c5961207aa2bd1a99978d661b4cbcbf144Jamie Madill    {
1001fc7e2c5961207aa2bd1a99978d661b4cbcbf144Jamie Madill        p_buf->event = BTA_HH_API_DISABLE_EVT;
1011fc7e2c5961207aa2bd1a99978d661b4cbcbf144Jamie Madill        bta_sys_sendmsg(p_buf);
1021fc7e2c5961207aa2bd1a99978d661b4cbcbf144Jamie Madill    }
1031fc7e2c5961207aa2bd1a99978d661b4cbcbf144Jamie Madill}
1041fc7e2c5961207aa2bd1a99978d661b4cbcbf144Jamie Madill
1051fc7e2c5961207aa2bd1a99978d661b4cbcbf144Jamie Madill/*******************************************************************************
1068c96d58af5a5994c81b81032f775dc7d24cb5661Jamie Madill**
1078c96d58af5a5994c81b81032f775dc7d24cb5661Jamie Madill** Function         BTA_HhClose
1088c96d58af5a5994c81b81032f775dc7d24cb5661Jamie Madill**
1098c96d58af5a5994c81b81032f775dc7d24cb5661Jamie Madill** Description      Disconnect a connection.
1108c96d58af5a5994c81b81032f775dc7d24cb5661Jamie Madill**
1118c96d58af5a5994c81b81032f775dc7d24cb5661Jamie Madill** Returns          void
1128c96d58af5a5994c81b81032f775dc7d24cb5661Jamie Madill**
1138c96d58af5a5994c81b81032f775dc7d24cb5661Jamie Madill*******************************************************************************/
1148c96d58af5a5994c81b81032f775dc7d24cb5661Jamie Madillvoid BTA_HhClose(UINT8 dev_handle)
1158c96d58af5a5994c81b81032f775dc7d24cb5661Jamie Madill{
116c0b9ef4bce04077046ca57b9bc249f26e42d07caGeoff Lang    BT_HDR    *p_buf;
117158c43846f00a3c283c20898ddaf2e6705b51103Shannon Woods
118b3801744ed9df17a7d8d290e203938818ad90addShannon Woods    if ((p_buf = (BT_HDR *)GKI_getbuf((UINT16)sizeof(BT_HDR))) != NULL)
119b3801744ed9df17a7d8d290e203938818ad90addShannon Woods    {
1208c96d58af5a5994c81b81032f775dc7d24cb5661Jamie Madill        memset(p_buf, 0, sizeof(BT_HDR));
1218c96d58af5a5994c81b81032f775dc7d24cb5661Jamie Madill        p_buf->event            = BTA_HH_API_CLOSE_EVT;
1228c96d58af5a5994c81b81032f775dc7d24cb5661Jamie Madill        p_buf->layer_specific   = (UINT16) dev_handle;
1238c96d58af5a5994c81b81032f775dc7d24cb5661Jamie Madill
1248c96d58af5a5994c81b81032f775dc7d24cb5661Jamie Madill        bta_sys_sendmsg(p_buf);
1258c96d58af5a5994c81b81032f775dc7d24cb5661Jamie Madill    }
1268c96d58af5a5994c81b81032f775dc7d24cb5661Jamie Madill}
1278c96d58af5a5994c81b81032f775dc7d24cb5661Jamie Madill
1288c96d58af5a5994c81b81032f775dc7d24cb5661Jamie Madill/*******************************************************************************
12970656a64851b8014a325dd711297054032e466c1Jamie Madill**
13070656a64851b8014a325dd711297054032e466c1Jamie Madill** Function         BTA_HhOpen
13170656a64851b8014a325dd711297054032e466c1Jamie Madill**
13270656a64851b8014a325dd711297054032e466c1Jamie Madill** Description      Connect to a device of specified BD address in specified
13370656a64851b8014a325dd711297054032e466c1Jamie Madill**                  protocol mode and security level.
13470656a64851b8014a325dd711297054032e466c1Jamie Madill**
13570656a64851b8014a325dd711297054032e466c1Jamie Madill** Returns          void
13670656a64851b8014a325dd711297054032e466c1Jamie Madill**
13770656a64851b8014a325dd711297054032e466c1Jamie Madill*******************************************************************************/
13870656a64851b8014a325dd711297054032e466c1Jamie Madillvoid BTA_HhOpen(BD_ADDR dev_bda, tBTA_HH_PROTO_MODE mode, tBTA_SEC sec_mask)
13970656a64851b8014a325dd711297054032e466c1Jamie Madill{
14070656a64851b8014a325dd711297054032e466c1Jamie Madill    tBTA_HH_API_CONN *p_buf;
14170656a64851b8014a325dd711297054032e466c1Jamie Madill
14270656a64851b8014a325dd711297054032e466c1Jamie Madill    p_buf = (tBTA_HH_API_CONN *)GKI_getbuf((UINT16)sizeof(tBTA_HH_API_CONN));
14370656a64851b8014a325dd711297054032e466c1Jamie Madill
14470656a64851b8014a325dd711297054032e466c1Jamie Madill    if (p_buf!= NULL)
14570656a64851b8014a325dd711297054032e466c1Jamie Madill    {
14670656a64851b8014a325dd711297054032e466c1Jamie Madill        memset((void *)p_buf, 0, sizeof(tBTA_HH_API_CONN));
14770656a64851b8014a325dd711297054032e466c1Jamie Madill
14870656a64851b8014a325dd711297054032e466c1Jamie Madill        p_buf->hdr.event            = BTA_HH_API_OPEN_EVT;
14970656a64851b8014a325dd711297054032e466c1Jamie Madill        p_buf->hdr.layer_specific   = BTA_HH_INVALID_HANDLE;
1508c96d58af5a5994c81b81032f775dc7d24cb5661Jamie Madill        p_buf->sec_mask             = sec_mask;
151ce6356958ba86c2b09e62e1250cabd6bab16a082Geoff Lang        p_buf->mode                 = mode;
152aae65a4e53fae703cc0ea92adc649247367917fdGeoff Lang        bdcpy(p_buf->bd_addr, dev_bda);
153ce6356958ba86c2b09e62e1250cabd6bab16a082Geoff Lang
154ce6356958ba86c2b09e62e1250cabd6bab16a082Geoff Lang        bta_sys_sendmsg((void *)p_buf);
155aae65a4e53fae703cc0ea92adc649247367917fdGeoff Lang    }
156ce6356958ba86c2b09e62e1250cabd6bab16a082Geoff Lang    else
157ce6356958ba86c2b09e62e1250cabd6bab16a082Geoff Lang    {
158ce6356958ba86c2b09e62e1250cabd6bab16a082Geoff Lang        APPL_TRACE_ERROR0("No resource to send HID host Connect request.");
159ce6356958ba86c2b09e62e1250cabd6bab16a082Geoff Lang    }
160ce6356958ba86c2b09e62e1250cabd6bab16a082Geoff Lang}
161ce6356958ba86c2b09e62e1250cabd6bab16a082Geoff Lang
162aae65a4e53fae703cc0ea92adc649247367917fdGeoff Lang/*******************************************************************************
163aae65a4e53fae703cc0ea92adc649247367917fdGeoff Lang**
164aae65a4e53fae703cc0ea92adc649247367917fdGeoff Lang** Function  bta_hh_snd_write_dev
165ce6356958ba86c2b09e62e1250cabd6bab16a082Geoff Lang**
166ce6356958ba86c2b09e62e1250cabd6bab16a082Geoff Lang*******************************************************************************/
167ce6356958ba86c2b09e62e1250cabd6bab16a082Geoff Langstatic void bta_hh_snd_write_dev(UINT8 dev_handle, UINT8 t_type, UINT8 param,
168aae65a4e53fae703cc0ea92adc649247367917fdGeoff Lang                                 UINT16 data, UINT8 rpt_id, BT_HDR  *p_data)
169ce6356958ba86c2b09e62e1250cabd6bab16a082Geoff Lang{
170ce6356958ba86c2b09e62e1250cabd6bab16a082Geoff Lang    tBTA_HH_CMD_DATA *p_buf;
1714fd75c1c991e86ed1d1c1e43ef0220c5491605b1Jamie Madill    UINT16          len = (UINT16) (sizeof(tBTA_HH_CMD_DATA) );
1724fd75c1c991e86ed1d1c1e43ef0220c5491605b1Jamie Madill
173ce6356958ba86c2b09e62e1250cabd6bab16a082Geoff Lang    if ((p_buf = (tBTA_HH_CMD_DATA *)GKI_getbuf(len))!= NULL)
174ce6356958ba86c2b09e62e1250cabd6bab16a082Geoff Lang    {
175ce6356958ba86c2b09e62e1250cabd6bab16a082Geoff Lang        memset(p_buf, 0, sizeof(tBTA_HH_CMD_DATA));
176ce6356958ba86c2b09e62e1250cabd6bab16a082Geoff Lang
177ce6356958ba86c2b09e62e1250cabd6bab16a082Geoff Lang        p_buf->hdr.event = BTA_HH_API_WRITE_DEV_EVT;
178ce6356958ba86c2b09e62e1250cabd6bab16a082Geoff Lang        p_buf->hdr.layer_specific   = (UINT16) dev_handle;
179c0b9ef4bce04077046ca57b9bc249f26e42d07caGeoff Lang        p_buf->t_type   = t_type;
1804fd75c1c991e86ed1d1c1e43ef0220c5491605b1Jamie Madill        p_buf->data     = data;
181ce6356958ba86c2b09e62e1250cabd6bab16a082Geoff Lang        p_buf->param    = param;
182ce6356958ba86c2b09e62e1250cabd6bab16a082Geoff Lang        p_buf->p_data   = p_data;
183ce6356958ba86c2b09e62e1250cabd6bab16a082Geoff Lang        p_buf->rpt_id   = rpt_id;
184ce6356958ba86c2b09e62e1250cabd6bab16a082Geoff Lang
185ce6356958ba86c2b09e62e1250cabd6bab16a082Geoff Lang        bta_sys_sendmsg(p_buf);
186ce6356958ba86c2b09e62e1250cabd6bab16a082Geoff Lang    }
187ce6356958ba86c2b09e62e1250cabd6bab16a082Geoff Lang}
188ce6356958ba86c2b09e62e1250cabd6bab16a082Geoff Lang/*******************************************************************************
189ce6356958ba86c2b09e62e1250cabd6bab16a082Geoff Lang**
190ce6356958ba86c2b09e62e1250cabd6bab16a082Geoff Lang** Function         BTA_HhSetReport
191ce6356958ba86c2b09e62e1250cabd6bab16a082Geoff Lang**
192ce6356958ba86c2b09e62e1250cabd6bab16a082Geoff Lang** Description      send SET_REPORT to device.
193005df41f8900641ed1df60700c8e2eca659a33cbGeoff Lang**
194d4f180b2a52c1a11160a9756e2dbc1586337dd19Geoff Lang** Parameter        dev_handle: device handle
1955d601382b51c29d1670b58c01360416bd929842dGeoff Lang**                  r_type:     report type, could be BTA_HH_RPTT_OUTPUT or
1965d601382b51c29d1670b58c01360416bd929842dGeoff Lang**                              BTA_HH_RPTT_FEATURE.
197d4f180b2a52c1a11160a9756e2dbc1586337dd19Geoff Lang** Returns          void
198d4f180b2a52c1a11160a9756e2dbc1586337dd19Geoff Lang**
199d4f180b2a52c1a11160a9756e2dbc1586337dd19Geoff Lang*******************************************************************************/
200d4f180b2a52c1a11160a9756e2dbc1586337dd19Geoff Langvoid BTA_HhSetReport(UINT8 dev_handle, tBTA_HH_RPT_TYPE r_type, BT_HDR *p_data)
2015d601382b51c29d1670b58c01360416bd929842dGeoff Lang{
2025d601382b51c29d1670b58c01360416bd929842dGeoff Lang    bta_hh_snd_write_dev(dev_handle, HID_TRANS_SET_REPORT, r_type, 0, 0, p_data);
203d4f180b2a52c1a11160a9756e2dbc1586337dd19Geoff Lang}
204d4f180b2a52c1a11160a9756e2dbc1586337dd19Geoff Lang/*******************************************************************************
205d4f180b2a52c1a11160a9756e2dbc1586337dd19Geoff Lang**
206d4f180b2a52c1a11160a9756e2dbc1586337dd19Geoff Lang** Function         BTA_HhGetReport
207d4f180b2a52c1a11160a9756e2dbc1586337dd19Geoff Lang**
208d4f180b2a52c1a11160a9756e2dbc1586337dd19Geoff Lang** Description      Send a GET_REPORT to HID device.
209d4f180b2a52c1a11160a9756e2dbc1586337dd19Geoff Lang**
21037dde6929d79c9a523bd6c786d2b6c6544be8c9dGeoff Lang** Returns          void
21137dde6929d79c9a523bd6c786d2b6c6544be8c9dGeoff Lang**
21237dde6929d79c9a523bd6c786d2b6c6544be8c9dGeoff Lang*******************************************************************************/
21337dde6929d79c9a523bd6c786d2b6c6544be8c9dGeoff Langvoid BTA_HhGetReport(UINT8 dev_handle, tBTA_HH_RPT_TYPE r_type, UINT8 rpt_id, UINT16 buf_size)
21437dde6929d79c9a523bd6c786d2b6c6544be8c9dGeoff Lang{
21537dde6929d79c9a523bd6c786d2b6c6544be8c9dGeoff Lang    UINT8 param = (buf_size) ? (r_type | 0x08) : r_type;
21637dde6929d79c9a523bd6c786d2b6c6544be8c9dGeoff Lang
21737dde6929d79c9a523bd6c786d2b6c6544be8c9dGeoff Lang    bta_hh_snd_write_dev(dev_handle, HID_TRANS_GET_REPORT, param,
21837dde6929d79c9a523bd6c786d2b6c6544be8c9dGeoff Lang                        buf_size, rpt_id, NULL);
21937dde6929d79c9a523bd6c786d2b6c6544be8c9dGeoff Lang}
22037dde6929d79c9a523bd6c786d2b6c6544be8c9dGeoff Lang/*******************************************************************************
22137dde6929d79c9a523bd6c786d2b6c6544be8c9dGeoff Lang**
22237dde6929d79c9a523bd6c786d2b6c6544be8c9dGeoff Lang** Function         BTA_HhSetProtoMode
22337dde6929d79c9a523bd6c786d2b6c6544be8c9dGeoff Lang**
22437dde6929d79c9a523bd6c786d2b6c6544be8c9dGeoff Lang** Description      This function set the protocol mode at specified HID handle
22537dde6929d79c9a523bd6c786d2b6c6544be8c9dGeoff Lang**
22637dde6929d79c9a523bd6c786d2b6c6544be8c9dGeoff Lang** Returns          void
22748dcae7b217420a7387c84a76651989e6f5f3576Geoff Lang**
22848dcae7b217420a7387c84a76651989e6f5f3576Geoff Lang*******************************************************************************/
22948dcae7b217420a7387c84a76651989e6f5f3576Geoff Langvoid BTA_HhSetProtoMode(UINT8 dev_handle, tBTA_HH_PROTO_MODE p_type)
23048dcae7b217420a7387c84a76651989e6f5f3576Geoff Lang{
23148dcae7b217420a7387c84a76651989e6f5f3576Geoff Lang    bta_hh_snd_write_dev(dev_handle, HID_TRANS_SET_PROTOCOL, (UINT8)p_type,
23248dcae7b217420a7387c84a76651989e6f5f3576Geoff Lang                        0, 0, NULL);
23348dcae7b217420a7387c84a76651989e6f5f3576Geoff Lang}
23448dcae7b217420a7387c84a76651989e6f5f3576Geoff Lang/*******************************************************************************
23548dcae7b217420a7387c84a76651989e6f5f3576Geoff Lang**
23648dcae7b217420a7387c84a76651989e6f5f3576Geoff Lang** Function         BTA_HhGetProtoMode
23748dcae7b217420a7387c84a76651989e6f5f3576Geoff Lang**
23848dcae7b217420a7387c84a76651989e6f5f3576Geoff Lang** Description      This function get protocol mode information.
23948dcae7b217420a7387c84a76651989e6f5f3576Geoff Lang**
24048dcae7b217420a7387c84a76651989e6f5f3576Geoff Lang** Returns          void
24148dcae7b217420a7387c84a76651989e6f5f3576Geoff Lang**
24248dcae7b217420a7387c84a76651989e6f5f3576Geoff Lang*******************************************************************************/
24348dcae7b217420a7387c84a76651989e6f5f3576Geoff Langvoid BTA_HhGetProtoMode(UINT8 dev_handle)
24448dcae7b217420a7387c84a76651989e6f5f3576Geoff Lang{
24548dcae7b217420a7387c84a76651989e6f5f3576Geoff Lang    bta_hh_snd_write_dev(dev_handle, HID_TRANS_GET_PROTOCOL, 0, 0, 0, NULL);
24648dcae7b217420a7387c84a76651989e6f5f3576Geoff Lang}
24748dcae7b217420a7387c84a76651989e6f5f3576Geoff Lang/*******************************************************************************
24848dcae7b217420a7387c84a76651989e6f5f3576Geoff Lang**
249b4472275a0c686fe2ba062e796d80375c4593708Jamie Madill** Function         BTA_HhSetIdle
250b4472275a0c686fe2ba062e796d80375c4593708Jamie Madill**
251b4472275a0c686fe2ba062e796d80375c4593708Jamie Madill** Description      send SET_IDLE to device.
252b4472275a0c686fe2ba062e796d80375c4593708Jamie Madill**
253b4472275a0c686fe2ba062e796d80375c4593708Jamie Madill** Returns          void
254b4472275a0c686fe2ba062e796d80375c4593708Jamie Madill**
255aae65a4e53fae703cc0ea92adc649247367917fdGeoff Lang*******************************************************************************/
256b4472275a0c686fe2ba062e796d80375c4593708Jamie Madillvoid BTA_HhSetIdle(UINT8 dev_handle, UINT16 idle_rate)
257b4472275a0c686fe2ba062e796d80375c4593708Jamie Madill{
258b4472275a0c686fe2ba062e796d80375c4593708Jamie Madill    bta_hh_snd_write_dev(dev_handle, HID_TRANS_SET_IDLE, 0, idle_rate, 0, NULL);
259b4472275a0c686fe2ba062e796d80375c4593708Jamie Madill}
260b4472275a0c686fe2ba062e796d80375c4593708Jamie Madill
261b4472275a0c686fe2ba062e796d80375c4593708Jamie Madill/*******************************************************************************
262b4472275a0c686fe2ba062e796d80375c4593708Jamie Madill**
263b4472275a0c686fe2ba062e796d80375c4593708Jamie Madill** Function         BTA_HhGetIdle
264b4472275a0c686fe2ba062e796d80375c4593708Jamie Madill**
265b4472275a0c686fe2ba062e796d80375c4593708Jamie Madill** Description      Send a GET_IDLE from HID device.
266b4472275a0c686fe2ba062e796d80375c4593708Jamie Madill**
267b4472275a0c686fe2ba062e796d80375c4593708Jamie Madill** Returns          void
268b4472275a0c686fe2ba062e796d80375c4593708Jamie Madill**
269b4472275a0c686fe2ba062e796d80375c4593708Jamie Madill*******************************************************************************/
270b4472275a0c686fe2ba062e796d80375c4593708Jamie Madillvoid BTA_HhGetIdle(UINT8 dev_handle)
271b4472275a0c686fe2ba062e796d80375c4593708Jamie Madill{
272b4472275a0c686fe2ba062e796d80375c4593708Jamie Madill    bta_hh_snd_write_dev(dev_handle, HID_TRANS_GET_IDLE, 0, 0, 0, NULL);
273b4472275a0c686fe2ba062e796d80375c4593708Jamie Madill}
274b4472275a0c686fe2ba062e796d80375c4593708Jamie Madill/*******************************************************************************
275b4472275a0c686fe2ba062e796d80375c4593708Jamie Madill**
276b4472275a0c686fe2ba062e796d80375c4593708Jamie Madill** Function         BTA_HhSendCtrl
277b4472275a0c686fe2ba062e796d80375c4593708Jamie Madill**
278b4472275a0c686fe2ba062e796d80375c4593708Jamie Madill** Description      Send a control command to HID device.
279b4472275a0c686fe2ba062e796d80375c4593708Jamie Madill**
280b4472275a0c686fe2ba062e796d80375c4593708Jamie Madill** Returns          void
281b4472275a0c686fe2ba062e796d80375c4593708Jamie Madill**
282b4472275a0c686fe2ba062e796d80375c4593708Jamie Madill*******************************************************************************/
28334dbb6f5ed0ca2cc55a3f1faaa7d6ce2f95d0c18Geoff Langvoid BTA_HhSendCtrl(UINT8 dev_handle, tBTA_HH_TRANS_CTRL_TYPE c_type)
284e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang{
285e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang    bta_hh_snd_write_dev(dev_handle, HID_TRANS_CONTROL, (UINT8)c_type, 0, 0, NULL);
286e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang}
287e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang/*******************************************************************************
288e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang**
289e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang** Function         BTA_HhSendData
290e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang**
291e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang** Description      This function send DATA transaction to HID device.
292e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang**
293e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang** Parameter        dev_handle: device handle
294e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang**                  dev_bda: remote device address
295e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang**                  p_data: data to be sent in the DATA transaction; or
296e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang**                          the data to be write into the Output Report of a LE HID
297e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang**                          device. The report is identified the report ID which is
298e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang**                          the value of the byte (UINT8 *)(p_buf + 1) + p_buf->offset.
299e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang**                          p_data->layer_specific needs to be set to the report type,
3005d601382b51c29d1670b58c01360416bd929842dGeoff Lang**                          it can be OUTPUT report, or FEATURE report.
3015d601382b51c29d1670b58c01360416bd929842dGeoff Lang**
302e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang** Returns          void
303e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang**
304e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang*******************************************************************************/
305e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Langvoid BTA_HhSendData(UINT8 dev_handle, BD_ADDR dev_bda, BT_HDR  *p_data)
306e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang{
307e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang    UNUSED(dev_bda);
308e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang#if (defined BTA_HH_LE_INCLUDED && BTA_HH_LE_INCLUDED == TRUE)
309e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang    if (p_data->layer_specific != BTA_HH_RPTT_OUTPUT)
3105d601382b51c29d1670b58c01360416bd929842dGeoff Lang    {
311e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang        APPL_TRACE_ERROR0("ERROR! Wrong report type! Write Command only valid for output report!");
312e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang        return;
313e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang    }
314e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang#endif
3155d601382b51c29d1670b58c01360416bd929842dGeoff Lang    bta_hh_snd_write_dev(dev_handle, HID_TRANS_DATA, (UINT8)p_data->layer_specific, 0, 0, p_data);
316e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang}
317e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang
318e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang/*******************************************************************************
319e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang**
320c0b9ef4bce04077046ca57b9bc249f26e42d07caGeoff Lang** Function         BTA_HhGetDscpInfo
3216cf8e1b906ebfcda10f0f1cc673df6688c81e0e0Geoff Lang**
322e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang** Description      Get HID device report descriptor
323e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang**
324e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang** Returns          void
325e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang**
326aae65a4e53fae703cc0ea92adc649247367917fdGeoff Lang*******************************************************************************/
327e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Langvoid BTA_HhGetDscpInfo(UINT8 dev_handle)
328e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang{
329e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang    BT_HDR    *p_buf;
330e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang
331e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang    if ((p_buf = (BT_HDR *)GKI_getbuf((UINT16)sizeof(BT_HDR))) != NULL)
332e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang    {
333e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang        memset(p_buf, 0, sizeof(BT_HDR));
334e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang        p_buf->event            = BTA_HH_API_GET_DSCP_EVT;
335e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang        p_buf->layer_specific   = (UINT16) dev_handle;
336e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang
3375f4c46363bf8e7eb6852c3af42a2e57157e72113Geoff Lang        bta_sys_sendmsg(p_buf);
3385f4c46363bf8e7eb6852c3af42a2e57157e72113Geoff Lang    }
339e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang}
340e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang
341e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang/*******************************************************************************
3425f4c46363bf8e7eb6852c3af42a2e57157e72113Geoff Lang**
3435f4c46363bf8e7eb6852c3af42a2e57157e72113Geoff Lang** Function         BTA_HhAddDev
3445f4c46363bf8e7eb6852c3af42a2e57157e72113Geoff Lang**
3455f4c46363bf8e7eb6852c3af42a2e57157e72113Geoff Lang** Description      Add a virtually cabled device into HID-Host device list
3465f4c46363bf8e7eb6852c3af42a2e57157e72113Geoff Lang**                  to manage and assign a device handle for future API call,
3475f4c46363bf8e7eb6852c3af42a2e57157e72113Geoff Lang**                  host applciation call this API at start-up to initialize its
348e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang**                  virtually cabled devices.
349e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang**
350e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang** Returns          void
3515f4c46363bf8e7eb6852c3af42a2e57157e72113Geoff Lang**
352e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang*******************************************************************************/
353e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Langvoid BTA_HhAddDev(BD_ADDR bda, tBTA_HH_ATTR_MASK attr_mask, UINT8 sub_class,
354e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang                  UINT8 app_id, tBTA_HH_DEV_DSCP_INFO dscp_info)
355e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang{
356e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang    tBTA_HH_MAINT_DEV    *p_buf;
35753a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    UINT16  len = sizeof(tBTA_HH_MAINT_DEV) + dscp_info.descriptor.dl_len;
358e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang
359e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang    p_buf = (tBTA_HH_MAINT_DEV *)GKI_getbuf(len);
360e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang
361e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang    if (p_buf != NULL)
362e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang    {
363e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang        memset(p_buf, 0, sizeof(tBTA_HH_MAINT_DEV));
364e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang
365e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang        p_buf->hdr.event            = BTA_HH_API_MAINT_DEV_EVT;
3661fc7e2c5961207aa2bd1a99978d661b4cbcbf144Jamie Madill        p_buf->sub_event            = BTA_HH_ADD_DEV_EVT;
3671fc7e2c5961207aa2bd1a99978d661b4cbcbf144Jamie Madill        p_buf->hdr.layer_specific   = BTA_HH_INVALID_HANDLE;
3681fc7e2c5961207aa2bd1a99978d661b4cbcbf144Jamie Madill
3691da3cf639e59990084b0079ffd290676e37e6753Shannon Woods        p_buf->attr_mask            = (UINT16) attr_mask;
3701da3cf639e59990084b0079ffd290676e37e6753Shannon Woods        p_buf->sub_class            = sub_class;
3711da3cf639e59990084b0079ffd290676e37e6753Shannon Woods        p_buf->app_id               = app_id;
3721da3cf639e59990084b0079ffd290676e37e6753Shannon Woods        bdcpy(p_buf->bda, bda);
3731da3cf639e59990084b0079ffd290676e37e6753Shannon Woods
37453a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods        memcpy(&p_buf->dscp_info, &dscp_info, sizeof(tBTA_HH_DEV_DSCP_INFO));
37553a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods        if ( dscp_info.descriptor.dl_len != 0 && dscp_info.descriptor.dsc_list)
3761fc7e2c5961207aa2bd1a99978d661b4cbcbf144Jamie Madill        {
3771fc7e2c5961207aa2bd1a99978d661b4cbcbf144Jamie Madill            p_buf->dscp_info.descriptor.dl_len =  dscp_info.descriptor.dl_len;
3781fc7e2c5961207aa2bd1a99978d661b4cbcbf144Jamie Madill            p_buf->dscp_info.descriptor.dsc_list = (UINT8 *)(p_buf + 1);
3791fc7e2c5961207aa2bd1a99978d661b4cbcbf144Jamie Madill            memcpy(p_buf->dscp_info.descriptor.dsc_list, dscp_info.descriptor.dsc_list, dscp_info.descriptor.dl_len);
3801fc7e2c5961207aa2bd1a99978d661b4cbcbf144Jamie Madill        }
3811fc7e2c5961207aa2bd1a99978d661b4cbcbf144Jamie Madill        else
382b4472275a0c686fe2ba062e796d80375c4593708Jamie Madill        {
3831fc7e2c5961207aa2bd1a99978d661b4cbcbf144Jamie Madill            p_buf->dscp_info.descriptor.dsc_list = NULL;
384b4472275a0c686fe2ba062e796d80375c4593708Jamie Madill            p_buf->dscp_info.descriptor.dl_len = 0;
3851fc7e2c5961207aa2bd1a99978d661b4cbcbf144Jamie Madill        }
3861fc7e2c5961207aa2bd1a99978d661b4cbcbf144Jamie Madill
387ab9d82cd54156991f9f88851d3ba0c8c1f96838aJamie Madill        bta_sys_sendmsg(p_buf);
388ab9d82cd54156991f9f88851d3ba0c8c1f96838aJamie Madill    }
389ab9d82cd54156991f9f88851d3ba0c8c1f96838aJamie Madill}
390ab9d82cd54156991f9f88851d3ba0c8c1f96838aJamie Madill/*******************************************************************************
391ab9d82cd54156991f9f88851d3ba0c8c1f96838aJamie Madill**
392ab9d82cd54156991f9f88851d3ba0c8c1f96838aJamie Madill** Function         BTA_HhRemoveDev
393ab9d82cd54156991f9f88851d3ba0c8c1f96838aJamie Madill**
394ab9d82cd54156991f9f88851d3ba0c8c1f96838aJamie Madill** Description      Remove a device from the HID host devices list.
395ab9d82cd54156991f9f88851d3ba0c8c1f96838aJamie Madill**
396ab9d82cd54156991f9f88851d3ba0c8c1f96838aJamie Madill** Returns          void
397ab9d82cd54156991f9f88851d3ba0c8c1f96838aJamie Madill**
398ab9d82cd54156991f9f88851d3ba0c8c1f96838aJamie Madill*******************************************************************************/
3991fc7e2c5961207aa2bd1a99978d661b4cbcbf144Jamie Madillvoid BTA_HhRemoveDev(UINT8 dev_handle )
4001fc7e2c5961207aa2bd1a99978d661b4cbcbf144Jamie Madill{
4011fc7e2c5961207aa2bd1a99978d661b4cbcbf144Jamie Madill    tBTA_HH_MAINT_DEV    *p_buf;
4023c7fa226aeb81469b93142b54e339f13a46ab835Jamie Madill
403125deab6241c659dab0c9bb9f55c08daecc2f534Geoff Lang    p_buf = (tBTA_HH_MAINT_DEV *)GKI_getbuf((UINT16)sizeof(tBTA_HH_MAINT_DEV));
404125deab6241c659dab0c9bb9f55c08daecc2f534Geoff Lang
405125deab6241c659dab0c9bb9f55c08daecc2f534Geoff Lang    if (p_buf != NULL)
406125deab6241c659dab0c9bb9f55c08daecc2f534Geoff Lang    {
407125deab6241c659dab0c9bb9f55c08daecc2f534Geoff Lang        memset(p_buf, 0, sizeof(tBTA_HH_MAINT_DEV));
408125deab6241c659dab0c9bb9f55c08daecc2f534Geoff Lang
409125deab6241c659dab0c9bb9f55c08daecc2f534Geoff Lang        p_buf->hdr.event            = BTA_HH_API_MAINT_DEV_EVT;
410125deab6241c659dab0c9bb9f55c08daecc2f534Geoff Lang        p_buf->sub_event            = BTA_HH_RMV_DEV_EVT;
411125deab6241c659dab0c9bb9f55c08daecc2f534Geoff Lang        p_buf->hdr.layer_specific   = (UINT16) dev_handle;
41253a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
413125deab6241c659dab0c9bb9f55c08daecc2f534Geoff Lang        bta_sys_sendmsg(p_buf);
41453a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    }
415125deab6241c659dab0c9bb9f55c08daecc2f534Geoff Lang}
41653a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods#if BTA_HH_LE_INCLUDED == TRUE
41753a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
41853a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods/*******************************************************************************
419125deab6241c659dab0c9bb9f55c08daecc2f534Geoff Lang**
420125deab6241c659dab0c9bb9f55c08daecc2f534Geoff Lang** Function         BTA_HhUpdateLeScanParam
421125deab6241c659dab0c9bb9f55c08daecc2f534Geoff Lang**
422125deab6241c659dab0c9bb9f55c08daecc2f534Geoff Lang** Description      Update the scan paramteters if connected to a LE hid device as
423125deab6241c659dab0c9bb9f55c08daecc2f534Geoff Lang**                  report host.
424125deab6241c659dab0c9bb9f55c08daecc2f534Geoff Lang**
425125deab6241c659dab0c9bb9f55c08daecc2f534Geoff Lang** Returns          void
42634dbb6f5ed0ca2cc55a3f1faaa7d6ce2f95d0c18Geoff Lang**
427e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang*******************************************************************************/
428e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Langvoid BTA_HhUpdateLeScanParam(UINT8 dev_handle, UINT16 scan_int, UINT16 scan_win)
429e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang{
430e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang    tBTA_HH_SCPP_UPDATE    *p_buf;
431e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang
432e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang    p_buf = (tBTA_HH_SCPP_UPDATE *)GKI_getbuf((UINT16)sizeof(tBTA_HH_SCPP_UPDATE));
433e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang
434e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang    if (p_buf != NULL)
435e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang    {
436e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang        memset(p_buf, 0, sizeof(tBTA_HH_SCPP_UPDATE));
437e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang
438e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang        p_buf->hdr.event            = BTA_HH_API_SCPP_UPDATE_EVT;
439e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang        p_buf->hdr.layer_specific   = (UINT16) dev_handle;
440e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang        p_buf->scan_int             =  scan_int;
441e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang        p_buf->scan_win             =  scan_win;
442e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang
443e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang        bta_sys_sendmsg(p_buf);
444e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang    }
445e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang}
446e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang#endif
447e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang/*******************************************************************************/
448e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang/*                          Utility Function                                   */
449e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang/*******************************************************************************/
450e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang
451e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang/*******************************************************************************
452e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang**
453e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang** Function         BTA_HhParseBootRpt
454e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang**
455e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang** Description      This utility function parse a boot mode report.
456e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang**                  For keyboard report, report data will carry the keycode max
457e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang**                  up to 6 key press in one report. Application need to convert
458e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang**                  the keycode into keypress character according to keyboard
459e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang**                  language.
460e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang**
461e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang** Returns          void
462e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang**
463e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang*******************************************************************************/
464e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Langvoid BTA_HhParseBootRpt(tBTA_HH_BOOT_RPT *p_data, UINT8 *p_report,
465e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang                        UINT16 report_len)
466e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang{
467e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang    p_data->dev_type = BTA_HH_DEVT_UNKNOWN;
468e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang
46953a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    if (p_report)
470e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang    {
471e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang        /* first byte is report ID */
472e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang        switch (p_report[0])
473e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang        {
474e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang        case BTA_HH_KEYBD_RPT_ID: /* key board report ID */
475e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang            p_data->dev_type = p_report[0];
476e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang            bta_hh_parse_keybd_rpt(p_data, p_report + 1, (UINT16)(report_len -1));
477e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang            break;
478e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang
47953a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods        case BTA_HH_MOUSE_RPT_ID: /* mouse report ID */
48053a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods            p_data->dev_type = p_report[0];
481e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang            bta_hh_parse_mice_rpt(p_data, p_report + 1, (UINT16)(report_len - 1));
482e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang            break;
483e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang
484e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang        default:
485e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang            APPL_TRACE_DEBUG1("Unknown boot report: %d", p_report[0]);;
486e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang            break;
487e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang        }
488e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang    }
489e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang
490e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang    return;
491e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang}
492e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang
493e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang#endif /* BTA_HH_INCLUDED */
494e8ebe7f6ec21c3e624998d6fc1d10d1dbf6103c9Geoff Lang