Automation of LV2 plugin properties.
[ardour.git] / libs / ardour / ardour / audio_backend.h
index 78e390318259597c9a708378acd906aaeb8bffda..ed29bd3c28a1263fd82498351195fd02856e875e 100644 (file)
@@ -70,6 +70,14 @@ struct LIBARDOUR_API AudioBackendInfo {
      * not currently required, is still possible.
      */
     bool (*already_configured)();
+
+    /** Return true if the underlying mechanism/API can be
+     * used on the given system.
+     *
+     * If this function returns false, the backend is not
+     * listed in the engine dialog.
+     */
+    bool (*available)();
 };
 
 class LIBARDOUR_API AudioBackend : public PortEngine {
@@ -225,7 +233,7 @@ class LIBARDOUR_API AudioBackend : public PortEngine {
     virtual int set_device_name (const std::string&) = 0;
     /** Deinitialize and destroy current device
      */
-    virtual int drop_device() { return 0; };
+       virtual int drop_device() {return 0;};
     /** Set the sample rate to be used
      */
     virtual int set_sample_rate (float) = 0;
@@ -263,6 +271,14 @@ class LIBARDOUR_API AudioBackend : public PortEngine {
      * external D-A/D-A converters. Units are samples.
      */
     virtual int set_systemic_output_latency (uint32_t) = 0;
+    /** Set the (additional) input latency for a specific midi device,
+     * or if the identifier is empty, apply to all midi devices.
+     */
+    virtual int set_systemic_midi_input_latency (std::string const, uint32_t) = 0;
+    /** Set the (additional) output latency for a specific midi device,
+     * or if the identifier is empty, apply to all midi devices.
+     */
+    virtual int set_systemic_midi_output_latency (std::string const, uint32_t) = 0;
 
     /* Retrieving parameters */
 
@@ -274,6 +290,8 @@ class LIBARDOUR_API AudioBackend : public PortEngine {
     virtual uint32_t     output_channels () const = 0;
     virtual uint32_t     systemic_input_latency () const = 0;
     virtual uint32_t     systemic_output_latency () const = 0;
+    virtual uint32_t     systemic_midi_input_latency (std::string const) const = 0;
+    virtual uint32_t     systemic_midi_output_latency (std::string const) const = 0;
 
     /** override this if this implementation returns true from
      * requires_driver_selection()
@@ -311,7 +329,19 @@ class LIBARDOUR_API AudioBackend : public PortEngine {
     virtual int set_midi_option (const std::string& option) = 0;
 
     virtual std::string midi_option () const = 0;
-    
+
+    /** Detailed MIDI device list - if available */
+    virtual std::vector<DeviceStatus> enumerate_midi_devices () const = 0;
+
+    /** mark a midi-devices as enabled */
+    virtual int set_midi_device_enabled (std::string const, bool) = 0;
+
+    /** query if a midi-device is enabled */
+    virtual bool midi_device_enabled (std::string const) const = 0;
+
+    /** if backend supports systemic_midi_[in|ou]tput_latency() */
+    virtual bool can_set_systemic_midi_latencies () const = 0;
+
     /* State Control */
  
     /** Start using the device named in the most recent call
@@ -364,6 +394,12 @@ class LIBARDOUR_API AudioBackend : public PortEngine {
      */
     virtual int stop () = 0;
 
+        /** Reset device. 
+     *
+     * Return zero if successful, negative values on error
+     */
+       virtual int reset_device() = 0;
+
     /** While remaining connected to the device, and without changing its
      * configuration, start (or stop) calling the process_callback() of @param engine
      * without waiting for the device. Once process_callback() has returned, it