示例#1
0
    def get_ack(self) -> int:
        """Get response code from PSLab.

        Returns
        -------
        int
            Response code. Meanings:
                0x01 ACK
                0x10 I2C ACK
                0x20 I2C bus collision
                0x10 Radio max retransmits
                0x20 Radio not present
                0x40 Radio reply timout
        """
        response = self.read(1)

        if not response:
            raise serial.SerialException("Timeout while waiting for ACK.")

        ack = CP.Byte.unpack(response)[0]

        if not (ack & 0x01):
            raise serial.SerialException(
                "Received non ACK byte while waiting for ACK.")

        return ack
示例#2
0
 def read_tracks_raw(self, tracks=None, timeout=30):
     '''Wait for a card swype and return the raw timing data'''
     tracks = tracks if tracks else self._defracks
     if (tracks & ~(PyMAKInt.TRACK1 | PyMAKInt.TRACK2 | PyMAKInt.TRACK3)) != 0 or \
         (tracks & (PyMAKInt.TRACK1 | PyMAKInt.TRACK2 | PyMAKInt.TRACK3)) == 0:
         raise ValueError('Invalid track specified')
     self._serialobj.timeout = 1
     self._serialobj.write(b'R' + bytes([tracks]))
     readbytes = self._serialobj.read(5)
     if readbytes != b'Ready':
         raise serial.SerialException('Error initialising card read')
     self._serialobj.timeout = timeout
     readbytes = self._serialobj.read(3)
     if readbytes == b'':
         raise serial.SerialException('Card read timeout occurred')
     elif readbytes != b'RD ':
         raise serial.SerialException('Invalid data from reader')
     self._serialobj.timeout = 1
     readbytes = self._serialobj.read(2)
     tickcount = (readbytes[0] << 8) + readbytes[1]
     ticksbytes = (tickcount * 2) + (2 if (tickcount % 2) != 0 else 0)
     databytes = self._serialobj.read(ticksbytes)
     readbytes = self._serialobj.read(5)
     if readbytes != b'RD=OK':
         raise serial.SerialException('Error, data alignment problem')
     return PyMAKDat(list(databytes[0:tickcount * 2]))
示例#3
0
def serial_class_for_url(url):
    """extract host and port from an URL string"""
    parts = urlparse.urlsplit(url)
    if parts.scheme != 'alt':
        raise serial.SerialException(
            'expected a string in the form "alt://port[?option[=value][&option[=value]]]": not starting with alt:// (%r)'
            % (parts.scheme, ))
    class_name = 'Serial'
    try:
        for option, values in urlparse.parse_qs(parts.query, True).items():
            if option == 'class':
                class_name = values[0]
            else:
                raise ValueError('unknown option: %r' % (option, ))
    except ValueError as e:
        raise serial.SerialException(
            'expected a string in the form "alt://port[?option[=value][&option[=value]]]": %s'
            % e)
    if not hasattr(serial, class_name):
        raise ValueError('unknown class: %r' % (class_name, ))
    cls = getattr(serial, class_name)
    if not issubclass(cls, serial.Serial):
        raise ValueError('class %r is not an instance of Serial' %
                         (class_name, ))
    return (''.join([parts.netloc, parts.path]), cls)
示例#4
0
 def readAnglesFb(self):
     ret_pack = self.readSerial()
     if (ret_pack.pop(0) != 0x05):
         raise serial.SerialException("mismatching pack type")
     if (ret_pack.pop(0) != ANGLE_FEEDBACK_ID):
         raise serial.SerialException("mismatching pack type")
     return ret_pack[1:]
