bta_hd_act.cc revision f9c5752344ec459def74765f512d28fa0f402168
18843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/****************************************************************************** 28843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 38843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Copyright (C) 2016 The Android Open Source Project 48843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Copyright (C) 2005-2012 Broadcom Corporation 58843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 68843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Licensed under the Apache License, Version 2.0 (the "License"); 78843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * you may not use this file except in compliance with the License. 88843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * You may obtain a copy of the License at: 98843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 108843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * http://www.apache.org/licenses/LICENSE-2.0 118843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 128843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Unless required by applicable law or agreed to in writing, software 138843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * distributed under the License is distributed on an "AS IS" BASIS, 148843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 158843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * See the License for the specific language governing permissions and 168843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * limitations under the License. 178843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 188843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 198843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 208843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/****************************************************************************** 218843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 228843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * This file contains the HID device action functions. 238843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 248843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 258843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 268843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta#include "bt_target.h" 278843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 288843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta#if defined(BTA_HD_INCLUDED) && (BTA_HD_INCLUDED == TRUE) 298843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 30844daca6a8cae4a263dcc9c30e065e5c2c74da2fIvan Podogov#include <hardware/bluetooth.h> 31844daca6a8cae4a263dcc9c30e065e5c2c74da2fIvan Podogov#include <hardware/bt_hd.h> 328843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta#include <string.h> 338843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 348843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta#include "bt_utils.h" 358843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta#include "bta_hd_int.h" 368843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta#include "bta_sys.h" 378843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta#include "btm_api.h" 388843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 398843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta#include "osi/include/osi.h" 408843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 418843cc830b522cfe6f1e361297fc28fd331a1378Hemant Guptastatic void bta_hd_cback(BD_ADDR bd_addr, uint8_t event, uint32_t data, 428843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta BT_HDR* pdata); 438843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 448843cc830b522cfe6f1e361297fc28fd331a1378Hemant Guptastatic bool check_descriptor(uint8_t* data, uint16_t length, 458843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bool* has_report_id) { 468843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta uint8_t* ptr = data; 478843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 488843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta *has_report_id = FALSE; 498843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 508843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta while (ptr < data + length) { 518843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta uint8_t item = *ptr++; 528843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 538843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta switch (item) { 548843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta case 0xfe: // long item indicator 558843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ptr += ((*ptr) + 2); 568843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta break; 578843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 588843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta case 0x85: // Report ID 598843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta *has_report_id = TRUE; 608843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 618843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta default: 628843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ptr += (item & 0x03); 638843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta break; 648843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } 658843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } 668843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 678843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta return (ptr == data + length); 688843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 698843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 708843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 718843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 728843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_api_enable 738843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 748843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description Enables HID device 758843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 768843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 778843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 788843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 798843cc830b522cfe6f1e361297fc28fd331a1378Hemant Guptavoid bta_hd_api_enable(tBTA_HD_DATA* p_data) { 808843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_STATUS status = BTA_HD_ERROR; 818843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tHID_STATUS ret; 828843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 838843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_API("%s", __func__); 848843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 858843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta HID_DevInit(); 868843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 878843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta memset(&bta_hd_cb, 0, sizeof(tBTA_HD_CB)); 888843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 898843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta HID_DevSetSecurityLevel(BTA_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT); 908843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 918843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta /* store parameters */ 928843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bta_hd_cb.p_cback = p_data->api_enable.p_cback; 938843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 94f9c5752344ec459def74765f512d28fa0f402168Marie Janssen ret = HID_DevRegister(bta_hd_cback); 95f9c5752344ec459def74765f512d28fa0f402168Marie Janssen if (ret == HID_SUCCESS) { 968843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta status = BTA_HD_OK; 978843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } else { 988843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_ERROR("%s: Failed to register HID device (%d)", __func__, ret); 998843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } 1008843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 1018843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta /* signal BTA call back event */ 1028843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta (*bta_hd_cb.p_cback)(BTA_HD_ENABLE_EVT, (tBTA_HD*)&status); 1038843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 1048843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 1058843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 1068843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 1078843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_api_disable 1088843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 1098843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description Disables HID device 1108843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 1118843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 1128843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 1138843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 1148843cc830b522cfe6f1e361297fc28fd331a1378Hemant Guptavoid bta_hd_api_disable(void) { 1158843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_STATUS status = BTA_HD_ERROR; 1168843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tHID_STATUS ret; 1178843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 1188843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_API("%s", __func__); 1198843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 1208843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta /* service is not enabled */ 1218843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta if (bta_hd_cb.p_cback == NULL) return; 1228843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 1238843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta /* Remove service record */ 1248843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta if (bta_hd_cb.sdp_handle != 0) { 1258843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta SDP_DeleteRecord(bta_hd_cb.sdp_handle); 1268843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bta_sys_remove_uuid(UUID_SERVCLASS_HUMAN_INTERFACE); 1278843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } 1288843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 1298843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta /* Deregister with lower layer */ 130f9c5752344ec459def74765f512d28fa0f402168Marie Janssen ret = HID_DevDeregister(); 131f9c5752344ec459def74765f512d28fa0f402168Marie Janssen if (ret == HID_SUCCESS) { 1328843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta status = BTA_HD_OK; 1338843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } else { 1348843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_ERROR("%s: Failed to deregister HID device (%s)", __func__, ret); 1358843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } 1368843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 1378843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta (*bta_hd_cb.p_cback)(BTA_HD_DISABLE_EVT, (tBTA_HD*)&status); 1388843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 1398843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta memset(&bta_hd_cb, 0, sizeof(tBTA_HD_CB)); 1408843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 1418843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 1428843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 1438843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 1448843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_register_act 1458843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 1468843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description Registers SDP record 1478843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 1488843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 1498843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 1508843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 1518843cc830b522cfe6f1e361297fc28fd331a1378Hemant Guptavoid bta_hd_register_act(tBTA_HD_DATA* p_data) { 1528843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD ret; 1538843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_REGISTER_APP* p_app_data = (tBTA_HD_REGISTER_APP*)p_data; 1548843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 1558843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_API("%s", __func__); 1568843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 1578843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ret.reg_status.in_use = FALSE; 1588843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 1598843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta /* Check if len doesn't exceed BTA_HD_APP_DESCRIPTOR_LEN */ 1608843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta if (p_app_data->d_len > BTA_HD_APP_DESCRIPTOR_LEN) { 1618843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ret.reg_status.status = BTA_HD_ERROR; 1628843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta (*bta_hd_cb.p_cback)(BTA_HD_REGISTER_APP_EVT, &ret); 1638843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta return; 1648843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } 1658843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 1668843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ret.reg_status.status = BTA_HD_OK; 1678843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 1688843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta /* Remove old record if for some reason it's already registered */ 1698843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta if (bta_hd_cb.sdp_handle != 0) { 1708843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta SDP_DeleteRecord(bta_hd_cb.sdp_handle); 1718843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } 1728843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 1738843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta // need to check if descriptor has Report Id item so we know if report will 1748843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta // have prefix or not 1758843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta check_descriptor(p_app_data->d_data, p_app_data->d_len, 1768843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta &bta_hd_cb.use_report_id); 1778843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 1788843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bta_hd_cb.sdp_handle = SDP_CreateRecord(); 1798843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta HID_DevAddRecord(bta_hd_cb.sdp_handle, p_app_data->name, 1808843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta p_app_data->description, p_app_data->provider, 1818843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta p_app_data->subclass, p_app_data->d_len, p_app_data->d_data); 1828843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bta_sys_add_uuid(UUID_SERVCLASS_HUMAN_INTERFACE); 1838843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 1848843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta HID_DevSetIncomingQos( 1858843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta p_app_data->in_qos.service_type, p_app_data->in_qos.token_rate, 1868843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta p_app_data->in_qos.token_bucket_size, p_app_data->in_qos.peak_bandwidth, 1878843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta p_app_data->in_qos.access_latency, p_app_data->in_qos.delay_variation); 1888843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 1898843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta HID_DevSetOutgoingQos( 1908843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta p_app_data->out_qos.service_type, p_app_data->out_qos.token_rate, 1918843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta p_app_data->out_qos.token_bucket_size, p_app_data->out_qos.peak_bandwidth, 1928843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta p_app_data->out_qos.access_latency, p_app_data->out_qos.delay_variation); 1938843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 1948843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta // application is registered so we can accept incoming connections 1958843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta HID_DevSetIncomingPolicy(TRUE); 1968843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 1978843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta if (HID_DevGetDevice(&ret.reg_status.bda) == HID_SUCCESS) { 1988843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ret.reg_status.in_use = TRUE; 1998843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } 2008843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 2018843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta (*bta_hd_cb.p_cback)(BTA_HD_REGISTER_APP_EVT, &ret); 2028843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 2038843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 2048843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 2058843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 2068843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_unregister_act 2078843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 2088843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description Unregisters SDP record 2098843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 2108843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 2118843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 2128843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 2138843cc830b522cfe6f1e361297fc28fd331a1378Hemant Guptavoid bta_hd_unregister_act(UNUSED_ATTR tBTA_HD_DATA* p_data) { 2148843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_STATUS status = BTA_HD_OK; 2158843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 2168843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_API("%s", __func__); 2178843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 2188843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta // application is no longer registered so we do not want incoming connections 2198843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta HID_DevSetIncomingPolicy(FALSE); 2208843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 2218843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta if (bta_hd_cb.sdp_handle != 0) { 2228843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta SDP_DeleteRecord(bta_hd_cb.sdp_handle); 2238843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } 2248843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 2258843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bta_hd_cb.sdp_handle = 0; 2268843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bta_sys_remove_uuid(UUID_SERVCLASS_HUMAN_INTERFACE); 2278843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 2288843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta (*bta_hd_cb.p_cback)(BTA_HD_UNREGISTER_APP_EVT, (tBTA_HD*)&status); 2298843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 2308843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 2318843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 2328843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 2338843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_unregister2_act 2348843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 2358843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description 2368843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 2378843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 2388843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 2398843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 2408843cc830b522cfe6f1e361297fc28fd331a1378Hemant Guptavoid bta_hd_unregister2_act(tBTA_HD_DATA* p_data) { 2418843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_API("%s", __func__); 2428843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 2438843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta // close first 2448843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bta_hd_close_act(p_data); 2458843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 2468843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta // then unregister 2478843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bta_hd_unregister_act(p_data); 2488843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 2498843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta if (bta_hd_cb.disable_w4_close) { 2508843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bta_hd_api_disable(); 2518843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } 2528843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 2538843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 2548843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 2558843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 2568843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_connect_act 2578843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 2588843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description Connect to device (must be virtually plugged) 2598843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 2608843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 2618843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 2628843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 263456e200272ad66b5005fa16d5a07701e5a86fcd4Ivan Podogovextern void bta_hd_connect_act(tBTA_HD_DATA* p_data) { 2648843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tHID_STATUS ret; 265456e200272ad66b5005fa16d5a07701e5a86fcd4Ivan Podogov tBTA_HD_DEVICE_CTRL* p_ctrl = (tBTA_HD_DEVICE_CTRL*)p_data; 266844daca6a8cae4a263dcc9c30e065e5c2c74da2fIvan Podogov tBTA_HD cback_data; 2678843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 2688843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_API("%s", __func__); 2698843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 270456e200272ad66b5005fa16d5a07701e5a86fcd4Ivan Podogov ret = HID_DevPlugDevice(p_ctrl->addr); 271456e200272ad66b5005fa16d5a07701e5a86fcd4Ivan Podogov if (ret != HID_SUCCESS) { 272456e200272ad66b5005fa16d5a07701e5a86fcd4Ivan Podogov APPL_TRACE_WARNING("%s: HID_DevPlugDevice returned %d", __func__, ret); 273456e200272ad66b5005fa16d5a07701e5a86fcd4Ivan Podogov return; 274456e200272ad66b5005fa16d5a07701e5a86fcd4Ivan Podogov } 2758843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 276456e200272ad66b5005fa16d5a07701e5a86fcd4Ivan Podogov ret = HID_DevConnect(); 2778843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta if (ret != HID_SUCCESS) { 2788843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_WARNING("%s: HID_DevConnect returned %d", __func__, ret); 279844daca6a8cae4a263dcc9c30e065e5c2c74da2fIvan Podogov return; 2808843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } 281844daca6a8cae4a263dcc9c30e065e5c2c74da2fIvan Podogov 282844daca6a8cae4a263dcc9c30e065e5c2c74da2fIvan Podogov bdcpy(cback_data.conn.bda, p_ctrl->addr); 283844daca6a8cae4a263dcc9c30e065e5c2c74da2fIvan Podogov cback_data.conn.status = BTHD_CONN_STATE_CONNECTING; 284844daca6a8cae4a263dcc9c30e065e5c2c74da2fIvan Podogov 285844daca6a8cae4a263dcc9c30e065e5c2c74da2fIvan Podogov bta_hd_cb.p_cback(BTA_HD_CONN_STATE_EVT, &cback_data); 2868843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 2878843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 2888843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 2898843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 2908843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_disconnect_act 2918843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 2928843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description Disconnect from device 2938843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 2948843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 2958843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 2968843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 2978843cc830b522cfe6f1e361297fc28fd331a1378Hemant Guptaextern void bta_hd_disconnect_act(UNUSED_ATTR tBTA_HD_DATA* p_data) { 2988843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tHID_STATUS ret; 299844daca6a8cae4a263dcc9c30e065e5c2c74da2fIvan Podogov tBTA_HD cback_data; 3008843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 3018843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_API("%s", __func__); 3028843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 3038843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ret = HID_DevDisconnect(); 3048843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 3058843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta if (ret != HID_SUCCESS) { 3068843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_WARNING("%s: HID_DevDisconnect returned %d", __func__, ret); 307844daca6a8cae4a263dcc9c30e065e5c2c74da2fIvan Podogov return; 3088843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } 309844daca6a8cae4a263dcc9c30e065e5c2c74da2fIvan Podogov 310367373ba8bcfb1d9db41b1904de372483991fc10Ivan Podogov if (HID_DevGetDevice(&cback_data.conn.bda) == HID_SUCCESS) { 311367373ba8bcfb1d9db41b1904de372483991fc10Ivan Podogov cback_data.conn.status = BTHD_CONN_STATE_DISCONNECTING; 312367373ba8bcfb1d9db41b1904de372483991fc10Ivan Podogov bta_hd_cb.p_cback(BTA_HD_CONN_STATE_EVT, &cback_data); 313367373ba8bcfb1d9db41b1904de372483991fc10Ivan Podogov } 3148843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 3158843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 3168843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 3178843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 3188843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_add_device_act 3198843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 3208843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description 3218843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 3228843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 3238843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 3248843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 3258843cc830b522cfe6f1e361297fc28fd331a1378Hemant Guptaextern void bta_hd_add_device_act(tBTA_HD_DATA* p_data) { 3268843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_DEVICE_CTRL* p_ctrl = (tBTA_HD_DEVICE_CTRL*)p_data; 3278843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 3288843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_API("%s", __func__); 3298843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 3308843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta HID_DevPlugDevice(p_ctrl->addr); 3318843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 3328843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 3338843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 3348843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 3358843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_remove_device_act 3368843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 3378843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description 3388843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 3398843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 3408843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 3418843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 3428843cc830b522cfe6f1e361297fc28fd331a1378Hemant Guptaextern void bta_hd_remove_device_act(tBTA_HD_DATA* p_data) { 3438843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_DEVICE_CTRL* p_ctrl = (tBTA_HD_DEVICE_CTRL*)p_data; 3448843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 3458843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_API("%s", __func__); 3468843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 3478843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta HID_DevUnplugDevice(p_ctrl->addr); 3488843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 3498843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 3508843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 3518843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 3528843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_send_report_act 3538843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 3548843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description Sends report 3558843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 3568843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 3578843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 3588843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 3598843cc830b522cfe6f1e361297fc28fd331a1378Hemant Guptaextern void bta_hd_send_report_act(tBTA_HD_DATA* p_data) { 3608843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_SEND_REPORT* p_report = (tBTA_HD_SEND_REPORT*)p_data; 3618843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta uint8_t channel; 3628843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta uint8_t report_id; 3638843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 3648843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_VERBOSE("%s", __func__); 3658843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 3668843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta channel = p_report->use_intr ? HID_CHANNEL_INTR : HID_CHANNEL_CTRL; 3678843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta report_id = 3688843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta (bta_hd_cb.use_report_id || bta_hd_cb.boot_mode) ? p_report->id : 0x00; 3698843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 3708843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta HID_DevSendReport(channel, p_report->type, report_id, p_report->len, 3718843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta p_report->data); 3728843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 3738843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta /* trigger PM */ 3748843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bta_sys_busy(BTA_ID_HD, 1, bta_hd_cb.bd_addr); 3758843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bta_sys_idle(BTA_ID_HD, 1, bta_hd_cb.bd_addr); 3768843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 3778843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 3788843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 3798843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 3808843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_report_error_act 3818843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 3828843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description 3838843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 3848843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 3858843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 3868843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 3878843cc830b522cfe6f1e361297fc28fd331a1378Hemant Guptaextern void bta_hd_report_error_act(tBTA_HD_DATA* p_data) { 3888843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_REPORT_ERR* p_report = (tBTA_HD_REPORT_ERR*)p_data; 3898843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tHID_STATUS ret; 3908843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 3918843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_API("%s: error = %d", __func__, p_report->error); 3928843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 3938843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ret = HID_DevReportError(p_report->error); 3948843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 3958843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta if (ret != HID_SUCCESS) { 3968843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_WARNING("%s: HID_DevReportError returned %d", __func__, ret); 3978843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } 3988843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 3998843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 4008843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 4018843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 4028843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_vc_unplug_act 4038843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 4048843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description Sends Virtual Cable Unplug 4058843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 4068843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 4078843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 4088843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 4098843cc830b522cfe6f1e361297fc28fd331a1378Hemant Guptaextern void bta_hd_vc_unplug_act(UNUSED_ATTR tBTA_HD_DATA* p_data) { 4108843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tHID_STATUS ret; 4118843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 4128843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_API("%s", __func__); 4138843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 4148843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bta_hd_cb.vc_unplug = TRUE; 4158843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 4168843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ret = HID_DevVirtualCableUnplug(); 4178843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 4188843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta if (ret != HID_SUCCESS) { 4198843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_WARNING("%s: HID_DevVirtualCableUnplug returned %d", __func__, 4208843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ret); 4218843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } 4228843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 4238843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta /* trigger PM */ 4248843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bta_sys_busy(BTA_ID_HD, 1, bta_hd_cb.bd_addr); 4258843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bta_sys_idle(BTA_ID_HD, 1, bta_hd_cb.bd_addr); 4268843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 4278843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 4288843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 4298843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 4308843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_open_act 4318843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 4328843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description 4338843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 4348843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 4358843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 4368843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 4378843cc830b522cfe6f1e361297fc28fd331a1378Hemant Guptaextern void bta_hd_open_act(tBTA_HD_DATA* p_data) { 4388843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_CBACK_DATA* p_cback = (tBTA_HD_CBACK_DATA*)p_data; 4398843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD cback_data; 4408843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 4418843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_API("%s", __func__); 4428843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 4438843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta HID_DevPlugDevice(p_cback->addr); 4448843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bta_sys_conn_open(BTA_ID_HD, 1, p_cback->addr); 4458843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 4468843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bdcpy(cback_data.conn.bda, p_cback->addr); 4478843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bdcpy(bta_hd_cb.bd_addr, p_cback->addr); 4488843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 4498843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bta_hd_cb.p_cback(BTA_HD_OPEN_EVT, &cback_data); 4508843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 4518843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 4528843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 4538843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 4548843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_close_act 4558843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 4568843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description 4578843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 4588843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 4598843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 4608843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 4618843cc830b522cfe6f1e361297fc28fd331a1378Hemant Guptaextern void bta_hd_close_act(tBTA_HD_DATA* p_data) { 4628843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_CBACK_DATA* p_cback = (tBTA_HD_CBACK_DATA*)p_data; 4638843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD cback_data; 4648843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_EVT cback_event = BTA_HD_CLOSE_EVT; 4658843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 4668843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_API("%s", __func__); 4678843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 4688843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bta_sys_conn_close(BTA_ID_HD, 1, p_cback->addr); 4698843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 4708843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta if (bta_hd_cb.vc_unplug) { 4718843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bta_hd_cb.vc_unplug = FALSE; 4728843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta HID_DevUnplugDevice(p_cback->addr); 4738843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta cback_event = BTA_HD_VC_UNPLUG_EVT; 4748843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } 4758843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 4768843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bdcpy(cback_data.conn.bda, p_cback->addr); 4778843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta memset(bta_hd_cb.bd_addr, 0, sizeof(BD_ADDR)); 4788843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 4798843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bta_hd_cb.p_cback(cback_event, &cback_data); 4808843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 4818843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 4828843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 4838843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 4848843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_intr_data_act 4858843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 4868843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description Handles incoming DATA request on intr 4878843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 4888843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 4898843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 4908843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 4918843cc830b522cfe6f1e361297fc28fd331a1378Hemant Guptaextern void bta_hd_intr_data_act(tBTA_HD_DATA* p_data) { 4928843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_CBACK_DATA* p_cback = (tBTA_HD_CBACK_DATA*)p_data; 4938843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta BT_HDR* p_msg = p_cback->p_data; 4948843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta uint16_t len = p_msg->len; 4958843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta uint8_t* p_buf = (uint8_t*)(p_msg + 1) + p_msg->offset; 4968843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_INTR_DATA ret; 4978843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 4988843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_API("%s", __func__); 4998843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 5008843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta if (bta_hd_cb.use_report_id || bta_hd_cb.boot_mode) { 5018843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ret.report_id = *p_buf; 5028843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 5038843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta len--; 5048843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta p_buf++; 5058843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } else { 5068843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ret.report_id = 0; 5078843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } 5088843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 5098843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ret.len = len; 5108843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ret.p_data = p_buf; 5118843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 5128843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta (*bta_hd_cb.p_cback)(BTA_HD_INTR_DATA_EVT, (tBTA_HD*)&ret); 5138843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 5148843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 5158843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 5168843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 5178843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_get_report_act 5188843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 5198843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description Handles incoming GET_REPORT request 5208843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 5218843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 5228843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 5238843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 5248843cc830b522cfe6f1e361297fc28fd331a1378Hemant Guptaextern void bta_hd_get_report_act(tBTA_HD_DATA* p_data) { 5258843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_CBACK_DATA* p_cback = (tBTA_HD_CBACK_DATA*)p_data; 5268843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bool rep_size_follows = p_cback->data; 5278843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta BT_HDR* p_msg = p_cback->p_data; 5288843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta uint8_t* p_buf = (uint8_t*)(p_msg + 1) + p_msg->offset; 5298843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_GET_REPORT ret = {0, 0, 0}; 5308843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 5318843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_API("%s", __func__); 5328843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 5338843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ret.report_type = *p_buf & HID_PAR_REP_TYPE_MASK; 5348843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta p_buf++; 5358843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 5368843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta if (bta_hd_cb.use_report_id) { 5378843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ret.report_id = *p_buf; 5388843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta p_buf++; 5398843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } 5408843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 5418843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta if (rep_size_follows) { 5428843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ret.buffer_size = *p_buf | (*(p_buf + 1) << 8); 5438843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } 5448843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 5458843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta (*bta_hd_cb.p_cback)(BTA_HD_GET_REPORT_EVT, (tBTA_HD*)&ret); 5468843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 5478843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 5488843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 5498843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 5508843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_set_report_act 5518843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 5528843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description Handles incoming SET_REPORT request 5538843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 5548843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 5558843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 5568843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 5578843cc830b522cfe6f1e361297fc28fd331a1378Hemant Guptaextern void bta_hd_set_report_act(tBTA_HD_DATA* p_data) { 5588843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_CBACK_DATA* p_cback = (tBTA_HD_CBACK_DATA*)p_data; 5598843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta BT_HDR* p_msg = p_cback->p_data; 5608843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta uint16_t len = p_msg->len; 5618843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta uint8_t* p_buf = (uint8_t*)(p_msg + 1) + p_msg->offset; 5628843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_SET_REPORT ret = {0, 0, 0, NULL}; 5638843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 5648843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_API("%s", __func__); 5658843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 5668843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ret.report_type = *p_buf & HID_PAR_REP_TYPE_MASK; 5678843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta p_buf++; 5688843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta len--; 5698843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 5708843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta if (bta_hd_cb.use_report_id || bta_hd_cb.boot_mode) { 5718843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ret.report_id = *p_buf; 5728843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 5738843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta len--; 5748843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta p_buf++; 5758843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } else { 5768843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ret.report_id = 0; 5778843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } 5788843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 5798843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ret.len = len; 5808843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ret.p_data = p_buf; 5818843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 5828843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta (*bta_hd_cb.p_cback)(BTA_HD_SET_REPORT_EVT, (tBTA_HD*)&ret); 5838843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 5848843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 5858843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 5868843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 5878843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_set_protocol_act 5888843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 5898843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description 5908843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 5918843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 5928843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 5938843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 5948843cc830b522cfe6f1e361297fc28fd331a1378Hemant Guptaextern void bta_hd_set_protocol_act(tBTA_HD_DATA* p_data) { 5958843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_CBACK_DATA* p_cback = (tBTA_HD_CBACK_DATA*)p_data; 5968843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD cback_data; 5978843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 5988843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_API("%s", __func__); 5998843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 6008843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bta_hd_cb.boot_mode = (p_cback->data == HID_PAR_PROTOCOL_BOOT_MODE); 6018843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta cback_data.set_protocol = p_cback->data; 6028843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 6038843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta (*bta_hd_cb.p_cback)(BTA_HD_SET_PROTOCOL_EVT, &cback_data); 6048843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 6058843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 6068843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 6078843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 6088843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_vc_unplug_done_act 6098843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 6108843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description 6118843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 6128843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 6138843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 6148843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 6158843cc830b522cfe6f1e361297fc28fd331a1378Hemant Guptaextern void bta_hd_vc_unplug_done_act(tBTA_HD_DATA* p_data) { 6168843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_CBACK_DATA* p_cback = (tBTA_HD_CBACK_DATA*)p_data; 6178843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD cback_data; 6188843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 6198843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_API("%s", __func__); 6208843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 6218843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bta_sys_conn_close(BTA_ID_HD, 1, p_cback->addr); 6228843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 6238843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta HID_DevUnplugDevice(p_cback->addr); 6248843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 6258843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bdcpy(cback_data.conn.bda, p_cback->addr); 6268843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bdcpy(bta_hd_cb.bd_addr, p_cback->addr); 6278843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 6288843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta (*bta_hd_cb.p_cback)(BTA_HD_VC_UNPLUG_EVT, &cback_data); 6298843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 6308843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 6318843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 6328843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 6338843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_suspend_act 6348843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 6358843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description 6368843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 6378843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 6388843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 6398843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 6408843cc830b522cfe6f1e361297fc28fd331a1378Hemant Guptaextern void bta_hd_suspend_act(tBTA_HD_DATA* p_data) { 6418843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_CBACK_DATA* p_cback = (tBTA_HD_CBACK_DATA*)p_data; 6428843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 6438843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_API("%s", __func__); 6448843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 6458843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bta_sys_idle(BTA_ID_HD, 1, p_cback->addr); 6468843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 6478843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 6488843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 6498843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 6508843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_exit_suspend_act 6518843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 6528843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description 6538843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 6548843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 6558843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 6568843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 6578843cc830b522cfe6f1e361297fc28fd331a1378Hemant Guptaextern void bta_hd_exit_suspend_act(tBTA_HD_DATA* p_data) { 6588843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_CBACK_DATA* p_cback = (tBTA_HD_CBACK_DATA*)p_data; 6598843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 6608843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_API("%s", __func__); 6618843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 6628843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bta_sys_busy(BTA_ID_HD, 1, p_cback->addr); 6638843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bta_sys_idle(BTA_ID_HD, 1, p_cback->addr); 6648843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 6658843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 6668843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 6678843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 6688843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_cback 6698843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 6708843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description BTA HD callback function 6718843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 6728843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 6738843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 6748843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 6758843cc830b522cfe6f1e361297fc28fd331a1378Hemant Guptastatic void bta_hd_cback(BD_ADDR bd_addr, uint8_t event, uint32_t data, 6768843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta BT_HDR* pdata) { 6778843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_CBACK_DATA* p_buf = NULL; 6788843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta uint16_t sm_event = BTA_HD_INVALID_EVT; 6798843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 6808843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_API("%s: event=%d", __func__, event); 6818843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 6828843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta switch (event) { 6838843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta case HID_DHOST_EVT_OPEN: 6848843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta sm_event = BTA_HD_INT_OPEN_EVT; 6858843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta break; 6868843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 6878843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta case HID_DHOST_EVT_CLOSE: 6888843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta sm_event = BTA_HD_INT_CLOSE_EVT; 6898843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta break; 6908843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 6918843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta case HID_DHOST_EVT_GET_REPORT: 6928843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta sm_event = BTA_HD_INT_GET_REPORT_EVT; 6938843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta break; 6948843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 6958843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta case HID_DHOST_EVT_SET_REPORT: 6968843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta sm_event = BTA_HD_INT_SET_REPORT_EVT; 6978843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta break; 6988843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 6998843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta case HID_DHOST_EVT_SET_PROTOCOL: 7008843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta sm_event = BTA_HD_INT_SET_PROTOCOL_EVT; 7018843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta break; 7028843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 7038843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta case HID_DHOST_EVT_INTR_DATA: 7048843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta sm_event = BTA_HD_INT_INTR_DATA_EVT; 7058843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta break; 7068843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 7078843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta case HID_DHOST_EVT_VC_UNPLUG: 7088843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta sm_event = BTA_HD_INT_VC_UNPLUG_EVT; 7098843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta break; 7108843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 7118843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta case HID_DHOST_EVT_SUSPEND: 7128843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta sm_event = BTA_HD_INT_SUSPEND_EVT; 7138843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta break; 7148843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 7158843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta case HID_DHOST_EVT_EXIT_SUSPEND: 7168843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta sm_event = BTA_HD_INT_EXIT_SUSPEND_EVT; 7178843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta break; 7188843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } 7198843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 7208843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta if (sm_event != BTA_HD_INVALID_EVT && 7218843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta (p_buf = (tBTA_HD_CBACK_DATA*)osi_malloc(sizeof(tBTA_HD_CBACK_DATA) + 7228843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta sizeof(BT_HDR))) != NULL) { 7238843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta p_buf->hdr.event = sm_event; 7248843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bdcpy(p_buf->addr, bd_addr); 7258843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta p_buf->data = data; 7268843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta p_buf->p_data = pdata; 7278843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 7288843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bta_sys_sendmsg(p_buf); 7298843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } 7308843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 7318843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 7328843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta#endif /* BTA_HD_INCLUDED */ 733