diff --git a/libs/ardour/control_protocol_manager.cc b/libs/ardour/control_protocol_manager.cc index 2ce6636539..55e5957145 100644 --- a/libs/ardour/control_protocol_manager.cc +++ b/libs/ardour/control_protocol_manager.cc @@ -52,7 +52,7 @@ PBD::Signal1 ControlProtocolManager::Stripabl ControlProtocolInfo::~ControlProtocolInfo () { if (protocol && descriptor) { - descriptor->destroy (descriptor, protocol); + descriptor->destroy (protocol); protocol = 0; } @@ -226,7 +226,7 @@ ControlProtocolManager::instantiate (ControlProtocolInfo& cpi) DEBUG_TRACE (DEBUG::ControlProtocols, string_compose ("initializing %1\n", cpi.name)); - if ((cpi.protocol = cpi.descriptor->initialize (cpi.descriptor, _session)) == 0) { + if ((cpi.protocol = cpi.descriptor->initialize (_session)) == 0) { error << string_compose (_("control protocol name \"%1\" could not be initialized"), cpi.name) << endmsg; return 0; } @@ -267,7 +267,7 @@ ControlProtocolManager::teardown (ControlProtocolInfo& cpi, bool lock_required) cpi.state = new XMLNode (cpi.protocol->get_state()); cpi.state->set_property (X_("active"), false); - cpi.descriptor->destroy (cpi.descriptor, cpi.protocol); + cpi.descriptor->destroy (cpi.protocol); Glib::Threads::RWLock::WriterLock lm (protocols_lock, Glib::Threads::NOT_LOCK); if (lock_required) { @@ -370,7 +370,7 @@ ControlProtocolManager::control_protocol_discover (string path) if ((descriptor = get_descriptor (path)) != 0) { - if (!descriptor->probe (descriptor)) { + if (descriptor->available && !descriptor->available ()) { warning << string_compose (_("Control protocol %1 not usable"), descriptor->name) << endmsg; delete (Glib::Module*) descriptor->module; } else { diff --git a/libs/ctrl-interface/control_protocol/control_protocol/control_protocol.h b/libs/ctrl-interface/control_protocol/control_protocol/control_protocol.h index 75c53505eb..32804fa5ca 100644 --- a/libs/ctrl-interface/control_protocol/control_protocol/control_protocol.h +++ b/libs/ctrl-interface/control_protocol/control_protocol/control_protocol.h @@ -171,12 +171,14 @@ extern "C" { class ControlProtocolDescriptor { public: - const char* name; /* descriptive */ - const char* id; /* unique and version-specific */ - void* module; /* not for public access */ - bool (*probe) (ControlProtocolDescriptor*); - ControlProtocol* (*initialize) (ControlProtocolDescriptor*, Session*); - void (*destroy) (ControlProtocolDescriptor*, ControlProtocol*); + const char* name; /* descriptive */ + const char* id; /* unique and version-specific */ + void* module; /* not for public access */ + bool (*available) (); /* called directly after loading module */ + bool (*probe_port) (); /* called when ports change (PortRegisteredOrUnregistered) */ + bool (*match_usb) (uint16_t, uint16_t); /* called when USB devices are hotplugged (libusb) */ + ControlProtocol* (*initialize) (Session*); + void (*destroy) (ControlProtocol*); }; } } diff --git a/libs/surfaces/cc121/cc121.h b/libs/surfaces/cc121/cc121.h index 50a783f6cd..6ef881700e 100644 --- a/libs/surfaces/cc121/cc121.h +++ b/libs/surfaces/cc121/cc121.h @@ -83,11 +83,6 @@ class CC121 : public ARDOUR::ControlProtocol, public AbstractUI { int set_active (bool yn); - /* we probe for a device when our ports are connected. Before that, - there's no way to know if the device exists or not. - */ - static bool probe() { return true; } - XMLNode& get_state () const; int set_state (const XMLNode&, int version); diff --git a/libs/surfaces/cc121/cc121_interface.cc b/libs/surfaces/cc121/cc121_interface.cc index 83b49d46c8..6f088ca9e6 100644 --- a/libs/surfaces/cc121/cc121_interface.cc +++ b/libs/surfaces/cc121/cc121_interface.cc @@ -26,7 +26,7 @@ using namespace ARDOUR; using namespace ArdourSurface; static ControlProtocol* -new_cc121_midi_protocol (ControlProtocolDescriptor* /*descriptor*/, Session* s) +new_cc121_midi_protocol (Session* s) { CC121* fp; @@ -45,24 +45,21 @@ new_cc121_midi_protocol (ControlProtocolDescriptor* /*descriptor*/, Session* s) } static void -delete_cc121_midi_protocol (ControlProtocolDescriptor* /*descriptor*/, ControlProtocol* cp) +delete_cc121_midi_protocol (ControlProtocol* cp) { delete cp; } -static bool -probe_cc121_midi_protocol (ControlProtocolDescriptor* /*descriptor*/) -{ - return CC121::probe (); -} static ControlProtocolDescriptor cc121_midi_descriptor = { - /*name : */ "Steinberg CC121", - /*id : */ "uri://ardour.org/surfaces/cc121:0", - /*module : */ 0, - /*probe : */ probe_cc121_midi_protocol, - /*initialize : */ new_cc121_midi_protocol, - /*destroy : */ delete_cc121_midi_protocol, + /* name */ "Steinberg CC121", + /* id */ "uri://ardour.org/surfaces/cc121:0", + /* module */ 0, + /* probe port */ 0, + /* match usb */ 0, + /* available */ 0, + /* initialize */ new_cc121_midi_protocol, + /* destroy */ delete_cc121_midi_protocol, }; extern "C" ARDOURSURFACE_API ControlProtocolDescriptor* protocol_descriptor () { return &cc121_midi_descriptor; } diff --git a/libs/surfaces/contourdesign/contourdesign.cc b/libs/surfaces/contourdesign/contourdesign.cc index 7809ada0cd..2604519a67 100644 --- a/libs/surfaces/contourdesign/contourdesign.cc +++ b/libs/surfaces/contourdesign/contourdesign.cc @@ -88,7 +88,7 @@ ContourDesignControlProtocol::~ContourDesignControlProtocol () } bool -ContourDesignControlProtocol::probe () +ContourDesignControlProtocol::available () { bool rv = LIBUSB_SUCCESS == libusb_init (0); if (rv) { diff --git a/libs/surfaces/contourdesign/contourdesign.h b/libs/surfaces/contourdesign/contourdesign.h index 784a0c440e..57770cf5ae 100644 --- a/libs/surfaces/contourdesign/contourdesign.h +++ b/libs/surfaces/contourdesign/contourdesign.h @@ -84,7 +84,7 @@ public: DeviceType device_type() const { return _device_type; } - static bool probe (); + static bool available (); int set_active (bool yn); diff --git a/libs/surfaces/contourdesign/interface.cc b/libs/surfaces/contourdesign/interface.cc index 196574f11c..4b15891437 100644 --- a/libs/surfaces/contourdesign/interface.cc +++ b/libs/surfaces/contourdesign/interface.cc @@ -30,7 +30,7 @@ using namespace PBD; using namespace ArdourSurface; static ControlProtocol* -new_contourdesign_protocol (ControlProtocolDescriptor*, Session* s) +new_contourdesign_protocol (Session* s) { ContourDesignControlProtocol* wmcp = new ContourDesignControlProtocol (*s); wmcp->set_active (true); @@ -38,24 +38,21 @@ new_contourdesign_protocol (ControlProtocolDescriptor*, Session* s) } static void -delete_contourdesign_protocol (ControlProtocolDescriptor* /*descriptor*/, ControlProtocol* cp) +delete_contourdesign_protocol (ControlProtocol* cp) { delete cp; } -static bool -probe_contourdesign_protocol (ControlProtocolDescriptor*) -{ - return ContourDesignControlProtocol::probe (); -} static ControlProtocolDescriptor contourdesign_descriptor = { - /* name : */ "ContourDesign", - /* id : */ "uri://ardour.org/surfaces/contourdesign:0", - /* module : */ 0, - /* probe : */ probe_contourdesign_protocol, - /* initialize : */ new_contourdesign_protocol, - /* destroy : */ delete_contourdesign_protocol, + /* name */ "ContourDesign", + /* id */ "uri://ardour.org/surfaces/contourdesign:0", + /* module */ 0, + /* available */ ContourDesignControlProtocol::available, + /* probe port */ 0, + /* match usb */ 0, + /* initialize */ new_contourdesign_protocol, + /* destroy */ delete_contourdesign_protocol, }; extern "C" ARDOURSURFACE_API ControlProtocolDescriptor* protocol_descriptor () { return &contourdesign_descriptor; } diff --git a/libs/surfaces/faderport/faderport.h b/libs/surfaces/faderport/faderport.h index 97b2ddddf7..0704a7be48 100644 --- a/libs/surfaces/faderport/faderport.h +++ b/libs/surfaces/faderport/faderport.h @@ -71,11 +71,6 @@ class FaderPort : public MIDISurface { int set_active (bool yn); - /* we probe for a device when our ports are connected. Before that, - there's no way to know if the device exists or not. - */ - static bool probe() { return true; } - std::string input_port_name () const; std::string output_port_name () const; diff --git a/libs/surfaces/faderport/faderport_interface.cc b/libs/surfaces/faderport/faderport_interface.cc index 3f66a9a9b5..db71a9cbde 100644 --- a/libs/surfaces/faderport/faderport_interface.cc +++ b/libs/surfaces/faderport/faderport_interface.cc @@ -26,7 +26,7 @@ using namespace ARDOUR; using namespace ArdourSurface; static ControlProtocol* -new_faderport_midi_protocol (ControlProtocolDescriptor* /*descriptor*/, Session* s) +new_faderport_midi_protocol (Session* s) { FaderPort* fp; @@ -45,24 +45,20 @@ new_faderport_midi_protocol (ControlProtocolDescriptor* /*descriptor*/, Session* } static void -delete_faderport_midi_protocol (ControlProtocolDescriptor* /*descriptor*/, ControlProtocol* cp) +delete_faderport_midi_protocol (ControlProtocol* cp) { delete cp; } -static bool -probe_faderport_midi_protocol (ControlProtocolDescriptor* /*descriptor*/) -{ - return FaderPort::probe (); -} - static ControlProtocolDescriptor faderport_midi_descriptor = { - /*name : */ "PreSonus FaderPort", - /*id : */ "uri://ardour.org/surfaces/faderport:0", - /*module : */ 0, - /*probe : */ probe_faderport_midi_protocol, - /*initialize : */ new_faderport_midi_protocol, - /*destroy : */ delete_faderport_midi_protocol, + /* name */ "PreSonus FaderPort", + /* id */ "uri://ardour.org/surfaces/faderport:0", + /* module */ 0, + /* available */ 0, + /* probe_port */ 0, + /* match usb */ 0, + /* initialize */ new_faderport_midi_protocol, + /* destroy */ delete_faderport_midi_protocol, }; extern "C" ARDOURSURFACE_API ControlProtocolDescriptor* protocol_descriptor () { return &faderport_midi_descriptor; } diff --git a/libs/surfaces/faderport8/faderport16_interface.cc b/libs/surfaces/faderport8/faderport16_interface.cc index c927c25f1a..cf2dd394dc 100644 --- a/libs/surfaces/faderport8/faderport16_interface.cc +++ b/libs/surfaces/faderport8/faderport16_interface.cc @@ -25,12 +25,12 @@ using namespace ARDOUR; using namespace ArdourSurface::FP_NAMESPACE; static ControlProtocol* -new_faderport16_midi_protocol (ControlProtocolDescriptor* /*descriptor*/, Session* s) +new_faderport16_midi_protocol (Session* s) { FaderPort8* fp; try { - fp = new FaderPort8 (*s); + fp = new FaderPort8 (*s); } catch (failed_constructor& err) { return 0; } @@ -44,24 +44,20 @@ new_faderport16_midi_protocol (ControlProtocolDescriptor* /*descriptor*/, Sessio } static void -delete_faderport16_midi_protocol (ControlProtocolDescriptor* /*descriptor*/, ControlProtocol* cp) +delete_faderport16_midi_protocol (ControlProtocol* cp) { delete cp; } -static bool -probe_faderport16_midi_protocol (ControlProtocolDescriptor* /*descriptor*/) -{ - return FaderPort8::probe (); -} - static ControlProtocolDescriptor faderport16_midi_descriptor = { - /*name : */ "PreSonus FaderPort16", - /*id : */ "uri://ardour.org/surfaces/faderport16:0", - /*module : */ 0, - /*probe : */ probe_faderport16_midi_protocol, - /*initialize : */ new_faderport16_midi_protocol, - /*destroy : */ delete_faderport16_midi_protocol, + /* name */ "PreSonus FaderPort16", + /* id */ "uri://ardour.org/surfaces/faderport16:0", + /* module */ 0, + /* available: */ 0, + /* probe_port */ 0, + /* match usb */ 0, + /* initialize */ new_faderport16_midi_protocol, + /* destroy */ delete_faderport16_midi_protocol, }; extern "C" ARDOURSURFACE_API diff --git a/libs/surfaces/faderport8/faderport2_interface.cc b/libs/surfaces/faderport8/faderport2_interface.cc index 245d23c2b8..1b5fa4e907 100644 --- a/libs/surfaces/faderport8/faderport2_interface.cc +++ b/libs/surfaces/faderport8/faderport2_interface.cc @@ -25,12 +25,12 @@ using namespace ARDOUR; using namespace ArdourSurface::FP_NAMESPACE; static ControlProtocol* -new_faderport2_midi_protocol (ControlProtocolDescriptor* /*descriptor*/, Session* s) +new_faderport2_midi_protocol (Session* s) { FaderPort8* fp; try { - fp = new FaderPort8 (*s); + fp = new FaderPort8 (*s); } catch (failed_constructor& err) { return 0; } @@ -44,27 +44,24 @@ new_faderport2_midi_protocol (ControlProtocolDescriptor* /*descriptor*/, Session } static void -delete_faderport2_midi_protocol (ControlProtocolDescriptor* /*descriptor*/, ControlProtocol* cp) +delete_faderport2_midi_protocol (ControlProtocol* cp) { delete cp; } -static bool -probe_faderport2_midi_protocol (ControlProtocolDescriptor* /*descriptor*/) -{ - return FaderPort8::probe (); -} - static ControlProtocolDescriptor faderport2_midi_descriptor = { - /*name : */ "PreSonus FaderPort2", - /*id : */ "uri://ardour.org/surfaces/faderport2:0", - /*module : */ 0, - /*probe : */ probe_faderport2_midi_protocol, - /*initialize : */ new_faderport2_midi_protocol, - /*destroy : */ delete_faderport2_midi_protocol, + /* name */ "PreSonus FaderPort2", + /* id */ "uri://ardour.org/surfaces/faderport2:0", + /* module */ 0, + /* available */ 0, + /* probe_port */ 0, + /* match usb */ 0, + /* initialize */ new_faderport2_midi_protocol, + /* destroy */ delete_faderport2_midi_protocol, }; extern "C" ARDOURSURFACE_API -ControlProtocolDescriptor* protocol_descriptor () { +ControlProtocolDescriptor* protocol_descriptor () +{ return &faderport2_midi_descriptor; } diff --git a/libs/surfaces/faderport8/faderport8.h b/libs/surfaces/faderport8/faderport8.h index b19c4c41bd..e40187d664 100644 --- a/libs/surfaces/faderport8/faderport8.h +++ b/libs/surfaces/faderport8/faderport8.h @@ -69,11 +69,6 @@ public: int set_active (bool yn); - /* we probe for a device when our ports are connected. Before that, - * there's no way to know if the device exists or not. - */ - static bool probe() { return true; } - XMLNode& get_state () const; int set_state (const XMLNode&, int version); diff --git a/libs/surfaces/faderport8/faderport8_interface.cc b/libs/surfaces/faderport8/faderport8_interface.cc index 349e8885b6..02f7b56322 100644 --- a/libs/surfaces/faderport8/faderport8_interface.cc +++ b/libs/surfaces/faderport8/faderport8_interface.cc @@ -25,12 +25,12 @@ using namespace ARDOUR; using namespace ArdourSurface::FP_NAMESPACE; static ControlProtocol* -new_faderport8_midi_protocol (ControlProtocolDescriptor* /*descriptor*/, Session* s) +new_faderport8_midi_protocol (Session* s) { FaderPort8* fp; try { - fp = new FaderPort8 (*s); + fp = new FaderPort8 (*s); } catch (failed_constructor& err) { return 0; } @@ -44,24 +44,20 @@ new_faderport8_midi_protocol (ControlProtocolDescriptor* /*descriptor*/, Session } static void -delete_faderport8_midi_protocol (ControlProtocolDescriptor* /*descriptor*/, ControlProtocol* cp) +delete_faderport8_midi_protocol (ControlProtocol* cp) { delete cp; } -static bool -probe_faderport8_midi_protocol (ControlProtocolDescriptor* /*descriptor*/) -{ - return FaderPort8::probe (); -} - static ControlProtocolDescriptor faderport8_midi_descriptor = { - /*name : */ "PreSonus FaderPort8", - /*id : */ "uri://ardour.org/surfaces/faderport8:0", - /*module : */ 0, - /*probe : */ probe_faderport8_midi_protocol, - /*initialize : */ new_faderport8_midi_protocol, - /*destroy : */ delete_faderport8_midi_protocol, + /* name */ "PreSonus FaderPort8", + /* id */ "uri://ardour.org/surfaces/faderport8:0", + /* module */ 0, + /* available */ 0, + /* probe_port */ 0, + /* match usb */ 0, + /* initialize */ new_faderport8_midi_protocol, + /* destroy */ delete_faderport8_midi_protocol, }; extern "C" ARDOURSURFACE_API diff --git a/libs/surfaces/generic_midi/generic_midi_control_protocol.h b/libs/surfaces/generic_midi/generic_midi_control_protocol.h index e403be784a..0e00925a2f 100644 --- a/libs/surfaces/generic_midi/generic_midi_control_protocol.h +++ b/libs/surfaces/generic_midi/generic_midi_control_protocol.h @@ -69,7 +69,6 @@ public: void thread_init (); int set_active (bool yn); - static bool probe() { return true; } void stripable_selection_changed () {} diff --git a/libs/surfaces/generic_midi/interface.cc b/libs/surfaces/generic_midi/interface.cc index 9c15e4bce0..298fe2492d 100644 --- a/libs/surfaces/generic_midi/interface.cc +++ b/libs/surfaces/generic_midi/interface.cc @@ -25,7 +25,7 @@ using namespace ARDOUR; static ControlProtocol* -new_generic_midi_protocol (ControlProtocolDescriptor* /*descriptor*/, Session* s) +new_generic_midi_protocol (Session* s) { GenericMidiControlProtocol* gmcp; @@ -44,25 +44,21 @@ new_generic_midi_protocol (ControlProtocolDescriptor* /*descriptor*/, Session* s } static void -delete_generic_midi_protocol (ControlProtocolDescriptor* /*descriptor*/, ControlProtocol* cp) +delete_generic_midi_protocol (ControlProtocol* cp) { delete cp; } -static bool -probe_generic_midi_protocol (ControlProtocolDescriptor* /*descriptor*/) -{ - return GenericMidiControlProtocol::probe (); -} - // Field names commented out by JE - 06-01-2010 static ControlProtocolDescriptor generic_midi_descriptor = { - /*name : */ "Generic MIDI", - /*id : */ "uri://ardour.org/surfaces/generic_midi:0", - /*module : */ 0, - /*probe : */ probe_generic_midi_protocol, - /*initialize : */ new_generic_midi_protocol, - /*destroy : */ delete_generic_midi_protocol, + /* name */ "Generic MIDI", + /* id */ "uri://ardour.org/surfaces/generic_midi:0", + /* module */ 0, + /* available */ 0, + /* probe_port */ 0, + /* match usb */ 0, + /* initialize */ new_generic_midi_protocol, + /* destroy */ delete_generic_midi_protocol, }; extern "C" ARDOURSURFACE_API ControlProtocolDescriptor* protocol_descriptor () { return &generic_midi_descriptor; } diff --git a/libs/surfaces/launch_control_xl/interface.cc b/libs/surfaces/launch_control_xl/interface.cc index 3ccfe665cd..ece3ab7b73 100644 --- a/libs/surfaces/launch_control_xl/interface.cc +++ b/libs/surfaces/launch_control_xl/interface.cc @@ -32,7 +32,7 @@ using namespace std; using namespace ArdourSurface; static ControlProtocol* -new_launch_control_xl (ControlProtocolDescriptor*, Session* s) +new_launch_control_xl (Session* s) { LaunchControlXL * lcxl = 0; @@ -50,7 +50,7 @@ new_launch_control_xl (ControlProtocolDescriptor*, Session* s) } static void -delete_launch_control_xl (ControlProtocolDescriptor*, ControlProtocol* cp) +delete_launch_control_xl (ControlProtocol* cp) { try { @@ -62,25 +62,15 @@ delete_launch_control_xl (ControlProtocolDescriptor*, ControlProtocol* cp) } } -/** - This is called on startup to check whether the lib should be loaded. - - So anything that can be changed in the UI should not be used here to - prevent loading of the lib. -*/ -static bool -probe_launch_control_xl (ControlProtocolDescriptor*) -{ - return LaunchControlXL::probe(); -} - static ControlProtocolDescriptor launch_control_xl_descriptor = { - /*name : */ "Novation Launch Control XL", - /*id : */ "uri://ardour.org/surfaces/launch_control_xl:0", - /*module : */ 0, - /*probe : */ probe_launch_control_xl, - /*initialize : */ new_launch_control_xl, - /*destroy : */ delete_launch_control_xl, + /* name */ "Novation Launch Control XL", + /* id */ "uri://ardour.org/surfaces/launch_control_xl:0", + /* module */ 0, + /* available */ 0, + /* probe_port */ 0, + /* match usb */ 0, + /* initialize */ new_launch_control_xl, + /* destroy */ delete_launch_control_xl, }; extern "C" ARDOURSURFACE_API ControlProtocolDescriptor* protocol_descriptor () { return &launch_control_xl_descriptor; } diff --git a/libs/surfaces/launch_control_xl/launch_control_xl.cc b/libs/surfaces/launch_control_xl/launch_control_xl.cc index ad3757367e..3938cafd82 100644 --- a/libs/surfaces/launch_control_xl/launch_control_xl.cc +++ b/libs/surfaces/launch_control_xl/launch_control_xl.cc @@ -421,12 +421,6 @@ LaunchControlXL::init_knobs () } } -bool -LaunchControlXL::probe () -{ - return true; -} - void LaunchControlXL::do_request (LaunchControlRequest * req) { diff --git a/libs/surfaces/launch_control_xl/launch_control_xl.h b/libs/surfaces/launch_control_xl/launch_control_xl.h index 2c400347d4..bae57f3242 100644 --- a/libs/surfaces/launch_control_xl/launch_control_xl.h +++ b/libs/surfaces/launch_control_xl/launch_control_xl.h @@ -356,9 +356,6 @@ public: LaunchControlXL(ARDOUR::Session &); ~LaunchControlXL(); - - static bool probe(); - std::list > bundles(); bool has_editor() const { return true; } diff --git a/libs/surfaces/mackie/interface.cc b/libs/surfaces/mackie/interface.cc index 9e347de334..c15ce34ba1 100644 --- a/libs/surfaces/mackie/interface.cc +++ b/libs/surfaces/mackie/interface.cc @@ -35,7 +35,7 @@ using namespace ArdourSurface; using namespace Mackie; static ControlProtocol* -new_mackie_protocol (ControlProtocolDescriptor*, Session* s) +new_mackie_protocol (Session* s) { MackieControlProtocol* mcp = 0; @@ -53,7 +53,7 @@ new_mackie_protocol (ControlProtocolDescriptor*, Session* s) } static void -delete_mackie_protocol (ControlProtocolDescriptor*, ControlProtocol* cp) +delete_mackie_protocol (ControlProtocol* cp) { try { @@ -65,26 +65,16 @@ delete_mackie_protocol (ControlProtocolDescriptor*, ControlProtocol* cp) } } -/** - This is called on startup to check whether the lib should be loaded. - - So anything that can be changed in the UI should not be used here to - prevent loading of the lib. -*/ -static bool -probe_mackie_protocol (ControlProtocolDescriptor*) -{ - return MackieControlProtocol::probe(); -} - // Field names commented out by JE - 06-01-2010 static ControlProtocolDescriptor mackie_descriptor = { - /*name : */ "Mackie", - /*id : */ "uri://ardour.org/surfaces/mackie:0", - /*module : */ 0, - /*probe : */ probe_mackie_protocol, - /*initialize : */ new_mackie_protocol, - /*destroy : */ delete_mackie_protocol, + /* name */ "Mackie", + /* id */ "uri://ardour.org/surfaces/mackie:0", + /* module */ 0, + /* available */ 0, + /* probe_port */ 0, + /* match usb */ 0, + /* initialize */ new_mackie_protocol, + /* destroy */ delete_mackie_protocol, }; extern "C" ARDOURSURFACE_API ControlProtocolDescriptor* protocol_descriptor () { return &mackie_descriptor; } diff --git a/libs/surfaces/mackie/mackie_control_protocol.cc b/libs/surfaces/mackie/mackie_control_protocol.cc index 8ef8e19f8e..f5ea742598 100644 --- a/libs/surfaces/mackie/mackie_control_protocol.cc +++ b/libs/surfaces/mackie/mackie_control_protocol.cc @@ -115,11 +115,6 @@ const int MackieControlProtocol::MAIN_MODIFIER_MASK = (MackieControlProtocol::MO MackieControlProtocol* MackieControlProtocol::_instance = 0; -bool MackieControlProtocol::probe() -{ - return true; -} - MackieControlProtocol::MackieControlProtocol (Session& session) : ControlProtocol (session, X_("Mackie")) , AbstractUI (name()) diff --git a/libs/surfaces/mackie/mackie_control_protocol.h b/libs/surfaces/mackie/mackie_control_protocol.h index a886ffccd1..33cb121ddc 100644 --- a/libs/surfaces/mackie/mackie_control_protocol.h +++ b/libs/surfaces/mackie/mackie_control_protocol.h @@ -160,8 +160,6 @@ class MackieControlProtocol support for the protocol is not optional. */ - static bool probe(); - mutable Glib::Threads::Mutex surfaces_lock; typedef std::list > Surfaces; Surfaces surfaces; diff --git a/libs/surfaces/maschine2/interface.cc b/libs/surfaces/maschine2/interface.cc index c414996977..966813bba8 100644 --- a/libs/surfaces/maschine2/interface.cc +++ b/libs/surfaces/maschine2/interface.cc @@ -28,7 +28,7 @@ using namespace PBD; using namespace ArdourSurface; static ControlProtocol* -new_maschine2 (ControlProtocolDescriptor*, Session* s) +new_maschine2 (Session* s) { Maschine2* m2 = 0; @@ -46,24 +46,20 @@ new_maschine2 (ControlProtocolDescriptor*, Session* s) } static void -delete_maschine2 (ControlProtocolDescriptor*, ControlProtocol* cp) +delete_maschine2 (ControlProtocol* cp) { delete cp; } -static bool -probe_maschine2 (ControlProtocolDescriptor*) -{ - return true; -} - static ControlProtocolDescriptor maschine2_descriptor = { - /*name : */ "NI Maschine2", - /*id : */ "uri://ardour.org/surfaces/maschine2:0", - /*module : */ 0, - /*probe : */ probe_maschine2, - /*initialize : */ new_maschine2, - /*destroy : */ delete_maschine2, + /* name */ "NI Maschine2", + /* id */ "uri://ardour.org/surfaces/maschine2:0", + /* module */ 0, + /* available */ Maschine2::available, + /* probe_port */ 0, + /* match usb */ 0, + /* initialize */ new_maschine2, + /* destroy */ delete_maschine2, }; extern "C" ARDOURSURFACE_API ControlProtocolDescriptor* protocol_descriptor () { return &maschine2_descriptor; } diff --git a/libs/surfaces/maschine2/maschine2.cc b/libs/surfaces/maschine2/maschine2.cc index b1b5771048..e2bc32fbbe 100644 --- a/libs/surfaces/maschine2/maschine2.cc +++ b/libs/surfaces/maschine2/maschine2.cc @@ -103,6 +103,16 @@ class TestLayout : public Maschine2Layout static TestLayout* tl = NULL; #endif +bool +Maschine2::available () +{ + if (hid_init()) { + return false; + } + hid_exit (); + return true; +} + Maschine2::Maschine2 (ARDOUR::Session& s) : ControlProtocol (s, string (X_("NI Maschine2"))) , AbstractUI (name()) diff --git a/libs/surfaces/maschine2/maschine2.h b/libs/surfaces/maschine2/maschine2.h index 43222a6f90..f45ec006d5 100644 --- a/libs/surfaces/maschine2/maschine2.h +++ b/libs/surfaces/maschine2/maschine2.h @@ -64,6 +64,7 @@ class Maschine2: public ARDOUR::ControlProtocol, public AbstractUIget_osc_port()); @@ -35,24 +35,20 @@ new_osc_protocol (ControlProtocolDescriptor* /*descriptor*/, Session* s) } static void -delete_osc_protocol (ControlProtocolDescriptor* /*descriptor*/, ControlProtocol* cp) +delete_osc_protocol (ControlProtocol* cp) { delete cp; } -static bool -probe_osc_protocol (ControlProtocolDescriptor* /*descriptor*/) -{ - return true; // we can always do OSC -} - static ControlProtocolDescriptor osc_descriptor = { - /*name : */ "Open Sound Control (OSC)", - /*id : */ "uri://ardour.org/surfaces/osc:0", - /*module : */ 0, - /*probe : */ probe_osc_protocol, - /*initialize : */ new_osc_protocol, - /*destroy : */ delete_osc_protocol, + /* name */ "Open Sound Control (OSC)", + /* id */ "uri://ardour.org/surfaces/osc:0", + /* module */ 0, + /* available */ 0, + /* probe_port */ 0, + /* match usb */ 0, + /* initialize */ new_osc_protocol, + /* destroy */ delete_osc_protocol, }; extern "C" ARDOURSURFACE_API ControlProtocolDescriptor* protocol_descriptor () { return &osc_descriptor; } diff --git a/libs/surfaces/push2/interface.cc b/libs/surfaces/push2/interface.cc index b48f7736a3..eb69807edf 100644 --- a/libs/surfaces/push2/interface.cc +++ b/libs/surfaces/push2/interface.cc @@ -30,7 +30,7 @@ using namespace PBD; using namespace ArdourSurface; static ControlProtocol* -new_push2 (ControlProtocolDescriptor*, Session* s) +new_push2 (Session* s) { Push2 * p2 = 0; @@ -48,7 +48,7 @@ new_push2 (ControlProtocolDescriptor*, Session* s) } static void -delete_push2 (ControlProtocolDescriptor*, ControlProtocol* cp) +delete_push2 (ControlProtocol* cp) { try { @@ -60,25 +60,15 @@ delete_push2 (ControlProtocolDescriptor*, ControlProtocol* cp) } } -/** - This is called on startup to check whether the lib should be loaded. - - So anything that can be changed in the UI should not be used here to - prevent loading of the lib. -*/ -static bool -probe_push2 (ControlProtocolDescriptor*) -{ - return Push2::probe(); -} - static ControlProtocolDescriptor push2_descriptor = { - /*name : */ "Ableton Push 2", - /*id : */ "uri://ardour.org/surfaces/push2:0", - /*module : */ 0, - /*probe : */ probe_push2, - /*initialize : */ new_push2, - /*destroy : */ delete_push2, + /* name */ "Ableton Push 2", + /* id */ "uri://ardour.org/surfaces/push2:0", + /* module */ 0, + /* available */ Push2::available, + /* probe_port */ 0, + /* match usb */ 0, + /* initialize */ new_push2, + /* destroy */ delete_push2, }; extern "C" ARDOURSURFACE_API ControlProtocolDescriptor* protocol_descriptor () { return &push2_descriptor; } diff --git a/libs/surfaces/push2/push2.cc b/libs/surfaces/push2/push2.cc index b293d0eedd..2a7fc98abd 100644 --- a/libs/surfaces/push2/push2.cc +++ b/libs/surfaces/push2/push2.cc @@ -96,6 +96,16 @@ row_interval_semitones (const Push2::RowInterval row_interval, const bool inkey) return 5; } +bool +Push2::available () +{ + bool rv = LIBUSB_SUCCESS == libusb_init (0); + if (rv) { + libusb_exit (0); + } + return rv; +} + Push2::Push2 (ARDOUR::Session& s) : MIDISurface (s, X_("Ableton Push 2"), X_("Push 2"), true) , _handle (0) @@ -342,12 +352,6 @@ Push2::init_buttons (bool startup) } } -bool -Push2::probe () -{ - return true; -} - void Push2::splash () { diff --git a/libs/surfaces/push2/push2.h b/libs/surfaces/push2/push2.h index 686857070d..864753f18b 100644 --- a/libs/surfaces/push2/push2.h +++ b/libs/surfaces/push2/push2.h @@ -296,7 +296,7 @@ class Push2 : public MIDISurface Push2 (ARDOUR::Session&); ~Push2 (); - static bool probe (); + static bool available (); std::string input_port_name () const; std::string output_port_name () const; diff --git a/libs/surfaces/tranzport/interface.cc b/libs/surfaces/tranzport/interface.cc index ba7b710c47..c2132980bd 100644 --- a/libs/surfaces/tranzport/interface.cc +++ b/libs/surfaces/tranzport/interface.cc @@ -24,7 +24,7 @@ using namespace ARDOUR; static ControlProtocol* -new_tranzport_protocol (ControlProtocolDescriptor* descriptor, Session* s) +new_tranzport_protocol (Session* s) { TranzportControlProtocol* tcp = new TranzportControlProtocol (*s); @@ -38,24 +38,20 @@ new_tranzport_protocol (ControlProtocolDescriptor* descriptor, Session* s) } static void -delete_tranzport_protocol (ControlProtocolDescriptor* descriptor, ControlProtocol* cp) +delete_tranzport_protocol (ControlProtocol* cp) { delete cp; } -static bool -probe_tranzport_protocol (ControlProtocolDescriptor* descriptor) -{ - return TranzportControlProtocol::probe(); -} - static ControlProtocolDescriptor tranzport_descriptor = { - name : "Tranzport", - id : "uri://ardour.org/surfaces/tranzport:0", - module : 0, - probe : probe_tranzport_protocol, - initialize : new_tranzport_protocol, - destroy : delete_tranzport_protocol + /* name */ "Tranzport", + /* id */ "uri://ardour.org/surfaces/tranzport:0", + /* module */ 0, + /* available */ TranzportControlProtocol::available, + /* probe_port */ 0, + /* match usb */ 0, + /* initialize */ new_tranzport_protocol, + /* destroy */ delete_tranzport_protocol, }; diff --git a/libs/surfaces/tranzport/io_usb.cc b/libs/surfaces/tranzport/io_usb.cc index c9c595ee0d..467814d31a 100644 --- a/libs/surfaces/tranzport/io_usb.cc +++ b/libs/surfaces/tranzport/io_usb.cc @@ -44,7 +44,7 @@ using namespace PBD; // pure boilerplate and could easily be abstracted elsewhere bool -TranzportControlProtocol::probe () +TranzportControlProtocol::available () { struct usb_bus *bus; struct usb_device *dev; diff --git a/libs/surfaces/tranzport/tranzport_control_protocol.h b/libs/surfaces/tranzport/tranzport_control_protocol.h index 0bcf317527..2353071aa9 100644 --- a/libs/surfaces/tranzport/tranzport_control_protocol.h +++ b/libs/surfaces/tranzport/tranzport_control_protocol.h @@ -46,7 +46,7 @@ public: int set_active (bool yn); - static bool probe (); + static bool available (); XMLNode& get_state () const; int set_state (const XMLNode&); diff --git a/libs/surfaces/us2400/interface.cc b/libs/surfaces/us2400/interface.cc index bfa8ed227d..8784fc66b3 100644 --- a/libs/surfaces/us2400/interface.cc +++ b/libs/surfaces/us2400/interface.cc @@ -32,7 +32,7 @@ using namespace ArdourSurface; using namespace US2400; static ControlProtocol* -new_us2400_protocol (ControlProtocolDescriptor*, Session* s) +new_us2400_protocol (Session* s) { US2400Protocol* mcp = 0; @@ -50,7 +50,7 @@ new_us2400_protocol (ControlProtocolDescriptor*, Session* s) } static void -delete_us2400_protocol (ControlProtocolDescriptor*, ControlProtocol* cp) +delete_us2400_protocol (ControlProtocol* cp) { try { @@ -62,26 +62,15 @@ delete_us2400_protocol (ControlProtocolDescriptor*, ControlProtocol* cp) } } -/** - This is called on startup to check whether the lib should be loaded. - - So anything that can be changed in the UI should not be used here to - prevent loading of the lib. -*/ -static bool -probe_us2400_protocol (ControlProtocolDescriptor*) -{ - return US2400Protocol::probe(); -} - -// Field names commented out by JE - 06-01-2010 static ControlProtocolDescriptor us2400_descriptor = { - /*name : */ "Tascam US-2400", - /*id : */ "uri://ardour.org/surfaces/us2400:0", - /*module : */ 0, - /*probe : */ probe_us2400_protocol, - /*initialize : */ new_us2400_protocol, - /*destroy : */ delete_us2400_protocol, + /* name */ "Tascam US-2400", + /* id */ "uri://ardour.org/surfaces/us2400:0", + /* module */ 0, + /* avilable */ 0, + /* probe_port */ 0, + /* match usb */ 0, + /* initialize */ new_us2400_protocol, + /* destroy */ delete_us2400_protocol, }; extern "C" ARDOURSURFACE_API ControlProtocolDescriptor* protocol_descriptor () { return &us2400_descriptor; } diff --git a/libs/surfaces/us2400/us2400_control_protocol.cc b/libs/surfaces/us2400/us2400_control_protocol.cc index 25ffc80d79..57f52a3cd5 100644 --- a/libs/surfaces/us2400/us2400_control_protocol.cc +++ b/libs/surfaces/us2400/us2400_control_protocol.cc @@ -100,11 +100,6 @@ const int US2400Protocol::MAIN_MODIFIER_MASK = (US2400Protocol::MODIFIER_OPTION| US2400Protocol* US2400Protocol::_instance = 0; -bool US2400Protocol::probe() -{ - return true; -} - US2400Protocol::US2400Protocol (Session& session) : ControlProtocol (session, X_("Tascam US-2400")) , AbstractUI (name()) diff --git a/libs/surfaces/us2400/us2400_control_protocol.h b/libs/surfaces/us2400/us2400_control_protocol.h index 4af1dc918b..4c576c4469 100644 --- a/libs/surfaces/us2400/us2400_control_protocol.h +++ b/libs/surfaces/us2400/us2400_control_protocol.h @@ -138,8 +138,6 @@ class US2400Protocol support for the protocol is not optional. */ - static bool probe(); - mutable Glib::Threads::Mutex surfaces_lock; typedef std::list > Surfaces; Surfaces surfaces; diff --git a/libs/surfaces/websockets/interface.cc b/libs/surfaces/websockets/interface.cc index 804cff42cd..a754d55d13 100644 --- a/libs/surfaces/websockets/interface.cc +++ b/libs/surfaces/websockets/interface.cc @@ -26,8 +26,7 @@ using namespace ARDOUR; using namespace ArdourSurface; static ControlProtocol* -new_ardour_websockets_protocol (ControlProtocolDescriptor* /*descriptor*/, - Session* s) +new_ardour_websockets_protocol (Session* s) { ArdourWebsockets* surface = new ArdourWebsockets (*s); @@ -37,25 +36,20 @@ new_ardour_websockets_protocol (ControlProtocolDescriptor* /*descriptor*/, } static void -delete_ardour_websockets_protocol (ControlProtocolDescriptor* /*descriptor*/, - ControlProtocol* cp) +delete_ardour_websockets_protocol (ControlProtocol* cp) { delete cp; } -static bool -probe_ardour_websockets_protocol (ControlProtocolDescriptor* /*descriptor*/) -{ - return true; -} - static ControlProtocolDescriptor ardour_websockets_descriptor = { - /*name : */ surface_name, - /*id : */ surface_id, - /*module : */ 0, - /*probe : */ probe_ardour_websockets_protocol, - /*initialize : */ new_ardour_websockets_protocol, - /*destroy : */ delete_ardour_websockets_protocol, + /* name */ surface_name, + /* id */ surface_id, + /* module */ 0, + /* available */ 0, + /* probe_port */ 0, + /* match usb */ 0, + /* initialize */ new_ardour_websockets_protocol, + /* destroy */ delete_ardour_websockets_protocol, }; extern "C" ARDOURSURFACE_API ControlProtocolDescriptor* diff --git a/libs/surfaces/wiimote/interface.cc b/libs/surfaces/wiimote/interface.cc index efb236b4e9..3115747833 100644 --- a/libs/surfaces/wiimote/interface.cc +++ b/libs/surfaces/wiimote/interface.cc @@ -28,7 +28,7 @@ using namespace ARDOUR; using namespace PBD; static ControlProtocol* -new_wiimote_protocol (ControlProtocolDescriptor*, Session* s) +new_wiimote_protocol (Session* s) { WiimoteControlProtocol* wmcp = new WiimoteControlProtocol (*s); wmcp->set_active (true); @@ -36,24 +36,20 @@ new_wiimote_protocol (ControlProtocolDescriptor*, Session* s) } static void -delete_wiimote_protocol (ControlProtocolDescriptor* /*descriptor*/, ControlProtocol* cp) +delete_wiimote_protocol (ControlProtocol* cp) { delete cp; } -static bool -probe_wiimote_protocol (ControlProtocolDescriptor*) -{ - return WiimoteControlProtocol::probe (); -} - static ControlProtocolDescriptor wiimote_descriptor = { - name : "Wiimote", - id : "uri://ardour.org/surfaces/wiimote:0", - module : 0, - probe : probe_wiimote_protocol, - initialize : new_wiimote_protocol, - destroy : delete_wiimote_protocol, + /* name */ "Wiimote", + /* id */ "uri://ardour.org/surfaces/wiimote:0", + /* module */ 0, + /* available */ 0, + /* probe_port */ 0, + /* match usb */ 0, + /* initialize */ new_wiimote_protocol, + /* destroy */ delete_wiimote_protocol, }; extern "C" ARDOURSURFACE_API ControlProtocolDescriptor* protocol_descriptor () { return &wiimote_descriptor; } diff --git a/libs/surfaces/wiimote/wiimote.cc b/libs/surfaces/wiimote/wiimote.cc index 0d7f5f8377..b92d0901fc 100644 --- a/libs/surfaces/wiimote/wiimote.cc +++ b/libs/surfaces/wiimote/wiimote.cc @@ -50,12 +50,6 @@ WiimoteControlProtocol::~WiimoteControlProtocol () stop (); } -bool -WiimoteControlProtocol::probe () -{ - return true; -} - int WiimoteControlProtocol::set_active (bool yn) { diff --git a/libs/surfaces/wiimote/wiimote.h b/libs/surfaces/wiimote/wiimote.h index 7e04d8e1f1..90d47d0dad 100644 --- a/libs/surfaces/wiimote/wiimote.h +++ b/libs/surfaces/wiimote/wiimote.h @@ -40,8 +40,6 @@ public: WiimoteControlProtocol (ARDOUR::Session &); virtual ~WiimoteControlProtocol (); - static bool probe (); - int set_active (bool yn); XMLNode& get_state () const;