示例#5
0
def find_port(old_port=None):
    # If we are reopening, and we know the location of the old port, require
    # to match on location.
    if old_port and old_port.location:
        for x in serial.tools.list_ports.comports():
            if x.location and x.location == old_port.location:
                return x.device
        raise serial.SerialException('Could not reopen Greaseweazle device')
    # Score each serial port
    best_score, best_port = 0, None
    for x in serial.tools.list_ports.comports():
        score = 0
        if x.manufacturer == "Keir Fraser" and x.product == "Greaseweazle":
            score = 20
        elif x.vid == 0x1209 and x.pid == 0x4d69:
            # Our very own properly-assigned PID. Guaranteed to be us.
            score = 20
        elif x.vid == 0x1209 and x.pid == 0x0001:
            # Our old shared Test PID. It's not guaranteed to be us.
            score = 10
        if score > 0 and valid_ser_id(x.serial_number):
            if not old_port or not valid_ser_id(old_port.serial_number):
                score = 20
            elif x.serial_number == old_port.serial_number:
                score = 30
            else:
                score = 0
        if score > best_score:
            best_score, best_port = score, x
    if best_port:
        return best_port.device
    raise serial.SerialException('Could not auto-probe Greaseweazle device')
示例#6
0
    def connect(self):
        """
        Connects to CO2 Sensor identified by Serial Number.
        """
        if self.port is not None:
            p = portscan(self.port)
            if p is not None:
                self.port = p.device
                self.ID = p.serial_number
                self.name = get_sensor_name(self.ID)
            else:
                raise serial.SerialException("Can't find port: {}".format(
                    self.port))
        elif self.ID is not None:
            p = portscan(self.ID)
            if p is not None:
                self.port = p.device
                self.ID = p.serial_number
                self.name = get_sensor_name(self.ID)
            else:
                raise serial.SerialException(
                    "Can't find port with ID: {}".format(self.ID))
        else:
            self.ID, self.name, self.port = find_sensor('CO2')

        self.label = "CO2 sensor {} ({}) on port {}\n".format(
            self.name, self.ID, self.port)
        print("\n" + '*' * len(self.label) + '\n' + self.label +
              '*' * len(self.label) + '\n')

        self.sensor = serial.Serial(self.port, baudrate=9600, timeout=.5)
        return
示例#7
0
 def from_url(self, url):
     """extract host and port from an URL string"""
     parts = urlparse.urlsplit(url)
     if parts.scheme != 'spy':
         raise serial.SerialException(
             'expected a string in the form '
             '"spy://port[?option[=value][&option[=value]]]": '
             'not starting with spy:// ({!r})'.format(parts.scheme))
     # process options now, directly altering self
     formatter = FormatHexdump
     color = False
     output = sys.stderr
     try:
         for option, values in urlparse.parse_qs(parts.query, True).items():
             if option == 'file':
                 output = open(values[0], 'w')
             elif option == 'color':
                 color = True
             elif option == 'raw':
                 formatter = FormatRaw
             elif option == 'all':
                 self.show_all = True
             else:
                 raise ValueError('unknown option: {!r}'.format(option))
     except ValueError as e:
         raise serial.SerialException(
             'expected a string in the form '
             '"spy://port[?option[=value][&option[=value]]]": {}'.format(e))
     self.formatter = formatter(output, color)
     return ''.join([parts.netloc, parts.path])
示例#8
0
 def erase_eeprom(self):
     '''Erase the EEPROM, not tested'''
     self._serialobj.write(b'H')
     self._serialobj.timeout = 10
     erres = self._serialobj.read(5)
     if erres == b'':
         raise serial.SerialException('Error, timeout while erasing device')
     elif erres != b'EZ=OK':
         raise serial.SerialException(
             'Error, invalid confirmation from device')
示例#9
0
文件: uart.py 项目: puddly/zigpy-cc
def detect_port() -> ListPortInfo:
    devices = list(serial.tools.list_ports.grep(usb_regexp))
    if len(devices) < 1:
        raise serial.SerialException("Unable to find TI CC device using auto mode")
    if len(devices) > 1:
        raise serial.SerialException(
            "Unable to select TI CC device, multiple devices found: {}".format(
                ", ".join(map(lambda d: str(d), devices))
            )
        )
    return devices[0]
