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