RDMnet  HEAD (unstable)
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 
119  rdmnet_client_scope_t scope_handle,
120  const RdmnetRdmResponse* resp,
121  void* context);
122 
131  rdmnet_client_scope_t scope_handle,
132  const RdmnetRptStatus* status,
133  void* context);
134 
147  rdmnet_client_scope_t scope_handle,
148  const RdmnetDynamicUidAssignmentList* list,
149  void* context);
150 
153 {
161  void* context;
163 
173  rdmnet_client_scope_t scope_handle,
174  const RdmnetRdmCommand* cmd,
175  RdmnetSyncRdmResponse* response,
176  void* context);
177 
186  const LlrpRdmCommand* cmd,
187  RdmnetSyncRdmResponse* response,
188  void* context);
194 {
203  uint8_t* response_buf;
205  void* context;
207 
210 {
211  /****************************************************************************
212  * These items do not have default values from the config initializer
213  ***************************************************************************/
214 
219  uint16_t model_id;
226  const char* manufacturer_label;
232  const char* device_label;
233 
234  /****************************************************************************
235  * These items have default values from the config initializer
236  ***************************************************************************/
237 
251 
261 #define RDMNET_CONTROLLER_RDM_DATA_DEFAULT_INIT \
262  { \
263  0, 0, NULL, NULL, NULL, NULL, E120_PRODUCT_CATEGORY_CONTROL_CONTROLLER, false \
264  }
265 
273 {
274  /************************************************************************************************
275  * Required Values
276  ***********************************************************************************************/
277 
292 
293  /************************************************************************************************
294  * Optional Values
295  ***********************************************************************************************/
296 
302  RdmUid uid;
303 
308  const char* search_domain;
309 
315 
327 #define RDMNET_CONTROLLER_CONFIG_DEFAULT_INIT(manu_id) \
328  { \
329  {{0}}, {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}, {NULL, NULL, NULL, NULL}, \
330  RDMNET_CONTROLLER_RDM_DATA_DEFAULT_INIT, {(0x8000 | manu_id), 0}, NULL, false \
331  }
332 
333 void rdmnet_controller_config_init(RdmnetControllerConfig* config, uint16_t manufacturer_id);
338  RdmnetControllerClientListUpdateReceivedCallback client_list_update_received,
339  RdmnetControllerRdmResponseReceivedCallback rdm_response_received,
341  RdmnetControllerResponderIdsReceivedCallback responder_ids_received,
342  void* context);
344  RdmnetControllerRdmCommandReceivedCallback rdm_command_received,
345  RdmnetControllerLlrpRdmCommandReceivedCallback llrp_rdm_command_received,
346  uint8_t* response_buf,
347  void* context);
348 
351 
353  const RdmnetScopeConfig* scope_config,
354  rdmnet_client_scope_t* scope_handle);
356  rdmnet_client_scope_t* scope_handle);
358  rdmnet_client_scope_t scope_handle,
361  rdmnet_client_scope_t scope_handle,
362  const RdmnetScopeConfig* new_scope_config,
363  rdmnet_disconnect_reason_t disconnect_reason);
365  rdmnet_client_scope_t scope_handle,
366  char* scope_str_buf,
367  EtcPalSockAddr* static_broker_addr);
368 
370  const char* new_search_domain,
371  rdmnet_disconnect_reason_t disconnect_reason);
372 
374  rdmnet_client_scope_t scope_handle);
376  rdmnet_client_scope_t scope_handle,
377  const RdmUid* uids,
378  size_t num_uids);
379 
381  rdmnet_client_scope_t scope_handle,
382  const RdmnetDestinationAddr* destination,
383  rdmnet_command_class_t command_class,
384  uint16_t param_id,
385  const uint8_t* data,
386  uint8_t data_len,
387  uint32_t* seq_num);
389  rdmnet_client_scope_t scope_handle,
390  const RdmnetDestinationAddr* destination,
391  uint16_t param_id,
392  const uint8_t* data,
393  uint8_t data_len,
394  uint32_t* seq_num);
396  rdmnet_client_scope_t scope_handle,
397  const RdmnetDestinationAddr* destination,
398  uint16_t param_id,
399  const uint8_t* data,
400  uint8_t data_len,
401  uint32_t* seq_num);
402 
404  rdmnet_client_scope_t scope_handle,
405  const RdmnetSavedRdmCommand* received_cmd,
406  const uint8_t* response_data,
407  size_t response_data_len);
409  rdmnet_client_scope_t scope_handle,
410  const RdmnetSavedRdmCommand* received_cmd,
411  rdm_nack_reason_t nack_reason);
413  rdmnet_client_scope_t scope_handle,
414  uint16_t subdevice,
415  uint16_t param_id,
416  const uint8_t* data,
417  size_t data_len);
418 
420  const LlrpSavedRdmCommand* received_cmd,
421  const uint8_t* response_data,
422  uint8_t response_data_len);
424  const LlrpSavedRdmCommand* received_cmd,
425  rdm_nack_reason_t nack_reason);
426 
427 #ifdef __cplusplus
428 };
429 #endif
430 
435 #endif /* RDMNET_CONTROLLER_H_ */
API definitions used by RDMnet clients (controllers and devices)
etcpal_error_t
rdmnet_disconnect_reason_t
Definition: common.h:85
rdmnet_command_class_t
An RDM command class, for RDMnet purposes.
Definition: common.h:371
client_list_action_t
Definition: client.h:50
int rdmnet_client_scope_t
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
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:436
etcpal_error_t rdmnet_controller_create(const RdmnetControllerConfig *config, rdmnet_controller_t *handle)
Create a new instance of RDMnet controller functionality.
Definition: controller.c:255
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:869
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:756
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:836
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:330
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:146
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:182
struct RdmnetControllerCallbacks RdmnetControllerCallbacks
etcpal_error_t rdmnet_controller_destroy(rdmnet_controller_t controller_handle, rdmnet_disconnect_reason_t reason)
Destroy a controller instance.
Definition: controller.c:293
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:713
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:542
bool(* 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:118
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:666
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:154
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:225
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:574
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:366
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:508
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:474
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:172
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:618
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:795
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:130
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:402
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:902
struct RdmnetControllerConfig RdmnetControllerConfig
A set of information that defines the startup parameters of an RDMnet Controller.
int rdmnet_controller_t
Definition: controller.h:54
struct RdmnetControllerRdmData RdmnetControllerRdmData
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:185
Basic types for parsed RDMnet messages.
Definition: message.h:440
Definition: message.h:460
Definition: client.h:164
Definition: client.h:151
Definition: client.h:196
Definition: controller.h:153
RdmnetControllerResponderIdsReceivedCallback responder_ids_received
Definition: controller.h:160
RdmnetControllerStatusReceivedCallback status_received
Definition: controller.h:159
RdmnetControllerClientListUpdateReceivedCallback client_list_update_received
Definition: controller.h:157
RdmnetControllerDisconnectedCallback disconnected
Definition: controller.h:156
RdmnetControllerConnectedCallback connected
Definition: controller.h:154
void * context
Definition: controller.h:161
RdmnetControllerConnectFailedCallback connect_failed
Definition: controller.h:155
RdmnetControllerRdmResponseReceivedCallback rdm_response_received
Definition: controller.h:158
A set of information that defines the startup parameters of an RDMnet Controller.
Definition: controller.h:273
RdmnetControllerCallbacks callbacks
Definition: controller.h:281
EtcPalUuid cid
Definition: controller.h:279
const char * search_domain
Definition: controller.h:308
bool create_llrp_target
Definition: controller.h:313
RdmnetControllerRdmData rdm_data
Definition: controller.h:291
RdmUid uid
Definition: controller.h:302
RdmnetControllerRdmCmdHandler rdm_handler
Definition: controller.h:286
Definition: controller.h:194
RdmnetControllerLlrpRdmCommandReceivedCallback llrp_rdm_command_received
Definition: controller.h:198
uint8_t * response_buf
Definition: controller.h:203
RdmnetControllerRdmCommandReceivedCallback rdm_command_received
Definition: controller.h:196
void * context
Definition: controller.h:205
Definition: controller.h:210
const char * software_version_label
Definition: controller.h:230
uint32_t software_version_id
A number representing the version of the controller software.
Definition: controller.h:224
uint16_t model_id
A number representing the product model which implements the controller.
Definition: controller.h:219
const char * device_model_description
Definition: controller.h:228
bool device_label_settable
Whether the library should allow the device_label to be changed remotely.
Definition: controller.h:249
const char * manufacturer_label
Definition: controller.h:226
const char * device_label
Definition: controller.h:232
uint16_t product_category
A number representing the product's primary function.
Definition: controller.h:244
A destination address for an RDM command in RDMnet's RPT protocol.
Definition: client.h:84
Definition: message.h:246
Definition: message.h:54
Definition: message.h:91
Definition: message.h:399
Definition: message.h:194
Definition: message.h:74
Definition: client.h:224
Definition: common.h:217