0

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
quamrana
  • 33,740
  • 12
  • 54
  • 68

0 Answers0