nicsensor/tool/plugin/plugin_tmp112.sh
leimingsheng 7393c6bfb4 code sync
2025-02-21 09:33:20 +08:00

62 lines
1.6 KiB
Bash

#!/bin/sh
mode=$1
i2c_bus=$2
chip_slave=$3
server_platform=$4
path=`pwd`
fmt_print="${path}/format_print.sh"
i2c_script="${path}/i2c_${server_platform}.sh"
sensor_name="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"
}
read_tmp112_data(){
res=`$i2c_script $i2c_bus "1" "$chip_slave" "0x00" "2"`
convert_tmp112_data $res "$sensor_name"
}
case "${mode}" in
"read")
read_tmp112_data
;;
*)
$fmt_print "console" "Error" "[plugin_tmp112]Unexpected Input Param : $mode"
;;
esac