--- a/src/upmpdcli.conf-dist
+++ b/src/upmpdcli.conf-dist
@@ -9,62 +9,66 @@
# <grouptitle>MPD parameters</grouptitle>
-# <var name="mpdhost"><brief>Host MPD runs on.</brief>
+# <var name="mpdhost" type="string"><brief>Host MPD runs on.</brief>
# <descr>Defaults to localhost. This can also be specified as -h
# host</descr></var>
#mpdhost = localhost
-# <var name="mpdport"><brief>IP port used by MPD</brief>. <descr>Can
-# also be specified as -p port. Defaults to the normal MPD port,
-# 6600</descr></var>
+# <var name="mpdport" type="int" values="0 65635 6600"><brief>IP port used by
+# MPD</brief>. <descr>Can also be specified as -p port. Defaults to the
+# normal MPD port, 6600</descr></var>
#mpdport = 6600
-# <var name="mpdpassword"><brief>MPD password.</brief><descr>Password for
-# connecting to *MPD* (only necessary if password access is enabled in the
-# *MPD* configuration file).</descr></var>
+# <var name="mpdpassword" type="string"><brief>MPD
+# password.</brief><descr>Password for connecting to MPD (only necessary
+# if password access is enabled in the MPD configuration
+# file).</descr></var>
#mpdpassword =
-# <var name="ownqueue"><brief>Set if we own the MPD queue.</brief>.<descr>If
-# this is set (on by default), we own the MPD queue and will fearlessly clear
-# it. Can also be specified as -q 0|1.</descr></var>
+# <var name="ownqueue" type="bool" values="1"><brief>Set if we own the MPD
+# queue.</brief>.<descr>If this is set (on by default), we own the MPD
+# queue and will fearlessly clear it. Can also be specified as -q
+# 0|1.</descr></var>
#ownqueue = 1
# <grouptitle>Upmpdcli general parameters</grouptitle>
-# <var name="friendlyname"><brief>"Friendly Name" for the UPnP Media
-# Renderer.</brief><descr>This will be displayed by most Control Points to
-# identify the Renderer. Some OpenHome Control Points may display the
-# 'ohproductroom' value instead.</descr></var>
+# <var name="friendlyname" type="string"><brief>"Friendly Name" for the
+# UPnP Media Renderer.</brief><descr>This will be displayed by most Control
+# Points to identify the Renderer. Some OpenHome Control Points may display
+# the 'ohproductroom' value instead.</descr></var>
#friendlyname = UpMpd
-# <var name="upnpav"><brief>Enable UPnP AV services
+# <var name="upnpav" type="bool" values="1"><brief>Enable UPnP AV services
# (0/1).</brief><descr>This is set by default, but it may useful to switch
# it off with some OpenHome Control Points which are too easily confused by
# the presence of UPnP AV services.</descr></var>
#upnpav = 1
-# <var name="openhome"><brief>Enable OpenHome services
+# <var name="openhome" type="bool" values="1"><brief>Enable OpenHome services
# (0/1).</brief><descr>This defaults to 1, as OpenHome queuing is superior
# for most usages. There should be little reason to turn it
# off.</descr></var>
openhome = 1
-# <var name="logfilename"><brief>Log file name.</brief><descr>Defaults to
-# stderr. This can also be specified as -d logfilename.</descr></var>
+# <var name="logfilename" type="fn"><brief>Log file
+# name.</brief><descr>Defaults to stderr. This can also be specified as -d
+# logfilename.</descr></var>
#logfilename =
-# <var name="loglevel"><brief>Log level. 0-4.</brief><descr>Can also be
-# specified as -l loglevel.</descr></var>
+# <var name="loglevel" type="int" values="0 4 0"><brief>Log
+# level. 0-4.</brief><descr>Can also be specified as -l
+# loglevel.</descr></var>
#loglevel = 3
-# <var name="checkcontentformat"><brief>Check that input format is
-# supported.</brief><descr>Extract the protocolinfo information from the
-# input metadata and check it against our supported formats. Set this
-# option to 0 if a control point or media server sends good audio data with
-# bad metadata. Default 1.</descr></var>
+# <var name="checkcontentformat" type="bool" values="1"><brief>Check that
+# input format is supported.</brief><descr>Extract the protocolinfo
+# information from the input metadata and check it against our supported
+# formats. Set this option to 0 if a control point or media server sends
+# good audio data with bad metadata. Default 1.</descr></var>
#checkcontentformat = 1
-# <var name="iconpath"><brief>Path to the Renderer icon.</brief>
+# <var name="iconpath" type="fn"><brief>Path to the Renderer icon.</brief>
# <descr>The image will be displayed by Control Points which support
# it. The UPnP protocol has provisions for a renderer to send the URL to a
# descriptive icon as part of the device description. Due to current (and
@@ -74,18 +78,18 @@
# up.</descr></var>
#iconpath = /usr/share/upmpdcli/icon.png
-# <var name="pkgdatadir"><brief>XML and other constant data storage
+# <var name="pkgdatadir" type="dfn"><brief>XML and other constant data storage
# directory.</brief><descr>Default: '$prefix/share/upmpcli' (e.g.:
# '/usr/share/upmpdcli').</descr></var>
#pkgdatadir=/usr/share/upmpdcli
-# <var name="cachedir"><brief>Directory used to store cached
+# <var name="cachedir" type="dfn"><brief>Directory used to store cached
# data</brief><descr>Only used for the OpenHome queue metadata for now.
# The default value is ~/.cache/upmpdcli for normal users or
# /var/cache/upmpdcli when upmpdcli is started as root.</descr></var>
#cachedir = /var/cache/upmpdcli
-# <var name="presentationhtml"><brief>Path to the presentation HTML
+# <var name="presentationhtml" type="fn"><brief>Path to the presentation HTML
# document</brief><descr>You can change it to replace the default
# presentation page. The page will only be read once, when upmpdcli starts
# up. It can't presently be used for status updates (but I guess that you
@@ -93,63 +97,63 @@
# HTTP server). Default: '$pkgdatadir/presentation.html'.</descr></var>
#presentationhtml = /usr/share/upmpdcli/presentation.html
-# <var name="pidfile"><brief>Name of lock file used to store the current
-# process pid.</brief><descr>Only used if the process is launched by user
-# root. Used by the init system, and to avoid multiple instances. The only
-# reason to change the value is if you actually want to have several
-# instances running (also change cachedir in this case).</descr></var>
+# <var name="pidfile" type="fn"><brief>Name of lock file used to store the
+# current process pid.</brief><descr>Only used if the process is launched
+# by user root. Used by the init system, and to avoid multiple
+# instances. The only reason to change the value is if you actually want to
+# have several instances running (also change cachedir in this
+# case).</descr></var>
#pidfile = /var/run/upmpdcli.pid
# <grouptitle>UPnP network parameters</grouptitle>
-# <var name="upnpiface"><brief>Network interface to use for
+# <var name="upnpiface" type="string"><brief>Network interface to use for
# UPnP.</brief><descr>libupnp/pupnp only supports communicating on a single
# interface and will use the first found, this allows forcing the use of
# another interface.</descr></var>
#upnpiface =
-# <var name="upnpip"><brief>IP address to use for UPnP,
+# <var name="upnpip" type="string"><brief>IP address to use for UPnP,
# alternative to using an interface name.</brief></var>
#upnpip =
-# <var name="upnpport"><brief>Port number used for
-# UPnP.</brief><descr>libupnp/pupnp defaults to using the first free port
-# after 49152. Note that clients do not need to know about the value, which
-# is automatically discovered.</descr></var>
+# <var name="upnpport" type="int" values="0 65635 49152"><brief>Port number
+# used for UPnP.</brief><descr>libupnp/pupnp defaults to using the first
+# free port after 49152. Note that clients do not need to know about the
+# value, which is automatically discovered.</descr></var>
#upnpport =
# <grouptitle>Audio control hooks</grouptitle>
-# <var name="onstart"><brief>Command to run when playback is about to
-# begin.</brief><descr>Specify the full path to the
-# program, e.g. /usr/bin/logger.</descr></var>
+# <var name="onstart" type="fn"><brief>Command to run when playback is
+# about to begin.</brief><descr>Specify the full path to the program,
+# e.g. /usr/bin/logger.</descr></var>
#onstart =
-# <var name="onplay"><brief>Command to run when MPD state switches to "PLAY".
-# </brief><descr>Specify the full path to the program,
-# e.g. /usr/bin/logger.</descr></var>
-# onplay =
-
-# <var name="onstop"><brief>Command to run when MPD state switches to
+# <var name="onplay" type="fn"><brief>Command to run when MPD state
+# switches to "PLAY". </brief><descr>Specify the full path to the program,
+# e.g. /usr/bin/logger.</descr></var> onplay =
+
+# <var name="onstop" type="fn"><brief>Command to run when MPD state switches to
# "STOP".</brief><descr>Specify the full path to the program,
# e.g. /usr/bin/logger.</descr></var>
#onstop =
-# <var name="externalvolumecontrol"><brief>Use external commands to manage
-# the the sound volume (0/1).</brief><descr>This is used in the case where MPD
-# is unable to control the volume, but some other command can, for example
-# if you have an external amp on which it is possible to set and read the
-# volume through scripts. If set, the calls to MPD to set and read the volume
-# will be replaced by executions of 'onvolumechange' and
-# 'getexternalvolume'</descr></var>
+# <var name="externalvolumecontrol" type="fn"><brief>Use external command
+# to manage the the sound volume (0/1).</brief><descr>This is used in the
+# case where MPD is unable to control the volume, but some other command
+# can, for example if you have an external amp on which it is possible to
+# set and read the volume through scripts. If set, the calls to MPD to set
+# and read the volume will be replaced by executions of 'onvolumechange'
+# and 'getexternalvolume'</descr></var>
#externalvolumecontrol =
-# <var name="getexternalvolume"><brief>Command to run for reading the sound
-# volume.</brief><descr>The command should write a 0-100 numeric value to
-# stdout.</descr></var>
+# <var name="getexternalvolume" type="fn"><brief>Command to run for reading
+# the sound volume.</brief><descr>The command should write a 0-100 numeric
+# value to stdout.</descr></var>
#getexternalvolume =
-# <var name="onvolumechange"><brief>Command to run to set the
+# <var name="onvolumechange" type="fn"><brief>Command to run to set the
# volume.</brief><descr>Used when 'externalvolumecontrol' is set.
# Specify the full path to the program, which is called with the volume as
# the first argument, e.g. /some/script 85.</descr></var>
@@ -157,7 +161,7 @@
# <grouptitle>OpenHome parameters</grouptitle>
-# <var name="radiolist"><brief>Path to an external file with radio
+# <var name="radiolist" type="fn"><brief>Path to an external file with radio
# definitions.</brief><descr>Radio stations can be defined at the end of
# the the main file, or in a separate one (or both). Using an external file
# can ease distribution to multiple machines. Either way, each radio
@@ -171,60 +175,62 @@
# </descr></var>
#radiolist = /path/to/my/radio/list
-# <var name="ohmanufacturername"><brief>Manufacturer name. Does not vary at
-# run-time.</brief></var>
+# <var name="ohmanufacturername" type="string"><brief>Manufacturer
+# name. Does not vary at run-time.</brief></var>
#ohmanufacturername = UpMPDCli heavy industries Co.
-# <var name="ohmanufacturerinfo"><brief>Manufacturer information. Does not
+# <var name="ohmanufacturerinfo" type="string"><brief>Manufacturer
+# information. Does not vary at run-time.</brief></var>
+#ohmanufacturerinfo = Such nice guys and gals
+# <var name="ohmanufacturerurl" type="string"><brief>URL for manufacturer
+# web site. Does not vary at run-time.</brief></var>
+#ohmanufacturerurl = http://www.lesbonscomptes.com/upmpdcli
+# <var name="ohmanufacturerimageuri" type="string"><brief>Uri for
+# manufacturer���s logo. Does not vary at run-time.</brief></var>
+#ohmanufacturerimageuri =
+# <var name="ohmodelname" type="string"><brief>Model name. Does not vary at
+# run-time.</brief></var>
+#ohmodelname = UpMPDCli UPnP-MPD gateway
+# <var name="ohmodelinfo" type="string"><brief>Model information. Does not
# vary at run-time.</brief></var>
-#ohmanufacturerinfo = Such nice guys and gals
-# <var name="ohmanufacturerurl"><brief>URL for manufacturer web site. Does
+#ohmodelinfo =
+# <var name="ohmodelurl" type="string"><brief>URL for model web site. Does
# not vary at run-time.</brief></var>
-#ohmanufacturerurl = http://www.lesbonscomptes.com/upmpdcli
-# <var name="ohmanufacturerimageuri"><brief>Uri for manufacturer���s logo. Does
+#ohmodelurl = http://www.lesbonscomptes.com/upmpdcli
+# <var name="ohmodelimageuri" type="string"><brief>Uri for model���s
+# icon. Does not vary at run-time.</brief></var>
+#ohmodelimageuri =
+# <var name="ohproductname" type="string"><brief>User-visible product
+# name. By default this is set to ModelName.</brief></var>
+#ohproductname = Upmpdcli
+# <var name="ohproductroom" type="string"><brief>The name of the room where
+# the Product is located.</brief><descr>Set to ���Main Room��� by default,
+# displayed in place of the "friendly name" by some control points.
+# ProductRoom is used to group the Product with other related Products in
+# the same physical room (e.g. a source with a pre-amp). Products which are
+# physically linked must always share the same ProductRoom
+# name.</descr></var>
+#ohproductroom = Main Room
+# <var name="ohproductinfo" type="string"><brief>Product information. Does
# not vary at run-time.</brief></var>
-#ohmanufacturerimageuri =
-# <var name="ohmodelname"><brief>Model name. Does not vary at
-# run-time.</brief></var>
-#ohmodelname = UpMPDCli UPnP-MPD gateway
-# <var name="ohmodelinfo"><brief>Model information. Does not vary at
-# run-time.</brief></var>
-#ohmodelinfo =
-# <var name="ohmodelurl"><brief>URL for model web site. Does not vary at
-# run-time.</brief></var>
-#ohmodelurl = http://www.lesbonscomptes.com/upmpdcli
-# <var name="ohmodelimageuri"><brief>Uri for model���s icon. Does not vary at
-# run-time.</brief></var>
-#ohmodelimageuri =
-# <var name="ohproductname"><brief>User-visible product name. By default
-# this is set to ModelName.</brief></var>
-#ohproductname = Upmpdcli
-# <var name="ohproductroom"><brief>The name of the room where the Product
-# is located.</brief><descr>Set to ���Main Room��� by default, displayed in
-# place of the "friendly name" by some control points. ProductRoom is used
-# to group the Product with other related Products in the same physical
-# room (e.g. a source with a pre-amp). Products which are physically linked
-# must always share the same ProductRoom name.</descr></var>
-#ohproductroom = Main Room
-# <var name="ohproductinfo"><brief>Product information. Does not vary at
-# run-time.</brief></var>
#ohproductinfo =
-# <var name="ohproducturl"><brief>URL for product web site. This may be the
-# UPnP presentation page.</brief></var>
+# <var name="ohproducturl" type="string"><brief>URL for product web
+# site. This may be the UPnP presentation page.</brief></var>
#ohproducturl =
-# <var name="ohproductimageuri"><brief>Uri for product image. Does not vary
-# at run-time.</brief></var>
+# <var name="ohproductimageuri" type="string"><brief>Uri for product
+# image. Does not vary at run-time.</brief></var>
#ohproductimageuri =
-# <var name="ohmetapersist"><brief>Save queue metadata to disk
-# (0/1).</brief><descr>This allows persistence of the metadata information
-# across restarts, the default is 1, and there is no reason to turn it
-# off.</descr></var>
+# <var name="ohmetapersist" type="bool" values="1"><brief>Save queue
+# metadata to disk (0/1).</brief><descr>This allows persistence of the
+# metadata information across restarts, the default is 1, and there is no
+# reason to turn it off.</descr></var>
ohmetapersist = 1
-# <var name="ohmetasleep"><brief>Mimimum interval (Seconds) between two
-# cache saves.</brief><descr>Increasing this may improve playlist load
-# speed on a slow device. The default is to start a new save as soon as the
-# previous one is done (if the list changed again inbetween).</descr></var>
+# <var name="ohmetasleep" type="int" values="0 120 0"><brief>Mimimum
+# interval (Seconds) between two cache saves.</brief><descr>Increasing this
+# may improve playlist load speed on a slow device. The default is to start
+# a new save as soon as the previous one is done (if the list changed again
+# inbetween).</descr></var>
#ohmetasleep = 0
# <grouptitle>Songcast Receiver parameters</grouptitle>
@@ -232,31 +238,36 @@
# Parameters for the Songcast modes. These are read by either/both the
# songcast and upmpdcli processes
-# <var name="sclogfilename"><brief>Log file name for sc2mpd (default
+# <var name="sclogfilename" type="fn"><brief>Log file name for sc2mpd (default
# stderr)</brief><descr>The value *must not* be the same as the one used
# for upmpdcli.</descr></var>
#sclogfilename = /tmp/scmpdcli.log
-# <var name="scloglevel"><brief>Log verbosity for sc2mpd.</brief></var>
+# <var name="scloglevel" type="int" values="0 6 0"><brief>Log verbosity for
+# sc2mpd.</brief></var>
#scloglevel = 6
-# <var name="scplaymethod"><brief>sc2mpd play method
-# (mpd/alsa).</brief><descr>With this set as 'alsa', sc2mpd will send the
-# audio directly to the sound driver, which is the only way to really avoid
-# skips and control the synchronization in multi-room setups.</descr></var>
+# <var name="scplaymethod" type="cstr" values="mpd alsa"><brief>sc2mpd
+# play method (mpd/alsa).</brief><descr>With this set as 'alsa', sc2mpd
+# will send the audio directly to the sound driver, which is the only way
+# to really avoid skips and control the synchronization in multi-room
+# setups.</descr></var>
#scplaymethod = mpd
-# <var name="schttpport"><brief>Port used by sc2mpd for MPD to connect
-# to.</brief><descr>Used only for scplaymethod=mpd. sc2mpd only accepts
-# connections from localhost.</descr></var>
+# <var name="schttpport" type="int" values="0 65635 8768"><brief>Port
+# used by sc2mpd for MPD to connect to.</brief><descr>Used only for
+# scplaymethod=mpd. sc2mpd only accepts connections from
+# localhost.</descr></var>
#schttpport = 8768
-# <var name="scalsadevice"><brief>Alsa device used by sc2mpd for playing
-# audio.</brief><descr>Only used for scplaymethod=alsa. Use 'aplay -L' to
-# see the possible values.</descr></var>
+# <var name="scalsadevice" type="string"><brief>Alsa device used by sc2mpd
+# for playing audio.</brief><descr>Only used for scplaymethod=alsa. Use
+# 'aplay -L' to see the possible values.</descr></var>
#scalsadevice = default
-# <var name="sccvttype"><brief>sc2mpd resampling method.</brief><descr>
+# <var name="sccvttype" type="cstr" values="SRC_SINC_BEST_QUALITY
+# SRC_SINC_MEDIUM_QUALITY SRC_SINC_FASTEST SRC_ZERO_ORDER_HOLD
+# SRC_LINEAR"><brief>sc2mpd resampling method.</brief><descr>
# Only used for scplaymethod=alsa. sc2mpd uses libsamplerate. The default
# method is SRC_SINC_FASTEST and a Rasberry Pi 1 is fast enough to use it.
# Possible values: SRC_SINC_BEST_QUALITY, SRC_SINC_MEDIUM_QUALITY,
@@ -269,9 +280,9 @@
# a couple % for the conversion in fact.</descr></var>
#sccvttype = SRC_SINC_FASTEST.
-# <var name="sc2mpd"><brief>Path to sc2mpd.</brief><descr>Only useful if it
-# is not in /usr/bin and the location is not in the $PATH for the init
-# scripts.</descr></var>
+# <var name="sc2mpd" type="string"><brief>Path to
+# sc2mpd.</brief><descr>Only useful if it is not in /usr/bin and the
+# location is not in the $PATH for the init scripts.</descr></var>
#sc2mpd = /usr/bin/sc2mpd
# <grouptitle>Songcast Sender parameters</grouptitle>
@@ -279,24 +290,24 @@
# Parameters tor the Sender/Receiver mode. Only does anything if
# scplaymethod is alsa
-# <var name="scsenderpath"><brief>Path to the script which starts the
-# auxiliary mpd and the sender process.</brief></var>
+# <var name="scsenderpath" type="string"><brief>Path to the script which
+# starts the auxiliary mpd and the sender process.</brief></var>
#scsenderpath = /usr/bin/scmakempdsender
-# <var name="scstreamscaled"><brief>Decide if we scale the songcast
-# stream.</brief><descr>If set, MPD software volume control will be applied
-# to the stream. True by default: using a Control Point to set the volume
-# on the upmpdcli instance which started the Sender affects the volume for
-# all Receivers.</descr></var>
+# <var name="scstreamscaled" type="bool" values="1"><brief>Decide if we
+# scale the songcast stream.</brief><descr>If set, MPD software volume
+# control will be applied to the stream. True by default: using a Control
+# Point to set the volume on the upmpdcli instance which started the Sender
+# affects the volume for all Receivers.</descr></var>
#scstreamscaled = 1
-# <var name="scsendermpdport"><brief>localhost port to use by the auxiliary
-# mpd.</brief></var>
+# <var name="scsendermpdport" type="int" values="0 65635 6700">
+# <brief>localhost port to be used by the auxiliary mpd.</brief></var>
#scsendermpdport = 6700
-# <var name="scripts_dir"><brief>Location for the scripts used to set up
-# additional external sources.</brief><descr>See the Songcast Sender
-# support documentation page.</descr></var>
+# <var name="scripts_dir" type="dfn"><brief>Location for the scripts used
+# to set up additional external sources.</brief><descr>See the Songcast
+# Sender support documentation page.</descr></var>
#scripts_dir = /usr/share/upmpdcli/src_scripts
# Initial / default List of radios borrowed from misc sources. Edit to taste