示例#10
0
    def write_register(self, category: int, index: int, page: int,
                       data: List[int]):
        # Number of registers to write.
        num_registers = len(data)

        # Convert the 16 bit registers into a byte stream used as payload in the Modbus write-command.
        payload = self._pack(data)

        # Construct the entire Modbus command including CRC.
        modbus_cmd = bytes([
            self._id, self.Commands.write, category, index, page, num_registers
        ]) + payload
        modbus_cmd += self._crc(modbus_cmd)

        # Write registers.
        self._dialout.reset_input_buffer()
        self._dialout.reset_output_buffer()
        self._dialout.write(modbus_cmd)
        self._dialout.flush()

        # Read response. On success the written payload will be read back to us.
        status = self._dialout.read(self._header_length + len(payload) +
                                    self._crc_length)

        # Handle some basic failures.
        # First check if we have enough data for an error-response.
        if len(status) < 3:
            raise serial.SerialException('No response on write.')

        # If an error-code was returned the command-field will not match.
        if status[1] != self.Commands.write:
            error_code = hex(status[1])
            raise serial.SerialException(
                'Received error code: {} in response to register-write.'.
                format(error_code))

        # Validate written data.
        length = status[2]
        written_data = status[3:-2]
        crc = status[-2:]

        if length != len(written_data):
            raise serial.SerialException(
                'Received incomplete data in response to write.')

        if crc != self._crc(status[:-2]):
            raise serial.SerialException(
                'CRC error in received response to write.')

        if written_data != payload:
            raise serial.SerialException(
                'Incorrect data written to register. Expected "{}" but got "{}".'
                .format(data, written_data))
示例#11
0
 def open(self):
     if self._port is None:
         import serial
         raise serial.SerialException("Port must be configured before use.")
     self._dump = False
     self.sock = None
     try:
         self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
         self.sock.connect(self.portstr)
     except Exception, msg:
         self.sock = None
         import serial
         raise serial.SerialException("Could not open port: %s" % msg)
示例#12
0
def connect_serial(port, baudrate=115200, timeout=1, writeTimeout=1):
    """
    Return Serial object after making sure that the port is accessible and that the port is expressed as a string.

    :param port: str or int (ie "COM4" or 4 for Windows).
    :param baudrate: baudrate.
    :param timeout: read timeout in seconds, default 1 sec.
    :param writeTimeout: write timeout in seconds, default 1 sec.
    :return: serial port object.
    :rtype: serial.Serial
    """

    if isinstance(port, int):
        port = "COM{0}".format(port)
    names_list = list()
    for i in list_ports.comports():
        names_list.append(i[0])
    if port not in names_list:
        print("Serial not found on {0}.".format(port))
        print('Listing current serial ports with devices:')
        for ser in list_ports.comports():
            ser_str = '\t{0}: {1}'.format(ser[0], ser[1])
            print ser_str
        time.sleep(
            .01
        )  # just to let the above lines print before the exemption is raised. cleans console output.
        raise serial.SerialException(
            'Requested COM port: {0} is not listed as connected.'.format(port))
    else:
        return serial.Serial(port,
                             baudrate=baudrate,
                             timeout=timeout,
                             writeTimeout=writeTimeout)
