#!/bin/bash TMPDIR=/run/tmpfiles.d # How frequent to update the output. #.01 second=10000 # .1 second=100000 # 1 second=1000000 UPDATE_RATE=100000 # Enable if you want some alternate values displayed (where available) # Throttle valve, automatic double-clutch gears SHOW_ALTERNATES=1 # Here (flag1 through flag3) you can quickly put in a hexadecimal # message ID and have all the logic flow through so that you can # extract the variable and see if you can make use of it. # See the matching code segment at the end of this script. flag1="025" flag2="027" flag3="02B" echo "0000" > /$TMPDIR/0AB echo "023#FFFF" > /$TMPDIR/023 echo "F" > /$TMPDIR/358 echo "000001" > /$TMPDIR/3D2 echo "00" > /$TMPDIR/232 echo "0000000000000000" > /$TMPDIR/$flag1 echo "0000000000000000" > /$TMPDIR/$flag2 echo "0000000000000000" > /$TMPDIR/$flag3 echo "000000000" > /$TMPDIR/07B echo "000" > /$TMPDIR/079 echo "000000000000" > /$TMPDIR/322 LATEST=0 cat $1 | egrep " 023#| 079#| 07B#| 232#| 340#| 358#| 3D2#| 322#| 122#| 0AB#| $flag1#| $flag2#| $flag3#" | while read a b c do case "$c" in $flag1#*) echo "${c:4:16}" > /$TMPDIR/$flag1 ;; $flag2#*) echo "${c:4:16}" > /$TMPDIR/$flag2 ;; $flag3#*) echo "${c:4:16}" > /$TMPDIR/$flag3 ;; 079#*) echo "${c:5:9}" > /$TMPDIR/079 ;; 07B#*) echo "${c:5:9}" > /$TMPDIR/07B ;; 232#*) echo "${c:6:2}" > /$TMPDIR/232 ;; 358#*) echo "${c:5:1}" > /$TMPDIR/358 ;; 3D2#*) echo "${c:4:6}" > /$TMPDIR/3D2 ;; 0AB#*) echo "${c:8:4}" > /$TMPDIR/0AB ;; 122#*) echo "${c:4:4}" > /$TMPDIR/122 ;; 023#*) echo "$c" > /$TMPDIR/023 ;; 322#*) echo "${c:4:12}" > /$TMPDIR/322 ;; 340#*) echo "$c" | cut -c9-10,19,20 > /$TMPDIR/340 ;; esac NOW=${a:1:10}${a:12:6} [ $LATEST -eq 0 ] && LATEST=$(( $NOW - 1000 )) [ $NOW -gt $LATEST ] && { LATEST=$(( $LATEST + $UPDATE_RATE )) trans=`cat /$TMPDIR/340` speed="${trans:2:2}" # The date is done here time="${a:6:8}" echo -n "$time " rawkey=`cat /$TMPDIR/122` key="Unk${rawkey} " case "$rawkey" in 0301) key="Kill" ;; 0302) key="Kill" ;; 0502) key="Acc " ;; 1502) key="Acc " ;; 0000) key="Off " ;; 0001) key="Off " ;; 4501) key="Strt" ;; 5D01) key="Crnk" ;; 4401) key="RRun" [ "$rpm1" == "0.0k" ] && key="RAcc" ;; 0402) key="Run " ;; esac echo -n "KEY: $key " BRAKE=`cat /$TMPDIR/079 | cut -c1-3` BRAKE=$(printf "%d" 0x$BRAKE) BRAKE=`echo "0k $BRAKE 22.5 / p" | dc` [ "$BRAKE" -gt 100 ] && BRAKE=100 [ "$BRAKE" -lt 100 ] && BRAKE=" $BRAKE" [ "$BRAKE" -lt 10 ] && BRAKE=" $BRAKE" echo -n "BRK:$BRAKE%" ACC="$(cat /$TMPDIR/07B)" ACCEL="$(printf "%d" 0x${ACC:0:3})" ACCEL2="$(printf "%d" 0x${ACC:6:3})" [ $ACCEL2 -lt 2000 ] && ACCEL2=2000 ACCEL2=`echo "0k $ACCEL2 2000 - 18 / p" | dc` ACCEL2=`printf "%2d" $ACCEL2` [ "$ACCEL" -lt 1900 ] && ACCEL=1900 ACCEL=`echo "0k $ACCEL 1990 - 100 * 2000 / p" | dc` [ "$ACCEL" -lt 0 ] && ACCEL=0 [ "$ACCEL" -lt 100 ] && ACCEL=" $ACCEL" [ "$ACCEL" -lt 10 ] && ACCEL=" $ACCEL" echo -n " ACCL:$ACCEL% " [ "$SHOW_ALTERNATES" -eq 1 ] && echo -n "(VALVE $ACCEL2%) " rpm1=`cat /$TMPDIR/322 | cut -c1-4` rpm1="$(printf "%d" 0x$rpm1)" [ $rpm1 = 65535 ] && rpm1="0" printf " RPM: %4d " $rpm1 STEER=`cat /$TMPDIR/023 | cut -c5-8` STEER="$(printf "%d" 0x$STEER)" STEERSIGN="R " [[ $STEER -gt 4096 ]] && STEERSIGN="L " STEER=`echo "4096 $STEER -p" | dc | cut -d- -f2` STEER=`echo "2k $STEER 2 / p" | dc | cut -d. -f1` STEER=`printf "%3d\n" ${STEER}` SYMBOL="°" [ "$STEER" -lt 2 ] && STEERSIGN=" " && STEER=" 0" [ "$STEER" -gt 1000 ] && STEERSIGN="IN" && STEER="VAL" && SYMBOL="D" echo -n "WHEEL: ${STEERSIGN}${STEER}${SYMBOL} " [ "$speed" == "FF" ] && speed="00" speed="$(printf "%d" 0x$speed)" gear=`echo $trans | cut -c2` [ "$gear" == "F" ] && gear="NA" [ "$gear" == "B" ] && gear="R " && speed="-$speed" [ "$gear" == "D" ] && gear="P " if [[ "$gear" =~ ^[1-9]+$ ]] then gear="D$gear" fi [ "$gear" == "0" ] && gear="N " mph=`cat /$TMPDIR/322 | cut -c5-8` mph="$( printf "%d" 0x$mph)" [ $mph == 65535 ] && mph="0" [ $gear == "R " ] && mph="-$mph" mph=`echo "2 k $mph 200 / p" | dc` mph=`printf "%2.2f" $mph` compass=`cat /$TMPDIR/358` case "$compass" in F) compass="??" ;; 0) compass="N " ;; 1) compass="NE" ;; 2) compass=" E" ;; 3) compass="SE" ;; 4) compass="S " ;; 5) compass="SW" ;; 6) compass=" W" ;; 7) compass="NW" ;; esac echo -n "DIR: $compass " echo -n " GEAR: $gear " ## # Another gear display. Double clutched automatic transmission? ## [ "$SHOW_ALTERNATES" -eq 1 ] && echo -n "(`cat /$TMPDIR/0AB`) " echo -n "ODOM: " odometer=`cat /$TMPDIR/3D2` odometer="$(printf "%d" 0x$odometer)" odometer=`echo " $odometer * 50 / 8 " | bc` if [ "$odometer" == "6" ] then odometer="0" echo -n "??????.?mi " else printf '%8.1f' `echo "$odometer / 100" | bc -l` echo -n "mi " fi printf "MPH: %5s " $mph # See the flag1 through flag3 quick entries at the start of # this script. You can uncomment these lines to display their # raw values, or you can start manipulating the numbers as you # see fit. # echo -n "FLAG1: $(cat /$TMPDIR/$flag1) " # echo -n "FLAG2: $(cat /$TMPDIR/$flag2) " # echo -n "FLAG3: $(cat /$TMPDIR/$flag3) " echo "" } done