From 1dbbf862a15efbe55f902d138b143510b8df0acd Mon Sep 17 00:00:00 2001 From: Christian Kienreich Date: Wed, 25 Sep 2024 08:19:15 +0200 Subject: [PATCH] Fix issue with sending output report --- see issue #85 --- pywinusb/hid/core.py | 39 ++++----------------------------------- 1 file changed, 4 insertions(+), 35 deletions(-) diff --git a/pywinusb/hid/core.py b/pywinusb/hid/core.py index c98501a..27891ad 100644 --- a/pywinusb/hid/core.py +++ b/pywinusb/hid/core.py @@ -531,40 +531,9 @@ def send_output_report(self, data): raw_data[index] = data[index] else: raw_data = data - # - # Adding a lock when writing (overlapped writes) - over_write = winapi.OVERLAPPED() - over_write.h_event = winapi.CreateEvent(None, 0, 0, None) - if over_write.h_event: - try: - overlapped_write = over_write - winapi.WriteFile(int(self.hid_handle), byref(raw_data), len(raw_data), - None, byref(overlapped_write)) #none overlapped - error = ctypes.GetLastError() - if error == winapi.ERROR_IO_PENDING: - # overlapped operation in progress - result = error - elif error == 1167: - raise HIDError("Error device disconnected before write") - else: - raise HIDError("Error %d when trying to write to HID "\ - "device: %s"%(error, ctypes.FormatError(error)) ) - result = winapi.WaitForSingleObject(overlapped_write.h_event, 10000 ) - if result != winapi.WAIT_OBJECT_0: - # If the write times out make sure to - # cancel it, otherwise memory could - # get corrupted if the async write - # completes after this functions returns - winapi.CancelIo( int(self.hid_handle) ) - raise HIDError("Write timed out") - finally: - # Make sure the event is closed so resources aren't leaked - winapi.CloseHandle(over_write.h_event) - else: - return winapi.WriteFile(int(self.hid_handle), byref(raw_data), - len(raw_data), - None, None) #none overlapped - return True #completed + + return hid_dll.HiD_SetOutputReport(int(self.hid_handle), byref(raw_data), + len(raw_data)) def send_feature_report(self, data): """Send input/output/feature report ID = report_id, data should be a @@ -582,7 +551,7 @@ def send_feature_report(self, data): raw_data = data return hid_dll.HidD_SetFeature(int(self.hid_handle), byref(raw_data), - len(raw_data)) + len(raw_data)) def __reset_vars(self): """Reset vars (for init or gc)"""