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