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