F5OEO-rpidatv/scripts/rpibutton.sh

258 wiersze
4.4 KiB
Bash
Executable File

PATHSCRIPT=/home/pi/rpidatv
CONFIGFILE=$PATHSCRIPT"/rpidatvconfig.txt"
############### PIN DEFINITION ###########"
#Source=GPIO 5 / Header 29
button_source=5
#SYmbolRate=GPIO 6 / Header 31
button_SR=6
#Fec=GPIO 13 / Header 33
button_FEC=13
#OUTLED SOURCECAM=GPIO26 /Header 37
led_source_cam=26
#OUTLED SOURCETEST=GPIO21 /Header 40
led_source_test=21
#OUTLED SR=GPIO20 /Header 38
led_SR=20
#OUTLED FEC=GPIO16 /Header 36
led_FEC=16
gpio -g mode $button_source in
gpio -g mode $button_SR in
gpio -g mode $button_FEC in
#gpio edge $button_source falling
#gpio edge $button_SR falling
#gpio edge $button_FEC falling
gpio -g mode $button_source up
gpio -g mode $button_SR up
gpio -g mode $button_FEC up
gpio -g mode $led_source_cam out
gpio -g mode $led_source_test out
gpio -g mode $led_SR out
gpio -g mode $led_FEC out
############### IN/OUT CONFIG FILE
set_config_var() {
lua - "$1" "$2" "$3" <<EOF > "$3.bak2"
local key=assert(arg[1])
local value=assert(arg[2])
local fn=assert(arg[3])
local file=assert(io.open(fn))
local made_change=false
for line in file:lines() do
if line:match("^#?%s*"..key.."=.*$") then
line=key.."="..value
made_change=true
end
print(line)
end
if not made_change then
print(key.."="..value)
end
EOF
mv "$3.bak2" "$3"
}
get_config_var() {
lua - "$1" "$2" <<EOF
local key=assert(arg[1])
local fn=assert(arg[2])
local file=assert(io.open(fn))
for line in file:lines() do
local val = line:match("^#?%s*"..key.."=(.*)$")
if (val ~= nil) then
print(val)
break
end
end
EOF
}
##################### TRANSMIT ##############
do_display_off()
{
tvservice -o
}
do_transmit()
{
do_refresh_config
SCRIPT=$(readlink -f $0)
# Absolute path this script is in. /home/user/bin
SCRIPTPATH=`dirname $SCRIPT`
#whiptail --title "TRANSMITING" --msgbox "$INFO" 8 78
#kill -1 $(pidof -x frmenu.sh)
sudo killall ffmpeg >/dev/null 2>/dev/null
sudo killall h264 >/dev/null 2>/dev/null
sudo killall RpiDATV >/dev/null 2>/dev/null
sudo killall cat >/dev/null 2>/dev/null
sudo killall hello_encode.bin >/dev/null 2>/dev/null
sudo killall h264yuv >/dev/null 2>/dev/null
do_display_off
sleep 0.5
$SCRIPTPATH"/a.sh" >/dev/null 2>/dev/null &
sleep 0.5
#$SCRIPTPATH"/a.sh" &
#exit 0
}
do_refresh_config()
{
MODE_INPUT=$(get_config_var modeinput $CONFIGFILE)
SYMBOLRATEK=$(get_config_var symbolrate $CONFIGFILE)
FEC=$(get_config_var fec $CONFIGFILE)
}
do_process_button()
{
if [ `gpio -g read $button_source` = 0 ]; then
case "$MODE_INPUT" in
CAMH264)
NEW_MODE_INPUT=CAMMPEG-2;
;;
CAMMPEG-2)
NEW_MODE_INPUT=PATERNAUDIO;
;;
PATERNAUDIO)
NEW_MODE_INPUT=CARRIER;
;;
CARRIER)
NEW_MODE_INPUT=CAMH264
;;
*)
NEW_MODE_INPUT=CAMH264
;;
esac
set_config_var modeinput "$NEW_MODE_INPUT" $CONFIGFILE
echo $NEW_MODE_INPUT
do_transmit
fi
if [ `gpio -g read $button_SR` = 0 ]; then
case "$SYMBOLRATEK" in
250)
NEW_SR=500;
;;
500)
NEW_SR=1024;
;;
1024)
NEW_SR=250
;;
*)
NEW_SR=250
;;
esac
set_config_var symbolrate "$NEW_SR" $CONFIGFILE
#echo $NEW_SR
do_transmit
fi
if [ `gpio -g read $button_FEC` = 0 ];then
case "$FEC" in
7)
NEW_FEC=1;
;;
1)
NEW_FEC=7;
;;
*)
NEW_FEC=1
;;
esac
set_config_var fec "$NEW_FEC" $CONFIGFILE
#echo $NEW_FEC
do_transmit
fi
}
do_process_output()
{
#do_refresh_config
let blink=($blink+1)%2
case "$MODE_INPUT" in
CAMH264)
gpio -g write $led_source_cam 1
gpio -g write $led_source_test 0
;;
CAMMPEG-2)
gpio -g write $led_source_cam $blink
gpio -g write $led_source_test 0
;;
PATERNAUDIO)
gpio -g write $led_source_cam 0
gpio -g write $led_source_test 1
;;
CARRIER)
gpio -g write $led_source_cam 0
gpio -g write $led_source_test $blink
;;
*)
gpio -g write $led_source_test 0
gpio -g write $led_source_cam 0
;;
esac
case "$NEW_SR" in
250)
gpio -g write $led_SR 0
;;
500)
gpio -g write $led_SR $blink
;;
1024)
gpio -g write $led_SR 1
;;
*)
gpio -g write $led_SR 0
;;
esac
case "$FEC" in
1)
gpio -g write $led_FEC $blink
;;
7)
gpio -g write $led_FEC 1
;;
*)
gpio -g write $led_FEC 0
;;
esac
}
##################### MAIN PROGRAM ##############
#do_transmit
do_refresh_config
let compteur=0
while true; do
do_process_button
let compteur=(compteur+1)%2
if [ "$compteur" == 0 ]; then
do_process_output
fi
sleep 0.5
done