diff --git a/Ccs/ccs_function_lib.py b/Ccs/ccs_function_lib.py index d5cacb4854e35d130da865fdad82d00860ad8414..912a225152bae1e1a7e00821bf5c7c00f155d903 100644 --- a/Ccs/ccs_function_lib.py +++ b/Ccs/ccs_function_lib.py @@ -2850,7 +2850,7 @@ def srectosrecmod(input_srec, output_srec, imageaddr=0x40180000, linesperpack=61 def upload_srec(fname, memid, memaddr, segid, pool_name='LIVE', tcname=None, linesperpack=50, sleep=0.125, - max_pkt_size=MAX_PKT_LEN, progress=True): + max_pkt_size=MAX_PKT_LEN, progress=True, image_crc=True): """ Upload data from an SREC file to _memid_ via S6,2 @param fname: @@ -2863,6 +2863,7 @@ def upload_srec(fname, memid, memaddr, segid, pool_name='LIVE', tcname=None, lin @param sleep: @param max_pkt_size: @param progress: + @param image_crc: """ # get service 6,2 info from MIB apid, memid_ref, fmt, endspares = _get_upload_service_info(tcname) @@ -2879,10 +2880,12 @@ def upload_srec(fname, memid, memaddr, segid, pool_name='LIVE', tcname=None, lin data_size = len(''.join(lines)) // 2 startaddr = int(f[0][4:12], 16) + upload_bytes = b'' linecount = 0 bcnt = 0 pcnt = 0 ptot = None + while linecount < len(f) - 1: t1 = time.time() @@ -2921,7 +2924,10 @@ def upload_srec(fname, memid, memaddr, segid, pool_name='LIVE', tcname=None, lin logger.warning('Packet length ({}) exceeding MAX_PKT_LEN of {} bytes!'.format(len(puspckt), MAX_PKT_LEN)) Tcsend_bytes(puspckt, pool_name=pool_name, pmgr_handle=pmgr) + # collect all uploaded segments for CRC at the end + upload_bytes += data pcnt += 1 + if progress: if ptot is None: ptot = int(np.ceil(data_size / dlen)) # packets needed to transfer SREC payload @@ -2939,8 +2945,13 @@ def upload_srec(fname, memid, memaddr, segid, pool_name='LIVE', tcname=None, lin puspckt = Tcpack(data=packetdata, st=6, sst=2, apid=apid, sc=counters[apid], ack=0b1001) Tcsend_bytes(puspckt, pool_name=pool_name, pmgr_handle=pmgr) counters[apid] += 1 + print('\nUpload finished, {} bytes sent in {}(+1) packets.'.format(bcnt, pcnt)) + if image_crc: + # return total length of uploaded data (without termination segment) and CRC over entire image, including segment headers + return len(upload_bytes), crc(upload_bytes) + def segment_data(data, segid, addr, seglen=480): """