1247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji/****************************************************************************** 2247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji * 35b790feeeb211c42bf78ca3ae9c26aa30e516765Jakub Pawlowski * Copyright 2006-2013 Broadcom Corporation 4247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji * 5247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji * Licensed under the Apache License, Version 2.0 (the "License"); 6247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji * you may not use this file except in compliance with the License. 7247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji * You may obtain a copy of the License at: 8247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji * 9247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji * http://www.apache.org/licenses/LICENSE-2.0 10247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji * 11247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji * Unless required by applicable law or agreed to in writing, software 12247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji * distributed under the License is distributed on an "AS IS" BASIS, 13247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji * See the License for the specific language governing permissions and 15247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji * limitations under the License. 16247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji * 17247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji ******************************************************************************/ 18247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji#include <string.h> 19247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji 20247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji#include "avrc_api.h" 21247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji#include "avrc_defs.h" 22247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji#include "avrc_int.h" 23911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#include "bt_common.h" 24247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji 25247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji/***************************************************************************** 26ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Global data 27ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ****************************************************************************/ 28247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji 29247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji/******************************************************************************* 30ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 31ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function avrc_bld_next_cmd 32ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 33ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description This function builds the Request Continue or Abort command. 34ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 35ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns AVRC_STS_NO_ERROR, if the command is built successfully 36ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Otherwise, the error code. 37ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 38ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 39911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic tAVRC_STS avrc_bld_next_cmd(tAVRC_NEXT_CMD* p_cmd, BT_HDR* p_pkt) { 40911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t *p_data, *p_start; 41247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji 42911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson AVRC_TRACE_API("avrc_bld_next_cmd"); 43247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji 44911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* get the existing length, if any, and also the num attributes */ 45911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_start = (uint8_t*)(p_pkt + 1) + p_pkt->offset; 46911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_data = p_start + 2; /* pdu + rsvd */ 47247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji 48911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* add fixed lenth 1 - pdu_id (1) */ 49911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT16_TO_BE_STREAM(p_data, 1); 50911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT8_TO_BE_STREAM(p_data, p_cmd->target_pdu); 51911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_pkt->len = (p_data - p_start); 52247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji 53911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson return AVRC_STS_NO_ERROR; 54247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji} 55247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji 56247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji/***************************************************************************** 57ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * the following commands are introduced in AVRCP 1.4 58ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ****************************************************************************/ 59247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji 60247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji#if (AVRC_ADV_CTRL_INCLUDED == TRUE) 61247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji/******************************************************************************* 62ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 63ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function avrc_bld_set_abs_volume_cmd 64ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 65ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description This function builds the Set Absolute Volume command. 66ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 67ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns AVRC_STS_NO_ERROR, if the command is built successfully 68ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Otherwise, the error code. 69ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 70ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 71911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic tAVRC_STS avrc_bld_set_abs_volume_cmd(tAVRC_SET_VOLUME_CMD* p_cmd, 72911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson BT_HDR* p_pkt) { 73911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t *p_data, *p_start; 74911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 75911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson AVRC_TRACE_API("avrc_bld_set_abs_volume_cmd"); 76911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* get the existing length, if any, and also the num attributes */ 77911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_start = (uint8_t*)(p_pkt + 1) + p_pkt->offset; 78911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_data = p_start + 2; /* pdu + rsvd */ 79911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* add fixed lenth 1 - volume (1) */ 80911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT16_TO_BE_STREAM(p_data, 1); 81911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT8_TO_BE_STREAM(p_data, (AVRC_MAX_VOLUME & p_cmd->volume)); 82911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_pkt->len = (p_data - p_start); 83911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson return AVRC_STS_NO_ERROR; 84247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji} 85247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji 86247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji/******************************************************************************* 87ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 88ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function avrc_bld_register_notifn 89ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 90ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description This function builds the register notification. 91ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 92ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns AVRC_STS_NO_ERROR, if the command is built successfully 93ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Otherwise, the error code. 94ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 95ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 96911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic tAVRC_STS avrc_bld_register_notifn(BT_HDR* p_pkt, uint8_t event_id, 97911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint32_t event_param) { 98911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t *p_data, *p_start; 99911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 100911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson AVRC_TRACE_API("avrc_bld_register_notifn"); 101911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* get the existing length, if any, and also the num attributes */ 102911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson // Set the notify value 103911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_start = (uint8_t*)(p_pkt + 1) + p_pkt->offset; 104911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_data = p_start + 2; /* pdu + rsvd */ 105911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* add fixed length 5 -*/ 106911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT16_TO_BE_STREAM(p_data, 5); 107911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT8_TO_BE_STREAM(p_data, event_id); 108911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT32_TO_BE_STREAM(p_data, event_param); 109911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_pkt->len = (p_data - p_start); 110911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson return AVRC_STS_NO_ERROR; 1116b84f291c4edce7e4102efd8d4052a63bcb4b9dcAnubhav Gupta} 112a58d7fe1cd90d48cea8924a4f2dcaa91e65ff629AnubhavGupta#endif 113133f0b6503b6adced17795c7a31dd17e084507e1Marie Janssen 1146b84f291c4edce7e4102efd8d4052a63bcb4b9dcAnubhav Gupta/******************************************************************************* 115ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 116ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function avrc_bld_get_capability_cmd 117ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 118ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description This function builds the get capability command. 119ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 120ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns AVRC_STS_NO_ERROR, if the command is built successfully 121ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Otherwise, the error code. 122ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 123ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 124911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic tAVRC_STS avrc_bld_get_capability_cmd(BT_HDR* p_pkt, uint8_t cap_id) { 125911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson AVRC_TRACE_API("avrc_bld_get_capability_cmd"); 126911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t* p_start = (uint8_t*)(p_pkt + 1) + p_pkt->offset; 127911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t* p_data = p_start + 2; /* pdu + rsvd */ 128911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* add fixed length 1 -*/ 129911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT16_TO_BE_STREAM(p_data, 1); 130911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT8_TO_BE_STREAM(p_data, cap_id); 131911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_pkt->len = (p_data - p_start); 132911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson return AVRC_STS_NO_ERROR; 1336b84f291c4edce7e4102efd8d4052a63bcb4b9dcAnubhav Gupta} 1346b84f291c4edce7e4102efd8d4052a63bcb4b9dcAnubhav Gupta 1356b84f291c4edce7e4102efd8d4052a63bcb4b9dcAnubhav Gupta/******************************************************************************* 136ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 137ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function avrc_bld_list_player_app_attr_cmd 138ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 139ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description This function builds the list player app attrib command. 140ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 141ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns AVRC_STS_NO_ERROR, if the command is built successfully 142ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Otherwise, the error code. 143ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 144ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 145911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic tAVRC_STS avrc_bld_list_player_app_attr_cmd(BT_HDR* p_pkt) { 146911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson AVRC_TRACE_API("avrc_bld_list_player_app_attr_cmd"); 147911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t* p_start = (uint8_t*)(p_pkt + 1) + p_pkt->offset; 148911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t* p_data = p_start + 2; /* pdu + rsvd */ 149911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* add fixed length 1 -*/ 150911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT16_TO_BE_STREAM(p_data, 0); 151911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_pkt->len = (p_data - p_start); 152911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson return AVRC_STS_NO_ERROR; 1536b84f291c4edce7e4102efd8d4052a63bcb4b9dcAnubhav Gupta} 1546b84f291c4edce7e4102efd8d4052a63bcb4b9dcAnubhav Gupta 1556b84f291c4edce7e4102efd8d4052a63bcb4b9dcAnubhav Gupta/******************************************************************************* 156ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 157ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function avrc_bld_list_player_app_values_cmd 158ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 159ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description This function builds the list player app values command. 160ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 161ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns AVRC_STS_NO_ERROR, if the command is built successfully 162ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Otherwise, the error code. 163ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 164ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 165911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic tAVRC_STS avrc_bld_list_player_app_values_cmd(BT_HDR* p_pkt, 166911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t attrib_id) { 167911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson AVRC_TRACE_API("avrc_bld_list_player_app_values_cmd"); 168911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t* p_start = (uint8_t*)(p_pkt + 1) + p_pkt->offset; 169911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t* p_data = p_start + 2; /* pdu + rsvd */ 170911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* add fixed length 1 -*/ 171911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT16_TO_BE_STREAM(p_data, 1); 172911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT8_TO_BE_STREAM(p_data, attrib_id); 173911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_pkt->len = (p_data - p_start); 174911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson return AVRC_STS_NO_ERROR; 1756b84f291c4edce7e4102efd8d4052a63bcb4b9dcAnubhav Gupta} 1766b84f291c4edce7e4102efd8d4052a63bcb4b9dcAnubhav Gupta 1776b84f291c4edce7e4102efd8d4052a63bcb4b9dcAnubhav Gupta/******************************************************************************* 178ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 179ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function avrc_bld_get_current_player_app_values_cmd 180ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1819ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * Description This function builds the get current player app setting 1829ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * values command. 183ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 184ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns AVRC_STS_NO_ERROR, if the command is built successfully 185ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Otherwise, the error code. 186ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 187ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 1886b84f291c4edce7e4102efd8d4052a63bcb4b9dcAnubhav Guptastatic tAVRC_STS avrc_bld_get_current_player_app_values_cmd( 189911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson BT_HDR* p_pkt, uint8_t num_attrib_id, uint8_t* attrib_ids) { 190911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson AVRC_TRACE_API("avrc_bld_get_current_player_app_values_cmd"); 191911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t* p_start = (uint8_t*)(p_pkt + 1) + p_pkt->offset; 192911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t* p_data = p_start + 2; /* pdu + rsvd */ 193911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t param_len = 194911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson num_attrib_id + 1; // 1 additional to hold num attributes feild 195911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* add length -*/ 196911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT16_TO_BE_STREAM(p_data, param_len); 197911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT8_TO_BE_STREAM(p_data, num_attrib_id); 198911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson for (int count = 0; count < num_attrib_id; count++) { 199911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT8_TO_BE_STREAM(p_data, attrib_ids[count]); 200911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson } 201911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_pkt->len = (p_data - p_start); 202911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson return AVRC_STS_NO_ERROR; 2036b84f291c4edce7e4102efd8d4052a63bcb4b9dcAnubhav Gupta} 2046b84f291c4edce7e4102efd8d4052a63bcb4b9dcAnubhav Gupta 2056b84f291c4edce7e4102efd8d4052a63bcb4b9dcAnubhav Gupta/******************************************************************************* 206ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 207ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function avrc_bld_set_current_player_app_values_cmd 208ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 2099ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * Description This function builds the set current player app setting 2109ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * values command. 211ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 212ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns AVRC_STS_NO_ERROR, if the command is built successfully 213ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Otherwise, the error code. 214ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 215ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 216911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic tAVRC_STS avrc_bld_set_current_player_app_values_cmd( 217911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson BT_HDR* p_pkt, uint8_t num_attrib_id, tAVRC_APP_SETTING* p_val) { 218911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson AVRC_TRACE_API("avrc_bld_set_current_player_app_values_cmd"); 219911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t* p_start = (uint8_t*)(p_pkt + 1) + p_pkt->offset; 220911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t* p_data = p_start + 2; /* pdu + rsvd */ 221911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* we have to store attrib- value pair 222911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson * 1 additional to store num elements 223911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson */ 224911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t param_len = (2 * num_attrib_id) + 1; 225911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* add length */ 226911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT16_TO_BE_STREAM(p_data, param_len); 227911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT8_TO_BE_STREAM(p_data, num_attrib_id); 228911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson for (int count = 0; count < num_attrib_id; count++) { 229911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT8_TO_BE_STREAM(p_data, p_val[count].attr_id); 230911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT8_TO_BE_STREAM(p_data, p_val[count].attr_val); 231911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson } 232911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_pkt->len = (p_data - p_start); 233911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson return AVRC_STS_NO_ERROR; 2346b84f291c4edce7e4102efd8d4052a63bcb4b9dcAnubhav Gupta} 2356b84f291c4edce7e4102efd8d4052a63bcb4b9dcAnubhav Gupta 2366b84f291c4edce7e4102efd8d4052a63bcb4b9dcAnubhav Gupta/******************************************************************************* 237ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 238ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function avrc_bld_get_player_app_setting_attr_text_cmd 239ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 2409ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * Description This function builds the get player app setting attribute 2419ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * text command. 242ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 243ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns AVRC_STS_NO_ERROR, if the command is built successfully 244ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Otherwise, the error code. 245ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 246ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 247911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic tAVRC_STS avrc_bld_get_player_app_setting_attr_text_cmd( 248911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson BT_HDR* p_pkt, tAVRC_GET_APP_ATTR_TXT_CMD* p_cmd) { 249911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson AVRC_TRACE_API("%s", __func__); 250911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 251911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t* p_start = (uint8_t*)(p_pkt + 1) + p_pkt->offset; 252911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t* p_data = p_start + 2; /* pdu + rsvd */ 253911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 254911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t param_len = p_cmd->num_attr + 1; 255911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* add length */ 256911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT16_TO_BE_STREAM(p_data, param_len); 257911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT8_TO_BE_STREAM(p_data, p_cmd->num_attr); 258911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson for (int count = 0; count < p_cmd->num_attr; count++) { 259911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT8_TO_BE_STREAM(p_data, p_cmd->attrs[count]); 260911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson } 261911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_pkt->len = (p_data - p_start); 262911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson return AVRC_STS_NO_ERROR; 2636b84f291c4edce7e4102efd8d4052a63bcb4b9dcAnubhav Gupta} 2646b84f291c4edce7e4102efd8d4052a63bcb4b9dcAnubhav Gupta 2656b84f291c4edce7e4102efd8d4052a63bcb4b9dcAnubhav Gupta/******************************************************************************* 266ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 267ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function avrc_bld_get_player_app_setting_value_text_cmd 268ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 2699ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * Description This function builds the get player app setting value 2709ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * text command. 271ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 272ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns AVRC_STS_NO_ERROR, if the command is built successfully 273ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Otherwise, the error code. 274ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 275ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 276911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic tAVRC_STS avrc_bld_get_player_app_setting_value_text_cmd( 277911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson BT_HDR* p_pkt, tAVRC_GET_APP_VAL_TXT_CMD* p_cmd) { 278911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson AVRC_TRACE_API("%s", __func__); 279911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 280911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t* p_start = (uint8_t*)(p_pkt + 1) + p_pkt->offset; 281911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t* p_data = p_start + 2; /* pdu + rsvd */ 282911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 283911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t param_len = p_cmd->num_val + 1; 284911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* add length */ 285911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT16_TO_BE_STREAM(p_data, param_len); 286911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT8_TO_BE_STREAM(p_data, p_cmd->num_val); 287911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson for (int count = 0; count < p_cmd->num_val; count++) { 288911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT8_TO_BE_STREAM(p_data, p_cmd->vals[count]); 289911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson } 290911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_pkt->len = (p_data - p_start); 291911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson return AVRC_STS_NO_ERROR; 2926b84f291c4edce7e4102efd8d4052a63bcb4b9dcAnubhav Gupta} 2936b84f291c4edce7e4102efd8d4052a63bcb4b9dcAnubhav Gupta 2946b84f291c4edce7e4102efd8d4052a63bcb4b9dcAnubhav Gupta/******************************************************************************* 295ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 296ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function avrc_bld_get_element_attr_cmd 297ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 298ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description This function builds the get element attribute command. 299ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 300ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns AVRC_STS_NO_ERROR, if the command is built successfully 301ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Otherwise, the error code. 302ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 303ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 304911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic tAVRC_STS avrc_bld_get_element_attr_cmd(BT_HDR* p_pkt, 305911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t num_attrib, 306911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint32_t* attrib_ids) { 307911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson AVRC_TRACE_API("avrc_bld_get_element_attr_cmd"); 308911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t* p_start = (uint8_t*)(p_pkt + 1) + p_pkt->offset; 309911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t* p_data = p_start + 2; /* pdu + rsvd */ 310911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* we have to store attrib- value pair 311911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson * 1 additional to store num elements 312911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson */ 313911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t param_len = (4 * num_attrib) + 9; 314911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* add length */ 315911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT16_TO_BE_STREAM(p_data, param_len); 316911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* 8 bytes of identifier as 0 (playing)*/ 317911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT32_TO_BE_STREAM(p_data, 0); 318911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT32_TO_BE_STREAM(p_data, 0); 319911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT8_TO_BE_STREAM(p_data, num_attrib); 320911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson for (int count = 0; count < num_attrib; count++) { 321911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT32_TO_BE_STREAM(p_data, attrib_ids[count]); 322911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson } 323911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_pkt->len = (p_data - p_start); 324911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson return AVRC_STS_NO_ERROR; 3256b84f291c4edce7e4102efd8d4052a63bcb4b9dcAnubhav Gupta} 3266b84f291c4edce7e4102efd8d4052a63bcb4b9dcAnubhav Gupta 3276b84f291c4edce7e4102efd8d4052a63bcb4b9dcAnubhav Gupta/******************************************************************************* 328ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 329ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function avrc_bld_play_item_cmd 330ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 331ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description This function builds the play item cmd 332ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 333ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns AVRC_STS_NO_ERROR, if the command is built successfully 334ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Otherwise, the error code. 335ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 336ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 337911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic tAVRC_STS avrc_bld_play_item_cmd(BT_HDR* p_pkt, uint8_t scope, 338911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t* uid, uint16_t uid_counter) { 339911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson AVRC_TRACE_API("avrc_bld_get_element_attr_cmd"); 340911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t* p_start = (uint8_t*)(p_pkt + 1) + p_pkt->offset; 341911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t* p_data = p_start + 2; /* pdu + rsvd */ 342911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* add fixed length 11 */ 343911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT16_TO_BE_STREAM(p_data, 0xb); 344911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* Add scope */ 345911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT8_TO_BE_STREAM(p_data, scope); 346911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* Add UID */ 347911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson ARRAY_TO_BE_STREAM(p_data, uid, AVRC_UID_SIZE); 348911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* Add UID Counter */ 349911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT16_TO_BE_STREAM(p_data, uid_counter); 350911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_pkt->len = (p_data - p_start); 351911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson return AVRC_STS_NO_ERROR; 352e7bd8905653ec2af14ae202f538ebc2646752ce0Sanket Agarwal} 353e7bd8905653ec2af14ae202f538ebc2646752ce0Sanket Agarwal 354e7bd8905653ec2af14ae202f538ebc2646752ce0Sanket Agarwal/******************************************************************************* 355ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 356ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function avrc_bld_get_play_status_cmd 357ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 358ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description This function builds the get play status command. 359ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 360ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns AVRC_STS_NO_ERROR, if the command is built successfully 361ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Otherwise, the error code. 362ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 363ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 364911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic tAVRC_STS avrc_bld_get_play_status_cmd(BT_HDR* p_pkt) { 365911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson AVRC_TRACE_API("avrc_bld_list_player_app_attr_cmd"); 366911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t* p_start = (uint8_t*)(p_pkt + 1) + p_pkt->offset; 367911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t* p_data = p_start + 2; /* pdu + rsvd */ 368911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* add fixed length 0 -*/ 369911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT16_TO_BE_STREAM(p_data, 0); 370911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_pkt->len = (p_data - p_start); 371911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson return AVRC_STS_NO_ERROR; 372247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji} 373e7bd8905653ec2af14ae202f538ebc2646752ce0Sanket Agarwal 374e7bd8905653ec2af14ae202f538ebc2646752ce0Sanket Agarwal/******************************************************************************* 375ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 376ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function avrc_bld_get_folder_items_cmd 377ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 378ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description This function builds the get folder items cmd. 379ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 380ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns AVRC_STS_NO_ERROR, if the command is built successfully 381ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Otherwise, the error code. 382ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 383ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 384911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic tAVRC_STS avrc_bld_get_folder_items_cmd(BT_HDR* p_pkt, 385911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson const tAVRC_GET_ITEMS_CMD* cmd) { 386911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson AVRC_TRACE_API( 387911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson "avrc_bld_get_folder_items_cmd scope %d, start_item %d, end_item %d", 388911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson cmd->scope, cmd->start_item, cmd->end_item); 389911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t* p_start = (uint8_t*)(p_pkt + 1) + p_pkt->offset; 390911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* This is where the PDU specific for AVRC starts 391911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson * AVRCP Spec 1.4 section 22.19 */ 392911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t* p_data = p_start + 1; /* pdu */ 393911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 394911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* To get the list of all media players we simply need to use the predefined 395911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson * PDU mentioned in above spec. */ 396911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* scope (1) + st item (4) + end item (4) + attr (1) */ 397911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT16_TO_BE_STREAM(p_data, 10); 398911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT8_TO_BE_STREAM(p_data, cmd->scope); /* scope (1bytes) */ 399911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT32_TO_BE_STREAM(p_data, cmd->start_item); /* start item (4bytes) */ 400911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT32_TO_BE_STREAM(p_data, cmd->end_item); /* end item (4bytes) */ 401911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT8_TO_BE_STREAM(p_data, 0); /* attribute count = 0 (1bytes) */ 402911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_pkt->len = (p_data - p_start); 403911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson return AVRC_STS_NO_ERROR; 404e7bd8905653ec2af14ae202f538ebc2646752ce0Sanket Agarwal} 405e7bd8905653ec2af14ae202f538ebc2646752ce0Sanket Agarwal 406e7bd8905653ec2af14ae202f538ebc2646752ce0Sanket Agarwal/******************************************************************************* 407ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 408ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function avrc_bld_change_folder_cmd 409ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 410ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description This function builds the change folder command 411ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 412ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns AVRC_STS_NO_ERROR, if the command is built successfully 413ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Otherwise, the error code. 414ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 415ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 416911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic tAVRC_STS avrc_bld_change_folder_cmd(BT_HDR* p_pkt, 417911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson const tAVRC_CHG_PATH_CMD* cmd) { 418911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson AVRC_TRACE_API("avrc_bld_change_folder_cmd"); 419911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t* p_start = (uint8_t*)(p_pkt + 1) + p_pkt->offset; 420911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* This is where the PDU specific for AVRC starts 421911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson * AVRCP Spec 1.4 section 22.19 */ 422911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t* p_data = p_start + 1; /* pdu */ 423911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 424911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* To change folder we need to provide the following: 425911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson * UID Counter (2) + Direction (1) + UID (8) = 11bytes 426911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson */ 427911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT16_TO_BE_STREAM(p_data, 11); 428911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT16_TO_BE_STREAM(p_data, cmd->uid_counter); 429911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT8_TO_BE_STREAM(p_data, cmd->direction); 430911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson ARRAY_TO_BE_STREAM(p_data, cmd->folder_uid, AVRC_UID_SIZE); 431911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_pkt->len = (p_data - p_start); 432911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson return AVRC_STS_NO_ERROR; 433e7bd8905653ec2af14ae202f538ebc2646752ce0Sanket Agarwal} 434e7bd8905653ec2af14ae202f538ebc2646752ce0Sanket Agarwal 435e7bd8905653ec2af14ae202f538ebc2646752ce0Sanket Agarwal/******************************************************************************* 436ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 437ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function avrc_bld_set_browsed_player_cmd 438ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 439ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description This function builds the set browsed player cmd. 440ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 441ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns AVRC_STS_NO_ERROR, if the command is built successfully 442ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Otherwise, the error code. 443ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 444ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 445911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic tAVRC_STS avrc_bld_set_browsed_player_cmd( 446911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson BT_HDR* p_pkt, const tAVRC_SET_BR_PLAYER_CMD* cmd) { 447911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson AVRC_TRACE_API("%s", __func__); 448911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t* p_start = (uint8_t*)(p_pkt + 1) + p_pkt->offset; 449911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* This is where the PDU specific for AVRC starts 450911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson * AVRCP Spec 1.4 section 22.19 */ 451911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t* p_data = p_start + 1; /* pdu */ 452911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 453911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* To change browsed player the following is the total length: 454911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson * Player ID (2) 455911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson */ 456911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT16_TO_BE_STREAM(p_data, 2); /* fixed length */ 457911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT16_TO_BE_STREAM(p_data, cmd->player_id); 458911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_pkt->len = (p_data - p_start); 459911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson return AVRC_STS_NO_ERROR; 460e7bd8905653ec2af14ae202f538ebc2646752ce0Sanket Agarwal} 46130c81fa85380a46613498aff26be8a82b6531859Sanket Agarwal 46230c81fa85380a46613498aff26be8a82b6531859Sanket Agarwal/******************************************************************************* 463ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 464ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function avrc_bld_set_addressed_player_cmd 465ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 466ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description This function builds the set addressed player cmd. 467ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 468ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns AVRC_STS_NO_ERROR, if the command is built successfully 469ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Otherwise, the error code. 470ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 471ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 47230c81fa85380a46613498aff26be8a82b6531859Sanket Agarwalstatic tAVRC_STS avrc_bld_set_addressed_player_cmd( 473911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson BT_HDR* p_pkt, const tAVRC_SET_ADDR_PLAYER_CMD* cmd) { 474911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson AVRC_TRACE_API("%s", __func__); 475911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* get the existing length, if any, and also the num attributes */ 476911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t* p_start = (uint8_t*)(p_pkt + 1) + p_pkt->offset; 477878c50b163fc22ae1bd9291ff08a9d32b04e6b42Bailey Forrest uint8_t* p_data = p_start + 2; /* pdu + rsvd */ 478911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 479911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* To change addressed player the following is the total length: 480911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson * Player ID (2) 481911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson */ 482911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT16_TO_BE_STREAM(p_data, 2); /* fixed length */ 483911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT16_TO_BE_STREAM(p_data, cmd->player_id); 484911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_pkt->len = (p_data - p_start); 485911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson return AVRC_STS_NO_ERROR; 48630c81fa85380a46613498aff26be8a82b6531859Sanket Agarwal} 487247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji 488247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji/******************************************************************************* 489ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 490ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function avrc_bld_init_cmd_buffer 491ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 492ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description This function initializes the command buffer based on PDU 493ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 494ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns NULL, if no GKI buffer or failure to build the message. 4959ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * Otherwise, the GKI buffer that contains the initialized 4969ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * message. 497ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 498ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 499911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonstatic BT_HDR* avrc_bld_init_cmd_buffer(tAVRC_COMMAND* p_cmd) { 500911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint16_t chnl = AVCT_DATA_CTRL; 501911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t opcode = avrc_opcode_from_pdu(p_cmd->pdu); 502911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson AVRC_TRACE_API("avrc_bld_init_cmd_buffer: pdu=%x, opcode=%x", p_cmd->pdu, 503911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson opcode); 504911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 505911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint16_t offset = 0; 506911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson switch (opcode) { 507e7bd8905653ec2af14ae202f538ebc2646752ce0Sanket Agarwal case AVRC_OP_BROWSE: 508911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson chnl = AVCT_DATA_BROWSE; 509911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson offset = AVCT_BROWSE_OFFSET; 510911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 511e7bd8905653ec2af14ae202f538ebc2646752ce0Sanket Agarwal 512247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji case AVRC_OP_PASS_THRU: 513911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson offset = AVRC_MSG_PASS_THRU_OFFSET; 514911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 515247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji 516247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji case AVRC_OP_VENDOR: 517911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson offset = AVRC_MSG_VENDOR_OFFSET; 518911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 519911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson } 520247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji 521911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* allocate and initialize the buffer */ 522911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson BT_HDR* p_pkt = (BT_HDR*)osi_malloc(AVRC_META_CMD_BUF_SIZE); 523911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson uint8_t *p_data, *p_start; 524717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov 525911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_pkt->layer_specific = chnl; 526911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_pkt->event = opcode; 527911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_pkt->offset = offset; 528911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_data = (uint8_t*)(p_pkt + 1) + p_pkt->offset; 529911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_start = p_data; 530717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov 531911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* pass thru - group navigation - has a two byte op_id, so dont do it here */ 532911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson if (opcode != AVRC_OP_PASS_THRU) *p_data++ = p_cmd->pdu; 533717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov 534911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson switch (opcode) { 535717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov case AVRC_OP_VENDOR: 536911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* reserved 0, packet_type 0 */ 537911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT8_TO_BE_STREAM(p_data, 0); 538911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* continue to the next "case to add length */ 539911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson /* add fixed lenth - 0 */ 540911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson UINT16_TO_BE_STREAM(p_data, 0); 541911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 542911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson } 543911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 544911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_pkt->len = (p_data - p_start); 545911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_cmd->cmd.opcode = opcode; 546911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 547911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson return p_pkt; 548247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji} 549247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji 550247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji/******************************************************************************* 551ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 552ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function AVRC_BldCommand 553ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 554ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description This function builds the given AVRCP command to the given 555ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * GKI buffer 556ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 557ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns AVRC_STS_NO_ERROR, if the command is built successfully 558ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Otherwise, the error code. 559ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 560ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 561911d1ae03efec2d54c3b1b605589d790d1745488Myles WatsontAVRC_STS AVRC_BldCommand(tAVRC_COMMAND* p_cmd, BT_HDR** pp_pkt) { 562911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson tAVRC_STS status = AVRC_STS_BAD_PARAM; 563911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson bool alloc = false; 564911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson AVRC_TRACE_API("AVRC_BldCommand: pdu=%x status=%x", p_cmd->cmd.pdu, 565911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_cmd->cmd.status); 566911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson if (!p_cmd || !pp_pkt) { 567911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson AVRC_TRACE_API( 568911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson "AVRC_BldCommand. Invalid parameters passed. p_cmd=%p, pp_pkt=%p", 569911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_cmd, pp_pkt); 570911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson return AVRC_STS_BAD_PARAM; 571911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson } 572911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 573911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson if (*pp_pkt == NULL) { 574911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson *pp_pkt = avrc_bld_init_cmd_buffer(p_cmd); 575911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson if (*pp_pkt == NULL) { 576911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson AVRC_TRACE_API("AVRC_BldCommand: Failed to initialize command buffer"); 577911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson return AVRC_STS_INTERNAL_ERR; 578247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji } 579911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson alloc = true; 580911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson } 581911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson status = AVRC_STS_NO_ERROR; 582911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson BT_HDR* p_pkt = *pp_pkt; 583911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 584911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson switch (p_cmd->pdu) { 585911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case AVRC_PDU_REQUEST_CONTINUATION_RSP: /* 0x40 */ 586911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson status = avrc_bld_next_cmd(&p_cmd->continu, p_pkt); 587911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 588911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 589911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case AVRC_PDU_ABORT_CONTINUATION_RSP: /* 0x41 */ 590911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson status = avrc_bld_next_cmd(&p_cmd->abort, p_pkt); 591911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 592247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji#if (AVRC_ADV_CTRL_INCLUDED == TRUE) 593911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case AVRC_PDU_SET_ABSOLUTE_VOLUME: /* 0x50 */ 594911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson status = avrc_bld_set_abs_volume_cmd(&p_cmd->volume, p_pkt); 595911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 596247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji#endif 597911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson case AVRC_PDU_REGISTER_NOTIFICATION: /* 0x31 */ 598a58d7fe1cd90d48cea8924a4f2dcaa91e65ff629AnubhavGupta#if (AVRC_ADV_CTRL_INCLUDED == TRUE) 599911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson status = avrc_bld_register_notifn(p_pkt, p_cmd->reg_notif.event_id, 600911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_cmd->reg_notif.param); 601a58d7fe1cd90d48cea8924a4f2dcaa91e65ff629AnubhavGupta#endif 602911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 6036b84f291c4edce7e4102efd8d4052a63bcb4b9dcAnubhav Gupta case AVRC_PDU_GET_CAPABILITIES: 604911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson status = 605911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson avrc_bld_get_capability_cmd(p_pkt, p_cmd->get_caps.capability_id); 606911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 6076b84f291c4edce7e4102efd8d4052a63bcb4b9dcAnubhav Gupta case AVRC_PDU_LIST_PLAYER_APP_ATTR: 608911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson status = avrc_bld_list_player_app_attr_cmd(p_pkt); 609911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 6106b84f291c4edce7e4102efd8d4052a63bcb4b9dcAnubhav Gupta case AVRC_PDU_LIST_PLAYER_APP_VALUES: 611911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson status = avrc_bld_list_player_app_values_cmd( 612911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_pkt, p_cmd->list_app_values.attr_id); 613911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 6146b84f291c4edce7e4102efd8d4052a63bcb4b9dcAnubhav Gupta case AVRC_PDU_GET_CUR_PLAYER_APP_VALUE: 615911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson status = avrc_bld_get_current_player_app_values_cmd( 616911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_pkt, p_cmd->get_cur_app_val.num_attr, p_cmd->get_cur_app_val.attrs); 617911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 6186b84f291c4edce7e4102efd8d4052a63bcb4b9dcAnubhav Gupta case AVRC_PDU_SET_PLAYER_APP_VALUE: 619911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson status = avrc_bld_set_current_player_app_values_cmd( 620911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_pkt, p_cmd->set_app_val.num_val, p_cmd->set_app_val.p_vals); 621911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 6226b84f291c4edce7e4102efd8d4052a63bcb4b9dcAnubhav Gupta case AVRC_PDU_GET_PLAYER_APP_ATTR_TEXT: 623911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson avrc_bld_get_player_app_setting_attr_text_cmd(p_pkt, 624911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson &p_cmd->get_app_attr_txt); 625911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 6266b84f291c4edce7e4102efd8d4052a63bcb4b9dcAnubhav Gupta case AVRC_PDU_GET_PLAYER_APP_VALUE_TEXT: 627911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson avrc_bld_get_player_app_setting_value_text_cmd(p_pkt, 628911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson &p_cmd->get_app_val_txt); 629911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 6306b84f291c4edce7e4102efd8d4052a63bcb4b9dcAnubhav Gupta case AVRC_PDU_GET_ELEMENT_ATTR: 631911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson status = avrc_bld_get_element_attr_cmd( 632911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_pkt, p_cmd->get_elem_attrs.num_attr, p_cmd->get_elem_attrs.attrs); 633911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 634e7bd8905653ec2af14ae202f538ebc2646752ce0Sanket Agarwal case AVRC_PDU_PLAY_ITEM: 635911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson status = avrc_bld_play_item_cmd(p_pkt, p_cmd->play_item.scope, 636911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_cmd->play_item.uid, 637911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson p_cmd->play_item.uid_counter); 638911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 6396b84f291c4edce7e4102efd8d4052a63bcb4b9dcAnubhav Gupta case AVRC_PDU_GET_PLAY_STATUS: 640911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson status = avrc_bld_get_play_status_cmd(p_pkt); 641911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 642e7bd8905653ec2af14ae202f538ebc2646752ce0Sanket Agarwal case AVRC_PDU_GET_FOLDER_ITEMS: 643911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson status = avrc_bld_get_folder_items_cmd(p_pkt, &(p_cmd->get_items)); 644911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 645e7bd8905653ec2af14ae202f538ebc2646752ce0Sanket Agarwal case AVRC_PDU_CHANGE_PATH: 646911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson status = avrc_bld_change_folder_cmd(p_pkt, &(p_cmd->chg_path)); 647911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 648e7bd8905653ec2af14ae202f538ebc2646752ce0Sanket Agarwal case AVRC_PDU_SET_BROWSED_PLAYER: 649911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson status = avrc_bld_set_browsed_player_cmd(p_pkt, &(p_cmd->br_player)); 650911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 65130c81fa85380a46613498aff26be8a82b6531859Sanket Agarwal case AVRC_PDU_SET_ADDRESSED_PLAYER: 652911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson status = avrc_bld_set_addressed_player_cmd(p_pkt, &(p_cmd->addr_player)); 653911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson break; 654911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson } 655911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson 656911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson if (alloc && (status != AVRC_STS_NO_ERROR)) { 657911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson osi_free(p_pkt); 658911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson *pp_pkt = NULL; 659911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson } 660911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson AVRC_TRACE_API("AVRC_BldCommand: returning %d", status); 661911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson return status; 662247c68fe6eee3660cbdcf4509195fe735ae25573Satya Calloji} 663