Open Lighting Architecture  Latest Git
ResponderHelper.h
Go to the documentation of this file.
1 /*
2  * This library is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU Lesser General Public
4  * License as published by the Free Software Foundation; either
5  * version 2.1 of the License, or (at your option) any later version.
6  *
7  * This library is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
10  * Lesser General Public License for more details.
11  *
12  * You should have received a copy of the GNU Lesser General Public
13  * License along with this library; if not, write to the Free Software
14  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
15  *
16  * ResponderHelper.h
17  * Copyright (C) 2013 Simon Newton
18  */
19 
27 #ifndef INCLUDE_OLA_RDM_RESPONDERHELPER_H_
28 #define INCLUDE_OLA_RDM_RESPONDERHELPER_H_
29 
30 #include <ola/base/Macro.h>
32 #include <ola/network/Interface.h>
34 #include <ola/rdm/RDMCommand.h>
35 #include <ola/rdm/ResponderPersonality.h>
37 
38 #include <string>
39 #include <vector>
40 
41 namespace ola {
42 namespace rdm {
43 
49  public:
50  // Request Parsing methods
51  static bool ExtractUInt8(const RDMRequest *request, uint8_t *output);
52  static bool ExtractUInt16(const RDMRequest *request, uint16_t *output);
53  static bool ExtractUInt32(const RDMRequest *request, uint32_t *output);
54 
55  // Response Generation methods
56  // E1.20 Helpers
57  static RDMResponse *GetDeviceInfo(
58  const RDMRequest *request,
59  uint16_t device_model,
60  rdm_product_category product_category,
61  uint32_t software_version,
62  uint16_t dmx_footprint,
63  uint8_t current_personality,
64  uint8_t personality_count,
65  uint16_t dmx_start_address,
66  uint16_t sub_device_count,
67  uint8_t sensor_count,
68  uint8_t queued_message_count = 0);
69 
70  static RDMResponse *GetDeviceInfo(
71  const RDMRequest *request,
72  uint16_t device_model,
73  rdm_product_category product_category,
74  uint32_t software_version,
75  const PersonalityManager *personality_manager,
76  uint16_t dmx_start_address,
77  uint16_t sub_device_count,
78  uint8_t sensor_count,
79  uint8_t queued_message_count = 0);
80 
81  static RDMResponse *GetProductDetailList(
82  const RDMRequest *request,
83  const std::vector<rdm_product_detail> &product_details,
84  uint8_t queued_message_count = 0);
85 
86  static RDMResponse *GetPersonality(
87  const RDMRequest *request,
88  const PersonalityManager *personality_manager,
89  uint8_t queued_message_count = 0);
90  static RDMResponse *SetPersonality(
91  const RDMRequest *request,
92  PersonalityManager *personality_manager,
93  uint16_t start_address,
94  uint8_t queued_message_count = 0);
95 
96  static RDMResponse *GetPersonalityDescription(
97  const RDMRequest *request,
98  const PersonalityManager *personality_manager,
99  uint8_t queued_message_count = 0);
100 
101  static RDMResponse *GetSlotInfo(
102  const RDMRequest *request,
103  const PersonalityManager *personality_manager,
104  uint8_t queued_message_count = 0);
105 
107  const RDMRequest *request,
108  const PersonalityManager *personality_manager,
109  uint8_t queued_message_count = 0);
110 
112  const RDMRequest *request,
113  const PersonalityManager *personality_manager,
114  uint8_t queued_message_count = 0);
115 
116  static RDMResponse *GetDmxAddress(
117  const RDMRequest *request,
118  const PersonalityManager *personality_manager,
119  uint16_t start_address,
120  uint8_t queued_message_count = 0);
121  static RDMResponse *SetDmxAddress(
122  const RDMRequest *request,
123  const PersonalityManager *personality_manager,
124  uint16_t *dmx_address,
125  uint8_t queued_message_count = 0);
126 
128  const RDMRequest *request, const Sensors &sensor_list);
129 
130  static RDMResponse *GetSensorValue(
131  const RDMRequest *request, const Sensors &sensor_list);
132  static RDMResponse *SetSensorValue(
133  const RDMRequest *request, const Sensors &sensor_list);
134 
135  static RDMResponse *RecordSensor(
136  const RDMRequest *request, const Sensors &sensor_list);
137 
138  static RDMResponse *GetParamDescription(
139  const RDMRequest *request,
140  uint16_t pid,
141  uint8_t pdl_size,
142  rdm_data_type data_type,
143  rdm_command_class command_class,
144  rdm_pid_unit unit,
145  rdm_pid_prefix prefix,
146  uint32_t min_value,
147  uint32_t default_value,
148  uint32_t max_value,
149  std::string description,
150  uint8_t queued_message_count = 0);
151  static RDMResponse *GetASCIIParamDescription(
152  const RDMRequest *request,
153  uint16_t pid,
154  rdm_command_class command_class,
155  std::string description,
156  uint8_t queued_message_count = 0);
157  static RDMResponse *GetBitFieldParamDescription(
158  const RDMRequest *request,
159  uint16_t pid,
160  uint8_t pdl_size,
161  rdm_command_class command_class,
162  std::string description,
163  uint8_t queued_message_count = 0);
164 
166  const RDMRequest *request,
167  uint8_t queued_message_count = 0);
168 
169  // E1.37-2 Helpers
170  static RDMResponse *GetListInterfaces(
171  const RDMRequest *request,
172  const NetworkManagerInterface *network_manager,
173  uint8_t queued_message_count = 0);
174 
175  static RDMResponse *GetInterfaceLabel(
176  const RDMRequest *request,
177  const NetworkManagerInterface *network_manager,
178  uint8_t queued_message_count = 0);
179 
180  static RDMResponse *GetInterfaceHardwareAddressType1(
181  const RDMRequest *request,
182  const NetworkManagerInterface *network_manager,
183  uint8_t queued_message_count = 0);
184 
185  static RDMResponse *GetIPV4CurrentAddress(
186  const RDMRequest *request,
187  const NetworkManagerInterface *network_manager,
188  uint8_t queued_message_count = 0);
189 
190  static RDMResponse *GetIPV4DefaultRoute(
191  const RDMRequest *request,
192  const NetworkManagerInterface *network_manager,
193  uint8_t queued_message_count = 0);
194 
195  static RDMResponse *GetDNSHostname(
196  const RDMRequest *request,
197  const NetworkManagerInterface *network_manager,
198  uint8_t queued_message_count = 0);
199 
200  static RDMResponse *GetDNSDomainName(
201  const RDMRequest *request,
202  const NetworkManagerInterface *network_manager,
203  uint8_t queued_message_count = 0);
204 
205  static RDMResponse *GetDNSNameServer(
206  const RDMRequest *request,
207  const NetworkManagerInterface *network_manager,
208  uint8_t queued_message_count = 0);
209 
210  static RDMResponse *GetIPV4Address(
211  const RDMRequest *request,
212  const ola::network::IPV4Address &value,
213  uint8_t queued_message_count = 0);
214 
215  // Generic Helpers.
216  static RDMResponse *GetString(
217  const RDMRequest *request,
218  const std::string &value,
219  uint8_t queued_message_count = 0,
220  uint8_t max_length = MAX_RDM_STRING_LENGTH);
221 
222  static RDMResponse *EmptyGetResponse(
223  const RDMRequest *request,
224  uint8_t queued_message_count = 0);
225  static RDMResponse *EmptySetResponse(
226  const RDMRequest *request,
227  uint8_t queued_message_count = 0);
228 
229  static RDMResponse *SetString(
230  const RDMRequest *request,
231  std::string *value,
232  uint8_t queued_message_count = 0,
233  uint8_t max_length = MAX_RDM_STRING_LENGTH);
234  static RDMResponse *GetBoolValue(
235  const RDMRequest *request, bool value,
236  uint8_t queued_message_count = 0);
237  static RDMResponse *SetBoolValue(
238  const RDMRequest *request, bool *value,
239  uint8_t queued_message_count = 0);
240 
241  static RDMResponse *GetUInt8Value(
242  const RDMRequest *request, uint8_t value,
243  uint8_t queued_message_count = 0);
244  static RDMResponse *GetUInt16Value(
245  const RDMRequest *request, uint16_t value,
246  uint8_t queued_message_count = 0);
247  static RDMResponse *GetUInt32Value(
248  const RDMRequest *request, uint32_t value,
249  uint8_t queued_message_count = 0);
250  static RDMResponse *SetUInt8Value(
251  const RDMRequest *request, uint8_t *value,
252  uint8_t queued_message_count = 0);
253  static RDMResponse *SetUInt16Value(
254  const RDMRequest *request, uint16_t *value,
255  uint8_t queued_message_count = 0);
256  static RDMResponse *SetUInt32Value(
257  const RDMRequest *request, uint32_t *value,
258  uint8_t queued_message_count = 0);
259 
260  PACK(
261  struct sensor_value_s {
262  uint8_t sensor;
263  int16_t value;
264  int16_t lowest;
265  int16_t highest;
266  int16_t recorded;
267  });
268 
269  private:
270  static bool FindInterface(
271  const NetworkManagerInterface *network_manager,
272  ola::network::Interface *interface,
273  uint32_t index);
274  static bool IsInterfaceIndexValid(uint32_t index);
275  static bool IsInterfaceIndexValidInterface(ola::network::Interface interface);
276 };
277 } // namespace rdm
278 } // namespace ola
279 #endif // INCLUDE_OLA_RDM_RESPONDERHELPER_H_
An RDM Command that represents responses (GET, SET or DISCOVER).
Definition: RDMCommand.h:457
Gets global network information.
Definition: NetworkManagerInterface.h:46
static RDMResponse * GetRealTimeClock(const RDMRequest *request, uint8_t queued_message_count=0)
Definition: ResponderHelper.cpp:593
RDM Commands that represent requests (GET, SET or DISCOVER).
Definition: RDMCommand.h:234
Holds the information about a sensor.
static RDMResponse * GetSensorValue(const RDMRequest *request, const Sensors &sensor_list)
Definition: ResponderHelper.cpp:501
The interface for the NetworkManager.
static RDMResponse * GetSlotDescription(const RDMRequest *request, const PersonalityManager *personality_manager, uint8_t queued_message_count=0)
Definition: ResponderHelper.cpp:320
Represents a IPv4 Address.
Definition: IPV4Address.h:55
static RDMResponse * GetSlotDefaultValues(const RDMRequest *request, const PersonalityManager *personality_manager, uint8_t queued_message_count=0)
Definition: ResponderHelper.cpp:370
Definition: Interface.h:35
static RDMResponse * SetSensorValue(const RDMRequest *request, const Sensors &sensor_list)
Definition: ResponderHelper.cpp:530
Definition: ResponderHelper.h:48
Definition: ResponderPersonality.h:90
Represents an IPv4 Address.
Helper macros.
static RDMResponse * RecordSensor(const RDMRequest *request, const Sensors &sensor_list)
Definition: ResponderHelper.cpp:568
static RDMResponse * GetSlotInfo(const RDMRequest *request, const PersonalityManager *personality_manager, uint8_t queued_message_count=0)
Definition: ResponderHelper.cpp:277
static RDMResponse * SetDmxAddress(const RDMRequest *request, const PersonalityManager *personality_manager, uint16_t *dmx_address, uint8_t queued_message_count=0)
Definition: ResponderHelper.cpp:427
The namespace containing all OLA symbols.
Definition: Credentials.cpp:44
static RDMResponse * GetDmxAddress(const RDMRequest *request, const PersonalityManager *personality_manager, uint16_t start_address, uint8_t queued_message_count=0)
Definition: ResponderHelper.cpp:412
static RDMResponse * GetString(const RDMRequest *request, const std::string &value, uint8_t queued_message_count=0, uint8_t max_length=MAX_RDM_STRING_LENGTH)
Handle a request that returns a string.
Definition: ResponderHelper.cpp:1060
static RDMResponse * GetSensorDefinition(const RDMRequest *request, const Sensors &sensor_list)
Definition: ResponderHelper.cpp:452
Classes that represent RDM commands.