def check_wr_protection_area(self, num_blk, wr_data): # checks fields which have the write protection bit. # if the write protection bit is set, we need to protect that area from changes. write_disable_bit = self.read_field("WR_DIS", bitstring=False) mask_wr_data = BitString(len(wr_data)) mask_wr_data.set(0) blk = self.Blocks.get(self.Blocks.BLOCKS[num_blk]) if blk.write_disable_bit is not None and write_disable_bit & ( 1 << blk.write_disable_bit ): mask_wr_data.set(1) else: for e in self.Fields.EFUSES: field = self.Fields.get(e) if blk.id == field.block and field.block == num_blk: if field.write_disable_bit is not None and write_disable_bit & ( 1 << field.write_disable_bit ): data = self.read_field(field.name) data.set(1) mask_wr_data.pos = mask_wr_data.length - ( field.word * 32 + field.pos + data.len ) mask_wr_data.overwrite(data) mask_wr_data.invert() return wr_data & mask_wr_data
def extract_bufr_from_lrit_file(file_path, prefix, output_dir): """ read lrit file """ file_size = os.path.getsize(file_path) fp = open(file_path, "rb") bs = BitString(fp) cpt = 0 print("==== Looking for Bufrs in %s\n" % (file_path)) # look for BUFR in hex 0x42554652 f_val = bs.find('0x42554652', bytealigned=True) while f_val: begin = bs.pos print("** Found Bufr in pos %s\n" % (begin)) # read size bufr_value = bs.read(32).hex size = bs.read('uint:24') print("size in decimal = %s" % (size)) if size > file_size: print("Size read in bufr %d is bigger than the file size %d\n" % (size, file_size)) return #read all bits (end-begin)+1 bs.pos = begin read_bits = bs.read(size) dest_fp = open("%s/%s_bufr_%s.bufr" % (output_dir, prefix, cpt), "wb") dest_fp.write(read_bits.tobytes()) dest_fp.close() cpt += 1 #look for the next grib f_val = bs.find('0x42554652', start=bs.pos, bytealigned=True)
def extract_bufr_from_lrit_file(file_path, prefix, output_dir): """ read lrit file """ file_size = os.path.getsize(file_path) fp = open(file_path, "rb") bs = BitString(fp) cpt=0 print("==== Looking for Bufrs in %s\n" %(file_path)) # look for BUFR in hex 0x42554652 f_val = bs.find('0x42554652', bytealigned=True) while f_val: begin= bs.pos print("** Found Bufr in pos %s\n" % (begin) ) # read size bufr_value = bs.read(32).hex size = bs.read('uint:24') print("size in decimal = %s" %(size)) if size > file_size: print("Size read in bufr %d is bigger than the file size %d\n" %(size, file_size)) return #read all bits (end-begin)+1 bs.pos = begin read_bits = bs.read(size) dest_fp = open("%s/%s_bufr_%s.bufr" % (output_dir, prefix, cpt), "wb") dest_fp.write(read_bits.tobytes()) dest_fp.close() cpt +=1 #look for the next grib f_val = bs.find('0x42554652', start=bs.pos, bytealigned=True)
def extract_grib_from_lrit_file(file_path, prefix, output_dir): """ read lrit file """ fp = open(file_path, "rb") bs = BitString(fp) cpt = 0 print("==== Looking for Gribs in %s\n" % (file_path)) #look for HRAA70 in hex 0x485241413730 #f_val = bs.find('0x485241413730', bytealigned=True) #print("f_val = %s\n" %(f_val)) #bs.pos = f_val # look for GRIB in hex 0x47524942 f_val = bs.find('0x47524942', bytealigned=True) print("f_val = %s\n" % (f_val)) while f_val: begin = bs.pos print("begin = %d\n" % (begin)) #look for bulletin header bs.pos -= 21 * 8 bulletin_header = bs.read(18 * 8).hex print("Bulletin Header = %s\n" % bulletin_header) l = "%s" % bulletin_header header_name = binascii.unhexlify(l[2:]) header_name = header_name.replace(" ", "_") print("Bulletin Header = %s\n" % header_name) # look for GRIB in hex 0x47524942 f_val = bs.find('0x47524942', bytealigned=True) bs.pos = begin print("** Found Grib in pos %s" % (bs.bytepos)) # read size grib_value = bs.read(32).hex size = bs.read('uint:24') * 8 #print("size in decimal = %s" %(size)) #read all bits (end-begin)+1 bs.pos = begin read_bits = bs.read(size) dest_fp = open( "%s/%s_%s_%s.grb" % (output_dir, prefix, bulletin_header, cpt), "wb") dest_fp.write(read_bits.tobytes()) dest_fp.close() cpt += 1 #sys.exit(1) #look for the next grib f_val = bs.find('0x47524942', start=bs.pos, bytealigned=True)
def extract_grib_from_lrit_file(file_path, prefix, output_dir): """ read lrit file """ fp = open(file_path, "rb") bs = BitString(fp) cpt=0 print("==== Looking for Gribs in %s\n" %(file_path)) #look for HRAA70 in hex 0x485241413730 #f_val = bs.find('0x485241413730', bytealigned=True) #print("f_val = %s\n" %(f_val)) #bs.pos = f_val # look for GRIB in hex 0x47524942 f_val = bs.find('0x47524942', bytealigned=True) print("f_val = %s\n" %(f_val)) while f_val: begin = bs.pos print("begin = %d\n" % (begin)) #look for bulletin header bs.pos -= 21*8 bulletin_header = bs.read(18*8).hex print("Bulletin Header = %s\n" % bulletin_header) l = "%s" % bulletin_header header_name = binascii.unhexlify(l[2:]) header_name = header_name.replace(" ","_") print("Bulletin Header = %s\n" % header_name) # look for GRIB in hex 0x47524942 f_val = bs.find('0x47524942', bytealigned=True) bs.pos = begin print("** Found Grib in pos %s" % (bs.bytepos) ) # read size grib_value = bs.read(32).hex size = bs.read('uint:24')*8 #print("size in decimal = %s" %(size)) #read all bits (end-begin)+1 bs.pos = begin read_bits = bs.read(size) dest_fp = open("%s/%s_%s_%s.grb" % (output_dir, prefix, bulletin_header, cpt), "wb") dest_fp.write(read_bits.tobytes()) dest_fp.close() cpt +=1 #sys.exit(1) #look for the next grib f_val = bs.find('0x47524942', start=bs.pos, bytealigned=True)