example/grabInput.sh
Rama master · réplica de lectura del repositorio original.
#!/bin/bash
#Needs to be adjusted if Barcode Buddy runs on the same server
SCRIPT_LOCATION="${SCRIPT_LOCATION:="/var/www/html/barcodebuddy/index.php"}"
#Needs to be adjusted if Barcode Buddy runs on an external server
SERVER_ADDRESS="${SERVER_ADDRESS:="https://your.bbuddy.url/api/"}"
#Set to true if an external server is used
USE_CURL="${USE_CURL:="false"}"
WWW_USER="${WWW_USER:="www-data"}"
IS_DOCKER="${IS_DOCKER:="false"}"
#Enter API key if an external server is being used
API_KEY="${API_KEY:="YOUR_API_KEY"}"
#Set a custom barcode below. If this barcode is scanned, specialAction() will be executed
SPECIAL_BARCODE="${SPECIAL_BARCODE:="YOUR_CUSTOM_BARCODE"}"
#Change the function below to have a custom command executed when the custom barcode was scanned
specialAction() {
echo "Custom barcode scanned"
}
declare -A CODE_MAP_CHAR=( ["(KEY_0)"]="0" \
["(KEY_1)"]="1" \
["(KEY_2)"]="2" \
["(KEY_3)"]="3" \
["(KEY_4)"]="4" \
["(KEY_5)"]="5" \
["(KEY_6)"]="6" \
["(KEY_7)"]="7" \
["(KEY_8)"]="8" \
["(KEY_9)"]="9" \
["(KEY_KP0)"]="0" \
["(KEY_KP1)"]="1" \
["(KEY_KP2)"]="2" \
["(KEY_KP3)"]="3" \
["(KEY_KP4)"]="4" \
["(KEY_KP5)"]="5" \
["(KEY_KP6)"]="6" \
["(KEY_KP7)"]="7" \
["(KEY_KP8)"]="8" \
["(KEY_KP9)"]="9" \
["(KEY_NUMERIC_0)"]="0" \
["(KEY_NUMERIC_1)"]="1" \
["(KEY_NUMERIC_2)"]="2" \
["(KEY_NUMERIC_3)"]="3" \
["(KEY_NUMERIC_4)"]="4" \
["(KEY_NUMERIC_5)"]="5" \
["(KEY_NUMERIC_6)"]="6" \
["(KEY_NUMERIC_7)"]="7" \
["(KEY_NUMERIC_8)"]="8" \
["(KEY_NUMERIC_9)"]="9" \
["(KEY_A)"]="A" \
["(KEY_B)"]="B" \
["(KEY_C)"]="C" \
["(KEY_D)"]="D" \
["(KEY_E)"]="E" \
["(KEY_F)"]="F" \
["(KEY_G)"]="G" \
["(KEY_H)"]="H" \
["(KEY_I)"]="I" \
["(KEY_J)"]="J" \
["(KEY_K)"]="K" \
["(KEY_L)"]="L" \
["(KEY_M)"]="M" \
["(KEY_N)"]="N" \
["(KEY_O)"]="O" \
["(KEY_P)"]="P" \
["(KEY_Q)"]="Q" \
["(KEY_R)"]="R" \
["(KEY_S)"]="S" \
["(KEY_T)"]="T" \
["(KEY_U)"]="U" \
["(KEY_V)"]="V" \
["(KEY_W)"]="W" \
["(KEY_X)"]="X" \
["(KEY_Y)"]="Y" \
["(KEY_Z)"]="Z" \
["(KEY_DOT)"]="." \
["(KEY_KPDOT)"]="." \
["(KEY_MINUS)"]="-" \
["(KEY_KPMINUS)"]="-" \
["(KEY_SLASH)"]="-" \
["(KEY_SEMICOLON)"]=":" \
["(KEY_ENTER)"]="KEY_ENTER" \
["(KEY_KPENTER)"]="KEY_ENTER" )
declare NON_ALLOWED_CHAR="NONE";
if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root"
exit 1
fi
if [[ $IS_DOCKER == true ]]; then
if [[ $(printenv ATTACH_BARCODESCANNER) != "true" ]]; then
echo "[ScannerConnection] Not starting service, as ATTACH_BARCODESCANNER has not been passed"
exit 0
fi
fi
deviceToUse=""
#If no arguments passed, we check if there is only one input device
#(most likely the case for docker images)
if [ $# -eq 0 ]; then
nInputEvents=$(ls 2>/dev/null -Ubad1 -- /dev/input/event* | wc -l)
if [ $nInputEvents = 1 ]; then
deviceToUse=$(ls /dev/input/event* | head -n 1)
else
echo "No argument provided and more than one device in /dev/input/"
echo "Usage: grabInput.sh /dev/input/eventX"
exit 1
fi
else
deviceToUse="$1"
fi
returnAllowedCharacter() {
for key in "${!CODE_MAP_CHAR[@]}"; do
if [[ $1 =~ "$key" && $1 =~ "time" && $1 =~ "value 1" ]]; then
echo "${CODE_MAP_CHAR[$key]}"
return
fi
done
echo "$NON_ALLOWED_CHAR"
}
enteredText=""
echo "[ScannerConnection] Waiting for scanner input"
evtest --grab "$deviceToUse" | while read line; do
key="$(returnAllowedCharacter "{$line}")"
if [[ "$key" != "$NON_ALLOWED_CHAR" ]]; then
if [[ "$key" != "KEY_ENTER" ]]; then
enteredText+="$key"
else
echo "[ScannerConnection] Received: $enteredText"
if [[ "$enteredText" == "$SPECIAL_BARCODE" ]]; then
specialAction
else
if [[ $USE_CURL == false ]]; then
sudo -H -u "$WWW_USER" /usr/bin/php "$SCRIPT_LOCATION" "$enteredText" >/dev/null 2>&1 &
else
curl "${SERVER_ADDRESS}action/scan?apikey=${API_KEY}&add=${enteredText}"
fi
fi
enteredText=""
fi
fi
done