#!/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 }