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