Example #1
0
def get_set_form(ls, name, **kwargs):
    name_val = name + '_val'
    form = el("form")
    form.attrib['action'] = ""
    fieldset = el("fieldset")

    ls = list(ls)
    ls.sort()

    select_param = {
        'onchange': 'this.form.' + name_val + '.value=""; this.form.submit();',
    }

    if name_val in kwargs: select_param['selected'] = kwargs[name]

    fieldset.append(select(ls, name, **select_param))
    input_param = {
        'name': name_val,
    }

    if kwargs.get(name) in ls:
        gumi = gum.Gum()
        if kwargs.get(name_val):
            val = kwargs[name_val]
            if val[0:2] == '0x':
                val = int(val[2:], 0x10)
            else:
                val = int(val)
            gumi.write_symbol(kwargs[name], val)
        input_param['value'] = hex(gumi.read_symbol(kwargs[name]))

    fieldset.append(el('input', type='text', **input_param))

    form.append(fieldset)
    return form
Example #2
0
def update(a):
    if type(a) == str: a = tarfile.open(a, mode='r:bz2')
    else: a = tarfile.open(fileobj=a, mode='r|bz2')

    #a.extractall() # TODO: local update, remote update?
    names = a.getnames()
    if "bootloader.bin" in names or "fw.bin" in names:
        gumi = gum.Gum()
        if "bootloader.bin" in names:
            gumi.flash_bootloader(open("bootloader.bin", 'rb'))
        if "fw.bin" in names: gumi.flash_fw(open("fw.bin", 'rb'))
Example #3
0
def sync_time():
  while 1:
    try:
      gumi = gum.Gum()
      gumi.set_time()
    except Exception as inst:
      print("sync_time failed:", type(inst), inst)
      time.sleep(1)
    else:
      del gumi
      time.sleep(15*60)
Example #4
0
  def index(self):
    gumi = gum.Gum()
    body  = el('body')
    table = el('table')

    cnt = 0
    table = []
    temp_tab = gumi.ds18b20_get_temp()
    info = xml.etree.ElementTree.parse("xml/xml.xml").getroot().find("ds18b20_list").findall("ds18b20")
    for d in temp_tab:
      if cnt < len(info):
        table[len(table):] = [ [ info[cnt].attrib['cname'], d, info[cnt].text ] ]
      else:
        i = cnt - len(info)
        rom_adr = gumi.read_symbol('rom_ext') + 8 * i
        rom = gum.uart.access(0, rom_adr, bytearray(8))
        rom_c = "{ { " + ", ".join([ hex(b) for b in rom ]) + "} },"
        table[len(table):] = [ [ cnt, d, rom_c ] ]
      cnt += 1
    body.append(build_table(table))
    
    cnt = 0
    table = []
    for d in xml.etree.ElementTree.parse("xml/xml.xml").getroot().find("valve_list").findall("valve"):
      table[len(table):] = [ [ d.attrib['cname'], gumi.valve_state(cnt), d.text ] ]
      cnt += 1
    body.append(build_table(table))

    cnt = 0
    table = []
    for d in xml.etree.ElementTree.parse("xml/xml.xml").getroot().find("relay_list").findall("relay"):
      table[len(table):] = [ [ d.attrib['cname'], gumi.relay_get(cnt), d.text ] ]
      cnt += 1
    body.append(build_table(table))

    return self.skeleton(body, gumi)
