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
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'))
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)
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)
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)
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)