19adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan/******************************************************************************
29adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan *
3a408eb7227b7060aaa84b2dada7ddd9b6a955761Avish Shah *  Copyright (C) 2003-2016 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 "avrc_api.h"
219adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan#include "avrc_int.h"
22911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#include "bt_common.h"
239adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan
249adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan#if (AVRC_METADATA_INCLUDED == TRUE)
259adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan
269adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan/**************************************************************************
27ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
28ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function         AVRC_IsValidAvcType
29ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
30ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description      Check if correct AVC type is specified
31ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
32ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns          returns true if it is valid
33ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
34ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
35ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/
36911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonbool AVRC_IsValidAvcType(uint8_t pdu_id, uint8_t avc_type) {
37911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  bool result = false;
38911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson
39911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  if (avc_type < AVRC_RSP_NOT_IMPL) /* command msg */
40911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  {
41911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    switch (pdu_id) {
42911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      case AVRC_PDU_GET_CAPABILITIES:          /* 0x10 */
43911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      case AVRC_PDU_LIST_PLAYER_APP_ATTR:      /* 0x11 */
44911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      case AVRC_PDU_LIST_PLAYER_APP_VALUES:    /* 0x12 */
45911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      case AVRC_PDU_GET_CUR_PLAYER_APP_VALUE:  /* 0x13 */
46911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      case AVRC_PDU_GET_PLAYER_APP_ATTR_TEXT:  /* 0x15 */
47911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      case AVRC_PDU_GET_PLAYER_APP_VALUE_TEXT: /* 0x16 */
48911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      case AVRC_PDU_GET_ELEMENT_ATTR:          /* 0x20 */
49911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      case AVRC_PDU_GET_PLAY_STATUS:           /* 0x30 */
50911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson        if (avc_type == AVRC_CMD_STATUS) result = true;
51911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson        break;
529adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan
53911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      case AVRC_PDU_SET_PLAYER_APP_VALUE:      /* 0x14 */
54911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      case AVRC_PDU_INFORM_DISPLAY_CHARSET:    /* 0x17 */
55911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      case AVRC_PDU_INFORM_BATTERY_STAT_OF_CT: /* 0x18 */
56911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      case AVRC_PDU_REQUEST_CONTINUATION_RSP:  /* 0x40 */
57911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      case AVRC_PDU_ABORT_CONTINUATION_RSP:    /* 0x41 */
58911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson        if (avc_type == AVRC_CMD_CTRL) result = true;
59911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson        break;
60a408eb7227b7060aaa84b2dada7ddd9b6a955761Avish Shah
61911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      case AVRC_PDU_GET_FOLDER_ITEMS: /* 0x71 */
62911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson        result = true;
63911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson        break;
64a408eb7227b7060aaa84b2dada7ddd9b6a955761Avish Shah
65911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      case AVRC_PDU_SET_ABSOLUTE_VOLUME:  /* 0x50 */
66911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      case AVRC_PDU_SET_ADDRESSED_PLAYER: /* 0x60 */
67911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      case AVRC_PDU_PLAY_ITEM:            /* 0x74 */
68911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      case AVRC_PDU_ADD_TO_NOW_PLAYING:   /* 0x90 */
69911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson        if (avc_type == AVRC_CMD_CTRL) result = true;
70911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson        break;
719adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan
72911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      case AVRC_PDU_REGISTER_NOTIFICATION: /* 0x31 */
73911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson        if (avc_type == AVRC_CMD_NOTIF) result = true;
74911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson        break;
759adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan    }
76911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  } else /* response msg */
77911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  {
78911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    if (avc_type >= AVRC_RSP_NOT_IMPL && avc_type <= AVRC_RSP_INTERIM)
79911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      result = true;
80911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  }
819adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan
82911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  return result;
839adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan}
849adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan
859adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan/*******************************************************************************
86ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
87ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function         avrc_is_valid_player_attrib_value
88ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
89ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description      Check if the given attrib value is valid for its attribute
90ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
91ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns          returns true if it is valid
92ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
93ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/
94911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonbool avrc_is_valid_player_attrib_value(uint8_t attrib, uint8_t value) {
95911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  bool result = false;
969adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan
97911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  switch (attrib) {
989adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan    case AVRC_PLAYER_SETTING_EQUALIZER:
99911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      if ((value > 0) && (value <= AVRC_PLAYER_VAL_ON)) result = true;
100911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      break;
1019adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan
1029adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan    case AVRC_PLAYER_SETTING_REPEAT:
103911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      if ((value > 0) && (value <= AVRC_PLAYER_VAL_GROUP_REPEAT)) result = true;
104911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      break;
1059adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan
1069adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan    case AVRC_PLAYER_SETTING_SHUFFLE:
1079adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan    case AVRC_PLAYER_SETTING_SCAN:
108911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      if ((value > 0) && (value <= AVRC_PLAYER_VAL_GROUP_SHUFFLE))
109911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson        result = true;
110911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      break;
111911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  }
112911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson
113911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  if (attrib >= AVRC_PLAYER_SETTING_LOW_MENU_EXT) result = true;
114911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson
115911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  if (!result) {
116911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    AVRC_TRACE_ERROR(" %s found not matching attrib(x%x)-value(x%x) pair!",
1178843cc830b522cfe6f1e361297fc28fd331a1378Hemant Gupta                     __func__, attrib, value);
118911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  }
119911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  return result;
1209adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan}
1219adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan
1229adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan/*******************************************************************************
123ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
124ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function         AVRC_IsValidPlayerAttr
125ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
126ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description      Check if the given attrib value is a valid one
127ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
128ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns          returns true if it is valid
129ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
130ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/
131911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonbool AVRC_IsValidPlayerAttr(uint8_t attr) {
132911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  bool result = false;
1339adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan
134911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  if ((attr >= AVRC_PLAYER_SETTING_EQUALIZER &&
135911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson       attr <= AVRC_PLAYER_SETTING_SCAN) ||
136911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      (attr >= AVRC_PLAYER_SETTING_LOW_MENU_EXT)) {
137911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    result = true;
138911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  }
1399adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan
140911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  return result;
1419adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan}
1429adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan
1439adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan/*******************************************************************************
144ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
145ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function         avrc_pars_pass_thru
146ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
147ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description      This function parses the pass thru commands defined by
148ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *                  Bluetooth SIG
149ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
1509ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * Returns          AVRC_STS_NO_ERROR, if the message in p_data is parsed
1519ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson *                                     successfully.
152ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *                  Otherwise, the error code defined by AVRCP 1.4
153ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
154ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/
155911d1ae03efec2d54c3b1b605589d790d1745488Myles WatsontAVRC_STS avrc_pars_pass_thru(tAVRC_MSG_PASS* p_msg,
156911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson                              uint16_t* p_vendor_unique_id) {
157911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t* p_data;
158911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint32_t co_id;
159911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint16_t id;
160911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tAVRC_STS status = AVRC_STS_BAD_CMD;
161911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson
162911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  if (p_msg->op_id == AVRC_ID_VENDOR &&
163911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      p_msg->pass_len == AVRC_PASS_THRU_GROUP_LEN) {
164911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    p_data = p_msg->p_pass_data;
165911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    AVRC_BE_STREAM_TO_CO_ID(co_id, p_data);
166911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson    if (co_id == AVRC_CO_METADATA) {
167911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      BE_STREAM_TO_UINT16(id, p_data);
168911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      if (AVRC_IS_VALID_GROUP(id)) {
169911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson        *p_vendor_unique_id = id;
170911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson        status = AVRC_STS_NO_ERROR;
171911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      }
1729adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan    }
173911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  }
174911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  return status;
1759adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan}
1769adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan
1779adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan/*******************************************************************************
178ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
179ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function         avrc_opcode_from_pdu
180ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
181ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description      This function returns the opcode of the given pdu
182ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
183ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns          AVRC_OP_VENDOR, AVRC_OP_PASS_THRU or AVRC_OP_BROWSE
184ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
185ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/
186911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonuint8_t avrc_opcode_from_pdu(uint8_t pdu) {
187911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t opcode = 0;
1889adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan
189911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  switch (pdu) {
190a408eb7227b7060aaa84b2dada7ddd9b6a955761Avish Shah    case AVRC_PDU_SET_BROWSED_PLAYER:
191a408eb7227b7060aaa84b2dada7ddd9b6a955761Avish Shah    case AVRC_PDU_GET_FOLDER_ITEMS:
192a408eb7227b7060aaa84b2dada7ddd9b6a955761Avish Shah    case AVRC_PDU_CHANGE_PATH:
193a408eb7227b7060aaa84b2dada7ddd9b6a955761Avish Shah    case AVRC_PDU_GET_ITEM_ATTRIBUTES:
194a408eb7227b7060aaa84b2dada7ddd9b6a955761Avish Shah    case AVRC_PDU_SEARCH:
195a408eb7227b7060aaa84b2dada7ddd9b6a955761Avish Shah    case AVRC_PDU_GENERAL_REJECT:
196a408eb7227b7060aaa84b2dada7ddd9b6a955761Avish Shah    case AVRC_PDU_GET_TOTAL_NUM_OF_ITEMS:
197911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      opcode = AVRC_OP_BROWSE;
198911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      break;
199a408eb7227b7060aaa84b2dada7ddd9b6a955761Avish Shah
2009adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan    case AVRC_PDU_NEXT_GROUP:
2019adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan    case AVRC_PDU_PREV_GROUP: /* pass thru */
202911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      opcode = AVRC_OP_PASS_THRU;
203911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      break;
2049adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan
2059adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan    default: /* vendor */
206911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      opcode = AVRC_OP_VENDOR;
207911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      break;
208911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  }
2099adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan
210911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  return opcode;
2119adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan}
2129adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan
2139adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan/*******************************************************************************
214ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
215ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function         avrc_is_valid_opcode
216ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
217ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description      This function returns the opcode of the given pdu
218ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
219ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns          AVRC_OP_VENDOR, AVRC_OP_PASS_THRU or AVRC_OP_BROWSE
220ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
221ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/
222911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonbool avrc_is_valid_opcode(uint8_t opcode) {
223911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  bool is_valid = false;
224911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  switch (opcode) {
2259adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan    case AVRC_OP_BROWSE:
2269adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan    case AVRC_OP_PASS_THRU:
2279adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan    case AVRC_OP_VENDOR:
228911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      is_valid = true;
229911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson      break;
230911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  }
231911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  return is_valid;
2329adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan}
2339adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan
2349adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan#endif /* (AVRC_METADATA_INCLUDED == TRUE) */
235