/******************************************************************************* ** ** MODULE: "DT.H". ** ** ** DESCRIPTION: Include file for DT.C. ** ** ** AUTHOR: Daniel Dean, John Pierce. ** ** ** ** CREATED: ** ** ** ** ** (C) C O P Y R I G H T D A N I E L D E A N 1 9 9 6. *******************************************************************************/ #ifndef __DT_H__ #define __DT_H__ #define SUCCESS 0 #define FAILURE 1 #define EXITERROR -1 #define IDM_PAGES (WM_USER + 2371) #define APPCLASS "DT" #define APPTITLE "HID Report Descriptor Tool" #define MAIN_ICON "DT" #define BACKGROUND_BRUSH COLOR_MENU+1//RGB(128,128,128) #define DEBUGSTOP _asm int 3 #define WM_RESTORE (WM_USER +1763) LRESULT WINAPI WndProc(HWND, UINT, WPARAM, LPARAM); #define ITEM(x, y) (x | y) #define ITEM_SIZE_MASK 0x3 #define ITEM_TAG_MASK 0xFC #define MAX_DESC_ENTRY 64 // Max characters for a descriptor entry in the list box // Entity item tags #define COLLECTION 0xA0 #define END_COLLECTION 0xC0 #define INPUT 0x80 #define OUTPUT 0x90 #define FEATURE 0xB0 // Entity Attribute item tags #define USAGE_PAGE 0x04 #define LOGICAL_EXTENT_MIN 0x14 #define LOGICAL_EXTENT_MAX 0x24 #define PHYSICAL_EXTENT_MIN 0x34 #define PHYSICAL_EXTENT_MAX 0x44 #define UNIT_EXPONENT 0x54 #define UNIT 0x64 #define REPORT_SIZE 0x74 #define REPORT_ID 0x84 #define REPORT_COUNT 0x94 #define PUSH 0xA4 #define POP 0xB4 // Control attribute item tags #define USAGE 0x08 #define USAGE_MIN 0x18 #define USAGE_MAX 0x28 #define DESIGNATOR_INDEX 0x38 #define DESIGNATOR_MIN 0x48 #define DESIGNATOR_MAX 0x58 #define STRING_INDEX 0x68 #define STRING_MIN 0x78 #define STRING_MAX 0x88 #define SET_DELIMITER 0xA9 // A bogus item tag #define UNDEFINED_TAG 0xFF // Bit masks #define DATA_SIZE_MASK 0x03 // Flag used by AddString() to indicate we insert at index gotten // from LB_GETCURSEL #define DONT_CARE -1 // // ID's for popup memnu #define IDM_INSERT 0x9000 #define IDM_ADD 0x9001 #define IDM_DELETE 0x9002 // // Structure created in the GetXXXVal() functions below and stored // in the ITEMDATA area for the list box member associated with the // hex representation of a Descriptor Entity. typedef struct tagItemStruct{ BYTE bTag; // the built up tag BYTE bParam[4]; // up to 4 bytes of parameter info }ITEM_INFO,* PITEM_INFO; typedef struct tagDeviceInfo{ ULONG nDeviceID; // Number appended to device string in reg ULONG hDevice; // Handle of the device }DEVICEINFO,*PDEVICEINFO; // // Maximum data bytes in a packet #define MAX_DATA 10 // // Structure defining a packet sent to the SendData IOCTL // typedef struct tagSendData{ ULONG hDevice; BYTE bData[MAX_DATA]; }SENDDATA_PACKET, *PSENDDATA_PACKET; typedef struct _LAVAConfigIndexInfo{ WORD wStartOffset; WORD wHIDLen; WORD wReportLen; WORD wPhysicalLen; } LAVA_CONFIG,*PLAVA_CONFIG; // // Globals // #ifdef DEFINE_GLOBALS HANDLE ghInst = NULL; HWND ghWnd = NULL; PCHAR szEntity[] = {"USAGE", // 0 "USAGE_PAGE", // 1 "USAGE_MINIMUM", // 2 "USAGE_MAXIMUM", // 3 "DESIGNATOR_INDEX", // 4 "DESIGNATOR_MINIMUM", // 5 "DESIGNATOR_MAXIMUM", // 6 "STRING_INDEX", // 7 "STRING_MINIMUM", // 8 "STRING_MAXIMUM", // 9 "COLLECTION", // 10 "END_COLLECTION", // 11 "INPUT", // 12 "OUTPUT", // 13 "FEATURE", // 14 "LOGICAL_MINIMUM", // 15 "LOGICAL_MAXIMUM", // 16 "PHYSICAL_MINIMUM", // 17 "PHYSICAL_MAXIMUM", // 18 "UNIT_EXPONENT", // 19 "UNIT", // 20 "REPORT_SIZE", // 21 "REPORT_ID", // 22 "REPORT_COUNT", // 23 "PUSH", // 24 "POP", // 25 "SET_DELIMITER", // 26 "UNDEFINED_TAG"}; // 27 UCHAR Entity[] = {USAGE, USAGE_PAGE, USAGE_MIN, USAGE_MAX, DESIGNATOR_INDEX, DESIGNATOR_MIN, DESIGNATOR_MAX, STRING_INDEX, STRING_MIN, STRING_MAX, COLLECTION, END_COLLECTION, INPUT, OUTPUT, FEATURE, LOGICAL_EXTENT_MIN, LOGICAL_EXTENT_MAX, PHYSICAL_EXTENT_MIN, PHYSICAL_EXTENT_MAX, UNIT_EXPONENT, UNIT, REPORT_SIZE, REPORT_ID, REPORT_COUNT, PUSH, POP, SET_DELIMITER, UNDEFINED_TAG}; #define ENTITY_INDEX 27 UINT gEditVal=0; // Value returned from EditBox BYTE gCollectionVal=0; // Value returned from Collection dialog WORD gUnitVal=0; // Value returned from Unit dialog BYTE gExpVal=0; // Value returned from Exponent dialog BYTE gUsagePageVal=0; // Value returned from UsagePage dialog BYTE gSetDelimiterVal=0; // Value returned from GetSetDelimiter dialog WORD gMainItemVal=0; // Value returned from Input dialog int gfInsert = FALSE; // Flag to tell whether we insert ot add strings // to the ListBoxes WORD gwReportDescLen=0; // Length in bytes of the ReportDescriptor; #else extern HANDLE ghInst; extern HWND ghWnd; extern PCHAR szEntity[]; extern UCHAR Entity[]; extern int gEditVal; extern BYTE gCollectionVal; extern WORD gUnitVal; extern BYTE gExpVal; extern BYTE gUsagePageVal; extern BYTE gSetDelimiterVal; extern WORD gMainItemVal; extern int gfInsert; extern WORD gwReportDescLen; #endif //////////////////////////////////////////////////////////////////////////////// // // Function Proto's // LPARAM WINAPI WindowProc(HWND hWnd, UINT Message, UINT uParam, LPARAM lParam); LPARAM WMCommand(HWND hWnd, UINT Message, UINT uParam, LPARAM lParam); LPARAM WMSysCommand(HWND hWnd, UINT Message, UINT uParam, LPARAM lParam); LPARAM WMCreate(HWND hWnd, UINT uParam); LPARAM WMClose(HWND hWnd); LPARAM WMSize(HWND hWnd, LPARAM lParam); int SendHIDDescriptor(PUCHAR pHID, PULONG pSize, DWORD *pDevID, ULONG *pDevHandle); ULONG SendHIDData(SENDDATA_PACKET *pPacket, ULONG SizeIn, DWORD *pSizeOut) ; ULONG KillHIDDevice(SENDDATA_PACKET *pPacket); LPARAM WMPaint(HWND hWnd, UINT Message, UINT uParam, LPARAM lParam); INT WMKey(HWND hWnd, UINT Message, UINT uParam, LPARAM lParam); VOID MoveEntityItems(VOID); BOOL WindowRegistration(HANDLE hInstance, HANDLE hPrevInstance); BOOL WINAPI SendDataDlgProc( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam); LPARAM WINAPI ListBoxWindowProc(HWND hWnd, UINT Message, UINT uParam, LPARAM lParam); void DoFileOpen(HANDLE); void DoFileSave(HANDLE); void DoFilePrint(HANDLE); void WriteLavaConfigFile(HANDLE,UINT); void DoCopyDescriptor(HANDLE hWnd); void DoParseDescriptor(HANDLE hWnd); // Dialog box proc proto's BOOL CALLBACK EditBoxDlgProc( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam); BOOL CALLBACK CollectionDlgProc( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam); BOOL CALLBACK MainItemDlgProc( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam); BOOL CALLBACK UnitDlgProc( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam); BOOL CALLBACK ExponentDlgProc( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam); BOOL CALLBACK UsagePageDlgProc( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam); BOOL CALLBACK SetDelimiterDlgProc( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam); LRESULT AddString(HANDLE hListBox,char * szString); void GetBogusVal( HANDLE,int); void GetUsageVal( HANDLE,int ); void GetUsagePageVal( HANDLE,int ); void GetInputFromEditBoxSigned( HANDLE,int ); void GetInputFromEditBoxUnSigned( HANDLE,int ); void GetCollectionVal( HANDLE,int ); void GetEndCollectionVal( HANDLE,int ); void GetInputVal( HANDLE,int ); void GetOutputVal( HANDLE,int ); void GetFeatVal( HANDLE,int ); void GetExponentVal( HANDLE,int ); void GetUnitsVal( HANDLE,int ); void GetPushVal( HANDLE,int ); void GetPopVal( HANDLE,int ); void GetSetDelimiterVal( HANDLE hDescListBox, int nEntity); #endif// __DT_H__