localconnectivityservice/generichid/inc/hidreportgenerator.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 31 Aug 2010 16:03:15 +0300
branchRCL_3
changeset 19 0aa8cc770c8a
permissions -rw-r--r--
Revision: 201032 Kit: 201035

/*
* 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:  Report generator
*
*/

#ifndef C_REPORT_GENERATOR_H
#define C_REPORT_GENERATOR_H

#include "hidreportroot.h"
#include "hidtranslate.h"

/**
 * HID report generator
 *
 * Class used for generating output or feature reports to send to the device.
 *
 * @lib  generichid.lib
 * @since S60 v5.0
 */
class CReportGenerator : public CBase
    {
public:
    /**
     * Constructs a CReportGenerator.
     *
     * @since S60 v5.0
     * @param aReportRoot Tree generated by CParser from the report
     *                    descriptor.
     * @param aReportId Report ID of the report to generate.
     * @param aType Type of report to generate (output or feature).
     */
    IMPORT_C static CReportGenerator* NewLC(const CReportRoot* aReportRoot,
        TInt aReportId, CField::TType aType);

    /**
     * Constructs a CReportGenerator.
     *
     * @since S60 v5.0
     * @param aReportRoot Tree generated by CParser from the report
     *                    descriptor.
     * @param aReportId Report ID of the report to generate.
     * @param aType Type of report to generate (output or feature).
     */
    IMPORT_C static CReportGenerator* NewL(const CReportRoot* aReportRoot,
        TInt aReportId, CField::TType aType);

    virtual ~CReportGenerator();

    /**
     * Sets the value of a single field in the report.  Stores the requested
     * control value in a field in the report buffer.  For array fields, adds
     * the requested usage ID to the array.
     *
     * @since S60 v5.0
     * @param aField Pointer to the field in which to set a value.
     * @param aUsageId Usage ID of the control to set.
     * @param aValue Value to write to the field, used for variable
     *               fields only.
     * @param aControlOffset Which control to set when more than one
     *                       have the same usage ID.
     * @return Error code indicating success or reason for failure.
     */
    IMPORT_C TInt SetField(const CField* aField, TInt aUsageId, TInt aValue,
        TInt aControlOffset = 0);

    /**
     * Get the buffer holding the generated report
     *
     * @since S60 v5.0
     * @return pointer to buffer
     */
    IMPORT_C TPtr8 Report();

private:
    /**
     * Constructor for CReportGenerator.
     *
     * @since S60 v5.0
     * @param aReportId Report ID of the report to generate.
     * @param aType Type of report to generate (output or feature).
     */
    CReportGenerator(TInt aReportId, CField::TType aType);

    /**
     * 2nd phase constructor for CReportGenerator.  Allocates the
     * report buffer iBuf.
     *
     * @since S60 v5.0
     * @param aReportRoot Tree generated by CParser from the report
     *                    descriptor.
     */
    void ConstructL(const CReportRoot* aReportRoot);

    /**
     * Report ID of the report to generate
     */
    TInt iReportId;

    /**
     * Type of report to generate
     */
    CField::TType iType;

    /**
     * Tree of fields from the report descriptor
     * Not own.
     */
    const CReportRoot* iReportRoot;

    /**
     * Buffer to hold the generated report
     * Own.
     */
    HBufC8* iBuf;
    };

#endif  // __REPORT_GENERATOR_H__