localconnectivityservice/generichid/inc/hidparser.h
branchRCL_3
changeset 20 4a793f564d72
parent 19 0aa8cc770c8a
child 21 74aa6861c87d
--- a/localconnectivityservice/generichid/inc/hidparser.h	Tue Aug 31 16:03:15 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1041 +0,0 @@
-/*
-* Copyright (c) 2005-2007 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:  BTHid item
-*
-*/
-
-#ifndef C_PARSER_H
-#define C_PARSER_H
-
-#include "hidreportroot.h"
-
-class TItem;
-
-/**
- * HID Parser error codes.  For a description of the error code
- * format, see "HID Parser Error Codes", Revision 1.2, USB
- * Implementers' Forum, February 2000.
- */
-enum THidParserError
-    {
-    // General:
-    //
-    EUnknownItem                    = 0xbf00,
-    ELongItemDefined                = 0x3e00,
-    //
-    // Global:
-    //
-    EZeroUsagePage                  = 0x8004,
-    EUsagePageOutOfRange            = 0x8104,
-    ELogicalMinInvalidForArray      = 0x8214,
-    ELogicalMaxInvalidForArray      = 0x8224,
-    ELonelyPhysicalMin              = 0x8034,
-    ELonelyPhysicalMax              = 0x8044,
-    EZeroReportId                   = 0x8084,
-    EReportIdTooBig                 = 0x8184,
-    ELateReportId                   = 0x8284,
-    EReportIdOutsideTopLevel        = 0x8484,
-    EZeroReportCount                = 0x8094,
-    EPushWithoutPop                 = 0x80a4,
-    EPushHasData                    = 0x81a4,
-    EPopWithoutPush                 = 0x80b4,
-    EPopHasData                     = 0x81b4,
-    ERedundantGlobalItem            = 0x80f4,
-    EReservedUsagePage              = 0x0004,
-    ELogicalMinExceedsMax           = 0x0014,
-    EPhysicalMinExceedsMax          = 0x0034,
-    EExponentReservedBitsNonZero    = 0x0054,
-    EUnitReservedBitsNonZero        = 0x0064,
-    //
-    // Local:
-    //
-    ELonelyUsageMin                 = 0x8018,
-    EUsageMinExceedsMax             = 0x8118,
-    EUsagePageMismatchMin           = 0x8318,
-    ELonelyUsageMax                 = 0x8028,
-    EUsagePageMismatchMax           = 0x8228,
-    ELonelyDesignatorMin            = 0x8048,
-    EDesignatorMinExceedsMax        = 0x8148,
-    ELonelyDesignatorMax            = 0x8058,
-    ELonelyStringMin                = 0x8088,
-    EStringMinExceedsMax            = 0x8188,
-    ELonelyStringMax                = 0x8098,
-    EUnknownDelimiter               = 0x80a8,
-    ENestedDelimiter                = 0x81a8,
-    ELonelyDelimiter                = 0x82a8,
-    EInvalidItemWithinDelimiter     = 0x83a8,
-    EDelimiterAtTopLevel            = 0x84a8,
-    EZeroUsage                      = 0x0008,
-    //
-    // Main:
-    //
-    EInputMissingItems              = 0x8080,
-    EInputItemWithinDelimiter       = 0x8180,
-    EInputReportSize                = 0x8280,
-    EInputMinExceedsMax             = 0x8380,
-    EOutputMissingItems             = 0x8090,
-    EOutputItemWithinDelimiter      = 0x8190,
-    EOutputReportSize               = 0x8290,
-    EOutputMinExceedsMax            = 0x8390,
-    EFeatureMissingItems            = 0x80b0,
-    EFeatureItemWithinDelimiter     = 0x81b0,
-    EFeatureReportSize              = 0x82b0,
-    EFeatureMinExceedsMax           = 0x83b0,
-    ENoMatchingBeginCollection      = 0x80c0,
-    EEndCollectionWithinDelimiter   = 0x81c0,
-    EReportMustBeEightBitMultiple   = 0x82c0,
-    ENoMatchingEndCollection        = 0x80a0,
-    EBeginCollectionWithinDelimiter = 0x81a0,
-    EApplicationCollectionLevel     = 0x82a0,
-    EInputReservedBitsNonZero       = 0x0080,
-    EInputLocalMultipleUse          = 0x0280,
-    EOutputReservedBitsNonZero      = 0x0090,
-    EOutputLocalMultipleUse         = 0x0290,
-    EFeatureReservedBitsNonZero     = 0x00b0,
-    EFeatureLocalMultipleUse        = 0x02b0,
-    ECollectionLocalUnused          = 0x00a0,
-    ECollectionTypeUnknownReserved  = 0x01a0,
-    EEndCollectionLocalUnused       = 0x00c0,
-    EEndCollectionHasData           = 0x01c0,
-    //
-    // Our ("vendor specific") codes:
-    //
-    EInvalidItemLength              = 0xC000,
-    EApplicationHasDelimiter        = 0x40a0,
-    EDelimiterWithinNamedArray      = 0x40a8,
-    ECollectionHasNoUsage           = 0x40c0,
-    ECollectionHasNoUsagePage       = 0x41c0
-    };
-
-/**
- * HID parser panics
- */
-enum THidParsingError
-    {
-    // ASSERT_ALWAYS:
-    //
-    EZeroLengthItem = 1,       //!< Zero descriptor length in TItem constructor
-    ENoReportRoot = 2,         //!< iReportRoot is 0 in CreateFieldL()
-    ENoCurrentCollection = 3,  //!< No current collection in Collection()
-    //
-    // ASSERT_DEBUG:
-    //
-    ENoCollectionToCheck = 10, //!< No collection in CheckForCollectionErrors()
-    EPopFailed = 11,           //!< Empty collection stack in PopCollection()
-    EIndexOutOfRange = 12,     //!< Index out of range in TItem::operator[]
-    EItemTooLong = 13          //!< Data() called for item with size > 4
-    };
-
-
-/**
- *  Parser global states
- *
- *  CParser uses TParserGlobalState objects to store the global item
- *  state during parsing. The global state can be saved and restored
- *  using the HID descriptor POP and PUSH tags, therefore CParser
- *  incorporates a stack of TParserGlobalState objects.
- *
- *
- *  @lib  generichid.lib
- *  @since S60 v5.0
- */
-class TParserGlobalState
-    {
-    friend class CParser;
-
-public:
-
-    TParserGlobalState();
-
-    /**
-     * Copies all data members into a CField object. The other
-     * members of the CField object (those corresponding to local
-     * HID descriptor tags) are unaffected.
-     *
-     * @since S60 v5.0
-     * @param aField Pointer to the field object to populate.
-     * @return None.
-     */
-    void Populate(CField *aField) const;
-
-private:
-    /**
-     * Usage page
-     */
-    TInt iUsagePage;
-
-    /**
-     * Logical minimum
-     */
-    TInt iLogicalMin;
-
-    /**
-     * Logical maximum
-     */
-    TInt iLogicalMax;
-
-    /**
-     * Physical minimum
-     */
-    TInt iPhysicalMin;
-
-    /**
-     * Physical maximum
-     */
-    TInt iPhysicalMax;
-
-    /**
-     * Unit type
-     */
-    TInt iUnit;
-
-    /**
-     *  Unit exponent
-     */
-    TInt iUnitExponent;
-
-    /**
-     * Associated report ID
-     */
-    TInt iReportId;
-
-    /**
-     * Report size
-     */
-    TInt iSize;
-
-    /**
-     * Report count
-     */
-    TInt iCount;
-    };
-
-
-/**
- *
- * HID parser
- * CParser parses a HID report descriptor.  It outputs a CReportRoot
- * containing a tree of CCollection and CField objects representing
- * the descriptor information.  A HID device driver can then use this,
- * in conjunction with TReportTranslator and CReportGenerator objects,
- * to facilitate communication with a HID device.
- *
- * The parsing process conforms to the HID class specification
- * document: "USB Device Class Definition for Human Interface Devices
- * (HID)", Firmware Specification, Version 1.11, USB Implementers' Forum,
- * June 2001.
- *
- *
- *  @lib generichid.lib
- *  @since S60 v5.0
- */
-class CParser : public CBase
-    {
-public:
-    IMPORT_C static CParser* NewL();
-    IMPORT_C static CParser* NewLC();
-
-    virtual ~CParser();
-
-    /**
-     * ParseL() parses a string of bytes representing a HID report
-     * descriptor. It returns a tree of collection and field objects (a
-     * CReportRoot). Ownership of the CReportRoot is transferred to the
-     * caller.
-     *
-     * Warning messages produced during the parse process are added to
-     * a list which the driver can retrieve using the Warnings()
-     * function. Note that the list will be overwritten by the next
-     * ParseL() operation.
-     *
-     * Errors and warnings are represented using the format described
-     * in "HID Parser Error Codes", Revision 1.2, USB Implementers'
-     * Forum, February 2000.
-     *
-     * @since S60 v5.0
-     * @param aRawData The report descriptor data to be processed
-     * @return The root collection, a tree of CCollection and CField objects
-     */
-    IMPORT_C CReportRoot* ParseL(const TDesC8& aRawData);
-
-    /**
-     * Return field count
-     *
-     * @since S60 v5.0
-     * @return field count
-     */
-    TInt FieldCount();
-     
-  
-
-        
-
-private:
-    CParser();
-    void ConstructL();
-
-    /**
-     * Handle a HID descriptor main item.  This includes the creation
-     * of new field objects in the current collection and management of
-     * the global item state stack.
-     *
-     * @since S60 v5.0
-     * @param aItem The current report descriptor tag and its associated data
-     * @return KErrNone (0) on success, otherwise a critical error code in
-     *         the standard HID format.
-     */
-    TInt MainItemL(const TItem& aItem);
-
-    /**
-     * Handle a HID descriptor local item.  Stores the data in the
-     * appropriate member of the local state object, *iLocal.
-     *
-     * @since S60 v5.0
-     * @param aItem The current report descriptor tag and its associated data
-     * @return KErrNone (0) on success, otherwise a critical error code in
-     *         the standard HID format.
-     */
-    TInt LocalItemL(const TItem& aItem);
-
-    /**
-     * Handle a HID descriptor global item. Stores the data in the
-     * appropriate member of the current global state object, iGlobal.
-     *
-     * @since S60 v5.0
-     * @param aItem The current report descriptor tag and its associated data
-     * @return KErrNone (0) on success, otherwise a critical error code in
-     *         the standard HID format.
-     */
-    TInt GlobalItemL(const TItem& aItem);
-
-    /**
-     * Used to access the current collection object, i.e. the object
-     * at the top of the collection stack (iCollectionStack).
-     *     
-     *
-     * @since S60 v5.0
-     * @return A pointer to the current collection object.
-     *
-     */
-    CCollection* Collection();
-
-    /**
-     * Pushes a pointer to the current collection object on to the
-     * collection stack.
-     *
-     * Note that the collection stack is used to create the tree of
-     * collections. It should not be confused with the global state
-     * stack, iGlobalStack.
-     *
-     * @since S60 v5.0
-     * @param aCollection The collection to be pushed onto the stack
-     * @return None.
-     *
-     */
-    void PushCollectionL(const CCollection* aCollection);
-
-    /**
-     * Pushes a pointer to the current collection object on to the
-     * collection stack.
-     *
-     * Note that the collection stack is used to create the tree of
-     * collections. It should not be confused with the global state
-     * stack, iGlobalStack.
-     *
-     * @since  S60 v5.0
-     * @return None.
-     *
-     */
-    void PopCollection();
-
-    /**
-     * CreateFieldL() is called to instantiate a new CField object
-     * when an input, output or feature item is encountered in the
-     * report descriptor.
-     *
-     * The current local and global states extracted from the report
-     * descriptor are copied to the CField, which is placed into the
-     * current CCollection.
-     *
-     * @since S60 v5.0
-     * @param aType The type of field: input, output or feature
-     * @param aAttributes The attributes for the field (e.g. Data, Array,
-     *                    Absolute.)
-     * @return KErrNone (0) on success, otherwise a critical error code
-     *                  in the standard HID format.
-     *
-     */
-    TInt CreateFieldL(CField::TType aType, TUint32 aAttributes);
-
-    /**
-     * ClearLocalState() clears the appropriate fields in the CField
-     * object that represents the current local item state.
-     *
-     * @since S60 v5.0
-     * @return None
-     *
-     */
-    void ClearLocalState();
-
-    /**
-     * DumpStateTableL() copies the current local and global item state
-     * into a CField object.
-     *
-     * @since S60 v5.0
-     * @param aField The field object to receive the data
-     * @return None
-     *
-     */
-    void DumpStateTableL(CField *aField) const;
-
-    /**
-     * CreateCollectionL() is called to instantiate a new CCollection
-     * object when a "begin collection" item is encountered in the
-     * report descriptor.
-     *
-     * @since S60 v5.0
-     * @param aType The type of the collection. This can be one of the
-     *              seven standard types defined in CCollection::TType,
-     *              or a vendor defined value.
-     * @return KErrNone (0) on success, otherwise a critical error code in
-     *         the standard HID format.
-     */
-    TInt CreateCollectionL(TUint32 aType);
-
-    /**
-     * CheckForCollectionErrors() validates the current collection
-     * object. It adds non-critical errors to the warnings list. It
-     * returns an error code if a critical error is encountered.
-     *
-     * @since S60 v5.0
-     * @param aType The type of the collection (one of the CCollection::TType
-     *              values, or vendor defined).
-     * @return KErrNone (0) if there was no error, otherwise a critical
-     *         error code in the standard HID format.
-     */
-    TInt CheckForCollectionErrors(TUint32 aType);
-
-    /**
-     * CheckForFieldErrors() validates the current global and local
-     * item state in preparation for creating a CField object.  It adds
-     * non-critical errors to the warnings list. It returns an error
-     * code if a critical error is encountered.
-     *
-     * @since S60 v5.0
-     * @param @param aType The type of the field (input, output or feature).
-     * @param aAttributes The attributes for the field (e.g. Data, Array,
-     *                    Absolute.)
-     * @return KErrNone (0) if there was no error, otherwise a critical
-     *                   error code in the standard HID format.
-     */
-    TInt CheckForFieldErrors(CField::TType aType, TUint32 aAttributes);
-
-    /**
-     * CheckForMainErrors() performs error checking common to
-     * CheckForCollectionErrors() and CheckForFieldErrors(). It adds
-     * non-critical errors to the warnings list. It returns an error
-     * code if a critical error is encountered.
-     *
-     * @since S60 v5.0
-     * @return KErrNone (0) if there was no error, otherwise a critical
-     *                  error code in the standard HID format.
-     */
-    TInt CheckForMainErrors();
-
-    /**
-     * CheckAllReportSizes() checks if all report sizes are integral
-     * multiples of 8 bits.
-     *
-     * @since S60 v5.0
-     * @return ETrue if all report sizes are integral multiples of
-     *         8 bits.
-     */
-    TBool CheckAllReportSizes() const;
-
-    /**
-     * BitsToRepresentRange() returns the number of bits required to
-     * represent all values in a given range. It is used to check
-     * that the report field size is appropriate for the given
-     * logical minimum and maximum.
-     *
-     * If the range is all positive then it is assumed that there is no
-     * sign bit, otherwise twos complement format is assumed, as per
-     * the HID class specification, v1.11, Section 6.2.2.7.
-     *
-     * @since S60 v5.0
-     * @param aMin Logical minimum
-     * @param aMax Logical maximum
-     * @return The number of bits required to represent the range aMin
-     *         to aMax (inclusive).
-     */
-    static TInt BitsToRepresentRange(TInt aMin, TInt aMax);
-
-    /**
-     * NumberOfLeadingZeros() is used by BitsToRepresentRange(). It
-     * returns the number of leading zeros in the binary representation
-     * of a number, effectively performing a log_2 operation.
-     *
-     * @since S60 v5.0
-     * @param aValue Unsigned 32-bit value
-     * @return Number of leading zeros in the binary representation of aValue
-     */
-    static TInt NumberOfLeadingZeros(TUint32 aValue);
-
-    /**
-     * IssueWarning() adds a TParserWarning to the warning list.
-     *
-     * @since S60 v5.0
-     * @param aHidWarningCode The error or warning code, which should
-     *                        be in the standard HID format.
-     * @return None
-     */
-    void IssueWarning(TInt aHidWarningCode);
-
-    /**
-     * IsReservedUsagePage() checks if the given HID usage page is
-     * listed as reserved according to the HID clas specification,
-     * v1.11.
-     *
-     * @since S60 v5.0
-     * @param aUsagePage The usage page to check.
-     * @result ETrue if the usage page is listed as reserved.
-     */
-    static TBool IsReservedUsagePage(TInt aUsagePage);
-
-
-    /**
-     * HandleMainInputTagL
-     *
-     * @since S60 v5.0
-     * @param aItem a Hid field item
-     * @result error code
-     */
-    TInt HandleMainInputTagL(const TItem& aItem);
-
-
-    /**
-     * HandleMainOutputTag
-     *
-     * @since S60 v5.0
-     * @param aItem a Hid field item
-     * @result error code
-     */
-    TInt HandleMainOutputTagL(const TItem& aItem);
-
-    /**
-     * HandleMainFeature
-     *
-     * @since S60 v5.0
-     * @param aItem a Hid field item
-     * @result error code
-     */
-    TInt HandleMainFeatureL( const TItem& aItem );
-
-    /**
-     * HandleMainCollection
-     *
-     * @since S60 v5.0
-     * @param aItem a Hid field item
-     * @result error code
-     */
-    TInt HandleMainCollectionL( const TItem& aItem );
-
-
-    /**
-     * MainEndCollection
-     *
-     * @since S60 v5.0
-     * @param aItem a Hid field item
-     * @result error code
-     */
-    TInt HandleMainEndCollection( const TItem& aItem);
-
-    /**
-     * HandleGlobalReportId
-     *
-     * @since S60 v5.0
-     * @param aItem a Hid field item
-     * @result error code
-     */
-    TInt HandleGlobalReportId( const TItem& aItem );
-
-    /**
-     * HandleGlobalUsagePage
-     *
-     * @since S60 v5.0
-     * @param aItem a Hid field item
-     * @result error code
-     */
-    TInt HandleGlobalUsagePage( const TItem& aItem );
-
-    /**
-     * HandleGlobalLogicalMinimum
-     *
-     * @since S60 v5.0
-     * @param aItem a Hid field item
-     * @result error code
-     */
-    TInt HandleGlobalLogicalMinimum( const TItem& aItem );
-
-    /**
-     * HandleGlobalLogicalMaximum
-     *
-     * @since S60 ?S60_version *** for example, S60 v3.0
-     * @param aItem a Hid field item
-     * @result error code
-     */
-    TInt HandleGlobalLogicalMaximum( const TItem& aItem );
-
-    /**
-     * HandleGlobalPhysicalMinimum
-     *
-     * @since S60 v5.0
-     * @param aItem a Hid field item
-     * @result error code
-     */
-    TInt HandleGlobalPhysicalMinimum( const TItem& aItem );
-
-    /**
-     * HandleGlobalPhysicalMinimum
-     *
-     * @since S60 v5.0
-     * @param aItem a Hid field item
-     * @result error code
-     */
-    TInt HandleGlobalPhysicalMaximum( const TItem& aItem );
-
-    /**
-     * HandleGlobalUnit
-     *
-     * @since S60 v5.0
-     * @param aItem a Hid field item
-     * @result error code
-     */
-    TInt HandleGlobalUnit( const TItem& aItem );
-
-    /**
-     * HandleGlobalUnitExponent
-     *
-     * @since S60 v5.0
-     * @param aItem a Hid field item
-     * @result error code
-     */
-    TInt HandleGlobalUnitExponent( const TItem& aItem );
-
-    /**
-     * HandleGlobalReportSize
-     *
-     * @since S60 v5.0
-     * @param aItem a Hid field item
-     * @result error code
-     */
-    TInt HandleGlobalReportSize( const TItem& aItem );
-
-    /**
-     * HandleGlobalReportSize
-     *
-     * @since S60 v5.0
-     * @param aItem a Hid field item
-     * @result error code
-     */
-    TInt HandleGlobalReportCount( const TItem& aItem );
-
-    /**
-     * HandleGlobalPush
-     *
-     * @since S60 v5.0
-     * @param aItem a Hid field item
-     * @result error code
-     */
-    TInt HandleGlobalPushL( const TItem& aItem );
-
-    /**
-     * HandleGlobalPop
-     *
-     * @since S60 v5.0
-     * @param aItem a Hid field item
-     * @result error code
-     */
-    TInt HandleGlobalPop( const TItem& aItem );
-
-    /**
-     * HandleLocalUsage
-     *
-     * @since S60 v5.0
-     * @param aItem a Hid field item
-     * @result error code
-     */
-    TInt HandleLocalUsageL( const TItem& aItem );
-
-    /**
-     * HandleLocalUsageMinimum
-     *
-     * @since S60 v5.0
-     * @param aItem a Hid field item
-     * @result error code
-     */
-    TInt HandleLocalUsageMinimum( const TItem& aItem );
-
-    /**
-     * HandleLocalUsageMinimum
-     *
-     * @since S60 v5.0
-     * @param aItem a Hid field item
-     * @result error code
-     */
-    TInt HandleLocalUsageMaximum( const TItem& aItem );
-
-    /**
-     * HandleLocalDesignatorIndex
-     *
-     * @since S60 v5.0
-     * @param aItem a Hid field item
-     * @result error code
-     */
-    TInt HandleLocalDesignatorIndex( const TItem& aItem );
-
-    /**
-     * HandleLocalDesignatorMinimum
-     *
-     * @since S60 v5.0
-     * @param aItem a Hid field item
-     * @result error code
-     */
-    TInt HandleLocalDesignatorMinimum( const TItem& aItem );
-
-    /**
-     * HandleLocalDesignatorMaximum
-     *
-     * @since S60 v5.0
-     * @param aItem a Hid field item
-     * @result error code
-     */
-    TInt HandleLocalDesignatorMaximum( const TItem& aItem );
-
-    /**
-     * HandleLocalStringIndex
-     *
-     * @since S60 v5.0
-     * @param aItem a Hid field item
-     * @result error code
-     */
-    TInt HandleLocalStringIndex( const TItem& aItem );
-
-    /**
-     * HandleLocalStringMinimum
-     *
-     * @since S60 v5.0
-     * @param aItem a Hid field item
-     * @result error code
-     */
-    TInt HandleLocalStringMinimum( const TItem& aItem );
-
-    /**
-     * HandleLocalStringMaximum
-     *
-     * @since S60 v5.0
-     * @param aItem a Hid field item
-     * @result error code
-     */
-    TInt HandleLocalStringMaximum( const TItem& aItem );
-
-    /**
-     * HandleLocalDelimiter
-     *
-     * @since S60 v5.0
-     * @param aItem a Hid field item
-     * @result error code
-     */
-    TInt HandleLocalDelimiter( const TItem& aItem );
-    
-    /**
-     * CheckMandatoryFieldError
-     *
-     * @since S60 v5.0
-     * @param aType a field type
-     * @param aAttributes attributes
-     * @result error code
-     */
-    TInt CheckMandatoryFieldExistence( CField::TType aType, TUint32 aAttributes );
-    
-    /**
-     * CheckUsageMinAndMaxErrors
-     *
-     * @since S60 v5.0     
-     * @result error code
-     */
-    TInt CheckUsageMinAndMaxErrors();
-    
-    /**
-     * CheckDesignatorMinAndMaxErrors
-     *
-     * @since S60 v5.0     
-     * @result error code
-     */
-    TInt CheckDesignatorMinAndMaxErrors();
-    
-    /**
-     * CheckStringMinAndMaxErrors
-     *
-     * @since S60 v5.0     
-     * @result error code
-     */
-    TInt CheckStringMinAndMaxErrors();
-    
-    /**
-     * CheckMandatoryFieldError
-     *
-     * @since S60 v5.0
-     * @param aType a field type
-     * @param aAttributes attributes
-     * @result error code
-     */
-    TInt CheckMandatoryFieldErrors( CField::TType aType, TUint32 aAttributes );
-    
-    /**
-     * CheckLogicalMinAndMax
-     * Check if logical minimum and maximum must match the number of usage
-     * values 
-     *
-     * @since S60 v5.0     
-     * @param aAttributes attributes
-     * @result error code
-     */
-    void CheckLogicalMinAndMax( TUint32 aAttributes );
-    
-    /**
-     * CheckMandatoryFieldError
-     *
-     * @since S60 v5.0
-     * @param aType a field type
-     * @param aAttributes attributes
-     * @result error code
-     */
-    void CheckFieldBitNeeded( CField::TType aType, TUint32 aAttributes );
-    
-    /**
-     * HandleItem
-     *
-     * @since S60 v5.0     
-     * @result error code
-     */
-    void HandleItemL(TItem& aItem);
-    
-    /**
-     * CheckParseErrors
-     *
-     * @since S60 v5.0     
-     * @result error code
-     */
-    void CheckParseErrors();
-    
-    /**
-     * ResetParser
-     *
-     * @since S60 v5.0     
-     * @result error code
-     */
-    void ResetParserL();
-
-private:
-    /**
-     * A bitmask containing the THidItem flags which represent local
-     * (as opposed to main or global) items.
-     */
-    static const TUint32 KLocalItemMask;
-    
-    /**
-     * A bitmask containing the THidItem flags which represent local
-     * unused items.
-     */
-    static const TUint32 KUnusedLocalItemsMask;
-    
-    /**
-     * A bitmask containing the THidItem flags which represent mandatory
-     * items.
-     */
-    static const TUint32 KMandatoryItemMask;
-    
-    /**
-     * A bitmask containing the THidItem flags which represent report
-     * items.
-     */
-    static const TUint32 KReportItemMask;
-
-private:
-
-    /**
-     * THidItem defineds a set of flags used for keeping track of
-     * which items have been encountered in the report descriptor for
-     * the current report field. The flags are used with the
-     * iItemsDefined and iGlobalItemsDefined data members.
-     */
-    enum THidItem
-        {
-        EUsagePage       = 1<<0,
-        ELogicalMin      = 1<<1,
-        ELogicalMax      = 1<<2,
-        EReportSize      = 1<<3,
-        EReportCount     = 1<<4,
-        EReportId        = 1<<5,
-        EUsageMin        = 1<<6,
-        EUsageMax        = 1<<7,
-        EPhysicalMin     = 1<<8,
-        EPhysicalMax     = 1<<9,
-        EUnit            = 1<<10,
-        EUnitExponent    = 1<<11,
-        EDesignatorIndex = 1<<12,
-        EDesignatorMin   = 1<<13,
-        EDesignatorMax   = 1<<14,
-        EStringIndex     = 1<<15,
-        EStringMin       = 1<<16,
-        EStringMax       = 1<<17,
-        EInputReport     = 1<<18,
-        EOutputReport    = 1<<19,
-        EFeatureReport   = 1<<20,
-        EDelimiter       = 1<<21,
-        EUsageId         = 1<<22
-       };
-
-    /**
-     * HID local tags
-     */
-    enum THidLocalTags
-        {
-        ELocalUsage             = 0x00,
-        ELocalUsageMinimum      = 0x01,
-        ELocalUsageMaximum      = 0x02,
-        ELocalDesignatorIndex   = 0x03,
-        ELocalDesignatorMinimum = 0x04,
-        ELocalDesignatorMaximum = 0x05,
-        ELocalStringIndex       = 0x07,
-        ELocalStringMinimum     = 0x08,
-        ELocalStringMaximum     = 0x09,
-        ELocalDelimiter         = 0x0a
-        };
-
-    /**
-     *  HID global tags
-     */
-    enum THidGlobalTags
-        {
-        EGlobalUsagePage       = 0x00,
-        EGlobalLogicalMinimum  = 0x01,
-        EGlobalLogicalMaximum  = 0x02,
-        EGlobalPhysicalMinimum = 0x03,
-        EGlobalPhysicalMaximum = 0x04,
-        EGlobalUnitExponent    = 0x05,
-        EGlobalUnit            = 0x06,
-        EGlobalReportSize      = 0x07,
-        EGlobalReportId        = 0x08,
-        EGlobalReportCount     = 0x09,
-        EGlobalPush            = 0x0a,
-        EGlobalPop             = 0x0b
-        };
-
-    /**
-     * HID main tags
-     */
-    enum THidMainTags
-        {
-        EMainInput         = 0x08,
-        EMainOutput        = 0x09,
-        EMainFeature       = 0x0b,
-        EMainCollection    = 0x0a,
-        EMainEndCollection = 0x0c
-        };
-
-    /**
-     * The local state, cleared after each "Main" item
-     * Own.
-     */
-    CField* iLocal;
-
-    /**
-     * Current global state
-     */
-    TParserGlobalState iGlobal;
-
-    /**
-     * Global state stack, to allow HID descriptor PUSH and POP commands
-     */
-    RArray<TParserGlobalState> iGlobalStack;
-
-    // For delimiter handling:
-    //
-    /**
-     *  ETrue if currently within a delimiter pair
-     */
-    TBool iWithinDelimiter;
-
-    /**
-     *  Count of alternate USAGE declarations so far
-     */
-    TInt iAliasCount;
-
-    /**
-     *  Count of alternate USAGE_MIN declarations
-     */
-    TInt iAliasCountMin;
-
-    /**
-     *  Count of alternate USAGE_MAX declarations
-     */
-    TInt iAliasCountMax;
-
-    /**
-     * The root node of the collection tree
-     * Own.
-     */
-    CReportRoot* iReportRoot;
-
-    /**
-     * Stack used to create the collection tree
-     */
-    RPointerArray<CCollection> iCollectionStack;
-
-    // Keep track of which items have been seen in the descriptor:
-    //
-    /**
-     * All items forming the current item state
-     */
-    TUint32 iItemsDefined;
-
-    /**
-     * Global items seen since the last main tag
-     */
-    TUint32 iGlobalItemsDefined;
-
-    /**
-     * ETrue if a redundant local item is seen
-     */
-    TBool iLocalMultipleUse;
-
-    /**
-     * Number of the item we're currently processing
-     */
-    TInt iItemNumber;
-
-    /**
-     * Record of any critical error encountered
-     */
-    TInt iErrorCode;
-    
-    /**
-     * Field count
-     */
-    TInt iFieldCount;
-    };
-
-#endif