def setBufferSize(self, rx_size=4096, tx_size=None): """\ Recommend a buffer size to the driver (device driver can ignore this vlaue). Must be called before the port is opended. """ if tx_size is None: tx_size = rx_size win32.SetupComm(self.hComPort, rx_size, tx_size)
def open(self): """Open port with current settings. This may throw a SerialException if the port cannot be opened.""" if self._port is None: raise SerialException("Port must be configured before it can be used.") if self._isOpen: raise SerialException("Port is already open.") # the "\\.\COMx" format is required for devices other than COM1-COM8 # not all versions of windows seem to support this properly # so that the first few ports are used with the DOS device name port = self.portstr try: if port.upper().startswith('COM') and int(port[3:]) > 8: port = '\\\\.\\' + port except ValueError: # for like COMnotanumber pass self.hComPort = win32.CreateFile(port, win32.GENERIC_READ | win32.GENERIC_WRITE, 0, # exclusive access None, # no security win32.OPEN_EXISTING, win32.FILE_ATTRIBUTE_NORMAL | win32.FILE_FLAG_OVERLAPPED, 0) if self.hComPort == win32.INVALID_HANDLE_VALUE: self.hComPort = None # 'cause __del__ is called anyway raise SerialException("could not open port %r: %r" % (self.portstr, ctypes.WinError())) try: self._overlappedRead = win32.OVERLAPPED() self._overlappedRead.hEvent = win32.CreateEvent(None, 1, 0, None) self._overlappedWrite = win32.OVERLAPPED() #~ self._overlappedWrite.hEvent = win32.CreateEvent(None, 1, 0, None) self._overlappedWrite.hEvent = win32.CreateEvent(None, 0, 0, None) # Setup a 4k buffer win32.SetupComm(self.hComPort, 4096, 4096) # Save original timeout values: self._orgTimeouts = win32.COMMTIMEOUTS() win32.GetCommTimeouts(self.hComPort, ctypes.byref(self._orgTimeouts)) self._reconfigurePort() # Clear buffers: # Remove anything that was there win32.PurgeComm(self.hComPort, win32.PURGE_TXCLEAR | win32.PURGE_TXABORT | win32.PURGE_RXCLEAR | win32.PURGE_RXABORT) except: try: self._close() except: # ignore any exception when closing the port # also to keep original exception that happened when setting up pass self.hComPort = None raise else: self._isOpen = True
def set_buffer_size(self, rx_size=4096, tx_size=None): """\ Recommend a buffer size to the driver (device driver can ignore this value). Must be called before the port is opened. """ if tx_size is None: tx_size = rx_size win32.SetupComm(self._port_handle, rx_size, tx_size)