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
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
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'
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)
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'
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"
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)
def _log_read(self, data): try: self._print('READ', hexdump(data)) except Exception as e: print('Cannot log input data (%s)' % e, file=stderr)
def test_spi4(self): spi = SpiData93LC56BTest() spi.open() words = spi.read_all(256) print(hexdump(words)) spi.close()
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)
def _log_read(self, data): try: self._print('READ', hexdump(data)) except Exception, e: print >> sys.stderr, 'Cannot log input data (%s)' % e
def _log_write(self, data): try: self._print('WRITE', hexdump(data)) except Exception, e: print >>sys.stderr, 'Cannot log output data (%s)' % e, data
def _log_read(self, data): try: self._print('READ', hexdump(data)) except Exception, e: print >>sys.stderr, 'Cannot log input data (%s)' % e
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)
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)
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)
def _log_write(self, data): try: self._print('WRITE', hexdump(data)) except Exception, e: print >> sys.stderr, 'Cannot log output data (%s)' % e, data