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