21 #ifndef INCLUDE_OLAD_UNIVERSE_H_ 22 #define INCLUDE_OLAD_UNIVERSE_H_ 24 #include <ola/Clock.h> 32 #include <ola/util/SequenceNumber.h> 33 #include <olad/DmxSource.h> 59 std::string Name()
const {
return m_universe_name; }
60 unsigned int UniverseId()
const {
return m_universe_id; }
61 merge_mode MergeMode()
const {
return m_merge_mode; }
62 bool IsActive()
const;
63 uint8_t ActivePriority()
const {
return m_active_priority; }
71 return m_rdm_discovery_interval;
78 return m_last_discovery_time;
82 void SetName(
const std::string &name);
83 void SetMergeMode(merge_mode merge_mode);
89 m_rdm_discovery_interval = discovery_interval;
94 const DmxBuffer &GetDMX()
const {
return m_buffer; }
101 bool ContainsPort(
InputPort *port)
const;
103 unsigned int InputPortCount()
const {
return m_input_ports.size(); }
104 unsigned int OutputPortCount()
const {
return m_output_ports.size(); }
105 void InputPorts(std::vector<InputPort*> *ports)
const;
106 void OutputPorts(std::vector<OutputPort*> *ports)
const;
109 bool AddSourceClient(
Client *client);
110 bool RemoveSourceClient(
Client *client);
111 bool ContainsSourceClient(
Client *client)
const;
112 unsigned int SourceClientCount()
const {
return m_source_clients.size(); }
115 bool AddSinkClient(
Client *client);
116 bool RemoveSinkClient(
Client *client);
117 bool ContainsSinkClient(
Client *client)
const;
118 unsigned int SinkClientCount()
const {
return m_sink_clients.size(); }
122 bool SourceClientDataChanged(
Client *client);
138 bool operator==(
const Universe &other) {
139 return m_universe_id == other.UniverseId();
142 static const char K_FPS_VAR[];
143 static const char K_MERGE_HTP_STR[];
144 static const char K_MERGE_LTP_STR[];
145 static const char K_UNIVERSE_INPUT_PORT_VAR[];
146 static const char K_UNIVERSE_MODE_VAR[];
147 static const char K_UNIVERSE_NAME_VAR[];
148 static const char K_UNIVERSE_OUTPUT_PORT_VAR[];
149 static const char K_UNIVERSE_RDM_REQUESTS[];
150 static const char K_UNIVERSE_SINK_CLIENTS_VAR[];
151 static const char K_UNIVERSE_SOURCE_CLIENTS_VAR[];
152 static const char K_UNIVERSE_UID_COUNT_VAR[];
156 unsigned int expected_count;
157 unsigned int current_count;
160 std::vector<rdm::RDMFrame> frames;
161 } broadcast_request_tracker;
163 typedef std::map<Client*, bool> SourceClientMap;
165 std::string m_universe_name;
166 unsigned int m_universe_id;
167 std::string m_universe_id_str;
168 uint8_t m_active_priority;
169 enum merge_mode m_merge_mode;
170 std::vector<InputPort*> m_input_ports;
171 std::vector<OutputPort*> m_output_ports;
172 std::set<Client*> m_sink_clients;
177 SourceClientMap m_source_clients;
181 std::map<ola::rdm::UID, OutputPort*> m_output_uids;
187 void HandleBroadcastAck(broadcast_request_tracker *tracker,
189 void HandleBroadcastDiscovery(broadcast_request_tracker *tracker,
191 bool UpdateDependants();
194 void HTPMergeSources(
const std::vector<DmxSource> &sources);
201 void SafeIncrement(
const std::string &name);
202 void SafeDecrement(
const std::string &name);
204 template<
class PortClass>
205 bool GenericAddPort(PortClass *port,
206 std::vector<PortClass*> *ports);
208 template<
class PortClass>
209 bool GenericRemovePort(PortClass *port,
210 std::vector<PortClass*> *ports,
211 std::map<ola::rdm::UID, PortClass*> *uid_map = NULL);
213 template<
class PortClass>
214 bool GenericContainsPort(PortClass *port,
215 const std::vector<PortClass*> &ports)
const;
220 #endif // INCLUDE_OLAD_UNIVERSE_H_ A time interval, with usecond accuracy.
Definition: Clock.h:138
Represents a set of RDM UIDs.
Definition: UIDSet.h:48
Definitions and Interfaces to implement an RDMController that sends a single message at a time...
RDMStatusCode
RDM Status Codes.
Definition: RDMResponseCodes.h:45
Definition: Universe.h:46
#define DISALLOW_COPY_AND_ASSIGN(TypeName)
Creates dummy copy constructor and assignment operator declarations.
Definition: Macro.h:44
A container for the exported variables.
Definition: ExportMap.h:324
RDM Commands that represent requests (GET, SET or DISCOVER).
Definition: RDMCommand.h:234
Used to hold a single universe of DMX data.
Definition: DmxBuffer.h:49
A RDM unique identifier (UID).
Export variables on the http server.
const TimeStamp & LastRDMDiscovery() const
Get the time of the last discovery run.
Definition: Universe.h:77
const TimeInterval & RDMDiscoveryInterval() const
Return the time between RDM discovery operations.
Definition: Universe.h:70
void SendRDMRequest(ola::rdm::RDMRequest *request, ola::rdm::RDMCallback *callback)
Send a RDM command.
Definition: Universe.cpp:456
Maintains a collection of Universe objects.
Definition: UniverseStore.h:39
A port that sends DMX512 data.
Definition: Port.h:163
A class used to hold a single universe of DMX data.
void CleanStaleSourceClients()
Clean old source clients.
Definition: Universe.cpp:432
Used to get the current time.
Definition: Clock.h:242
The base class for all 1 argument callbacks.
Definition: Callback.h:982
Holds the final state of an RDM request.
Definition: RDMReply.h:43
uint8_t GetRDMTransactionNumber()
Definition: Universe.cpp:614
void SetRDMDiscoveryInterval(const TimeInterval &discovery_interval)
Definition: Universe.h:88
Represents a connected OLA client on the OLA server side.
Definition: Client.h:46
The interface that can send RDMRequest.
Definition: RDMControllerInterface.h:73
The namespace containing all OLA symbols.
Definition: Credentials.cpp:44
unsigned int UIDCount() const
Definition: Universe.cpp:607
Represents a point in time with microsecond accuracy.
Definition: Clock.h:191
Classes that represent RDM commands.