21 #ifndef INCLUDE_OLAD_UNIVERSE_H_
22 #define INCLUDE_OLAD_UNIVERSE_H_
24 #include <ola/Clock.h>
32 #include <olad/DmxSource.h>
58 std::string Name()
const {
return m_universe_name; }
59 unsigned int UniverseId()
const {
return m_universe_id; }
60 merge_mode MergeMode()
const {
return m_merge_mode; }
61 bool IsActive()
const;
62 uint8_t ActivePriority()
const {
return m_active_priority; }
70 return m_rdm_discovery_interval;
77 return m_last_discovery_time;
81 void SetName(
const std::string &name);
82 void SetMergeMode(merge_mode merge_mode);
88 m_rdm_discovery_interval = discovery_interval;
93 const DmxBuffer &GetDMX()
const {
return m_buffer; }
96 bool AddPort(InputPort *port);
97 bool AddPort(OutputPort *port);
98 bool RemovePort(InputPort *port);
99 bool RemovePort(OutputPort *port);
100 bool ContainsPort(InputPort *port)
const;
101 bool ContainsPort(OutputPort *port)
const;
102 unsigned int InputPortCount()
const {
return m_input_ports.size(); }
103 unsigned int OutputPortCount()
const {
return m_output_ports.size(); }
104 void InputPorts(std::vector<InputPort*> *ports);
105 void OutputPorts(std::vector<OutputPort*> *ports);
108 bool AddSourceClient(Client *client);
109 bool RemoveSourceClient(Client *client);
110 bool ContainsSourceClient(Client *client)
const;
111 unsigned int SourceClientCount()
const {
return m_source_clients.size(); }
114 bool AddSinkClient(Client *client);
115 bool RemoveSinkClient(Client *client);
116 bool ContainsSinkClient(Client *client)
const;
117 unsigned int SinkClientCount()
const {
return m_sink_clients.size(); }
120 bool PortDataChanged(InputPort *port);
121 bool SourceClientDataChanged(Client *client);
136 bool operator==(
const Universe &other) {
137 return m_universe_id == other.UniverseId();
140 static const char K_FPS_VAR[];
141 static const char K_MERGE_HTP_STR[];
142 static const char K_MERGE_LTP_STR[];
143 static const char K_UNIVERSE_INPUT_PORT_VAR[];
144 static const char K_UNIVERSE_MODE_VAR[];
145 static const char K_UNIVERSE_NAME_VAR[];
146 static const char K_UNIVERSE_OUTPUT_PORT_VAR[];
147 static const char K_UNIVERSE_RDM_REQUESTS[];
148 static const char K_UNIVERSE_SINK_CLIENTS_VAR[];
149 static const char K_UNIVERSE_SOURCE_CLIENTS_VAR[];
150 static const char K_UNIVERSE_UID_COUNT_VAR[];
154 unsigned int expected_count;
155 unsigned int current_count;
156 ola::rdm::rdm_response_code response_code;
158 std::vector<std::string> packets;
159 } broadcast_request_tracker;
161 typedef std::map<Client*, bool> SourceClientMap;
163 std::string m_universe_name;
164 unsigned int m_universe_id;
165 std::string m_universe_id_str;
166 uint8_t m_active_priority;
167 enum merge_mode m_merge_mode;
168 std::vector<InputPort*> m_input_ports;
169 std::vector<OutputPort*> m_output_ports;
170 std::set<Client*> m_sink_clients;
175 SourceClientMap m_source_clients;
176 class UniverseStore *m_universe_store;
178 ExportMap *m_export_map;
179 std::map<ola::rdm::UID, OutputPort*> m_output_uids;
181 TimeInterval m_rdm_discovery_interval;
182 TimeStamp m_last_discovery_time;
184 void HandleBroadcastAck(broadcast_request_tracker *tracker,
185 ola::rdm::rdm_response_code code,
187 const std::vector<std::string> &packets);
188 void HandleBroadcastDiscovery(broadcast_request_tracker *tracker,
189 ola::rdm::rdm_response_code code,
191 const std::vector<std::string> &packets);
192 bool UpdateDependants();
195 void HTPMergeSources(
const std::vector<DmxSource> &sources);
196 bool MergeAll(
const InputPort *port,
const Client *client);
197 void PortDiscoveryComplete(BaseCallback0<void> *on_complete,
198 OutputPort *output_port,
202 void SafeIncrement(
const std::string &name);
203 void SafeDecrement(
const std::string &name);
205 template<
class PortClass>
206 bool GenericAddPort(PortClass *port,
207 std::vector<PortClass*> *ports);
209 template<
class PortClass>
210 bool GenericRemovePort(PortClass *port,
211 std::vector<PortClass*> *ports,
212 std::map<ola::rdm::UID, PortClass*> *uid_map = NULL);
214 template<
class PortClass>
215 bool GenericContainsPort(PortClass *port,
216 const std::vector<PortClass*> &ports)
const;
221 #endif // INCLUDE_OLAD_UNIVERSE_H_