Example #1
0
 def write(self, data):
     """Output the given string over the serial port."""
     if self.sock is None:
         import serial
         raise serial.portNotOpenError()
     t = len(data)
     d = data
     while t > 0:
         try:
             if self._writeTimeout is not None and self._writeTimeout > 0:
                 _, ready, _ = select.select([], [self.sock], [],
                                             self._writeTimeout)
                 if not ready:
                     raise serial.writeTimeoutError
             n = self.sock.send(d)
             if self._dump:
                 print hexdump(d[:n])
             if self._writeTimeout is not None and self._writeTimeout > 0:
                 _, ready, _ = select.select([], [self.sock], [],
                                             self._writeTimeout)
                 if not ready:
                     raise serial.writeTimeoutError
             d = d[n:]
             t = t - n
         except OSError, v:
             if v.errno != errno.EAGAIN:
                 raise
Example #2
0
 def write(self, data):
     """Output the given string over the serial port."""
     if self.sock is None:
         raise portNotOpenError
     t = len(data)
     d = data
     while t > 0:
         try:
             if self._writeTimeout is not None and self._writeTimeout > 0:
                 _, ready, _ = select.select([], [self.sock], [],
                                             self._writeTimeout)
                 if not ready:
                     raise serial.writeTimeoutError
             n = self.sock.send(d)
             if self._dump:
                 print hexdump(d[:n])
             if self._writeTimeout is not None and self._writeTimeout > 0:
                 _, ready, _ = select.select([], [self.sock], [],
                                             self._writeTimeout)
                 if not ready:
                     raise serial.writeTimeoutError
             d = d[n:]
             t = t - n
         except OSError, e:
             if e.errno != errno.EAGAIN:
                 raise
Example #3
0
 def _log_write(self, data):
     if not self._logger:
         return
     try:
         print >>self._logger, "WRITE:\n%s" % hexdump(data)
     except:
         print >>sys.stderr, 'Cannot log written data'
Example #4
0
 def test_eeprom_read(self):
     """Simple test to demonstrate EEPROM read out.
     """
     ref_data = self.ftdi.read_eeprom(eeprom_size=self.eeprom_size)
     print(hexdump(ref_data))
     # check that the right number of bytes were read
     self.assertEqual(len(ref_data), self.eeprom_size)
     # Pull out actual checksum from EEPROM data
     ck_act = (ref_data[-1] << 8) | ref_data[-2]
     # compute expected checksum value over the EEPROM contents, except
     # the EEPROM word
     ck_expo = self.ftdi.calc_eeprom_checksum(ref_data[:-2])
     self.assertEqual(ck_act, ck_expo)
     maxsize = self.eeprom_size
     # verify access to various data segments
     segments = ((1, 2), (1, 3), (2, 4), (2, 5), (maxsize - 8, 8),
                 (maxsize - 3, 3), (0, maxsize))
     for start, size in segments:
         chunk = self.ftdi.read_eeprom(start, size, self.eeprom_size)
         self.assertEqual(len(chunk), size)
         self.assertEqual(chunk, ref_data[start:start + size])
     # verify reject access to various invalid data segments
     segments = (-1, 2), (0, maxsize + 1), (maxsize - 6, maxsize + 1)
     for start, size in segments:
         self.assertRaises(ValueError, self.ftdi.read_eeprom, start, size)
Example #5
0
 def _log_read(self, data):
     if not self._logger:
         return
     try:
         print >>self._logger, "READ:\n%s" % hexdump(data)
     except:
         print >> sys.stderr, 'Cannot log read data'
Example #6
0
	def test_rw_sector_1(self):
		from hashlib import sha1
		buf = Array('I')
#		length = 65536
		length = len(self.flash)
		print "length: " + str(length)
		print "Build Sequence"
		for address in range (0, length):
			buf.append(address)
		print "Swap sequence"
		buf = buf.byteswap()
		#print "Erase flash from %08X to %08X" % (0, length)
		print "Erase all of the flash"
		self.flash.erase(0, len(self.flash))
		bufstr = buf.tostring()
		dout = Array('B')
		dout.fromstring(bufstr)
		self.flash.write(0, bufstr)
		print "Verify Flash"
		wmd = sha1()
		wmd.update(buf.tostring())
		refdigest = wmd.hexdigest()
		print "Read Flash"
		din = self.flash.read(0, length)
		print "Dump Flash"
		print hexdump(din.tostring())
		print "Verify Flash"
		rmd = sha1()
		rmd.update(din.tostring())
		newdigest = rmd.hexdigest()
		print "Reference: ", refdigest
		print "Retrieved: ", newdigest

		try:
			f = open("din.hex", "w")
			din.tofile(f)
			f.close()
		except IOError, err:
			print "Error writing to din file"
