diff -r 16e4b9007960 -r f5508c13dfe0 bluetoothappprofiles/avrcp/avc/avcframe.h --- a/bluetoothappprofiles/avrcp/avc/avcframe.h Wed Oct 13 13:15:31 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,540 +0,0 @@ -// Copyright (c) 2004-2010 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 AVCFRAME_H -#define AVCFRAME_H - -/** -@file -@released -@publishedPartner -*/ - -#include -#include - -static const TInt KAVCFrameMaxLength = 0x200; -static const TInt KAVCFrameHeaderLength = 0x3; -static const TInt KAVCPassthroughFrameLength = 0x5; -static const TUint8 KAVCCommandTypeMask = 0x0f; -static const TUint8 KAVCResponseTypeMask = 0x0f; -static const TUint8 KAVCSubunitTypeMask = 0xf8; -static const TUint8 KAVCSubunitIDMask = 0x07; -static const TUint8 KAVCCommandMaxRangeLength = 0x7; - -static const TUint KAVCVendorUniquePassthroughHeader = 7; -static const TUint KAVCVendorIdBaseOffset = 5; -static const TUint KAVCVendorIdLength = 3; - -static const TInt KAVCMaxVendorDependentPayload = KAVCFrameMaxLength-KAVCFrameHeaderLength-KAVCVendorIdLength; - -namespace AVC - { - enum TFrameType - { - ECommand, - EResponse - }; - /** - As per section 7.3.1, AV/C Digital Interface Command Set General Specification v4.0 - As per section 7.3.2, AV/C Digital Interface Command Set General Specification v4.0 - */ - enum TCType - { - EControl = 0x0, - EStatus = 0x1, - ESpecificEnquiry = 0x2, - ENotify = 0x3, - EGeneralEnquiry = 0x4, - EReserved1 = 0x5, - EReserved2 = 0x6, - EReserved3 = 0x7, - ENotImplemented = 0x8, - EAccepted = 0x9, - ERejected = 0xa, - EInTransition = 0xb, - EImplemented = 0xc, - EStable = 0xc, // NB: EImplemented and EStable are the same! - EChanged = 0xd, - EReserved4 = 0xe, - EInterim = 0xf - }; - /** - As per sections 7.3.4.1 and 7.3.4.3, AV/C Digital Interface Command Set General Specification v4.0 - - Extended subunit types should be coded as 0xXYY in this enumeration where - X is the nth extension and YY is the type number. e.g. 0x101 would correspond - to example 3 in table 7.9 and 0x201 would correspond to example 4. - */ - enum TSubunitType - { - EMonitor = 0x00, - EAudio = 0x01, - EPrinter = 0x02, - EDisc = 0x03, - ETape = 0x04, - ETuner = 0x05, - ECA = 0x06, - ECamera = 0x07, - EPanel = 0x09, - EBulletinBoard = 0x0a, - ECameraStorage = 0x0b, - EVendorUnique = 0x1c, - ETypeExtended1 = 0x1e, - EUnit = 0x1f, - ETypeExtended2 = 0xff - }; - /** - As per sections 7.3.4.1 and 7.3.4.3, AV/C Digital Interface Command Set General Specification v4.0 - - Extended subunit IDs should be coded as 0xXYY in this enumeration where - X is the nth extension and YY is the ID number. e.g. 0x102 would correspond - to example 2 in table 7.10 and 0x201 would correspond to example 3. - */ - enum TSubunitID - { - EID0 = 0x00, - EID1 = 0x01, - EID2 = 0x02, - EID3 = 0x04, - EIDExtended1 = 0x05, - EIgnore = 0x07, - EIDExtended2 = 0xff - }; - /** - As per section 10.1.2, AV/C Digital Interface Command Set General Specification v4.0 - - AV/C unit source plug addresses - */ - enum TUnitInputPlug - { - ESerialIsochronousInput0 = 0x00, - ESerialIsochronousInput1 = 0x01, - ESerialIsochronousInput2 = 0x02, - ESerialIsochronousInput3 = 0x03, - ESerialIsochronousInput4 = 0x04, - ESerialIsochronousInput5 = 0x05, - ESerialIsochronousInput6 = 0x06, - ESerialIsochronousInput7 = 0x07, - ESerialIsochronousInput8 = 0x08, - ESerialIsochronousInput9 = 0x09, - ESerialIsochronousInput10 = 0x0a, - ESerialIsochronousInput11 = 0x0b, - ESerialIsochronousInput12 = 0x0c, - ESerialIsochronousInput13 = 0x0d, - ESerialIsochronousInput14 = 0x0e, - ESerialIsochronousInput15 = 0x0f, - ESerialIsochronousInput16 = 0x10, - ESerialIsochronousInput17 = 0x11, - ESerialIsochronousInput18 = 0x12, - ESerialIsochronousInput19 = 0x13, - ESerialIsochronousInput20 = 0x14, - ESerialIsochronousInput21 = 0x15, - ESerialIsochronousInput22 = 0x16, - ESerialIsochronousInput23 = 0x17, - ESerialIsochronousInput24 = 0x18, - ESerialIsochronousInput25 = 0x19, - ESerialIsochronousInput26 = 0x1a, - ESerialIsochronousInput27 = 0x1b, - ESerialIsochronousInput28 = 0x1c, - ESerialIsochronousInput29 = 0x1d, - ESerialIsochronousInput30 = 0x1e, - EAnySerialIsochronousInput = 0x7f, - EExternalInput0 = 0x80, - EExternalInput1 = 0x81, - EExternalInput2 = 0x82, - EExternalInput3 = 0x83, - EExternalInput4 = 0x84, - EExternalInput5 = 0x85, - EExternalInput6 = 0x86, - EExternalInput7 = 0x87, - EExternalInput8 = 0x88, - EExternalInput9 = 0x89, - EExternalInput10 = 0x8a, - EExternalInput11 = 0x8b, - EExternalInput12 = 0x8c, - EExternalInput13 = 0x8d, - EExternalInput14 = 0x8e, - EExternalInput15 = 0x8f, - EExternalInput16 = 0x90, - EExternalInput17 = 0x91, - EExternalInput18 = 0x92, - EExternalInput19 = 0x93, - EExternalInput20 = 0x94, - EExternalInput21 = 0x95, - EExternalInput22 = 0x96, - EExternalInput23 = 0x97, - EExternalInput24 = 0x98, - EExternalInput25 = 0x99, - EExternalInput26 = 0x9a, - EExternalInput27 = 0x9b, - EExternalInput28 = 0x9c, - EExternalInput29 = 0x9d, - EExternalInput30 = 0x9e, - ESerialAsynchronousInput0 = 0xa0, - ESerialAsynchronousInput1 = 0xa1, - ESerialAsynchronousInput2 = 0xa2, - ESerialAsynchronousInput3 = 0xa3, - ESerialAsynchronousInput4 = 0xa4, - ESerialAsynchronousInput5 = 0xa5, - ESerialAsynchronousInput6 = 0xa6, - ESerialAsynchronousInput7 = 0xa7, - ESerialAsynchronousInput8 = 0xa8, - ESerialAsynchronousInput9 = 0xa9, - ESerialAsynchronousInput10 = 0xaa, - ESerialAsynchronousInput11 = 0xab, - ESerialAsynchronousInput12 = 0xac, - ESerialAsynchronousInput13 = 0xad, - ESerialAsynchronousInput14 = 0xae, - ESerialAsynchronousInput15 = 0xaf, - ESerialAsynchronousInput16 = 0xb0, - ESerialAsynchronousInput17 = 0xb1, - ESerialAsynchronousInput18 = 0xb2, - ESerialAsynchronousInput19 = 0xb3, - ESerialAsynchronousInput20 = 0xb4, - ESerialAsynchronousInput21 = 0xb5, - ESerialAsynchronousInput22 = 0xb6, - ESerialAsynchronousInput23 = 0xb7, - ESerialAsynchronousInput24 = 0xb8, - ESerialAsynchronousInput25 = 0xb9, - ESerialAsynchronousInput26 = 0xba, - ESerialAsynchronousInput27 = 0xbb, - ESerialAsynchronousInput28 = 0xbc, - ESerialAsynchronousInput29 = 0xbd, - ESerialAsynchronousInput30 = 0xbe, - EAnySerialAsynchronousInput = 0xbf, - EInvalidInput = 0xfe, - EAnyExternalInput = 0xff - }; - /** - As per section 10.1.2, AV/C Digital Interface Command Set General Specification v4.0 - - AV/C unit destination plug addresses - */ - enum TUnitOutputPlug - { - ESerialIsochronousOutput0 = 0x00, - ESerialIsochronousOutput1 = 0x01, - ESerialIsochronousOutput2 = 0x02, - ESerialIsochronousOutput3 = 0x03, - ESerialIsochronousOutput4 = 0x04, - ESerialIsochronousOutput5 = 0x05, - ESerialIsochronousOutput6 = 0x06, - ESerialIsochronousOutput7 = 0x07, - ESerialIsochronousOutput8 = 0x08, - ESerialIsochronousOutput9 = 0x09, - ESerialIsochronousOutput10 = 0x0a, - ESerialIsochronousOutput11 = 0x0b, - ESerialIsochronousOutput12 = 0x0c, - ESerialIsochronousOutput13 = 0x0d, - ESerialIsochronousOutput14 = 0x0e, - ESerialIsochronousOutput15 = 0x0f, - ESerialIsochronousOutput16 = 0x10, - ESerialIsochronousOutput17 = 0x11, - ESerialIsochronousOutput18 = 0x12, - ESerialIsochronousOutput19 = 0x13, - ESerialIsochronousOutput20 = 0x14, - ESerialIsochronousOutput21 = 0x15, - ESerialIsochronousOutput22 = 0x16, - ESerialIsochronousOutput23 = 0x17, - ESerialIsochronousOutput24 = 0x18, - ESerialIsochronousOutput25 = 0x19, - ESerialIsochronousOutput26 = 0x1a, - ESerialIsochronousOutput27 = 0x1b, - ESerialIsochronousOutput28 = 0x1c, - ESerialIsochronousOutput29 = 0x1d, - ESerialIsochronousOutput30 = 0x1e, - EAnySerialIsochronousOutput = 0x7f, - EExternalOutput0 = 0x80, - EExternalOutput1 = 0x81, - EExternalOutput2 = 0x82, - EExternalOutput3 = 0x83, - EExternalOutput4 = 0x84, - EExternalOutput5 = 0x85, - EExternalOutput6 = 0x86, - EExternalOutput7 = 0x87, - EExternalOutput8 = 0x88, - EExternalOutput9 = 0x89, - EExternalOutput10 = 0x8a, - EExternalOutput11 = 0x8b, - EExternalOutput12 = 0x8c, - EExternalOutput13 = 0x8d, - EExternalOutput14 = 0x8e, - EExternalOutput15 = 0x8f, - EExternalOutput16 = 0x90, - EExternalOutput17 = 0x91, - EExternalOutput18 = 0x92, - EExternalOutput19 = 0x93, - EExternalOutput20 = 0x94, - EExternalOutput21 = 0x95, - EExternalOutput22 = 0x96, - EExternalOutput23 = 0x97, - EExternalOutput24 = 0x98, - EExternalOutput25 = 0x99, - EExternalOutput26 = 0x9a, - EExternalOutput27 = 0x9b, - EExternalOutput28 = 0x9c, - EExternalOutput29 = 0x9d, - EExternalOutput30 = 0x9e, - ESerialAsynchronousOutput0 = 0xa0, - ESerialAsynchronousOutput1 = 0xa1, - ESerialAsynchronousOutput2 = 0xa2, - ESerialAsynchronousOutput3 = 0xa3, - ESerialAsynchronousOutput4 = 0xa4, - ESerialAsynchronousOutput5 = 0xa5, - ESerialAsynchronousOutput6 = 0xa6, - ESerialAsynchronousOutput7 = 0xa7, - ESerialAsynchronousOutput8 = 0xa8, - ESerialAsynchronousOutput9 = 0xa9, - ESerialAsynchronousOutput10 = 0xaa, - ESerialAsynchronousOutput11 = 0xab, - ESerialAsynchronousOutput12 = 0xac, - ESerialAsynchronousOutput13 = 0xad, - ESerialAsynchronousOutput14 = 0xae, - ESerialAsynchronousOutput15 = 0xaf, - ESerialAsynchronousOutput16 = 0xb0, - ESerialAsynchronousOutput17 = 0xb1, - ESerialAsynchronousOutput18 = 0xb2, - ESerialAsynchronousOutput19 = 0xb3, - ESerialAsynchronousOutput20 = 0xb4, - ESerialAsynchronousOutput21 = 0xb5, - ESerialAsynchronousOutput22 = 0xb6, - ESerialAsynchronousOutput23 = 0xb7, - ESerialAsynchronousOutput24 = 0xb8, - ESerialAsynchronousOutput25 = 0xb9, - ESerialAsynchronousOutput26 = 0xba, - ESerialAsynchronousOutput27 = 0xbb, - ESerialAsynchronousOutput28 = 0xbc, - ESerialAsynchronousOutput29 = 0xbd, - ESerialAsynchronousOutput30 = 0xbe, - EAnySerialAsynchronousOutput= 0xbf, - EMultipleOutputs = 0xfd, - EInvalidOutput = 0xfe, - EAnyExternalOutput = 0xff - }; - /** - As per section 10.2.3, AV/C Digital Interface Command Set General Specification v4.0 - - AV/C subunit source plug addresses - subunit does not have to implement any subunit plug if it does not send or receive any signals - */ - enum TSubunitSourcePlug - { - ESource0 = 0x00, - ESource1 = 0x01, - ESource2 = 0x02, - ESource3 = 0x03, - ESource4 = 0x04, - ESource5 = 0x05, - ESource6 = 0x06, - ESource7 = 0x07, - ESource8 = 0x08, - ESource9 = 0x09, - ESource10 = 0x0a, - ESource11 = 0x0b, - ESource12 = 0x0c, - ESource13 = 0x0d, - ESource14 = 0x0e, - ESource15 = 0x0f, - ESource16 = 0x10, - ESource17 = 0x11, - ESource18 = 0x12, - ESource19 = 0x13, - ESource20 = 0x14, - ESource21 = 0x15, - ESource22 = 0x16, - ESource23 = 0x17, - ESource24 = 0x18, - ESource25 = 0x19, - ESource26 = 0x1a, - ESource27 = 0x1b, - ESource28 = 0x1c, - ESource29 = 0x1d, - ESource30 = 0x1e, - EInvalidSource = 0xfe, - EAnySource = 0xff - }; - /** - As per section 10.2.3, AV/C Digital Interface Command Set General Specification v4.0 - - AV/C subunit destination plug - subunit does not have to implement any subunit plug if it does not send or receive any signals - */ - enum TSubunitDestinationPlug - { - EDestination0 = 0x00, - EDestination1 = 0x01, - EDestination2 = 0x02, - EDestination3 = 0x03, - EDestination4 = 0x04, - EDestination5 = 0x05, - EDestination6 = 0x06, - EDestination7 = 0x07, - EDestination8 = 0x08, - EDestination9 = 0x09, - EDestination10 = 0x0a, - EDestination11 = 0x0b, - EDestination12 = 0x0c, - EDestination13 = 0x0d, - EDestination14 = 0x0e, - EDestination15 = 0x0f, - EDestination16 = 0x10, - EDestination17 = 0x11, - EDestination18 = 0x12, - EDestination19 = 0x13, - EDestination20 = 0x14, - EDestination21 = 0x15, - EDestination22 = 0x16, - EDestination23 = 0x17, - EDestination24 = 0x18, - EDestination25 = 0x19, - EDestination26 = 0x1a, - EDestination27 = 0x1b, - EDestination28 = 0x1c, - EDestination29 = 0x1d, - EDestination30 = 0x1e, - EMultipleDestinations = 0xfe, - EInvalidDestination = 0xfe, - EAnyDestination = 0xff - }; - /** - As per sections 11 and 12, AV/C Digital Interface Command Set General Specification v4.0 - Other commands are defined by the various subunit specifications - */ - enum TOpcode - { - EPower = 0xb2, - EUnitInfo = 0x30, - ESubunitInfo = 0x31, - EReserve = 0x01, - EVersion = 0xb0, - EVendorDependent = 0x00, - EPlugInfo = 0x02, - EChannelUsage = 0x12, - EConnect = 0x24, - EConnectAV = 0x20, - EConnections = 0x22, - EDigitalInput = 0x11, - EDigitalOutput = 0x10, - EDisconnect = 0x25, - EDisconnectAV = 0x21, - EInputPlugSignalFormat = 0x19, - EOutputPlugSignalFormat = 0x18, - EPassThrough = 0x7c - }; - - enum TPacketType - { - EASingle = 0x00, - EStart = 0x01, - EContinue = 0x10, - EEnd = 0x11, - }; - - typedef TUint TAVCVendorId; - } - -/** -AVC frame creation and utilities. -@released -@publishedPartner -*/ -NONSHARABLE_CLASS(CAVCFrame) : public CBase - { -public: - - // Construction / destruction - // TBH this acts as a factory now and could (eventually!) return a derived class - // the caller could check by calling Opcode - // at the moment we are going to use the derived classes just for outbound responses - IMPORT_C static CAVCFrame* NewL(AVC::TFrameType aFrameType, - AVC::TCType aType, - AVC::TSubunitType aSubunitType, - AVC::TSubunitID aSubunitID); - - IMPORT_C static CAVCFrame* NewL(const TDesC8& aBuffer, AVC::TFrameType aType); - - IMPORT_C virtual ~CAVCFrame(); - - // Utility - IMPORT_C AVC::TFrameType FrameType() const; - IMPORT_C static AVC::TFrameType FrameType(const TDesC8& aFrame); - IMPORT_C void SetFrameType(AVC::TFrameType aFrameType); - - IMPORT_C AVC::TCType Type() const; - IMPORT_C void SetType(AVC::TCType aType); - - IMPORT_C AVC::TSubunitType SubunitType() const; - IMPORT_C AVC::TSubunitID SubunitID() const; - IMPORT_C TUint8 Opcode() const; - IMPORT_C TInt OperationId(TUint8& aOpId) const; - IMPORT_C TInt ButtonAct(AVCPanel::TButtonAction& aButtonAction) const; - - IMPORT_C const TUint8& operator[](TInt aIndex) const; - IMPORT_C const TDesC8& Data() const; - - IMPORT_C void Append(const TDesC8& aDes); - IMPORT_C void Append(TChar aChar); - IMPORT_C TInt DataLength() const; - - IMPORT_C static AVC::TOpcode OpcodeL(const TDesC8& aBuffer); - -private: - CAVCFrame(AVC::TFrameType aFrameType); - - void ConstructL(AVC::TCType aType, - AVC::TSubunitType aSubunitType, - AVC::TSubunitID aSubunitID); - void ConstructL(const TDesC8& aBuffer); - static void FindExtensionL(const TDesC8& aBuffer, TInt& aSubunitTypeExtensionBytes, TInt& aSubunitIDExtensionBytes); - -private: - RBuf8 iBuffer; - - AVC::TFrameType iFrameType; - TInt iSubunitTypeExtensionBytes; - TInt iSubunitIDExtensionBytes; - }; - - -// Factory pattern stuff - these are useful to do donkey work, -// but have existing clients treat them as the base class - -class CAVCVendorDependentResponse // codescanner::missingcclass - { -public: - IMPORT_C static CAVCFrame* NewL(TUint aVendorId); - }; - -class CAVCPassthroughCommand // codescanner::missingcclass - { -public: - }; - -// likely not have newl because dont allocate on parse pattern -class CAVCVendorDependentCommand // codescanner::missingcclass - { -public: - IMPORT_C static TPtrC8 GetPayloadAndVID(const CAVCFrame& aFrame, TUint& aVID); - }; - -// likely not have newl because dont allocate on parse pattern -class CAVCVendorUniquePassthroughCommand // codescanner::missingcclass - { -public: - IMPORT_C static TPtrC8 GetPayloadAndVID(const CAVCFrame& aFrame, TUint& aVID); - }; - -#endif // AVCFRAME_H