

def read(self, size=1):
    'Read size bytes from the serial port. If a timeout is set it may\n           return less characters as requested. With no timeout it will block\n           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 (%s)' % ctypes.WinError()))
                err = win32.WaitForSingleObject(self._overlappedRead.hEvent, win32.INFINITE)
                read = buf.raw[:rc.value]
            else:
                read = bytes()
        else:
            buf = ctypes.create_string_buffer(self)
            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 (%s)' % 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)

dataset/ETHPy150Open Robot-Will/Stino/stino/pyarduino/base/pyserial/serialwin32.py Win32Serial.read/VarMisuse@270/431 `size`->`self`