示例#13
0
    def _reconfigure_port(self, force_update=True):
        """Set communication parameters on opened port."""
        super(VTIMESerial, self)._reconfigure_port()
        fcntl.fcntl(self.fd, fcntl.F_SETFL, 0)  # clear O_NONBLOCK

        if self._inter_byte_timeout is not None:
            vmin = 1
            vtime = int(self._inter_byte_timeout * 10)
        else:
            vmin = 0
            vtime = int(self._timeout * 10)
        try:
            orig_attr = termios.tcgetattr(self.fd)
            iflag, oflag, cflag, lflag, ispeed, ospeed, cc = orig_attr
        except termios.error as msg:      # if a port is nonexistent but has a /dev file, it'll fail here
            raise serial.SerialException("Could not configure port: {}".format(msg))

        if vtime < 0 or vtime > 255:
            raise ValueError('Invalid vtime: {!r}'.format(vtime))
        cc[termios.VTIME] = vtime
        cc[termios.VMIN] = vmin

        termios.tcsetattr(
                self.fd,
                termios.TCSANOW,
                [iflag, oflag, cflag, lflag, ispeed, ospeed, cc])
    def __init__(self, port=None, baud=115200, filter_data=True, verbose=True, scaled_output=True, daisy=False, log=True,
                 timeout=None):
        """

        :param port: The COM port that OpenBCI is connected to.  If None (or given a port that doesn't work), we'll attempt to find the correct
                     comport and raise a Serial Exception if we are unsuccessful.
        :param baud:  A parameter to Open BCI (unsure of what exactly it does). Defaults to 115200, which should be fine for most circumstances.
        :param verbose: If verbose, we'll print messages to the console detailing where we are in the OpenBCI setup.
        :param filter_data: ?
        :param scaled_output: ?
        :param daisy:  I think it changes something about the sample rate.
        :param log: ?
        :param timeout: ?
        """
        self.log = log  # print_incoming_text needs log
        self.verbose = verbose
        if self.verbose:
            print("Connecting to V3 at port %s" % str(port))

        port_val = 0
        while True:
            try:
                if type(port) is int:
                    port = 'COM' + str(port)
                self.ser = serial.Serial(port=port, baudrate=baud, timeout=timeout)
                break
            except serial.SerialException:
                if port_val >= 10:
                    raise serial.SerialException("Unable to connect to the COMPORT")
                port = port[:-1] + str(port_val)
                port_val += 1

        if self.verbose:
            print("Serial established - port %s..." % str(port))

        time.sleep(2)

        # Initialize 32-bit board, doesn't affect 8-bit board
        self.ser.write(b'v')

        # wait for device to be ready
        time.sleep(1)
        self.print_incoming_text()

        self.streaming = False
        self.filtering_data = filter_data
        self.scaling_output = scaled_output
        self.eeg_channels_per_sample = 8  # number of EEG channels per sample *from the board*
        self.aux_channels_per_sample = 3  # number of AUX channels per sample *from the board*
        self.read_state = 0
        self.daisy = daisy
        self.last_odd_sample = OpenBCISample(-1, [], [])  # used for daisy
        self.log_packet_count = 0
        self.attempt_reconnect = False
        self.last_reconnect = 0
        self.reconnect_freq = 5
        self.packets_dropped = 0

        # Disconnects from board when terminated
        atexit.register(self.disconnect)
示例#15
0
    def __init__(self,
                 serdev,
                 callback=None,
                 refresh_callback=CameraPublisher.ALWAYS_REFRESH,
                 freq_callback=0.1,
                 baudrate=115200,
                 timeout=1):
        super(DemoArUco, self).__init__()
        self.name = self.__class__.__name__
        print "Init %s..." % self.name
        self.on_error = None
        self.publisher = None
        self._pid = None
        self._gvcview = None
        self._baudrate = baudrate
        self._timeout = timeout
        self._serdev = serdev
        self._stop_event = threading.Event()

        try:
            self.publisher = CameraPublisher.CameraPublisher(
                serdev, callback, refresh_callback, freq_callback, baudrate,
                timeout)
            print "%s set_on_error %s" % (self.name, str(
                self.on_error_received))
            self.publisher.set_on_error(self.on_error_received)
        except serial.serialutil.SerialException as e:
            self.close()
            raise serial.SerialException(e)
        print "Init %s done" % self.name
示例#16
0
 def _registerSer(self):
     """
     Checks to see if another TecanAPISerial instance has registered the
     same serial port in `ser_mapping`. If there is a conflict, checks to
     see if the parameters match, and if they do, shares the connection.
     Otherwise it raises a `serial.SerialException`.
     """
     reg = TecanAPISerial.ser_mapping
     port = self.ser_port
     if self.ser_port not in reg:
         reg[port] = {}
         reg[port]['info'] = {k: v for k, v in self.ser_info.items()}
         reg[port]['_ser'] = serial.Serial(
             port=port,
             baudrate=reg[port]['info']['baud'],
             timeout=reg[port]['info']['timeout'])
         reg[port]['_devices'] = [self.id_]
     else:
         if len(
                 set(self.ser_info.items())
                 & set(reg[port]['info'].items())) != 3:
             raise serial.SerialException('TecanAPISerial conflict: ' \
                 'another device is already registered to {0} with ' \
                 'different parameters'.format(port))
         else:
             reg[port]['_devices'].append(self.id_)
     self._ser = reg[port]['_ser']
