diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/inc/hiditem.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/inc/hiditem.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,198 @@ +/* +* 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 T_ITEM_H +#define T_ITEM_H + +#include + +/** + * HID item class + * A HID report descriptor is comprised of a sequence of "items" + * that provide information about the device. Items consist of a + * header and zero or more bytes of data. The header contains the item + * type (main/global/local), an item "tag" (subtype) and the item size. + * Items can be "short" (containing a maximum of 4 bytes of data) or + * "long" (a maximum of 255 bytes of data). + + * A TItem represents a single HID report descriptor item. It is + * constructed from an eight bit non-modifiable (Symbian-) descriptor, + * which is assumed to contain report (HID-) descriptor data. + * + * @lib generichid.lib + * @since S60 v5.0 + */ +class TItem + { +public: + /** + * The possible item types: main, global or local. Item type is + * a two-bit field -- the 11b value is reserved for "long items", which + * are only used for vendor-specific commands. + */ + enum TItemType + { + EMain = 0, //!< Input, output, feature and begin or end collection + EGlobal = 1, //!< Global item items affect all subsequent fields + ELocal = 2, //!< Local items only persist until the next main item + EReserved = 3 //!< No defined use in the current HID standard (v1.11) + }; + +public: + + /** + * The constructor takes a an eight bit non-modifiable (Symbian-) + * descriptor containing report (HID-) descriptor data. + * The item tag, type, data size and offset are calculated here. + * + * @since S60 v5.0 + * @param aRawData The raw item data, represented as a Symbian + * descriptor. The item data is assumed to be at the beginning of the + * descriptor. The size of the TDesC8 may be greater than the size + * of the item, as the item size will be calculated from the raw HID + * descriptor data. Of course, the TDesC8 should be at least as + * long as the raw item data. + */ + TItem(const TDesC8& aRawData); + + /** + * DataSize() returns the size of the item data in bytes. This + * is the total item size minus the size of any header information. + * (A short item header is a single byte, a long item header is + * three bytes long.) + * + * @since S60 v5.0 + * @return The size, in bytes, of the item data. Range 0-255. + */ + TInt DataSize() const; + + /** + * Tag() returns the tag (subtype) value for this item. + * + * @since S60 v5.0 + * @return The item tag. + */ + TInt Tag() const; + + /** + * Data() returns the data associated with the item, represented as a + * 32-bit unsigned integer. This is only meaningful if the data length + * is less than 4 bytes. + * + * @since S60 v5.0 + * @return The item data as a 32-bit unsigned integer. + */ + TUint32 Data() const; + + /** + * SignedData() returns the data associated with the item, + * represented as a 32-bit signed integer. This is only + * meaningful if the data length is less than 4 bytes. + * + * @since S60 v5.0 + * @return The item data as a 32-bit signed integer. + */ + TInt32 SignedData() const; + + /** + * Returns the byte at the given offset within the item data block. + * + * @since S60 v5.0 + * @param aIndex The index within the data block for the current tag. + * @return The data at the specified index. + */ + TUint8 operator[](TInt aIndex) const; + + /** + * Type() returns the item type (e.g. "global"). + * + * @since S60 v5.0 + * @return The item type. + */ + TItemType Type() const; + + /** + * Check if item is main + * + * @since S60 v5.0 + * @return ETrue if item type is "main" + */ + TBool IsMain() const; + + /** + * Check if item is local + * + * @since S60 v5.0 + * @return ETrue if item type is "local" + */ + TBool IsLocal() const; + + /** + * Check if item is global + * + * @since S60 v5.0 + * @return ETrue if item type is "global" + */ + TBool IsGlobal() const; + + /** + * Check if item is global + * + * @since S60 v5.0 + * @return ETrue if this is a long item + */ + TBool IsLong() const; + + /** + * ItemSize() returns the total size of this item, including the + * header data. + * + * @since S60 v5.0 + * @return The total size of this item, in bytes. + */ + TInt ItemSize() const; + +private: + /** + * Pointer to the raw report descriptor data + */ + TPtrC8 iRawData; + + /** + * Item data size + */ + + TInt iSize; + /** + * Item tag value + */ + TInt iTag; + + /** + * Offset in bytes of the data block + */ + TInt iDataOffset; + + /** + * Item type + */ + TItemType iType; + }; + +#endif +