2017-11-06 Fred Gleason <fredg@paravelsystems.com>

* Moved the contents of 'docs/catchd.txt' to 'docs/apis/catchd.xml.'
This commit is contained in:
Fred Gleason
2017-11-06 12:52:55 -05:00
parent c3dbac74e9
commit 20b2ff3444
7 changed files with 558 additions and 122 deletions

1
.gitignore vendored
View File

@@ -36,6 +36,7 @@ docs/opsguide/frontspiece.xml
docs/opsguide/*.html docs/opsguide/*.html
docs/opsguide/*.pdf docs/opsguide/*.pdf
helpers/cwrap helpers/cwrap
helpers/docbook
helpers/jsmin helpers/jsmin
importers/nexgen_filter importers/nexgen_filter
importers/panel_copy importers/panel_copy

View File

@@ -16261,3 +16261,5 @@
* Added a logo to the title page of the Operations Guide. * Added a logo to the title page of the Operations Guide.
2017-11-06 Fred Gleason <fredg@paravelsystems.com> 2017-11-06 Fred Gleason <fredg@paravelsystems.com>
* Added the Operations Guide to 'rivendell.spec.in'. * Added the Operations Guide to 'rivendell.spec.in'.
2017-11-06 Fred Gleason <fredg@paravelsystems.com>
* Moved the contents of 'docs/catchd.txt' to 'docs/apis/catchd.xml.'

View File

@@ -29,7 +29,6 @@ SUBDIRS = $(DOCBOOK_AM_OPT) examples\
EXTRA_DIST = ALSA.txt\ EXTRA_DIST = ALSA.txt\
ando_interface.odt\ ando_interface.odt\
asound.conf-sample\ asound.conf-sample\
catchd.txt\
colors\ colors\
copy_split_format.odt\ copy_split_format.odt\
MESSAGE_BOX.txt\ MESSAGE_BOX.txt\

View File

@@ -33,12 +33,17 @@
all-local: cae.html\ all-local: cae.html\
cae.pdf\ cae.pdf\
catchd.html\
catchd.pdf\
web_api.html\ web_api.html\
web_api.pdf web_api.pdf
EXTRA_DIST = cae.html\ EXTRA_DIST = cae.html\
cae.pdf\ cae.pdf\
cae.xml\ cae.xml\
catchd.html\
catchd.pdf\
catchd.xml\
web_api.html\ web_api.html\
web_api.pdf\ web_api.pdf\
web_api.xml web_api.xml

550
docs/apis/catchd.xml Normal file
View File

@@ -0,0 +1,550 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<article xmlns="http://docbook.org/ns/docbook" version="5.0">
<info>
<title>Rivendell RDCatch Monitor Protocol</title>
<author>
<personname>
<firstname>Fred</firstname>
<surname>Gleason</surname>
<email>fredg@paravelsystems.com</email>
</personname>
</author>
</info>
<sect1 xml:id="overview">
<title>Overview</title>
<para>
This defines the IP protocol used for communication between different
modules of Rivendell and the
<command>rdcatchd</command><manvolnum>8</manvolnum> daemon.
</para>
<para>
Connection to ripcd is by means of a TCP SOCK_STREAM connection to TCP
port <userinput>6006</userinput>. The format of a message is as follows:
</para>
<para>
<replaceable>cmd-code</replaceable> [<replaceable>arg</replaceable>] [<replaceable>...</replaceable>]!
</para>
<variablelist>
<varlistentry>
<term>
<replaceable>cmd-code</replaceable>
</term>
<listitem>
<para>
A two letter command code, describing the generic action to be
performed
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>arg</replaceable>
</term>
<listitem>
<para>
Zero or more arguments, delimited by spaces or, if the last
argument, by ! (see below)
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
!
</term>
<listitem>
<para>
The ASCII character 33, indicating the end of the command sequence.
</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1 xml:id="sect.unprivileged_commands">
<title>Unprivileged Commands</title>
<para>
No authentication is required to execute these.
</para>
<sect2 xml:id="sect.unprivileged_commands.drop_connection">
<title>Drop Connection</title>
<para>
End the session and drop the TCP connection.
</para>
<para>
<userinput>DC!</userinput>
</para>
</sect2>
<sect2 xml:id="sect.unprivileged_commands.send_password">
<title>Send Password</title>
<para>
Send a password to the server for authentication.
</para>
<para>
<userinput>PW <replaceable>passwd</replaceable>!</userinput>
</para>
<variablelist>
<varlistentry>
<term>
<replaceable>passwd</replaceable>
</term>
<listitem>
A password to be supplied before granting the client access.
</listitem>
</varlistentry>
</variablelist>
<para>
<command>rdcatchd</command><manvolnum>8</manvolnum> will respond
with <computeroutput>PW +!</computeroutput> or
<computeroutput>PW -!</computeroutput>, indicating the success or
failure of the authentication.
</para>
</sect2>
</sect1>
<sect1 xml:id="sect.privileged_commands">
<title>Privileged Commands</title>
<para>
A connection must be authenticated before these can be executed.
</para>
<sect2 xml:id="sect.privileged_commands.deck_event_processed">
<title>Deck Event Processed</title>
<para>
Sent by RDCatchd whenever a deck event is processed.
</para>
<para>
<userinput>DE <replaceable>deck-num</replaceable>
<replaceable>event-num</replaceable>!</userinput>
</para>
<variablelist>
<varlistentry>
<term><replaceable>deck-num</replaceable></term>
<listitem>
<para>
The number of the deck originating the event. Record decks have
numbers in the range <computeroutput>1</computeroutput> through
<computeroutput>127</computeroutput>, while Play decks have
numbers in the range <computeroutput>128</computeroutput> through
<computeroutput>254</computeroutput>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable>event-num</replaceable></term>
<listitem>
<para>
The new event state of the specified deck.
</para>
</listitem>
</varlistentry>
</variablelist>
<para>
See <xref linkend="sect.privileged_commands.request_deck_status" /> for
the list of possible deck event states.
</para>
</sect2>
<sect2 xml:id="sect.privileged_commands.reload_deck_list">
<title>Reload Deck List</title>
<para>
Reload the record/play deck configuration.
</para>
<para>
<userinput>RD!</userinput>
</para>
<para>
<command>rdcatchd</command><manvolnum>8</manvolnum> will respond with
<computeroutput>RS +!</computeroutput>.
</para>
</sect2>
<sect2 xml:id="sect.privileged_commands.reload_event_list">
<title>Reload Event List</title>
<para>
Reload the list of scheduled events.
</para>
<para>
<userinput>RS!</userinput>
</para>
<para>
<command>rdcatchd</command><manvolnum>8</manvolnum> will respond with
<computeroutput>RS +!</computeroutput>.
</para>
</sect2>
<sect2 xml:id="sect.privileged_commands.add_event">
<title>Add Event</title>
<para>
Add event to the event list.
</para>
<para>
<userinput>RA <replaceable>event-num</replaceable>!</userinput>
</para>
<variablelist>
<varlistentry>
<term><replaceable>event-num</replaceable></term>
<listitem>
<para>
The number of the event to add.
</para>
</listitem>
</varlistentry>
</variablelist>
<para>
<command>rdcatchd</command><manvolnum>8</manvolnum>
will respond with
<computeroutput>RA <replaceable>event-num</replaceable>+!</computeroutput>.
</para>
</sect2>
<sect2 xml:id="sect.privileged_commands.remove_event">
<title>Remove Event</title>
<para>
Remove event from the event list.
</para>
<para>
<userinput>RR <replaceable>event-num</replaceable>!</userinput>
</para>
<variablelist>
<varlistentry>
<term><replaceable>event-num</replaceable></term>
<listitem>
<para>
The number of the event to remove.
</para>
</listitem>
</varlistentry>
</variablelist>
<para>
<command>rdcatchd</command><manvolnum>8</manvolnum>
will respond with
<computeroutput>RR <replaceable>event-num</replaceable>+!</computeroutput>.
</para>
</sect2>
<sect2 xml:id="sect.privileged_commands.update_event">
<title>Update Event</title>
<para>
Update event from the event list.
</para>
<para>
<userinput>RU <replaceable>event-num</replaceable>!</userinput>
</para>
<variablelist>
<varlistentry>
<term><replaceable>event-num</replaceable></term>
<listitem>
<para>
The number of the event to update.
</para>
</listitem>
</varlistentry>
</variablelist>
<para>
<command>rdcatchd</command><manvolnum>8</manvolnum>
will respond with
<computeroutput>RU <replaceable>event-num</replaceable>+!</computeroutput>.
</para>
</sect2>
<sect2 xml:id="sect.privileged_commands.request_deck_status">
<title>Request Deck Status</title>
<para>
Request the current deck status.
</para>
<para>
<userinput>RE <replaceable>deck-num</replaceable>!</userinput>
</para>
<variablelist>
<varlistentry>
<term><replaceable>deck-num</replaceable></term>
<listitem>
<para>
The number of the deck for which to return status.
</para>
</listitem>
</varlistentry>
</variablelist>
<para>
If <replaceable>deck-num</replaceable> is greater than zero,
<command>rdcatchd</command><manvolnum>8</manvolnum> will respond with
<computeroutput>RE <replaceable>deck-num</replaceable>
<replaceable>status</replaceable> <replaceable>id</replaceable>
<replaceable>cutname</replaceable>!</computeroutput>
</para>
<variablelist>
<varlistentry>
<term><replaceable>deck-num</replaceable></term>
<listitem>
<para>
Channel number
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable>status</replaceable></term>
<listitem>
<para>
The current status of the deck. Possible values are:
</para>
<para>
<table frame="all">
<title>Deck Status Codes</title>
<tgroup cols="2" align="left" colsep="1" rowsep="1">
<colspec colname="Code" colwidth="1.0*" />
<colspec colname="Meaning" colwidth="10.0*" />
<thead>
<row><entry>Code</entry><entry>Meaning</entry></row>
</thead>
<tbody>
<row><entry>0</entry><entry>Offline</entry></row>
<row><entry>1</entry><entry>Idle</entry></row>
<row><entry>2</entry><entry>Ready</entry></row>
<row><entry>3</entry><entry>Active (playing or recording)</entry></row>
<row><entry>4</entry><entry>Waiting (for a GPI)</entry></row>
</tbody>
</tgroup>
</table>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable>event-id</replaceable></term>
<listitem>
<para>
ID number of current event (from RECORDINGS table)
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable>cutname</replaceable></term>
<listitem>
<para>
The cutname of the event (present only for
<replaceable>status</replaceable>==<computeroutput>3</computeroutput>).
</para>
</listitem>
</varlistentry>
</variablelist>
<para>
If <replaceable>channel</replaceable> is zero,
<command>rdcatchd</command><manvolnum>8</manvolnum> will respond for
every event whose status is non-idle.
</para>
<para>
An <computeroutput>RE</computeroutput> packet will also be sent
automatically to all active connections upon any change of deck status.
</para>
</sect2>
<sect2 xml:id="sect.privileged_commands.enable_metering">
<title>Enable Metering</title>
<para>
Enable/Disable Audio Metering
</para>
<para>
<userinput>RM <replaceable>state</replaceable>!</userinput>
</para>
<variablelist>
<varlistentry>
<term><replaceable>state</replaceable></term>
<listitem>
<para>
<computeroutput>1</computeroutput> = Enabled,
<computeroutput>0</computeroutput> = Disabled.
</para>
</listitem>
</varlistentry>
</variablelist>
<para>
When metering is active, meter data packets will be periodically sent,
as follows:
</para>
<para>
<computeroutput>RM <replaceable>deck</replaceable>
<replaceable>chan</replaceable>
<replaceable>level</replaceable>!</computeroutput>
</para>
<variablelist>
<varlistentry>
<term><replaceable>deck</replaceable></term>
<listitem>
<para>
Deck number
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable>chan</replaceable></term>
<listitem>
<para>
Channel, <computeroutput>0</computeroutput> = Left,
<computeroutput>1</computeroutput> = Right
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable>level</replaceable></term>
<listitem>
<para>
Left audio level, in 1/100 of dbFS
</para>
</listitem>
</varlistentry>
</variablelist>
</sect2>
<sect2 xml:id="sect.privileged_commands.stop_deck">
<title>Stop Deck</title>
<para>
Stop active event.
</para>
<para>
<userinput>SR <replaceable>deck-num</replaceable>!</userinput>
</para>
<variablelist>
<varlistentry>
<term><replaceable>deck-num</replaceable></term>
<listitem>
<para>
The number of the deck to stop.
</para>
</listitem>
</varlistentry>
</variablelist>
</sect2>
<sect2 xml:id="sect.privileged_commands.purge_event">
<title>Purge Event</title>
<para>
Report purging of one-shot event.
</para>
<para>
<userinput>PE <replaceable>event-num</replaceable>!</userinput>
</para>
<variablelist>
<varlistentry>
<term><replaceable>event-num</replaceable></term>
<listitem>
<para>
The number of the purged event.
</para>
</listitem>
</varlistentry>
</variablelist>
<para>
Received upon completion of a one-shot event by
<command>rdcatchd</command><manvolnum>8</manvolnum> to indicate that
the event has been purged.
</para>
</sect2>
<sect2 xml:id="sect.privileged_commands.reload_time_offset">
<title>Reload Time Offset</title>
<para>
Reload the time offset value from the database.
</para>
<para>
<userinput>RO!</userinput>
</para>
</sect2>
<sect2 xml:id="sect.privileged_commands.reload_heartbeat_configuration">
<title>Reload Heartbeat Configuration</title>
<para>
Reload the heartbeat configuration from the database.
</para>
<para>
<userinput>RH!</userinput>
</para>
</sect2>
<sect2 xml:id="sect.privileged_commands.heartbeat_pulse">
<title>Heartbeat Pulse</title>
<para>
Heartbeat Pulse, for connection keep-alive.
</para>
<para>
<userinput>HB!</userinput>
</para>
</sect2>
<sect2 xml:id="sect.privileged_commands.restart_dropbox_instances">
<title>Restart Dropbox Instances</title>
<para>
Restart all <command>rdimport</command><manvolnum>1</manvolnum>
instances for running dropboxes.
</para>
<para>
<userinput>RX!</userinput>
</para>
</sect2>
<sect2 xml:id="sect.privileged_commands.input_monitor_state">
<title>Input Monitor State</title>
<para>
Turn the input monitor on or off.
</para>
<para>
<userinput>MN <replaceable>deck-num</replaceable>
<replaceable>state</replaceable>!</userinput>
</para>
<variablelist>
<varlistentry>
<term><replaceable>deck-num</replaceable></term>
<listitem>
<para>
The number of the deck.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable>state</replaceable></term>
<listitem>
<para>
<computeroutput>1</computeroutput> = Enabled,
<computeroutput>0</computeroutput> = Disabled.
</para>
</listitem>
</varlistentry>
</variablelist>
</sect2>
<sect2 xml:id="sect.privileged_commands.set_exit_code">
<title>Set Exit Code</title>
<para>
Set the exit code of an event.
</para>
<para>
<userinput>SC <replaceable>event-num</replaceable>
<replaceable>code</replaceable>
<replaceable>msg</replaceable>!</userinput>
</para>
<variablelist>
<varlistentry>
<term><replaceable>event-num</replaceable></term>
<listitem>
<para>
The number of the event.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable>code</replaceable></term>
<listitem>
<para>
The numeric code to set.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable>msg</replaceable></term>
<listitem>
<para>
The text message to set.
</para>
</listitem>
</varlistentry>
</variablelist>
</sect2>
</sect1>
</article>

View File

@@ -1,120 +0,0 @@
Rivendell Netcatcher Communication Protocol
This defines the IP protocol used for communication between different
modules of Rivendell and the 'rdcatchd' daemon.
Connection to ripcd is by means of a TCP SOCK_STREAM connection to TCP
port 6006. The format of a message is as follows:
<cmd>[<arg>][...]!
where:
<cmd> is a two-letter code indicating the nature of the message.
<arg> is zero or more arguments.
! is an ASCII character 0x21.
UNPRIVILEDGED COMMANDS -- no authentication is required to execute these.
DC! -- DROP CONNECTION
End the session and drop the TCP connection.
PW <passwd>! -- SEND PASSWORD
Send a password to authenticate the connection. Ripcd will respond
with 'PW +!' or 'PW -!', indicating the success or failure of the
authentication.
PRIVILEDGED - a connection must be authenticated before these can be
executed.
DE <deck> <number>! -- Deck Event Processed
Sent by RDCatchd whenever a deck event is processed.
RD! -- Reload Deck List
Reload the record/play deck configuration. Rdcatchd will respond with RD
+!.
RS! -- Reload Event List
Reload the list of scheduled events. Rdcatchd will respond with
RS +!.
RA <id>! -- Add Event
Add event number <id> to the event list. Rdcatchd will respond with
RA <id> +!
RR <id>! -- Remove Event
Remove event number <id> from the event list. Rdcatchd will respond with
RR <id> +!
RU <id>! -- Update Event
Refresh event number <id> in the event list. Rdcatchd will respond with
RU <id> +!
RE <channel>! -- Request Status
<channel> = Channel number
If <channel> is greater than zero, rdcatchd will respond with
RE <channel> <status> <id> <cutname>!
<channel> = Channel number
<status> = 0 - Deck is offline
1 - Deck is Idle
2 - Deck is Ready
3 - Deck is active (playing or recording)
4 - Deck is waiting for GPI
<id> = ID number of current event (from RECORDINGS table)
<cutname> = The cutname of the event (present only for <status>==3).
If <channel> is zero, rdcatchd will respond for every event whose
status is non-idle.
An RE packet will also be sent automatically to all active connections
upon any change of deck status.
RM <state>! -- Enable/Disable Metering
<state> = 0 - Turn metering off
1 - Turn metering on
When metering is active, meter data packets will be periodically sent,
as follows:
RM <deck> <chan> <level>!
<deck> = Deck number
<chan> = Channel, 0 = Left, 1 = Right
<level> = Left audio level, in 1/100 of dbFS
SR <deck>! -- Stop
<deck> = Deck Number
PE <id>! -- Purge Event
Received from the daemon upon completion of an event with the ONE_SHOT
flag set, meaning that the event has been removed from the database.
RO! -- Reload Time Offset
RH! -- Reload Heartbeat Configuration
HB! -- Heartbeat Pulse
MN <deck> <state>! -- Monitor State
Turn the input monitor for deck <deck> on or off.
RX! -- Restart dropbox instances
SC <id> <code> <msg>!
Set exit code of event <id> to <code>.

View File

@@ -379,7 +379,6 @@ rm -rf $RPM_BUILD_ROOT
%doc conf/rd.conf-sample %doc conf/rd.conf-sample
%doc conf/my.cnf-master %doc conf/my.cnf-master
%doc conf/my.cnf-standby %doc conf/my.cnf-standby
%doc docs/catchd.txt
%doc docs/colors %doc docs/colors
%doc docs/ripc.txt %doc docs/ripc.txt
%doc docs/pam_rd.txt %doc docs/pam_rd.txt