diff --git a/nicsensor.sh b/nicsensor.sh index 981caec..2efedee 100755 --- a/nicsensor.sh +++ b/nicsensor.sh @@ -977,8 +977,8 @@ write_read_chip(){ cmd_wr=$option_data res_wr=`$cmd_wr` - format_print $INFO ">>> Chip Command: $cmd_wr" - format_print $INFO ">>> The Result : $res_wr" + format_print $INFO "Chip Command: $cmd_wr" + format_print $INFO "The Result : $res_wr" } process_chip(){ diff --git a/tool/fru_parse.py b/tool/fru_parse.py new file mode 100644 index 0000000..749d461 --- /dev/null +++ b/tool/fru_parse.py @@ -0,0 +1,194 @@ +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() \ No newline at end of file diff --git a/tool/frudata.txt b/tool/frudata.txt new file mode 100644 index 0000000..d89ed33 --- /dev/null +++ b/tool/frudata.txt @@ -0,0 +1,16 @@ +01 00 00 01 0c 00 00 f2 01 0b 00 78 20 df c7 69 +6e 61 67 69 6c 65 c2 4e 43 cf 30 30 30 30 30 30 +30 30 30 30 30 30 30 30 30 ce 59 5a 4e 43 2d 58 +58 58 58 58 2d 59 59 59 c0 cf 4e 55 4c 4c 20 20 +20 20 20 20 20 20 20 20 20 ce 4e 55 4c 4c 20 20 +20 20 20 20 20 20 20 20 c1 00 00 00 00 00 00 88 +01 0b 00 cc 49 45 49 54 20 53 59 53 54 45 4d 53 +e0 45 4e 58 58 58 58 58 58 2d 58 58 58 20 20 20 +20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 +20 ce 59 5a 4e 43 2d 58 58 58 58 58 2d 59 59 59 +c2 30 31 cf 30 30 30 30 30 30 30 30 30 30 30 30 +30 30 30 c0 c0 c1 00 3b ff ff ff ff ff ff ff ff +ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff +ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff +ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff +ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff \ No newline at end of file