shortlinkconn_plat/generic_hid_api/inc/hidfield.h
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:20:40 +0100
branchRCL_3
changeset 40 52a167391590
parent 0 c3e98f10fcf4
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* 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:  HID field descriptor definition
*
*/

#ifndef C_FIELD_H
#define C_FIELD_H


#include <e32base.h>


const TInt   KFieldAttributeConstant      = 1<<0;  //!< Data (0) or Constant (1)
const TInt   KFieldAttributeVariable      = 1<<1;  //!< Array (0) or Variable (1)
const TInt   KFieldAttributeRelative      = 1<<2;  //!< Absolute (0) or Relative (1)
const TInt   KFieldAttributeWrap          = 1<<3;  //!< No wrap (0) or Wrap (1)
const TInt   KFieldAttributeNonLinear     = 1<<4;  //!< Linear (0) or Non-linear (1)
const TInt   KFieldAttributeNoPreferred   = 1<<5;  //!< Preferred state (0) or not (1)
const TInt   KFieldAttributeNullState     = 1<<6;  //!< No null position (0) or null state (1)
const TInt   KFieldAttributeVolatile      = 1<<7;  //!< Non-volatile (0) or volatile (1)
const TInt   KFieldAttributeBufferedBytes = 1<<8;  //!< Bit field (0) or buffered bytes (1)
    
const TInt KSizeOfByte      = 8;
/**
 *  HID report field presentation
 *  Represents an individual field in a HID report, ie. the attributes
 *  of an input, output or feature Main item defined in the HID report
 *  descriptor.
 *
 *  The CField contains information such as the usage IDs sent in the
 *  the report, the type of the report (input, output or feature) and
 *  the logical range.
 *
 *
 *  @lib generichid.lib
 *  @since S60 v5.0
 */
