Exemplo n.º 1
0
 def read(self, size=1):
     """\
     Read size bytes from the serial port. If a timeout is set it may
     return less characters as requested. With no timeout it will block
     until the requested number of bytes is read.
     """
     if not self.is_open:
         raise portNotOpenError
     if size > 0:
         win32.ResetEvent(self._overlapped_read.hEvent)
         flags = win32.DWORD()
         comstat = win32.COMSTAT()
         if not win32.ClearCommError(self._port_handle, ctypes.byref(flags),
                                     ctypes.byref(comstat)):
             raise SerialException('call to ClearCommError failed')
         n = min(comstat.cbInQue, size) if self.timeout == 0 else size
         if n > 0:
             buf = ctypes.create_string_buffer(n)
             rc = win32.DWORD()
             read_ok = win32.ReadFile(self._port_handle, buf, n,
                                      ctypes.byref(rc),
                                      ctypes.byref(self._overlapped_read))
             if not read_ok and win32.GetLastError() not in (
                     win32.ERROR_SUCCESS, win32.ERROR_IO_PENDING):
                 raise SerialException("ReadFile failed ({!r})".format(
                     ctypes.WinError()))
             win32.GetOverlappedResult(self._port_handle,
                                       ctypes.byref(self._overlapped_read),
                                       ctypes.byref(rc), True)
             read = buf.raw[:rc.value]
         else:
             read = bytes()
     else:
         read = bytes()
     return bytes(read)
Exemplo n.º 2
0
 def in_waiting(self):
     """Return the number of bytes currently in the input buffer."""
     flags = win32.DWORD()
     comstat = win32.COMSTAT()
     if not win32.ClearCommError(self._port_handle, ctypes.byref(flags), ctypes.byref(comstat)):
         raise SerialException('call to ClearCommError failed')
     return comstat.cbInQue
Exemplo n.º 3
0
 def out_waiting(self):
     """Return how many bytes the in the outgoing buffer"""
     flags = win32.DWORD()
     comstat = win32.COMSTAT()
     if not win32.ClearCommError(self._port_handle, ctypes.byref(flags), ctypes.byref(comstat)):
         raise SerialException('call to ClearCommError failed')
     return comstat.cbOutQue
 def outWaiting(self):
     """return how many characters the in the outgoing buffer"""
     flags = win32.DWORD()
     comstat = win32.COMSTAT()
     if not win32.ClearCommError(self.hComPort, ctypes.byref(flags), ctypes.byref(comstat)):
         raise SerialException('call to ClearCommError failed')
     return comstat.cbOutQue
 def read(self, size=1):
     """Read size bytes from the serial port. If a timeout is set it may
        return less characters as requested. With no timeout it will block
        until the requested number of bytes is read."""
     if not self.hComPort: raise portNotOpenError
     if size > 0:
         win32.ResetEvent(self._overlappedRead.hEvent)
         flags = win32.DWORD()
         comstat = win32.COMSTAT()
         if not win32.ClearCommError(self.hComPort, ctypes.byref(flags), ctypes.byref(comstat)):
             raise SerialException('call to ClearCommError failed')
         if self.timeout == 0:
             n = min(comstat.cbInQue, size)
             if n > 0:
                 buf = ctypes.create_string_buffer(n)
                 rc = win32.DWORD()
                 err = win32.ReadFile(self.hComPort, buf, n, ctypes.byref(rc), ctypes.byref(self._overlappedRead))
                 if not err and win32.GetLastError() != win32.ERROR_IO_PENDING:
                     raise SerialException("ReadFile failed (%r)" % ctypes.WinError())
                 err = win32.WaitForSingleObject(self._overlappedRead.hEvent, win32.INFINITE)
                 read = buf.raw[:rc.value]
             else:
                 read = bytes()
         else:
             buf = ctypes.create_string_buffer(size)
             rc = win32.DWORD()
             err = win32.ReadFile(self.hComPort, buf, size, ctypes.byref(rc), ctypes.byref(self._overlappedRead))
             if not err and win32.GetLastError() != win32.ERROR_IO_PENDING:
                 raise SerialException("ReadFile failed (%r)" % ctypes.WinError())
             err = win32.GetOverlappedResult(self.hComPort, ctypes.byref(self._overlappedRead), ctypes.byref(rc), True)
             read = buf.raw[:rc.value]
     else:
         read = bytes()
     return bytes(read)
Exemplo n.º 6
0
 def in_waiting(self):
     """Return the number of bytes currently in the input buffer."""
     flags = win32.DWORD()
     comstat = win32.COMSTAT()
     if not win32.ClearCommError(self._port_handle, ctypes.byref(flags),
                                 ctypes.byref(comstat)):
         # print("ClearCommError failed ({!r})".format(ctypes.WinError()))
         pass
     return comstat.cbInQue
Exemplo n.º 7
0
 def ft_read(self, size=1):
     if not self.is_open:
         print("ERROR: Port is not opened")
     if size > 0:
         win32.ResetEvent(self._overlapped_read.hEvent)
         flags = win32.DWORD()
         comstat = win32.COMSTAT()
         n = min(comstat.cbInQue, size) if self.timeout == 0 else size
         if n > 0:
             buf = ctypes.create_string_buffer(n)
             rc = win32.DWORD()
             read_ok = win32.ReadFile(self._port_handle, buf, n,
                                      ctypes.byref(rc),
                                      ctypes.byref(self._overlapped_read))
             buffer = buf.raw.decode('utf-8')
             buffer = decode(buffer)
             return buffer
     else:
         return []
Exemplo n.º 8
0
 def read(self, size=1):
     if not self.is_open:
         print("ERROR: Port is not opened")
         exit(1)
     if size > 0:
         win32.ResetEvent(self._overlapped_read.hEvent)
         flags = win32.DWORD()
         comstat = win32.COMSTAT()
         if not win32.ClearCommError(self._port_handle, ctypes.byref(flags),
                                     ctypes.byref(comstat)):
             print("ERROR: ClearCommError failed ({!r})".format(
                 ctypes.WinError()))
             exit(1)
         n = min(comstat.cbInQue, size) if self.timeout == 0 else size
         if n > 0:
             buf = ctypes.create_string_buffer(n)
             rc = win32.DWORD()
             read_ok = win32.ReadFile(self._port_handle, buf, n,
                                      ctypes.byref(rc),
                                      ctypes.byref(self._overlapped_read))
             if not read_ok and win32.GetLastError() not in (
                     win32.ERROR_SUCCESS, win32.ERROR_IO_PENDING):
                 print("ERROR: ReadFile failed ({!r})".format(
                     ctypes.WinError()))
                 exit(1)
             if not read_ok:
                 print("ERROR: Something bad")
                 return buf.value
             result_ok = win32.GetOverlappedResult(
                 self._port_handle, ctypes.byref(self._overlapped_read),
                 ctypes.byref(rc), True)
             if not result_ok:
                 if win32.GetLastError() != win32.ERROR_OPERATION_ABORTED:
                     raise SerialException(
                         "GetOverlappedResult failed ({!r})".format(
                             ctypes.WinError()))
             read = buf.raw[:rc.value]
         else:
             read = bytes()
     else:
         read = bytes()
     return bytes(read)