1#!/bin/sh 2 3# PROVIDE: virtual_oss 4# REQUIRE: NETWORKING kld ldconfig 5# BEFORE: LOGIN 6# KEYWORD: shutdown 7 8. /etc/rc.subr 9 10name="virtual_oss" 11desc="virtual_oss device manager" 12rcvar="${name}_enable" 13 14command="/usr/sbin/${name}" 15command_args="-B" 16 17load_rc_config "$name" 18start_precmd="${name}_precmd" 19start_cmd="${name}_start" 20stop_cmd="${name}_stop" 21status_cmd="${name}_status" 22 23required_modules="cuse" 24 25pidpath="/var/run/${name}" 26 27default_unit=$(sysctl -n hw.snd.default_unit 2> /dev/null) 28virtual_oss_default_args="\ 29 -S \ 30 -C 2 \ 31 -c 2 \ 32 -r 48000 \ 33 -b 24 \ 34 -s 8ms \ 35 -i 8 \ 36 -f /dev/dsp${default_unit} \ 37 -d dsp \ 38 -l dsp.loop \ 39 -t ${virtual_oss_default_control_device}" 40 41# Default (dsp) virtual_oss config. 42: "${virtual_oss_dsp:="${virtual_oss_default_args}"}" 43 44virtual_oss_pids() 45{ 46 pids=$(pgrep -d ' ' ${name}) 47 pids=${pids% } 48 printf '%s\n' "${pids}" 49} 50 51virtual_oss_precmd() 52{ 53 /usr/bin/install -d -m 0755 -o root "${pidpath}" 54} 55 56start_instance() 57{ 58 config="$1" 59 instance_args=$(eval "echo \$virtual_oss_${config}") 60 if [ -z "${instance_args}" ]; then 61 warn "no such config: ${config}" 62 else 63 startmsg -n "Starting virtual_oss config: ${config}: " 64 ${command} \ 65 ${command_args} \ 66 -D "${pidpath}/${config}.pid" \ 67 ${instance_args} 68 startmsg "done" 69 fi 70} 71 72stop_instance() 73{ 74 config="$1" 75 instance_args=$(eval "echo \$virtual_oss_${config}") 76 if [ -z "${instance_args}" ]; then 77 warn "no such config: ${config}" 78 else 79 startmsg -n "Stopping virtual_oss config: ${config}: " 80 kill "$(cat "${pidpath}/${config}.pid")" 81 rm -f "${pidpath}/${config}.pid" 82 startmsg "done" 83 fi 84} 85 86virtual_oss_start() 87{ 88 configs="$1" 89 [ -z "${configs}" ] && configs="${virtual_oss_configs}" 90 for config in ${configs}; do 91 start_instance "${config}" 92 done 93} 94 95virtual_oss_stop() 96{ 97 configs="$1" 98 [ -z "${configs}" ] && configs="${virtual_oss_configs}" 99 for config in ${configs}; do 100 stop_instance "${config}" 101 done 102} 103 104virtual_oss_status() 105{ 106 pids=$(virtual_oss_pids) 107 108 if [ "${pids}" ]; then 109 echo "${name} is running as pid ${pids}." 110 else 111 echo "${name} is not running." 112 return 1 113 fi 114} 115 116run_rc_command "$@" 117