class CField : public CBase
  {
public:
    enum TType
        {
        EInput,    //!< Input report
        EOutput,   //!< Output report
        EFeature   //!< Feature report
        };

    

public:
  static CField* NewL();
  static CField* NewLC();

  /**
   * Destructor.
   */
  virtual ~CField();

public:
  // Accessors:

  /**
   * Set Report root
   *
   * @since S60 v5.0
   * @return None
   */
  IMPORT_C TInt UsagePage() const;

  /**
   * Return report id
   *
   * @since S60 v5.0
   * @return report id
   */
  IMPORT_C TInt ReportId() const;

  /**
   * Return offset
   *
   * @since S60 v5.0
   * @return offset
   */
  IMPORT_C TInt Offset() const;

  /**
   * Return size
   *
   * @since S60 v5.0   
   * @return None
   */
  IMPORT_C TInt Size() const;

  /**
   * Return count
   *
   * @since S60 v5.0
   * @return count
   */
  IMPORT_C TInt Count() const;

  /**
   * Return logical minimium
   *
   * @since S60 v5.0
   * @return Logical minimium
   */
  IMPORT_C TInt LogicalMin() const;

  /**
   * Return logical maximum
   *
   * @since S60 v5.0   
   * @return logical maximum
   */
  IMPORT_C TInt LogicalMax() const;

  /**
   * Return usage min
   *
   * @since S60 v5.0
   * @return None
   */
  IMPORT_C TInt UsageMin() const;

  /**
   * Return usage max
   *
   * @since S60 v5.0   
   * @return usage max
   */
  IMPORT_C TInt UsageMax() const;

  /**
   * Return Physical minimum
   *
   * @since S60 v5.0
   * @return physical minimum
   */
  IMPORT_C TInt PhysicalMin() const;

  /**
   * Return Physical max
   *
   * @since S60 v5.0
   * @return return physical max
   */
  IMPORT_C TInt PhysicalMax() const;

  /**
   * Return unit
   *
   * @since S60 v5.0
   * @return Unit
   */
  IMPORT_C TInt Unit() const;

  /**
   * Return unit exponent
   *
   * @since S60 v5.0
   * @return unit exponent
   */
  IMPORT_C TInt UnitExponent() const;

  /**
   * Return Designator index
   *
   * @since S60 v5.0
   * @return Designator Index
   */
  IMPORT_C TInt DesignatorIndex() const;

  /**
   * Return designator minimium
   *
   * @since S60 v5.0
   * @return return designator index minimium
   */
  IMPORT_C TInt DesignatorMin() const;

  /**
   * Return designator maximium
   *
   * @since S60 v5.0
   * @return designator maximium
   */
  IMPORT_C TInt DesignatorMax() const;

  /**
   * Return string minimum
   *
   * @since S60 v5.0
   * @return None
   */
  IMPORT_C TInt StringMin() const;

  /**
   * Return string maximum
   *
   * @since S60 v5.0
   * @return string maximum
   */
  IMPORT_C TInt StringMax() const;

  /**
   * Return string index
   *
   * @since S60 v5.0
   * @return string index
   */
  IMPORT_C TInt StringIndex() const;

  /**
   * Return attributes
   *
   * @since S60 v5.0
   * @return attributes
   */
  IMPORT_C TUint32 Attributes() const;

  /**
   * Return type
   *
   * @since S60 v5.0
   * @return type
   */
  IMPORT_C TType Type() const;

  /**
   * Return variable status
   *
   * @since S60 v5.0
   * @return variable status
   */
  IMPORT_C TBool IsVariable() const;

  /**
   * Return array status
   *
   * @since S60 v5.0
   * @return arrau status
   */
  IMPORT_C TBool IsArray() const;

  /**
   * Return data status
   *
   * @since S60 v5.0
   * @return data status
   */
  IMPORT_C TBool IsData() const;

  /**
   * Return constant status
   *
   * @since S60 v5.0
   * @return constant status
   */
  IMPORT_C TBool IsConstant() const;

  /**
   * Return input status
   *
   * @since S60 v5.0
   * @return input status
   */
  IMPORT_C TBool IsInput() const;

  /**
   * Return output status
   *
   * @since S60 v5.0
   * @return None
   */
  IMPORT_C TBool IsOutput() const;

  /**
   * Return feature status
   *
   * @since S60 v5.0
   * @return feature status
   */
  IMPORT_C TBool IsFeature() const;

  /**
   * Check if reportid is in report
   *
   * @since S60 v5.0
   * @param aReportId report id
   * @return true if reportid is in report
   */
  IMPORT_C TBool IsInReport(TInt aReportId) const;

  /**
   * Check if usage exsist
   *
   * @since S60 v5.0
   * @param aUsage Usage id
   * @return None
   */
  IMPORT_C TBool HasUsage(TInt aUsage) const;

  /**
   * Return usage array
   *
   * @since S60 v5.0
   * @return usage array
   */
  IMPORT_C TArray<TInt> UsageArray() const;

  /**
   * Return usage
   *
   * @since S60 v5.0
   * @param aIndex usage array index
   * @return usage
   */
  IMPORT_C TInt Usage(TInt aIndex) const;

  /**
   * Return usage count
   *
   * @since S60 v5.0
   * @return usage count
   */
  IMPORT_C TInt UsageCount() const;

  /**
   * Return last usage
   *
   * @since S60 v5.0
   * @return last usage
   */
  IMPORT_C TInt LastUsage() const;

  /**
   * Set type
   *
   * @since S60 v5.0
   * @param aType type of field
   * @return None
   */
  IMPORT_C void SetType(const TType& aType);

  /**
   * Add usage
   *
   * @since S60 v5.0
   * @param aUsage usage to be added
   * @return None
   */
  IMPORT_C void AddUsageL(TInt aUsage);

  /**
   * Clear usage list
   *
   * @since S60 v5.0
   * @return None
   */
  IMPORT_C void ClearUsageList();

  /**
   * Set usage page
   *
   * @since S60 v5.0
   * @param aUsagePage usagepage to be set
   * @return None
   */
  IMPORT_C void SetUsagePage(TInt aUsagePage);

  /**
   * Set offset
   *
   * @since S60 v5.0
   * @param aOffset offset to be set
   * @return None
   */
  IMPORT_C void SetOffset(TInt aOffset);

  /**
   * Set size
   *
   * @since S60 v5.0
   * @param aSize size to be set
   * @return None
   */
  IMPORT_C void SetSize(TInt aSize);

  /**
   * Set count
   *
   * @since S60 v5.0
   * @param aCount Count to be set
   * @return None
   */
  IMPORT_C void SetCount(TInt aCount);

  /**
   * Set logical minimium
   *
   * @since S60 v5.0
   * @param aMin Logical minimium to be set
   * @return None
   */
  IMPORT_C void SetLogicalMin(TInt aMin);

  /**
   * Set logical maximum
   *
   * @since S60 v5.0
   * @param aMax logical maximum to be used
   * @return None
   */
  IMPORT_C void SetLogicalMax(TInt aMax);

  /**
   * Set usage min
   *
   * @since S60 v5.0
   * @param aMin  usage minimium to be set.
   * @return None
   */
  IMPORT_C void SetUsageMin(TInt aMin);

  /**
   * Set usage maximum
   *
   * @since S60 v5.0
   * @param aMax usage max to be set
   * @return None
   */
  IMPORT_C void SetUsageMax(TInt aMax);

  /**
   * Set Report ID
   *
   * @since S60 v5.0
   * @param aReportId report id to be set
   * @return None
   */
  IMPORT_C void SetReportId(TInt aReportId);

  /**
   * Set attributes
   *
   * @since S60 v5.0
   * @param aAttributes attributes to be set
   * @return None
   */
  IMPORT_C void SetAttributes(TUint32 aAttributes);

  /**
   * Set physical minimium
   *
   * @since S60 v5.0
   * @param aValue physical minimium value
   * @return None
   */
  IMPORT_C void SetPhysicalMin(TInt aValue);

  /**
   * Set Physical maximum
   *
   * @since S60 v5.0
   * @param aValue physical maximum value
   * @return None
   */
  IMPORT_C void SetPhysicalMax(TInt aValue);

  /**
   * Set unit value
   *
   * @since S60 v5.0
   * @param aValue unit value
   * @return None
   */
  IMPORT_C void SetUnit(TInt aValue);

  /**
   * Set unit exponent
   *
   * @since S60 v5.0
   * @param aValue unit exponent valut to be set
   * @return None
   */
  IMPORT_C void SetUnitExponent(TInt aValue);

  /**
   * Set Designator index
   *
   * @since S60 v5.0
   * @param aValue Designator index value
   * @return None
   */
  IMPORT_C void SetDesignatorIndex(TInt aValue);

  /**
   * Set designator minimium
   *
   * @since S60 v5.0
   * @param aValue designator minimum value
   * @return None
   */
  IMPORT_C void SetDesignatorMin(TInt aValue);

  /**
   * Set designator maximium value
   *
   * @since S60 v5.0
   * @param aValue designator maximium value
   * @return None
   */
  IMPORT_C void SetDesignatorMax(TInt aValue);

  /**
   * Set string minimium value
   *
   * @since S60 v5.0
   * @param aValue string minimium value
   * @return None
   */
  IMPORT_C void SetStringMin(TInt aValue);

  /**
   * Set string maximum value
   *
   * @since S60 v5.0
   * @param aValue string maximum value to be set
   * @return None
   */
  IMPORT_C void SetStringMax(TInt aValue);

  /**
   * Set string index
   *
   * @since S60 v5.0
   * @param aValue string index
   * @return None
   */
  IMPORT_C void SetStringIndex(TInt aValue);

  /**
   * Set Logical range
   *
   * @since S60 v5.0
   * @param aMin logical range minimium value
   * @param aMax logical range maximum value
   * @return None
   */
  IMPORT_C void SetLogicalRange(TInt aMin, TInt aMax);

  /**
   * Set Usage range
   *
   * @since S60 v5.0
   * @param aMin usage range minimium value
   * @param aMax usage range maximum value
   * @return None
   */
  IMPORT_C void SetUsageRange(TInt aMin, TInt aMax);

  /**
   * Set Physical range
   *
   * @since S60 v5.0
   * @param aMin physical range minimium value
   * @param aMax physical range maximum value
   * @return None
   */
  IMPORT_C void SetPhysicalRange(TInt aMin, TInt aMax);

  /**
   * Set string range
   *
   * @since S60 v5.0
   * @param aMin string range minimium value
   * @param aMax string range maximum value
   * @return None
   */
  IMPORT_C void SetStringRange(TInt aMin, TInt aMax);

  /**
   * Set designator range
   *
   * @since S60 v5.0
   * @param aMin designator range minimium value
   * @param aMax designator range maximum value
   * @return None
   */
  IMPORT_C void SetDesignatorRange(TInt aMin, TInt aMax);

private:
  CField();

  

private:

  /**
   * Input, output or feature report
   */
  TType iType;

  // For a detailed description of the use of the following members,
  // see "USB Device Class Definition for Human Interface Devices
  // (HID)", Firmware Specification, Version 1.11, USB Implementers'
  // Forum, June 2001.

  /**
   * The usage page this field is associated with (G)
   */
  TInt iUsagePage;

  /**
   * ID for the HID report containing this field (G)
   */
  TInt iReportId;

  /**
   * Field offset (in bits) from start of report
   */
  TInt iPos;

  /**
   * Bit size of each item in the current field (G)
   */
  TInt iSize;

  /**
   * Number of items in the report field (G)
   */
  TInt iCount;

  /**
   * Minimum extent value in logical units (G)
   */
  TInt iLogicalMin;

  /**
   * Maximum extent value in logical units (G)
   */
  TInt iLogicalMax;

  /**
   * Starting usage associated with array / bitmap (L)
   */
  TInt iUsageMin;

  /**
   * Ending usage associated with array / bitmap (L)L)
   */
  TInt iUsageMax;

  /**
   * Unit value (G)
   */
  TInt iUnit;

  /**
   * Value of the unit exponent in base 10 (G)
   */
  TInt iUnitExponent;

  /**
   * Body part used for a control (L)
   */
  TInt iDesignatorIndex;

  /**
   * String associated with a control (L)
   */
  TInt iStringIndex;

  /**
   * Minimum physical extent for a variable item (G)
   */
  TInt iPhysicalMin;

  /**
   * Maximum physical extent for a variable item (G)
   */
  TInt iPhysicalMax;

  /**
   * First string index for a group of strings (L)
   */
  TInt iStringMin;

  /**
   * Last string index for a group of strings (L)
   */
  TInt iStringMax;

  /**
   * Starting designator index (L)
   */
  TInt iDesignatorMin;

  /**
   * Ending designator index (L)
   */
  TInt iDesignatorMax;

  /**
   * Flags associated with a main item (e.g. "array")
   */
  TUint32 iAttributes;

  /**
   * The usage indexes associated with this field (G)
   */
  RArray<TInt> iUsageList;

  // (G) = Global item
  // (L) = Local item
  };

#endif