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 25configs= 26pidpath="/var/run/${name}" 27default_unit=$(sysctl -n hw.snd.default_unit 2> /dev/null) 28 29# Default configuration's control device. 30: "${virtual_oss_default_control_device:="vdsp.ctl"}" 31 32virtual_oss_default_args="\ 33 -S \ 34 -C 2 \ 35 -c 2 \ 36 -r 48000 \ 37 -b 24 \ 38 -s 8ms \ 39 -i 8 \ 40 -f /dev/dsp${default_unit} \ 41 -d dsp \ 42 -t ${virtual_oss_default_control_device}" 43 44# Set to NO by default. Set it to "YES" to enable virtual_oss. 45: "${virtual_oss_enable:="NO"}" 46 47# List of configurations to use. Default is "dsp". 48: "${virtual_oss_configs:="dsp"}" 49 50# Default (dsp) virtual_oss config. 51: "${virtual_oss_dsp:="${virtual_oss_default_args}"}" 52 53virtual_oss_pids() 54{ 55 pids=$(pgrep -d ' ' ${name}) 56 pids=${pids% } 57 printf '%s\n' "${pids}" 58} 59 60virtual_oss_precmd() 61{ 62 /usr/bin/install -d -m 0755 -o root "${pidpath}" 63} 64 65start_instance() 66{ 67 config="$1" 68 instance_args=$(eval "echo \$virtual_oss_${config}") 69 if [ -z "${instance_args}" ]; then 70 warn "no such config: ${config}" 71 else 72 startmsg -n "Starting virtual_oss config: ${config}: " 73 ${command} \ 74 ${command_args} \ 75 -D "${pidpath}/${config}.pid" \ 76 ${instance_args} 77 startmsg "done" 78 fi 79} 80 81stop_instance() 82{ 83 config="$1" 84 instance_args=$(eval "echo \$virtual_oss_${config}") 85 if [ -z "${instance_args}" ]; then 86 warn "no such config: ${config}" 87 else 88 startmsg -n "Stopping virtual_oss config: ${config}: " 89 kill "$(cat "${pidpath}/${config}.pid")" 90 rm -f "${pidpath}/${config}.pid" 91 startmsg "done" 92 fi 93} 94 95virtual_oss_start() 96{ 97 configs="$1" 98 [ -z "${configs}" ] && configs="${virtual_oss_configs}" 99 for config in ${configs}; do 100 start_instance "${config}" 101 done 102} 103 104virtual_oss_stop() 105{ 106 configs="$1" 107 [ -z "${configs}" ] && configs="${virtual_oss_configs}" 108 for config in ${configs}; do 109 stop_instance "${config}" 110 done 111} 112 113virtual_oss_status() 114{ 115 pids=$(virtual_oss_pids) 116 117 if [ "${pids}" ]; then 118 echo "${name} is running as pid ${pids}." 119 else 120 echo "${name} is not running." 121 return 1 122 fi 123} 124 125run_rc_command "$@" 126