I have a function named read_async() which reads data from usb and returns a dictionary. When read data not completed "bytes_returned" returns 0. When read data completed "bytes_returned" return not zero.
I want use observer to when read data completed we can removal data.
How can I do that?
def read_async(self, read_chunk) -> dict:
"""Read data asynchronous"""
async_data = {
"bytes_returned": wintypes.DWORD(),
"buffer": (c_byte * read_chunk)(),
"ov": OVERLAPPED()
}
if (si_status := self.SI_Read(self.handle, byref(async_data["buffer"]),
read_chunk, byref(async_data["bytes_returned"]), byref(async_data["ov"]))) != SI_STATUS.SI_IO_PENDING:
print("read error:", si_status)
return None
# ret = ctypes.windll.kernel32.GetOverlappedResult(self.handle, byref(ov), byref(bytes_to_read), self.INFINITE)
return async_data