rendered paste bodyvoid HIDDevice::PrepareForOverlappedTransfer(HIDDevice & device, PSP_DEVICE_INTERFACE_DETAIL_DATA & detailData)
{
// Get a handle to the device for the overlapped ReadFiles.
device.m_read_handle = CreateFile (detailData->DevicePath, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE,
(LPSECURITY_ATTRIBUTES)NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
// Get an event object for the overlapped structure.
if (device.m_event_object == 0)
{
wstring empty = _T("");
device.m_event_object = CreateEvent (NULL, TRUE, TRUE, empty.c_str());
device.m_hid_overlapped.hEvent = device.m_event_object;
device.m_hid_overlapped.Offset = 0;
device.m_hid_overlapped.OffsetHigh = 0;
}
}
void HIDDevice::GetDeviceCapabilities(HIDDevice & device)
{
//Get the Capabilities structure for the device.
PHIDP_PREPARSED_DATA PreparsedData;
HidD_GetPreparsedData(device.m_device_handle, &PreparsedData);
HidP_GetCaps(PreparsedData, &device.m_capabilities);
HidD_FreePreparsedData(PreparsedData);
}
bool HIDDevice::WriteOutputReport(char out_bytes[])
{
char output_report[256];
DWORD bytes_written = 0;
ULONG result;
memcpy(output_report, out_bytes, 256);
if (m_write_handle != INVALID_HANDLE_VALUE)
result = WriteFile(m_write_handle, output_report, m_capabilities.OutputReportByteLength, &bytes_written, NULL);
if (!result)
{
return false; // If we can't write to the device, we're not really connected
} else {
return true;
}
}
//void HIDDevice::RegisterForDeviceNotifications(HIDDevice & device)
//{
//
// // Request to receive messages when a device is attached or removed.
// // Also see WM_DEVICECHANGE in BEGIN_MESSAGE_MAP(CUsbhidiocDlg, CDialog).
//
// DEV_BROADCAST_DEVICEINTERFACE DevBroadcastDeviceInterface;
// HDEVNOTIFY DeviceNotificationHandle;
//
// DevBroadcastDeviceInterface.dbcc_size = sizeof(DevBroadcastDeviceInterface);
// DevBroadcastDeviceInterface.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
// DevBroadcastDeviceInterface.dbcc_classguid = HidGuid;
//
// DeviceNotificationHandle =
// RegisterDeviceNotification(m_hWnd, &DevBroadcastDeviceInterface, DEVICE_NOTIFY_WINDOW_HANDLE);
//}