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