def findArduinoDevicePorts(baudrate=None, model_number=None, serial_number=None, try_ports=None, debug=DEBUG):
    serial_device_ports = findSerialDevicePorts(try_ports=try_ports, debug=debug)

    if type(model_number) is int:
        model_number = [model_number]
    if type(serial_number) is int:
        serial_number = [serial_number]

    arduino_device_ports = {}
    for port in serial_device_ports:
        try:
            dev = ArduinoDevice(port=port,baudrate=baudrate)
            try:
                dev_info = dev.getDevInfo()
                if DEBUG:
                    print("dev_info = " + str(dev_info))
            except Exception:
                break
            try:
                dev_model_number = dev_info['model_number']
            except KeyError:
                break
            if (model_number is None ) or (dev_model_number in model_number):
                try:
                    dev_serial_number = dev_info['serial_number']
                except KeyError:
                    break
                if (serial_number is None) or (dev_serial_number in serial_number):
                    arduino_device_ports[port] = {'model_number': dev_model_number,
                                                  'serial_number': dev_serial_number}
            dev.close()
        except (serial.SerialException, IOError):
            pass
    return arduino_device_ports
Exemple #2
0
def findAnimaticsDevicePort(baudrate):
    serialPortList = findSerialDevicePorts()
    matchingList = []
    for port in serialPortList:
        try:
            dev = SerialDevice(port=port,
                               baudrate=baudrate,
                               timeout=0.1,
                               write_write_delay=0.1,
                               write_read_delay=0.1,
                               debug=DEBUG)
            dev.flushInput()
            dev.flushOutput()
            dev.writeCheckFreq(chr(MOTOR_ADDRESS_OFFSET) + 'WAKE ',
                               delay_write=True)
            time.sleep(0.1)
            dev.writeCheckFreq(chr(MOTOR_ADDRESS_OFFSET) + 'WAKE ',
                               delay_write=True)
            time.sleep(0.1)
            dev.flushInput()
            dev.writeCheckFreq(chr(MOTOR_ADDRESS_OFFSET) + 'ECHO ',
                               delay_write=True)
            dev.readlines()
            response = dev.writeRead(chr(MOTOR_ADDRESS_OFFSET) + 'RPI ',
                                     use_readline=False,
                                     check_write_freq=True)
            dev.close()
            # Animatics response will either be 'RPI 3.141592741 '
            # or '3.141592741 ' depending on ECHO setting
            # Must enable ECHO so it will work when multiple motors are chained
            response = response.replace(chr(MOTOR_ADDRESS_OFFSET) + 'RPI ', '')
            if (0 < len(response)) and (response[0] == '3'):
                print("Found an Animatics device!")
                return port
        except serial.SerialException:
            pass

    if len(matchingList) == 0:
        err_str = 'Could not find Animatics device. Check connections and power or specify port.\n'
        err_str += 'Tried ports: ' + str(serialPortList)
        raise RuntimeError(err_str)
    elif 1 < len(matchingList):
        err_str = 'Found more than one Animatics device. Specify port.'
        err_str += 'Matching ports: ' + str(matchingList)
        raise RuntimeError(err_str)
    else:
        return matchingList[0]
def findArduinoDevicePort(baudrate=None, model_number=None, serial_number=None, try_ports=None, debug=DEBUG):
    arduino_device_ports = findArduinoDevicePorts(baudrate=baudrate,
                                                  model_number=model_number,
                                                  serial_number=serial_number,
                                                  try_ports=try_ports,
                                                  debug=debug)
    if len(arduino_device_ports) == 1:
        return arduino_device_ports.keys()[0]
    elif len(arduino_device_ports) == 0:
        serial_device_ports = findSerialDevicePorts(try_ports)
        err_str = 'Could not find any Arduino devices. Check connections and permissions.\n'
        err_str += 'Tried ports: ' + str(serial_device_ports)
        raise RuntimeError(err_str)
    else:
        err_str = 'Found more than one Arduino device. Specify port or model_number and/or serial_number.\n'
        err_str += 'Matching ports: ' + str(arduino_device_ports)
        raise RuntimeError(err_str)
