def boot_prog_bin(path, faddr, xmmode1k=False): ret = False rsp = None gw_report.clear() try: size = os.path.getsize(path) fp = open(path, 'rb') data = list(fp.read(size)) except: traceback.print_exc() return gw_report.result(str(False)) #progr [hex(addr), hex(size), checksum] ret, rsp = func.cmd('progr', [hex(faddr), hex(size), crc16(0, data)]) #print(ret) if (ret == False): return gw_report.result(str(ret)) #print(itm[1]) if (xmmode1k): ret = func.xmdm_send_1k(data) else: ret = func.xmdm_send(data) print(ret) return gw_report.result(str(ret))
def boot_uartrun(path, faddr, xmmode1k=False): ret = False rsp = None gw_report.clear() data = func.hexfile_analyze(path) if (len(data) != 1): return gw_report.result(str(False)) #print(data) itm = data[0] #uartrun [hex(addr), hex(size), checksum] ret, rsp = func.cmd( 'uartrun', [hex(itm[0]), hex(len(itm[1])), crc16(0, itm[1])]) #print(ret) if (ret == False): return gw_report.result(str(ret)) #print(itm[1]) if (xmmode1k): ret = func.xmdm_send_1k(itm[1]) else: ret = func.xmdm_send(itm[1]) print(ret) return gw_report.result(str(ret))
def boot_prog_hexf(hexf_path, xmmode1k=False): ret = True rsp = None gw_report.clear() data = func.hexfile_analyze(hexf_path) #print(hex(data[0][0]), hex(len(data[0][1]))) #print(hex(data[1][0]), hex(len(data[1][1]))) #return #print(data) for itm in data: #progr [addr, size] ret, rsp = func.cmd('progr', [hex(itm[0]), hex(len(itm[1]))]) #print(ret) if (ret == False): break #print(itm[1]) if (xmmode1k): ret = func.xmdm_send_1k(itm[1]) else: ret = func.xmdm_send(itm[1]) print(ret) if (ret == False): break return gw_report.result(str(ret))
def boot_quit(): ret = True gw_report.clear() ret = func.cmd('quit') return gw_report.result(str(ret))
def ble_hook(event_name): global cancelPairing gw_report.clear() hook = session_ble.hook_create(event_name) ss = session_ble.ble_ss() if(ss.connect() == False): return gw_report.result('False') ss.qclr() print('start send packet') ss.send_cmd(hook) print('wait response...') ret = ss.wait_rsp(0) print(ret) return gw_report.result(str(ret))
def boot_etssf(): ret = False rsp = None gw_report.clear() ret, rsp = func.cmd('etssf', None, 5) #print(ret) return gw_report.result(str(ret))
def boot_write(faddr, value): ret = False rsp = None gw_report.clear() ret, rsp = func.cmd('write', [hex(faddr), hex(value)], 5) #print(ret) return gw_report.result(str(ret))
def boot_er64k(faddr): ret = False rsp = None gw_report.clear() ret, rsp = func.cmd('er64k', [hex(faddr)], 5) #print(ret) return gw_report.result(str(ret))
def boot_rdreg(reg): ret = False rsp = None gw_report.clear() ret, rsp = func.cmd('rdreg', [hex(reg)]) #print(ret) return gw_report.result(str(ret))
def boot_wrreg(reg, value): ret = False rsp = None gw_report.clear() ret, rsp = func.cmd('wrreg', [hex(reg), hex(value)]) #print(ret) return gw_report.result(str(ret))
def boot_connect(port, cmd='URC48M'): ret = True gw_report.clear() print('connecting') ret = func.dwc(port, cmd) if (ret is not None): func.baudrate(ret[0], ret[1]) else: func.baudrate('', 0) return gw_report.result(str(ret))
def boot_cmd(c, para=None): ret = True rsp = None gw_report.clear() if (para is not None): if (type(para) is not list): para = [para] ret, rsp = func.cmd(c, para) print(ret) return gw_report.result(str(ret))
def boot_util_xmdm(path): ret = True rsp = None gw_report.clear() size = os.path.getsize(path) fp = open(path, 'rb') data = fp.read(size) ret = func.xmdm_send_1k(data) fp.close() print(ret) return gw_report.result(str(ret))
def ble_cmd(api, param = None, rsp_cnt = 0): global cancelPairing gw_report.clear() cmd = session_ble.cmd_create(api) if(param is not None): cmd = session_ble.cmd_param(cmd, param) print(cmd) ss = session_ble.ble_ss() if(ss.connect() == False): return gw_report.result('False') ss.qclr() print('start send packet') ss.send_cmd(cmd) print('wait response...') ret = ss.wait_rsp(0) print(ret) for i in range(rsp_cnt): ret = ss.wait_rsp(0) print(ret) return gw_report.result(str(ret))
def exec_case(casecmd): global dict_setting global global_sock global dict_tstcase_variable global global_Notify_Index param = [] if len(casecmd[2]) > 0: param = casecmd[2].split(' ') cmdlist = [casecmd[1]] cmdlist = cmdlist + param #print('cmdlist is:',cmdlist) #global variable replacement for i in range(len(cmdlist) - 1): v = dict_tstcase_variable.get(cmdlist[i + 1]) if (v is not None): cmdlist[i + 1] = v func, paramstr = case.case_parse(cmdlist) cmd = cmdlist[0] #print(cmd) try: exec('func' + paramstr) except: traceback.print_exc() print('Error: Unknow command: %s' % cmd) return False result = gw_report.result() # print("result = gw_report.result():") # print(type(result)) # print(result) # print("here:") # print(casecmd) # print(result) if eval(result) == None or eval(result) == False: report(casecmd, result) elif isinstance(eval(result), list): if len(eval(result)) >= 3: for i in eval(result)[2]: # len(i) == 0 , htest.disconnect will return [] # print(i) if len(i) <= 3: pass elif i[0] != 0: if len(i) == 9 and i[0] == 4 and i[1] == 0xFF and i[ 3] == 0x06 and i[4] == 0x06 and i[8] != 0x16: print("BLE disconnected") raise Exception("BLE disconnected") elif len(i) == 9 and i[0] == 4 and i[1] == 0xFF and i[ 3] == 0x06 and i[4] == 0x06 and i[8] == 0x16: global_Notify_Index = 0 # notify data elif len(i) > 5 and i[3] == 0x1b and i[4] == 0x05: recv_notify_idx = i[-1] + i[-2] * 256 if global_Notify_Index != recv_notify_idx: # print("Notify Index Error") # casecmd[-1]="Notify Index Error" rets = [ "Notify Received Index", "", "Should be", "" ] rets[1] = recv_notify_idx rets[3] = global_Notify_Index # print(rets) report(casecmd, str(rets)) global_Notify_Index = recv_notify_idx + 1 elif len(i) == 9 and i[3] == 0x14 and i[4] == 0x04 and i[ 5] == 0: rets = "PER Reset Success" report(casecmd, str(rets)) elif len(i) == 17 and i[3] == 0x14 and i[4] == 0x04 and i[ 5] == 0: rets = [ "PER Read:", "NumPkts", "", "NumCrcErr", "", "NumEvents", "", "NumMissedEvents", "" ] rets[2] = i[9] + i[10] << 8 rets[4] = i[11] + i[12] << 8 rets[6] = i[13] + i[14] << 8 rets[8] = i[15] + i[16] << 8 report(casecmd, str(rets)) elif i[0] == 4 and i[1] == 0xFF and i[3] == 0x7F and i[ 4] == 0x06 and i[5] != 0: print("BLE disconnected when write") raise Exception("BLE disconnected when write") elif i[0] != 0: # disconnect # .. # .. # SetPhy # updateDataLength if (len(i) == 9 and i[0] == 4 and i[1] == 0xFF and i[3] == 0x06 and i[4] == 0x06) or \ (i[0] == 4 and i[1] == 0x3E and i[3] == 0x0c and i[4] == 0) or \ (i[0] == 4 and i[1] == 0x0E and i[6] == 0x0c ) or \ (len(i) == 7 and i[0] == 4 and i[1] == 0x0F and i[3] == 0 and i[5] == 0x32 and i[6] == 0x20) or \ (len(i) == 9 and i[0] == 4 and i[1] == 0x0E and i[4] == 0x22 and i[ 5] == 0x20 and i[6] == 0): pass else: report(casecmd, str(i)) elif i[0] == 0: if len(i) == 9 and i[1] == 0xFF and i[-1] == 0xFF: report(casecmd, str(i)) rets = [ "Uart Received seq missed serialized data", "", "", "" ] report(casecmd, str(rets)) return True
def ble_wait(ms = 1000): time.sleep(0.001*ms) return gw_report.result('True')
def boot_baudrate(port=None, value=None): ret = True gw_report.clear() ret = func.baudrate(port, value) print(ret) return gw_report.result(str(ret))
def boot_util_hexf(primary, alternate=None, alt_active=False, alt_addr=0x100000): ret = True gw_report.clear() ih = IH() bs_word = [0xffffffff] * (int(8192 / 4)) #primary #[[raddr,data]..] prim_data = func.hexfile_analyze(primary) bs_word[0] = len(prim_data) #IMAG_NUM bs_word[2] = FLASH_BASE #IMAG_ENTRY_ADDR if (alt_active == False): bs_word[3] = 0x0000_000E #IMAG_BOOT_FLG = active else: bs_word[ 3] = 0x0000_000C #IMAG_BOOT_FLG = old firmware, alternate if no active firmware valid #base = 0x4000 faddr = FLASH_BASE + 0x4000 for i in range(len(prim_data)): size = len(prim_data[i][1]) bs_word[int(0x100 / 4) + 4 * i] = faddr #IMAG_ADDR flash addr bs_word[int(0x104 / 4) + 4 * i] = size #IMAG_SIZE bs_word[int(0x108 / 4) + 4 * i] = prim_data[i][0] #IMAG_RUN bs_word[int(0x10c / 4) + 4 * i] = crc16(0, prim_data[i][1]) #IMAG_CSUM ih.puts(faddr, bytes(prim_data[i][1])) faddr += (size + 3) & 0xfffffffc # word aligned #alternate #[[raddr,data]..] if (alternate is not None): alt_data = func.hexfile_analyze(alternate) bs_word[0x100] = len(alt_data) #IMAG_NUM bs_word[0x102] = FLASH_BASE #IMAG_ENTRY_ADDR if (alt_active == True): bs_word[0x103] = 0x0000_000E #IMAG_BOOT_FLG = active else: bs_word[ 0x103] = 0x0000_000C #IMAG_BOOT_FLG = old firmware, alternate if no active firmware valid #base = 0x100000 faddr = FLASH_BASE + 0x100000 for i in range(len(alt_data)): size = len(alt_data[i][1]) bs_word[int(0x500 / 4) + 4 * i] = faddr #IMAG_ADDR flash addr bs_word[int(0x504 / 4) + 4 * i] = size #IMAG_SIZE bs_word[int(0x508 / 4) + 4 * i] = alt_data[i][0] #IMAG_RUN bs_word[int(0x50c / 4) + 4 * i] = crc16(0, alt_data[i][1]) #IMAG_CSUM ih.puts(faddr, bytes(alt_data[i][1])) faddr += (size + 3) & 0xfffffffc # word aligned bs_byte = [0xff] * 8192 for i in range(0, 4096, 4): tmp = bs_word[int(i / 4)] bs_byte[i] = tmp & 0xff bs_byte[i + 1] = (tmp >> 8) & 0xff bs_byte[i + 2] = (tmp >> 16) & 0xff bs_byte[i + 3] = (tmp >> 24) & 0xff ih.puts(FLASH_BASE + 0x2000, bytes(bs_byte)) ih.write_hex_file(primary + '.hexf') return gw_report.result(str(ret))
def ble_print(num = 1): print('just print:',num) return gw_report.result(str(True))