From 7df32ad836e8de39db1bc71cea38394e8fc1e117 Mon Sep 17 00:00:00 2001 From: Marko Mecina <marko.mecina@univie.ac.at> Date: Tue, 28 Jan 2025 14:38:29 +0100 Subject: [PATCH] improve S6 SREC upload --- Ccs/ccs_function_lib.py | 48 +++++++++++++++++++++++++++++++++-------- 1 file changed, 39 insertions(+), 9 deletions(-) diff --git a/Ccs/ccs_function_lib.py b/Ccs/ccs_function_lib.py index dc8eec0..e3cdd40 100644 --- a/Ccs/ccs_function_lib.py +++ b/Ccs/ccs_function_lib.py @@ -3907,7 +3907,7 @@ def srectosrecmod(input_srec, output_srec, imageaddr=0x40180000, linesperpack=61 source_to_srec('srec_binary_source.TC', output_srec, memaddr=imageaddr) -def srec_to_s6(fname, memid, memaddr, segid, tcname=None, linesperpack=50, max_pkt_size=MAX_PKT_LEN, image_crc=True): +def srec_to_s6(fname, memid, memaddr, segid, tcname=None, linesperpack=50, max_pkt_size=MAX_PKT_LEN, image_crc=True, return_upload=False): # get service 6,2 info from MIB apid, memid_ref, fmt, endspares = _get_upload_service_info(tcname) pkt_overhead = TC_HEADER_LEN + struct.calcsize(fmt) + SEG_HEADER_LEN + SEG_SPARE_LEN + SEG_CRC_LEN + len( @@ -3983,9 +3983,15 @@ def srec_to_s6(fname, memid, memaddr, segid, tcname=None, linesperpack=50, max_p if image_crc: # return total length of uploaded data (without termination segment) and CRC over entire image, including segment headers - return pckts, len(upload_bytes), crc(upload_bytes) + if return_upload: + return pckts, upload_bytes, crc(upload_bytes) + else: + return pckts, len(upload_bytes), crc(upload_bytes) - return pckts + if return_upload: + return pckts, upload_bytes + else: + return pckts def upload_srec(fname, memid, memaddr, segid, pool_name='LIVE', tcname=None, linesperpack=50, sleep=0.125, @@ -4242,19 +4248,23 @@ def srec_direct(fname, memid, pool_name='LIVE', max_pkt_size=MAX_PKT_LEN, tcname linecount = 0 nextlinelength = len(lines[linecount]) // 2 - while linecount < len(f) - 1: + while linecount < len(f): t1 = time.time() linepacklist = [] packlen = 0 while (packlen + nextlinelength) <= payload_len: - if linecount >= (len(lines) - 1): + if linecount >= (len(lines)): break linepacklist.append(lines[linecount]) linelength = len(lines[linecount]) // 2 packlen += linelength - if int(f[linecount + 1][4:12], 16) != (int(f[linecount][4:12], 16) + linelength): + + if (linecount + 1) >= len(f): + linecount += 1 + break + elif int(f[linecount + 1][4:12], 16) != (int(f[linecount][4:12], 16) + linelength): linecount += 1 newstartaddr = int(f[linecount][4:12], 16) break @@ -4294,6 +4304,7 @@ def srec_direct(fname, memid, pool_name='LIVE', max_pkt_size=MAX_PKT_LEN, tcname if data == b'': print('No data left, exit upload.') + print('Upload finished, {} bytes sent in {} packets.'.format(bcnt, pcnt)) return memaddr = newstartaddr @@ -5571,7 +5582,7 @@ def get_packets_from_pool(pool_name, indices=None, st=None, sst=None, apid=None, :param apid: :return: """ - new_session = scoped_session_storage + new_session = scoped_session_storage() rows = new_session.query( DbTelemetry @@ -5950,6 +5961,25 @@ def get_hk_def_tcs(filename, sid=None, sidoff=TC_HEADER_LEN, sidbs=2): return pkts +def pktinfo_report(pkt): + """ + Format raw packet data for insertion into test report + + :param pkt: + :return: + """ + + TEXT = "& \\multicolumn{{3}}{{|p{{18cm}}|}}{{\\vspace{{-2mm}} \\footnotesize \nTM({},{}) {} @ {} \\newline\n\\begin{{tabular}}{{l}} \\end{{tabular}}\\vspace{{1mm}} }}\\\\ \\hline\n" + + name = Tmdata(pkt)[-1][0] + head = Tmread(pkt)[0] + t = get_cuctime(pkt) + + msg = TEXT.format(head.SERV_TYPE, head.SERV_SUB_TYPE, name, t).replace('_', '\\_') + + return msg + + class DbTools: """ SQL database management tools @@ -6509,11 +6539,11 @@ class TestReport: response = dialog.run() if response == Gtk.ResponseType.YES: - result = 'VERIFIED' + result = 'OK' comment = dialog.comment.get_text() dialog.destroy() elif response == Gtk.ResponseType.NO: - result = 'FAILED' + result = 'NOT_OK' comment = dialog.comment.get_text() dialog.destroy() else: -- GitLab