this is the Peter Barrett USBHostShell program, a bit modified for being a bit more talkactive, just to let u know how the USB protocol layer is going on, and all the data trasnfers. Also there is a small implementation of HID descriptors, but not functional... yet :S the aim is to at least implement the gamepad HID, and make an array of function pointer to each HID function

Dependencies:   mbed

HID.h

Committer:
Sergio
Date:
2010-09-13
Revision:
0:e1e03118b8fe

File content as of revision 0:e1e03118b8fe:


#ifndef HID_H
#define HID_H

#include "USBHost.h"

#ifndef u8
typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned long u32;

typedef char s8;
typedef short s16;
typedef char s32;
#endif




enum mode{ INPUT=0x81, OUTPUT=0x91, FEATURE=0xB1};

typedef struct
{
 u8 Usage;
 u8 LocalMinimun;
 u16 LocalMaximun;
 u8 ReportCount;
 u8 ReportSize;
 mode coll_mode; //INPUT/OUTPUT//FEATURE.
 u8 mode_value; 
}Report;

typedef struct
{
u8 numberofreports;
Report* pFirstReport;
//All the reports must be allocated in an array
//so they can be accessed easily.
}Collection;

///////////////////////////////////////////////////////////////////////



/* 
 * Constants
 */
 #define PATH_SIZE               10 
 #define USAGE_TAB_SIZE          50 
 #define MAX_REPORT             300
 #define REPORT_DSC_SIZE       6144

 #define SIZE_0                0x00
 #define SIZE_1                0x01
 #define SIZE_2                0x02
 #define SIZE_4                0x03
 #define SIZE_MASK             0x03


 #define TYPE_MAIN             0x00
 #define TYPE_GLOBAL           0x04
 #define TYPE_LOCAL            0x08
 #define TYPE_MASK             0x0C
 
/* Main items */
 #define ITEM_COLLECTION       0xA0
 #define ITEM_END_COLLECTION   0xC0
 #define ITEM_FEATURE          0xB0
 #define ITEM_INPUT            0x80
 #define ITEM_OUTPUT           0x90


 /* Global items */
 #define ITEM_UPAGE            0x04
 #define ITEM_LOG_MIN          0x14
 #define ITEM_LOG_MAX          0x24
 #define ITEM_PHY_MIN          0x34
 #define ITEM_PHY_MAX          0x44
 #define ITEM_UNIT_EXP         0x54
 #define ITEM_UNIT             0x64
 #define ITEM_REP_SIZE         0x74
 #define ITEM_REP_ID           0x84
 #define ITEM_REP_COUNT        0x94
 
 /* Local items */
 #define ITEM_USAGE            0x08
 #define ITEM_STRING           0x78
 
 /* Long item */
 #define ITEM_LONG       0xFC
 
 #define ITEM_MASK             0xFC
 
 /* Attribute Flags */
 #define ATTR_DATA_CST         0x01
 #define ATTR_NVOL_VOL         0x80
 


typedef struct
{
u8 UPage;
u8 Usage;
}HIDNode;

typedef struct
{
 u8 Size;
 HIDNode Node[PATH_SIZE];
 }HIDPath;
 

typedef struct
{
    u32 Value;
    HIDPath Path;
    u8 ReportID;
    u8 Offset;
    u8 Size;
    u8 Type;
    u8 Attribute;
    u32 Unit;
    u8 UnitExp;
    u32 LogMin;
    u32 LogMax;
    u32 PhyMin;
    u32 PhyMax;
    } HIDData;

typedef struct
{
 u8 ReportDesc[REPORT_DSC_SIZE];
 u8 ReportDescSize;
 u8 Pos;
 u8 Item;
 u32 Value;
 HIDData Data;
 u8 OffsetTab[MAX_REPORT][3];
 u8 ReportCount;
 u8 Count;
 u8 UPage;
 HIDNode UsageTab[USAGE_TAB_SIZE];
 u8 UsageSize;
 u8 nObject;
 u8 nReport;
 } HIDParser;
 


int HIDParse(HIDParser* pParser,HIDData* pData);
void ResetParser(HIDParser* pParser);
int FindObject(HIDParser* pParser, HIDData* pData);
void GetValue(const u8* Buff, HIDData* pData);
void SetValue(const HIDData* pData, u8* Buf);
u8* GetReportOffset(HIDParser* pParser, const u8 ReportID, const u8 ReportType);








#endif