diff -r 6465d5bb863a -r 13e71d907dc3 profilesservices/RingingTone3DPlugin/inc/C3DAudioXMLParser.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesservices/RingingTone3DPlugin/inc/C3DAudioXMLParser.h Thu Nov 04 13:38:47 2010 +0800 @@ -0,0 +1,512 @@ +/* +* Copyright (c) 2005 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: XML-Parser used to parse motion patterns. +* +*/ + + +#ifndef C3DAUDIOXMLPARSER_H +#define C3DAUDIOXMLPARSER_H + +// INCLUDES +#include +#include "C3DAudioPattern.h" // C3DAudioPatter, T3DScriptPosition +#include // Xml::MContentHandler +#include // Xml::CParser + +#include // RProperty + + +//CONSTANTS + +// Maximum length for names of element and attribute and for value of attribute. +const TUint KMaxDataLength = 20; +const TUint KBufSize32 = 32; + + +// DATA TYPES + +// Enumeration to use in determining the last tag. +enum TLastTag + { + EInitialization = 0, + EUpdate + }; + + +// Identifiers for reverberation presets. Used in mapping. +enum TReverbPresets + { + EReverbNotEnabled = 0, + EReverbPresetOne = 14, // Livingroom + EReverbPresetTwo = 5, // Cave + EReverbPresetThree = 26, // Stone Corridor + EReverbPresetFour = 8, // Forest + EReverbPresetFive = 24, // Sewerpipe + EReverbPresetSix = 28 // Underwater + }; + + +// FORWARD DECLARATIONS + +class C3DPatternPS; + + +// CLASS DECLARATION + +/** +* XML-parser used to parse motion patterns. +* +* @lib RingingTone3DPlugin.dll +* @since 5.0 +*/ +NONSHARABLE_CLASS (C3DAudioXMLParser) : public CBase, public Xml::MContentHandler + { + public: + + enum TPatternAttributeKeys + { + EKeyPatternId = 1, + EKeyDopplerUsed = 2, + EKeyVelocity = 3 + }; + + public: + + /** + * Two-phased constructor. + */ + static C3DAudioXMLParser* NewL(); + + /** + * Two-phased constructor. + */ + static C3DAudioXMLParser* NewLC(); + + /** + * Destructor. + */ + virtual ~C3DAudioXMLParser(); + + private: + + /** + * C++ default constructor. + */ + C3DAudioXMLParser(); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + + public: + + /** + * Parses the motion pattern from XML-file. + * @param aPatternNum Motion pattern to be parsed. + */ + void ParseL( TInt aPatternId ); + + /** + * Parses the motion pattern from XML-file. + * @param aPatternNum Motion pattern to be parsed. + */ + void ParseL( const TDesC& aFileName ); + + /** + * Returns single pattern attribute. + * @param Pattern attribute key. + * @return Pattern attribute value. + */ + TInt Attribute( TInt aKey ); + + const T3DPosition& PositionL( TInt aIndex ); + const T3DVelocity& VelocityL( TInt aIndex ); + const TInt& TimeL( TInt aIndex ); + TInt CountL(); + + private: + /** + * Reads 3D ringing tone pattern data from cache (PubSub) + * @param aPatternId Pattern id. + */ + TBool ReadFromPatternCacheL( TInt aPatternId ); + + /** + * Writes 3D ringing tone pattern data into cache (PubSub) + * @param aPatternId Pattern id. + */ + void WriteToPatternCacheL( TInt aPatternId ); + +#ifdef _DEBUG + public: + void AssertParseDataL( TInt aPatternId ); + static void GetPatternString(TDes& aText, TInt aPattern); + static void FlogPatternsL(TInt aOldPattern, TInt aNewPattern); + static void FlogPatternL(TInt aPattern); + static void FlogPubSubL(TInt aEcho); + static void GetEchoString(TDes& aText, TInt aEcho); +#endif + + + public: // from MContentHandler + + /** + * From MContentHandler This method is a callback to indicate the start of the document. + * @param aDocParam Specifies the various parameters of the document. + * @param aErrorCode The error code. + */ + void OnStartDocumentL( const Xml::RDocumentParameters& aDocParam, TInt aErrorCode ); + + /** + * This method is a callback to indicate the end of the document. + * @param aErrorCode The error code. + */ + void OnEndDocumentL( TInt aErrorCode ); + + /** + * This method is a callback to indicate an element has been parsed. + * @param aElement Handle to the element's details. + * @param aAttributes Attributes for the element. + * @param aErrorCode The error code. + */ + void OnStartElementL( const Xml::RTagInfo& aElement, const Xml::RAttributeArray& aAttributes, TInt aErrorCode ); + + /** + * This method is a callback to indicate the end of the element has been reached. + * @param aElement Handle to the element's details. + * @param aErrorCode The error code. + */ + void OnEndElementL( const Xml::RTagInfo& aElement, TInt aErrorCode ); + + /** + * This method is a callback that sends the content of the element. + * @param aBytes Raw content data for the element + * @param aErrorCode The error code. + */ + void OnContentL( const TDesC8& aBytes, TInt aErrorCode ); + + /** + * This method is a notification of the beginning of the scope of a prefix-URI Namespace mapping. + * @param aPrefix Namespace prefix being declared. + * @param aUri Namespace URI the prefix is mapped to. + * @param aErrorCode The error code. + */ + void OnStartPrefixMappingL( const RString& aPrefix, const RString& aUri, TInt aErrorCode ); + + /** + * This method is a notification of the end of the scope of a prefix-URI mapping. + * @param aPrefix Namespace prefix that was mapped. + * @param aErrorCode The error code. + */ + void OnEndPrefixMappingL( const RString& aPrefix, TInt aErrorCode ); + + /** + * This method is a notification of ignorable whitespace in element content. + * @since Series ?XX ?SeriesXX_version + * @param aBytes Ignored bytes from the document being parsed. + * @param aErrorCode The error code. + */ + void OnIgnorableWhiteSpaceL( const TDesC8& aBytes, TInt aErrorCode ); + + /** + * This method is a notification of a skipped entity. + * @param aName Name of the skipped entity. + * @param aErrorCode The error code. + */ + void OnSkippedEntityL( const RString& aName, TInt aErrorCode ); + + /** + * This method is a receive notification of a processing instruction. + * @param aTarget Processing instruction target. + * @param aData Processing instruction data. If empty none was supplied. + * @param aErrorCode The error code. + */ + void OnProcessingInstructionL( const TDesC8& aTarget, const TDesC8& aData, TInt aErrorCode ); + + /** + * This method indicates an error has occurred. + * @param aErrorCode The error code. + */ + void OnError( TInt aErrorCode ); + + /** + * This method obtains the interface matching the specified uid. + * @param aUid UID identifying the required interface. + */ + TAny* GetExtendedInterface( const TInt32 aUid ); + + + private: + + /** + * Processes the attributes of initialization-element. + * @param aAttributes Array of attributes. + */ + void ProcessInitAttributesL( const Xml::RAttributeArray& aAttributes ); + + /** + * Processes the attributes of loop-element. + * @param aAttributes Array of attributes. + */ + void ProcessLoopAttributesL( const Xml::RAttributeArray& aAttributes ); + + /** + * Processes the attributes of position-element. + * @param aAttributes Array of attributes. + */ + void ProcessPositionAttributesL( const Xml::RAttributeArray& aAttributes ); + + /** + * Processes the attributes of update-element. + * @param aAttributes Array of attributes. + */ + void ProcessUpdateAttributesL( const Xml::RAttributeArray& aAttributes ); + + /** + * Processes the attributes of velocity-element. + * @param aAttributes Array of attributes. + */ + void ProcessVelocityAttributesL( const Xml::RAttributeArray& aAttributes ); + + private: + + /** + * String copy with length check. + * @param aTarget. + * @param aSource. + */ + void CopyL( TDes8& aTarget, const TDesC8& aSource ); + + /** + * Panics plugin dll. + * @param aReason Panic code. + */ + void Panic(TInt aReason); + + void GetPatternFullPathL(TDes& aText, TInt aPatternId); + CBufFlat* ReadPatternFileL( const TDesC& aFullName ); + CBufFlat* ReadPatternFileL( TInt aPatternId ); + + + private: // Data + + // Xml::CParser + Xml::CParser* iParser; + + // file server session + RFs iFsSession; + + // Parsed pattern + C3DAudioPattern* iParsedPattern; + + // element name + TBuf8 iElementName; + + // attribute name + TBuf8 iAttributeName; + + // attribute value + TBuf8 iAttributeValue; + + // Currently parsed pattern update. + T3DScriptUpdate iCurrentUpdate; + + // Last tag occurred. + TLastTag iLastTag; + + // 3DTone file name and path + TFileName iFullPath; + + // Pattern id + TInt iPatternId; + }; + + + +/** +* C3DPatternPS is used for storing 3D pattern data in +* Public and Subcribe. Max pattern size is 65536 bytes. +* +* @lib RingingTone3DPlugin.dll +* @since 5.0 +*/ +NONSHARABLE_CLASS (C3DPatternPS) : public CBase + { + public: + + enum TPatternStoreKeys + { + EKeyPatternId = 1, + EKeyDopplerUsed = 2, + EKeyVelocity = 3, + EKeyDataSize = 4, + EKeyPatternData = 5 + }; + + public: + static C3DPatternPS* NewLC( TInt aStoreId ); + virtual ~C3DPatternPS(); + + private: + C3DPatternPS( TInt aStoreId ); + void ConstructL(); + + public: + void SetIntL( TInt aKey, TInt aValue ); + TInt IntL( TInt aKey ); + + CBufFlat* DataLC(); + void GetDataL( TDes8& aData ); + void SetDataL( const TDesC8& aData ); + + void TestL(); + + private: + TBool DefineKeyL( TInt aKeyId, TInt aKeyType ); + + private: + RProperty iProperty; + TUid iStoreUid; + }; + + + +////////////////////////////////////// START TEST CODE ////////////////////////// + +#include + +const TInt KBufSize128 = 128; +const TInt KBufSize64 = 64; + + +class T3DPatternData + { + public: + TInt iTime; + TInt iX; + TInt iY; + TInt iZ; + }; + + +/** +* C3DPatternParser +* +* Used to parse xml files. +*/ +NONSHARABLE_CLASS (C3DPatternParser) : public CBase, public Xml::MContentHandler + { + public: + static C3DPatternParser* NewL(); + virtual ~C3DPatternParser(); + + private: + C3DPatternParser(); + void ConstructL(); + + public: + void ParseDocumentL(const TDesC& aFullName); + void ParseDocumentL(TInt aPatternId); + TInt PositionCount(); + T3DPatternData& Position(TInt aIndex); + T3DPatternData& Velocity(TInt aIndex); + void GetPatternName(TDes& aText); + void GetEchoName(TDes& aText); + TBool DopplerEnabled(); + + void AssertPosition(TInt aIndex, TInt aX, TInt aY, TInt aZ); + void AssertVelocity(TInt aIndex, TInt aX, TInt aY, TInt aZ); + void AssertTime(TInt aIndex, TInt aTime); + + + + private: + void Print(); + void PrintCoordinates(T3DPatternData& aData, TBool aVelocity); + + + private: // from MContentHandler + + void OnStartDocumentL(const Xml::RDocumentParameters& aDocParam, TInt aErrorCode); + void OnEndDocumentL(TInt aErrorCode); + void OnStartElementL(const Xml::RTagInfo& aElement, + const Xml::RAttributeArray& aAttributes, + TInt aErrorCode); + void OnEndElementL(const Xml::RTagInfo& aElement, TInt aErrorCode); + void OnContentL(const TDesC8& aBytes, TInt aErrorCode); + void OnStartPrefixMappingL(const RString& aPrefix, const RString& aUri, + TInt aErrorCode); + void OnEndPrefixMappingL(const RString& aPrefix, TInt aErrorCode); + void OnIgnorableWhiteSpaceL(const TDesC8& aBytes, TInt aErrorCode); + void OnSkippedEntityL(const RString& aName, TInt aErrorCode); + void OnProcessingInstructionL(const TDesC8& aTarget, const TDesC8& aData, + TInt aErrorCode); + void OnError(TInt aErrorCode); + TAny* GetExtendedInterface(const TInt32 aUid); + + private: + CBufFlat* ReadDocumentL(const TDesC& aFullName); + void ReadPositionAttributesL(const Xml::RAttributeArray& aAttributes); + void ReadVelocityAttributesL(const Xml::RAttributeArray& aAttributes); + void ReadInitAttributesL(const Xml::RAttributeArray& aAttributes); + void ReadUpdateAttributesL(const Xml::RAttributeArray& aAttributes); + + private: + void StrCopy(TDes& aTarget, const TDesC8& aSource); + void StrCopy(TDes& aTarget, const TDesC& aSource); + TInt StrToIntL(const TDesC& aText); + void Panic(TInt aReason); + void GetPatternFileNameL(TDes& aText, TInt aPatternId); + + private: + + // Xml parser + Xml::CParser* iParser; + + // file server session + RFs iFsSession; + + TBuf iElementName; + TBuf iAttributeName; + TBuf iAttributeValue; + TBuf iEchoName; + TBuf iPatternName; + + TBool iDopplerUsed; + TBool iVelocityUsed; + + T3DPatternData iCurrentPosition; + T3DPatternData iCurrentVelocity; + + T3DPatternData iInitPosition; + T3DPatternData iInitVelocity; + + + + // list for parsed 3d pattern position coordinates + RArray iPositionList; + + // list for parsed 3d pattern velocity coordinates + RArray iVelocityList; + }; + +////////////////////////////////////// END TEST CODE //////////////////////////// + + +#endif // C3DAUDIOXMLPARSER_H + +// End of File