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