示例#17
0
    def __init__(self, serdev, callback=None, refresh_callback=ALWAYS_REFRESH,
                 freq_callback=0.1, baudrate=115200, timeout=1):
        '''try:
            self._ser = serial.Serial(serdev, baudrate=baudrate, timeout=timeout)
        except serial.SerialException as e:
            print str(e)
            raise serial.SerialException(e)'''
        print "Init CameraPublisher"
        self._ser = None
        self._value = None
        self._stop = False
        self._prev_value = None
        self.on_error = None
        self._refresh_callback = refresh_callback
        self._callback = callback
        self._freq_callback = freq_callback
        try:
            self.jevois_serial = JevoisSerial.JevoisSerial(serdev, baudrate, timeout)
        except serial.SerialException as e:
            self.close()
            raise serial.SerialException(e)

        if self._callback is not None:
            self._callback_get = Thread(target=self.callback_get_value)
        else:
            self._callback_get = None
        self.publisher = Thread(target=self.publish_value)
        print "Init CameraPublisher Done"
示例#18
0
  def Send(self, command):
    """Sends a command.

    It blocks at most write_timeout seconds.

    Args:
      command: command to send.

    Raises:
      SerialTimeoutException if it is timeout and fails to send the command.
      SerialException if it is disconnected during sending.
    """
    try:
      self._serial.write(command)
      self._serial.flush()
      if self.log:
        logging.info('Successfully sent %r', command)
    except serial.SerialTimeoutException:
      error_message = 'Send %r timeout after %.2f seconds' % (
          command, self._serial.getWriteTimeout())
      if self.log:
        logging.warning(error_message)
      raise serial.SerialTimeoutException(error_message)
    except serial.SerialException:
      raise serial.SerialException('Serial disconnected')
示例#19
0
    def readSerial(self):
        cnt = 0
        # read pack head
        while (True):
            tmp = self.ser.read()
            #print(tmp)
            if (tmp == b'\xaa'):
                tmp = self.ser.read()
                if (tmp == b'\x77'):
                    break
            cnt += 1
            if (50 == cnt):
                raise serial.SerialTimeoutException()

        # from here data is to be returned
        tmp = self.ser.read(3)
        ret = [0xaa, 0x77, tmp[0], tmp[1], tmp[2]]
        tmp = self.ser.read(ret[4] + 2)
        for d in tmp:
            ret.append(d)
        crc = self.CRC16_MODBUS(ret[0:-2])
        if ((crc & 0xff == ret[-2]) and ((crc >> 8) & 0xff == ret[-1])):
            return ret[2:-2]
        else:
            # print(ret)
            raise serial.SerialException("data corrupted")
示例#20
0
 def format_tracks(self, tracks=None, secs=10):
     '''Format specific tracks to known state, ie, 10101..., not tested'''
     tracks = tracks if tracks else self._deftracks
     if (tracks & ~(PyMAKInt.TRACK1 | PyMAKInt.TRACK2 | PyMAKInt.TRACK3)) != 0 or \
         (tracks & (PyMAKInt.TRACK1 | PyMAKInt.TRACK2 | PyMAKInt.TRACK3)) == 0:
         raise ValueError('Invalid track specified')
     self._serialobj.write(b'F' +
                           bytes([tracks] + bytes([secs * 8]) + b'\\'))
     self._serialobj.timeout = 1
     readbytes = self._serialobj.read(3)
     if readbytes != b'FM ':
         raise serial.SerialException('Error initializing card format')
     self._serialobj.timeout = 1 + (secs * 8)
     readbytes = self._serialobj.read(5)
     if readbytes != b'FM=OK':
         raise serial.SerialException('Error performing card format')
示例#21
0
  def Connect(self, driver=None, port=None,
              baudrate=9600, bytesize=serial.EIGHTBITS,
              parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE,
              timeout=0.5, writeTimeout=0.5):
    """Opens a serial connection by port or by device driver name.

    Args:
      driver: driver name of the target serial connection. Used to look up port
          if port is not specified.
      port, baudrate, bytesize, parity, stopbits, timeout, writeTimeout: See
          serial.Serial().

    Raises:
      SerialException on errors.
    """
    if driver and not port:
      port = FindTtyByDriver(driver)

    if not port:
      raise serial.SerialException(
          'Serial device with driver %r not found' % driver)

    self._port = port

    self._serial = OpenSerial(
        port=port, baudrate=baudrate, bytesize=bytesize, parity=parity,
        stopbits=stopbits, timeout=timeout, writeTimeout=writeTimeout)

    if self.log:
      logging.info('Serial port %r opened', port)
