import os fru_file="frudata.txt" internal = [] chassis = [] board = [] product = [] def array_to_string(arr): result = "" for element in arr: result += chr(element) return result def parse_internal(): pass def parse_chassis(): pass def parse_board(): print("") print("Board Field") board_mfg_time = board[3:5] cnt=5 board_manufactor_length=board[cnt+1]-192 cnt+=2 board_manufactor=board[cnt:cnt+board_manufactor_length] cnt=cnt+board_manufactor_length board_product_name_length=board[cnt]-192 cnt+=1 board_product_name=board[cnt:cnt+board_product_name_length] cnt=cnt+board_product_name_length board_sn_length=board[cnt]-192 cnt+=1 board_sn=board[cnt:cnt+board_sn_length] cnt=cnt+board_sn_length board_pn_length=board[cnt]-192 cnt+=1 board_pn=board[cnt:cnt+board_pn_length] cnt=cnt+board_pn_length board_id_length=board[cnt]-192 cnt+=1 board_id=board[cnt:cnt+board_id_length] cnt=cnt+board_id_length print("Board Manufacturer : " + array_to_string(board_manufactor)) print("Board Product Name : " + array_to_string(board_product_name)) print("Board Serial Number: " + array_to_string(board_sn)) print("Board Part Number : " + array_to_string(board_pn)) print("Board Fru File ID : " + array_to_string(board_id)) while board[cnt] != 193: board_OEM_length=board[cnt]-192 cnt+=1 board_oem=board[cnt:cnt+board_OEM_length] cnt=cnt+board_OEM_length print("Board Extra : " + array_to_string(board_oem)) def parse_product(): print("") print("Product Field") cnt=3 product_manu_name_len = product[cnt] - 192 cnt+=1 product_manu_name=product[cnt:cnt+product_manu_name_len] cnt=cnt+product_manu_name_len product_product_name_len = product[cnt] - 192 cnt+=1 product_product_name=product[cnt:cnt+product_product_name_len] cnt=cnt+product_product_name_len product_pn_len = product[cnt] - 192 cnt+=1 product_pn=product[cnt:cnt+product_pn_len] cnt=cnt+product_pn_len product_version_len = product[cnt] - 192 cnt+=1 product_version=product[cnt:cnt+product_version_len] cnt=cnt+product_version_len product_sn_len = product[cnt] - 192 cnt+=1 product_sn=product[cnt:cnt+product_sn_len] cnt=cnt+product_sn_len product_asset_len = product[cnt] - 192 cnt+=1 product_asset=product[cnt:cnt+product_asset_len] cnt=cnt+product_asset_len product_id_len = product[cnt] - 192 cnt+=1 product_id=product[cnt:cnt+product_id_len] cnt=cnt+product_id_len print("Product Manufacturer : " + array_to_string(product_manu_name)) print("Product Name : " + array_to_string(product_product_name)) print("Product Part Number : " + array_to_string(product_pn)) print("Product Version : " + array_to_string(product_version)) print("Product Serial Numebr: " + array_to_string(product_sn)) print("Product Asset Tag : " + array_to_string(product_asset)) print("Product Fru File ID : " + array_to_string(product_id)) while product[cnt] != 193: product_OEM_length=product[cnt]-192 cnt+=1 product_oem=product[cnt:cnt+product_OEM_length] cnt=cnt+product_OEM_length print("Product Extra : " + array_to_string(product_oem)) def parse_fru_data(): print("===> Start Parse Fru data") if len(internal) > 0: parse_internal() if len(chassis) > 0: parse_chassis() if len(board) > 0: parse_board() if len(product) > 0: parse_product() def split_fru_data(data): print("===> Start split fru data") header = data[0:8] internal_offset = header[1] * 8 chassis_offset = header[2] * 8 board_offset = header[3] * 8 product_offset = header[4] * 8 if internal_offset > 0: internal_data_length = data[internal_offset+1]*8 global internal internal = data[internal_offset : internal_offset+internal_data_length] if chassis_offset > 0: chassis_data_length = data[chassis_offset+1]*8 global chassis chassis = data[chassis_offset : chassis_offset+chassis_data_length ] if board_offset > 0: board_data_length = data[board_offset+1]*8 global board board = data[board_offset : board_offset+board_data_length] print("board data") print(board) if product_offset > 0: product_data_length = data[product_offset+1]*8 global product product = data[product_offset : product_offset+product_data_length] print("product data") print(product) print("<=== Complete split fru data") def load_fru_txt_file(): if os.path.exists(fru_file): print(f"{fru_file} exists.") else: print(f"{fru_file} does not exist.") exit(1) print("===> Start load fru file") result = [] with open(fru_file, 'r') as file: lines = file.readlines() for line in lines: hex_numbers = line.strip().split() for hex_num in hex_numbers: decimal_num = int(hex_num, 16) result.append(decimal_num) print(result) print("<=== Complete load fru data") return result if __name__ == "__main__": fru_data = load_fru_txt_file() split_fru_data(fru_data) parse_fru_data()