def write(self, data): """Output the given byte string over the serial port.""" if not self.is_open: raise portNotOpenError #~ if not isinstance(data, (bytes, bytearray)): #~ raise TypeError('expected %s or bytearray, got %s' % (bytes, type(data))) # convert data (needed in case of memoryview instance: Py 3.1 io lib), ctypes doesn't like memoryview data = to_bytes(data) if data: #~ win32event.ResetEvent(self._overlapped_write.hEvent) n = win32.DWORD() err = win32.WriteFile(self._port_handle, data, len(data), ctypes.byref(n), self._overlapped_write) if not err and win32.GetLastError() != win32.ERROR_IO_PENDING: raise SerialException("WriteFile failed ({!r})".format( ctypes.WinError())) if self._write_timeout != 0: # if blocking (None) or w/ write timeout (>0) # Wait for the write to complete. #~ win32.WaitForSingleObject(self._overlapped_write.hEvent, win32.INFINITE) err = win32.GetOverlappedResult(self._port_handle, self._overlapped_write, ctypes.byref(n), True) if win32.GetLastError() == win32.ERROR_OPERATION_ABORTED: return n.value # canceled IO is no error if n.value != len(data): raise writeTimeoutError return n.value else: return 0
def ft_write_system(self, data): if not self.is_open: print("Port is not opened") exit(1) data_encode = encode(data) # data_encode_with_errors = set_errors(data_encode) data_encode_with_errors = data_encode.encode('utf-8') n = win32.DWORD() success = win32.WriteFile(self._port_handle, data_encode_with_errors, len(data_encode_with_errors), ctypes.byref(n), self._overlapped_write) self._buffer.append(data_encode_with_errors) return len(data)
def write(self, data): """Output the given byte string over the serial port.""" if not self.is_open: raise PortNotOpenError() #~ if not isinstance(data, (bytes, bytearray)): #~ raise TypeError('expected %s or bytearray, got %s' % (bytes, type(data))) # convert data (needed in case of memoryview instance: Py 3.1 io lib), ctypes doesn't like memoryview data = to_bytes(data) if data: #~ win32event.ResetEvent(self._overlapped_write.hEvent) n = win32.DWORD() success = win32.WriteFile(self._port_handle, data, len(data), ctypes.byref(n), self._overlapped_write) if self._write_timeout != 0: # if blocking (None) or w/ write timeout (>0) if not success and win32.GetLastError() not in ( win32.ERROR_SUCCESS, win32.ERROR_IO_PENDING): raise SerialException("WriteFile failed ({!r})".format( ctypes.WinError())) # Wait for the write to complete. #~ win32.WaitForSingleObject(self._overlapped_write.hEvent, win32.INFINITE) win32.GetOverlappedResult(self._port_handle, self._overlapped_write, ctypes.byref(n), True) if win32.GetLastError() == win32.ERROR_OPERATION_ABORTED: return n.value # canceled IO is no error if n.value != len(data): raise SerialTimeoutException('Write timeout') return n.value else: errorcode = win32.ERROR_SUCCESS if success else win32.GetLastError( ) if errorcode in (win32.ERROR_INVALID_USER_BUFFER, win32.ERROR_NOT_ENOUGH_MEMORY, win32.ERROR_OPERATION_ABORTED): return 0 elif errorcode in (win32.ERROR_SUCCESS, win32.ERROR_IO_PENDING): # no info on true length provided by OS function in async mode return len(data) else: raise SerialException("WriteFile failed ({!r})".format( ctypes.WinError())) else: return 0
def ft_write(self, data): if not self.is_open: print("Port is not opened") exit(1) # data = data.split('\n') # data = [message for message in data if message] # data = [message + '\r\n' for message in data] # for message in data: data_encode = encode(data) # data_encode_with_errors = set_errors(data_encode) data_encode_with_errors = data_encode.encode('utf-8') n = win32.DWORD() success = win32.WriteFile(self._port_handle, data_encode_with_errors, len(data_encode_with_errors), ctypes.byref(n), self._overlapped_write) self._buffer.append(data_encode_with_errors) return len(data)
def write(self, data): if not self.is_open: print("Port is not opened") exit(1) data = to_bytes(data) if data: n = win32.DWORD() success = win32.WriteFile(self._port_handle, data, len(data), ctypes.byref(n), self._overlapped_write) if self._write_timeout != 0: if not success and win32.GetLastError() not in ( win32.ERROR_SUCCESS, win32.ERROR_IO_PENDING): print("WriteFile failed ({!r})".format(ctypes.WinError())) exit(1) win32.GetOverlappedResult(self._port_handle, self._overlapped_write, ctypes.byref(n), True) if win32.GetLastError() == win32.ERROR_OPERATION_ABORTED: return n.value if n.value != len(data): print("Write timeout") exit(1) return n.value else: errorcode = win32.ERROR_SUCCESS if success else win32.GetLastError( ) if errorcode in (win32.ERROR_INVALID_USER_BUFFER, win32.ERROR_NOT_ENOUGH_MEMORY, win32.ERROR_OPERATION_ABORTED): return 0 elif errorcode in (win32.ERROR_SUCCESS, win32.ERROR_IO_PENDING): # no info on true length provided by OS function in async mode return len(data) else: print("WriteFile failed ({!r})".format(ctypes.WinError())) exit(1) else: return 0