Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- set -euo pipefail
- #######################################
- # Builds a TXP string from the given arguments
- # Globals:
- # None
- # Arguments:
- # $masterCode $slaveCode $stateCode
- # Returns:
- # $msgStr
- #######################################
- build_elro_txp() {
- local masterCode=$1
- local slaveCode=$2
- local stateCode=$3
- local sA=0
- local sG=0
- local sRepeat=15
- local sPause=5600
- local sTune=350
- local sBaud=25
- local sSpeed=16
- local headStr="TXP:$sA,$sG,$sRepeat,$sPause,$sTune,$sBaud,"
- local tailStr=",1,1,$sSpeed,;"
- local onStr="1,3,1,3,3"
- local offStr="3,1,1,3,1"
- local bitLow=1
- local bitHgh=3
- local seqLow="$bitHgh,$bitHgh,$bitLow,$bitLow,"
- local seqHgh="$bitHgh,$bitLow,$bitHgh,$bitLow,"
- local msg=""
- local bits=$masterCode$slaveCode
- for (( i=0; i<${#bits}; i++ ))
- do
- local bit=${bits:$i:1}
- if [ "$bit" == "0" ]; then
- local msg=$msg$seqLow
- else
- local msg=$msg$seqHgh
- fi
- done
- if [ "${stateCode,,}" == "on" ]; then
- local stateCode=$onStr
- fi
- if [ "${stateCode,,}" == "off" ]; then
- local stateCode=$offStr
- fi
- local msgStr=$headStr$bitLow","$msg$bitHgh","$stateCode$tailStr
- echo "$msgStr"
- }
- err() {
- echo -e "[$(date +'%Y-%m-%dT%H:%M:%S%z')]: $*" >&2
- exit 1
- }
- # main
- if [ "$#" -lt 3 ]; then
- err "Wrong number of arguments $# ($*).\nUsage: $0 <masterdip> <slavedip> on|off"
- fi
- masterCode=$1
- slaveCode=$2
- stateCode=$3
- if [ "${#masterCode}" -ne 5 ]; then
- err "Master code has to contain 5 digits."
- fi
- if [ "${#slaveCode}" -ne 5 ]; then
- err "Slave code has to contain 5 digits."
- fi
- if [[ "$masterCode" = *[^0-1]* ]] || [[ "$slaveCode" = *[^0-1]* ]]; then
- err "Master and slave code can only contain 0 and 1."
- fi
- if [ "${stateCode,,}" != "on" ] && [ "${stateCode,,}" != "off" ]; then
- err "Unknown state ${stateCode}."
- fi
- string=$(build_elro_txp "$masterCode" "$slaveCode" "$stateCode")
- echo "$string"
- exit
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement