diff options
-rw-r--r-- | Makefile | 8 | ||||
-rwxr-xr-x | bin/4a-api | 53 | ||||
-rwxr-xr-x | bin/4a-play | 18 | ||||
-rwxr-xr-x | bin/4a-status | 53 | ||||
-rw-r--r-- | bin/lib4a-tools.sh | 35 |
5 files changed, 133 insertions, 34 deletions
@@ -14,13 +14,13 @@ help: @echo "* make install DESTDIR=/usr" @echo " changes the destination dir (in this example, the scripts will be installed in /usr/bin)" -install: $(MEDIA) +install: $(SCRIPTS) $(MEDIA) @echo "Installing audio scripts $(notdir $(SCRIPTS)) into $(DESTDIR)/bin" mkdir -p $(DESTDIR)/bin install $(SCRIPTS) -m 750 $(DESTDIR)/bin - @echo "Installing audio test files $(notdir $(MEDIA)) into $(DESTDIR)/media" - mkdir -p $(DESTDIR)/media - install $(MEDIA) -m 640 $(DESTDIR)/media + @echo "Installing audio test files $(notdir $(MEDIA)) into $(DESTDIR)/4a/media" + mkdir -p $(DESTDIR)/4a/media + install $(MEDIA) -m 640 $(DESTDIR)/4a/media clean: @echo "Cleanup done." @@ -1,8 +1,57 @@ #!/bin/bash -WS4A=unix:/run/user/0/apis/ws/ahl-4a +# load shell lib +. $(dirname $BASH_SOURCE)/lib4a-tools.sh -afb-client-demo -H -d $WS4A get_roles "" +cmd=$1 +shift + +function usage() { + log "Usage: $0 <cmd> [opts]" + log "Commands:" + log " help: show this help" + log " api <verb> [args]: send direct request to API verb with args" + log " roles: get AHL roles" + log " hals [-a|--all] [-v|--verbose]: get HALs status" + log " mediaplayer ... : interact with mediaplayer service" + log " radio ... : interact with radio service" + exit 1 +} + +case $cmd in + roles) + 4a-client ahl-4a get_roles "" + ;; + api) + 4a-client "$@" + ;; + hals) + verbose=false + all=false + while [[ -n "$1" ]]; do + case $1 in + -a|--all) all=true;; + -v|--verbose) verbose=true;; + -av) all=true; verbose=true;; + esac + shift + done + 4a-client 4a-hal-manager loaded "{'verbose':$verbose,'all':$all}" + ;; + mediaplayer) + echo "TODO" + ;; + radio) + echo "TODO" + ;; + help|-h|--help) + usage + ;; + *) + error "Invalid command" + usage + ;; +esac # commandes HAL manager: # 4a-hal-manager loaded diff --git a/bin/4a-play b/bin/4a-play index 894ab7f..483b892 100755 --- a/bin/4a-play +++ b/bin/4a-play @@ -1 +1,17 @@ -# TODO: play using aplay +#!/bin/bash + +# load shell lib +. $(dirname $BASH_SOURCE)/lib4a-tools.sh + +function usage() { + log "Usage: $0 <role:file1> [role:file2 ...]" + log "Available roles:" + exit 1 +} + +[[ $# == 0 ]] && usage + +for x in "$@"; do + log "Playing $x ..." + aplay -D Loopback,0,2 $x +done diff --git a/bin/4a-status b/bin/4a-status index 519f470..c3e361e 100755 --- a/bin/4a-status +++ b/bin/4a-status @@ -1,51 +1,50 @@ #!/bin/bash -set -o pipefail +# load shell lib +. $(dirname $BASH_SOURCE)/lib4a-tools.sh -ERR="\\e[31mERROR\\e[0m" -WRN="\\e[33mWARNING\\e[0m" -SUC="\\e[32mSUCCESS\\e[0m" +set -o pipefail -function cout { - echo -e "$*" -} +ERR="${color_red}ERROR${color_none}" +WRN="${color_yellow}WARNING${color_none}" +SUC="${color_green}SUCCESS${color_none}" EXIT_CODE=0 -SOUND_CARDS=$( LANG="C" aplay -l | grep -oEe "^card\\s+[^\\[]+" | cut -d':' -f2 | uniq ) +# ------------------- enumerate sound cards ------------------------ + +log "---- Audio cards detected ----" +LANG="C" aplay -l | grep -oEe "^card\\s+[^\\[]+" | sort -u + +# -------------------- snd-aloop ------------------------ -cout " -- Is snd-aloop is available?" +log "" +log "---- snd-aloop driver availability ----" if zcat /proc/config.gz | grep "CONFIG_SND_ALOOP=y" > /dev/null; then - cout " -- $SUC: Built into the kernel" + log "$SUC: Built into the kernel" else - cout " -- $WRN: Not built into the kernel, devices order can randomly change!" + log "$WRN: Not built into the kernel, devices order can randomly change!" if zcat /proc/config.gz | grep "CONFIG_SND_ALOOP=m" > /dev/null; then - cout " -- $SUC: snd-aloop is provided!" + log "$SUC: snd-aloop is provided!" if lsmod | grep "snd_aloop" > /dev/null; then - cout " -- $SUC: snd-aloop is loaded!" + log "$SUC: snd-aloop is loaded!" else - cout " -- $ERR: snd-aloop is not loaded! 4a-softmixer can't work, please load it using: modprobe snd-aloop" + log "$ERR: snd-aloop is not loaded! 4a-softmixer can't work, please load it using: modprobe snd-aloop" fi else - cout " -- $ERR: snd-aloop is not provided at all, 4a-softmixer can't work!" + log "$ERR: snd-aloop is not provided at all, 4a-softmixer can't work!" EXIT_CODE=1 fi fi -cout " -- Is 4a running?" +log "" +log "---- 4a service status ----" if ps x | grep "service-audio-4a" | grep -v "grep" > /dev/null; then - cout " -- $SUC: Service is currently running!" + log "$SUC: Service is currently running!" else - cout " -- $WRN: Service is not currently running!" + log "$WRN: Service is not currently running!" + log "It can be started using the following command:" + log "systemctl restart *agl-service-audio-4a*.service" fi - -#SERVICE_FILE=$( basename "$( ls "/var/local/lib/systemd/system/afm-service-agl-service-audio-4a--"* )" ) - -cout -cout "Found audio cards:" -for card in $SOUND_CARDS; do - cout " - $card" -done - exit $EXIT_CODE diff --git a/bin/lib4a-tools.sh b/bin/lib4a-tools.sh new file mode 100644 index 0000000..4029046 --- /dev/null +++ b/bin/lib4a-tools.sh @@ -0,0 +1,35 @@ +stdout_in_terminal=0 +[[ -t 1 ]] && stdout_in_terminal=1 +function color { + [[ $stdout_in_terminal == 0 ]] && return + for k in $*; do + case $k in + bold) tput bold 2>/dev/null;; + none) tput sgr0 2>/dev/null;; + *) tput setaf $k 2>/dev/null;; + esac + done +} +color_green=$(color bold 2) +color_yellow=$(color bold 3) +color_red=$(color bold 1) +color_blue=$(color bold 4) +color_none=$(color none) + +function error() { echo "${color_red}$@${color_none}" >&2; } +function warning() { echo "${color_yellow}$@${color_none}" >&2; } +function info() { echo "${color_green}$@${color_none}" >&2; } +function log() { echo "$@" >&2; } +function debug() { [[ "$DEBUG" == 1 ]] && echo "${color_blue}DEBUG:" "$@" "${color_none}" >&2; } + +function 4a-client() { + # get port for audio service + local port=$(grep -sr X-AFM-http /var/local/lib/systemd/system/afm-service-agl-service-audio-4a*.service | cut -f2 -d'=') + + debug "Detected 4A service on port $port" + afb-client-demo -H "localhost:$port/api?token=HELLO&uuid=magic" "$@" +} + +function 4a-roles() { + 4a-client ahl-4a get_roles "" | tail -n +2 | jq '.response|.[]' +} |