summaryrefslogtreecommitdiffstats
path: root/src/JackDbusDriver.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/JackDbusDriver.hpp')
-rw-r--r--src/JackDbusDriver.hpp161
1 files changed, 161 insertions, 0 deletions
diff --git a/src/JackDbusDriver.hpp b/src/JackDbusDriver.hpp
new file mode 100644
index 0000000..69cc0a5
--- /dev/null
+++ b/src/JackDbusDriver.hpp
@@ -0,0 +1,161 @@
+/* This file is part of Patchage.
+ * Copyright 2008 Nedko Arnaudov <nedko@arnaudov.name>
+ *
+ * Patchage is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free
+ * Software Foundation, either version 3 of the License, or (at your option)
+ * any later version.
+ *
+ * Patchage is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Patchage. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef PATCHAGE_JACKDBUSDRIVER_HPP
+#define PATCHAGE_JACKDBUSDRIVER_HPP
+
+#include <string>
+#include <boost/shared_ptr.hpp>
+#include <jack/jack.h>
+#include <jack/statistics.h>
+#include <glibmm/thread.h>
+#include <dbus/dbus.h>
+#include "Driver.hpp"
+#include "Patchage.hpp"
+#include "PatchageModule.hpp"
+
+class PatchageEvent;
+class PatchageCanvas;
+class PatchagePort;
+
+class JackDriver : public Driver
+{
+public:
+ explicit JackDriver(Patchage* app);
+ ~JackDriver();
+
+ void attach(bool launch_daemon);
+ void detach();
+
+ bool is_attached() const;
+ bool is_realtime() const;
+
+ void refresh();
+ void destroy_all();
+
+ bool connect(
+ PatchagePort* src,
+ PatchagePort* dst);
+
+ bool disconnect(
+ PatchagePort* src,
+ PatchagePort* dst);
+
+ size_t get_xruns();
+ void reset_xruns();
+ float get_max_dsp_load();
+ void reset_max_dsp_load();
+
+ float sample_rate();
+ jack_nframes_t buffer_size();
+ bool set_buffer_size(jack_nframes_t size);
+
+ void process_events(Patchage* app) {}
+
+ PatchagePort* create_port_view(
+ Patchage* patchage,
+ const PortID& ref);
+
+private:
+ void error_msg(const std::string& msg) const;
+ void info_msg(const std::string& msg) const;
+
+ PatchageModule* find_or_create_module(
+ ModuleType type,
+ const std::string& name);
+
+ void add_port(
+ PatchageModule* module,
+ PortType type,
+ const std::string& name,
+ bool is_input);
+
+ void add_port(
+ dbus_uint64_t client_id,
+ const char* client_name,
+ dbus_uint64_t port_id,
+ const char* port_name,
+ dbus_uint32_t port_flags,
+ dbus_uint32_t port_type);
+
+ void remove_port(
+ dbus_uint64_t client_id,
+ const char* client_name,
+ dbus_uint64_t port_id,
+ const char* port_name);
+
+ void connect_ports(
+ dbus_uint64_t connection_id,
+ dbus_uint64_t client1_id,
+ const char* client1_name,
+ dbus_uint64_t port1_id,
+ const char* port1_name,
+ dbus_uint64_t client2_id,
+ const char* client2_name,
+ dbus_uint64_t port2_id,
+ const char* port2_name);
+
+ void disconnect_ports(
+ dbus_uint64_t connection_id,
+ dbus_uint64_t client1_id,
+ const char* client1_name,
+ dbus_uint64_t port1_id,
+ const char* port1_name,
+ dbus_uint64_t client2_id,
+ const char* client2_name,
+ dbus_uint64_t port2_id,
+ const char* port2_name);
+
+ bool call(
+ bool response_expected,
+ const char* iface,
+ const char* method,
+ DBusMessage** reply_ptr_ptr,
+ int in_type,
+ ...);
+
+ void update_attached();
+
+ bool is_started();
+
+ void start_server();
+
+ void stop_server();
+
+ void refresh_internal(bool force);
+
+ static DBusHandlerResult dbus_message_hook(
+ DBusConnection *connection,
+ DBusMessage *message,
+ void *me);
+
+ void on_jack_appeared();
+
+ void on_jack_disappeared();
+
+private:
+ Patchage* _app;
+ DBusError _dbus_error;
+ DBusConnection* _dbus_connection;
+ float _max_dsp_load;
+
+ bool _server_responding;
+ bool _server_started;
+
+ dbus_uint64_t _graph_version;
+};
+
+#endif // PATCHAGE_JACKDBUSDRIVER_HPP