From 534cf9a68d718ef9e684314cbd92d838bc753d64 Mon Sep 17 00:00:00 2001 From: leimingsheng Date: Fri, 3 Jan 2025 15:09:49 +0800 Subject: [PATCH] =?UTF-8?q?feat(master=20:=20tool)=20fru=20parse=E5=B7=A5?= =?UTF-8?q?=E5=85=B7=E6=B7=BB=E5=8A=A0chassis=E5=9F=9F=E7=9A=84=E8=A7=A3?= =?UTF-8?q?=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tool/fru_parse.py | 62 +++++++++++++++++++++++++++++++++++------------ 1 file changed, 47 insertions(+), 15 deletions(-) diff --git a/tool/fru_parse.py b/tool/fru_parse.py index 749d461..621e4ec 100644 --- a/tool/fru_parse.py +++ b/tool/fru_parse.py @@ -1,4 +1,5 @@ import os +import time fru_file="frudata.txt" internal = [] @@ -6,26 +7,61 @@ chassis = [] board = [] product = [] +chassis_list = [ "NULL", "Others", "Unkownm", "Desktop", "Low Profile Desktop", "Pizza Box", + "Mini Tower", "Tower", "Portable", "Laptop", "Notebook", "Hand Held", + "Docking Station", "All in One", "Sub Notebook", "Space-saving", "Lunch Box", + "Main Server Chassis", "Expansion Chassis", "SubChassis", "Bus Expansion Chassis", + "Peripheral Chassis", "RAID Chassis", "Rack Mount Chassis", "Sealed-case PC", + "Multi-system chassis", "Compact PCI", "Advanced TCA", "Blade", "Blade Enclosure", + "Tablet", "Convertible", "Detachable", "IoT Gateway", "Embedded PC", "Mini PC", "Stick PC"] + def array_to_string(arr): result = "" for element in arr: result += chr(element) return result -def parse_internal(): - pass - def parse_chassis(): - pass + print("") + print("Chassis Field") + + chassis_type_num = chassis[2] + chassis_type = chassis_list[chassis_type_num] + + cnt = 3 + chassis_part_number_len = chassis[cnt] - 192 + cnt += 1 + chassis_part_number = chassis[cnt : cnt+chassis_part_number_len] + cnt += chassis_part_number_len + + chassis_sn_len = chassis[cnt] - 192 + cnt += 1 + chassis_sn = chassis[cnt : cnt+chassis_sn_len] + cnt += chassis_sn_len + + print("Chassis Type : " + chassis_type) + print("Chassis Part Number : " + array_to_string(chassis_part_number)) + print("Chassis Serial Number : " + array_to_string(chassis_sn)) + + while chassis[cnt] != 193: + chassis_OEM_length=chassis[cnt]-192 + cnt+=1 + chassis_oem=chassis[cnt:cnt+chassis_OEM_length] + cnt=cnt+chassis_OEM_length + print("Chassis Extra : " + array_to_string(chassis_oem)) + def parse_board(): print("") print("Board Field") - board_mfg_time = board[3:5] + + pass_time = (board[3] + board[4]*256 + board[5]*256*256) * 60 + pass_sec=pass_time + 820454400 + board_mfg_time = time.ctime(pass_sec) - cnt=5 - board_manufactor_length=board[cnt+1]-192 - cnt+=2 + cnt=6 + board_manufactor_length=board[cnt]-192 + cnt+=1 board_manufactor=board[cnt:cnt+board_manufactor_length] cnt=cnt+board_manufactor_length @@ -49,6 +85,7 @@ def parse_board(): board_id=board[cnt:cnt+board_id_length] cnt=cnt+board_id_length + print("Board Mfg Time : " + board_mfg_time) 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)) @@ -121,8 +158,6 @@ def parse_product(): def parse_fru_data(): print("===> Start Parse Fru data") - if len(internal) > 0: - parse_internal() if len(chassis) > 0: parse_chassis() @@ -141,15 +176,12 @@ def split_fru_data(data): 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 ] + print("chassis data") + print(chassis) if board_offset > 0: board_data_length = data[board_offset+1]*8