Example #5
0
  def devel(self, ram_symbol= None,
                  ram_val   = None, exexec_symbol= None,
                                    exexec_arg0  = None,
                                    exexec_arg1  = None,
                                    exexec_arg2  = None,
                                    exexec_arg3  = None,
                                                          **kwargs):
    gumi = gum.Gum()
    body = el('body')
  
    #
    # RAM Symbols
    #
    body.append(html_tools.get_set_form([ x for x in gumi.meta['symbols'] if gumi.is_mem(x) ], "mem", **kwargs))
    
    #
    # Config Symbols
    #
    body.append(html_tools.get_set_form([ x for x in gumi.meta['symbols'] if gumi.is_config(x) ], "config", **kwargs))
    
    #
    # REGS
    #
    body.append(html_tools.get_set_form([ x for x in gumi.meta['symbols'] if gumi.is_reg(x) ], "reg", **kwargs))
    
    #
    # exexec
    #
    exexec_list = filter(lambda x: gumi.meta['symbols'][x]['mem'] == 'flash', gumi.meta['symbols'])
    exexec_list = filter(lambda x: gumi.meta['symbols'][x]['size'], exexec_list)
    exexec_list = filter(lambda x: gumi.meta['symbols'][x]['section'] == '.text' or gumi.meta['symbols'][x]['section'] == '.flash_write', exexec_list)
    exexec_list = list(exexec_list)
    exexec_list.sort()

    form = el("form", action = "")
    fieldset = el("fieldset")
    
    argn = list(map(lambda x: 'exexec_arg' + str(x), range(4)))
    jscript = ''.join(map(lambda x: 'this.form.' + x + '.value="";', argn))
    fieldset.append(html_tools.select(exexec_list, "exexec_symbol", selected = exexec_symbol, onchange = jscript))

    def make_val(arg):
      if not arg:            arg = 0
      elif arg[0:2] == '0x': arg = int(arg[2:], 0x10)
      else:                  arg = int(arg)
      return str(arg)
    
    for a in argn: fieldset.append(el('input', type = 'text', size = str(4), name = a, value = make_val(eval(a))))
    
    if exexec_symbol in exexec_list:
      for i in gumi.exexec(exexec_symbol, list(map(eval, argn))):
        fieldset.append(el("input", type = 'text', size = str(4), value = hex(i), disabled="disabled"))

    submit = el('input')
    submit.attrib['type'] = 'submit'
    fieldset.append(submit)

    form.append(fieldset)
    body.append(form)
    
    p = el('p')
    p.text = "Stack status: "
    try:
      p.text += str(gumi.exexec('stack_check')[0])
    except:
      p.text += "check failed"
    body.append(p)
    
    tr = el('tr')
    
    #
    # Console
    #
    console = gumi.readcon()
    if len(console) :
      td = el('td')
      textarea = el('textarea', cols = '40', rows = '20', disabled = 'disabled')
      textarea.text = console
      td.append(textarea)
      tr.append(td)
    
    #
    # .dbg vars
    #
    dbg_list = filter(lambda x: gumi.meta['symbols'][x]['section'] == ".dbg", gumi.meta['symbols'])
    dbg_list = filter(lambda x: gumi.meta['symbols'][x]['size'], dbg_list)
    dbg_list = filter(lambda x: x != 'ds18b20_err_cnt', dbg_list)
    dbg_list = filter(lambda x: x != 'ds18b20_max_rty', dbg_list)
    dbg_list = filter(lambda x: x[0:9] != 'print_buf', dbg_list)
    dbg_list = list(dbg_list)
    dbg_list.sort()
    
    td = el('td')
    td.append(html_tools.table(list(map(lambda x: [ x, hex(gumi.read_symbol(x)) ], dbg_list))))
    tr.append(td)
    
    # .dbgcp
    dbgcp_list = filter(lambda x: gumi.meta['symbols'][x]['mem'] == "ram", gumi.meta['symbols'])
    dbgcp_list = filter(lambda x: gumi.meta['symbols']['__dbg2cp_start']['adr'] <= gumi.meta['symbols'][x]['adr'] < gumi.meta['symbols']['__dbg2cp_end']['adr'], dbgcp_list)
    dbgcp_list = filter(lambda x: gumi.meta['symbols'][x]['size'], dbgcp_list)
    dbgcp_list = list(dbgcp_list)
    dbgcp_list.sort()
    td = el('td')
    td.append(html_tools.table(list(map(lambda x: [ x, hex(gumi.read_symbol_dbgcp(x)) ], dbgcp_list))))
    tr.append(td)

    table = el('table')
    table.append(tr)
   
    body.append(table)
    body.append(build_sensor_err_tab(gumi))

    return self.skeleton(body, gumi)
Example #6
0
  def config(self, name=None, value=None):
    gumi = gum.Gum()
    body = el("body")
    
    for s in filter(lambda x: x in gumi.meta['symbols'], xml.etree.ElementTree.parse("xml/xml.xml").getroot().find("config_list").findall('*')):
      form = el("form")
      form.attrib['action'] = ""
      
      p = el("p")
      p.text = s.text.strip()
      namefield = el('input')
      namefield.attrib['type'] = 'hidden'
      namefield.attrib['name'] = 'name'
      namefield.attrib['value'] = s.tag
      p.append(namefield)
      
      sign = s.attrib['format'][0] == 's'
      dot  = s.attrib['format'].find('.')
      size = int(s.attrib['format'][sign:dot]) + int(s.attrib['format'][dot+1:])
      div = 1.0
      if dot >= 0:
        div = 2.0 ** int(s.attrib['format'][dot+1:])

      textfield = el('input')
      textfield.attrib['type'] = 'text'
      textfield.attrib['name'] = 'value'
      if name == s.tag:
        value = int(float(value) * div)
        gumi.write_symbol(name, value)
      rval = int(gumi.read_symbol(s.tag))
      if rval >= (1 << size): rval -= 2 << size
      textfield.attrib['value'] = str(1.0*rval / div)
      p.append(textfield)

      submit = el('input')
      submit.attrib['type'] = 'submit'
      p.append(submit)
      form.append(p)

      body.append(form)
    
    # sync time button
    form = el("form")
    form.attrib['action'] = ""
    
    p = el("p")

    p.text = time.ctime()
    namefield = el('input')
    namefield.attrib['type'] = 'hidden'
    namefield.attrib['name'] = 'name'
    namefield.attrib['value'] = 'set_time'
    p.append(namefield)
    
    valfield = el('input')
    valfield.attrib['type'] = 'hidden'
    valfield.attrib['name'] = 'value'
    valfield.attrib['value'] = ''
    p.append(valfield)
    
    if (name == namefield.attrib['value']):
      if value: gumi.set_time(value)
      else:     gumi.set_time()


    submit = el('input')
    submit.attrib['type'] = 'submit'
    submit.attrib['value'] = 'Sinhroniziraj cas'
    p.append(submit)
    form.append(p)

    body.append(form)

    return self.skeleton(body, gumi)