diff -r 453dfc402455 -r 0aa8cc770c8a remoteconn_plat/generic_hid_api/inc/hidreportroot.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/remoteconn_plat/generic_hid_api/inc/hidreportroot.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,274 @@ +/* +* Copyright (c) 2004-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: Declares hid report class +* +*/ + + +#ifndef C_HIDREPORTROOT_H +#define C_HIDREPORTROOT_H + +#include + +#include "hidfield.h" +#include "hidcollection.h" + +#include "hidvalues.h" + +class CReportRoot; + + + +/** + * Hid field finder class + * The MHidFieldFinder class defines the call-back interface used by + * THidFieldSearch. A device driver uses THidFieldSearch::SearchL() + * along with a custom MHidFieldFinder object to determine whether it + * is compatible with a given report descriptor. + * + * @lib generichid.lib + * @since S60 v5.0 + */ +class MHidFieldFinder + { +public: + + /** + * Called by THidFieldSearch::SearchL() during traversal of the + * report descriptor tree when a CCollection is encountered. It + * will be called once, and only once, for every CCollection in the + * descriptor. It is not called for the root collection + * (the CReportRoot). + * + * @since S60 v5.0 + * @param aCollection A pointer to the collection object. + * @return ETrue if the contents of this collection (any child CField + * or CCollection objects) should be examined. A driver would return + * EFalse if a collection was not of a compatible type, for + * example if the usage page was inappropriate. + */ + virtual TBool BeginCollection(const CCollection *aCollection) = 0; + + /** + * Called by THidFieldSearch::SearchL() during traversal of the + * report descriptor tree when all CFields and child CCollections + * of a CCollection have been examined. It will be called once, + * and only once, for every CCollection in the descriptor. It is + * not called for the root collection (the CReportRoot). + * + * @since S60 v5.0 + * @param aCollection A pointer to the collection object. + * @return ETrue if the search (tree traversal) should + * continue. A driver returns EFalse if it has finished examining + * the whole descriptor, in general this will be if it has + * established that it is compatible with the report descriptor. + */ + virtual TBool EndCollection(const CCollection *aCollection) = 0; + + /** + * Called once for each CField in a CCollection by + * THidFieldSearch::SearchL() during the traversal of a report + * descriptor tree. + * + * @since S60 v5.0 + * @param aField The pointer to field + * @return None. + */ + virtual void Field(const CField* aField) = 0; + }; + + +/** + * Report Size + * + * @lib generichid.lib + * @since S60 v5.0 + */ +class TReportSize + { +public: + + /** + * Constructor. + * + * @since S60 v5.0 + * @param aReportId The report id + * @param aType Field type + * @return Pointer to report size object + */ + TReportSize(TInt aReportId, CField::TType aType); + + + /** + * TReportSize comparision + * + * @since S60 v5.0 + * @param aFirst first report size to be compared. + * @param aSecond second report size to be compared + * @return None + */ + static TBool Match(const TReportSize& aFirst, + const TReportSize& aSecond); + + /** + * Report id + */ + TInt iReportId; + + /** + * Fiel type + */ + CField::TType iType; + + /** + * Report size + */ + TInt iSize; + }; + + +/** + * Hid field search + * THidFieldSearch provides a mechanism for traversing a parsed report + * descriptor tree (a CReportRoot object). It is intended for a device + * driver to use when it is looking to see if it is compatible with a + * newly connected device, i.e. provides the appropriate types of + * report. The driver must provide an object of a class that implements + * the MHidFieldFinder interface. + * + * @since S60 v5.0 + */ +class THidFieldSearch + { +public: + + /** + * Traverse a parsed report descriptor (a tree of CCollections + * and CFields) calling the MHidFieldFinder member functions as + * appropriate. + * + * @since S60 v5.0 + * @param aReportRoot THe pointer to field + * @param aFinder An object that will establish if the report + * descriptor is suitable. + * @return None. + */ + IMPORT_C void SearchL(const CReportRoot* aReportRoot, + MHidFieldFinder* aFinder); + +private: + + /** + * Traverse a parsed report descriptor (a tree of CCollections + * and CFields) calling the MHidFieldFinder member functions as + * appropriate. + * + * @since S60 v5.0 + * @param aReportRoot THe pointer to field + * @return ETrue when search is done. + */ + TBool DoSearchL(const CCollection* aCollection); + +private: + MHidFieldFinder* iFinder; + }; + +/** + * Root report + * The top level of the tree of fields and collections in a HID + * report descriptor. + * + * @lib generichid.lib + * @since S60 v5.0 + */ +class CReportRoot : public CCollection + { +public: + static CReportRoot* NewLC(); + static CReportRoot* NewL(); + + /** + * Destructor + */ + virtual ~CReportRoot(); + + /** + * Increase the size of a given report by a given number of bits + * + * @since S60 v5.0 + * @param aReportId The report id, which size shoud be increased + * @param aType a Type of field + * @param aIncrement size of increase + * @return None + */ + void IncrementReportSizeL(TInt aReportId, + CField::TType aType, TInt aIncrement); + + /** + * Get the size of a given report in bits + * + * @since S60 v5.0 + * @param aReportId The report id, which size shoud be increased + * @param aType a Type of field + * @return Size of report in bits + */ + TInt ReportSize(TInt aReportId, CField::TType aType) const; + + /** + * Get the size of a given report in bytes + * + * @since S60 v5.0 + * @param aReportId The report id, which size shoud be increased + * @param aType a Type of field + * @return Size of report in bytys + */ + IMPORT_C TInt ReportSizeBytes(TInt aReportId, CField::TType aType) const; + + /** + * Get the number of reports + * + * @since S60 v5.0 + * @return number of reports + */ + TInt NumberOfReports() const; + + /** + * Get the size of a given report by array index, rather than type & ID + * + * @since S60 v5.0 + * @param aIndex report index + * @return report size + */ + TInt ReportSize(TInt aIndex) const; + +private: + CReportRoot(); + + /** + * Find report index + * + * @since S60 v5.0 + * @param aReportId The report id to be found + * @param aType a Type of field + * @return report size + */ + TInt FindReportSizeIndex(TInt aReportId, CField::TType aType) const; + + /** + * Array to store the size of each report + */ + RArray iSizes; + }; + +#endif