Skip to content

Commit

Permalink
Update serial module to work on windowz
Browse files Browse the repository at this point in the history
  • Loading branch information
cedricp committed Oct 27, 2020
1 parent d43bad7 commit c05eb1f
Show file tree
Hide file tree
Showing 25 changed files with 252 additions and 619 deletions.
2 changes: 1 addition & 1 deletion parameters.py
Expand Up @@ -1280,7 +1280,7 @@ def updateDisplay(self, request_name, update_inputs=False):

if self.updatelog and self.logfile is not None:
self.logfile.write("\t@ " + datetime.datetime.now().strftime("%H:%M:%S.%f")[:-3] + "\n")
self.logfile.write("\tScreen : " + self.pagename.encode('utf-8') + "\tRequest : " + request_name.encode('utf-8') + "\n")
self.logfile.write("\tScreen : " + self.pagename + "\tRequest : " + request_name + "\n")
string = json.dumps(logdict)
self.logfile.write(u"\t\t" + string)
self.logfile.write("\n")
Expand Down
6 changes: 2 additions & 4 deletions serial/__init__.py
Expand Up @@ -3,19 +3,17 @@
# This is a wrapper module for different platform implementations
#
# This file is part of pySerial. https://github.com/pyserial/pyserial
# (C) 2001-2020 Chris Liechti <cliechti@gmx.net>
# (C) 2001-2017 Chris Liechti <cliechti@gmx.net>
#
# SPDX-License-Identifier: BSD-3-Clause

from __future__ import absolute_import

import sys
import importlib

from serial.serialutil import *
#~ SerialBase, SerialException, to_bytes, iterbytes

__version__ = '3.5b0'
__version__ = '3.4'

VERSION = __version__

Expand Down
41 changes: 18 additions & 23 deletions serial/rfc2217.py
Expand Up @@ -58,8 +58,6 @@
# RFC).
# the order of the options is not relevant

from __future__ import absolute_import

import logging
import socket
import struct
Expand All @@ -76,7 +74,7 @@

import serial
from serial.serialutil import SerialBase, SerialException, to_bytes, \
iterbytes, PortNotOpenError, Timeout
iterbytes, portNotOpenError, Timeout

# port string is expected to be something like this:
# rfc2217://host:port
Expand Down Expand Up @@ -483,7 +481,7 @@ def open(self):
if self.logger:
self.logger.info("Negotiated options: {}".format(self._telnet_options))

# fine, go on, set RFC 2217 specific things
# fine, go on, set RFC 2271 specific things
self._reconfigure_port()
# all things set up get, now a clean start
if not self._dsrdtr:
Expand Down Expand Up @@ -598,7 +596,7 @@ def from_url(self, url):
def in_waiting(self):
"""Return the number of bytes currently in the input buffer."""
if not self.is_open:
raise PortNotOpenError()
raise portNotOpenError
return self._read_buffer.qsize()

def read(self, size=1):
Expand All @@ -608,17 +606,14 @@ def read(self, size=1):
until the requested number of bytes is read.
"""
if not self.is_open:
raise PortNotOpenError()
raise portNotOpenError
data = bytearray()
try:
timeout = Timeout(self._timeout)
while len(data) < size:
if self._thread is None or not self._thread.is_alive():
if self._thread is None:
raise SerialException('connection failed (reader thread died)')
buf = self._read_buffer.get(True, timeout.time_left())
if buf is None:
return bytes(data)
data += buf
data += self._read_buffer.get(True, timeout.time_left())
if timeout.expired():
break
except Queue.Empty: # -> timeout
Expand All @@ -632,7 +627,8 @@ def write(self, data):
closed.
"""
if not self.is_open:
raise PortNotOpenError()
raise portNotOpenError
# XXX use protocol_socket's write
with self._write_lock:
try:
self._socket.sendall(to_bytes(data).replace(IAC, IAC_DOUBLED))
Expand All @@ -643,7 +639,7 @@ def write(self, data):
def reset_input_buffer(self):
"""Clear input buffer, discarding all that is in the buffer."""
if not self.is_open:
raise PortNotOpenError()
raise portNotOpenError
self.rfc2217_send_purge(PURGE_RECEIVE_BUFFER)
# empty read buffer
while self._read_buffer.qsize():
Expand All @@ -655,7 +651,7 @@ def reset_output_buffer(self):
discarding all that is in the buffer.
"""
if not self.is_open:
raise PortNotOpenError()
raise portNotOpenError
self.rfc2217_send_purge(PURGE_TRANSMIT_BUFFER)

def _update_break_state(self):
Expand All @@ -664,7 +660,7 @@ def _update_break_state(self):
possible.
"""
if not self.is_open:
raise PortNotOpenError()
raise portNotOpenError
if self.logger:
self.logger.info('set BREAK to {}'.format('active' if self._break_state else 'inactive'))
if self._break_state:
Expand All @@ -675,7 +671,7 @@ def _update_break_state(self):
def _update_rts_state(self):
"""Set terminal status line: Request To Send."""
if not self.is_open:
raise PortNotOpenError()
raise portNotOpenError
if self.logger:
self.logger.info('set RTS to {}'.format('active' if self._rts_state else 'inactive'))
if self._rts_state:
Expand All @@ -686,7 +682,7 @@ def _update_rts_state(self):
def _update_dtr_state(self):
"""Set terminal status line: Data Terminal Ready."""
if not self.is_open:
raise PortNotOpenError()
raise portNotOpenError
if self.logger:
self.logger.info('set DTR to {}'.format('active' if self._dtr_state else 'inactive'))
if self._dtr_state:
Expand All @@ -698,28 +694,28 @@ def _update_dtr_state(self):
def cts(self):
"""Read terminal status line: Clear To Send."""
if not self.is_open:
raise PortNotOpenError()
raise portNotOpenError
return bool(self.get_modem_state() & MODEMSTATE_MASK_CTS)

