15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Copyright (C) 2009-2012 Broadcom Corporation
45738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
55738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Licensed under the Apache License, Version 2.0 (the "License");
65738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  you may not use this file except in compliance with the License.
75738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  You may obtain a copy of the License at:
85738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
95738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  http://www.apache.org/licenses/LICENSE-2.0
105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  See the License for the specific language governing permissions and
155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  limitations under the License.
165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/
185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  This is the implementation file for the HeaLth device profile (HL)
225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  subsystem call-out functions.
235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/
255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26109691281c0135fd4298debcdec37fdc5855261eMiao Chou#include <ctype.h>
27109691281c0135fd4298debcdec37fdc5855261eMiao Chou#include <errno.h>
28109691281c0135fd4298debcdec37fdc5855261eMiao Chou#include <fcntl.h>
295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <stdio.h>
305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <stdlib.h>
315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <string.h>
325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <sys/socket.h>
33109691281c0135fd4298debcdec37fdc5855261eMiao Chou#include <sys/types.h>
345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <sys/un.h>
355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <time.h>
36109691281c0135fd4298debcdec37fdc5855261eMiao Chou
375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_api.h"
385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_hl_api.h"
395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_hl_ci.h"
40109691281c0135fd4298debcdec37fdc5855261eMiao Chou#include "bta_hl_co.h"
41109691281c0135fd4298debcdec37fdc5855261eMiao Chou#include "bta_sys.h"
425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btif_hl.h"
435cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen#include "btif_util.h"
44109691281c0135fd4298debcdec37fdc5855261eMiao Chou#include "btm_api.h"
456bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson#include "osi/include/osi.h"
465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*****************************************************************************
486bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *  Constants and Data Types
496bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson ****************************************************************************/
505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/**************************
516bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *  Common Definitions
526bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson **************************/
535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
556bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
566bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Function        bta_hl_co_get_num_of_mdep
576bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
586bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Description     This function is called to get the number of MDEPs for this
596bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *                 application ID
606bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
616bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Parameters      app_id - application ID
626bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *                 p_num_of_mdep (output) - number of MDEP configurations
63f45481678af0694902b5200ba69ced4cb61d73f0Myles Watson *                                          supported by the application
646bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
656bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Returns         true on success
666bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
676bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson ******************************************************************************/
686bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonbool bta_hl_co_get_num_of_mdep(uint8_t app_id, uint8_t* p_num_of_mdep) {
696bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  uint8_t app_idx;
706bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  bool success = false;
716bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson
726bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  if (btif_hl_find_app_idx(app_id, &app_idx)) {
736bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson    *p_num_of_mdep = p_btif_hl_cb->acb[app_idx].sup_feature.num_of_mdeps;
746bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson    success = true;
756bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  }
766bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson
776bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_TRACE_DEBUG("%s success=%d num_mdeps=%d", __func__, success,
786bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson                   *p_num_of_mdep);
796bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  return success;
805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
836bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
846bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Function        bta_hl_co_advrtise_source_sdp
856bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
866bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Description     This function is called to find out whether the SOURCE MDEP
87f45481678af0694902b5200ba69ced4cb61d73f0Myles Watson *                 configuration information should be advertise in the SDP or
88f45481678af0694902b5200ba69ced4cb61d73f0Myles Watson *                 not.
896bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
906bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Parameters      app_id - application ID
916bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
926bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Returns         true when advertise the SOURCE MDEP configuration
936bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *                            information
946bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
956bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson ******************************************************************************/
966bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonbool bta_hl_co_advrtise_source_sdp(uint8_t app_id) {
976bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  bool advertize_source_sdp = false;
986bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  uint8_t app_idx;
995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1006bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  if (btif_hl_find_app_idx(app_id, &app_idx)) {
1016bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson    advertize_source_sdp =
1026bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson        p_btif_hl_cb->acb[app_idx].sup_feature.advertize_source_sdp;
1036bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  }
1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1056bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_TRACE_DEBUG("%s advertize_flag=%d", __func__, advertize_source_sdp);
1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1076bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  return advertize_source_sdp;
1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
1106bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
1116bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Function        bta_hl_co_get_mdep_config
1126bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
1136bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Description     This function is called to get the supported feature
1146bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *                 configuration for the specified mdep index and it also
115f45481678af0694902b5200ba69ced4cb61d73f0Myles Watson *                 assigns the MDEP ID for the specified mdep index
1166bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
1176bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Parameters      app_id - HDP application ID
1186bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *                 mdep_idx - the mdep index
1196bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *                  mdep_counter - number of mdeps
1206bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *                 mdep_id  - the assigned MDEP ID for the specified medp_idx
1216bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *                 p_mdl_cfg (output) - pointer to the MDEP configuration
1226bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
1236bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
1246bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Returns         Bloolean - true success
1256bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson ******************************************************************************/
1266bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonbool bta_hl_co_get_mdep_config(uint8_t app_id, uint8_t mdep_idx,
1276bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson                               uint8_t mdep_counter, tBTA_HL_MDEP_ID mdep_id,
1286bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson                               tBTA_HL_MDEP_CFG* p_mdep_cfg) {
1296bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  uint8_t idx;
1306bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  uint8_t app_idx;
1316bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  bool success = false;
1326bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson
1336bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_TRACE_DEBUG("%s app_id=%d mdep_idx=%d mdep_id=%d mdep_counter=%d",
1346bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson                   __func__, app_id, mdep_idx, mdep_id, mdep_counter);
1356bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson
1366bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  if (btif_hl_find_app_idx(app_id, &app_idx)) {
1376bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson    idx = mdep_idx - mdep_counter - 1;
1386bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson    p_btif_hl_cb->acb[app_idx].sup_feature.mdep[idx].mdep_id = mdep_id;
1396bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson    memcpy(p_mdep_cfg,
1406bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson           &p_btif_hl_cb->acb[app_idx].sup_feature.mdep[idx].mdep_cfg,
1416bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson           sizeof(tBTA_HL_MDEP_CFG));
1426bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson
1436bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson    success = true;
1446bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  }
1456bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson
1466bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_TRACE_DEBUG("%s success=%d mdep_idx=%d mdep_id=%d", __func__, success,
1476bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson                   mdep_idx, mdep_id);
1486bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson
1496bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  return success;
1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
1536bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
1546bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Function        bta_hl_co_get_echo_config
1556bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
1566bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Description     This function is called to get the echo test
1576bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *                 maximum APDU size configurations
1586bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
1596bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Parameters      app_id - HDP application ID
1606bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *                 p_echo_cfg (output) - pointer to the Echo test maximum APDU
161f45481678af0694902b5200ba69ced4cb61d73f0Myles Watson *                                       size configuration
1626bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
1636bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Returns         Bloolean - true success
1646bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson ******************************************************************************/
1656bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonbool bta_hl_co_get_echo_config(uint8_t app_id, tBTA_HL_ECHO_CFG* p_echo_cfg) {
1666bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  uint8_t app_idx;
1676bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  bool success = false;
1686bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  btif_hl_app_cb_t* p_acb;
1696bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  tBTA_HL_SUP_FEATURE* p_sup;
1706bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson
1716bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_TRACE_DEBUG("%s app_id=%d", __func__, app_id);
1726bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson
1736bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  if (btif_hl_find_app_idx(app_id, &app_idx)) {
1746bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson    p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
1756bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson    p_sup = &p_acb->sup_feature;
1766bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson    p_echo_cfg->max_rx_apdu_size = p_sup->echo_cfg.max_rx_apdu_size;
1776bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson    p_echo_cfg->max_tx_apdu_size = p_sup->echo_cfg.max_tx_apdu_size;
1786bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson    success = true;
1796bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  }
1806bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson
1816bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_TRACE_DEBUG("%s success=%d max tx_size=%d rx_size=%d", __func__, success,
1826bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson                   p_echo_cfg->max_tx_apdu_size, p_echo_cfg->max_rx_apdu_size);
1836bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson
1846bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  return success;
1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
1886bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
1896bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Function        bta_hl_co_save_mdl
1906bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
1916bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Description     This function is called to save a MDL configuration item in
192f45481678af0694902b5200ba69ced4cb61d73f0Myles Watson *                 persistent storage
1936bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
1946bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Parameters      app_id - HDP application ID
1956bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *                 item_idx - the MDL configuration storage index
1966bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *                 p_mdl_cfg - pointer to the MDL configuration data
1976bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
1986bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Returns        void
1996bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
2006bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson ******************************************************************************/
2016bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonvoid bta_hl_co_save_mdl(uint8_t mdep_id, uint8_t item_idx,
2026bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson                        tBTA_HL_MDL_CFG* p_mdl_cfg) {
2036bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_TRACE_DEBUG("%s mdep_id =%d, item_idx=%d active=%d mdl_id=%d time=%d",
2046bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson                   __func__, mdep_id, item_idx, p_mdl_cfg->active,
2056bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson                   p_mdl_cfg->mdl_id, p_mdl_cfg->time);
2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2076bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  btif_hl_save_mdl_cfg(mdep_id, item_idx, p_mdl_cfg);
2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2116bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
2126bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Function        bta_hl_co_delete_mdl
2136bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
2146bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Description     This function is called to delete a MDL configuration item in
215f45481678af0694902b5200ba69ced4cb61d73f0Myles Watson *                 persistent storage
2166bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
2176bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Parameters      app_id - HDP application ID
2186bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *                 item_idx - the MDL configuration storage index
2196bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
2206bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Returns          void
2216bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
2226bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson ******************************************************************************/
2236bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonvoid bta_hl_co_delete_mdl(uint8_t mdep_id, uint8_t item_idx) {
2246bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_TRACE_DEBUG("%s mdep_id=%d, item_idx=%d", __func__, mdep_id, item_idx);
2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2266bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  btif_hl_delete_mdl_cfg(mdep_id, item_idx);
2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2306bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
2316bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Function         bta_hl_co_get_mdl_config
2326bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
2336bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Description     This function is called to get the MDL configuration
2346bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *                 from the persistent memory. This function shall only be
235f45481678af0694902b5200ba69ced4cb61d73f0Myles Watson *                 called once after the device is powered up
2366bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
2376bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Parameters      app_id - HDP application ID
2386bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *                 buffer_size - the unit of the buffer size is
239f45481678af0694902b5200ba69ced4cb61d73f0Myles Watson *                               sizeof(tBTA_HL_MDL_CFG)
2406bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *                 p_mdl_buf - Point to the starting location of the buffer
2416bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
2426bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Returns         bool
2436bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
2446bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
2456bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson ******************************************************************************/
2466bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonbool bta_hl_co_load_mdl_config(uint8_t app_id, uint8_t buffer_size,
2476bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson                               tBTA_HL_MDL_CFG* p_mdl_buf) {
2486bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  bool result = true;
2496bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  uint8_t i;
2506bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  tBTA_HL_MDL_CFG* p;
2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2526bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_TRACE_DEBUG("%s app_id=%d, num_items=%d", __func__, app_id, buffer_size);
2535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2546bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  if (buffer_size > BTA_HL_NUM_MDL_CFGS) {
2556bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson    result = false;
2565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return result;
2576bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  }
2586bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  result = btif_hl_load_mdl_config(app_id, buffer_size, p_mdl_buf);
2596bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson
2606bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  if (result) {
2616bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson    for (i = 0, p = p_mdl_buf; i < buffer_size; i++, p++) {
2626bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson      if (p->active) {
2636bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson        BTIF_TRACE_DEBUG(
2646bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson            "i=%d mdl_id=0x%x dch_mode=%d local mdep_role=%d mdep_id=%d mtu=%d",
2656bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson            i, p->mdl_id, p->dch_mode, p->local_mdep_role, p->local_mdep_role,
2666bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson            p->mtu);
2676bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson      }
2686bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson    }
2696bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  }
2706bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson
2716bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_TRACE_DEBUG("%s success=%d num_items=%d", __func__, result, buffer_size);
2726bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson
2736bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  return result;
2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2776bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
2786bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Function         bta_hl_co_get_tx_data
2796bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
2806bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Description     Get the data to be sent
2816bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
2826bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Parameters      app_id - HDP application ID
2836bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *                 mdl_handle - MDL handle
2846bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *                 buf_size - the size of the buffer
2856bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *                 p_buf - the buffer pointer
2866bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *                 evt - the evt to be passed back to the HL in the
2876bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *                       bta_hl_ci_get_tx_data call-in function
2886bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
2896bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Returns        Void
2906bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
2916bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson ******************************************************************************/
2926bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonvoid bta_hl_co_get_tx_data(uint8_t app_id, tBTA_HL_MDL_HANDLE mdl_handle,
2936bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson                           uint16_t buf_size, uint8_t* p_buf, uint16_t evt) {
2946bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  uint8_t app_idx, mcl_idx, mdl_idx;
2956bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  btif_hl_mdl_cb_t* p_dcb;
2966bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  tBTA_HL_STATUS status = BTA_HL_STATUS_FAIL;
2976bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson
2986bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_TRACE_DEBUG("%s app_id=%d mdl_handle=0x%x buf_size=%d", __func__, app_id,
2996bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson                   mdl_handle, buf_size);
3006bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson
3016bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  if (btif_hl_find_mdl_idx_using_handle(mdl_handle, &app_idx, &mcl_idx,
3026bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson                                        &mdl_idx)) {
3036bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson    p_dcb = BTIF_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx);
3046bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson
3054db816d09346c81a6504f53ed05a5dfe8b727372Srinu Jella    if ((p_dcb->tx_size <= buf_size) && p_dcb->p_tx_pkt) {
3066bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson      memcpy(p_buf, p_dcb->p_tx_pkt, p_dcb->tx_size);
3076bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson      osi_free_and_reset((void**)&p_dcb->p_tx_pkt);
3086bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson      p_dcb->tx_size = 0;
3096bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson      status = BTA_HL_STATUS_OK;
3105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3116bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  }
3125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3136bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  bta_hl_ci_get_tx_data(mdl_handle, status, evt);
3145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
3176bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
3186bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Function        bta_hl_co_put_rx_data
3196bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
3206bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Description     Put the received data
3216bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
3226bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Parameters      app_id - HDP application ID
3236bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *                 mdl_handle - MDL handle
3246bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *                 data_size - the size of the data
3256bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *                 p_data - the data pointer
3266bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *                 evt - the evt to be passed back to the HL in the
3276bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *                       bta_hl_ci_put_rx_data call-in function
3286bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
3296bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Returns        Void
3306bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
3316bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson ******************************************************************************/
3326bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonvoid bta_hl_co_put_rx_data(uint8_t app_id, tBTA_HL_MDL_HANDLE mdl_handle,
3336bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson                           uint16_t data_size, uint8_t* p_data, uint16_t evt) {
3346bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  uint8_t app_idx, mcl_idx, mdl_idx;
3356bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  btif_hl_mdl_cb_t* p_dcb;
3366bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  tBTA_HL_STATUS status = BTA_HL_STATUS_FAIL;
3376bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_TRACE_DEBUG("%s app_id=%d mdl_handle=0x%x data_size=%d", __func__,
3386bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson                   app_id, mdl_handle, data_size);
3396bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson
3406bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  if (btif_hl_find_mdl_idx_using_handle(mdl_handle, &app_idx, &mcl_idx,
3416bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson                                        &mdl_idx)) {
3426bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson    p_dcb = BTIF_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx);
3436bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson
3446bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson    p_dcb->p_rx_pkt = (uint8_t*)osi_malloc(data_size);
3456bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson    memcpy(p_dcb->p_rx_pkt, p_data, data_size);
3466bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson    if (p_dcb->p_scb) {
3476bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson      BTIF_TRACE_DEBUG("app_idx=%d mcl_idx=0x%x mdl_idx=0x%x data_size=%d",
3486bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson                       app_idx, mcl_idx, mdl_idx, data_size);
3496bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson      ssize_t r;
3506bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson      OSI_NO_INTR(
3516bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson          r = send(p_dcb->p_scb->socket_id[1], p_dcb->p_rx_pkt, data_size, 0));
3526bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson      if (r == data_size) {
3536bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson        BTIF_TRACE_DEBUG("socket send success data_size=%d", data_size);
3546bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson        status = BTA_HL_STATUS_OK;
3556bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson      } else {
3566bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson        BTIF_TRACE_ERROR("socket send failed r=%d data_size=%d", r, data_size);
3576bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson      }
3585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3596bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson    osi_free_and_reset((void**)&p_dcb->p_rx_pkt);
3606bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  }
3615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3626bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  bta_hl_ci_put_rx_data(mdl_handle, status, evt);
3635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
3666bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
3676bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Function         bta_hl_co_get_tx_data
3686bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
3696bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Description     Get the Echo data to be sent
3706bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
3716bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Parameters      app_id - HDP application ID
3726bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *                 mcl_handle - MCL handle
3736bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *                 buf_size - the size of the buffer
3746bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *                 p_buf - the buffer pointer
3756bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *                 evt - the evt to be passed back to the HL in the
3766bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *                       bta_hl_ci_get_tx_data call-in function
3776bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
3786bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Returns        Void
3796bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
3806bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson ******************************************************************************/
3819008888d24407541aa383aa4bd363a40abbf954bMyles Watsonvoid bta_hl_co_get_echo_data(UNUSED_ATTR uint8_t app_id,
3829008888d24407541aa383aa4bd363a40abbf954bMyles Watson                             tBTA_HL_MCL_HANDLE mcl_handle,
3839008888d24407541aa383aa4bd363a40abbf954bMyles Watson                             UNUSED_ATTR uint16_t buf_size,
3849008888d24407541aa383aa4bd363a40abbf954bMyles Watson                             UNUSED_ATTR uint8_t* p_buf, uint16_t evt) {
3856bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  tBTA_HL_STATUS status = BTA_HL_STATUS_FAIL;
3866bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson
3876bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_TRACE_ERROR("%s not supported", __func__);
3886bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  bta_hl_ci_get_echo_data(mcl_handle, status, evt);
3895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
3926bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
3936bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Function        bta_hl_co_put_echo_data
3946bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
3956bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Description     Put the received loopback echo data
3966bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
3976bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Parameters      app_id - HDP application ID
3986bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *                 mcl_handle - MCL handle
3996bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *                 data_size - the size of the data
4006bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *                 p_data - the data pointer
4016bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *                 evt - the evt to be passed back to the HL in the
4026bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *                       bta_hl_ci_put_echo_data call-in function
4036bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
4046bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Returns        Void
4056bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *
4066bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson ******************************************************************************/
4079008888d24407541aa383aa4bd363a40abbf954bMyles Watsonvoid bta_hl_co_put_echo_data(UNUSED_ATTR uint8_t app_id,
4089008888d24407541aa383aa4bd363a40abbf954bMyles Watson                             tBTA_HL_MCL_HANDLE mcl_handle,
4099008888d24407541aa383aa4bd363a40abbf954bMyles Watson                             UNUSED_ATTR uint16_t data_size,
4109008888d24407541aa383aa4bd363a40abbf954bMyles Watson                             UNUSED_ATTR uint8_t* p_data, uint16_t evt) {
4116bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  tBTA_HL_STATUS status = BTA_HL_STATUS_FAIL;
4126bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson
4136bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  BTIF_TRACE_ERROR("%s not supported", __func__);
4146bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson  bta_hl_ci_put_echo_data(mcl_handle, status, evt);
4155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
416