Exemplo n.º 1
0
Arquivo: tblc.py Projeto: almost/tblc
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
Exemplo n.º 3
0
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