# LV2 Command Extension
# Copyright (C) 2010 David Robillard <d@drobilla.net>
# 
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
# to deal in the Software without restriction, including without limitation
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
# and/or sell copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following conditions:
# 
# The above copyright notice and this permission notice shall be included
# in all copies or substantial portions of the Software.
# 
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
# OTHER DEALINGS IN THE SOFTWARE.

@prefix cmd:  <http://lv2plug.in/ns/ext/command#> .
@prefix lv2:  <http://lv2plug.in/ns/lv2core#> .
@prefix rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd:  <http://www.w3.org/2001/XMLSchema> .
@prefix doap: <http://usefulinc.com/ns/doap#> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .

<http://lv2plug.in/ns/ext/command>
	a lv2:Specification ;
    doap:name "LV2 Command" ;
    doap:maintainer [
        a foaf:Person ;
        foaf:name     "David Robillard" ;
        foaf:homepage <http://drobilla.net/> ;
        rdfs:seeAlso  <http://drobilla.net/drobilla.rdf>
    ] ;
	rdfs:comment """
This extension defines special port types used for controlling and inspecting a
plugin instance by sending messages/commands and receiving responses to them.
It also allows plugins to send status updates to the host.  The port types in
this extension only define an abstract notion of plugin control, not actual
data types and/or message semantics.  They must be used with some other port
data type (e.g. event) to define the actual data format of port buffers.
As a result, this extension can be used in conjunction with any extension
that defines a port type suitable for controlling plugins.
""" .

cmd:CommandPort a rdfs:Class ;
    rdfs:label      "Command Port" ;
    rdfs:subClassOf lv2:Port ;
    rdfs:comment    """
An input port used to control a plugin instance.  A plugin has
at most 1 CommandPort.  A CommandPort is always an lv2:InputPort.  Hosts or
UIs send messages to the command port in order to control a plugin instance
in any way.  This is an abstract port class, the actual format and semantics
of the port buffer (and messages) are defined by some other port type.
""" .

cmd:StatusPort a rdfs:Class ;
    rdfs:label      "Command Port" ;
    rdfs:subClassOf lv2:Port ;
    rdfs:comment    """
An output port used to notify the host about changes to a plugin instance and
responses to commands.  A plugin has at most 1 StatusPort.  A StatusPort is
always an lv2:OutputPort.  Any response to a command sent to the CommandPort
of the plugin will appear in the StatusPort output.  The plugin may also emit
other messages (i.e. the contents of a StatusPort are not necessarily responses
to commands).  This is an abstract port class, the actual format and semantics
of the port buffer (and messages) are defined by some other port type.
""" .