示例#22
0
    def __init__(self, km232_serial_device, verbose=False):
        '''
        This is the constructor and will initiate serial connection
        '''
        self.serial_device = km232_serial_device

        self.verbose = verbose
        if self.verbose:
            print("UsbKm232.serial_device= %s" % self.serial_device)
        #LOGGER.info("UsbKm232.serial_device= %s"%self.serial_device)
        if self.serial_device:
            tries = 5
            while tries > 0:
                try:
                    self.serial = serial.Serial(self.serial_device,
                                                baudrate=9600)
                    self.serial.setTimeout(0.5)
                    self.serial.setWriteTimeout(0.5)
                except serial.SerialException, e:
                    # try maximum 5 times to initialize the serial
                    if tries == 1:
                        raise serial.SerialException(e)
                    tries = tries - 1
                    time.sleep(2)
                else:
                    tries = 0
示例#23
0
 def readData(self, size=100):
     cp = self._commport
     if cp.is_open:
         return cp.read(size).decode()
     else:
         raise serial.SerialException(
             'Attempting to use a port that is not open')
示例#24
0
 def erase_tracks(self, tracks=None, secs=10, reverse=False):
     '''Erase data on selected tracks in forward or reverse direction for secs seconds, not tested'''
     tracks = tracks if tracks else self._deftracks
     if (tracks & ~(PyMAKInt.TRACK1 | PyMAKInt.TRACK2 | PyMAKInt.TRACK3)) != 0 or \
         (tracks & (PyMAKInt.TRACK1 | PyMAKInt.TRACK2 | PyMAKInt.TRACK3)) == 0:
         raise ValueError('Invalid track specified')
     self._serialobj.write((b'e' if reverse else b'E') + bytes([tracks]) +
                           bytes([secs]))
     self._serialobj.timeout = 1
     readbytes = self._serialobj.read(3)
     if readbytes != (b'eR ' if reverse else b'Er '):
         raise serial.SerialException('Error initialising card erase')
     self._serialobj.timeout = 1 + secs
     readbytes = self._serialobj.read(5)
     if readbytes != (b'eR=OK' if reverse else b'Er=OK'):
         raise serial.SerialException('Error card erase failure')
示例#25
0
    def Send(self, command, flush=True):
        """Sends a command.

    It blocks at most write_timeout seconds.

    Args:
      command: command to send.
      flush: call flush() after write(). Default True.

    Raises:
      SerialTimeoutException if it is timeout and fails to send the command.
      SerialException if it is disconnected during sending.
    """
        try:
            start_time = time.time()
            self._serial.write(command)
            if flush:
                self._serial.flush()
            if self.log:
                duration = time.time() - start_time
                logging.info('Successfully sent %r. Took %.3f seconds',
                             command, duration)
        except serial.SerialTimeoutException:
            error_message = 'Send %r timeout after %.2f seconds' % (
                command, self._serial.getWriteTimeout())
            if self.log:
                logging.warning(error_message)
            raise serial.SerialTimeoutException(error_message)
        except serial.SerialException:
            raise serial.SerialException('Serial disconnected')
示例#26
0
def serialComm(message, port, baudrate=9600, bytesize='8', parity='NONE', stopbits='1'):
    bytesizeMap = {
        '5': serial.FIVEBITS,
        '6': serial.SIXBITS,
        '7': serial.SEVENBITS,
        '8': serial.EIGHTBITS
    }
    parityMap = {
        'NONE': serial.PARITY_NONE,
        'EVEN': serial.PARITY_EVEN,
        'ODD': serial.PARITY_ODD
    }
    stopbitsMap = {
        '1': serial.STOPBITS_ONE,
        '1.5': serial.STOPBITS_ONE_POINT_FIVE,
        '2': serial.STOPBITS_TWO
    }

    bytesize = bytesizeMap.get(bytesize, serial.EIGHTBITS)
    parity = parityMap.get(parity, serial.PARITY_NONE)
    stopbits = stopbitsMap.get(stopbits, serial.STOPBITS_ONE)

    # 一个 ascii 8 位,停止位 2 位,起始位 1 位,校验位 1 位
    timeout = math.ceil(12 * len(message) / baudrate)

    with serial.Serial(port, baudrate, timeout=timeout, bytesize=bytesize, 
                        parity=parity, stopbits=stopbits) as ser:
        lenth = len(message)
        message = bytes(message, 'ascii')
        sentLenth = ser.write(message)
        end = ser.readline()

        if lenth != sentLenth:
            raise serial.SerialException('Send data is incomplete')
