70 lines
1.5 KiB
Bash
70 lines
1.5 KiB
Bash
#!/bin/bash
|
|
|
|
ISSUES_MAP=( \
|
|
[0]="Under-voltage detected" \
|
|
[1]="Arm frequency capped" \
|
|
[2]="Currently throttled"
|
|
[3]="Soft temperature limit active" \
|
|
[16]="Under-voltage has occurred" \
|
|
[17]="Arm frequency capping has occurred" \
|
|
[18]="Throttling has occurred" \
|
|
[19]="Soft temperature limit has occurred")
|
|
|
|
HEX_BIN_MAP=( \
|
|
["0"]="0000" \
|
|
["1"]="0001" \
|
|
["2"]="0010" \
|
|
["3"]="0011" \
|
|
["4"]="0100" \
|
|
["5"]="0101" \
|
|
["6"]="0110" \
|
|
["7"]="0111" \
|
|
["8"]="1000" \
|
|
["9"]="1001" \
|
|
["A"]="1010" \
|
|
["B"]="1011" \
|
|
["C"]="1100" \
|
|
["D"]="1101" \
|
|
["E"]="1110" \
|
|
["F"]="1111" \
|
|
)
|
|
|
|
THROTTLED_OUTPUT=$(vcgencmd get_throttled)
|
|
IFS='x'
|
|
read -a strarr <<< "$THROTTLED_OUTPUT"
|
|
THROTTLED_CODE_HEX=${strarr[1]}
|
|
|
|
# Display current issues
|
|
echo "Current issues:"
|
|
CURRENT_HEX=${THROTTLED_CODE_HEX:4:1}
|
|
CURRENT_BIN=${HEX_BIN_MAP[$CURRENT_HEX]}
|
|
if [ "$CURRENT_HEX" == "0" ]; then
|
|
echo "No throttling issues detected."
|
|
else
|
|
bit_n=0
|
|
for (( i=${#CURRENT_BIN}-1; i>=0; i--)); do
|
|
if [ "${CURRENT_BIN:$i:1}" = "1" ]; then
|
|
echo "~ ${ISSUES_MAP[$bit_n]}"
|
|
bit_n=$((bit_n+1))
|
|
fi
|
|
done
|
|
fi
|
|
|
|
echo ""
|
|
|
|
# Display past issues
|
|
echo "Previously detected issues:"
|
|
PAST_HEX=${THROTTLED_CODE_HEX:0:1}
|
|
PAST_BIN=${HEX_BIN_MAP[$PAST_HEX]}
|
|
if [ $PAST_HEX = "0" ]; then
|
|
echo "No throttling issues detected."
|
|
else
|
|
bit_n=16
|
|
for (( i=${#PAST_BIN}-1; i>=0; i--)); do
|
|
if [ "${PAST_BIN:$i:1}" = "1" ]; then
|
|
echo "~ ${ISSUES_MAP[$bit_n]}"
|
|
bit_n=$((bit_n+1))
|
|
fi
|
|
done
|
|
fi
|