73 XsWinUsb::XsWinUsb(
void)
79 XsWinUsb::~XsWinUsb(
void)
81 delete m_libraryLoader;
84 void XsWinUsb::initLibrary()
86 if (!m_libraryLoader->isLoaded())
87 m_libraryLoader->load(
"winusb.dll");
89 m_winUsb.AbortPipe = NULL;
90 m_winUsb.Initialize = NULL;
92 m_winUsb.GetAssociatedInterface = NULL;
93 m_winUsb.GetDescriptor = NULL;
94 m_winUsb.QueryInterfaceSettings = NULL;
95 m_winUsb.QueryDeviceInformation = NULL;
96 m_winUsb.SetCurrentAlternateSetting = NULL;
97 m_winUsb.GetCurrentAlternateSetting = NULL;
98 m_winUsb.QueryPipe = NULL;
99 m_winUsb.SetPipePolicy = NULL;
100 m_winUsb.GetPipePolicy = NULL;
101 m_winUsb.ReadPipe = NULL;
102 m_winUsb.WritePipe = NULL;
103 m_winUsb.ControlTransfer = NULL;
104 m_winUsb.ResetPipe = NULL;
105 m_winUsb.AbortPipe = NULL;
106 m_winUsb.FlushPipe = NULL;
107 m_winUsb.SetPowerPolicy = NULL;
108 m_winUsb.GetPowerPolicy = NULL;
109 m_winUsb.GetOverlappedResult = NULL;
111 if (m_libraryLoader->isLoaded())
113 m_winUsb.AbortPipe = (WinUSB_AbortPipe*)m_libraryLoader->resolve(
"WinUsb_AbortPipe");
114 m_winUsb.Initialize = (WinUSB_Initialize*)m_libraryLoader->resolve(
"WinUsb_Initialize");
115 m_winUsb.Free = (WinUSB_Free*)m_libraryLoader->resolve(
"WinUsb_Free");
116 m_winUsb.GetAssociatedInterface = (WinUSB_GetAssociatedInterface*)m_libraryLoader->resolve(
"WinUsb_GetAssociatedInterface");
117 m_winUsb.GetDescriptor = (WinUSB_GetDescriptor*)m_libraryLoader->resolve(
"WinUsb_GetDescriptor");
118 m_winUsb.QueryInterfaceSettings = (WinUSB_QueryInterfaceSettings*)m_libraryLoader->resolve(
"WinUsb_QueryInterfaceSettings");
119 m_winUsb.QueryDeviceInformation = (WinUSB_QueryDeviceInformation*)m_libraryLoader->resolve(
"WinUsb_QueryDeviceInformation");
120 m_winUsb.SetCurrentAlternateSetting = (WinUSB_SetCurrentAlternateSetting*)m_libraryLoader->resolve(
"WinUsb_SetCurrentAlternateSetting");
121 m_winUsb.GetCurrentAlternateSetting = (WinUSB_GetCurrentAlternateSetting*)m_libraryLoader->resolve(
"WinUsb_GetCurrentAlternateSetting");
122 m_winUsb.QueryPipe = (WinUSB_QueryPipe*)m_libraryLoader->resolve(
"WinUsb_QueryPipe");
123 m_winUsb.SetPipePolicy = (WinUSB_SetPipePolicy*)m_libraryLoader->resolve(
"WinUsb_SetPipePolicy");
124 m_winUsb.GetPipePolicy = (WinUSB_GetPipePolicy*)m_libraryLoader->resolve(
"WinUsb_GetPipePolicy");
125 m_winUsb.ReadPipe = (WinUSB_ReadPipe*)m_libraryLoader->resolve(
"WinUsb_ReadPipe");
126 m_winUsb.WritePipe = (WinUSB_WritePipe*)m_libraryLoader->resolve(
"WinUsb_WritePipe");
127 m_winUsb.ControlTransfer = (WinUSB_ControlTransfer*)m_libraryLoader->resolve(
"WinUsb_ControlTransfer");
128 m_winUsb.ResetPipe = (WinUSB_ResetPipe*)m_libraryLoader->resolve(
"WinUsb_ResetPipe");
129 m_winUsb.AbortPipe = (WinUSB_AbortPipe*)m_libraryLoader->resolve(
"WinUsb_AbortPipe");
130 m_winUsb.FlushPipe = (WinUSB_FlushPipe*)m_libraryLoader->resolve(
"WinUsb_FlushPipe");
131 m_winUsb.SetPowerPolicy = (WinUSB_SetPowerPolicy*)m_libraryLoader->resolve(
"WinUsb_SetPowerPolicy");
132 m_winUsb.GetPowerPolicy = (WinUSB_GetPowerPolicy*)m_libraryLoader->resolve(
"WinUsb_GetPowerPolicy");
133 m_winUsb.GetOverlappedResult = (WinUSB_GetOverlappedResult*)m_libraryLoader->resolve(
"WinUsb_GetOverlappedResult");
144 BOOL XsWinUsb::Initialize(HANDLE DeviceHandle, PWINUSB_INTERFACE_HANDLE InterfaceHandle)
146 if (m_winUsb.Initialize)
147 return m_winUsb.Initialize(DeviceHandle, InterfaceHandle);
159 BOOL XsWinUsb::Free(WINUSB_INTERFACE_HANDLE InterfaceHandle)
162 return m_winUsb.Free(InterfaceHandle);
174 BOOL XsWinUsb::GetAssociatedInterface(WINUSB_INTERFACE_HANDLE InterfaceHandle, UCHAR AssociatedInterfaceIndex, PWINUSB_INTERFACE_HANDLE AssociatedInterfaceHandle)
176 if (m_winUsb.GetAssociatedInterface)
177 return m_winUsb.GetAssociatedInterface(InterfaceHandle, AssociatedInterfaceIndex, AssociatedInterfaceHandle);
193 BOOL XsWinUsb::GetDescriptor(WINUSB_INTERFACE_HANDLE InterfaceHandle, UCHAR DescriptorType, UCHAR Index, USHORT LanguageID, PUCHAR Buffer, ULONG BufferLength, PULONG LengthTransferred)
195 if (m_winUsb.GetDescriptor)
196 return m_winUsb.GetDescriptor(InterfaceHandle, DescriptorType, Index, LanguageID, Buffer, BufferLength, LengthTransferred);
213 BOOL XsWinUsb::QueryInterfaceSettings(WINUSB_INTERFACE_HANDLE InterfaceHandle, UCHAR AlternateInterfaceNumber, PUSB_INTERFACE_DESCRIPTOR UsbAltInterfaceDescriptor)
215 if (m_winUsb.QueryInterfaceSettings)
216 return m_winUsb.QueryInterfaceSettings(InterfaceHandle, AlternateInterfaceNumber, UsbAltInterfaceDescriptor);
231 BOOL XsWinUsb::QueryDeviceInformation(WINUSB_INTERFACE_HANDLE InterfaceHandle, ULONG InformationType, PULONG BufferLength, PVOID Buffer)
233 if (m_winUsb.QueryDeviceInformation)
234 return m_winUsb.QueryDeviceInformation(InterfaceHandle, InformationType, BufferLength, Buffer);
249 BOOL XsWinUsb::SetCurrentAlternateSetting(WINUSB_INTERFACE_HANDLE InterfaceHandle, UCHAR SettingNumber)
251 if (m_winUsb.SetCurrentAlternateSetting)
252 return m_winUsb.SetCurrentAlternateSetting(InterfaceHandle, SettingNumber);
265 BOOL XsWinUsb::GetCurrentAlternateSetting(WINUSB_INTERFACE_HANDLE InterfaceHandle, PUCHAR SettingNumber)
267 if (m_winUsb.GetCurrentAlternateSetting)
268 return m_winUsb.GetCurrentAlternateSetting(InterfaceHandle, SettingNumber);
291 BOOL XsWinUsb::QueryPipe(WINUSB_INTERFACE_HANDLE InterfaceHandle, UCHAR AlternateInterfaceNumber, UCHAR PipeIndex, PWINUSB_PIPE_INFORMATION PipeInformation)
293 if (m_winUsb.QueryPipe)
294 return m_winUsb.QueryPipe(InterfaceHandle, AlternateInterfaceNumber, PipeIndex, PipeInformation);
357 BOOL XsWinUsb::SetPipePolicy(WINUSB_INTERFACE_HANDLE InterfaceHandle, UCHAR PipeID, ULONG PolicyType, ULONG ValueLength, PVOID Value)
359 if (m_winUsb.SetPipePolicy)
360 return m_winUsb.SetPipePolicy(InterfaceHandle, PipeID, PolicyType, ValueLength, Value);
374 BOOL XsWinUsb::GetPipePolicy(WINUSB_INTERFACE_HANDLE InterfaceHandle, UCHAR PipeID, ULONG PolicyType, PULONG ValueLength, PVOID Value)
376 if (m_winUsb.GetPipePolicy)
377 return m_winUsb.GetPipePolicy(InterfaceHandle, PipeID, PolicyType, ValueLength, Value);
393 BOOL XsWinUsb::ReadPipe(WINUSB_INTERFACE_HANDLE InterfaceHandle, UCHAR PipeID, PUCHAR Buffer, ULONG BufferLength, PULONG LengthTransferred, LPOVERLAPPED Overlapped)
395 if (m_winUsb.ReadPipe)
396 return m_winUsb.ReadPipe(InterfaceHandle, PipeID, Buffer, BufferLength, LengthTransferred, Overlapped);
412 BOOL XsWinUsb::WritePipe(WINUSB_INTERFACE_HANDLE InterfaceHandle, UCHAR PipeID, PUCHAR Buffer, ULONG BufferLength, PULONG LengthTransferred, LPOVERLAPPED Overlapped)
414 if (m_winUsb.WritePipe)
415 return m_winUsb.WritePipe(InterfaceHandle, PipeID, Buffer, BufferLength, LengthTransferred, Overlapped);
434 BOOL XsWinUsb::ControlTransfer(WINUSB_INTERFACE_HANDLE InterfaceHandle, WINUSB_SETUP_PACKET SetupPacket, PUCHAR Buffer, ULONG BufferLength, PULONG LengthTransferred, LPOVERLAPPED Overlapped)
436 if (m_winUsb.ControlTransfer)
437 return m_winUsb.ControlTransfer(InterfaceHandle, SetupPacket, Buffer, BufferLength, LengthTransferred, Overlapped);
448 BOOL XsWinUsb::ResetPipe(WINUSB_INTERFACE_HANDLE InterfaceHandle, UCHAR PipeID)
450 if (m_winUsb.ResetPipe)
451 return m_winUsb.ResetPipe(InterfaceHandle, PipeID);
462 BOOL XsWinUsb::AbortPipe(WINUSB_INTERFACE_HANDLE InterfaceHandle, UCHAR PipeID)
464 if (m_winUsb.AbortPipe)
465 return m_winUsb.AbortPipe(InterfaceHandle, PipeID);
476 BOOL XsWinUsb::FlushPipe(WINUSB_INTERFACE_HANDLE InterfaceHandle, UCHAR PipeID)
478 if (m_winUsb.FlushPipe)
479 return m_winUsb.FlushPipe(InterfaceHandle, PipeID);
511 BOOL XsWinUsb::SetPowerPolicy(WINUSB_INTERFACE_HANDLE InterfaceHandle, ULONG PolicyType, ULONG ValueLength, PVOID Value)
513 if (m_winUsb.SetPowerPolicy)
514 return m_winUsb.SetPowerPolicy(InterfaceHandle, PolicyType, ValueLength, Value);
538 BOOL XsWinUsb::GetPowerPolicy(WINUSB_INTERFACE_HANDLE InterfaceHandle, ULONG PolicyType, PULONG ValueLength, PVOID Value)
540 if (m_winUsb.GetPowerPolicy)
541 return m_winUsb.GetPowerPolicy(InterfaceHandle, PolicyType, ValueLength, Value);
562 BOOL XsWinUsb::GetOverlappedResult(WINUSB_INTERFACE_HANDLE InterfaceHandle, LPOVERLAPPED lpOverlapped, LPDWORD lpNumberOfBytesTransferred,
BOOL bWait)
564 if (m_winUsb.GetOverlappedResult)
565 return m_winUsb.GetOverlappedResult(InterfaceHandle, lpOverlapped, lpNumberOfBytesTransferred, bWait);