19adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan/****************************************************************************** 29adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan * 39adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan * Copyright (C) 2003-2013 Broadcom Corporation 49adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan * 59adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan * Licensed under the Apache License, Version 2.0 (the "License"); 69adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan * you may not use this file except in compliance with the License. 79adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan * You may obtain a copy of the License at: 89adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan * 99adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan * http://www.apache.org/licenses/LICENSE-2.0 109adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan * 119adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan * Unless required by applicable law or agreed to in writing, software 129adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan * distributed under the License is distributed on an "AS IS" BASIS, 139adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 149adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan * See the License for the specific language governing permissions and 159adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan * limitations under the License. 169adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan * 179adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan ******************************************************************************/ 189adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan#include <string.h> 199adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 209adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan#include "gki.h" 219adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan#include "avrc_api.h" 229adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan#include "avrc_defs.h" 239adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan#include "avrc_int.h" 245cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen#include "bt_utils.h" 259adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 269adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan/***************************************************************************** 279adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Global data 289adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan*****************************************************************************/ 299adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan#if (AVRC_METADATA_INCLUDED == TRUE) 309adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 319adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan/******************************************************************************* 329adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 339adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Function avrc_bld_get_capability_rsp 349adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 359adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Description This function builds the Get Capability response. 369adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 379adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Returns AVRC_STS_NO_ERROR, if the response is built successfully 389adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Otherwise, the error code. 399adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 409adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan*******************************************************************************/ 419adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajanstatic tAVRC_STS avrc_bld_get_capability_rsp (tAVRC_GET_CAPS_RSP *p_rsp, BT_HDR *p_pkt) 429adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan{ 439adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT8 *p_data, *p_start, *p_len, *p_count; 449adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT16 len = 0; 459adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT8 xx; 469adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT32 *p_company_id; 479adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT8 *p_event_id; 489adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan tAVRC_STS status = AVRC_STS_NO_ERROR; 499adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 509adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan if (!(AVRC_IS_VALID_CAP_ID(p_rsp->capability_id))) 519adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 52b44cc59d286ad255e872c60df02e032bd8d9d75bSharvil Nanavati AVRC_TRACE_ERROR("avrc_bld_get_capability_rsp bad parameter. p_rsp: %x", p_rsp); 539adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan status = AVRC_STS_BAD_PARAM; 549adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan return status; 559adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 569adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 57b44cc59d286ad255e872c60df02e032bd8d9d75bSharvil Nanavati AVRC_TRACE_API("avrc_bld_get_capability_rsp"); 589adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan /* get the existing length, if any, and also the num attributes */ 599adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_start = (UINT8 *)(p_pkt + 1) + p_pkt->offset; 609adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_data = p_len = p_start + 2; /* pdu + rsvd */ 619adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 629adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan BE_STREAM_TO_UINT16(len, p_data); 639adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT8_TO_BE_STREAM(p_data, p_rsp->capability_id); 649adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_count = p_data; 659adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 669adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan if (len == 0) 679adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 689adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan *p_count = p_rsp->count; 699adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_data++; 709adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan len = 2; /* move past the capability_id and count */ 719adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 729adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan else 739adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 749adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_data = p_start + p_pkt->len; 759adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan *p_count += p_rsp->count; 769adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 779adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 789adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan if (p_rsp->capability_id == AVRC_CAP_COMPANY_ID) 799adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 809adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_company_id = p_rsp->param.company_id; 819adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan for (xx=0; xx< p_rsp->count; xx++) 829adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 839adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT24_TO_BE_STREAM(p_data, p_company_id[xx]); 849adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 859adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan len += p_rsp->count * 3; 869adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 879adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan else 889adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 899adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_event_id = p_rsp->param.event_id; 909adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan *p_count = 0; 919adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan for (xx=0; xx< p_rsp->count; xx++) 929adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 939adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan if (AVRC_IS_VALID_EVENT_ID(p_event_id[xx])) 949adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 959adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan (*p_count)++; 969adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT8_TO_BE_STREAM(p_data, p_event_id[xx]); 979adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 989adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 999adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan len += (*p_count); 1009adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 1019adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT16_TO_BE_STREAM(p_len, len); 1029adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_pkt->len = (p_data - p_start); 1039adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan status = AVRC_STS_NO_ERROR; 1049adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 1059adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan return status; 1069adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan} 1079adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 1089adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan/******************************************************************************* 1099adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 1109adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Function avrc_bld_list_app_settings_attr_rsp 1119adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 1129adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Description This function builds the List Application Settings Attribute 1139adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** response. 1149adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 1159adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Returns AVRC_STS_NO_ERROR, if the response is built successfully 1169adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Otherwise, the error code. 1179adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 1189adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan*******************************************************************************/ 1199adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajanstatic tAVRC_STS avrc_bld_list_app_settings_attr_rsp (tAVRC_LIST_APP_ATTR_RSP *p_rsp, BT_HDR *p_pkt) 1209adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan{ 1219adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT8 *p_data, *p_start, *p_len, *p_num; 1229adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT16 len = 0; 1239adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT8 xx; 1249adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 125b44cc59d286ad255e872c60df02e032bd8d9d75bSharvil Nanavati AVRC_TRACE_API("avrc_bld_list_app_settings_attr_rsp"); 1269adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan /* get the existing length, if any, and also the num attributes */ 1279adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_start = (UINT8 *)(p_pkt + 1) + p_pkt->offset; 1289adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_data = p_len = p_start + 2; /* pdu + rsvd */ 1299adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 1309adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan BE_STREAM_TO_UINT16(len, p_data); 1319adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_num = p_data; 1329adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan if (len == 0) 1339adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 1349adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan /* first time initialize the attribute count */ 1359adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan *p_num = 0; 1369adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_data++; 1379adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 1389adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan else 1399adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 1409adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_data = p_start + p_pkt->len; 1419adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 1429adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 1439adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan for (xx=0; xx<p_rsp->num_attr; xx++) 1449adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 1459adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan if(AVRC_IsValidPlayerAttr(p_rsp->attrs[xx])) 1469adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 1479adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan (*p_num)++; 1489adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT8_TO_BE_STREAM(p_data, p_rsp->attrs[xx]); 1499adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 1509adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 1519adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 1529adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan len = *p_num + 1; 1539adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT16_TO_BE_STREAM(p_len, len); 1549adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_pkt->len = (p_data - p_start); 1559adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 1569adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan return AVRC_STS_NO_ERROR; 1579adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan} 1589adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 1599adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan/******************************************************************************* 1609adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 1619adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Function avrc_bld_list_app_settings_values_rsp 1629adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 1639adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Description This function builds the List Application Setting Values 1649adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** response. 1659adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 1669adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Returns AVRC_STS_NO_ERROR, if the response is built successfully 1679adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Otherwise, the error code. 1689adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 1699adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan*******************************************************************************/ 1709adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajanstatic tAVRC_STS avrc_bld_list_app_settings_values_rsp (tAVRC_LIST_APP_VALUES_RSP *p_rsp, 1719adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan BT_HDR *p_pkt) 1729adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan{ 1739adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT8 *p_data, *p_start, *p_len, *p_num; 1749adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT8 xx; 1759adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT16 len; 1769adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 177b44cc59d286ad255e872c60df02e032bd8d9d75bSharvil Nanavati AVRC_TRACE_API("avrc_bld_list_app_settings_values_rsp"); 1789adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 1799adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_start = (UINT8 *)(p_pkt + 1) + p_pkt->offset; 1809adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_data = p_len = p_start + 2; /* pdu + rsvd */ 1819adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 1829adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan /* get the existing length, if any, and also the num attributes */ 1839adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan BE_STREAM_TO_UINT16(len, p_data); 1849adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_num = p_data; 1859adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan /* first time initialize the attribute count */ 1869adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan if (len == 0) 1879adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 1889adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan *p_num = p_rsp->num_val; 1899adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_data++; 1909adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 1919adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan else 1929adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 1939adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_data = p_start + p_pkt->len; 1949adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan *p_num += p_rsp->num_val; 1959adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 1969adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 1979adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 1989adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan for (xx=0; xx<p_rsp->num_val; xx++) 1999adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 2009adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT8_TO_BE_STREAM(p_data, p_rsp->vals[xx]); 2019adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 2029adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 2039adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan len = *p_num + 1; 2049adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT16_TO_BE_STREAM(p_len, len); 2059adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_pkt->len = (p_data - p_start); 2069adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan return AVRC_STS_NO_ERROR; 2079adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan} 2089adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 2099adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan/******************************************************************************* 2109adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 2119adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Function avrc_bld_get_cur_app_setting_value_rsp 2129adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 2139adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Description This function builds the Get Current Application Setting Value 2149adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** response. 2159adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 2169adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Returns AVRC_STS_NO_ERROR, if the response is built successfully 2179adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Otherwise, the error code. 2189adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 2199adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan*******************************************************************************/ 2209adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajanstatic tAVRC_STS avrc_bld_get_cur_app_setting_value_rsp (tAVRC_GET_CUR_APP_VALUE_RSP *p_rsp, 2219adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan BT_HDR *p_pkt) 2229adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan{ 2239adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT8 *p_data, *p_start, *p_len, *p_count; 2249adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT16 len; 2259adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT8 xx; 2269adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 2279adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan if (!p_rsp->p_vals) 2289adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 229b44cc59d286ad255e872c60df02e032bd8d9d75bSharvil Nanavati AVRC_TRACE_ERROR("avrc_bld_get_cur_app_setting_value_rsp NULL parameter"); 2309adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan return AVRC_STS_BAD_PARAM; 2319adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 2329adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 233b44cc59d286ad255e872c60df02e032bd8d9d75bSharvil Nanavati AVRC_TRACE_API("avrc_bld_get_cur_app_setting_value_rsp"); 2349adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan /* get the existing length, if any, and also the num attributes */ 2359adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_start = (UINT8 *)(p_pkt + 1) + p_pkt->offset; 2369adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_data = p_len = p_start + 2; /* pdu + rsvd */ 2379adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 2389adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan BE_STREAM_TO_UINT16(len, p_data); 2399adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_count = p_data; 2409adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan if (len == 0) 2419adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 2429adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan /* first time initialize the attribute count */ 2439adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan *p_count = 0; 2449adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_data++; 2459adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 2469adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan else 2479adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 2489adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_data = p_start + p_pkt->len; 2499adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 2509adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 2519adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan for (xx=0; xx<p_rsp->num_val; xx++) 2529adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 2539adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan if (avrc_is_valid_player_attrib_value(p_rsp->p_vals[xx].attr_id, p_rsp->p_vals[xx].attr_val)) 2549adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 2559adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan (*p_count)++; 2569adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT8_TO_BE_STREAM(p_data, p_rsp->p_vals[xx].attr_id); 2579adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT8_TO_BE_STREAM(p_data, p_rsp->p_vals[xx].attr_val); 2589adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 2599adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 2609adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan len = ((*p_count) << 1) + 1; 2619adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT16_TO_BE_STREAM(p_len, len); 2629adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_pkt->len = (p_data - p_start); 2639adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 2649adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan return AVRC_STS_NO_ERROR; 2659adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan} 2669adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 2679adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan/******************************************************************************* 2689adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 2699adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Function avrc_bld_set_app_setting_value_rsp 2709adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 2719adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Description This function builds the Set Application Setting Value 2729adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** response. 2739adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 2749adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Returns AVRC_STS_NO_ERROR, if the response is built successfully 2759adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Otherwise, the error code. 2769adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 2779adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan*******************************************************************************/ 2789adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajanstatic tAVRC_STS avrc_bld_set_app_setting_value_rsp (tAVRC_RSP *p_rsp, BT_HDR *p_pkt) 2799adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan{ 2805cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(p_rsp); 2815cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(p_pkt); 2825cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen 2839adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan /* nothing to be added. */ 284b44cc59d286ad255e872c60df02e032bd8d9d75bSharvil Nanavati AVRC_TRACE_API("avrc_bld_set_app_setting_value_rsp"); 2859adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan return AVRC_STS_NO_ERROR; 2869adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan} 2879adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 2889adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan/******************************************************************************* 2899adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 2909adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Function avrc_bld_app_setting_text_rsp 2919adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 2929adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Description This function builds the Get Application Settings Attribute Text 2939adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** or Get Application Settings Value Text response. 2949adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 2959adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Returns AVRC_STS_NO_ERROR, if the response is built successfully 2969adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Otherwise, the error code. 2979adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 2989adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan*******************************************************************************/ 2999adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajanstatic tAVRC_STS avrc_bld_app_setting_text_rsp (tAVRC_GET_APP_ATTR_TXT_RSP *p_rsp, BT_HDR *p_pkt) 3009adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan{ 3019adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT8 *p_data, *p_start, *p_len, *p_count; 3029adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT16 len, len_left; 3039adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT8 xx; 3049adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan tAVRC_STS sts = AVRC_STS_NO_ERROR; 3059adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT8 num_added = 0; 3069adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 3079adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan if (!p_rsp->p_attrs) 3089adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 309b44cc59d286ad255e872c60df02e032bd8d9d75bSharvil Nanavati AVRC_TRACE_ERROR("avrc_bld_app_setting_text_rsp NULL parameter"); 3109adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan return AVRC_STS_BAD_PARAM; 3119adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 3129adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan /* get the existing length, if any, and also the num attributes */ 3139adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_start = (UINT8 *)(p_pkt + 1) + p_pkt->offset; 3149adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_data = p_len = p_start + 2; /* pdu + rsvd */ 3159adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan len_left = GKI_get_buf_size(p_pkt) - BT_HDR_SIZE - p_pkt->offset - p_pkt->len; 3169adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 3179adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan BE_STREAM_TO_UINT16(len, p_data); 3189adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_count = p_data; 3199adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 3209adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan if (len == 0) 3219adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 3229adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan *p_count = 0; 3239adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_data++; 3249adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 3259adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan else 3269adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 3279adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_data = p_start + p_pkt->len; 3289adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 3299adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 3309adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan for (xx=0; xx<p_rsp->num_attr; xx++) 3319adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 3329adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan if (len_left < (p_rsp->p_attrs[xx].str_len + 4)) 3339adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 334b44cc59d286ad255e872c60df02e032bd8d9d75bSharvil Nanavati AVRC_TRACE_ERROR("avrc_bld_app_setting_text_rsp out of room (str_len:%d, left:%d)", 3359adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan xx, p_rsp->p_attrs[xx].str_len, len_left); 3369adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_rsp->num_attr = num_added; 3379adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan sts = AVRC_STS_INTERNAL_ERR; 3389adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan break; 3399adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 3409adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan if ( !p_rsp->p_attrs[xx].str_len || !p_rsp->p_attrs[xx].p_str ) 3419adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 342b44cc59d286ad255e872c60df02e032bd8d9d75bSharvil Nanavati AVRC_TRACE_ERROR("avrc_bld_app_setting_text_rsp NULL attr text[%d]", xx); 3439adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan continue; 3449adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 3459adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT8_TO_BE_STREAM(p_data, p_rsp->p_attrs[xx].attr_id); 3469adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT16_TO_BE_STREAM(p_data, p_rsp->p_attrs[xx].charset_id); 3479adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT8_TO_BE_STREAM(p_data, p_rsp->p_attrs[xx].str_len); 3489adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan ARRAY_TO_BE_STREAM(p_data, p_rsp->p_attrs[xx].p_str, p_rsp->p_attrs[xx].str_len); 3499adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan (*p_count)++; 3509adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan num_added++; 3519adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 3529adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan len = p_data - p_count; 3539adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT16_TO_BE_STREAM(p_len, len); 3549adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_pkt->len = (p_data - p_start); 3559adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 3569adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan return sts; 3579adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan} 3589adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 3599adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan/******************************************************************************* 3609adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 3619adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Function avrc_bld_get_app_setting_attr_text_rsp 3629adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 3639adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Description This function builds the Get Application Setting Attribute Text 3649adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** response. 3659adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 3669adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Returns AVRC_STS_NO_ERROR, if the response is built successfully 3679adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Otherwise, the error code. 3689adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 3699adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan*******************************************************************************/ 3709adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajanstatic tAVRC_STS avrc_bld_get_app_setting_attr_text_rsp (tAVRC_GET_APP_ATTR_TXT_RSP *p_rsp, 3719adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan BT_HDR *p_pkt) 3729adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan{ 373b44cc59d286ad255e872c60df02e032bd8d9d75bSharvil Nanavati AVRC_TRACE_API("avrc_bld_get_app_setting_attr_text_rsp"); 3749adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan return avrc_bld_app_setting_text_rsp(p_rsp, p_pkt); 3759adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan} 3769adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 3779adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan/******************************************************************************* 3789adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 3799adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Function avrc_bld_get_app_setting_value_text_rsp 3809adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 3819adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Description This function builds the Get Application Setting Value Text 3829adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** response. 3839adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 3849adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Returns AVRC_STS_NO_ERROR, if the response is built successfully 3859adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Otherwise, the error code. 3869adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 3879adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan*******************************************************************************/ 3889adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajanstatic tAVRC_STS avrc_bld_get_app_setting_value_text_rsp (tAVRC_GET_APP_ATTR_TXT_RSP *p_rsp, 3899adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan BT_HDR *p_pkt) 3909adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan{ 391b44cc59d286ad255e872c60df02e032bd8d9d75bSharvil Nanavati AVRC_TRACE_API("avrc_bld_get_app_setting_value_text_rsp"); 3929adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan return avrc_bld_app_setting_text_rsp(p_rsp, p_pkt); 3939adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan} 3949adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 3959adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan/******************************************************************************* 3969adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 3979adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Function avrc_bld_inform_charset_rsp 3989adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 3999adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Description This function builds the Inform Displayable Character Set 4009adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** response. 4019adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 4029adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Returns AVRC_STS_NO_ERROR, if the response is built successfully 4039adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Otherwise, the error code. 4049adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 4059adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan*******************************************************************************/ 4069adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajanstatic tAVRC_STS avrc_bld_inform_charset_rsp (tAVRC_RSP *p_rsp, BT_HDR *p_pkt) 4079adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan{ 4085cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(p_rsp); 4095cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(p_pkt); 4105cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen 4119adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan /* nothing to be added. */ 412b44cc59d286ad255e872c60df02e032bd8d9d75bSharvil Nanavati AVRC_TRACE_API("avrc_bld_inform_charset_rsp"); 4139adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan return AVRC_STS_NO_ERROR; 4149adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan} 4159adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 4169adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan/******************************************************************************* 4179adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 4189adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Function avrc_bld_inform_battery_status_rsp 4199adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 4209adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Description This function builds the Inform Battery Status 4219adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** response. 4229adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 4239adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Returns AVRC_STS_NO_ERROR, if the response is built successfully 4249adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Otherwise, the error code. 4259adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 4269adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan*******************************************************************************/ 4279adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajanstatic tAVRC_STS avrc_bld_inform_battery_status_rsp (tAVRC_RSP *p_rsp, BT_HDR *p_pkt) 4289adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan{ 4295cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(p_rsp); 4305cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(p_pkt); 4315cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen 4329adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan /* nothing to be added. */ 433b44cc59d286ad255e872c60df02e032bd8d9d75bSharvil Nanavati AVRC_TRACE_API("avrc_bld_inform_battery_status_rsp"); 4349adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan return AVRC_STS_NO_ERROR; 4359adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan} 4369adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 4379adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan/******************************************************************************* 4389adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 4399adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Function avrc_bld_get_elem_attrs_rsp 4409adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 4419adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Description This function builds the Get Element Attributes 4429adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** response. 4439adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 4449adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Returns AVRC_STS_NO_ERROR, if the response is built successfully 4459adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Otherwise, the error code. 4469adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 4479adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan*******************************************************************************/ 4489adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajanstatic tAVRC_STS avrc_bld_get_elem_attrs_rsp (tAVRC_GET_ELEM_ATTRS_RSP *p_rsp, BT_HDR *p_pkt) 4499adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan{ 4509adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT8 *p_data, *p_start, *p_len, *p_count; 4519adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT16 len; 4529adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT8 xx; 4539adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 454b44cc59d286ad255e872c60df02e032bd8d9d75bSharvil Nanavati AVRC_TRACE_API("avrc_bld_get_elem_attrs_rsp"); 4559adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan if (!p_rsp->p_attrs) 4569adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 457b44cc59d286ad255e872c60df02e032bd8d9d75bSharvil Nanavati AVRC_TRACE_ERROR("avrc_bld_get_elem_attrs_rsp NULL parameter"); 4589adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan return AVRC_STS_BAD_PARAM; 4599adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 4609adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 4619adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan /* get the existing length, if any, and also the num attributes */ 4629adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_start = (UINT8 *)(p_pkt + 1) + p_pkt->offset; 4639adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_data = p_len = p_start + 2; /* pdu + rsvd */ 4649adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 4659adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan BE_STREAM_TO_UINT16(len, p_data); 4669adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_count = p_data; 4679adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 4689adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan if (len == 0) 4699adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 4709adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan *p_count = 0; 4719adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_data++; 4729adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 4739adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan else 4749adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 4759adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_data = p_start + p_pkt->len; 4769adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 4779adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 4789adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan for (xx=0; xx<p_rsp->num_attr; xx++) 4799adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 4809adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan if (!AVRC_IS_VALID_MEDIA_ATTRIBUTE(p_rsp->p_attrs[xx].attr_id)) 4819adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 482b44cc59d286ad255e872c60df02e032bd8d9d75bSharvil Nanavati AVRC_TRACE_ERROR("avrc_bld_get_elem_attrs_rsp invalid attr id[%d]: %d", xx, p_rsp->p_attrs[xx].attr_id); 4839adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan continue; 4849adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 4859adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan if ( !p_rsp->p_attrs[xx].name.p_str ) 4869adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 4879adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_rsp->p_attrs[xx].name.str_len = 0; 4889adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 4899adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT32_TO_BE_STREAM(p_data, p_rsp->p_attrs[xx].attr_id); 4909adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT16_TO_BE_STREAM(p_data, p_rsp->p_attrs[xx].name.charset_id); 4919adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT16_TO_BE_STREAM(p_data, p_rsp->p_attrs[xx].name.str_len); 4929adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan ARRAY_TO_BE_STREAM(p_data, p_rsp->p_attrs[xx].name.p_str, p_rsp->p_attrs[xx].name.str_len); 4939adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan (*p_count)++; 4949adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 4959adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan len = p_data - p_count; 4969adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT16_TO_BE_STREAM(p_len, len); 4979adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_pkt->len = (p_data - p_start); 4989adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan return AVRC_STS_NO_ERROR; 4999adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan} 5009adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 5019adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan/******************************************************************************* 5029adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 5039adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Function avrc_bld_get_play_status_rsp 5049adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 5059adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Description This function builds the Get Play Status 5069adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** response. 5079adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 5089adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Returns AVRC_STS_NO_ERROR, if the response is built successfully 5099adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Otherwise, the error code. 5109adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 5119adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan*******************************************************************************/ 5129adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajanstatic tAVRC_STS avrc_bld_get_play_status_rsp (tAVRC_GET_PLAY_STATUS_RSP *p_rsp, BT_HDR *p_pkt) 5139adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan{ 5149adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT8 *p_data, *p_start; 5159adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 516b44cc59d286ad255e872c60df02e032bd8d9d75bSharvil Nanavati AVRC_TRACE_API("avrc_bld_get_play_status_rsp"); 5179adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_start = (UINT8 *)(p_pkt + 1) + p_pkt->offset; 5189adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_data = p_start + 2; 5199adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 5209adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan /* add fixed lenth - song len(4) + song position(4) + status(1) */ 5219adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT16_TO_BE_STREAM(p_data, 9); 5229adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT32_TO_BE_STREAM(p_data, p_rsp->song_len); 5239adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT32_TO_BE_STREAM(p_data, p_rsp->song_pos); 5249adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT8_TO_BE_STREAM(p_data, p_rsp->play_status); 5259adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_pkt->len = (p_data - p_start); 5269adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 5279adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan return AVRC_STS_NO_ERROR; 5289adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan} 5299adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 5309adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan/******************************************************************************* 5319adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 5329adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Function avrc_bld_notify_rsp 5339adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 5349adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Description This function builds the Notification response. 5359adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 5369adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Returns AVRC_STS_NO_ERROR, if the response is built successfully 5379adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Otherwise, the error code. 5389adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 5399adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan*******************************************************************************/ 5409adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajanstatic tAVRC_STS avrc_bld_notify_rsp (tAVRC_REG_NOTIF_RSP *p_rsp, BT_HDR *p_pkt) 5419adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan{ 5429adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT8 *p_data, *p_start; 5439adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT8 *p_len; 5449adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT16 len = 0; 5459adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT8 xx; 5469adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan tAVRC_STS status = AVRC_STS_NO_ERROR; 5479adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 548b44cc59d286ad255e872c60df02e032bd8d9d75bSharvil Nanavati AVRC_TRACE_API("avrc_bld_notify_rsp"); 5499adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 5509adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_start = (UINT8 *)(p_pkt + 1) + p_pkt->offset; 5519adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_data = p_len = p_start + 2; /* pdu + rsvd */ 5529adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_data += 2; 5539adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 5549adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT8_TO_BE_STREAM(p_data, p_rsp->event_id); 5559adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan switch (p_rsp->event_id) 5569adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 5579adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan case AVRC_EVT_PLAY_STATUS_CHANGE: /* 0x01 */ 5589adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan /* p_rsp->param.play_status >= AVRC_PLAYSTATE_STOPPED is always TRUE */ 5599adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan if ((p_rsp->param.play_status <= AVRC_PLAYSTATE_REV_SEEK) || 5609adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan (p_rsp->param.play_status == AVRC_PLAYSTATE_ERROR) ) 5619adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 5629adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT8_TO_BE_STREAM(p_data, p_rsp->param.play_status); 5639adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan len = 2; 5649adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 5659adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan else 5669adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 567b44cc59d286ad255e872c60df02e032bd8d9d75bSharvil Nanavati AVRC_TRACE_ERROR("bad play state"); 5689adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan status = AVRC_STS_BAD_PARAM; 5699adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 5709adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan break; 5719adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 5729adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan case AVRC_EVT_TRACK_CHANGE: /* 0x02 */ 5739adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan ARRAY_TO_BE_STREAM(p_data, p_rsp->param.track, AVRC_UID_SIZE); 5749adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan len = (UINT8)(AVRC_UID_SIZE + 1); 5759adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan break; 5769adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 5779adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan case AVRC_EVT_TRACK_REACHED_END: /* 0x03 */ 5789adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan case AVRC_EVT_TRACK_REACHED_START: /* 0x04 */ 5799adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan len = 1; 5809adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan break; 5819adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 5829adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan case AVRC_EVT_PLAY_POS_CHANGED: /* 0x05 */ 5839adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT32_TO_BE_STREAM(p_data, p_rsp->param.play_pos); 5849adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan len = 5; 5859adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan break; 5869adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 5879adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan case AVRC_EVT_BATTERY_STATUS_CHANGE: /* 0x06 */ 5889adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan if (AVRC_IS_VALID_BATTERY_STATUS(p_rsp->param.battery_status)) 5899adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 5909adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT8_TO_BE_STREAM(p_data, p_rsp->param.battery_status); 5919adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan len = 2; 5929adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 5939adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan else 5949adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 595b44cc59d286ad255e872c60df02e032bd8d9d75bSharvil Nanavati AVRC_TRACE_ERROR("bad battery status"); 5969adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan status = AVRC_STS_BAD_PARAM; 5979adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 5989adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan break; 5999adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 6009adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan case AVRC_EVT_SYSTEM_STATUS_CHANGE: /* 0x07 */ 6019adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan if (AVRC_IS_VALID_SYSTEM_STATUS(p_rsp->param.system_status)) 6029adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 6039adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT8_TO_BE_STREAM(p_data, p_rsp->param.system_status); 6049adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan len = 2; 6059adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 6069adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan else 6079adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 608b44cc59d286ad255e872c60df02e032bd8d9d75bSharvil Nanavati AVRC_TRACE_ERROR("bad system status"); 6099adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan status = AVRC_STS_BAD_PARAM; 6109adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 6119adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan break; 6129adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 6139adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan case AVRC_EVT_APP_SETTING_CHANGE: /* 0x08 */ 6149adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan if (p_rsp->param.player_setting.num_attr > AVRC_MAX_APP_SETTINGS) 6159adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_rsp->param.player_setting.num_attr = AVRC_MAX_APP_SETTINGS; 6169adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 6179adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan if (p_rsp->param.player_setting.num_attr > 0) 6189adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 6199adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT8_TO_BE_STREAM(p_data, p_rsp->param.player_setting.num_attr); 6209adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan len = 2; 6219adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan for (xx=0; xx<p_rsp->param.player_setting.num_attr; xx++) 6229adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 6239adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan if (avrc_is_valid_player_attrib_value(p_rsp->param.player_setting.attr_id[xx], 6249adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_rsp->param.player_setting.attr_value[xx])) 6259adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 6269adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT8_TO_BE_STREAM(p_data, p_rsp->param.player_setting.attr_id[xx]); 6279adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT8_TO_BE_STREAM(p_data, p_rsp->param.player_setting.attr_value[xx]); 6289adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 6299adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan else 6309adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 631b44cc59d286ad255e872c60df02e032bd8d9d75bSharvil Nanavati AVRC_TRACE_ERROR("bad player app seeting attribute or value"); 6329adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan status = AVRC_STS_BAD_PARAM; 6339adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan break; 6349adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 6359adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan len += 2; 6369adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 6379adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 6389adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan else 6399adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan status = AVRC_STS_BAD_PARAM; 6409adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan break; 6419adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 6429adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan default: 6439adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan status = AVRC_STS_BAD_PARAM; 644b44cc59d286ad255e872c60df02e032bd8d9d75bSharvil Nanavati AVRC_TRACE_ERROR("unknown event_id"); 6459adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 6469adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 6479adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT16_TO_BE_STREAM(p_len, len); 6489adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_pkt->len = (p_data - p_start); 6499adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 6509adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan return status; 6519adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan} 6529adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 6539adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan/******************************************************************************* 6549adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 6559adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Function avrc_bld_next_rsp 6569adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 6579adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Description This function builds the Request Continue or Abort 6589adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** response. 6599adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 6609adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Returns AVRC_STS_NO_ERROR, if the response is built successfully 6619adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Otherwise, the error code. 6629adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 6639adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan*******************************************************************************/ 6649adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajanstatic tAVRC_STS avrc_bld_next_rsp (tAVRC_RSP *p_rsp, BT_HDR *p_pkt) 6659adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan{ 6665cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(p_rsp); 6675cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(p_pkt); 6685cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen 6699adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan /* nothing to be added. */ 670b44cc59d286ad255e872c60df02e032bd8d9d75bSharvil Nanavati AVRC_TRACE_API("avrc_bld_next_rsp"); 6719adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan return AVRC_STS_NO_ERROR; 6729adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan} 6739adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 6749adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan/******************************************************************************* 6759adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 6769adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Function avrc_bld_group_navigation_rsp 6779adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 6789adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Description This function builds the Group Navigation 6799adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** response. 6809adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 6819adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Returns AVRC_STS_NO_ERROR, if the response is built successfully 6829adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Otherwise, the error code. 6839adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 6849adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan*******************************************************************************/ 6859adddf4965e9ddb01e339b934c343fcbd842a977Ravi NagarajantAVRC_STS avrc_bld_group_navigation_rsp (UINT16 navi_id, BT_HDR *p_pkt) 6869adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan{ 6879adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT8 *p_data; 6889adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 6899adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan if (!AVRC_IS_VALID_GROUP(navi_id)) 6909adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 691b44cc59d286ad255e872c60df02e032bd8d9d75bSharvil Nanavati AVRC_TRACE_ERROR("avrc_bld_group_navigation_rsp bad navigation op id: %d", navi_id); 6929adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan return AVRC_STS_BAD_PARAM; 6939adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 6949adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 695b44cc59d286ad255e872c60df02e032bd8d9d75bSharvil Nanavati AVRC_TRACE_API("avrc_bld_group_navigation_rsp"); 6969adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_data = (UINT8 *)(p_pkt+1) + p_pkt->offset; 6979adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT16_TO_BE_STREAM(p_data, navi_id); 6989adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_pkt->len = 2; 6999adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan return AVRC_STS_NO_ERROR; 7009adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan} 7019adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 7029adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan/******************************************************************************* 7039adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 7049adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Function avrc_bld_rejected_rsp 7059adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 7069adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Description This function builds the General Response response. 7079adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 7089adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Returns AVRC_STS_NO_ERROR, if the response is built successfully 7099adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Otherwise, the error code. 7109adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 7119adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan*******************************************************************************/ 7129adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajanstatic tAVRC_STS avrc_bld_rejected_rsp( tAVRC_RSP *p_rsp, BT_HDR *p_pkt ) 7139adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan{ 7149adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT8 *p_data, *p_start; 7159adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 716b44cc59d286ad255e872c60df02e032bd8d9d75bSharvil Nanavati AVRC_TRACE_API("avrc_bld_rejected_rsp: status=%d, pdu:x%x", p_rsp->status, p_rsp->pdu); 7179adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 7189adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_start = (UINT8 *)(p_pkt + 1) + p_pkt->offset; 7199adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_data = p_start + 2; 720b44cc59d286ad255e872c60df02e032bd8d9d75bSharvil Nanavati AVRC_TRACE_DEBUG("pdu:x%x", *p_start); 7219adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 7229adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT16_TO_BE_STREAM(p_data, 1); 7239adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT8_TO_BE_STREAM(p_data, p_rsp->status); 7249adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_pkt->len = p_data - p_start; 7259adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 7269adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan return AVRC_STS_NO_ERROR; 7279adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan} 7289adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 7299adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan/******************************************************************************* 7309adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 7319adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Function avrc_bld_init_rsp_buffer 7329adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 7339adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Description This function initializes the response buffer based on PDU 7349adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 7359adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Returns NULL, if no GKI buffer or failure to build the message. 7369adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Otherwise, the GKI buffer that contains the initialized message. 7379adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 7389adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan*******************************************************************************/ 7399adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajanstatic BT_HDR *avrc_bld_init_rsp_buffer(tAVRC_RESPONSE *p_rsp) 7409adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan{ 7419adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT16 offset = AVRC_MSG_PASS_THRU_OFFSET, chnl = AVCT_DATA_CTRL, len=AVRC_META_CMD_POOL_SIZE; 7429adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan BT_HDR *p_pkt=NULL; 7439adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT8 opcode = avrc_opcode_from_pdu(p_rsp->pdu); 7449adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 745b44cc59d286ad255e872c60df02e032bd8d9d75bSharvil Nanavati AVRC_TRACE_API("avrc_bld_init_rsp_buffer: pdu=%x, opcode=%x/%x", p_rsp->pdu, opcode, 7469adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_rsp->rsp.opcode); 7479adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan if (opcode != p_rsp->rsp.opcode && p_rsp->rsp.status != AVRC_STS_NO_ERROR && 7489adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan avrc_is_valid_opcode(p_rsp->rsp.opcode)) 7499adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 7509adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan opcode = p_rsp->rsp.opcode; 751b44cc59d286ad255e872c60df02e032bd8d9d75bSharvil Nanavati AVRC_TRACE_API("opcode=%x", opcode); 7529adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 7539adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 7549adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan switch (opcode) 7559adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 7569adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan case AVRC_OP_PASS_THRU: 7579adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan offset = AVRC_MSG_PASS_THRU_OFFSET; 7589adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan break; 7599adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 7609adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan case AVRC_OP_VENDOR: 7619adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan offset = AVRC_MSG_VENDOR_OFFSET; 7629adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan if (p_rsp->pdu == AVRC_PDU_GET_ELEMENT_ATTR) 7639adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan len = AVRC_BROWSE_POOL_SIZE; 7649adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan break; 7659adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 7669adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 7679adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan /* allocate and initialize the buffer */ 7689adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_pkt = (BT_HDR *)GKI_getbuf(len); 7699adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan if (p_pkt) 7709adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 7719adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT8 *p_data, *p_start; 7729adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 7739adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_pkt->layer_specific = chnl; 7749adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_pkt->event = opcode; 7759adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_pkt->offset = offset; 7769adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_data = (UINT8 *)(p_pkt + 1) + p_pkt->offset; 7779adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_start = p_data; 7789adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 7799adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan /* pass thru - group navigation - has a two byte op_id, so dont do it here */ 7809adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan if (opcode != AVRC_OP_PASS_THRU) 7819adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan *p_data++ = p_rsp->pdu; 7829adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 7839adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan switch (opcode) 7849adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 7859adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan case AVRC_OP_VENDOR: 7869adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan /* reserved 0, packet_type 0 */ 7879adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT8_TO_BE_STREAM(p_data, 0); 7889adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan /* continue to the next "case to add length */ 7899adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan /* add fixed lenth - 0 */ 7909adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan UINT16_TO_BE_STREAM(p_data, 0); 7919adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan break; 7929adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 7939adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 7949adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_pkt->len = (p_data - p_start); 7959adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 7969adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_rsp->rsp.opcode = opcode; 7979adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan return p_pkt; 7989adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan} 7999adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 8009adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan/******************************************************************************* 8019adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 8029adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Function AVRC_BldResponse 8039adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 8049adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Description This function builds the given AVRCP response to the given 8059adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** GKI buffer 8069adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 8079adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Returns AVRC_STS_NO_ERROR, if the response is built successfully 8089adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** Otherwise, the error code. 8099adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan** 8109adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan*******************************************************************************/ 8119adddf4965e9ddb01e339b934c343fcbd842a977Ravi NagarajantAVRC_STS AVRC_BldResponse( UINT8 handle, tAVRC_RESPONSE *p_rsp, BT_HDR **pp_pkt) 8129adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan{ 8139adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan tAVRC_STS status = AVRC_STS_BAD_PARAM; 8149adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan BT_HDR *p_pkt; 8159adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan BOOLEAN alloc = FALSE; 8165cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(handle); 8179adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 8189adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan if (!p_rsp || !pp_pkt) 8199adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 820b44cc59d286ad255e872c60df02e032bd8d9d75bSharvil Nanavati AVRC_TRACE_API("AVRC_BldResponse. Invalid parameters passed. p_rsp=%p, pp_pkt=%p", 8219adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_rsp, pp_pkt); 8229adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan return AVRC_STS_BAD_PARAM; 8239adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 8249adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 8259adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan if (*pp_pkt == NULL) 8269adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 8279adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan if ((*pp_pkt = avrc_bld_init_rsp_buffer(p_rsp)) == NULL) 8289adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 829b44cc59d286ad255e872c60df02e032bd8d9d75bSharvil Nanavati AVRC_TRACE_API("AVRC_BldResponse: Failed to initialize response buffer"); 8309adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan return AVRC_STS_INTERNAL_ERR; 8319adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 8329adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan alloc = TRUE; 8339adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 8349adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan status = AVRC_STS_NO_ERROR; 8359adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan p_pkt = *pp_pkt; 8369adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 837b44cc59d286ad255e872c60df02e032bd8d9d75bSharvil Nanavati AVRC_TRACE_API("AVRC_BldResponse: pdu=%x status=%x", p_rsp->rsp.pdu, p_rsp->rsp.status); 8389adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan if (p_rsp->rsp.status != AVRC_STS_NO_ERROR) 8399adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 8409adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan return( avrc_bld_rejected_rsp(&p_rsp->rsp, p_pkt) ); 8419adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 8429adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 8439adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan switch (p_rsp->pdu) 8449adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 8459adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan case AVRC_PDU_NEXT_GROUP: 8469adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan case AVRC_PDU_PREV_GROUP: 8479adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan status = avrc_bld_group_navigation_rsp(p_rsp->pdu, p_pkt); 8489adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan break; 8499adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 8509adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan case AVRC_PDU_GET_CAPABILITIES: 8519adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan status = avrc_bld_get_capability_rsp(&p_rsp->get_caps, p_pkt); 8529adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan break; 8539adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 8549adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan case AVRC_PDU_LIST_PLAYER_APP_ATTR: 8559adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan status = avrc_bld_list_app_settings_attr_rsp(&p_rsp->list_app_attr, p_pkt); 8569adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan break; 8579adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 8589adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan case AVRC_PDU_LIST_PLAYER_APP_VALUES: 8599adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan status = avrc_bld_list_app_settings_values_rsp(&p_rsp->list_app_values, p_pkt); 8609adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan break; 8619adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 8629adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan case AVRC_PDU_GET_CUR_PLAYER_APP_VALUE: 8639adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan status = avrc_bld_get_cur_app_setting_value_rsp(&p_rsp->get_cur_app_val, p_pkt); 8649adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan break; 8659adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 8669adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan case AVRC_PDU_SET_PLAYER_APP_VALUE: 8679adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan status = avrc_bld_set_app_setting_value_rsp(&p_rsp->set_app_val, p_pkt); 8689adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan break; 8699adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 8709adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan case AVRC_PDU_GET_PLAYER_APP_ATTR_TEXT: 8719adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan status = avrc_bld_get_app_setting_attr_text_rsp(&p_rsp->get_app_attr_txt, p_pkt); 8729adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan break; 8739adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 8749adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan case AVRC_PDU_GET_PLAYER_APP_VALUE_TEXT: 8759adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan status = avrc_bld_get_app_setting_value_text_rsp(&p_rsp->get_app_val_txt, p_pkt); 8769adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan break; 8779adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 8789adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan case AVRC_PDU_INFORM_DISPLAY_CHARSET: 8799adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan status = avrc_bld_inform_charset_rsp(&p_rsp->inform_charset, p_pkt); 8809adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan break; 8819adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 8829adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan case AVRC_PDU_INFORM_BATTERY_STAT_OF_CT: 8839adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan status = avrc_bld_inform_battery_status_rsp(&p_rsp->inform_battery_status, p_pkt); 8849adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan break; 8859adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 8869adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan case AVRC_PDU_GET_ELEMENT_ATTR: 8879adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan status = avrc_bld_get_elem_attrs_rsp(&p_rsp->get_elem_attrs, p_pkt); 8889adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan break; 8899adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 8909adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan case AVRC_PDU_GET_PLAY_STATUS: 8919adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan status = avrc_bld_get_play_status_rsp(&p_rsp->get_play_status, p_pkt); 8929adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan break; 8939adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 8949adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan case AVRC_PDU_REGISTER_NOTIFICATION: 8959adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan status = avrc_bld_notify_rsp(&p_rsp->reg_notif, p_pkt); 8969adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan break; 8979adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 8989adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan case AVRC_PDU_REQUEST_CONTINUATION_RSP: /* 0x40 */ 8999adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan status = avrc_bld_next_rsp(&p_rsp->continu, p_pkt); 9009adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan break; 9019adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 9029adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan case AVRC_PDU_ABORT_CONTINUATION_RSP: /* 0x41 */ 9039adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan status = avrc_bld_next_rsp(&p_rsp->abort, p_pkt); 9049adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan break; 9059adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 9069adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 9079adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan if (alloc && (status != AVRC_STS_NO_ERROR) ) 9089adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan { 9099adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan GKI_freebuf(p_pkt); 9109adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan *pp_pkt = NULL; 9119adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan } 912b44cc59d286ad255e872c60df02e032bd8d9d75bSharvil Nanavati AVRC_TRACE_API("AVRC_BldResponse: returning %d", status); 9139adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan return status; 9149adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan} 9159adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 9169adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan#endif /* (AVRC_METADATA_INCLUDED == TRUE)*/ 9179adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 918