Example #7
0
 def _log_write(self, data):
     try:
         self._print('WRITE', hexdump(data))
     except Exception as e:
         print('Cannot log output data (%s)' % e, data, file=stderr)
Example #8
0
 def _log_read(self, data):
     try:
         self._print('READ', hexdump(data))
     except Exception as e:
         print('Cannot log input data (%s)' % e, file=stderr)
Example #9
0
 def test_spi4(self):
     spi = SpiData93LC56BTest()
     spi.open()
     words = spi.read_all(256)
     print(hexdump(words))
     spi.close()
Example #10
0
def main():
    """Main routine"""
    debug = False
    try:
        argparser = ArgumentParser(description=modules[__name__].__doc__)
        argparser.add_argument('device',
                               nargs='?',
                               default='ftdi:///?',
                               help='serial port device name')
        argparser.add_argument('-x',
                               '--hexdump',
                               action='store_true',
                               help='dump EEPROM content as ASCII')
        argparser.add_argument('-o',
                               '--output',
                               type=FileType('wt'),
                               help='output ini file to save EEPROM content')
        argparser.add_argument('-s',
                               '--serial-number',
                               help='set serial number')
        argparser.add_argument('-m',
                               '--manufacturer',
                               help='set manufacturer name')
        argparser.add_argument('-p', '--product', help='set product name')
        argparser.add_argument('-e',
                               '--erase',
                               action='store_true',
                               help='erase the whole EEPROM content')
        argparser.add_argument('-u',
                               '--update',
                               action='store_true',
                               help='perform actual update, use w/ care')
        argparser.add_argument('-v',
                               '--verbose',
                               action='count',
                               default=0,
                               help='increase verbosity')
        argparser.add_argument('-d',
                               '--debug',
                               action='store_true',
                               help='enable debug mode')
        args = argparser.parse_args()
        debug = args.debug

        if not args.device:
            argparser.error('Serial device not specified')

        loglevel = max(DEBUG, ERROR - (10 * args.verbose))
        loglevel = min(ERROR, loglevel)
        if debug:
            formatter = Formatter(
                '%(asctime)s.%(msecs)03d %(name)-20s '
                '%(message)s', '%H:%M:%S')
        else:
            formatter = Formatter('%(message)s')
        FtdiLogger.set_formatter(formatter)
        FtdiLogger.set_level(loglevel)
        FtdiLogger.log.addHandler(StreamHandler(stderr))

        eeprom = FtdiEeprom()
        eeprom.open(args.device)
        if args.erase:
            eeprom.erase()
        if args.serial_number:
            eeprom.set_serial_number(args.serial_number)
        if args.manufacturer:
            eeprom.set_manufacturer_name(args.manufacturer)
        if args.product:
            eeprom.set_product_name(args.product)
        if args.hexdump:
            print(hexdump(eeprom.data))
        if args.update:
            eeprom.commit(False)
        if args.verbose > 0:
            eeprom.dump_config()
        if args.output:
            eeprom.save_config(args.output)

    except (IOError, ValueError) as exc:
        print('\nError: %s' % exc, file=stderr)
        if debug:
            print(format_exc(chain=False), file=stderr)
        exit(1)
    except KeyboardInterrupt:
        exit(2)
Example #11
0
 def _log_read(self, data):
     try:
         self._print('READ', hexdump(data))
     except Exception, e:
         print >> sys.stderr, 'Cannot log input data (%s)' % e
Example #12
0
 def _log_write(self, data):
     try:
         self._print('WRITE', hexdump(data))
     except Exception, e:
         print >>sys.stderr, 'Cannot log output data (%s)' % e, data
Example #13
0
 def _log_read(self, data):
     try:
         self._print('READ', hexdump(data))
     except Exception, e:
         print >>sys.stderr, 'Cannot log input data (%s)' % e
Example #14
0
 def _log_write(self, data):
     try:
         self._print('WRITE', hexdump(data))
     except Exception as e:
         print_('Cannot log output data (%s)' % e, data, file=sys.stderr)
Example #15
0
 def _log_read(self, data):
     try:
         self._print('READ', hexdump(data))
     except Exception as e:
         print_('Cannot log input data (%s)' % e, file=sys.stderr)
