| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- /******************************************************************************
- *
- * Copyright (C) 2003-2013 Broadcom Corporation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- ******************************************************************************/
- #include <string.h>
- #include "bt_target.h"
- #include "gki.h"
- #include "avrc_api.h"
- #include "avrc_int.h"
- #if (defined(AVRC_INCLUDED) && AVRC_INCLUDED == TRUE)
- #if (AVRC_METADATA_INCLUDED == TRUE)
- /**************************************************************************
- **
- ** Function AVRC_IsValidAvcType
- **
- ** Description Check if correct AVC type is specified
- **
- ** Returns returns TRUE if it is valid
- **
- **
- *******************************************************************************/
- BOOLEAN AVRC_IsValidAvcType(UINT8 pdu_id, UINT8 avc_type)
- {
- BOOLEAN result = FALSE;
- if (avc_type < AVRC_RSP_NOT_IMPL) { /* command msg */
- switch (pdu_id) {
- case AVRC_PDU_GET_CAPABILITIES: /* 0x10 */
- case AVRC_PDU_LIST_PLAYER_APP_ATTR: /* 0x11 */
- case AVRC_PDU_LIST_PLAYER_APP_VALUES: /* 0x12 */
- case AVRC_PDU_GET_CUR_PLAYER_APP_VALUE: /* 0x13 */
- case AVRC_PDU_GET_PLAYER_APP_ATTR_TEXT: /* 0x15 */
- case AVRC_PDU_GET_PLAYER_APP_VALUE_TEXT: /* 0x16 */
- case AVRC_PDU_GET_ELEMENT_ATTR: /* 0x20 */
- case AVRC_PDU_GET_PLAY_STATUS: /* 0x30 */
- if (avc_type == AVRC_CMD_STATUS) {
- result = TRUE;
- }
- break;
- case AVRC_PDU_SET_PLAYER_APP_VALUE: /* 0x14 */
- case AVRC_PDU_INFORM_DISPLAY_CHARSET: /* 0x17 */
- case AVRC_PDU_INFORM_BATTERY_STAT_OF_CT: /* 0x18 */
- case AVRC_PDU_REQUEST_CONTINUATION_RSP: /* 0x40 */
- case AVRC_PDU_ABORT_CONTINUATION_RSP: /* 0x41 */
- if (avc_type == AVRC_CMD_CTRL) {
- result = TRUE;
- }
- break;
- case AVRC_PDU_REGISTER_NOTIFICATION: /* 0x31 */
- if (avc_type == AVRC_CMD_NOTIF) {
- result = TRUE;
- }
- break;
- }
- } else { /* response msg */
- if (avc_type >= AVRC_RSP_NOT_IMPL &&
- avc_type <= AVRC_RSP_INTERIM ) {
- result = TRUE;
- }
- }
- return result;
- }
- /*******************************************************************************
- **
- ** Function avrc_is_valid_player_attrib_value
- **
- ** Description Check if the given attrib value is valid for its attribute
- **
- ** Returns returns TRUE if it is valid
- **
- *******************************************************************************/
- BOOLEAN avrc_is_valid_player_attrib_value(UINT8 attrib, UINT8 value)
- {
- BOOLEAN result = FALSE;
- switch (attrib) {
- case AVRC_PLAYER_SETTING_EQUALIZER:
- if ((value > 0) &&
- (value <= AVRC_PLAYER_VAL_ON)) {
- result = TRUE;
- }
- break;
- case AVRC_PLAYER_SETTING_REPEAT:
- if ((value > 0) &&
- (value <= AVRC_PLAYER_VAL_GROUP_REPEAT)) {
- result = TRUE;
- }
- break;
- case AVRC_PLAYER_SETTING_SHUFFLE:
- case AVRC_PLAYER_SETTING_SCAN:
- if ((value > 0) &&
- (value <= AVRC_PLAYER_VAL_GROUP_SHUFFLE)) {
- result = TRUE;
- }
- break;
- }
- if (attrib >= AVRC_PLAYER_SETTING_LOW_MENU_EXT) {
- result = TRUE;
- }
- if (!result)
- AVRC_TRACE_ERROR(
- "avrc_is_valid_player_attrib_value() found not matching attrib(x%x)-value(x%x) pair!",
- attrib, value);
- return result;
- }
- /*******************************************************************************
- **
- ** Function AVRC_IsValidPlayerAttr
- **
- ** Description Check if the given attrib value is a valid one
- **
- ** Returns returns TRUE if it is valid
- **
- *******************************************************************************/
- BOOLEAN AVRC_IsValidPlayerAttr(UINT8 attr)
- {
- BOOLEAN result = FALSE;
- if ( (attr >= AVRC_PLAYER_SETTING_EQUALIZER && attr <= AVRC_PLAYER_SETTING_SCAN) ||
- (attr >= AVRC_PLAYER_SETTING_LOW_MENU_EXT) ) {
- result = TRUE;
- }
- return result;
- }
- /*******************************************************************************
- **
- ** Function avrc_pars_pass_thru
- **
- ** Description This function parses the pass thru commands defined by
- ** Bluetooth SIG
- **
- ** Returns AVRC_STS_NO_ERROR, if the message in p_data is parsed successfully.
- ** Otherwise, the error code defined by AVRCP 1.4
- **
- *******************************************************************************/
- tAVRC_STS avrc_pars_pass_thru(tAVRC_MSG_PASS *p_msg, UINT16 *p_vendor_unique_id)
- {
- UINT8 *p_data;
- UINT32 co_id;
- UINT16 id;
- tAVRC_STS status = AVRC_STS_BAD_CMD;
- if (p_msg->op_id == AVRC_ID_VENDOR && p_msg->pass_len == AVRC_PASS_THRU_GROUP_LEN) {
- p_data = p_msg->p_pass_data;
- AVRC_BE_STREAM_TO_CO_ID (co_id, p_data);
- if (co_id == AVRC_CO_METADATA) {
- BE_STREAM_TO_UINT16 (id, p_data);
- if (AVRC_IS_VALID_GROUP(id)) {
- *p_vendor_unique_id = id;
- status = AVRC_STS_NO_ERROR;
- }
- }
- }
- return status;
- }
- /*******************************************************************************
- **
- ** Function avrc_opcode_from_pdu
- **
- ** Description This function returns the opcode of the given pdu
- **
- ** Returns AVRC_OP_VENDOR, AVRC_OP_PASS_THRU or AVRC_OP_BROWSE
- **
- *******************************************************************************/
- UINT8 avrc_opcode_from_pdu(UINT8 pdu)
- {
- UINT8 opcode = 0;
- switch (pdu) {
- case AVRC_PDU_NEXT_GROUP:
- case AVRC_PDU_PREV_GROUP: /* pass thru */
- opcode = AVRC_OP_PASS_THRU;
- break;
- default: /* vendor */
- opcode = AVRC_OP_VENDOR;
- break;
- }
- return opcode;
- }
- /*******************************************************************************
- **
- ** Function avrc_is_valid_opcode
- **
- ** Description This function returns the opcode of the given pdu
- **
- ** Returns AVRC_OP_VENDOR, AVRC_OP_PASS_THRU or AVRC_OP_BROWSE
- **
- *******************************************************************************/
- BOOLEAN avrc_is_valid_opcode(UINT8 opcode)
- {
- BOOLEAN is_valid = FALSE;
- switch (opcode) {
- case AVRC_OP_BROWSE:
- case AVRC_OP_PASS_THRU:
- case AVRC_OP_VENDOR:
- is_valid = TRUE;
- break;
- }
- return is_valid;
- }
- #endif /* (AVRC_METADATA_INCLUDED == TRUE) */
- #endif /* #if (defined(AVRC_INCLUDED) && AVRC_INCLUDED == TRUE) */
|