RDMnet  0.3.0
Implementation of ANSI E1.33 (RDMnet)
View other versions:
controller.h
Go to the documentation of this file.
1 /******************************************************************************
2  * Copyright 2020 ETC Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  ******************************************************************************
16  * This file is a part of RDMnet. For more information, go to:
17  * https://github.com/ETCLabs/RDMnet
18  *****************************************************************************/
19 
25 #ifndef RDMNET_CONTROLLER_H_
26 #define RDMNET_CONTROLLER_H_
27 
28 #include <stdbool.h>
29 #include "etcpal/uuid.h"
30 #include "etcpal/inet.h"
31 #include "rdm/uid.h"
32 #include "rdmnet/client.h"
33 #include "rdmnet/message.h"
34 
49 #ifdef __cplusplus
50 extern "C" {
51 #endif
52 
54 typedef int rdmnet_controller_t;
56 #define RDMNET_CONTROLLER_INVALID -1
57 
65 typedef void (*RdmnetControllerConnectedCallback)(rdmnet_controller_t controller_handle,
66  rdmnet_client_scope_t scope_handle,
67  const RdmnetClientConnectedInfo* info,
68  void* context);
69 
78  rdmnet_client_scope_t scope_handle,
80  void* context);
81 
90  rdmnet_client_scope_t scope_handle,
91  const RdmnetClientDisconnectedInfo* info,
92  void* context);
93 
104  rdmnet_client_scope_t scope_handle,
105  client_list_action_t list_action,
106  const RdmnetRptClientList* client_list,
107  void* context);
108 
117  rdmnet_client_scope_t scope_handle,
118  const RdmnetRdmResponse* resp,
119  void* context);
120 
129  rdmnet_client_scope_t scope_handle,
130  const RdmnetRptStatus* status,
131  void* context);
132 
145  rdmnet_client_scope_t scope_handle,
146  const RdmnetDynamicUidAssignmentList* list,
147  void* context);
148 
151 {
159  void* context;
161 
171  rdmnet_client_scope_t scope_handle,
172  const RdmnetRdmCommand* cmd,
173  RdmnetSyncRdmResponse* response,
174  void* context);
175 
184  const LlrpRdmCommand* cmd,
185  RdmnetSyncRdmResponse* response,
186  void* context);
192 {
201  uint8_t* response_buf;
203  void* context;
205 
208 {
209  /****************************************************************************
210  * These items do not have default values from the config initializer
211  ***************************************************************************/
212 
217  uint16_t model_id;
224  const char* manufacturer_label;
230  const char* device_label;
231 
232  /****************************************************************************
233  * These items have default values from the config initializer
234  ***************************************************************************/
235 
249 
259 #define RDMNET_CONTROLLER_RDM_DATA_DEFAULT_INIT \
260  { \
261  0, 0, NULL, NULL, NULL, NULL, E120_PRODUCT_CATEGORY_CONTROL_CONTROLLER, false \
262  }
263 
266 {
267  /************************************************************************************************
268  * Required Values
269  ***********************************************************************************************/
270 
285 
286  /************************************************************************************************
287  * Optional Values
288  ***********************************************************************************************/
289 
295  RdmUid uid;
296 
301  const char* search_domain;
302 
307 
317 
329 #define RDMNET_CONTROLLER_CONFIG_DEFAULT_INIT(manu_id) \
330  { \
331  {{0}}, {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}, {NULL, NULL, NULL, NULL}, \
332  RDMNET_CONTROLLER_RDM_DATA_DEFAULT_INIT, {(0x8000 | manu_id), 0}, NULL, false, NULL, 0 \
333  }
334 
335 void rdmnet_controller_config_init(RdmnetControllerConfig* config, uint16_t manufacturer_id);
340  RdmnetControllerClientListUpdateReceivedCallback client_list_update_received,
341  RdmnetControllerRdmResponseReceivedCallback rdm_response_received,
343  RdmnetControllerResponderIdsReceivedCallback responder_ids_received,
344  void* context);
346  RdmnetControllerRdmCommandReceivedCallback rdm_command_received,
347  RdmnetControllerLlrpRdmCommandReceivedCallback llrp_rdm_command_received,
348  uint8_t* response_buf,
349  void* context);
350 
353 
355  const RdmnetScopeConfig* scope_config,
356  rdmnet_client_scope_t* scope_handle);
358  rdmnet_client_scope_t* scope_handle);
360  rdmnet_client_scope_t scope_handle,
363  rdmnet_client_scope_t scope_handle,
364  const RdmnetScopeConfig* new_scope_config,
365  rdmnet_disconnect_reason_t disconnect_reason);
367  rdmnet_client_scope_t scope_handle,
368  char* scope_str_buf,
369  EtcPalSockAddr* static_broker_addr);
370 
372  const char* new_search_domain,
373  rdmnet_disconnect_reason_t disconnect_reason);
374 
376  rdmnet_client_scope_t scope_handle);
378  rdmnet_client_scope_t scope_handle,
379  const RdmUid* uids,
380  size_t num_uids);
381 
383  rdmnet_client_scope_t scope_handle,
384  const RdmnetDestinationAddr* destination,
385  rdmnet_command_class_t command_class,
386  uint16_t param_id,
387  const uint8_t* data,
388  uint8_t data_len,
389  uint32_t* seq_num);
391  rdmnet_client_scope_t scope_handle,
392  const RdmnetDestinationAddr* destination,
393  uint16_t param_id,
394  const uint8_t* data,
395  uint8_t data_len,
396  uint32_t* seq_num);
398  rdmnet_client_scope_t scope_handle,
399  const RdmnetDestinationAddr* destination,
400  uint16_t param_id,
401  const uint8_t* data,
402  uint8_t data_len,
403  uint32_t* seq_num);
404 
406  rdmnet_client_scope_t scope_handle,
407  const RdmnetSavedRdmCommand* received_cmd,
408  const uint8_t* response_data,
409  size_t response_data_len);
411  rdmnet_client_scope_t scope_handle,
412  const RdmnetSavedRdmCommand* received_cmd,
413  rdm_nack_reason_t nack_reason);
415  rdmnet_client_scope_t scope_handle,
416  uint16_t subdevice,
417  uint16_t param_id,
418  const uint8_t* data,
419  size_t data_len);
420 
422  const LlrpSavedRdmCommand* received_cmd,
423  const uint8_t* response_data,
424  uint8_t response_data_len);
426  const LlrpSavedRdmCommand* received_cmd,
427  rdm_nack_reason_t nack_reason);
428 
429 #ifdef __cplusplus
430 };
431 #endif
432 
437 #endif /* RDMNET_CONTROLLER_H_ */
API definitions used by RDMnet clients (controllers and devices)
etcpal_error_t
rdmnet_disconnect_reason_t
Disconnect reason defines for the BrokerDisconnectMsg.
Definition: common.h:85
rdmnet_command_class_t
An RDM command class, for RDMnet purposes.
Definition: common.h:350
client_list_action_t
How to apply the client entries to the existing client list in a client_list_update_received callback...
Definition: client.h:50
int rdmnet_client_scope_t
A handle to a scope that an RDMnet client participates in.
Definition: client.h:41
void(* RdmnetControllerConnectFailedCallback)(rdmnet_controller_t controller_handle, rdmnet_client_scope_t scope_handle, const RdmnetClientConnectFailedInfo *info, void *context)
A connection attempt failed between a controller and a broker.
Definition: controller.h:77
void(* RdmnetControllerClientListUpdateReceivedCallback)(rdmnet_controller_t controller_handle, rdmnet_client_scope_t scope_handle, client_list_action_t list_action, const RdmnetRptClientList *client_list, void *context)
A client list update has been received from a broker.
Definition: controller.h:103
struct RdmnetControllerRdmCmdHandler RdmnetControllerRdmCmdHandler
A buffer and set of callbacks which can be optionally provided to handle RDM commands addressed to a ...
etcpal_error_t rdmnet_controller_change_scope(rdmnet_controller_t controller_handle, rdmnet_client_scope_t scope_handle, const RdmnetScopeConfig *new_scope_config, rdmnet_disconnect_reason_t disconnect_reason)
Change the configuration of a scope on a controller.
Definition: controller.c:412
etcpal_error_t rdmnet_controller_create(const RdmnetControllerConfig *config, rdmnet_controller_t *handle)
Create a new instance of RDMnet controller functionality.
Definition: controller.c:249
void(* RdmnetControllerDisconnectedCallback)(rdmnet_controller_t controller_handle, rdmnet_client_scope_t scope_handle, const RdmnetClientDisconnectedInfo *info, void *context)
A controller which was previously connected to a broker has disconnected.
Definition: controller.h:89
etcpal_error_t rdmnet_controller_send_llrp_ack(rdmnet_controller_t controller_handle, const LlrpSavedRdmCommand *received_cmd, const uint8_t *response_data, uint8_t response_data_len)
Send an LLRP RDM ACK response from a controller.
Definition: controller.c:788
etcpal_error_t rdmnet_controller_send_rdm_ack(rdmnet_controller_t controller_handle, rdmnet_client_scope_t scope_handle, const RdmnetSavedRdmCommand *received_cmd, const uint8_t *response_data, size_t response_data_len)
Send an RDM ACK response from a controller on a scope.
Definition: controller.c:690
etcpal_error_t rdmnet_controller_send_rdm_update(rdmnet_controller_t controller_handle, rdmnet_client_scope_t scope_handle, uint16_t subdevice, uint16_t param_id, const uint8_t *data, size_t data_len)
Send an asynchronous RDM GET response to update the value of a local parameter.
Definition: controller.c:758
etcpal_error_t rdmnet_controller_add_scope(rdmnet_controller_t controller_handle, const RdmnetScopeConfig *scope_config, rdmnet_client_scope_t *scope_handle)
Add a new scope to a controller instance.
Definition: controller.c:321
void(* RdmnetControllerResponderIdsReceivedCallback)(rdmnet_controller_t controller_handle, rdmnet_client_scope_t scope_handle, const RdmnetDynamicUidAssignmentList *list, void *context)
A set of previously-requested mappings of dynamic UIDs to responder IDs has been received.
Definition: controller.h:144
void(* RdmnetControllerConnectedCallback)(rdmnet_controller_t controller_handle, rdmnet_client_scope_t scope_handle, const RdmnetClientConnectedInfo *info, void *context)
A controller has successfully connected to a broker.
Definition: controller.h:65
void rdmnet_controller_set_callbacks(RdmnetControllerConfig *config, RdmnetControllerConnectedCallback connected, RdmnetControllerConnectFailedCallback connect_failed, RdmnetControllerDisconnectedCallback disconnected, RdmnetControllerClientListUpdateReceivedCallback client_list_update_received, RdmnetControllerRdmResponseReceivedCallback rdm_response_received, RdmnetControllerStatusReceivedCallback status_received, RdmnetControllerResponderIdsReceivedCallback responder_ids_received, void *context)
Set the main callbacks in an RDMnet controller configuration structure.
Definition: controller.c:176
struct RdmnetControllerCallbacks RdmnetControllerCallbacks
A set of notification callbacks received about a controller.
etcpal_error_t rdmnet_controller_destroy(rdmnet_controller_t controller_handle, rdmnet_disconnect_reason_t reason)
Destroy a controller instance.
Definition: controller.c:287
etcpal_error_t rdmnet_controller_send_set_command(rdmnet_controller_t controller_handle, rdmnet_client_scope_t scope_handle, const RdmnetDestinationAddr *destination, uint16_t param_id, const uint8_t *data, uint8_t data_len, uint32_t *seq_num)
Send an RDM SET command from a controller on a scope.
Definition: controller.c:653
etcpal_error_t rdmnet_controller_request_client_list(rdmnet_controller_t controller_handle, rdmnet_client_scope_t scope_handle)
Request a client list from a broker.
Definition: controller.c:503
etcpal_error_t rdmnet_controller_send_get_command(rdmnet_controller_t controller_handle, rdmnet_client_scope_t scope_handle, const RdmnetDestinationAddr *destination, uint16_t param_id, const uint8_t *data, uint8_t data_len, uint32_t *seq_num)
Send an RDM GET command from a controller on a scope.
Definition: controller.c:612
void rdmnet_controller_config_init(RdmnetControllerConfig *config, uint16_t manufacturer_id)
Initialize an RdmnetControllerConfig with default values for the optional config options.
Definition: controller.c:148
void(* RdmnetControllerRdmResponseReceivedCallback)(rdmnet_controller_t controller_handle, rdmnet_client_scope_t scope_handle, const RdmnetRdmResponse *resp, void *context)
An RDM response has been received.
Definition: controller.h:116
void rdmnet_controller_set_rdm_cmd_callbacks(RdmnetControllerConfig *config, RdmnetControllerRdmCommandReceivedCallback rdm_command_received, RdmnetControllerLlrpRdmCommandReceivedCallback llrp_rdm_command_received, uint8_t *response_buf, void *context)
Set callbacks to handle RDM commands in an RDMnet controller configuration structure.
Definition: controller.c:219
etcpal_error_t rdmnet_controller_request_responder_ids(rdmnet_controller_t controller_handle, rdmnet_client_scope_t scope_handle, const RdmUid *uids, size_t num_uids)
Request a set of responder IDs corresponding with dynamic responder UIDs from a broker.
Definition: controller.c:532
etcpal_error_t rdmnet_controller_add_default_scope(rdmnet_controller_t controller_handle, rdmnet_client_scope_t *scope_handle)
Add a new scope representing the default RDMnet scope to a controller instance.
Definition: controller.c:351
etcpal_error_t rdmnet_controller_change_search_domain(rdmnet_controller_t controller_handle, const char *new_search_domain, rdmnet_disconnect_reason_t disconnect_reason)
Change the controller's DNS search domain.
Definition: controller.c:475
etcpal_error_t rdmnet_controller_get_scope(rdmnet_controller_t controller_handle, rdmnet_client_scope_t scope_handle, char *scope_str_buf, EtcPalSockAddr *static_broker_addr)
Retrieve the scope configuration of a previously-added scope.
Definition: controller.c:444
void(* RdmnetControllerRdmCommandReceivedCallback)(rdmnet_controller_t controller_handle, rdmnet_client_scope_t scope_handle, const RdmnetRdmCommand *cmd, RdmnetSyncRdmResponse *response, void *context)
An RDM command has been received addressed to a controller.
Definition: controller.h:170
etcpal_error_t rdmnet_controller_send_rdm_command(rdmnet_controller_t controller_handle, rdmnet_client_scope_t scope_handle, const RdmnetDestinationAddr *destination, rdmnet_command_class_t command_class, uint16_t param_id, const uint8_t *data, uint8_t data_len, uint32_t *seq_num)
Send an RDM command from a controller on a scope.
Definition: controller.c:570
etcpal_error_t rdmnet_controller_send_rdm_nack(rdmnet_controller_t controller_handle, rdmnet_client_scope_t scope_handle, const RdmnetSavedRdmCommand *received_cmd, rdm_nack_reason_t nack_reason)
Send an RDM NACK response from a controller on a scope.
Definition: controller.c:723
void(* RdmnetControllerStatusReceivedCallback)(rdmnet_controller_t controller_handle, rdmnet_client_scope_t scope_handle, const RdmnetRptStatus *status, void *context)
An RPT status message has been received in response to a previously-sent RDM command.
Definition: controller.h:128
etcpal_error_t rdmnet_controller_remove_scope(rdmnet_controller_t controller_handle, rdmnet_client_scope_t scope_handle, rdmnet_disconnect_reason_t reason)
Remove a previously-added scope from a controller instance.
Definition: controller.c:381
etcpal_error_t rdmnet_controller_send_llrp_nack(rdmnet_controller_t controller_handle, const LlrpSavedRdmCommand *received_cmd, rdm_nack_reason_t nack_reason)
Send an LLRP RDM NACK response from a controller.
Definition: controller.c:815
struct RdmnetControllerConfig RdmnetControllerConfig
A set of information that defines the startup parameters of an RDMnet Controller.
int rdmnet_controller_t
A handle to an RDMnet controller.
Definition: controller.h:54
struct RdmnetControllerRdmData RdmnetControllerRdmData
A set of data for the controller library to use for handling RDM commands internally.
void(* RdmnetControllerLlrpRdmCommandReceivedCallback)(rdmnet_controller_t controller_handle, const LlrpRdmCommand *cmd, RdmnetSyncRdmResponse *response, void *context)
An RDM command has been received over LLRP, addressed to a controller.
Definition: controller.h:183
Basic types for parsed RDMnet messages.
An RDM command received from a remote LLRP Manager.
Definition: message.h:439
An RDM command received from a remote LLRP Manager.
Definition: message.h:459
Information provided by the library about an unsuccessful RDMnet client connection.
Definition: client.h:164
Information provided by the library about a successful RDMnet client connection.
Definition: client.h:151
Information provided by the library about an RDMnet client connection that disconnected after a succe...
Definition: client.h:196
A set of notification callbacks received about a controller.
Definition: controller.h:151
RdmnetControllerStatusReceivedCallback status_received
Required.
Definition: controller.h:157
RdmnetControllerDisconnectedCallback disconnected
Required.
Definition: controller.h:154
void * context
(optional) Pointer to opaque data passed back with each callback.
Definition: controller.h:159
RdmnetControllerClientListUpdateReceivedCallback client_list_update_received
Required.
Definition: controller.h:155
RdmnetControllerConnectedCallback connected
Required.
Definition: controller.h:152
RdmnetControllerConnectFailedCallback connect_failed
Required.
Definition: controller.h:153
RdmnetControllerResponderIdsReceivedCallback responder_ids_received
Optional.
Definition: controller.h:158
RdmnetControllerRdmResponseReceivedCallback rdm_response_received
Required.
Definition: controller.h:156
A set of information that defines the startup parameters of an RDMnet Controller.
Definition: controller.h:266
const char * search_domain
(optional) The controller's configured search domain for discovery.
Definition: controller.h:301
RdmnetControllerRdmCmdHandler rdm_handler
Callbacks and a buffer for the controller to receive RDM commands over RDMnet.
Definition: controller.h:279
RdmnetControllerCallbacks callbacks
A set of callbacks for the controller to receive RDMnet notifications.
Definition: controller.h:274
EtcPalUuid cid
The controller's CID.
Definition: controller.h:272
bool create_llrp_target
(optional) Whether to create an LLRP target associated with this controller.
Definition: controller.h:306
size_t num_llrp_netints
(optional) The size of the llrp_netints array.
Definition: controller.h:315
const RdmnetMcastNetintId * llrp_netints
(optional) A set of network interfaces to use for the LLRP target associated with this controller.
Definition: controller.h:313
RdmnetControllerRdmData rdm_data
Data for the library to use for handling RDM commands internally.
Definition: controller.h:284
RdmUid uid
(optional) The controller's UID.
Definition: controller.h:295
A buffer and set of callbacks which can be optionally provided to handle RDM commands addressed to a ...
Definition: controller.h:192
RdmnetControllerRdmCommandReceivedCallback rdm_command_received
Callback called when an RDM command is received from a controller.
Definition: controller.h:194
uint8_t * response_buf
(optional) A data buffer used to respond synchronously to RDM commands.
Definition: controller.h:201
RdmnetControllerLlrpRdmCommandReceivedCallback llrp_rdm_command_received
Callback called when an RDM command is received over LLRP.
Definition: controller.h:196
void * context
(optional) Pointer to opaque data passed back with each callback.
Definition: controller.h:203
A set of data for the controller library to use for handling RDM commands internally.
Definition: controller.h:208
uint16_t model_id
A number representing the product model which implements the controller.
Definition: controller.h:217
uint16_t product_category
A number representing the product's primary function.
Definition: controller.h:242
const char * device_model_description
A string representing the name of the product model which implements the controller.
Definition: controller.h:226
uint32_t software_version_id
A number representing the version of the controller software.
Definition: controller.h:222
const char * manufacturer_label
A string representing the manufacturer of the controller.
Definition: controller.h:224
const char * software_version_label
A string representing the software version of the controller.
Definition: controller.h:228
const char * device_label
A user-settable string representing a name for this particular controller instance.
Definition: controller.h:230
bool device_label_settable
Whether the library should allow the device_label to be changed remotely.
Definition: controller.h:247
A destination address for an RDM command in RDMnet's RPT protocol.
Definition: client.h:84
A list of mappings from dynamic UIDs to responder IDs received from an RDMnet broker.
Definition: message.h:245
A set of identifying information for a network interface, for multicast purposes.
Definition: common.h:364
An RDMnet RDM command received by this component.
Definition: message.h:53
An RDMnet RDM response received by a local component.
Definition: message.h:90
A structure that represents a list of RPT Client Entries.
Definition: message.h:398
An RDMnet RPT status message received by a local component.
Definition: message.h:193
An RDM command received by this component and saved for a later response.
Definition: message.h:73
A set of configuration information for a single scope in which an RDMnet client is participating.
Definition: client.h:224
This structure should not be manipulated directly - use the macros to access it:
Definition: common.h:214