diff -r 16e4b9007960 -r f5508c13dfe0 bluetoothappprofiles/avrcp/remconbeareravrcp/inc/controlcommand.h --- a/bluetoothappprofiles/avrcp/remconbeareravrcp/inc/controlcommand.h Wed Oct 13 13:15:31 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,276 +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: -// - -#ifndef CONTROLCOMMAND_H -#define CONTROLCOMMAND_H - -/** -@file -@internalComponent -@released -*/ - -#include -#include -#include -#include -#include - -#include - -#include "avrcpcommand.h" -#include "avrcptimer.h" -#include "avrcpfragmenter.h" - -const TInt KRcpResponseTimeOut = 30000000; // Allow remote 300ms to respond -const TInt KRcpHoldThreshold = 300000; // After 300ms we may assume an unreleased button - // action is a press and hold -const TInt KRcpIncomingButtonReleaseTimeout = 1700000; // 1.7s (ie 2s - 300ms), if a button press - // has not been released after 2s we assume the release - // has been lost (and generate one internally) -const TInt KRcpOutgoingButtonReleaseTimeout = 1000000; // The remote expects a press refresh within - // 2s, it's fine to send one before that. - -const TUint KRemConStatusApiDefaultPageDataLength = 4; -const TUint KRemConMetadataHeaderLength = 4; - -// Absolute lengths of Vendor Dependent PDU requests -const TUint8 KLengthGetCapabilitiesPdu = 1; // PDU 0x10 -const TUint8 KLengthListPASAttributesPdu = 0; // PDU 0x11 -const TUint8 KLengthListPASValuesPdu = 1; // PDU 0x12 -const TUint8 KLengthInformBatteryStatusOfCTPdu = 1; // PDU 0x18 -const TUint8 KLengthGetPlayStatusPdu = 0; // PDU 0x30 -const TUint8 KLengthRegisterNotification = 5; // PDU 0x31 -const TUint8 KLengthSetAddressedPlayerPdu = 2; // PDU 0x60 - -// Minimum lengths of Vendor Dependent PDU requests -const TUint8 KMinLengthGetCurrentPASValuePdu = 2; // PDU 0x13 -const TUint8 KMinLengthSetPASValuePdu = 1; // PDU 0x14 -const TUint8 KMinLengthGetPASAttributeTextPdu = 2; // PDU 0x15 -const TUint8 KMinLengthGetPASValueTextPdu = 3; // PDU 0x16 -const TUint8 KMinLengthGetElementAttributesPdu = 9; // PDU 0x20 -const TUint8 KMinLengthAddToNowPlayingPdu = 11; // PDU 0x90 - -// Other lengths -const TUint8 KLengthPlaybackPosChangedParam = 4; // Parameter length for this event (section 5.4.2) -const TUint8 KVendorDependentNumberAttributes = 0; // Index to Number of attributes (the first byte) -const TUint8 KVendorDependentNumberAttribsPdu16 = 1; // Index to Number of attributes for PDU 0x16 (the second byte) -const TUint8 KVendorDependentEventId = 0; // Index to Event Id (the first byte) - -enum TMetadataTransferErrorCodes - { - EInvalidCommand = 0x0, - EInvalidParameter = 0x1, - EParameterNotFound = 0x2, - EInternalError = 0x3, - }; - -enum TMetaDataTransferPacketType - { - EUnfragmented = 0x0, - EFragmentStart = 0x1, - EFragmentContinue = 0x2, - EFragmentEnd = 0x3, - }; - -// Format of the first 3 bytes of a Vendor Dependent Request -// See example packets in AVRCP Specification Appendix I (page 84) -const TUint8 KVendorDependentRequestPDUId = 0; -const TUint8 KVendorDependentRequestReservedByte = 1; -const TUint8 KVendorDependentRequestParamLenMSB = 2; -const TUint8 KVendorDependentRequestParamLenLSB = 3; - -//See example packets in AVRCP Specification Appendix D (Volume Change Notification) -const TUint8 KVendorDependentNotifyEventIdOffset = 4; - -// Format of the first 2 bytes of a Pass Through Request -// See example packets in AVRCP Specification Appendix I (page 89) -const TUint8 KPassThroughRequestOperationIdMSB = 0; -const TUint8 KPassThroughRequestOperationIdLSB = 1; - -const TInt KSetAddressedPlayerPlayerIdOffset = 0; - -const TInt KCapabilityIdOffset = 0; - -const TInt KNumberEventsNotInPlayerInfoApi = 5; - -typedef TUint8 TMetadataTransferPDUID; -typedef TUint8 TMetadataTransferNotifyEventID; - -class CRcpRemoteDevice; -class CAVRCPFragmenter; -class CRcpIncomingCommandHandler; -class MRemConBearerObserver; -class CAvrcpPlayerInfoManager; -class CAvrcpPlayerInfoManager; -NONSHARABLE_CLASS(CControlCommand) : public CAvrcpCommand - { -public: - static CControlCommand* NewL(TUid aInterfaceUid, - TUint aCommand, - TUint aRemConId, - SymbianAvctp::TTransactionLabel aTransactionLabel, - RBuf8& aCommandData, - TBool aIsClick, - const TBTDevAddr& aAddr, - TBool aKnownToBearer); - - static CControlCommand* NewL(CAVCFrame* aFrame, - TUint aRemConId, - SymbianAvctp::TTransactionLabel aTransLabel, - const TBTDevAddr& aAddr, - const TRemConClientId& aClientId, - CAvrcpPlayerInfoManager* aPlayerInfoManager); - - SymbianAvctp::TMessageType MessageType() const; - const TDesC8& Data() const; - - // Called from bearer - const TRemConClientId& ClientId() const; - - // Called from handlers - TInt ParseIncomingCommandL(MRemConBearerObserver& aObserver, CAVRCPFragmenter& aFragmenter); - void ProcessOutgoingCommandL(MRemConBearerObserver& aObserver); - TInt ParseIncomingResponse(MRemConBearerObserver& aObserver, const CAVCFrame& aFrame); - TInt ProcessOutgoingResponse(MRemConBearerObserver& aObserver, RBuf8& aCommandData, CAVRCPFragmenter& aFragmenter); - void SetResponseType(TInt aErr); - - TDeltaTimerEntry* TimerEntry(); - TAvrcpTimerExpiryInfo* TimerExpiryInfo(); - void CancelTimer(CDeltaTimer& aTimer); - - const CAVCFrame& Frame() const; - AVCPanel::TButtonAction ButtonAct() const; - TBool Click() const; - void SetClick(TBool aIsClick); - void ReSetCoreButtonActionL(TRemConCoreApiButtonAction aButtonAct, TBool aCommand); - - void SetCoreButtonAction(TRemConCoreApiButtonAction aButtonAct, TBool aCommand); - TInt InsertCoreResult(TInt aResult); - TBool IsAvrcpPassthrough() const; - TBool IsPassthrough() const; - TInt SetSetAbsoluteVolumeResult(const CAVCFrame& aFrame); - TInt SetNotifyVolumeChangeResult(const CAVCFrame& aFrame); - TBool PlayerSpecificNotify() const; - TBool NormalCommand(); - - CControlCommand* InterimResponseL(); - -private: - CControlCommand(TUid aInterfaceUid, - TUint aCommand, - TUint aRemConId, - SymbianAvctp::TTransactionLabel aTransactionLabel, - RBuf8& aCommandData, - TBool aIsClick, - const TBTDevAddr& aAddr, - TBool aKnownToBearer); - - CControlCommand(CAVCFrame* aFrame, - TUint aRemConId, - SymbianAvctp::TTransactionLabel aTransLabel, - const TBTDevAddr& aAddr, - const TRemConClientId& aClientId, - CAvrcpPlayerInfoManager* aPlayerInfoManager); - - void ConstructL(); - ~CControlCommand(); - - TInt ParseIncomingKnownOpcodeL(MRemConBearerObserver& aObserver); - TInt ParseIncomingVendorCommandL(MRemConBearerObserver& aObserver, CAVRCPFragmenter& aFragmenter); - - void ParseIncomingUnknownResponse(MRemConBearerObserver& aObserver, const CAVCFrame& aFrame); - - TInt ParseInformBatteryStatusOfCT( TPtrC8& mtPayload); - - TInt ParseContinuingResponse(TPtrC8& mtPayload, - CAVRCPFragmenter& aFragmenter); - - TInt ParseAbortContinuingResponse(TPtrC8& mtPayload, - CAVRCPFragmenter& aFragmenter); - - TInt ParseSetPlayerApplicationSettingValue(TPtrC8& mtPayload); - TInt ParseGetCapabilities(TPtrC8& aMtPayload); - TInt ParseGetPlayStatus(TPtrC8& aMtPayload); - TInt ParseListPlayerApplicationSettingAttributes(TPtrC8& aMtPayload); - TInt ParseListPlayerApplicationSettingValues(TPtrC8& aMtPayload); - TInt ParseGetCurrentPlayerApplicationSettingValue(TPtrC8& aMtPayload); - TInt ParseGetPlayerApplicationSettingAttributeText(TPtrC8& aMtPayload); - TInt ParseGetPlayerApplicationSettingValueText(TPtrC8& aMtPayload); - TInt ParseGetElementAttributes(TPtrC8& aMtPayload); - TInt ParseSetAddressedPlayer(TPtrC8& aMtPayload); - TInt ParsePlayItem(TPtrC8& aMtPayload); - TInt ParseAddToNowPlaying(TPtrC8& aMtPayload); - TInt ParseUidsChangedNotification(TPtrC8& aMtPayload); - TInt ParseInternalUidsChangedNotification(TPtrC8& aMtPayload); - TInt ParseVolumeChangedNotification(TPtrC8& aMtPayload); - TInt ParseSetAbsoluteVolume(TPtrC8& aMtPayload); - void DoParseSetAbsoluteVolumeL(const TPtrC8& aMtPayload, TDes8& aPayload); - - TInt ParseMetadataTransferVendorCommand(CAVRCPFragmenter& aFragmenter); - TInt ParseVendorUniquePassthroughCommand(MRemConBearerObserver& aObserver); - TInt ParseMetadataTransferPassthroughCommand(); - TInt GenerateMetadataResponsePayload(MRemConBearerObserver& aObserver, RBuf8& aFramePayload, const RBuf8& aResponseData); - TInt GenerateMetadataGetCapabilitiesResponsePayloadL(MRemConBearerObserver& aObserver, RBuf8& aFramePayload, const RBuf8& aResponseData); - void GenerateSetAbsoluteVolumeResponsePayloadL(RBuf8& aFramePayload, const TDesC8& responseData); - void DoGenerateNotifyVolumeChangeResponsePayloadL(RBuf8& aFramePayload, const TDesC8& responseData); - TInt GenerateNotificationResponsePayload(RBuf8& aFramePayload, const TDesC8& aResponseData); - void GenerateMetadataRejectPayloadL(TInt aError); - void SetVendorInfoL(TBool aIsPassthrough); - - void DoProcessOutgoingResponseL(MRemConBearerObserver& aObserver, RBuf8& aCommandData, - CAVRCPFragmenter& aFragmenter); - - TUint8 GetPDUIdFromIPCOperationId(TInt aOperationId); - TUint8 GetEventIdFromIPCOperationId(TInt aOperationId); - - TInt RespondToInforms(TMetadataTransferPDUID aMetadataPDUID); - TInt AppendIncomingPayload(const TPtrC8& aPayload); - - static TInt AvrcpToRemConOperation(TUint aAvrcpOp, TUint& aRemConOp, TUid& aRemConIf); - static TInt RemConToAvrcpOperation(TUint aRemConOp, AVCPanel::TOperationId& aAvrcpOp); - - TUint16 Get16(const TPtrC8& aPtr); - - static TInt DummyCallback(TAny*); - - void DoSetAbsoluteVolumeResultL(const CAVCFrame& aFrame); - void DoSetNotifyVolumeChangeResultL(const CAVCFrame& aFrame); - -private: - TBool iIsClick; - - TDeltaTimerEntry* iTimerEntry; - TAvrcpTimerExpiryInfo* iTimerExpiryInfo; - - CAVCFrame* iFrame; - AVC::TAVCVendorId iVendorId; - TPtrC8 iVendorPayloadData; // ptr to the vendor data in iFrame; - - TRemConClientId iClientId; - }; - -class MetadataTransferParser - { -public: - static AVC::TAVCVendorId GetVID(const CAVCFrame& aFrame); // could be elsewhere really! - static TMetadataTransferPDUID GetPDUID(const TPtrC8& aData); - static TUint16 GetParamLength(const TPtrC8& aData); - static TUint16 GetPassThroughOperationId(const TPtrC8& aData); - static TMetadataTransferPDUID GetNotifyEventID(const TPtrC8& aData); - }; - - -#endif // CONTROLCOMMAND_H