Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

118 lines
3.9 KiB

/*++
*
* Component: hidserv.dll
* File: hid.h
* Purpose: routines to send and receive hid reports.
*
* Copyright (C) Microsoft Corporation 1997,1998. All rights reserved.
*
* WGJ
--*/
#include "hidserv.h"
BOOL
UnpackReport (
IN PCHAR ReportBuffer,
IN USHORT ReportBufferLength,
IN HIDP_REPORT_TYPE ReportType,
IN OUT PHID_DATA Data,
IN ULONG DataLength,
IN PHIDP_PREPARSED_DATA Ppd
)
/*++
Routine Description:
--*/
{
ULONG numUsages; // Number of usages returned from GetUsages.
ULONG i;
for (i = 0; i < DataLength; i++, Data++) {
if (Data->IsButtonData) {
numUsages = Data->ButtonData.MaxUsageLength;
TRACE(("MaxUsageListLength (%d)", Data->ButtonData.MaxUsageLength));
Data->Status = HidP_GetUsages (
ReportType,
Data->UsagePage,
Data->LinkCollection,
(PUSAGE) Data->ButtonData.Usages,
&numUsages,
Ppd,
ReportBuffer,
ReportBufferLength);
if (HIDP_STATUS_SUCCESS != Data->Status){
TRACE(("HidP_GetUsages failed (%x)", Data->Status));
}
//
// Get usages writes the list of usages into the buffer
// Data->ButtonData.Usages newUsage is set to the number of usages
// written into this array.
// We assume that there will not be a usage of zero.
// (None have been defined to date.)
// So lets assume that a zero indicates an end of the list of usages.
//
TRACE(("numUsages (%d)", numUsages));
if (numUsages < Data->ButtonData.MaxUsageLength) {
Data->ButtonData.Usages[numUsages].Usage = 0;
Data->ButtonData.Usages[numUsages].UsagePage = 0;
}
} else {
Data->Status = HidP_GetUsageValue (
ReportType,
Data->UsagePage,
Data->LinkCollection,
Data->ValueData.Usage,
&Data->ValueData.Value,
Ppd,
ReportBuffer,
ReportBufferLength);
if (HIDP_STATUS_SUCCESS != Data->Status){
TRACE(("HidP_GetUsageValue failed (%x)", Data->Status));
TRACE(("Usage = %x", Data->ValueData.Usage));
}
Data->Status = HidP_GetScaledUsageValue (
ReportType,
Data->UsagePage,
Data->LinkCollection,
Data->ValueData.Usage,
&Data->ValueData.ScaledValue,
Ppd,
ReportBuffer,
ReportBufferLength);
if (HIDP_STATUS_SUCCESS != Data->Status){
TRACE(("HidP_GetScaledUsageValue failed (%x)", Data->Status));
TRACE(("Usage = %x", Data->ValueData.Usage));
}
}
}
return (HIDP_STATUS_SUCCESS);
}
BOOL
ParseReadReport (
PHID_DEVICE HidDevice
)
/*++
RoutineDescription:
Given a struct _HID_DEVICE, unpack the read report values
into to InputData array.
--*/
{
return UnpackReport (HidDevice->InputReportBuffer,
HidDevice->Caps.InputReportByteLength,
HidP_Input,
HidDevice->InputData,
HidDevice->InputDataLength,
HidDevice->Ppd);
}