Example #16
0
def main():
    """Main routine"""
    debug = False
    try:
        argparser = ArgumentParser(description=modules[__name__].__doc__)
        argparser.add_argument('device',
                               nargs='?',
                               default='ftdi:///?',
                               help='serial port device name')
        argparser.add_argument('-x',
                               '--hexdump',
                               action='store_true',
                               help='dump EEPROM content as ASCII')
        argparser.add_argument('-X',
                               '--hexblock',
                               type=int,
                               help='dump EEPROM as indented hexa blocks')
        argparser.add_argument('-i',
                               '--input',
                               type=FileType('rt'),
                               help='input ini file to load EEPROM content')
        argparser.add_argument('-l',
                               '--load',
                               default='all',
                               choices=('all', 'raw', 'values'),
                               help='section(s) to load from input file')
        argparser.add_argument('-o',
                               '--output',
                               type=FileType('wt'),
                               help='output ini file to save EEPROM content')
        argparser.add_argument('-s',
                               '--serial-number',
                               help='set serial number')
        argparser.add_argument('-m',
                               '--manufacturer',
                               help='set manufacturer name')
        argparser.add_argument('-p', '--product', help='set product name')
        argparser.add_argument('-c',
                               '--config',
                               action='append',
                               help='change/configure a property '
                               'as key=value pair')
        argparser.add_argument('-e',
                               '--erase',
                               action='store_true',
                               help='erase the whole EEPROM content')
        argparser.add_argument('-u',
                               '--update',
                               action='store_true',
                               help='perform actual update, use w/ care')
        argparser.add_argument('-P',
                               '--vidpid',
                               action='append',
                               help='specify a custom VID:PID device ID, '
                               'may be repeated')
        argparser.add_argument('-V',
                               '--virtual',
                               type=FileType('r'),
                               help='use a virtual device, specified as YaML')
        argparser.add_argument('-v',
                               '--verbose',
                               action='count',
                               default=0,
                               help='increase verbosity')
        argparser.add_argument('-d',
                               '--debug',
                               action='store_true',
                               help='enable debug mode')
        args = argparser.parse_args()
        debug = args.debug

        if not args.device:
            argparser.error('Serial device not specified')

        loglevel = max(DEBUG, ERROR - (10 * args.verbose))
        loglevel = min(ERROR, loglevel)
        if debug:
            formatter = Formatter(
                '%(asctime)s.%(msecs)03d %(name)-20s '
                '%(message)s', '%H:%M:%S')
        else:
            formatter = Formatter('%(message)s')
        FtdiLogger.set_formatter(formatter)
        FtdiLogger.set_level(loglevel)
        FtdiLogger.log.addHandler(StreamHandler(stderr))

        if args.virtual:
            from pyftdi.usbtools import UsbTools
            # Force PyUSB to use PyFtdi test framework for USB backends
            UsbTools.BACKENDS = ('pyftdi.tests.backend.usbvirt', )
            # Ensure the virtual backend can be found and is loaded
            backend = UsbTools.find_backend()
            loader = backend.create_loader()()
            loader.load(args.virtual)

        try:
            add_custom_devices(Ftdi, args.vidpid)
        except ValueError as exc:
            argparser.error(str(exc))

        eeprom = FtdiEeprom()
        eeprom.open(args.device)
        if args.erase:
            eeprom.erase()
        if args.input:
            eeprom.load_config(args.input, args.load)
        if args.serial_number:
            eeprom.set_serial_number(args.serial_number)
        if args.manufacturer:
            eeprom.set_manufacturer_name(args.manufacturer)
        if args.product:
            eeprom.set_product_name(args.product)
        for conf in args.config or []:
            if conf == '?':
                helpstr = ', '.join(sorted(eeprom.properties))
                print(
                    fill(helpstr, initial_indent='  ', subsequent_indent='  '))
                exit(1)
            for sep in ':=':
                if sep in conf:
                    name, value = conf.split(sep, 1)
                    if not value:
                        argparser.error('Configuration %s without value' %
                                        conf)
                    helpio = StringIO()
                    eeprom.set_property(name, value, helpio)
                    helpstr = helpio.getvalue()
                    if helpstr:
                        print(
                            fill(helpstr,
                                 initial_indent='  ',
                                 subsequent_indent='  '))
                        exit(1)
                    break
            else:
                argparser.error('Missing name:value separator in %s' % conf)
        if args.hexdump:
            print(hexdump(eeprom.data))
        if args.hexblock is not None:
            indent = ' ' * args.hexblock
            for pos in range(0, len(eeprom.data), 16):
                hexa = ' '.join(
                    ['%02x' % x for x in eeprom.data[pos:pos + 16]])
                print(indent, hexa, sep='')
        if args.update:
            if eeprom.commit(False):
                eeprom.reset_device()
        if args.verbose > 0:
            eeprom.dump_config()
        if args.output:
            eeprom.save_config(args.output)

    except (ImportError, IOError, NotImplementedError, ValueError) as exc:
        print('\nError: %s' % exc, file=stderr)
        if debug:
            print(format_exc(chain=False), file=stderr)
        exit(1)
    except KeyboardInterrupt:
        exit(2)
Example #17
0
 def _log_write(self, data):
     try:
         self._print('WRITE', hexdump(data))
     except Exception, e:
         print >> sys.stderr, 'Cannot log output data (%s)' % e, data