#!/bin/bash SERIAL=/dev/ttyUSB0 VOLUME_CONTROL="Line Out" RADIO1_URL="http://us2.internet-radio.com:8443/stream" RADIO2_URL="https://rozhlas.stream/ddur_mp3_128.mp3" RADIO3_URL="https://rozhlas.stream/brno_mp3_128.mp3" #https://rozhlas.stream/radiozurnal_aac_128.aac RADIO4_URL="https://ice3.abradio.cz/croretro128.mp3" killStream() { kill `ps aux | grep "$1" | awk '{print $2}'` 2>/dev/null } playStream() { mplayer "$1" /dev/null 2>&1 & } handleStream() { STREAM=$1 STATE=$2 #killStream "$STREAM" if [ $STATE = 1 ]; then playStream "$STREAM" echo "Started radio: $STREAM" else echo "Stopped radio: $STREAM" fi } execVolume() { VOLUME_RAW=`echo "scale=4; $1/255*100" | bc` VOLUME=`printf "%.0f%%" "$VOLUME_RAW"` amixer sset "$VOLUME_CONTROL" "$VOLUME" >/dev/null & echo Volume set to $VOLUME #echo Volume set to $1 } execButton() { case $1 in 1) handleStream "$RADIO1_URL" "$2" ;; 2) handleStream "$RADIO2_URL" "$2" ;; 3) handleStream "$RADIO3_URL" "$2" ;; 4) handleStream "$RADIO4_URL" "$2" ;; *) echo "Unknown button '$1'." >&2 ;; esac } process_event() { case $1 in volume) execVolume "$2" ;; button*) NUM=`echo $1 | tr -dc [:digit:]` execButton "$NUM" "$2" ;; "") ;; *) echo "Unknown event '$1'." >&2 ;; esac } consume_events() { while true; do IFS=$'\r'= read EVENT VALUE if [ $? == 0 ]; then #echo EVENT: $EVENT = $VALUE process_event "$EVENT" "$VALUE" else echo Invalid input. >&2 fi done } stty -F $SERIAL 9600 cs8 -cstopb -parenb cat $SERIAL | consume_events