Ardour  9.2-266-g5d535d4cb7
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 #pragma once
24 
25 #include <list>
26 #include <string>
27 
28 #include "pbd/rwlock.h"
29 #include "pbd/stateful.h"
30 
31 #include "control_protocol/types.h"
32 
33 #include "ardour/session_handle.h"
34 
35 namespace ARDOUR
36 {
37 
38 class ControlProtocol;
39 class ControlProtocolDescriptor;
40 class Session;
41 
43 {
44 public:
47  std::string name;
48  std::string path;
49  bool requested;
50  bool automatic;
52 
54  : descriptor (0)
55  , protocol (0)
56  , requested (false)
57  , automatic (false)
58  , state (0)
59  {
60  }
62 
63  bool active () const;
64 };
65 
67 {
68 public:
70 
72 
75  void foreach_known_protocol (std::function<void (const ControlProtocolInfo*)>);
77  void drop_protocols ();
79  void probe_usb_control_protocols (bool, uint16_t, uint16_t);
80 
81  const std::list<ControlProtocolInfo*>& control_protocol_infos () const
82  {
83  return _control_protocol_info;
84  }
85 
88 
89  static const std::string state_node_name;
90 
91  int set_state (const XMLNode&, int version);
92  XMLNode& get_state () const;
93 
95 
98 
99 private:
102 
104  std::list<ControlProtocol*> _control_protocols;
105  std::list<ControlProtocolInfo*> _control_protocol_info;
106 
108 
109  int control_protocol_discover (std::string path);
113  int teardown (ControlProtocolInfo&, bool lock_required);
114 };
115 
116 } // namespace ARDOUR
ControlProtocolDescriptor * descriptor
int teardown(ControlProtocolInfo &, bool lock_required)
int deactivate(ControlProtocolInfo &)
void stripable_selection_changed(ARDOUR::StripableNotificationListPtr)
const std::list< ControlProtocolInfo * > & control_protocol_infos() const
ControlProtocolInfo * cpi_by_name(std::string)
ControlProtocolDescriptor * get_descriptor(std::string path)
static PBD::Signal< void(ARDOUR::StripableNotificationListPtr)> StripableSelectionChanged
static const std::string state_node_name
int control_protocol_discover(std::string path)
int set_state(const XMLNode &, int version)
static ControlProtocolManager * _instance
PBD::Signal< void(ControlProtocolInfo *)> ProtocolStatusChange
int activate(ControlProtocolInfo &)
std::list< ControlProtocol * > _control_protocols
void probe_usb_control_protocols(bool, uint16_t, uint16_t)
std::list< ControlProtocolInfo * > _control_protocol_info
static ControlProtocolManager & instance()
ControlProtocol * instantiate(ControlProtocolInfo &)
void foreach_known_protocol(std::function< void(const ControlProtocolInfo *)>)
Definition: xml++.h:114
#define LIBARDOUR_API
PBD::PropertyDescriptor< bool > automatic
std::shared_ptr< StripableNotificationList > StripableNotificationListPtr