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 419e030fde05352ec4385d7baf6cc2af89e95e039cJakub Pawlowskistatic void bta_hd_cback(const RawAddress& bd_addr, uint8_t event, 42011a61951975849b23a10d2be87e5268008d3407Jakub Pawlowski uint32_t data, 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 55c6bce1a236ed448b688d56d78c56a251c66e7faeIvan Podogov if (ptr < data + length) { 56c6bce1a236ed448b688d56d78c56a251c66e7faeIvan Podogov ptr += ((*ptr) + 2); 57c6bce1a236ed448b688d56d78c56a251c66e7faeIvan Podogov } else { 58c6bce1a236ed448b688d56d78c56a251c66e7faeIvan Podogov return false; 59c6bce1a236ed448b688d56d78c56a251c66e7faeIvan Podogov } 608843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta break; 618843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 628843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta case 0x85: // Report ID 638843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta *has_report_id = TRUE; 648843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 658843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta default: 668843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ptr += (item & 0x03); 678843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta break; 688843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } 698843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } 708843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 718843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta return (ptr == data + length); 728843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 738843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 748843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 758843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 768843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_api_enable 778843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 788843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description Enables HID device 798843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 808843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 818843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 828843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 838843cc830b522cfe6f1e361297fc28fd331a1378Hemant Guptavoid bta_hd_api_enable(tBTA_HD_DATA* p_data) { 848843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_STATUS status = BTA_HD_ERROR; 858843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tHID_STATUS ret; 868843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 878843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_API("%s", __func__); 888843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 898843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta HID_DevInit(); 908843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 918843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta memset(&bta_hd_cb, 0, sizeof(tBTA_HD_CB)); 928843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 938843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta HID_DevSetSecurityLevel(BTA_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT); 948843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 958843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta /* store parameters */ 968843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bta_hd_cb.p_cback = p_data->api_enable.p_cback; 978843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 98f9c5752344ec459def74765f512d28fa0f402168Marie Janssen ret = HID_DevRegister(bta_hd_cback); 99f9c5752344ec459def74765f512d28fa0f402168Marie Janssen if (ret == HID_SUCCESS) { 1008843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta status = BTA_HD_OK; 1018843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } else { 1028843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_ERROR("%s: Failed to register HID device (%d)", __func__, ret); 1038843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } 1048843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 1058843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta /* signal BTA call back event */ 1068843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta (*bta_hd_cb.p_cback)(BTA_HD_ENABLE_EVT, (tBTA_HD*)&status); 1078843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 1088843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 1098843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 1108843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 1118843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_api_disable 1128843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 1138843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description Disables HID device 1148843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 1158843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 1168843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 1178843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 1188843cc830b522cfe6f1e361297fc28fd331a1378Hemant Guptavoid bta_hd_api_disable(void) { 1198843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_STATUS status = BTA_HD_ERROR; 1208843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tHID_STATUS ret; 1218843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 1228843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_API("%s", __func__); 1238843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 1248843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta /* service is not enabled */ 1258843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta if (bta_hd_cb.p_cback == NULL) return; 1268843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 1278843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta /* Remove service record */ 1288843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta if (bta_hd_cb.sdp_handle != 0) { 1298843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta SDP_DeleteRecord(bta_hd_cb.sdp_handle); 1308843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bta_sys_remove_uuid(UUID_SERVCLASS_HUMAN_INTERFACE); 1318843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } 1328843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 1338843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta /* Deregister with lower layer */ 134f9c5752344ec459def74765f512d28fa0f402168Marie Janssen ret = HID_DevDeregister(); 135f9c5752344ec459def74765f512d28fa0f402168Marie Janssen if (ret == HID_SUCCESS) { 1368843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta status = BTA_HD_OK; 1378843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } else { 1388843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_ERROR("%s: Failed to deregister HID device (%s)", __func__, ret); 1398843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } 1408843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 1418843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta (*bta_hd_cb.p_cback)(BTA_HD_DISABLE_EVT, (tBTA_HD*)&status); 1428843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 1438843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta memset(&bta_hd_cb, 0, sizeof(tBTA_HD_CB)); 1448843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 1458843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 1468843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 1478843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 1488843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_register_act 1498843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 1508843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description Registers SDP record 1518843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 1528843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 1538843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 1548843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 1558843cc830b522cfe6f1e361297fc28fd331a1378Hemant Guptavoid bta_hd_register_act(tBTA_HD_DATA* p_data) { 1568843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD ret; 1578843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_REGISTER_APP* p_app_data = (tBTA_HD_REGISTER_APP*)p_data; 158c6bce1a236ed448b688d56d78c56a251c66e7faeIvan Podogov bool use_report_id = FALSE; 1598843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 1608843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_API("%s", __func__); 1618843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 1628843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ret.reg_status.in_use = FALSE; 1638843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 164c6bce1a236ed448b688d56d78c56a251c66e7faeIvan Podogov /* Check if len doesn't exceed BTA_HD_APP_DESCRIPTOR_LEN and descriptor 165c6bce1a236ed448b688d56d78c56a251c66e7faeIvan Podogov * itself is well-formed. Also check if descriptor has Report Id item so we 166c6bce1a236ed448b688d56d78c56a251c66e7faeIvan Podogov * know if report will have prefix or not. */ 167c6bce1a236ed448b688d56d78c56a251c66e7faeIvan Podogov if (p_app_data->d_len > BTA_HD_APP_DESCRIPTOR_LEN || 168c6bce1a236ed448b688d56d78c56a251c66e7faeIvan Podogov !check_descriptor(p_app_data->d_data, p_app_data->d_len, 169c6bce1a236ed448b688d56d78c56a251c66e7faeIvan Podogov &use_report_id)) { 170c6bce1a236ed448b688d56d78c56a251c66e7faeIvan Podogov APPL_TRACE_ERROR("%s: Descriptor is too long or malformed", __func__); 1718843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ret.reg_status.status = BTA_HD_ERROR; 1728843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta (*bta_hd_cb.p_cback)(BTA_HD_REGISTER_APP_EVT, &ret); 1738843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta return; 1748843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } 1758843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 1768843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ret.reg_status.status = BTA_HD_OK; 1778843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 1788843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta /* Remove old record if for some reason it's already registered */ 1798843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta if (bta_hd_cb.sdp_handle != 0) { 1808843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta SDP_DeleteRecord(bta_hd_cb.sdp_handle); 1818843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } 1828843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 183c6bce1a236ed448b688d56d78c56a251c66e7faeIvan Podogov bta_hd_cb.use_report_id = use_report_id; 1848843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bta_hd_cb.sdp_handle = SDP_CreateRecord(); 1858843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta HID_DevAddRecord(bta_hd_cb.sdp_handle, p_app_data->name, 1868843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta p_app_data->description, p_app_data->provider, 1878843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta p_app_data->subclass, p_app_data->d_len, p_app_data->d_data); 1888843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bta_sys_add_uuid(UUID_SERVCLASS_HUMAN_INTERFACE); 1898843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 1908843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta HID_DevSetIncomingQos( 1918843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta p_app_data->in_qos.service_type, p_app_data->in_qos.token_rate, 1928843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta p_app_data->in_qos.token_bucket_size, p_app_data->in_qos.peak_bandwidth, 1938843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta p_app_data->in_qos.access_latency, p_app_data->in_qos.delay_variation); 1948843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 1958843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta HID_DevSetOutgoingQos( 1968843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta p_app_data->out_qos.service_type, p_app_data->out_qos.token_rate, 1978843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta p_app_data->out_qos.token_bucket_size, p_app_data->out_qos.peak_bandwidth, 1988843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta p_app_data->out_qos.access_latency, p_app_data->out_qos.delay_variation); 1998843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 2008843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta // application is registered so we can accept incoming connections 2018843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta HID_DevSetIncomingPolicy(TRUE); 2028843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 2038843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta if (HID_DevGetDevice(&ret.reg_status.bda) == HID_SUCCESS) { 2048843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ret.reg_status.in_use = TRUE; 2058843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } 2068843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 2078843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta (*bta_hd_cb.p_cback)(BTA_HD_REGISTER_APP_EVT, &ret); 2088843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 2098843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 2108843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 2118843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 2128843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_unregister_act 2138843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 2148843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description Unregisters SDP record 2158843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 2168843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 2178843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 2188843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 2198843cc830b522cfe6f1e361297fc28fd331a1378Hemant Guptavoid bta_hd_unregister_act(UNUSED_ATTR tBTA_HD_DATA* p_data) { 2208843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_STATUS status = BTA_HD_OK; 2218843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 2228843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_API("%s", __func__); 2238843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 2248843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta // application is no longer registered so we do not want incoming connections 2258843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta HID_DevSetIncomingPolicy(FALSE); 2268843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 2278843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta if (bta_hd_cb.sdp_handle != 0) { 2288843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta SDP_DeleteRecord(bta_hd_cb.sdp_handle); 2298843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } 2308843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 2318843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bta_hd_cb.sdp_handle = 0; 2328843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bta_sys_remove_uuid(UUID_SERVCLASS_HUMAN_INTERFACE); 2338843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 2348843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta (*bta_hd_cb.p_cback)(BTA_HD_UNREGISTER_APP_EVT, (tBTA_HD*)&status); 2358843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 2368843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 2378843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 2388843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 2398843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_unregister2_act 2408843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 2418843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description 2428843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 2438843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 2448843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 2458843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 2468843cc830b522cfe6f1e361297fc28fd331a1378Hemant Guptavoid bta_hd_unregister2_act(tBTA_HD_DATA* p_data) { 2478843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_API("%s", __func__); 2488843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 2498843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta // close first 2508843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bta_hd_close_act(p_data); 2518843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 2528843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta // then unregister 2538843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bta_hd_unregister_act(p_data); 2548843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 2558843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta if (bta_hd_cb.disable_w4_close) { 2568843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bta_hd_api_disable(); 2578843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } 2588843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 2598843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 2608843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 2618843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 2628843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_connect_act 2638843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 2648843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description Connect to device (must be virtually plugged) 2658843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 2668843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 2678843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 2688843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 269456e200272ad66b5005fa16d5a07701e5a86fcd4Ivan Podogovextern void bta_hd_connect_act(tBTA_HD_DATA* p_data) { 2708843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tHID_STATUS ret; 271456e200272ad66b5005fa16d5a07701e5a86fcd4Ivan Podogov tBTA_HD_DEVICE_CTRL* p_ctrl = (tBTA_HD_DEVICE_CTRL*)p_data; 272844daca6a8cae4a263dcc9c30e065e5c2c74da2fIvan Podogov tBTA_HD cback_data; 2738843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 2748843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_API("%s", __func__); 2758843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 276456e200272ad66b5005fa16d5a07701e5a86fcd4Ivan Podogov ret = HID_DevPlugDevice(p_ctrl->addr); 277456e200272ad66b5005fa16d5a07701e5a86fcd4Ivan Podogov if (ret != HID_SUCCESS) { 278456e200272ad66b5005fa16d5a07701e5a86fcd4Ivan Podogov APPL_TRACE_WARNING("%s: HID_DevPlugDevice returned %d", __func__, ret); 279456e200272ad66b5005fa16d5a07701e5a86fcd4Ivan Podogov return; 280456e200272ad66b5005fa16d5a07701e5a86fcd4Ivan Podogov } 2818843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 282456e200272ad66b5005fa16d5a07701e5a86fcd4Ivan Podogov ret = HID_DevConnect(); 2838843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta if (ret != HID_SUCCESS) { 2848843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_WARNING("%s: HID_DevConnect returned %d", __func__, ret); 285844daca6a8cae4a263dcc9c30e065e5c2c74da2fIvan Podogov return; 2868843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } 287844daca6a8cae4a263dcc9c30e065e5c2c74da2fIvan Podogov 288011a61951975849b23a10d2be87e5268008d3407Jakub Pawlowski cback_data.conn.bda = p_ctrl->addr; 289844daca6a8cae4a263dcc9c30e065e5c2c74da2fIvan Podogov cback_data.conn.status = BTHD_CONN_STATE_CONNECTING; 290844daca6a8cae4a263dcc9c30e065e5c2c74da2fIvan Podogov 291844daca6a8cae4a263dcc9c30e065e5c2c74da2fIvan Podogov bta_hd_cb.p_cback(BTA_HD_CONN_STATE_EVT, &cback_data); 2928843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 2938843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 2948843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 2958843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 2968843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_disconnect_act 2978843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 2988843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description Disconnect from device 2998843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 3008843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 3018843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 3028843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 3038843cc830b522cfe6f1e361297fc28fd331a1378Hemant Guptaextern void bta_hd_disconnect_act(UNUSED_ATTR tBTA_HD_DATA* p_data) { 3048843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tHID_STATUS ret; 305844daca6a8cae4a263dcc9c30e065e5c2c74da2fIvan Podogov tBTA_HD cback_data; 3068843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 3078843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_API("%s", __func__); 3088843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 3098843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ret = HID_DevDisconnect(); 3108843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 3118843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta if (ret != HID_SUCCESS) { 3128843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_WARNING("%s: HID_DevDisconnect returned %d", __func__, ret); 313844daca6a8cae4a263dcc9c30e065e5c2c74da2fIvan Podogov return; 3148843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } 315844daca6a8cae4a263dcc9c30e065e5c2c74da2fIvan Podogov 316367373ba8bcfb1d9db41b1904de372483991fc10Ivan Podogov if (HID_DevGetDevice(&cback_data.conn.bda) == HID_SUCCESS) { 317367373ba8bcfb1d9db41b1904de372483991fc10Ivan Podogov cback_data.conn.status = BTHD_CONN_STATE_DISCONNECTING; 318367373ba8bcfb1d9db41b1904de372483991fc10Ivan Podogov bta_hd_cb.p_cback(BTA_HD_CONN_STATE_EVT, &cback_data); 319367373ba8bcfb1d9db41b1904de372483991fc10Ivan Podogov } 3208843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 3218843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 3228843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 3238843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 3248843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_add_device_act 3258843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 3268843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description 3278843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 3288843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 3298843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 3308843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 3318843cc830b522cfe6f1e361297fc28fd331a1378Hemant Guptaextern void bta_hd_add_device_act(tBTA_HD_DATA* p_data) { 3328843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_DEVICE_CTRL* p_ctrl = (tBTA_HD_DEVICE_CTRL*)p_data; 3338843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 3348843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_API("%s", __func__); 3358843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 3368843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta HID_DevPlugDevice(p_ctrl->addr); 3378843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 3388843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 3398843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 3408843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 3418843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_remove_device_act 3428843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 3438843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description 3448843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 3458843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 3468843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 3478843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 3488843cc830b522cfe6f1e361297fc28fd331a1378Hemant Guptaextern void bta_hd_remove_device_act(tBTA_HD_DATA* p_data) { 3498843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_DEVICE_CTRL* p_ctrl = (tBTA_HD_DEVICE_CTRL*)p_data; 3508843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 3518843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_API("%s", __func__); 3528843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 3538843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta HID_DevUnplugDevice(p_ctrl->addr); 3548843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 3558843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 3568843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 3578843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 3588843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_send_report_act 3598843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 3608843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description Sends report 3618843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 3628843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 3638843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 3648843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 3658843cc830b522cfe6f1e361297fc28fd331a1378Hemant Guptaextern void bta_hd_send_report_act(tBTA_HD_DATA* p_data) { 3668843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_SEND_REPORT* p_report = (tBTA_HD_SEND_REPORT*)p_data; 3678843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta uint8_t channel; 3688843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta uint8_t report_id; 3698843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 3708843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_VERBOSE("%s", __func__); 3718843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 3728843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta channel = p_report->use_intr ? HID_CHANNEL_INTR : HID_CHANNEL_CTRL; 3738843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta report_id = 3748843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta (bta_hd_cb.use_report_id || bta_hd_cb.boot_mode) ? p_report->id : 0x00; 3758843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 3768843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta HID_DevSendReport(channel, p_report->type, report_id, p_report->len, 3778843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta p_report->data); 3788843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 3798843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta /* trigger PM */ 380c752e135d66f80c0b2efc35292ab8ddfd8227d61Jakub Pawlowski bta_sys_busy(BTA_ID_HD, 1, bta_hd_cb.bd_addr); 381c752e135d66f80c0b2efc35292ab8ddfd8227d61Jakub Pawlowski bta_sys_idle(BTA_ID_HD, 1, bta_hd_cb.bd_addr); 3828843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 3838843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 3848843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 3858843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 3868843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_report_error_act 3878843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 3888843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description 3898843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 3908843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 3918843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 3928843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 3938843cc830b522cfe6f1e361297fc28fd331a1378Hemant Guptaextern void bta_hd_report_error_act(tBTA_HD_DATA* p_data) { 3948843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_REPORT_ERR* p_report = (tBTA_HD_REPORT_ERR*)p_data; 3958843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tHID_STATUS ret; 3968843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 3978843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_API("%s: error = %d", __func__, p_report->error); 3988843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 3998843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ret = HID_DevReportError(p_report->error); 4008843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 4018843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta if (ret != HID_SUCCESS) { 4028843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_WARNING("%s: HID_DevReportError returned %d", __func__, ret); 4038843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } 4048843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 4058843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 4068843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 4078843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 4088843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_vc_unplug_act 4098843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 4108843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description Sends Virtual Cable Unplug 4118843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 4128843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 4138843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 4148843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 4158843cc830b522cfe6f1e361297fc28fd331a1378Hemant Guptaextern void bta_hd_vc_unplug_act(UNUSED_ATTR tBTA_HD_DATA* p_data) { 4168843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tHID_STATUS ret; 4178843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 4188843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_API("%s", __func__); 4198843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 4208843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bta_hd_cb.vc_unplug = TRUE; 4218843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 4228843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ret = HID_DevVirtualCableUnplug(); 4238843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 4248843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta if (ret != HID_SUCCESS) { 4258843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_WARNING("%s: HID_DevVirtualCableUnplug returned %d", __func__, 4268843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ret); 4278843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } 4288843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 4298843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta /* trigger PM */ 430c752e135d66f80c0b2efc35292ab8ddfd8227d61Jakub Pawlowski bta_sys_busy(BTA_ID_HD, 1, bta_hd_cb.bd_addr); 431c752e135d66f80c0b2efc35292ab8ddfd8227d61Jakub Pawlowski bta_sys_idle(BTA_ID_HD, 1, bta_hd_cb.bd_addr); 4328843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 4338843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 4348843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 4358843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 4368843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_open_act 4378843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 4388843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description 4398843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 4408843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 4418843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 4428843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 4438843cc830b522cfe6f1e361297fc28fd331a1378Hemant Guptaextern void bta_hd_open_act(tBTA_HD_DATA* p_data) { 4448843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_CBACK_DATA* p_cback = (tBTA_HD_CBACK_DATA*)p_data; 4458843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD cback_data; 4468843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 4478843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_API("%s", __func__); 4488843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 4498843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta HID_DevPlugDevice(p_cback->addr); 450c752e135d66f80c0b2efc35292ab8ddfd8227d61Jakub Pawlowski bta_sys_conn_open(BTA_ID_HD, 1, p_cback->addr); 4518843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 452011a61951975849b23a10d2be87e5268008d3407Jakub Pawlowski cback_data.conn.bda = p_cback->addr; 453011a61951975849b23a10d2be87e5268008d3407Jakub Pawlowski bta_hd_cb.bd_addr = p_cback->addr; 4548843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 4558843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bta_hd_cb.p_cback(BTA_HD_OPEN_EVT, &cback_data); 4568843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 4578843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 4588843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 4598843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 4608843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_close_act 4618843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 4628843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description 4638843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 4648843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 4658843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 4668843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 4678843cc830b522cfe6f1e361297fc28fd331a1378Hemant Guptaextern void bta_hd_close_act(tBTA_HD_DATA* p_data) { 4688843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_CBACK_DATA* p_cback = (tBTA_HD_CBACK_DATA*)p_data; 4698843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD cback_data; 4708843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_EVT cback_event = BTA_HD_CLOSE_EVT; 4718843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 4728843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_API("%s", __func__); 4738843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 474c752e135d66f80c0b2efc35292ab8ddfd8227d61Jakub Pawlowski bta_sys_conn_close(BTA_ID_HD, 1, p_cback->addr); 4758843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 4768843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta if (bta_hd_cb.vc_unplug) { 4778843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bta_hd_cb.vc_unplug = FALSE; 4788843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta HID_DevUnplugDevice(p_cback->addr); 4798843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta cback_event = BTA_HD_VC_UNPLUG_EVT; 4808843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } 4818843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 482011a61951975849b23a10d2be87e5268008d3407Jakub Pawlowski cback_data.conn.bda = p_cback->addr; 483aaa50649b95c0ab2cd84e67fab77596bbb24d095Jakub Pawlowski bta_hd_cb.bd_addr = RawAddress::kEmpty; 4848843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 4858843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bta_hd_cb.p_cback(cback_event, &cback_data); 4868843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 4878843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 4888843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 4898843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 4908843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_intr_data_act 4918843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 4928843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description Handles incoming DATA request on intr 4938843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 4948843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 4958843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 4968843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 4978843cc830b522cfe6f1e361297fc28fd331a1378Hemant Guptaextern void bta_hd_intr_data_act(tBTA_HD_DATA* p_data) { 4988843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_CBACK_DATA* p_cback = (tBTA_HD_CBACK_DATA*)p_data; 4998843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta BT_HDR* p_msg = p_cback->p_data; 5008843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta uint16_t len = p_msg->len; 5018843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta uint8_t* p_buf = (uint8_t*)(p_msg + 1) + p_msg->offset; 5028843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_INTR_DATA ret; 5038843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 5048843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_API("%s", __func__); 5058843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 5068843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta if (bta_hd_cb.use_report_id || bta_hd_cb.boot_mode) { 5078843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ret.report_id = *p_buf; 5088843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 5098843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta len--; 5108843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta p_buf++; 5118843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } else { 5128843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ret.report_id = 0; 5138843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } 5148843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 5158843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ret.len = len; 5168843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ret.p_data = p_buf; 5178843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 5188843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta (*bta_hd_cb.p_cback)(BTA_HD_INTR_DATA_EVT, (tBTA_HD*)&ret); 5198843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 5208843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 5218843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 5228843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 5238843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_get_report_act 5248843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 5258843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description Handles incoming GET_REPORT request 5268843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 5278843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 5288843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 5298843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 5308843cc830b522cfe6f1e361297fc28fd331a1378Hemant Guptaextern void bta_hd_get_report_act(tBTA_HD_DATA* p_data) { 5318843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_CBACK_DATA* p_cback = (tBTA_HD_CBACK_DATA*)p_data; 5328843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bool rep_size_follows = p_cback->data; 5338843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta BT_HDR* p_msg = p_cback->p_data; 5348843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta uint8_t* p_buf = (uint8_t*)(p_msg + 1) + p_msg->offset; 5358843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_GET_REPORT ret = {0, 0, 0}; 5368843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 5378843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_API("%s", __func__); 5388843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 5398843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ret.report_type = *p_buf & HID_PAR_REP_TYPE_MASK; 5408843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta p_buf++; 5418843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 5428843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta if (bta_hd_cb.use_report_id) { 5438843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ret.report_id = *p_buf; 5448843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta p_buf++; 5458843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } 5468843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 5478843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta if (rep_size_follows) { 5488843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ret.buffer_size = *p_buf | (*(p_buf + 1) << 8); 5498843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } 5508843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 5518843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta (*bta_hd_cb.p_cback)(BTA_HD_GET_REPORT_EVT, (tBTA_HD*)&ret); 5528843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 5538843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 5548843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 5558843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 5568843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_set_report_act 5578843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 5588843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description Handles incoming SET_REPORT request 5598843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 5608843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 5618843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 5628843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 5638843cc830b522cfe6f1e361297fc28fd331a1378Hemant Guptaextern void bta_hd_set_report_act(tBTA_HD_DATA* p_data) { 5648843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_CBACK_DATA* p_cback = (tBTA_HD_CBACK_DATA*)p_data; 5658843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta BT_HDR* p_msg = p_cback->p_data; 5668843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta uint16_t len = p_msg->len; 5678843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta uint8_t* p_buf = (uint8_t*)(p_msg + 1) + p_msg->offset; 5688843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_SET_REPORT ret = {0, 0, 0, NULL}; 5698843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 5708843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_API("%s", __func__); 5718843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 5728843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ret.report_type = *p_buf & HID_PAR_REP_TYPE_MASK; 5738843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta p_buf++; 5748843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta len--; 5758843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 5768843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta if (bta_hd_cb.use_report_id || bta_hd_cb.boot_mode) { 5778843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ret.report_id = *p_buf; 5788843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 5798843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta len--; 5808843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta p_buf++; 5818843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } else { 5828843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ret.report_id = 0; 5838843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } 5848843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 5858843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ret.len = len; 5868843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ret.p_data = p_buf; 5878843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 5888843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta (*bta_hd_cb.p_cback)(BTA_HD_SET_REPORT_EVT, (tBTA_HD*)&ret); 5898843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 5908843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 5918843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 5928843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 5938843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_set_protocol_act 5948843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 5958843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description 5968843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 5978843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 5988843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 5998843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 6008843cc830b522cfe6f1e361297fc28fd331a1378Hemant Guptaextern void bta_hd_set_protocol_act(tBTA_HD_DATA* p_data) { 6018843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_CBACK_DATA* p_cback = (tBTA_HD_CBACK_DATA*)p_data; 6028843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD cback_data; 6038843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 6048843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_API("%s", __func__); 6058843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 6068843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bta_hd_cb.boot_mode = (p_cback->data == HID_PAR_PROTOCOL_BOOT_MODE); 6078843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta cback_data.set_protocol = p_cback->data; 6088843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 6098843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta (*bta_hd_cb.p_cback)(BTA_HD_SET_PROTOCOL_EVT, &cback_data); 6108843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 6118843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 6128843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 6138843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 6148843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_vc_unplug_done_act 6158843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 6168843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description 6178843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 6188843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 6198843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 6208843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 6218843cc830b522cfe6f1e361297fc28fd331a1378Hemant Guptaextern void bta_hd_vc_unplug_done_act(tBTA_HD_DATA* p_data) { 6228843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_CBACK_DATA* p_cback = (tBTA_HD_CBACK_DATA*)p_data; 6238843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD cback_data; 6248843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 6258843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_API("%s", __func__); 6268843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 627c752e135d66f80c0b2efc35292ab8ddfd8227d61Jakub Pawlowski bta_sys_conn_close(BTA_ID_HD, 1, p_cback->addr); 6288843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 6298843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta HID_DevUnplugDevice(p_cback->addr); 6308843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 631011a61951975849b23a10d2be87e5268008d3407Jakub Pawlowski cback_data.conn.bda = p_cback->addr; 632011a61951975849b23a10d2be87e5268008d3407Jakub Pawlowski bta_hd_cb.bd_addr = p_cback->addr; 6338843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 6348843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta (*bta_hd_cb.p_cback)(BTA_HD_VC_UNPLUG_EVT, &cback_data); 6358843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 6368843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 6378843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 6388843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 6398843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_suspend_act 6408843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 6418843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description 6428843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 6438843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 6448843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 6458843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 6468843cc830b522cfe6f1e361297fc28fd331a1378Hemant Guptaextern void bta_hd_suspend_act(tBTA_HD_DATA* p_data) { 6478843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_CBACK_DATA* p_cback = (tBTA_HD_CBACK_DATA*)p_data; 6488843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 6498843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_API("%s", __func__); 6508843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 651c752e135d66f80c0b2efc35292ab8ddfd8227d61Jakub Pawlowski bta_sys_idle(BTA_ID_HD, 1, p_cback->addr); 6528843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 6538843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 6548843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 6558843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 6568843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_exit_suspend_act 6578843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 6588843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description 6598843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 6608843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 6618843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 6628843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 6638843cc830b522cfe6f1e361297fc28fd331a1378Hemant Guptaextern void bta_hd_exit_suspend_act(tBTA_HD_DATA* p_data) { 6648843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_CBACK_DATA* p_cback = (tBTA_HD_CBACK_DATA*)p_data; 6658843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 6668843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_API("%s", __func__); 6678843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 668c752e135d66f80c0b2efc35292ab8ddfd8227d61Jakub Pawlowski bta_sys_busy(BTA_ID_HD, 1, p_cback->addr); 669c752e135d66f80c0b2efc35292ab8ddfd8227d61Jakub Pawlowski bta_sys_idle(BTA_ID_HD, 1, p_cback->addr); 6708843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 6718843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 6728843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta/******************************************************************************* 6738843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 6748843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Function bta_hd_cback 6758843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 6768843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Description BTA HD callback function 6778843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 6788843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * Returns void 6798843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta * 6808843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta ******************************************************************************/ 6819e030fde05352ec4385d7baf6cc2af89e95e039cJakub Pawlowskistatic void bta_hd_cback(const RawAddress& bd_addr, uint8_t event, 682011a61951975849b23a10d2be87e5268008d3407Jakub Pawlowski uint32_t data, BT_HDR* pdata) { 6838843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta tBTA_HD_CBACK_DATA* p_buf = NULL; 6848843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta uint16_t sm_event = BTA_HD_INVALID_EVT; 6858843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 6868843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta APPL_TRACE_API("%s: event=%d", __func__, event); 6878843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 6888843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta switch (event) { 6898843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta case HID_DHOST_EVT_OPEN: 6908843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta sm_event = BTA_HD_INT_OPEN_EVT; 6918843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta break; 6928843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 6938843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta case HID_DHOST_EVT_CLOSE: 6948843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta sm_event = BTA_HD_INT_CLOSE_EVT; 6958843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta break; 6968843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 6978843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta case HID_DHOST_EVT_GET_REPORT: 6988843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta sm_event = BTA_HD_INT_GET_REPORT_EVT; 6998843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta break; 7008843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 7018843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta case HID_DHOST_EVT_SET_REPORT: 7028843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta sm_event = BTA_HD_INT_SET_REPORT_EVT; 7038843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta break; 7048843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 7058843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta case HID_DHOST_EVT_SET_PROTOCOL: 7068843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta sm_event = BTA_HD_INT_SET_PROTOCOL_EVT; 7078843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta break; 7088843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 7098843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta case HID_DHOST_EVT_INTR_DATA: 7108843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta sm_event = BTA_HD_INT_INTR_DATA_EVT; 7118843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta break; 7128843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 7138843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta case HID_DHOST_EVT_VC_UNPLUG: 7148843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta sm_event = BTA_HD_INT_VC_UNPLUG_EVT; 7158843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta break; 7168843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 7178843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta case HID_DHOST_EVT_SUSPEND: 7188843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta sm_event = BTA_HD_INT_SUSPEND_EVT; 7198843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta break; 7208843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 7218843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta case HID_DHOST_EVT_EXIT_SUSPEND: 7228843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta sm_event = BTA_HD_INT_EXIT_SUSPEND_EVT; 7238843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta break; 7248843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } 7258843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 7268843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta if (sm_event != BTA_HD_INVALID_EVT && 7278843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta (p_buf = (tBTA_HD_CBACK_DATA*)osi_malloc(sizeof(tBTA_HD_CBACK_DATA) + 7288843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta sizeof(BT_HDR))) != NULL) { 7298843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta p_buf->hdr.event = sm_event; 730011a61951975849b23a10d2be87e5268008d3407Jakub Pawlowski p_buf->addr = bd_addr; 7318843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta p_buf->data = data; 7328843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta p_buf->p_data = pdata; 7338843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 7348843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta bta_sys_sendmsg(p_buf); 7358843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta } 7368843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta} 7378843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta 7388843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta#endif /* BTA_HD_INCLUDED */ 739