def findAnimaticsDevicePort(baudrate):
    serialPortList = findSerialDevicePorts()
    matchingList = []
    for port in serialPortList:
        try:
            dev = SerialDevice(port=port,
                               baudrate=baudrate,
                               timeout=0.1,
                               write_write_delay=0.1,
                               write_read_delay=0.1,
                               debug=DEBUG)
            dev.flushInput()
            dev.flushOutput()
            dev.writeCheckFreq(chr(MOTOR_ADDRESS_OFFSET)+'WAKE ',delay_write=True)
            time.sleep(0.1)
            dev.writeCheckFreq(chr(MOTOR_ADDRESS_OFFSET)+'WAKE ',delay_write=True)
            time.sleep(0.1)
            dev.flushInput()
            dev.writeCheckFreq(chr(MOTOR_ADDRESS_OFFSET)+'ECHO ',delay_write=True)
            dev.readlines()
            response = dev.writeRead(chr(MOTOR_ADDRESS_OFFSET)+'RPI ',use_readline=False,check_write_freq=True)
            dev.close()
            # Animatics response will either be 'RPI 3.141592741 '
            # or '3.141592741 ' depending on ECHO setting
            # Must enable ECHO so it will work when multiple motors are chained
            response = response.replace(chr(MOTOR_ADDRESS_OFFSET)+'RPI ','')
            if (0 < len(response)) and (response[0] == '3'):
                print("Found an Animatics device!")
                return port
        except serial.SerialException:
            pass

    if len(matchingList) == 0:
        err_str = 'Could not find Animatics device. Check connections and power or specify port.\n'
        err_str += 'Tried ports: ' + str(serialPortList)
        raise RuntimeError(err_str)
    elif 1 < len(matchingList):
        err_str = 'Found more than one Animatics device. Specify port.'
        err_str += 'Matching ports: ' + str(matchingList)
        raise RuntimeError(err_str)
    else:
        return matchingList[0]
def findArduinoDevicePorts(baudrate=None,
                           model_number=None,
                           serial_number=None,
                           try_ports=None,
                           debug=DEBUG):
    serial_device_ports = findSerialDevicePorts(try_ports=try_ports,
                                                debug=debug)

    if type(model_number) is int:
        model_number = [model_number]
    if type(serial_number) is int:
        serial_number = [serial_number]

    arduino_device_ports = {}
    for port in serial_device_ports:
        try:
            dev = ArduinoDevice(port=port, baudrate=baudrate)
            try:
                dev_info = dev.getDevInfo()
                if DEBUG:
                    print("dev_info = " + str(dev_info))
            except Exception:
                break
            try:
                dev_model_number = dev_info['model_number']
            except KeyError:
                break
            if (model_number is None) or (dev_model_number in model_number):
                try:
                    dev_serial_number = dev_info['serial_number']
                except KeyError:
                    break
                if (serial_number is None) or (dev_serial_number
                                               in serial_number):
                    arduino_device_ports[port] = {
                        'model_number': dev_model_number,
                        'serial_number': dev_serial_number
                    }
            dev.close()
        except (serial.SerialException, IOError):
            pass
    return arduino_device_ports
def findArduinoDevicePort(baudrate=None,
                          model_number=None,
                          serial_number=None,
                          try_ports=None,
                          debug=DEBUG):
    arduino_device_ports = findArduinoDevicePorts(baudrate=baudrate,
                                                  model_number=model_number,
                                                  serial_number=serial_number,
                                                  try_ports=try_ports,
                                                  debug=debug)
    if len(arduino_device_ports) == 1:
        return arduino_device_ports.keys()[0]
    elif len(arduino_device_ports) == 0:
        serial_device_ports = findSerialDevicePorts(try_ports)
        err_str = 'Could not find any Arduino devices. Check connections and permissions.\n'
        err_str += 'Tried ports: ' + str(serial_device_ports)
        raise RuntimeError(err_str)
    else:
        err_str = 'Found more than one Arduino device. Specify port or model_number and/or serial_number.\n'
        err_str += 'Matching ports: ' + str(arduino_device_ports)
        raise RuntimeError(err_str)