diff -r 16e4b9007960 -r f5508c13dfe0 bluetoothappprofiles/avrcp/remconbeareravrcp/src/browsecommand.cpp --- a/bluetoothappprofiles/avrcp/remconbeareravrcp/src/browsecommand.cpp Wed Oct 13 13:15:31 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,285 +0,0 @@ -// Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). -// All rights reserved. -// This component and the accompanying materials are made available -// under the terms of "Eclipse Public License v1.0" -// which accompanies this distribution, and is available -// at the URL "http://www.eclipse.org/legal/epl-v10.html". -// -// Initial Contributors: -// Nokia Corporation - initial contribution. -// -// Contributors: -// -// Description: -// avrcpcommands.cpp -// - - - -/** - @file - @internalComponent - @released -*/ - -#include -#include -#include -#include -#include - -#include "browsecommand.h" -#include "avrcpinternalinterface.h" -#include "avrcplog.h" -#include "avrcputils.h" -#include "browsingframe.h" -#include "mediabrowse.h" -#include "nowplaying.h" - - -//--------------------------------------------------------------------- -// Incoming command construction -//--------------------------------------------------------------------- - -/** Factory function. - -@param aFrame The frame this command is to represent. -@param aRemConId The RemCon transaction label. -@param aTransLabel The AVCTP transaction label. -@param aAddr The bluetooth address to send this command to. -@return A fully constructed CBrowseCommand. -@leave System wide error codes. -*/ -CBrowseCommand* CBrowseCommand::NewL(const TDesC8& aMessageInformation, - TUint aRemConId, - SymbianAvctp::TTransactionLabel aTransLabel, - const TBTDevAddr& aAddr, - CAvrcpPlayerInfoManager* aPlayerInfoManager) - { - LOG_STATIC_FUNC - CBrowseCommand* command = new(ELeave)CBrowseCommand(aRemConId, aTransLabel, aAddr, aPlayerInfoManager); - CleanupStack::PushL(command); - command->ConstructL(aMessageInformation); - CleanupStack::Pop(command); - return command; - } - -/** Constructor. - -@param aFrame The AV/C frame this command is to represent. -@param aRemConId The RemCon transaction label. -@param aTransLabel The AVCTP transaction label. -@param aAddr The bluetooth address to send this command to. -@return A partially constructed CBrowseCommand. -@leave System wide error codes. -*/ -CBrowseCommand::CBrowseCommand(TUint aRemConId, - SymbianAvctp::TTransactionLabel aTransLabel, - const TBTDevAddr& aAddr, - CAvrcpPlayerInfoManager* aPlayerInfoManager) - : CAvrcpCommand(aRemConId, aTransLabel, aAddr) - { - LOG_FUNC - iPlayerInfoManager = aPlayerInfoManager; - } - -/** Destructor. -*/ -CBrowseCommand::~CBrowseCommand() - { - LOG_FUNC - __ASSERT_DEBUG(iUsers == 0, AvrcpUtils::Panic(EAvrcpCommandStillInUse)); - iFrame.Close(); - iCommandData.Close(); - } - -/** Second phase construction. -*/ -void CBrowseCommand::ConstructL(const TDesC8& aMessageInformation) - { - iFrame.CreateL(aMessageInformation); - } - -//------------------------------------------------------------------------------------ -// Called by router -//------------------------------------------------------------------------------------ - -SymbianAvctp::TMessageType CBrowseCommand::MessageType() const - { - return SymbianAvctp::EResponse; - } - -//------------------------------------------------------------------------------------ -// Called by handlers -//------------------------------------------------------------------------------------ - -/** Fills in command info from iFrame. - -This must be called by the command handler before processing this -command. - -This functions sets iInterfaceUid, iOperationId and iCommandData -to the correct values according to iFrame. The format of iCommandData -is defined by RemCon and is dependent on iInterfaceUid and iOperationId. - -@return KErrNone If the frame has been parsed successfully. -@return KErrNotSupported This frame represents a command for which a - RemCon converter or client side interface - cannot be found. -@return KErrAvrcpInvalidCType The CType specified in this frame is invalid. -@return KErrCorrupt If the frame is corrupted(e.g invalid Operation Id). -@return System wide error code. -*/ -TInt CBrowseCommand::ProcessIncomingCommandL(TInt aMaxResponse) - { - LOG_FUNC - TInt result = KErrNotSupported; - iMaxResponse = aMaxResponse-5; - - // This command has already been verified as containing at least a header - // and an accurate length field - switch(AvrcpBrowsing::BrowsingFrame::PduId(iFrame)) // PDU ID - { - case AvrcpBrowsing::ESetBrowsedPlayer: - { - result = HandleSetBrowsedPlayer(); - break; - } - case AvrcpBrowsing::EGetFolderItems: - { - result = HandleGetFolderItems(); - break; - } - case AvrcpBrowsing::EChangePath: - { - result = HandleChangePath(); - break; - } - case AvrcpBrowsing::EGetItemAttributes: - { - result = HandleGetItemAttributes(); - break; - } - case AvrcpBrowsing::ESearch: - { - result = HandleSearch(); - break; - } - case AvrcpBrowsing::EGeneralReject: - // We only support the target role for browsing, so we should - // never receive a General Reject - // fallthrough - default: - { - result = HandleUnknownPdu(); - } - }; - return result; - } - - -/** Processes an outgoing response. - -This should only be called for vendor dependent commands as -we respond to passthrough commands internally. - -@param aFrame The command data for the response. -*/ -void CBrowseCommand::ProcessOutgoingResponse(RBuf8& aCommandData) - { - __ASSERT_DEBUG(( (iInterfaceUid == TUid::Uid(KRemConMediaBrowseApiUid)) - || (iInterfaceUid == TUid::Uid(KRemConNowPlayingApiUid)) - || (iInterfaceUid == TUid::Uid(KUidAvrcpInternalInterface))), - AvrcpUtils::Panic(EAvrcpResponseToUnknownCommand)); - - iFrame.Close(); - iFrame.Assign(aCommandData); - TInt length = aCommandData.Length() - 3; - iFrame[1] = length >> 8; - iFrame[2] = length; - aCommandData.Assign(NULL); - } - -/** Set the response type in the AV/C frame. - -@param aErr The result of processing the operation. KErrNone if - successful. KErrNotsupported if this operation is not - implemented, eg because no converter was found. -*/ -void CBrowseCommand::SetResult(TInt aErr) - { - LOG_FUNC - switch(aErr) - { - case KErrNone: - break; - case KErrCorrupt: - case EAvrcpResponseToUnknownCommand: - case KErrAvrcpAirInvalidCommand: - case KErrAvrcpAirInvalidParameter: - case KErrAvrcpAirParameterNotFound: - case KErrAvrcpAirInternalError: - case KErrAvrcpAirSuccess: - case KErrAvrcpAirUidChanged: - case KErrAvrcpAirReserved: - case KErrAvrcpAirInvalidDirection: - case KErrAvrcpAirNotADirectory: - case KErrAvrcpAirDoesNotExist: - case KErrAvrcpAirInvalidScope: - case KErrAvrcpAirRangeOutOfBounds: - case KErrAvrcpAirUidIsADirectory: - case KErrAvrcpAirMediaInUse: - case KErrAvrcpAirNowPlayingListFull: - case KErrAvrcpAirSearchNotSupported: - case KErrAvrcpAirSearchInProgress: - case KErrAvrcpAirInvalidPlayerId: - case KErrAvrcpAirPlayerNotBrowesable: - case KErrAvrcpAirPlayerNotAddressed: - case KErrAvrcpAirNoValidSearchResults: - case KErrAvrcpAirNoAvailablePlayers: - case KErrAvrcpAirAddressedPlayerChanged: - case KErrAvrcpInvalidScope: - { - // If this fails we can't send the error response - just give up - TRAPD(err, GenerateRejectPayloadL(aErr)); - err = err; // Avoid warning about not using it. - break; - } - } - } - -/** Gets this command's frame. -@return the browse frame for this command -*/ -const TDesC8& CBrowseCommand::Data() const - { - LOG_FUNC - return iFrame; - } - -const TDesC8& CBrowseCommand::CommandData() const - { - LOG_FUNC - return iCommandData; - } - -void CBrowseCommand::GenerateRejectPayloadL(TInt aErr) - { - LOG_FUNC; - - TUint8 pduId = AvrcpBrowsing::BrowsingFrame::PduId(iFrame); - RRemConMediaErrorResponse errResponse; - errResponse.iPduId = pduId; - errResponse.iStatus = RAvrcpIPC::SymbianErrToStatus(aErr); - - RBuf8 frame; - frame.CreateL(KBrowseResponseBaseLength); - CleanupClosePushL(frame); - errResponse.WriteL(frame); - CleanupStack::Pop(&frame); - - iFrame.Close(); - iFrame.Assign(frame); - } - -