def chunkhexfile(filename): pic_mem={} eeprom_mem={} config_mem={} type='data' total=0 INHX='INX8M' Fcode='' cfg='' try: f=open(filename, 'r') except IOError: print "Can't open file:"+filename+"\n\n" return None,None,None hexfile=f.readlines() f.close() row_counter=1 age=gethexage(filename) for rec in hexfile: # Check Hex file Start code if rec[0]!=":": if rec[0]==";": message=str(rec) print message break else: message="Hex file not recognized:\nLine: "+str(row_counter)+ " File: "+filename+"\n\n" print message return None,None,None # Read Byte count byte_count=eval("0x"+rec[1:3]) #Calculate total bytes total=total+byte_count # Read register address address=eval("0x"+rec[3:7]) # Read record type record_type=eval("0x"+rec[7:9]) #Read Crc crc=eval("0x"+rec[9+2*byte_count:11+2*byte_count]) # Calculate checksum chs=byte_count+eval("0x"+rec[3:5])+eval("0x"+rec[5:7])+record_type if record_type==0x04: INHX='INHX32' extended_adress=eval("0x"+rec[9:13]) # Calculate checksum chs=chs+eval("0x"+rec[9:11])+eval("0x"+rec[11:13]) if extended_adress==0x0000: type='data' cfg='+cfg' elif extended_adress==0x0030: type='config' elif extended_adress==0x00F0: type='eeprom' # Get all data register if record_type==0 and type=='data': for i in range(9,9+2*byte_count,2): data=rec[i:i+2] pic_mem[address]=eval("0x"+data) # Calculate checksum chs=chs+pic_mem[address] if address%2: if pic_mem[address]<0x40 and Fcode=='': Fcode='16Fcode' if pic_mem[address]>0x3F and Fcode=='16Fcode': Fcode='18Fcode' address=address+1 # Get all config register if record_type==0 and type=='config': for i in range(9,9+2*byte_count,2): data=rec[i:i+2] config_mem[address]=eval("0x"+data) # Calculate checksum chs=chs+config_mem[address] address=address+1 # Get all EEPROM register if record_type==0 and type=='eeprom': for i in range(9,9+2*byte_count,2): data=rec[i:i+2] eeprom_mem[address]=eval("0x"+data) address=address+1 chs=(1+~chs)&0xff if chs!=crc: print 'Warning! CRC failed on line '+str(row_counter) row_counter=row_counter+1 print 'HEX: '+ age+' old,'+ INHX +' ,'+Fcode+cfg+ ', total='+str(total)+ ' bytes.' return pic_mem, eeprom_mem, config_mem
def chunk_hexfile(filename): INHX = 'INX8M' message = '' pic_series = '16Fcode' message_crc = '' cfg = '' eeprom = '' try: f = open(filename, 'r') except IOError: message = "Can't open file:" + filename + "\n\n" return None age = gethexage(filename) hexfile = f.readlines() f.close() row_counter = 1 total = 0 for rec in hexfile: if rec[0:15] == ':020000040000FA': total = total - 2 try: # Read Byte count byte_count = eval("0x" + rec[1:3]) #Calculate total bytes total = total + byte_count # Read register address address = eval("0x" + rec[3:7]) if address == 0x400E and pic_series == '16Fcode': cfg = '+cfg' if address > 0x4200 and pic_series == '16Fcode': eeprom = '+eeprom' # Read record type record_type = eval("0x" + rec[7:9]) #Read Crc crc = eval("0x" + rec[9 + 2 * byte_count:11 + 2 * byte_count]) # Calculate checksum chs = byte_count + eval("0x" + rec[3:5]) + eval("0x" + rec[5:7]) + record_type #Only for record data type if record_type == 0x00: pass #Check pic series mask and file check sum for i in range(9, 9 + 2 * byte_count, 4): #check sun for each line chs = chs + eval('0x' + rec[i:i + 2]) + eval('0x' + rec[i + 2:i + 4]) #checkin mask of hexfile mask = eval('0x' + rec[i:i + 4]) mask = (mask) & (0x00ff) if mask > 0x3f: pic_series = '18Fcode' #two's complement sum of the values of all fields chs = (1 + ~chs) & 0xff #Check if chs calculated an check sum readed from file are the same if chs != crc: message_crc = '\n Warning! CRC failed on line ' + str( row_counter) + '\n' print '\n Warning! CRC failed on line ' + str( row_counter) + '\n', elif record_type == 0x02 and INHX != 'INX32M': INHX = 'INX16M' elif record_type == 0x03 or record_type == 0x04: INHX = 'INX32M' if rec[0:15] == ':020000040030CA': cfg = '+cfg' if rec[0:15] == ':0200000400F00A': eeprom = '+eeprom' row_counter = row_counter + 1 except: #Check end hexfile line if rec[0:11] == ':00000001FF': pass # Check Hex file Start code if rec[0] != ":": if rec[0] == ";": message = str(rec) print message, else: message = "Hex file not recognized:\nLine: " + str( row_counter) + " File: " + filename + "\n\n" print message return None message = '\n HEX:' + age + ' old,' + INHX + ',' + pic_series + cfg + eeprom + ',total=' + str( total) + ' bytes.' return message
def chunk_hexfile(filename): INHX='INX8M' message='' pic_series='16Fcode' message_crc='' cfg='' eeprom='' try: f=open(filename, 'r') except IOError: message="Can't open file:"+filename+"\n\n" return None age=gethexage(filename) hexfile=f.readlines() f.close() row_counter=1 total=0 for rec in hexfile: if rec[0:15]==':020000040000FA': total=total-2 try: # Read Byte count byte_count=eval("0x"+rec[1:3]) #Calculate total bytes total=total+byte_count # Read register address address=eval("0x"+rec[3:7]) if address==0x400E and pic_series=='16Fcode': cfg='+cfg' if address>0x4200 and pic_series=='16Fcode': eeprom='+eeprom' # Read record type record_type=eval("0x"+rec[7:9]) #Read Crc crc=eval("0x"+rec[9+2*byte_count:11+2*byte_count]) # Calculate checksum chs=byte_count+eval("0x"+rec[3:5])+eval("0x"+rec[5:7])+record_type #Only for record data type if record_type==0x00: pass #Check pic series mask and file check sum for i in range(9,9+2*byte_count,4): #check sun for each line chs=chs+eval('0x'+rec[i:i+2])+eval('0x'+rec[i+2:i+4]) #checkin mask of hexfile mask=eval('0x'+rec[i:i+4]) mask=(mask)&(0x00ff) if mask>0x3f: pic_series='18Fcode' #two's complement sum of the values of all fields chs= (1+~chs)&0xff #Check if chs calculated an check sum readed from file are the same if chs!=crc: message_crc ='\n Warning! CRC failed on line '+str(row_counter)+'\n' print '\n Warning! CRC failed on line '+str(row_counter)+'\n', elif record_type==0x02 and INHX!='INX32M': INHX='INX16M' elif record_type==0x03 or record_type==0x04: INHX='INX32M' if rec[0:15]==':020000040030CA': cfg='+cfg' if rec[0:15]==':0200000400F00A': eeprom='+eeprom' row_counter=row_counter+1 except: #Check end hexfile line if rec[0:11] == ':00000001FF': pass # Check Hex file Start code if rec[0]!=":": if rec[0]==";": message=str(rec) print message, else: message="Hex file not recognized:\nLine: "+str(row_counter)+ " File: "+filename+"\n\n" print message return None message ='\n HEX:'+ age+' old,'+ INHX + ','+pic_series+cfg+eeprom+',total='+str(total)+ ' bytes.' return message