diff options
Diffstat (limited to 'libs/surfaces/cc121/cc121_interface.cc')
-rw-r--r-- | libs/surfaces/cc121/cc121_interface.cc | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/libs/surfaces/cc121/cc121_interface.cc b/libs/surfaces/cc121/cc121_interface.cc new file mode 100644 index 0000000000..7483b39d35 --- /dev/null +++ b/libs/surfaces/cc121/cc121_interface.cc @@ -0,0 +1,80 @@ +/* + Copyright (C) 2012 Paul Davis + Copyright (C) 2016 W.P. van Paassen + + This program 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. + + This program 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 more 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., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include <pbd/failed_constructor.h> + +#include "control_protocol/control_protocol.h" +#include "cc121.h" + +using namespace ARDOUR; +using namespace ArdourSurface; + +static ControlProtocol* +new_cc121_midi_protocol (ControlProtocolDescriptor* /*descriptor*/, Session* s) +{ + CC121* fp; + + try { + fp = new CC121 (*s); + } catch (failed_constructor& err) { + return 0; + } + + if (fp->set_active (true)) { + delete fp; + return 0; + } + + return fp; +} + +static void +delete_cc121_midi_protocol (ControlProtocolDescriptor* /*descriptor*/, ControlProtocol* cp) +{ + delete cp; +} + +static bool +probe_cc121_midi_protocol (ControlProtocolDescriptor* /*descriptor*/) +{ + return CC121::probe (); +} + +static void* +cc121_request_buffer_factory (uint32_t num_requests) +{ + return CC121::request_factory (num_requests); +} + +static ControlProtocolDescriptor cc121_midi_descriptor = { + /*name : */ "Steinberg CC121", + /*id : */ "uri://ardour.org/surfaces/cc121:0", + /*ptr : */ 0, + /*module : */ 0, + /*mandatory : */ 0, + /*supports_feedback : */ true, + /*probe : */ probe_cc121_midi_protocol, + /*initialize : */ new_cc121_midi_protocol, + /*destroy : */ delete_cc121_midi_protocol, + /*request_buffer_factory */ cc121_request_buffer_factory +}; + +extern "C" ARDOURSURFACE_API ControlProtocolDescriptor* protocol_descriptor () { return &cc121_midi_descriptor; } + |