示例#27
0
    def get_current_text_messages(self,
                                  include_read=False,
                                  leave_unread=False):
        if self.__connected:
            cmd = [self.__text_msg_commands['list_messages'], "="]
            if include_read:
                cmd.append('\"ALL\",')
            else:
                cmd.append('\"REC UNREAD\",')
            cmd.append(str(int(leave_unread)))
            cmd.append("\n")
            raw_messages = self.__status_query("".join(cmd))
            trimmed_messages = []
            for line in raw_messages:
                logging.debug(line)
                if not str.startswith(line, "AT+CMGL"):
                    # Comes up at strange times. Discard.
                    if not str.startswith(line, "+CMTI"):
                        # Don't include lines that are only \r\n.
                        if not str.isspace(line):
                            # Strip off extra \r\n at the end of each line
                            trimmed_messages.append(line.rstrip())

            messages = []
            for i in range(0, int((len(trimmed_messages) - 1) / 2)):
                messages.append(FonaMessage(trimmed_messages[2 * i:2 * i + 2]))
            return messages
        else:
            raise serial.SerialException(
                "Not connected to FONA. Can't read text messages.")
示例#28
0
 def __init__(self,
              port='/dev/ttyUSB0',
              deftracks=(TRACK1 | TRACK2 | TRACK3)):
     '''Open the default USB port and check reader version, tested on MSUSB CZ.090211'''
     self._portname = port
     self._defracks = deftracks
     try:
         self._serialobj = serial.Serial(port, 38400, timeout=1)
     except serial.serialutil.SerialException:
         raise serial.SerialException('Error opening serial port')
     self._serialobj.write(b'?')
     self._rversion = self._serialobj.read(15)
     if self._rversion == b'':
         raise serial.SerialException('Reader not responding')
     if self._rversion[0:5] != b'MSUSB':
         raise serial.SerialException('Reader not valid')
    def __init__(self,
                 addr,
                 baudrate=115200,
                 timeout=2,
                 verify_checksum=False,
                 verbose=0):
        """
        Initiates the serial connection with the device in address addr, using a specified baudrate.
        :param addr:
        :param baudrate:
        :param timeout:
        """
        self.verbose = verbose
        self.verify_checksum = verify_checksum
        self.mutex = Lock()

        try:
            serial.Serial.__init__(self,
                                   port=addr,
                                   baudrate=baudrate,
                                   timeout=timeout)
            if self.verbose > 5:
                print("Connection to " + addr + " was successful")
        except serial.SerialException as e:
            if self.verbose > 5:
                print("Connection to " + addr + " failed with: " + str(e))
            raise serial.SerialException(e)
示例#30
0
 def open(self):
     if self.ser == None:
         raise serial.SerialException(
             'Serialino/open: Not connected to any serial port')
         return -3
     if self.ser.is_open:
         sys.stderr.write(
             'Attempt to open an already opened serial port {}\n'.format(
                 self.ser.name))
         #return -1
     if self.status == 1:
         return 0
     self.status = 0
     #self.initstate = 0
     if not self.ser.is_open:
         try:
             self.ser.open()
         except serial.SerialException as e:
             sys.stderr.write(
                 'Could not open Arduino serial port {}: {}\n'.format(
                     self.ser.name, e))
             return -2
     if self.RdThread == None:
         self.serq = queue.Queue()
         self.serqThread = threading.Thread(target=self.incoming,
                                            daemon=True)
         self.serqThread.start()
         self.RdThread = SerThread(self.ser, SerTrans, self.serq)
         self.RdThread.start()
         self.RdThread.connect()
     self.status = 1
     return 0