261 lines
6.3 KiB
C
261 lines
6.3 KiB
C
#ifndef __LOCAL_H__
|
|
#define __LOCAL_H__
|
|
|
|
/*
|
|
// Define an index for each possible tag that is supported by generator.
|
|
// Keeping the order of GLOBAL, LOCAL, MAIN, OTHER is important since
|
|
// the state tables sizes are dependent on this order. However, they
|
|
// are not dependent on the number of items so new GLOBAL/LOCAL items
|
|
// can be added without causing problems as long as the definitions
|
|
// that follow the indices are properly maintained.
|
|
*/
|
|
|
|
#define TAG_INDEX_USAGE_PAGE 0x00
|
|
#define TAG_INDEX_LOGICAL_MIN 0x01
|
|
#define TAG_INDEX_LOGICAL_MAX 0x02
|
|
#define TAG_INDEX_PHYSICAL_MIN 0x03
|
|
#define TAG_INDEX_PHYSICAL_MAX 0x04
|
|
#define TAG_INDEX_UNIT 0x05
|
|
#define TAG_INDEX_EXPONENT 0x06
|
|
#define TAG_INDEX_REPORT_SIZE 0x07
|
|
#define TAG_INDEX_REPORT_COUNT 0x08
|
|
#define TAG_INDEX_REPORT_ID 0x09
|
|
#define TAG_INDEX_USAGE 0x0A
|
|
#define TAG_INDEX_USAGE_MIN 0x0B
|
|
#define TAG_INDEX_USAGE_MAX 0x0C
|
|
#define TAG_INDEX_DESIGNATOR_INDEX 0x0D
|
|
#define TAG_INDEX_DESIGNATOR_MIN 0x0E
|
|
#define TAG_INDEX_DESIGNATOR_MAX 0x0F
|
|
#define TAG_INDEX_STRING_INDEX 0x10
|
|
#define TAG_INDEX_STRING_MIN 0x11
|
|
#define TAG_INDEX_STRING_MAX 0x12
|
|
#define TAG_INDEX_INPUT 0x13
|
|
#define TAG_INDEX_OUTPUT 0x14
|
|
#define TAG_INDEX_FEATURE 0x15
|
|
#define TAG_INDEX_COLLECTION 0x16
|
|
#define TAG_INDEX_END_COLLECTION 0x17
|
|
#define TAG_INDEX_OPEN_DELIMITER 0x18
|
|
#define TAG_INDEX_CLOSE_DELIMITER 0x19
|
|
#define TAG_INDEX_PUSH 0x1A
|
|
#define TAG_INDEX_POP 0x1B
|
|
|
|
/*
|
|
// Definitions that are useful to files that use the above indices
|
|
*/
|
|
|
|
#define FIRST_GLOBAL_INDEX TAG_INDEX_USAGE_PAGE
|
|
#define LAST_GLOBAL_INDEX TAG_INDEX_REPORT_ID
|
|
|
|
#define FIRST_LOCAL_INDEX TAG_INDEX_USAGE
|
|
#define LAST_LOCAL_INDEX TAG_INDEX_STRING_MAX
|
|
|
|
#define FIRST_MAIN_INDEX TAG_INDEX_INPUT
|
|
#define LAST_MAIN_INDEX TAG_INDEX_END_COLLECTION
|
|
|
|
|
|
#define FIRST_OTHER_INDEX TAG_INDEX_OPEN_DELIMITER
|
|
#define LAST_OTHER_INDEX TAG_INDEX_POP
|
|
|
|
#define NUM_INDICES LAST_OTHER_INDEX+1
|
|
|
|
#define IS_COLLECTION(item) (MI_COLLECTION == (item) -> miType)
|
|
|
|
#ifndef __BINGEN_C__
|
|
|
|
extern HINSTANCE g_DLLInstance;
|
|
|
|
#endif
|
|
|
|
/*
|
|
// Function definitions that are local to the bingen.c file
|
|
*/
|
|
|
|
PMAIN_ITEM GenerateMainItem(void);
|
|
PMAIN_ITEM GenerateDataField(HIDP_REPORT_TYPE ReportType);
|
|
BOOL
|
|
GenerateData(
|
|
IN PMAIN_ITEM pMI
|
|
);
|
|
|
|
|
|
BOOL
|
|
GenerateArray(
|
|
IN PMAIN_ITEM pMI
|
|
);
|
|
|
|
|
|
BOOL
|
|
GenerateBufferedBytes(
|
|
IN PMAIN_ITEM pMI
|
|
);
|
|
|
|
BOOL
|
|
GenerateButtons(
|
|
IN PMAIN_ITEM pMI
|
|
);
|
|
|
|
PMAIN_ITEM GenerateCollection(BOOL IsApplication);
|
|
PMAIN_ITEM
|
|
GenerateConstant(
|
|
ULONG ConstantSize,
|
|
ULONG ReportID,
|
|
HIDP_REPORT_TYPE ReportType
|
|
);
|
|
|
|
void FreeReportStructure(PMAIN_ITEM pMI);
|
|
|
|
|
|
BOOL OutputDataField(PMAIN_ITEM pMI);
|
|
BOOL OutputCollection(PMAIN_ITEM pMI);
|
|
BOOL OutputReportStructure(PMAIN_ITEM pMI);
|
|
BOOL OutputItem(BYTE bItemIndex, BYTE bItemSize, DWORD dwItemValue);
|
|
|
|
DWORD
|
|
CreateDataBitField(
|
|
IN PMAIN_ITEM pMI
|
|
);
|
|
|
|
BOOL
|
|
OutputUsages(
|
|
IN USAGE CommonUsagePage,
|
|
IN PUSAGE_LIST UsageList,
|
|
IN ULONG UsageListLength
|
|
);
|
|
|
|
BOOL
|
|
AlignDataSizes(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
OpenApplCollection(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
CloseApplCollection(
|
|
VOID
|
|
);
|
|
|
|
|
|
ULONG
|
|
GetCollectionID(
|
|
VOID
|
|
);
|
|
|
|
BOOL
|
|
GetUsages(
|
|
IN ULONG UsageCount,
|
|
IN ULONG BitLimit,
|
|
IN BOOL UseExtendedUsages,
|
|
OUT PUSAGE CommonUsagePage,
|
|
OUT PULONG UsageListLength,
|
|
OUT PUSAGE_LIST *UsageList
|
|
);
|
|
|
|
BOOL
|
|
SearchForUsageDups(
|
|
IN PUSAGE_LIST MasterList,
|
|
IN ULONG MasterListLength,
|
|
IN PUSAGE_LIST Usage
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
ULONG SelectUlongNum(ULONG ulMin, ULONG ulMax);
|
|
long SelectLongNum(long lMin, long lMax);
|
|
BOOL IsTagDefinable(DWORD dwTagIndex);
|
|
BYTE DetermineLongSize(long lValue);
|
|
BYTE DetermineULongSize(ULONG ulValue);
|
|
|
|
BOOL
|
|
AlignData(
|
|
IN ULONG ReportID,
|
|
IN HIDP_REPORT_TYPE ReportType,
|
|
IN ULONG CurrOffset,
|
|
IN ULONG AlignOffset
|
|
);
|
|
|
|
BOOL
|
|
IsAlignmentPossible(
|
|
IN INT BitOffset,
|
|
IN ULONG ReportSize,
|
|
IN ULONG ReportCount,
|
|
OUT INT *GoodOffset
|
|
);
|
|
|
|
BOOL
|
|
IsAlignmentProblem(
|
|
IN INT BitOffset,
|
|
IN ULONG ReportSize,
|
|
IN ULONG ReportCount
|
|
);
|
|
|
|
BOOL
|
|
InitializeReportBuffer(
|
|
VOID
|
|
);
|
|
|
|
BOOL
|
|
ResizeReportBuffer(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
CountLinkCollNodes(
|
|
IN PMAIN_ITEM Collection,
|
|
OUT PUSHORT NumLinkCollNodes
|
|
);
|
|
|
|
VOID
|
|
CountValueAndButtonCaps(
|
|
IN PMAIN_ITEM Collection,
|
|
IN HIDP_REPORT_TYPE ReportType,
|
|
OUT PUSHORT NumValueCaps,
|
|
OUT PUSHORT NumButtonCaps
|
|
);
|
|
|
|
BOOL
|
|
BuildReportSizes(
|
|
IN PMAIN_ITEM Collection
|
|
);
|
|
|
|
BOOL
|
|
CalcReportLengths(
|
|
IN PMAIN_ITEM Collection,
|
|
OUT PUSHORT InputReportLength,
|
|
OUT PUSHORT OutputReportLength,
|
|
OUT PUSHORT FeatureReportLength
|
|
);
|
|
|
|
VOID
|
|
FillLinkNodes(
|
|
IN PMAIN_ITEM Collection,
|
|
IN PHIDP_LINK_COLLECTION_NODE NodeList,
|
|
IN USHORT FirstNodeIndex,
|
|
IN USHORT ParentIndex,
|
|
OUT PUSHORT NumFilled
|
|
);
|
|
|
|
VOID
|
|
FillButtonCaps(
|
|
IN PMAIN_ITEM Collection,
|
|
IN PUSHORT LinkCollNum,
|
|
IN HIDP_REPORT_TYPE ReportType,
|
|
IN PHIDP_BUTTON_CAPS ButtonCapsList,
|
|
OUT PUSHORT NumFilled
|
|
);
|
|
|
|
VOID
|
|
FillValueCaps(
|
|
IN PMAIN_ITEM Collection,
|
|
IN USHORT LinkCollNum,
|
|
IN HIDP_REPORT_TYPE ReportType,
|
|
IN PHIDP_VALUE_CAPS ValueCapsList,
|
|
OUT PUSHORT NumFilled
|
|
);
|
|
|
|
#endif
|