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