def diag_sys(cmd, args, opts): if not app.require_server_alive(): return False # loading diagnose servlet if not app.helper.load_servlet("diag_srv.prg", 0x1000, True): return False retries = 25 if len(args) == 1: retries, valid = app.iotools.parse_number(args[0]) if not valid: return False # do sys call print " testing %d sys calls with wait and return value fetch" % retries for i in xrange(retries): a = random.randint(1, 255) print " * %d/%d: testing sys call with %d frames duration" % ( i, retries, a) (result, sr, acc, xr, yr, duration) = app.dtvcmd.sys_call(0x1000, acc=a, timeout=60) app.iotools.print_result(result) if result != STATUS_OK: return False app.iotools.print_duration(duration) if acc != 42 or xr != a or yr != 0: print "FAILED: wrong result!! acc=0x%02x xr=0x%02x yr=0x%02x" % ( acc, xr, yr) return False print " * %d/%d: all calls passed OK!" % (retries, retries) return True
def write(cmd, args, opts): if not app.require_server_alive(): return False # read file (result, data, start, is_prg) = app.iotools.read_file(args[-1]) app.iotools.print_result(result) if result != STATUS_OK: return False # parse start rom = 0 if len(args) == 2: rom, start = app.iotools.parse_write_start(args[0]) # write data app.iotools.print_range(start, len(data)) print " sending %s memory to DTV" % (('RAM', 'ROM')[rom]) result, stat = app.dtvcmd.write_memory(rom, start, data, callback=app.iotools.print_size, block_size=app.block_size) app.iotools.print_transfer_result(result, stat) if result != STATUS_OK: return False return True
def save(cmd, args, opts): if not app.require_server_alive(): return False result, start = app.dtvcmd.read_word(0x2b) app.iotools.print_result(result) if result != STATUS_OK: return False result, end = app.dtvcmd.read_word(0x2d) app.iotools.print_result(result) if result != STATUS_OK: return False print " simulating save 0x%04x-0x%04x" % (start, end) # read data length = end - start app.iotools.print_range(start, length) print " receiving memory from DTV" result, data, stat = app.dtvcmd.read_memory( 0, start, length, callback=app.iotools.print_size) app.iotools.print_transfer_result(result, stat) if result != STATUS_OK: return False # write file result, is_prg = app.iotools.write_file(args[-1], data, start) app.iotools.print_result(result) # dtvtrans 1.0: print message if result == STATUS_OK and app.has_dtvtrans_10(): result = app.dtvcmd.do_print(string_save) app.iotools.print_result(result) return result == STATUS_OK
def server_info(cmd,args,opts): if not app.require_server_alive(): return False (result,revision) = app.dtvcmd.query_revision_string() app.iotools.print_result(result) if result != STATUS_OK: return False print " dtvtrans revision: %s" % revision # other info only available in dtvtrans >= 1.0 if not app.has_dtvtrans_10(): return True (result,impl) = app.dtvcmd.query_implementation() app.iotools.print_result(result) if result != STATUS_OK: return False print " implementation: %s"% impl (result,port,mode,start,end) = app.dtvcmd.query_config() app.iotools.print_result(result) if result != STATUS_OK: return False print " port: %4s" % ("joy1","joy2","usr")[port] print " mode: %3s" % ("RAM","ROM")[mode] print " range: 0x%06x-0x%06x" % (start,end) return True
def diag_write_only_client(cmd, args, opts): if not app.require_server_alive(): return False size, pattern = diag_parse_size_pattern(args) if size == None: return False print " * writing 0x%06x pattern bytes (0x%02x) to dtv2ser device via serial" % ( size, pattern) (result, stat) = app.dtvcmd.diagnose_write_memory_only_client( size, callback=app.iotools.print_size, pattern=pattern, block_size=app.block_size) app.iotools.print_transfer_result(result, stat) return result == STATUS_OK
def diag_write(cmd, args, opts): if not app.require_server_alive(): return False (rom, start, size, valid) = app.iotools.parse_range(args[0]) pattern = diag_parse_pattern(args) if pattern == None: return False ref_data = chr(pattern) * size print " * dummy write 0x%06x pattern bytes (0x%02x) to DTV" % (size, pattern) (result, stat) = app.dtvcmd.write_memory(rom, start, ref_data, callback=app.iotools.print_size, block_size=app.block_size) app.iotools.print_transfer_result(result, stat) return result == STATUS_OK
def diag_testsuite(cmd, args, opts): if not app.require_server_alive(): return False test_range = ["0x20000,0x10000"] test_size = ["0x10000"] if not diag_write_only_client("", test_size, []): return False if not diag_read_only_client("", test_size, []): return False if not diag_write_only_dtv("", test_range, []): return False if not diag_read_only_dtv("", test_range, []): return False if not diag_write("", test_range, []): return False if not diag_read("", test_range, []): return False print " * ALL TESTS PASSED OK! *" return True
def diag_write_only_dtv(cmd, args, opts): if not app.require_server_alive(): return False (rom, start, length, valid) = app.iotools.parse_range(args[0]) pattern = diag_parse_pattern(args) if pattern == None: return False print " * writing 0x%06x pattern bytes (0x%02x) from dtv2ser device to DTV only" % ( length, pattern) app.iotools.print_range(start, length) (result, stat) = app.dtvcmd.diagnose_write_memory_only_dtv( rom, start, length, callback=app.iotools.print_size, pattern=pattern, block_size=app.block_size) app.iotools.print_transfer_result(result, stat) return result == STATUS_OK
def verify(cmd, args, opts): if not app.require_server_alive(): return False # read file rom = 0 (result, verify_data, start, is_prg) = app.iotools.read_file(args[-1]) app.iotools.print_result(result) if result != STATUS_OK: return False # get range if len(args) == 2: rom, start = app.iotools.parse_write_start(args[0]) # read data length = len(verify_data) app.iotools.print_range(start, length) print " receiving %s memory from DTV" % (('RAM', 'ROM')[rom]) result, data, stat = app.dtvcmd.read_memory( rom, start, length, callback=app.iotools.print_size, block_size=app.block_size) app.iotools.print_transfer_result(result, stat) # verify data if result == STATUS_OK: if verify_data == data: print " data: verified ok" return True else: for i in xrange(len(data)): if data[i] != verify_data[i]: break print " data: verify MISMATCH! (@%06x: dtv=%02x file=%02x)" \ % (i,ord(data[i]),ord(verify_data[i])) return False else: return False
def flash_dump(cmd,args,opts): if not app.require_server_alive(): return False file_name = args[-1] print " dumping flash ROM to file '%s'" % file_name # read full ROM image result,data,stat = app.dtvcmd.read_memory(1,0,Flash.flash_size, callback=app.iotools.print_size, block_size=app.block_size) app.iotools.print_transfer_result(result,stat) if result != STATUS_OK: return False # write file result,is_prg = app.iotools.write_file(file_name,data,0) app.iotools.print_result(result) if result != STATUS_OK: return False return True
def read(cmd, args, opts): if not app.require_server_alive(): return False # get range if len(args) == 2: (rom, start, length, valid) = app.iotools.parse_range(args[0]) else: rom = 0 (result, start) = app.dtvcmd.read_word(0x2b) app.iotools.print_result(result) if result != STATUS_OK: return False (result, end) = app.dtvcmd.read_word(0x2d) app.iotools.print_result(result) if result != STATUS_OK: return False length = end - start # read data app.iotools.print_range(start, length) print " receiving %s memory from DTV" % (('RAM', 'ROM')[rom]) result, data, stat = app.dtvcmd.read_memory( rom, start, length, callback=app.iotools.print_size, block_size=app.block_size) app.iotools.print_transfer_result(result, stat) if result != STATUS_OK: return False # write file result, is_prg = app.iotools.write_file(args[-1], data, start) app.iotools.print_result(result) if result != STATUS_OK: return False return True
def diag_read(cmd, args, opts): if not app.require_server_alive(): return False (rom, start, size, valid) = app.iotools.parse_range(args[0]) pattern = diag_parse_pattern(args) if pattern == None: return False print " * dummy read 0x%06x pattern bytes (0x%02x) from DTV" % (size, pattern) (result, data, stat) = app.dtvcmd.read_memory(rom, start, size, callback=app.iotools.print_size, block_size=app.block_size) app.iotools.print_transfer_result(result, stat) if result != STATUS_OK: return False ref_data = chr(pattern) * size if ref_data != data: print "VERIFY MISMATCH!" return False return True
def load(cmd, args, opts): if not app.require_server_alive(): return False simulate_load = True load_mode = LOAD_NORMAL for o, a in opts: if o == '-N': simulate_load = False elif o == '-n': load_mode = LOAD_NO_RELINK end = 0 if len(args) == 1: name = args[-1] print "writing file '%s'" % name (result, data, start, is_prg) = app.iotools.read_file(name) app.iotools.print_result(result) if result != STATUS_OK: return False if start != 0x801: print "ERROR: invalid start address! expected $0801!" return False app.iotools.print_range(start, len(data)) print " sending program to DTV" result, stat = app.dtvcmd.write_memory(0, start, data, callback=app.iotools.print_size) app.iotools.print_transfer_result(result, stat) if result != STATUS_OK: return False # write end = start + len(data) result = app.dtvcmd.write_word(0xae, end) app.iotools.print_result(result) if result != STATUS_OK: return False result = app.dtvcmd.write_word(0x2d, end) app.iotools.print_result(result) if result != STATUS_OK: return False result = app.dtvcmd.write_byte(0xba, 8) app.iotools.print_result(result) if result != STATUS_OK: return False else: # read start address result, start = app.dtvcmd.read_word(0x2b) app.iotools.print_result(result) if result != STATUS_OK: return False # read end address result, end = app.dtvcmd.read_word(0x2d) app.iotools.print_result(result) if result != STATUS_OK: return False # dtvtrans 1.0: simulate load if simulate_load and app.has_dtvtrans_10(): print " simulating load 0x%04x-0x%04x" % (start, end) result = app.dtvcmd.do_print(string_load) app.iotools.print_result(result) if result != STATUS_OK: return False result = app.dtvcmd.load(load_mode) app.iotools.print_result(result) if result != STATUS_OK: return False return True