@property
def dsr(self):
"""Read terminal status line: Data Set Ready."""
if not self.is_open:
raise PortNotOpenError()
raise portNotOpenError
return bool(self.get_modem_state() & MODEMSTATE_MASK_DSR)

@property
def ri(self):
"""Read terminal status line: Ring Indicator."""
if not self.is_open:
raise PortNotOpenError()
raise portNotOpenError
return bool(self.get_modem_state() & MODEMSTATE_MASK_RI)

@property
def cd(self):
"""Read terminal status line: Carrier Detect."""
if not self.is_open:
raise PortNotOpenError()
raise portNotOpenError
return bool(self.get_modem_state() & MODEMSTATE_MASK_CD)

# - - - platform specific - - -
Expand All @@ -743,10 +739,8 @@ def _telnet_read_loop(self):
# connection fails -> terminate loop
if self.logger:
self.logger.debug("socket error in reader thread: {}".format(e))
self._read_buffer.put(None)
break
if not data:
self._read_buffer.put(None)
break # lost connection
for byte in iterbytes(data):
if mode == M_NORMAL:
Expand Down Expand Up @@ -790,6 +784,7 @@ def _telnet_read_loop(self):
self._telnet_negotiate_option(telnet_command, byte)
mode = M_NORMAL
finally:
self._thread = None
if self.logger:
self.logger.debug("read thread terminated")

Expand Down
2 changes: 0 additions & 2 deletions serial/rs485.py
Expand Up @@ -13,8 +13,6 @@
NOTE: Some implementations may only support a subset of the settings.
"""

from __future__ import absolute_import

import time
import serial

Expand Down
28 changes: 13 additions & 15 deletions serial/serialcli.py
Expand Up @@ -7,8 +7,6 @@
#
# SPDX-License-Identifier: BSD-3-Clause

from __future__ import absolute_import

import System
import System.IO.Ports
from serial.serialutil import *
Expand Down Expand Up @@ -148,7 +146,7 @@ def close(self):
def in_waiting(self):
"""Return the number of characters currently in the input buffer."""
if not self.is_open:
raise PortNotOpenError()
raise portNotOpenError
return self._port_handle.BytesToRead

def read(self, size=1):
Expand All @@ -158,7 +156,7 @@ def read(self, size=1):
until the requested number of bytes is read.
"""
if not self.is_open:
raise PortNotOpenError()
raise portNotOpenError
# must use single byte reads as this is the only way to read
# without applying encodings
data = bytearray()
Expand All @@ -174,21 +172,21 @@ def read(self, size=1):
def write(self, data):
"""Output the given string over the serial port."""
if not self.is_open:
raise PortNotOpenError()
raise portNotOpenError
#~ if not isinstance(data, (bytes, bytearray)):
#~ raise TypeError('expected %s or bytearray, got %s' % (bytes, type(data)))
try:
# must call overloaded method with byte array argument
# as this is the only one not applying encodings
self._port_handle.Write(as_byte_array(data), 0, len(data))
except System.TimeoutException:
raise SerialTimeoutException('Write timeout')
raise writeTimeoutError
return len(data)

def reset_input_buffer(self):
"""Clear input buffer, discarding all that is in the buffer."""
if not self.is_open:
raise PortNotOpenError()
raise portNotOpenError
self._port_handle.DiscardInBuffer()

def reset_output_buffer(self):
Expand All @@ -197,56 +195,56 @@ def reset_output_buffer(self):
discarding all that is in the buffer.
"""
if not self.is_open:
raise PortNotOpenError()
raise portNotOpenError
self._port_handle.DiscardOutBuffer()

def _update_break_state(self):
"""
Set break: Controls TXD. When active, to transmitting is possible.
"""
if not self.is_open:
raise PortNotOpenError()
raise portNotOpenError
self._port_handle.BreakState = bool(self._break_state)

def _update_rts_state(self):
"""Set terminal status line: Request To Send"""
if not self.is_open:
raise PortNotOpenError()
raise portNotOpenError
self._port_handle.RtsEnable = bool(self._rts_state)

def _update_dtr_state(self):
"""Set terminal status line: Data Terminal Ready"""
if not self.is_open:
raise PortNotOpenError()
raise portNotOpenError
self._port_handle.DtrEnable = bool(self._dtr_state)

@property
def cts(self):
"""Read terminal status line: Clear To Send"""
if not self.is_open:
raise PortNotOpenError()
raise portNotOpenError
return self._port_handle.CtsHolding

@property
def dsr(self):
"""Read terminal status line: Data Set Ready"""
if not self.is_open:
raise PortNotOpenError()
raise portNotOpenError
return self._port_handle.DsrHolding

@property
def ri(self):
"""Read terminal status line: Ring Indicator"""
if not self.is_open:
raise PortNotOpenError()
raise portNotOpenError
#~ return self._port_handle.XXX
return False # XXX an error would be better

@property
def cd(self):
"""Read terminal status line: Carrier Detect"""
if not self.is_open:
raise PortNotOpenError()
raise portNotOpenError
return self._port_handle.CDHolding

# - - platform specific - - - -
Expand Down

0 comments on commit c05eb1f

Please sign in to comment.