Tasmota/lib/IRremoteESP8266-2.7.1/tools/RawToGlobalCache.sh

54 lines
1.2 KiB
Bash
Executable File

#!/bin/bash
# Convert IRremoteESP8266's rawData output into Global Cache format.
function isDigits()
{
[[ "$1" =~ ^[0-9]+$ ]]
}
function usage()
{
cat << EOF
Usage: $0 Frequency_in_Hz
Reads an IRremoteESP8266 rawData declaration from STDIN and converts it to
GlobalCache format.
e.g.
uint16_t rawbuf[37] = {
7930, 3952, 494, 1482, 520, 1482, 494, 1508,
494, 520, 494, 1482, 494, 520, 494, 1482,
494, 1482, 494, 3978, 494, 520, 494, 520,
494, 520, 494, 520, 520, 520, 494, 520,
494, 520, 494, 520, 494};
EOF
exit 1
}
# We need a frequency argument.
if [[ $# -ne 1 ]]; then
usage
fi
HZ="$1"
# HZ must be a positive number
if ! isDigits "${HZ}"; then
usage
fi
# HZ must not be zero.
if [[ ${HZ} == 0 ]]; then
usage
fi
PERIOD_OFFSET=0
period=$((((1000000 + (${HZ} / 2)) / ${HZ}) + ${PERIOD_OFFSET}))
result="${HZ},1,1"
while read line; do
# Quick and Dirty Removal of any array declaration syntax, and any commas.
line="$(echo ${line} | sed 's/uint.*{//i' | sed 's/,//g' | sed 's/};.*//g')"
for msecs in ${line}; do
if isDigits "${msecs}"; then
result="${result},$((${msecs} / ${period}))"
fi
done
done
echo "GlobalCache code = \"${result}\""