Ardour  9.0-pre0-582-g084a23a80d
control_protocol_manager.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2006-2017 Paul Davis <paul@linuxaudiosystems.com>
3  * Copyright (C) 2007 Tim Mayberry <mojofunk@gmail.com>
4  * Copyright (C) 2009-2012 David Robillard <d@drobilla.net>
5  * Copyright (C) 2009 Carl Hetherington <carl@carlh.net>
6  * Copyright (C) 2015-2016 Robin Gareus <robin@gareus.org>
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License along
19  * with this program; if not, write to the Free Software Foundation, Inc.,
20  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21  */
22 
23 #ifndef ardour_control_protocol_manager_h
24 #define ardour_control_protocol_manager_h
25 
26 #include <string>
27 #include <list>
28 
29 
30 #include <glibmm/threads.h>
31 
32 #include "pbd/stateful.h"
33 
34 #include "control_protocol/types.h"
35 
36 #include "ardour/session_handle.h"
37 
38 namespace ARDOUR {
39 
40 class ControlProtocol;
41 class ControlProtocolDescriptor;
42 class Session;
43 
45  public:
48  std::string name;
49  std::string path;
50  bool requested;
51  bool automatic;
53 
55  : descriptor (0)
56  , protocol (0)
57  , requested (false)
58  , automatic (false)
59  , state (0)
60  {}
62 
63 };
64 
66 {
67  public:
69 
71 
74  void foreach_known_protocol (std::function<void(const ControlProtocolInfo*)>);
76  void drop_protocols ();
78  void probe_usb_control_protocols (bool, uint16_t, uint16_t);
79 
82 
83  std::list<ControlProtocolInfo*> control_protocol_info;
84 
85  static const std::string state_node_name;
86 
87  int set_state (const XMLNode&, int version);
88  XMLNode& get_state () const;
89 
91 
94 
95  private:
98 
99  mutable Glib::Threads::RWLock protocols_lock;
100  std::list<ControlProtocol*> control_protocols;
101 
103 
104  int control_protocol_discover (std::string path);
108  int teardown (ControlProtocolInfo&, bool lock_required);
109 };
110 
111 } // namespace
112 
113 #endif // ardour_control_protocol_manager_h
ControlProtocolDescriptor * descriptor
int teardown(ControlProtocolInfo &, bool lock_required)
int deactivate(ControlProtocolInfo &)
void stripable_selection_changed(ARDOUR::StripableNotificationListPtr)
ControlProtocolInfo * cpi_by_name(std::string)
PBD::Signal< void(ControlProtocolInfo *)> ProtocolStatusChange
ControlProtocolDescriptor * get_descriptor(std::string path)
static const std::string state_node_name
int control_protocol_discover(std::string path)
int set_state(const XMLNode &, int version)
static ControlProtocolManager * _instance
int activate(ControlProtocolInfo &)
void probe_usb_control_protocols(bool, uint16_t, uint16_t)
std::list< ControlProtocol * > control_protocols
static ControlProtocolManager & instance()
std::list< ControlProtocolInfo * > control_protocol_info
ControlProtocol * instantiate(ControlProtocolInfo &)
void foreach_known_protocol(std::function< void(const ControlProtocolInfo *)>)
static PBD::Signal< void(ARDOUR::StripableNotificationListPtr)> StripableSelectionChanged
Definition: xml++.h:114
#define LIBARDOUR_API
PBD::PropertyDescriptor< bool > automatic
std::shared_ptr< StripableNotificationList > StripableNotificationListPtr