diff --git a/nicsensor_s.sh b/nicsensor_s.sh deleted file mode 100644 index aebb5eb..0000000 --- a/nicsensor_s.sh +++ /dev/null @@ -1,1212 +0,0 @@ -#!/bin/sh -SCRIPT_VERSION="1.8s" -# --------------------------------------------------------- -# Project Feature Varible (Change as need) -# --------------------------------------------------------- -# ADC128 Division factor -votage_division_factor_0="1" -votage_division_factor_1="1" -votage_division_factor_2="1" -votage_division_factor_3="0.8" -votage_division_factor_4="0.6" -votage_division_factor_5="0.6" -votage_division_factor_6="0.2326" -votage_division_factor_7="1" - -# ADC128 channel name -ADC128_Channel0_name="Channel0" -ADC128_Channel1_name="Channel1" -ADC128_Channel2_name="Channel2" -ADC128_Channel3_name="Channel3" -ADC128_Channel4_name="Channel4" -ADC128_Channel5_name="Channel5" -ADC128_Channel6_name="Channel6" -ADC128_Channel7_name="Channel7" - -# INA3221 shunt resistor(unit: mohm) -shunt_resistor_0="2" -shunt_resistor_1="2" -shunt_resistor_2="5" - -# INA3221 channel name -INA3221_Channel0_name="Channel0" -INA3221_Channel1_name="Channel1" -INA3221_Channel2_name="Channel2" - -# EMC1413 channel name -EMC1413_Channel0_name="Channel0" -EMC1413_Channel1_name="Channel1" -EMC1413_Channel2_name="Channel2" - -# TMP468 channel name -TMP468_Channel0_name="Local" -TMP468_Channel1_name="Remote1" -TMP468_Channel2_name="Remote2" -TMP468_Channel3_name="Remote3" -TMP468_Channel4_name="Remote4" -TMP468_Channel5_name="Remote5" -TMP468_Channel6_name="Remote6" -TMP468_Channel7_name="Remote7" -TMP468_Channel8_name="Remote8" - -# TMP112 sensor name -TMP112_Sensor_name="Temperature" - -# fru basic offset -fru_offset="0x00 0x00" -# --------------------------------------------------------- -# Global Settings -# --------------------------------------------------------- -Support_Sensor_List="emc1413, adc128, ina3221, tmp468, tmp112" -Support_Server_List="5280m7, 5468m7, 5688m7, donghu, yichun, qiandaohu" -# Which server will use this script -server_type="5280m7" -i2c_bus=12 -# --------------------------------------------------------- -# Global Varible (Don't Change) -# --------------------------------------------------------- -# Input Param -nic_slot=$1 -sensor_type=$2 -chip_slave=$3 -option_data=$4 -option_data2=$5 -param_num=$# - -# REGISTER Table -REG_pca9641_controll="0x01" -REG_adc128_config="0x00" -REG_adc128_advance="0x0b" -REG_adc128_status="0x0c" -REG_adc128_ch0="0x20" -REG_adc128_ch1="0x21" -REG_adc128_ch2="0x22" -REG_adc128_ch3="0x23" -REG_adc128_ch4="0x24" -REG_adc128_ch5="0x25" -REG_adc128_ch6="0x26" -REG_adc128_ch7="0x27" -REG_emc1413_TD1_H="0x00" -REG_emc1413_TD1_L="0x29" -REG_emc1413_TD2_H="0x01" -REG_emc1413_TD2_L="0x10" -REG_emc1413_TD3_H="0x23" -REG_emc1413_TD3_L="0x24" -REG_ina3221_ch1="0x01" -REG_ina3221_ch2="0x03" -REG_ina3221_ch3="0x05" -REG_ina3221_bus1="0x02" -REG_ina3221_bus2="0x04" -REG_ina3221_bus3="0x06" -REG_tmp112="0x00" -REG_tmp468="0x80" - -# Global Param -pca9641_slave=0x41 -pca9548_channel=0x04 -pca9548_slave=0x72 -is_have_pca9641=1 -INA3221_SHUNT_VOLT=0 -INA3221_BUS_VOLT=1 -INA3221_POWER=2 -ina3221_ch0_volt="0" -ina3221_ch1_volt="0" -ina3221_ch2_volt="0" -ina3221_ch0_current="0" -ina3221_ch1_current="0" -ina3221_ch2_current="0" -fru_file_name=$option_data2 -fru_write_size=0 -fru_write_data="" -nic_type="" -slot_number="" -res_tmp468="" -# --------------------------------------------------------- -# Script Function Defination -# --------------------------------------------------------- -print_usage(){ - echo "" - echo "================>>> nicsensor script usage <<<==================" - echo " Function 1 - Read Sensor Value" - echo " 1) Command Format : ./nicsensor.sh [slot] [sensor tpye] [slave]" - echo " 2) Option Detail" - echo " - [slot] : 0 1 2 3 4 5 ..." - echo " - [sensor type] : $Support_Sensor_List" - echo " - [slave] : chip slave address , please provide 7 bit address" - echo " 3) E.G. : ./nicsensor.sh 1 adc128 0x1f" - echo " ./nicsensor.sh pcie1 ina3221 0x42" - echo " ./nicsensor.sh ocp0 emc1413 0x4c" - echo "" - echo " Function 2 - Detect I2C for each slot" - echo " 1) Command Format : ./nicsensor.sh detect [pcie/ocp]" - echo " 2) E.G. : ./nicsensor.sh detect pcie" - echo " ./nicsensor.sh detect ocp [some server don't support]" - echo " 3) Note : This function now only support on server:" - echo " $Support_Server_List" - echo "" - echo " Function 3 - Send an i2c command to chip on Nic" - echo " 1) Command Format : ./nicsensor.sh [slot] chip [slave] [command]" - echo " 2) Option Detail" - echo " - [slot] : 0 1 2 3 4 5 ..." - echo " - [slave] : chip slave address , please provide 7 bit address" - echo " - [command] : The i2c command which will set to the chip" - echo " 3) E.G. : ./nicsensor.sh pcie1 chip 0x10 'i2ctransfer -y 12 w1@0x10 0x00 r2'" - echo "" - echo " Function 4 - FRU Read and Wirte" - echo " 1) Command Format : ./nicsensor.sh [slot] fru [slave] [option] [frudata]" - echo " 2) Option Detail" - echo " - [slot] : 0 1 2 3 4 5 ..." - echo " - [slave] : chip slave address , please provide 7 bit address" - echo " - [option] : read/write, default to read" - echo " - [frudata] : fru bin file which will write to eeprom, only for write option" - echo " 3) E.G. : ./nicsensor.sh pcie0 fru 0x57" - echo " : ./nicsensor.sh pcie0 fru 0x57 read" - echo " : ./nicsensor.sh pcie0 fru 0x57 write /tmp/fru.bin" - echo "" -} - -fmt_print(){ - if [ "$1" = "console" ];then - echo ">>> [$2] $3" - else - echo "[$2] $3" - fi -} - -do_i2c_detect(){ - if [ $nic_type = "ocp" ];then - fmt_print "console" $INFO "OCP slot $5 : bus$1 9548channel$4" - else - fmt_print "console" $INFO "PCIe slot $5 : bus$1 9548channel$4" - fi - i2ctransfer -y $1 w1@$2 $3 - i2cdetect -y $1 -} - -reset_pca9548(){ - i2ctransfer -y $1 w1@$2 0x00 -} - -# Get nic type and slot number -parse_nic_slot(){ - fullname=0 - case $nic_slot in - ocp*) - nic_type="ocp" - ;; - pcie*) - nic_type="pcie" - fullname=1 - ;; - *) - nic_type="pcie" - fullname=0; - ;; - esac - - if [ $nic_type = "ocp" ];then - slot_number=$(echo $nic_slot | cut -b 4-) - else - if [ $fullname -eq 1 ];then - slot_number=$(echo $nic_slot | cut -b 5-) - else - slot_number=$nic_slot - fi - fi -} - -get_pca9641_control(){ - # Request 9641 lock - res_lock=`i2ctransfer -y $i2c_bus w2@$pca9641_slave $REG_pca9641_controll 0x81 r1` - - # Build 9641 Connection - res_build=`i2ctransfer -y $i2c_bus w2@$pca9641_slave $REG_pca9641_controll 0x85 r1` - - if [ "$res_build" != "0x87" ];then - fmt_print "console" $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` -} - -# pre execute hook function -pre_exec_hook(){ - # is param legel? - if [ "$Param2" = "chip" ];then - if [ $param_num -le 3 ];then - fmt_print "console" $ERROR "Command Format illegal" - echo "Command Format : ./nicsensor.sh [slot] chip [slave] [i2c_command]" - exit 1 - fi - fi - - # if the action is fru write, need pre-process fru data - if [ "$Param2" = "fru" ];then - if [ "$option_data" = "write" ];then - - # is option_data(fru file name) valid? - if [ "$option_data2" = "" ];then - fmt_print "console" $ERROR "Please provide fru file name" - echo "Command Format : ./nicsensor.sh [slot] fru [slave] write [fru_file]" - exit 1 - fi - - parse_fru_write_data - fi - fi -} - -# --------------------------------------------------------- -# Set i2c configuration -# --------------------------------------------------------- -set_configuration_5280m7(){ - if [ $nic_type = "ocp" ];then - is_have_pca9641=0 - pca9548_slave="0x70" - i2c_bus=3 - - if [ $slot_number -eq 0 ];then - pca9548_channel="0x01" - elif [ $slot_number -eq 1 ];then - pca9548_channel="0x02" - elif [ $slot_number -eq 2 ];then - pca9548_channel="0x04" - else - fmt_print "console" $WARNING "Unspecified card slot!" - fi - else - is_have_pca9641=1 - if [ $slot_number -le 2 ];then - pca9641_slave="0x41" - pca9548_slave="0x72" - i2c_bus=12 - else - pca9641_slave="0x42" - pca9548_slave="0x72" - i2c_bus=13 - fi - - if [ $slot_number -eq 0 ];then - pca9548_channel="0x02" - elif [ $slot_number -eq 1 ];then - pca9548_channel="0x04" - elif [ $slot_number -eq 2 ];then - pca9548_channel="0x08" - elif [ $slot_number -eq 3 ];then - pca9548_channel="0x02" - elif [ $slot_number -eq 4 ];then - pca9548_channel="0x04" - elif [ $slot_number -eq 5 ];then - pca9548_channel="0x08" - else - fmt_print "console" $WARNING "Unspecified card slot!" - fi - fi -} - -set_configuration_5468m7(){ - if [ $nic_type = "ocp" ];then - fmt_print "console" $ERROR "Unsupport OCP Nic on $server_type" - fmt_print "console" $INFO "Please check if script has update version" - exit 1 - else - is_have_pca9641=1 - if [ $slot_number -le 4 ];then - pca9641_slave="0x31" - pca9548_slave="0x70" - i2c_bus=13 - else - pca9641_slave="0x42" - pca9548_slave="0x71" - i2c_bus=14 - fi - - if [ $slot_number -eq 0 ];then - pca9548_channel="0x01" - elif [ $slot_number -eq 1 ];then - pca9548_channel="0x02" - elif [ $slot_number -eq 2 ];then - pca9548_channel="0x04" - elif [ $slot_number -eq 3 ];then - pca9548_channel="0x08" - elif [ $slot_number -eq 4 ];then - pca9548_channel="0x10" - elif [ $slot_number -eq 5 ];then - pca9548_channel="0x01" - elif [ $slot_number -eq 6 ];then - pca9548_channel="0x02" - elif [ $slot_number -eq 7 ];then - pca9548_channel="0x04" - elif [ $slot_number -eq 8 ];then - pca9548_channel="0x08" - elif [ $slot_number -eq 9 ];then - pca9548_channel="0x10" - elif [ $slot_number -eq 10 ];then - pca9548_channel="0x20" - else - fmt_print "console" $WARNING "Unspecified card slot!" - fi - fi -} - -set_configuration_donghu(){ - if [ $nic_type = "ocp" ];then - fmt_print "console" $ERROR "Unsupport OCP Nic on $server_type" - fmt_print "console" $INFO "Please check if script has update version" - exit 1 - else - is_have_pca9641=0 - i2c_bus=3 - pca9548_slave="0x70" - if [ $slot_number -eq 0 ];then - pca9548_channel="0x80" - elif [ $slot_number -eq 1 ];then - pca9548_channel="0x40" - elif [ $slot_number -eq 2 ];then - pca9548_channel="0x20" - elif [ $slot_number -eq 3 ];then - pca9548_channel="0x10" - elif [ $slot_number -eq 4 ];then - pca9548_channel="0x08" - elif [ $slot_number -eq 5 ];then - pca9548_channel="0x04" - elif [ $slot_number -eq 6 ];then - pca9548_channel="0x02" - elif [ $slot_number -eq 7 ];then - pca9548_channel="0x01" - else - fmt_print "console" $WARNING "Unspecified card slot!" - fi - fi -} - -set_configuration_yichun(){ - if [ $nic_type = "ocp" ];then - fmt_print "console" $ERROR "Unsupport OCP Nic on $server_type" - fmt_print "console" $INFO "Please check if script has update version" - exit 1 - else - is_have_pca9641=0 - pca9548_slave="0x74" - if [ $slot_number -eq 0 ];then - i2c_bus=12 - pca9548_channel="0x02" - elif [ $slot_number -eq 1 ];then - i2c_bus=13 - pca9548_channel="0x02" - elif [ $slot_number -eq 2 ];then - i2c_bus=14 - pca9548_channel="0x02" - else - fmt_print "console" $WARNING "Unspecified card slot!" - fi - fi -} - -set_configuration_qiandaohu(){ - if [ $nic_type = "ocp" ];then - fmt_print "console" $ERROR "Unsupport OCP Nic on $server_type" - fmt_print "console" $INFO "Please check if script has update version" - exit 1 - else - is_have_pca9641=0 - if [ $slot_number -le 7 ];then - i2c_bus=3 - pca9548_slave=0x70 - else - i2c_bus=6 - pca9548_slave=0x71 - fi - if [ $slot_number -eq 0 ];then - pca9548_channel="0x08" - elif [ $slot_number -eq 1 ];then - pca9548_channel="0x04" - elif [ $slot_number -eq 2 ];then - pca9548_channel="0x01" - elif [ $slot_number -eq 3 ];then - pca9548_channel="0x02" - elif [ $slot_number -eq 4 ];then - pca9548_channel="0x80" - elif [ $slot_number -eq 5 ];then - pca9548_channel="0x40" - elif [ $slot_number -eq 6 ];then - pca9548_channel="0x10" - elif [ $slot_number -eq 7 ];then - pca9548_channel="0x20" - elif [ $slot_number -eq 8 ];then - pca9548_channel="0x08" - elif [ $slot_number -eq 9 ];then - pca9548_channel="0x04" - elif [ $slot_number -eq 10 ];then - pca9548_channel="0x01" - elif [ $slot_number -eq 11 ];then - pca9548_channel="0x02" - else - fmt_print "console" $WARNING "Unspecified card slot!" - fi - fi -} - -set_configuration_5688m7(){ - if [ $nic_type = "ocp" ];then - fmt_print "console" $ERROR "Unsupport OCP Nic on $server_type" - fmt_print "console" $INFO "Please check if script has update version" - exit 1 - else - is_have_pca9641=1 - pca9641_slave="0x31" - i2c_bus=12 - if [ $slot_number -le 3 ];then - pca9548_slave=0x71 - else - pca9548_slave=0x72 - fi - if [ $slot_number -eq 0 ];then - pca9548_channel="0x01" - elif [ $slot_number -eq 1 ];then - pca9548_channel="0x02" - elif [ $slot_number -eq 2 ];then - pca9548_channel="0x04" - elif [ $slot_number -eq 3 ];then - pca9548_channel="0x08" - elif [ $slot_number -eq 4 ];then - pca9548_channel="0x01" - elif [ $slot_number -eq 5 ];then - pca9548_channel="0x02" - elif [ $slot_number -eq 6 ];then - pca9548_channel="0x04" - elif [ $slot_number -eq 7 ];then - pca9548_channel="0x08" - else - fmt_print "console" $WARNING "Unspecified card slot!" - fi - fi -} - -# Base on the server type, set i2c conf -set_configuration(){ - parse_nic_slot - - case $server_type in - "5280m7") - # Support PCIe and OCP configuration - set_configuration_5280m7 - ;; - "5468m7") - set_configuration_5468m7 - ;; - "donghu") - set_configuration_donghu - ;; - "yichun") - set_configuration_yichun - ;; - "qiandaohu") - set_configuration_qiandaohu - ;; - "5688m7") - set_configuration_5688m7 - ;; - *) - fmt_print "console" $ERROR "Error: Unsupport Server Type !!! - $server_type" - fmt_print "console" $INFO "Support list: $Support_Server_List" - exit 1 - ;; - esac -} - -# --------------------------------------------------------- -# 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(){ - if [ "$3" = "disable" ];then - return - fi - # remove data prefix '0x' - hex_value1=$(echo "$1" | awk '{sub(/^0x/,""); print}') - hex_value2=$(echo "$2" | awk '{sub(/^0x/,""); print}') - 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 "" - }') - dec_value1=$(echo "ibase=16; $upper_hex_value1" | bc) - dec_value2=$(echo "ibase=16; $upper_hex_value2" | bc) - temp=$(echo "scale=4; $dec_value1 + ($dec_value2 / 32 * 0.125 )" | bc) - format_temp=$(echo "$temp" | awk '{ if ($0 ~ /^\./) print "0" $0; else print $0 }') - echo "$3 : $format_temp C" -} - -# Get the sensor data, then parse raw data -read_emc1413_channel_value(){ - 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` - reset_pca9548 $i2c_bus $pca9548_slave - - 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(){ - 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` - - # if stauts is not 0x01 (Start Monitor) ,then do init - if [ "$res_adc128_status" != "0x01" ];then - # 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` - 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(){ - if [ "$3" = "disable" ];then - return - fi - # 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}" - 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 "" - }') - 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" -} - -# Get the sensor data, then parse raw data -read_adc128_channel_value(){ - 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` - reset_pca9548 $i2c_bus $pca9548_slave - 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_adc128_init - 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(){ - if [ "$6" = "disable" ];then - return - fi - - hex_value1=$(echo "$1" | awk '{sub(/^0x/,""); print}') - hex_value2=$(echo "$2" | awk '{sub(/^0x/,""); print}') - merge_value="${hex_value1}${hex_value2}" - 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 "" - }') - 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" - 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" - 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 - 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(){ - 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` - reset_pca9548 $i2c_bus $pca9548_slave - - # 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(){ - read_ina3221_channel_value -} -# --------------------------------------------------------- -# Chip TMP468 -# --------------------------------------------------------- -# @Param1 tmp468 data high 8bit -# @Param2 tmp468 data high 8bit -# @Param3 customization channel name -convert_tmp468_data(){ - if [ "$3" = "disable" ];then - return - fi - hex_value1=$(echo "$1" | awk '{sub(/^0x/,""); print}') - hex_value2=$(echo "$2" | awk '{sub(/^0x/,""); print}') - merge_value="${hex_value1}${hex_value2}" - 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 "" - }') - 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(){ - res_tmp468=`i2ctransfer -y $i2c_bus w1@$chip_slave $REG_tmp468 r18` - reset_pca9548 $i2c_bus $pca9548_slave - - 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}'` - - fmt_print "console" $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(){ - read_tmp468_value -} - -# --------------------------------------------------------- -# Chip TMP112 -# --------------------------------------------------------- -# @Param1 tmp112 data high 8bit -# @Param2 tmp112 data low 8bit -# @Param3 customization sensor name -convert_tmp112_data(){ - if [ "$3" = "disable" ];then - return - fi - - hex_value1=$(echo "$1" | awk '{sub(/^0x/,""); print}') - hex_value2=$(echo "$2" | awk '{sub(/^0x/,""); print}') - merge_value="${hex_value1}${hex_value2}" - 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 "" - }') - 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" -} - -read_tmp112_value(){ - res_tmp112=`i2ctransfer -y $i2c_bus w1@$chip_slave $REG_tmp112 r2` - reset_pca9548 $i2c_bus $pca9548_slave - - fmt_print "console" $INFO "Tmp112 read result:" - convert_tmp112_data $res_tmp112 "$TMP112_Sensor_name" -} - -process_tmp112(){ - read_tmp112_value -} -# --------------------------------------------------------- -# CHIP -# --------------------------------------------------------- -# do a customization command -write_read_chip(){ - cmd_wr=$option_data - res_wr=`$cmd_wr` - reset_pca9548 $i2c_bus $pca9548_slave - - fmt_print "console" $INFO "Chip Command: $cmd_wr" - fmt_print "console" $INFO "The Result : $res_wr" -} - -process_chip(){ - 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 - fmt_print "console" $WARNING "Fru file not exist in current directory!" - fmt_print "console" $ERROR "Operation Failed!" - exit 1 - fi - - # calculate fru size - fru_write_size=`ls -lht | grep $fru_file_name | awk '{print $5}'` - fmt_print "console" $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 - } - }'` - - # 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 - } - }'` - fmt_print "console" $INFO "Success to get FRU data" -} - -read_fru(){ - res_fru=`i2ctransfer -y $i2c_bus w2@$chip_slave $fru_offset r256` - reset_pca9548 $i2c_bus $pca9548_slave - - # print fru data every 16 bytes per row - fmt_print "console" $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 - fmt_print "console" $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