diff --git a/cube/src/create_nicsensor.py b/cube/src/create_nicsensor.py index 66651de..b4f89c4 100644 --- a/cube/src/create_nicsensor.py +++ b/cube/src/create_nicsensor.py @@ -459,11 +459,756 @@ reset_pca9548(){ except Exception as e: dbg_print("Error", f"An error ouccuer when load public function") +def load_default_function(): + default_function_content = """ +# Base on the server type, set i2c conf +set_configuration(){ + + case $server_type in + "oem") + set_configuration_oem + *) + format_print $ERROR "Error: Uncorrectable Script Error" + exit 1 + ;; + esac +} + +init_debuglog(){ + # only save one running log + if [ -e $log ];then + rm $log + fi + + # print time header + res_date=`date +%Y-%m-%dT%H:%M:%S` + format_log_print $INFO "Start Time : $res_date" + format_log_print $INFO "Script Version : $SCRIPT_VERSION" +} + +# Before start test, record configurtion to log +record_config_info(){ + + format_log_print $INFO "I2C Bus: $i2c_bus" + if [ $is_have_pca9641 -eq 1 ];then + format_log_print $INFO "PCA9641 slave: $pca9641_slave" + fi + format_log_print $INFO "PCA9548 slave: $pca9548_slave" + format_log_print $INFO "PCA9548 channel: $pca9548_channel" + + # Record i2c device info to log + format_log_print $INFO "At the beginning, I2C bus status:" + i2cdetect -y $i2c_bus >> $log +} + +get_pca9641_control(){ + + # Request 9641 lock + res_lock=`i2ctransfer -y $i2c_bus w2@$pca9641_slave $REG_pca9641_controll 0x81 r1` + format_log_print $INFO "After request 9641 lock, The REG value is $res_lock" + + # Build 9641 Connection + res_build=`i2ctransfer -y $i2c_bus w2@$pca9641_slave $REG_pca9641_controll 0x85 r1` + format_log_print $INFO "After Build 9641 connection, The REG value is $res_build" + + # After get 9641 controll, Record i2c device info to log + i2cdetect -y $i2c_bus >> $log + + if [ "$res_build" != "0x87" ];then + format_print $ERROR "Cannot establish connection with pca9641 !!!" + exit 1 + fi +} + +switch_pca9548_channel(){ + + # set 9548 channel + res_setchannel=`i2ctransfer -y $i2c_bus w1@$pca9548_slave $pca9548_channel` + format_log_print $INFO "After switch channel" + + # After set 9548 channel , record i2c device info + i2cdetect -y $i2c_bus >> $log +} +""" + +# sensor function add here + default_function_content += """ +# --------------------------------------------------------- +# Chip EMC1413 +# --------------------------------------------------------- +# process sensor data then print to console +# @Param1 emc1413 data high 8bit +# @Param2 emc1413 data low 8bit +# @Param3 customization channel name +convert_emc1413_data(){ + # remove data prefix '0x' + hex_value1=$(echo "$1" | awk '{sub(/^0x/,""); print}') + hex_value2=$(echo "$2" | awk '{sub(/^0x/,""); print}') + + # bc calculator recognized upper case only, change data to upper case + upper_hex_value1=$(echo "$hex_value1" | awk '{ + for(i=1; i<=length($0); i++){ + if(tolower(substr($0,i,1)) ~ /^[a-f]$/) + printf toupper(substr($0,i,1)); + else + printf substr($0,i,1); + } + print "" + }') + upper_hex_value2=$(echo "$hex_value2" | awk '{ + for(i=1; i<=length($0); i++){ + if(tolower(substr($0,i,1)) ~ /^[a-f]$/) + printf toupper(substr($0,i,1)); + else + printf substr($0,i,1); + } + print "" + }') + + # change data from hex to dec + dec_value1=$(echo "ibase=16; $upper_hex_value1" | bc) + dec_value2=$(echo "ibase=16; $upper_hex_value2" | bc) + + # calculate tempreture + temp=$(echo "scale=4; $dec_value1 + ($dec_value2 / 32 * 0.125 )" | bc) + + # print result to consol + format_temp=$(echo "$temp" | awk '{ if ($0 ~ /^\./) print "0" $0; else print $0 }') + + echo "$3 : $format_temp C, hex value : $hex_value1 $hex_value2" + +} + +# Get the sensor data, then parse raw data +read_emc1413_channel_value(){ + + format_log_print $INFO "Start EMC1413 channel data ..." + + res_td1_h=`i2ctransfer -y $i2c_bus w1@$chip_slave $REG_emc1413_TD1_H r1` + res_td1_l=`i2ctransfer -y $i2c_bus w1@$chip_slave $REG_emc1413_TD1_L r1` + res_td2_h=`i2ctransfer -y $i2c_bus w1@$chip_slave $REG_emc1413_TD2_H r1` + res_td2_l=`i2ctransfer -y $i2c_bus w1@$chip_slave $REG_emc1413_TD2_L r1` + res_td3_h=`i2ctransfer -y $i2c_bus w1@$chip_slave $REG_emc1413_TD3_H r1` + res_td3_l=`i2ctransfer -y $i2c_bus w1@$chip_slave $REG_emc1413_TD3_L r1` + + # record i2c raw data to log + format_log_print $INFO "channel 1 : $res_td1_h $res_td1_l" + format_log_print $INFO "channel 2 : $res_td2_h $res_td2_l" + format_log_print $INFO "channel 3 : $res_td3_h $res_td3_l" + + # start parse raw data + echo ">>> The emc1413 value is:" + convert_emc1413_data $res_td1_h $res_td1_l "$EMC1413_Channel0_name" + convert_emc1413_data $res_td2_h $res_td2_l "$EMC1413_Channel1_name" + convert_emc1413_data $res_td3_h $res_td3_l "$EMC1413_Channel2_name" + +} + +process_emc1413(){ + # emc1413 no need to init + + # get chip emc1413 value + read_emc1413_channel_value +} + +# --------------------------------------------------------- +# Chip ADC128 +# --------------------------------------------------------- +# adc128 chip init if need +check_adc128_init(){ + # Get Reg 0x00 status + res_adc128_status=`i2cget -y $i2c_bus $chip_slave $REG_adc128_config` + format_log_print $INFO "REG adc128 STATUS : $res_adc128_status" + + # if stauts is not 0x01 (Start Monitor) ,then do init + if [ "$res_adc128_status" != "0x01" ];then + format_log_print $INFO "Start Init ADC128 Chip" + # Init ADC128 work as mode 1 (0x02) + res_adc128_advance=`i2ctransfer -y $i2c_bus w2@$chip_slave $REG_adc128_advance 0x02` + # Set ADC128 on start (0x01) + res_adc128_setstart=`i2ctransfer -y $i2c_bus w2@$chip_slave $REG_adc128_config 0x01 r1` + + format_log_print $INFO "After Set status, the REG 0x00 value is $res_adc128_setstart" + fi +} + +# process sensor data then print to console +# @Param 1 adc128 data high 8bit +# @Param 2 adc128 data low 8bit +# @Param 3 customization channel name +# @Param 4 division factor +convert_adc128_data(){ + # remove data prefix '0x' + hex_value1=$(echo "$1" | awk '{sub(/^0x/,""); print}') + hex_value2=$(echo "$2" | awk '{sub(/^0x/,""); print}') + merge_value="${hex_value1}${hex_value2}" + + # bc calculator recognized upper case only, change data to upper case + upper_hex_value=$(echo "$merge_value" | awk '{ + for(i=1; i<=length($0); i++){ + if(tolower(substr($0,i,1)) ~ /^[a-f]$/) + printf toupper(substr($0,i,1)); + else + printf substr($0,i,1); + } + print "" + }') + + # calculate dec value then print it to console + dec_val=$(echo "ibase=16; $upper_hex_value" | bc) + volt=$(echo "scale=4; $dec_val / 16 / 4096 * 2.65 / $4" | bc) + format_volt=$(echo "$volt" | awk '{ if ($0 ~ /^\./) print "0" $0; else print $0 }') + + echo "$3 : $format_volt v, hex value: $upper_hex_value" +} + +# Get the sensor data, then parse raw data +read_adc128_channel_value(){ + format_log_print $INFO "Start Read ADC128 channel data ..." + + res_ch0=`i2ctransfer -y $i2c_bus w1@$chip_slave $REG_adc128_ch0 r2` + res_ch1=`i2ctransfer -y $i2c_bus w1@$chip_slave $REG_adc128_ch1 r2` + res_ch2=`i2ctransfer -y $i2c_bus w1@$chip_slave $REG_adc128_ch2 r2` + res_ch3=`i2ctransfer -y $i2c_bus w1@$chip_slave $REG_adc128_ch3 r2` + res_ch4=`i2ctransfer -y $i2c_bus w1@$chip_slave $REG_adc128_ch4 r2` + res_ch5=`i2ctransfer -y $i2c_bus w1@$chip_slave $REG_adc128_ch5 r2` + res_ch6=`i2ctransfer -y $i2c_bus w1@$chip_slave $REG_adc128_ch6 r2` + res_ch7=`i2ctransfer -y $i2c_bus w1@$chip_slave $REG_adc128_ch7 r2` + + # record i2c raw data to log + format_log_print $INFO "channel0 : $res_ch0" + format_log_print $INFO "channel1 : $res_ch1" + format_log_print $INFO "channel2 : $res_ch2" + format_log_print $INFO "channel3 : $res_ch3" + format_log_print $INFO "channel4 : $res_ch4" + format_log_print $INFO "channel5 : $res_ch5" + format_log_print $INFO "channel6 : $res_ch6" + format_log_print $INFO "channel7 : $res_ch7" + + # start parse raw data + echo ">>> The ADC128 value is :" + convert_adc128_data $res_ch0 "$ADC128_Channel0_name" $votage_division_factor_0 + convert_adc128_data $res_ch1 "$ADC128_Channel1_name" $votage_division_factor_1 + convert_adc128_data $res_ch2 "$ADC128_Channel2_name" $votage_division_factor_2 + convert_adc128_data $res_ch3 "$ADC128_Channel3_name" $votage_division_factor_3 + convert_adc128_data $res_ch4 "$ADC128_Channel4_name" $votage_division_factor_4 + convert_adc128_data $res_ch5 "$ADC128_Channel5_name" $votage_division_factor_5 + convert_adc128_data $res_ch6 "$ADC128_Channel6_name" $votage_division_factor_6 + convert_adc128_data $res_ch7 "$ADC128_Channel7_name" $votage_division_factor_7 +} + +process_adc128(){ + # check if chip adc128 need init + check_adc128_init + + # get chip adc128 value + read_adc128_channel_value +} + +# --------------------------------------------------------- +# Chip INA3221 +# --------------------------------------------------------- +# process sensor data then print to console +# @Param1 ina3221 data high 8bit +# @Param2 ina3221 data high 8bit +# @Param3 channel number +# @Param4 mode select 0 - shunt volt +# 1 - bus volt +# @Param5 shunt resistor(only used in mode shunt volt) +# @Param6 customization channel name +convert_ina3221_data(){ + + hex_value1=$(echo "$1" | awk '{sub(/^0x/,""); print}') + hex_value2=$(echo "$2" | awk '{sub(/^0x/,""); print}') + merge_value="${hex_value1}${hex_value2}" + + # bc calculator recognized upper case only, change data to upper case + upper_hex_value=$(echo "$merge_value" | awk '{ + for(i=1; i<=length($0); i++){ + if(tolower(substr($0,i,1)) ~ /^[a-f]$/) + printf toupper(substr($0,i,1)); + else + printf substr($0,i,1); + } + print "" + }') + + # change data from hex to dec + dec_val=$(echo "ibase=16; $upper_hex_value" | bc) + + if [ $4 -eq $INA3221_BUS_VOLT ];then + volt=$(echo "scale=4; $dec_val / 8 * 40 / 10000 * 2" | bc) + format_volt=$(echo "$volt" | awk '{ if ($0 ~ /^\./) print "0" $0; else print $0 }') + echo "$6 : $format_volt V, hex value: $upper_hex_value" + + if [ $3 -eq 0 ];then + ina3221_ch0_volt=$format_volt + elif [ $3 -eq 1 ];then + ina3221_ch1_volt=$format_volt + else + ina3221_ch2_volt=$format_volt + fi + + elif [ $4 -eq $INA3221_SHUNT_VOLT ];then + current_mv=$(echo "scale=4; $dec_val / 8 * 40 / 1000" | bc) + current=$(echo "scale=4; $current_mv / $5" | bc) + + format_current=$(echo "$current" | awk '{ if ($0 ~ /^\./) print "0" $0; else print $0 }') + format_current_mv=$(echo "$current_mv" | awk '{ if ($0 ~ /^\./) print "0" $0; else print $0 }') + + echo "$6 : $format_current A, shunt volt: $format_current_mv mV, shunt resistor: $5 mOhm, hex value: $upper_hex_value" + + if [ $3 -eq 0 ];then + ina3221_ch0_current=$format_current + elif [ $3 -eq 1 ];then + ina3221_ch1_current=$format_current + else + ina3221_ch2_current=$format_current + fi + + elif [ $4 -eq $INA3221_POWER ];then + # calculate power + power_ch0=$(echo "scale=4; $ina3221_ch0_volt * $ina3221_ch0_current" | bc) + power_ch1=$(echo "scale=4; $ina3221_ch1_volt * $ina3221_ch1_current" | bc) + power_ch2=$(echo "scale=4; $ina3221_ch2_volt * $ina3221_ch2_current" | bc) + + format_power_ch0=$(echo "$power_ch0" | awk '{ if ($0 ~ /^\./) print "0" $0; else print $0 }') + format_power_ch1=$(echo "$power_ch1" | awk '{ if ($0 ~ /^\./) print "0" $0; else print $0 }') + format_power_ch2=$(echo "$power_ch2" | awk '{ if ($0 ~ /^\./) print "0" $0; else print $0 }') + + total_power=$(echo "scale=4; $power_ch0 + $power_ch1 + $power_ch2" | bc) + + echo "$INA3221_Channel0_name : $format_power_ch0 W" + echo "$INA3221_Channel1_name : $format_power_ch1 W" + echo "$INA3221_Channel2_name : $format_power_ch2 W" + echo "total power: $total_power W" + fi +} + +# Get the sensor data, then parse raw data +read_ina3221_channel_value(){ + format_log_print $INFO "Start Read INA3221 channel data ..." + + res_ch0=`i2ctransfer -y $i2c_bus w1@$chip_slave $REG_ina3221_ch1 r2` + res_ch1=`i2ctransfer -y $i2c_bus w1@$chip_slave $REG_ina3221_ch2 r2` + res_ch2=`i2ctransfer -y $i2c_bus w1@$chip_slave $REG_ina3221_ch3 r2` + res_bus0=`i2ctransfer -y $i2c_bus w1@$chip_slave $REG_ina3221_bus1 r2` + res_bus1=`i2ctransfer -y $i2c_bus w1@$chip_slave $REG_ina3221_bus2 r2` + res_bus2=`i2ctransfer -y $i2c_bus w1@$chip_slave $REG_ina3221_bus3 r2` + + # record i2c raw data to log + format_log_print $INFO "channel 0 shunt volt: $res_ch0" + format_log_print $INFO "channel 1 shunt volt: $res_ch1" + format_log_print $INFO "channel 2 shunt volt: $res_ch2" + + format_log_print $INFO "Channel 0 bus volt : $res_bus0" + format_log_print $INFO "Channel 1 bus volt : $res_bus1" + format_log_print $INFO "Channel 2 bus volt : $res_bus2" + + # start parse raw data + echo ">>> The INA3221 shunt value is :" + convert_ina3221_data $res_ch0 0 $INA3221_SHUNT_VOLT $shunt_resistor_0 "$INA3221_Channel0_name" + convert_ina3221_data $res_ch1 1 $INA3221_SHUNT_VOLT $shunt_resistor_1 "$INA3221_Channel1_name" + convert_ina3221_data $res_ch2 2 $INA3221_SHUNT_VOLT $shunt_resistor_2 "$INA3221_Channel2_name" + + echo ">>> The INA3221 bus value is :" + convert_ina3221_data $res_bus0 0 $INA3221_BUS_VOLT null "$INA3221_Channel0_name" + convert_ina3221_data $res_bus1 1 $INA3221_BUS_VOLT null "$INA3221_Channel1_name" + convert_ina3221_data $res_bus2 2 $INA3221_BUS_VOLT null "$INA3221_Channel2_name" + + echo ">>> The INA3221 bus power is :" + convert_ina3221_data 0 0 0 $INA3221_POWER +} + +process_ina3221(){ + + # ina3221 no need to init first + + # get chip ina3221 value + read_ina3221_channel_value +} +# --------------------------------------------------------- +# Chip TMP468 +# --------------------------------------------------------- +# @Param1 tmp468 data high 8bit +# @Param2 tmp468 data high 8bit +# @Param3 customization channel name +convert_tmp468_data(){ + hex_value1=$(echo "$1" | awk '{sub(/^0x/,""); print}') + hex_value2=$(echo "$2" | awk '{sub(/^0x/,""); print}') + merge_value="${hex_value1}${hex_value2}" + + # bc calculator recognized upper case only, change data to upper case + upper_hex_value=$(echo "$merge_value" | awk '{ + for(i=1; i<=length($0); i++){ + if(tolower(substr($0,i,1)) ~ /^[a-f]$/) + printf toupper(substr($0,i,1)); + else + printf substr($0,i,1); + } + print "" + }') + + # change data from hex to dec + dec_val=$(echo "ibase=16; $upper_hex_value" | bc) + + temp=$(echo "scale=4; $dec_val / 8 * 0.0625" | bc) + echo "$3 : $temp " + +} + +read_tmp468_value(){ + format_log_print $INFO "Start Read tmp468 channel data ..." + + res_tmp468=`i2ctransfer -y $i2c_bus w1@$chip_slave $REG_tmp468 r18` + + format_log_print $INFO "Tmp468 raw data: $res_tmp468" + + tmp468_res1_h=`echo $res_tmp468 | awk '{print $1}'` + tmp468_res1_l=`echo $res_tmp468 | awk '{print $2}'` + tmp468_res2_h=`echo $res_tmp468 | awk '{print $3}'` + tmp468_res2_l=`echo $res_tmp468 | awk '{print $4}'` + tmp468_res3_h=`echo $res_tmp468 | awk '{print $5}'` + tmp468_res3_l=`echo $res_tmp468 | awk '{print $6}'` + tmp468_res4_h=`echo $res_tmp468 | awk '{print $7}'` + tmp468_res4_l=`echo $res_tmp468 | awk '{print $8}'` + tmp468_res5_h=`echo $res_tmp468 | awk '{print $9}'` + tmp468_res5_l=`echo $res_tmp468 | awk '{print $10}'` + tmp468_res6_h=`echo $res_tmp468 | awk '{print $11}'` + tmp468_res6_l=`echo $res_tmp468 | awk '{print $12}'` + tmp468_res7_h=`echo $res_tmp468 | awk '{print $13}'` + tmp468_res7_l=`echo $res_tmp468 | awk '{print $14}'` + tmp468_res8_h=`echo $res_tmp468 | awk '{print $15}'` + tmp468_res8_l=`echo $res_tmp468 | awk '{print $16}'` + tmp468_res9_h=`echo $res_tmp468 | awk '{print $17}'` + tmp468_res9_l=`echo $res_tmp468 | awk '{print $18}'` + + format_print $INFO "Tmp468 read result:" + convert_tmp468_data $tmp468_res1_h $tmp468_res1_l "$TMP468_Channel0_name" + convert_tmp468_data $tmp468_res2_h $tmp468_res2_l "$TMP468_Channel1_name" + convert_tmp468_data $tmp468_res3_h $tmp468_res3_l "$TMP468_Channel2_name" + convert_tmp468_data $tmp468_res4_h $tmp468_res4_l "$TMP468_Channel3_name" + convert_tmp468_data $tmp468_res5_h $tmp468_res5_l "$TMP468_Channel4_name" + convert_tmp468_data $tmp468_res6_h $tmp468_res6_l "$TMP468_Channel5_name" + convert_tmp468_data $tmp468_res7_h $tmp468_res7_l "$TMP468_Channel6_name" + convert_tmp468_data $tmp468_res8_h $tmp468_res8_l "$TMP468_Channel7_name" + convert_tmp468_data $tmp468_res9_h $tmp468_res9_l "$TMP468_Channel8_name" +} + +process_tmp468(){ + # tmp112 no need to init firsts + + # get chip tmp112 value + read_tmp468_value +} + +# --------------------------------------------------------- +# Chip TMP112 +# --------------------------------------------------------- +# @Param1 tmp112 data high 8bit +# @Param2 tmp112 data low 8bit +# @Param3 customization sensor name +convert_tmp112_data(){ + hex_value1=$(echo "$1" | awk '{sub(/^0x/,""); print}') + hex_value2=$(echo "$2" | awk '{sub(/^0x/,""); print}') + merge_value="${hex_value1}${hex_value2}" + + # bc calculator recognized upper case only, change data to upper case + upper_hex_value=$(echo "$merge_value" | awk '{ + for(i=1; i<=length($0); i++){ + if(tolower(substr($0,i,1)) ~ /^[a-f]$/) + printf toupper(substr($0,i,1)); + else + printf substr($0,i,1); + } + print "" + }') + + # change data from hex to dec + dec_val=$(echo "ibase=16; $upper_hex_value" | bc) + + binary_number=$(echo "ibase=16;obase=2;$upper_hex_value" | bc) + bin_length=$(echo $binary_number | awk '{print length($0)}') + last_digit=$(echo $binary_number | cut -c $bin_length) + if [ $last_digit -eq 0 ];then + temp=$(echo "scale=4; $dec_val / 16 * 0.0625" | bc) + elif [ $last_digit -eq 1 ];then + temp=$(echo "scale=4; ( $dec_val - 1 ) / 8 * 0.0625" | bc) + fi + + echo "$3 : $temp" + format_log_print $INFO "dec_val : $dec_val" + format_log_print $INFO "binary_number : $binary_number" + format_log_print $INFO "last_digit : $last_digit" + format_log_print $INFO "temp : $temp" +} + +read_tmp112_value(){ + format_log_print $INFO "Start Read tmp112 channel data ..." + res_tmp112=`i2ctransfer -y $i2c_bus w1@$chip_slave $REG_tmp112 r2` + format_log_print $INFO "Tmp112 raw data: $res_tmp112" + + format_print $INFO "Tmp112 read result:" + convert_tmp112_data $res_tmp112 "$TMP112_Sensor_name" +} + +process_tmp112(){ + # tmp112 no need to init firsts + + # get chip tmp112 value + read_tmp112_value +} +# --------------------------------------------------------- +# CHIP +# --------------------------------------------------------- +# do a customization command +write_read_chip(){ + + # Modify i2c cmd which write to cpld if need + cmd_wr=$option_data + res_wr=`$cmd_wr` + + format_print $INFO "Chip Command: $cmd_wr" + format_print $INFO "The Result : $res_wr" +} + +process_chip(){ + + # cpld no need to init first + + # write and read cpld + write_read_chip +} + +# --------------------------------------------------------- +# FRU +# --------------------------------------------------------- +# parse fru file to hex string which can be used in i2ctransfer +parse_fru_write_data(){ + + if [ -e $fru_file_name ];then + format_log_print $INFO "Fru file exist!" + else + format_log_print $ERROR "Fru file not exist!" + format_print $WARNING "Fru file not exist in current directory!" + format_print $ERROR "Operation Failed!" + exit 1 + fi + + # calculate fru size + fru_write_size=`ls -lht | grep $fru_file_name | awk '{print $5}'` + format_print $INFO "Fru File [$fru_file_name] size = $fru_write_size Bytes" + format_log_print $INFO "Fru File [$fru_file_name] size = $fru_write_size Bytes" + + # get fru raw data + fru_raw_data=`hexdump -C $fru_file_name | awk '{ + for(i=2;i<18;i++){ + print $i + } + }'` + format_log_print $INFO "Fru Raw Data: $fru_raw_data" + + # parse data to hex string + fru_write_data=`echo $fru_raw_data | awk -v size=$fru_write_size '{ + for(i=1;i<=size;i++){ + printf "0x%s ",$i + } + }'` + format_print $INFO "Success to get FRU data" +} + +read_fru(){ + + res_fru=`i2ctransfer -y $i2c_bus w2@$chip_slave $fru_offset r256` + + # print fru data every 16 bytes per row + format_print $INFO "The Fru Data :" + echo "$res_fru" | \ + awk '{ + line=""; + count=0; + + for(i=1; i<=NF; i++){ + hex=substr($i, 3); + + if(line != ""){ + line = line " "; + } + line = line hex; + + count++; + if (count == 16){ + print line; + line = ""; + count = 0; + } + } + + if(line != ""){ + print line; + } + }' + +} + +write_fru(){ + start_offset=1 + write_offset=0 + hex_offset="0x00" + while true + do + if [ $fru_write_size -eq 0 ];then + format_print $INFO "Complete write Fru action!!!" + break + fi + + once_data=`echo $fru_write_data | awk -v start=$start_offset '{ + for(i=1;i<=NF;i++) + { + if(i>=start && i " +else + start_get_sensor +fi +""" + + try: + with open (output_path, 'a+', encoding='utf-8') as file: + file.write(default_function_content) + dbg_print("info", "Success to load default function!") + except Exception as e: + dbg_print("Error", f"An error ouccuer when load default function") + + + # ===================================================== # Start execute script # ===================================================== init_output_file() process_nic_feature() load_public_function() -process_hw_topo() \ No newline at end of file +process_hw_topo() +load_default_function() \ No newline at end of file