Ardour  9.7-53-gdd292e0e94
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  std::string config;
53 
55  : descriptor (0)
56  , protocol (0)
57  , requested (false)
58  , automatic (false)
59  , state (0)
60  {
61  }
63 
64  bool active () const;
65 };
66 
68 {
69 public:
71 
73 
76  void foreach_known_protocol (std::function<void (const ControlProtocolInfo*)>);
78  void drop_protocols ();
80  void probe_usb_control_protocols (bool, uint16_t, uint16_t);
81 
82  const std::list<ControlProtocolInfo*>& control_protocol_infos () const
83  {
84  return _control_protocol_info;
85  }
86 
87  int activate (ControlProtocolInfo&, std::string const & config);
89 
90  static const std::string state_node_name;
91 
92  int set_state (const XMLNode&, int version);
93  XMLNode& get_state () const;
94 
96 
99 
100 private:
103 
105  std::list<ControlProtocol*> _control_protocols;
106  std::list<ControlProtocolInfo*> _control_protocol_info;
107 
109 
110  int control_protocol_discover (std::string path);
113  ControlProtocol* instantiate (ControlProtocolInfo&, std::string const & config);
114  int teardown (ControlProtocolInfo&, bool lock_required);
115 };
116 
117 } // 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
int activate(ControlProtocolInfo &, std::string const &config)
PBD::Signal< void(ControlProtocolInfo *)> ProtocolStatusChange
std::list< ControlProtocol * > _control_protocols
void probe_usb_control_protocols(bool, uint16_t, uint16_t)
ControlProtocol * instantiate(ControlProtocolInfo &, std::string const &config)
std::list< ControlProtocolInfo * > _control_protocol_info
static ControlProtocolManager & instance()
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