#! /bin/sh # Simple tool for controlling the FM radio on the command line. # (c) 2009 Martin Grimme FREQ=$1 MODE=$2 send_request() { dbus-send --system --print-reply \ --dest=de.pycage.FMRXEnabler \ /de/pycage/FMRXEnabler\ de.pycage.FMRXEnabler.request >/dev/null } require_root() { MSG=$1 if [ "`id -u`" != "0" ]; then echo ${MSG} exit 1 fi } find_sysfs_path() { F=`find /sys/class/i2c-adapter -name "fm_frequency"` echo `dirname ${F}` } mixer_on() { # set input source amixer -qc0 cset iface=MIXER,name='Input Select' 'ADC' amixer -qc0 cset iface=MIXER,name='PGA Capture Switch' on # enable line amixer -qc0 cset iface=MIXER,name='Left PGA Mixer Line2L Switch' on amixer -qc0 cset iface=MIXER,name='Right PGA Mixer Line2R Switch' on } mixer_off() { # unset input source amixer -qc0 cset iface=MIXER,name='Input Select' 'Digital Mic' amixer -qc0 cset iface=MIXER,name='PGA Capture Switch' off amixer -qc0 cset iface=MIXER,name='Left PGA Mixer Line2L Switch' off amixer -qc0 cset iface=MIXER,name='Left DAC_L1 Mixer HP Switch' off amixer -qc0 cset iface=MIXER,name='Right PGA Mixer Line2R Switch' off amixer -qc0 cset iface=MIXER,name='Right DAC_L1 Mixer HP Switch' off amixer -qc0 cset iface=MIXER,name='HP DAC Playback Volume' 0,0 } speaker_on() { # set headphone volume low or it will blow your ears away :) amixer -qc0 cset iface=MIXER,name='Headphone Playback Volume' 5,5 amixer -qc0 cset iface=MIXER,name='Left DAC_L1 Mixer Line Switch' off amixer -qc0 cset iface=MIXER,name='Left DAC_L1 Mixer HP Switch' on amixer -qc0 cset iface=MIXER,name='Right DAC_R1 Mixer Line Switch' off amixer -qc0 cset iface=MIXER,name='Right DAC_R1 Mixer HP Switch' on amixer -qc0 cset iface=MIXER,name='HP DAC Playback Volume' 50,50 amixer -qc0 cset iface=MIXER,name='Speaker Function' 1 } speaker_off() { amixer -qc0 cset iface=MIXER,name='Left DAC_L1 Mixer Line Switch' on amixer -qc0 cset iface=MIXER,name='Left DAC_L1 Mixer HP Switch' off amixer -qc0 cset iface=MIXER,name='Right DAC_R1 Mixer Line Switch' on amixer -qc0 cset iface=MIXER,name='Right DAC_R1 Mixer HP Switch' off amixer -qc0 cset iface=MIXER,name='HP DAC Playback Volume' 0,0 amixer -qc0 cset iface=MIXER,name='Speaker Function' 0 } power_on() { # switch on echo 1 >${SYSFS_PATH}/power_state # set DAC audio route echo 16 >${SYSFS_PATH}/audio_route # set stereo echo 12 >${SYSFS_PATH}/dac_output # set preset tune mode echo 1 >${SYSFS_PATH}/fm_search_tune_mode # unmute echo 0 >${SYSFS_PATH}/mute } power_off() { echo "powering off" echo "" # kill gstreamer pipe kill ${GST_PID} # mute echo 1 >${SYSFS_PATH}/mute # switch off echo 0 >${SYSFS_PATH}/power_state mixer_off } tune_in() { FREQ=$1 echo "Frequency: $1 KHz" echo ${FREQ} >${SYSFS_PATH}/fm_frequency } if [ -z "${FREQ}" ]; then echo "Command line tool for controlling the FM radio." echo "Copyright (c) 2009 Martin Grimme" echo "" echo " Usage: $0 [speaker|headphones]" echo "" echo " Examples:" echo " $0 87900" echo " $0 87900 speaker" exit 1 fi require_root "You need to be root to control the FM radio. Aborting." # is gst-launch available? if [ ! -x "/usr/bin/gst-launch" ]; then echo "gst-launch not available. Please install gstreamer-tools." exit 1 fi send_request SYSFS_PATH=`find_sysfs_path` power_on mixer_on tune_in ${FREQ} case "${MODE}" in headphones) speaker_off ;; speaker) speaker_on ;; *) speaker_off ;; esac gst-launch pulsesrc ! pulsesink >/dev/null & GST_PID=$! trap power_off HUP QUIT TERM EXIT while true; do sleep 60 send_request done