def target(self, args): (port) = args self.info(u"%s (%s)" % (_('Open port...'), port)) s = Mcush(port) self.info(_("Reset")) s.scpiRst() self.info(_("Done"))
def memory_read_loop(argv=None): s = Mcush() count = 1 while True: print(time.strftime('%H:%M:%S'), count) mem = s.readMem(0x20000000, 20 * 1024) #Utils.dumpMem( mem ) count += 1
def spiffs_loop_append(argv=None): buf = open('/proc/misc', 'r').read() s = Mcush() while True: print(s.list()) for i in range(10): print('/s/test.%d' % i) s.cat('/s/test.%d' % i, append=True, buf=buf)
def spiffs_fill_small_files(argv=None): buf = open('/proc/misc', 'r').read() s = Mcush() print(s.list()) while True: f = tempfile.mktemp(prefix='test', dir='/s') print(f) s.cat(f, append=True, buf=buf)
def target(self, args): (port, path) = args self.info(u"Open port %s..." % port) s = Mcush(port) self.info(u"Formating %s..." % (path)) info = s.spiffsInfo() self.info('Total: %d, used: %d (%.1f%%)' % (info['total'], info['used'], float(info['used']) / info['total'] * 100))
def adc_test(argv=None): s = Mcush() s.adc_init() try: channel = int(argv[0]) except: channel = None while True: print(s.adc(channel))
def target(self, args): (port) = args self.info(u"%s (%s)" % (_('Open port...'), port)) s = Mcush(port) self.info(_("Reboot")) s.port.write('reboot\n') s.port.flush() s.disconnect() del s self.info(_("Done"))
def memory_read_speed_test(argv=None): s = Mcush() SIZE = 20 * 1024 count = 0 while True: t0 = time.time() mem = s.readMem(0x20000000, SIZE, compact_mode=Env.COMPACT_MODE) t1 = time.time() speed = len(mem) / (t1 - t0) count += 1 print('[%d] read %d bytes, %.3f kB/s' % (count, SIZE, speed / 1000.0))
def get_model_idn(argv=None): Env.VERBOSE = False Env.DEBUG = False Env.INFO = False s = Mcush(check_idn=False) ret = s.writeCommand('*idn?') model = ret[0].split(',')[0].strip() if len(ret) > 1: sn = ret[1].strip() result = '%s_%s' % (model, sn) print(result.replace(' ', '_'))
def target(self, args): (port, fname) = args self.info(u"Open port %s..." % port) s = Mcush(port) self.info(u"removing %s..." % fname) try: s.remove(fname) self.queue.put(('remove_file', fname)) self.info(_("Done")) except Instrument.CommandExecuteError as e: self.info("Failed to remove %s" % fname, 'error')
def target(self, args): (port) = args self.info(u"%s (%s)" % (_('Open port...'), port)) s = Mcush(port) self.info(u"querying...") try: lst = s.list() self.queue.put(('update_filelist', lst)) self.info(_("Done")) except: lst = [] self.info(u"Failed to query file list", 'error')
def led(argv=None): if len(argv) == 1: # read status cmd = None print(Mcush().led(int(argv[0]))) elif len(argv) == 2: # set/clr/toggle cmd = LED_CMD[argv[1].strip()] if cmd == -1: Mcush().led(int(argv[0]), toggle=True) else: Mcush().led(int(argv[0]), on=bool(cmd == 1)) else: halt("led <led_id> [s|c|t]")
def target(self, args): (port, oldname, newname) = args self.info(u"Open port %s..." % port) s = Mcush(port) self.info(u"rename %s to %s..." % (oldname, newname)) try: s.rename(oldname, newname) self.queue.put(('rename_file', (oldname, newname))) self.info(_("Done")) except Instrument.CommandExecuteError as e: self.info(u"Failed to rename %s to %s..." % (oldname, newname), 'error')
def target(self, args): (port, config, data) = args self.info(u"Open port %s..." % port) s = Mcush(port) addr = int(eval(config['address'])) & 0x7F pin_sda = config['sda'] pin_scl = config['scl'] delay_us = int(config['delay_us']) reg_from = int(eval(config['reg_from'])) reg_to = int(eval(config['reg_to'])) if reg_to > 255: reg_to = 255 #if reg_to >= reg_from: # length = reg_to - reg_from + 1 #else: # length = 1 s.i2c_init(addr, scl=pin_scl, sda=pin_sda, delay=delay_us) if reg_from + len(data) > 256: # cut data = data[:256 - reg_from] self.info(_("Writing...")) addr = reg_from wr = [addr] while True: wr.append(data.pop(0)) addr += 1 if len(wr) > 16: s.i2c(wr) wr = [addr] if not data: if len(wr) > 1: s.i2c(wr) break self.info(_("Done"))
def target(self, args): (port, fname, savename) = args self.info(u"Open port %s..." % port) s = Mcush(port) self.info(u"download file %s..." % (fname)) try: r = s.cat(fname, b64=True) except Instrument.CommandExecuteError as e: self.info(u"Failed to download file %s" % (fname), 'error') self.info('save as %s...' % savename) try: open(savename, 'w+').write(r) self.info("File %s saved, size %d." % (savename, len(r))) except Exception as e: self.info(u"Failed to save file %s" % (savename), 'error')
def target(self, args): (port, fname) = args self.info(u"Open port %s..." % port) s = Mcush(port) self.info(u"download file %s..." % (fname)) try: r = s.cat(fname, b64=True) contents = unicode(r) self.queue.put(('view_file', (fname, r))) self.info(_("Done")) except UnicodeDecodeError: self.info('Fail to decode contents, this may be a binary file!', 'error') except Instrument.CommandExecuteError as e: self.info(u"Failed to download file %s" % (fname), 'error')
def memory_read(argv=None): try: assert 2 <= len(argv) <= 3 addr = int(eval(argv[0])) length = int(eval(argv[1])) except: halt('parms: addr length <file_name>') return try: fname = argv[2] except IndexError: fname = None if Env.VERBOSE: print('addr: 0x%08X, length: %d' % (addr, length)) print('output: %s' % ('stdout' if fname is None else fname)) if length <= 0: return t0 = time.time() mem = Mcush().readMem(addr, length, compact_mode=Env.COMPACT_MODE) dt = time.time() - t0 if fname is None: #Utils.dumpMem( mem, method=1 ) open(Env.TEST_WR, 'w+').write(mem) #Utils.dumpFile( Env.TEST_WR ) sys.stdout.write(mem) # write binary directly to console os.remove(Env.TEST_WR) else: open(fname, 'w+').write(str(mem)) print('speed: %.3f kBytes/sec' % (len(mem) / dt / 1000.0))
def target(self, args): (port, path) = args self.info(u"Open port %s..." % port) s = Mcush(port) self.info(u"Formating %s..." % (path)) s.setTimeout(30) s.writeCommand('s -c format') s.setTimeout() self.info(_("Done"))
def beep(argv=None): freq, duration = None, None try: freq = int(argv[1]) duration = float(argv[2]) except: pass Mcush().beep(freq, duration)
def spiffs_get(argv=None): if len(argv) < 1: print('syntax: spiffs_get <remote_pathname> [local_pathname]') return r = Mcush().cat(argv[0], b64=True) if len(argv) > 1: open(argv[1], 'w+').write(r) else: print(r)
def pwm_test(argv=None): s = Mcush() s.pwm_init(init_value=0) while True: for i in [0, 2]: t0 = time.time() while True: t = time.time() if t > t0 + 2 * math.pi: break s.pwm(index=i, value=int(abs((math.sin(t - t0)**2) * 100))) s.pwm(index=i, value=1)
def target(self, args): (port, config) = args self.info(u"Open port %s..." % port) s = Mcush(port) addr = int(eval(config['address'])) & 0x7F pin_sda = config['sda'] pin_scl = config['scl'] delay_us = int(config['delay_us']) reg_from = int(eval(config['reg_from'])) reg_to = int(eval(config['reg_to'])) if reg_to > 255: reg_to = 255 if reg_to >= reg_from: length = reg_to - reg_from + 1 else: length = 1 s.i2c_init(addr, scl=pin_scl, sda=pin_sda, delay=delay_us) result = [] self.info(_("Reading...")) r = s.i2c([reg_from], read=length) self.queue.put(('i2c_data', r)) self.info('%d bytes read' % length)
def morse_code_beeper(argv=None): bp = MorseCodeBeeper.MorseCodeBeeper(Mcush()) #bp.gpio( '0.0', o=True, c=True ) #def beeper_pin( duration ): # bp.gpio( '0.0', s=True ) # time.sleep( duration ) # bp.gpio( '0.0', c=True ) #bp.set_beeper( beeper_pin ) #bp.set_beeper( bp.beeper_led1 ) #bp.BeepFile('Readme.txt') while True: bp.BeepString('SOS') time.sleep(5)
def i2c_search(argv=None): s = Mcush() if argv: try: pin_sda, pin_scl = argv[0], argv[1] except: print('arguments: pin_sda pin_scl') return s.i2c_init(0, scl=pin_scl, sda=pin_sda) for addr in range(128): s.i2c_init(addr) try: s.i2c([0]) print('Addr 0x%02X, OK' % (addr)) except Instrument.CommandExecuteError: pass
def target(self, args): (port) = args self.info(u'%s (%s)' % (_('Testing port...'), port)) s = Mcush(port) model = s.getModel() version = s.getVersion() sn = s.getSerialNumber() info = u'%s %s' % (_('Model'), model) info += u', %s %s' % (_('Version'), version) if sn: info += u', %s %s' % (_('SN'), sn) self.info(info, 'ok') for i in range(10): try: s.led(0, toggle=True) except Exception as e: print(e) break time.sleep(0.05) s.disconnect()
def target(self, args): (port, config) = args self.info(u"Open port %s..." % port) s = Mcush(port) pin_sda = config['sda'] pin_scl = config['scl'] delay_us = int(config['delay_us']) s.i2c_init(0, scl=pin_scl, sda=pin_sda, delay=delay_us) result = [] for addr in range(128): self.info('Scan address: 0x%02X' % (addr)) s.i2c_init(addr) try: s.i2c([0]) result.append(addr) except Instrument.CommandExecuteError: pass if result: self.info('Responed address: %s' % (' '.join(['0x%02X' % i for i in result]))) else: self.info('No address responsed')
def gpio_set_high(argv=None): # set gpio high for 100ms(default) and back port_pin = argv[0] try: ms = int(argv[1]) except: ms = 100 try: set_back = Env.getenv_bool(argv[2]) except: set_back = True s = Mcush() s.gpio(port_pin, o=True) s.gpio(port_pin, s=True) if ms: time.sleep(ms / 1000.0) if set_back: s.gpio(port_pin, c=True)
def target(self, args): (port, srcname, fname) = args self.info(u"Open port %s..." % port) s = Mcush(port) self.info(u"read file %s..." % (srcname)) try: raw = open(srcname, 'r').read() raw_len = len(raw) except: self.info('read file %s error' % srcname, 'error') return self.info(u"write file %s..." % (fname)) raw_split = [] i = 0 while True: seg = raw[PUTFILE_SEGMENT_SIZE * i:PUTFILE_SEGMENT_SIZE * (i + 1)] if seg: raw_split.append(seg) else: break i += 1 try: cnt = 0 buf0 = raw_split.pop(0) self.info(u"Transfering file %s, 0 / %d bytes (0 %%)" % (fname, raw_len)) s.cat(fname, write=True, b64=True, buf=buf0) cnt += len(buf0) for buf in raw_split: self.info(u"Transfering file %s, %d / %d bytes (%d %%)" % (fname, cnt, raw_len, int(cnt * 100 / raw_len))) s.cat(fname, write=True, append=True, b64=True, buf=buf) cnt += len(buf) self.info(u"File %s written, size %d." % (fname, len(raw))) self.queue.put(('update_filelist', s.list())) except Instrument.CommandExecuteError as e: self.info(u"Failed to download file %s" % (fname), 'error')
def reset(argv=None): Mcush().reset()
def info(argv=None): Mcush().printInfo()