From acbda29f838280ba98cf9e9e539e9d8a6e8fc6ad Mon Sep 17 00:00:00 2001 From: David Robillard Date: Fri, 9 Jun 2006 15:07:31 +0000 Subject: Added Om aka Graph aka god knows what git-svn-id: http://svn.drobilla.net/lad/grauph@9 a436a847-0d15-0410-975c-d299462d15a1 --- src/engine/Driver.h | 112 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 src/engine/Driver.h (limited to 'src/engine/Driver.h') diff --git a/src/engine/Driver.h b/src/engine/Driver.h new file mode 100644 index 00000000..be882d8d --- /dev/null +++ b/src/engine/Driver.h @@ -0,0 +1,112 @@ +/* This file is part of Om. Copyright (C) 2006 Dave Robillard. + * + * Om 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 2 of the License, or (at your option) any later + * version. + * + * Om 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 this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef DRIVER_H +#define DRIVER_H + +#include +using std::string; + +namespace Om { + +template class PortBase; + + +/** Representation of a system (outside Om, ie hardware) audio port. + * + * This is the class through which the rest of the engine manages everything + * related to driver ports. Derived classes are expected to have a pointer to + * their driver (to be able to perform the operation necessary). + * + * \ingroup engine + */ +class DriverPort { +public: + virtual ~DriverPort() {} + + /** Add this port to driver at the beginning of a process cycle (realtime safe) */ + virtual void add_to_driver() = 0; + + /** Remove this port at the beginning of a process cycle (realtime safe) */ + virtual void remove_from_driver() = 0; + + /** Set the name of the system port */ + virtual void set_name(const string& name) = 0; + +protected: + DriverPort() {} +}; + + +/** Driver abstract base class. + * + * A Driver is, from the perspective of OmObjects (nodes, patches, ports) an + * interface for managing system ports. An implementation of Driver basically + * needs to manage DriverPorts, and handle writing/reading data to/from them. + * + * The template parameter T is the type of data this driver manages (ie the + * data type of the bridge ports it will handle). + * + * \ingroup engine + */ +template +class Driver +{ +public: + virtual ~Driver() {} + + virtual void activate() = 0; + virtual void deactivate() = 0; + + virtual bool is_activated() const = 0; + + /** Create a port ready to be inserted with add_input (non realtime). + * + * May return NULL if the Driver can not drive the port for some reason. + */ + virtual DriverPort* create_port(PortBase* patch_port) = 0; +}; + + +#if 0 +/** Dummy audio driver. + * + * Not abstract, all functions are dummies. One of these will be allocated and + * "used" if no working AUDIO driver is loaded. (Doing it this way as opposed to + * just making Driver have dummy functions makes sure any existing Driver + * derived class actually implements the required functions). + * + * \ingroup engine + */ +class DummyDriver : public Driver +{ +public: + ~DummyDriver() {} + + void activate() {} + void deactivate() {} + + void enable() {} + void disable() {} + + DriverPort* create_port(PortBase* patch_port) { return NULL; } +}; +#endif + + +} // namespace Om + +#endif // DRIVER_H -- cgit v1.2.1