Exemple #1
0
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
Exemple #2
0
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
Exemple #3
0
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
Exemple #4
0
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
Exemple #5
0
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
Exemple #6
0
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
Exemple #7
0
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
Exemple #8
0
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
Exemple #9
0
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
Exemple #10
0
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
Exemple #11
0
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
Exemple #12
0
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
Exemple #13
0
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