80 lines
2.9 KiB
Bash
80 lines
2.9 KiB
Bash
|
|
#!/bin/sh
|
||
|
|
|
||
|
|
EMC1413_Channel0_name="Channel 0"
|
||
|
|
EMC1413_Channel1_name="Channel 1"
|
||
|
|
EMC1413_Channel2_name="Channel 2"
|
||
|
|
|
||
|
|
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"
|
||
|
|
|
||
|
|
# 处理EMC1413读到的数据并输出结果
|
||
|
|
# @Param1 emc1413读取数据高位
|
||
|
|
# @Param2 emc1413读取数据低位
|
||
|
|
# @Param3 channel号/定制化名称
|
||
|
|
convert_emc1413_data(){
|
||
|
|
# 将读取到的两位数据去掉 0x 前缀
|
||
|
|
hex_value1=$(echo "$1" | awk '{sub(/^0x/,""); print}')
|
||
|
|
hex_value2=$(echo "$2" | awk '{sub(/^0x/,""); print}')
|
||
|
|
|
||
|
|
# 由于 bc 计算器只能识别大写的 十六进制数据,将小写的十六进制数据全部转化为大写的数据
|
||
|
|
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 ""
|
||
|
|
}')
|
||
|
|
|
||
|
|
# 转化为10进制数据
|
||
|
|
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, hex value : $hex_value1 $hex_value2"
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
# 读取EMC1413芯片每个通道的数据,随后调用数据处理函数进行数据解析并输出
|
||
|
|
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`
|
||
|
|
|
||
|
|
# 将 I2C 读取的 raw 数据记录到调试日志中
|
||
|
|
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
|
||
|
|
|
||
|
|
}
|