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