feat(cube : create_nicsensor) 完善脚本生成逻辑
This commit is contained in:
parent
8d2f8a06e2
commit
a9031564dc
@ -459,6 +459,750 @@ 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<start+8)
|
||||
{
|
||||
printf "%s ", $i
|
||||
}
|
||||
}
|
||||
}'`
|
||||
format_print $INFO "Start write fru data : $once_data"
|
||||
|
||||
# do once write
|
||||
hex_num=$(echo "obase=16; $write_offset" | bc)
|
||||
hex_offset=$(echo $hex_num | awk '{printf("0x%s", $0)}')
|
||||
write_command="i2ctransfer -y $i2c_bus w10@$chip_slave 0x00 $hex_offset $once_data"
|
||||
format_log_print $INFO "FRU write command : $write_command"
|
||||
write_res=`$write_command`
|
||||
|
||||
# counting varible iterate
|
||||
write_offset=$(($write_offset+8))
|
||||
start_offset=$(($start_offset+8))
|
||||
fru_write_size=$(($fru_write_size-8))
|
||||
done
|
||||
}
|
||||
|
||||
process_fru(){
|
||||
# fru no need to init first
|
||||
|
||||
# write and read fru
|
||||
if [ "$option_data" == "write" ];then
|
||||
write_fru
|
||||
else
|
||||
# default action is read
|
||||
read_fru
|
||||
fi
|
||||
}
|
||||
# ---------------------------------------------------------
|
||||
# END of CHIP Function
|
||||
# ---------------------------------------------------------
|
||||
"""
|
||||
|
||||
# entry code add here
|
||||
default_function_content += """
|
||||
start_get_sensor(){
|
||||
|
||||
# switch pca9641 and pca9548
|
||||
# if enable debug mode, will not do this action.
|
||||
|
||||
# set global varible by server type
|
||||
set_configuration
|
||||
record_config_info
|
||||
|
||||
# if we have 9641 on i2c, then do it
|
||||
if [ $is_have_pca9641 -eq 1 ];then
|
||||
get_pca9641_control
|
||||
fi
|
||||
|
||||
switch_pca9548_channel
|
||||
|
||||
|
||||
# get sensor detail value
|
||||
case $sensor_type in
|
||||
"emc1413")
|
||||
process_emc1413
|
||||
;;
|
||||
"adc128")
|
||||
process_adc128
|
||||
;;
|
||||
"ina3221")
|
||||
process_ina3221
|
||||
;;
|
||||
"tmp468")
|
||||
process_tmp468
|
||||
;;
|
||||
"tmp112")
|
||||
process_tmp112
|
||||
;;
|
||||
"chip")
|
||||
process_chip
|
||||
;;
|
||||
"fru")
|
||||
process_fru
|
||||
;;
|
||||
*)
|
||||
format_print $ERROR "Unsupport Sensor Type !!! - $sensor_type"
|
||||
format_print $INFO "Support list: $Support_Sensor_List"
|
||||
print_usage
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# ---------------------------------------------------------
|
||||
# Start Execute Script
|
||||
# ---------------------------------------------------------
|
||||
|
||||
conf_pre_check
|
||||
|
||||
# is param legel?
|
||||
if [ "$sensor_type" == "chip" ];then
|
||||
if [ $# -le 3 ];then
|
||||
format_print $ERROR "Command Format illegal"
|
||||
print_chip_command_format
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
init_debuglog
|
||||
|
||||
# if the action is fru write, need pre-process fru data
|
||||
if [ "$sensor_type" == "fru" ];then
|
||||
if [ "$option_data" == "write" ];then
|
||||
format_log_print $INFO "Opreation FRU Write"
|
||||
|
||||
# is option_data(fru file name) valid?
|
||||
if [ "$option_data2" == "" ];then
|
||||
format_print $ERROR "Please provide fru file name"
|
||||
print_fru_command_format
|
||||
exit 1
|
||||
fi
|
||||
|
||||
parse_fru_write_data
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ $# -le 2 ];then
|
||||
echo "Script Usage"
|
||||
echo "./nicsensor.sh <slot> <sensor> <slave>"
|
||||
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
|
||||
@ -467,3 +1211,4 @@ init_output_file()
|
||||
process_nic_feature()
|
||||
load_public_function()
|
||||
process_hw_topo()
|
||||
load_default_function()
|
||||
Loading…
Reference in New Issue
Block a user