RDMnet  HEAD (unstable)
Implementation of ANSI E1.33 (RDMnet)
View other versions:
message.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_MESSAGE_H_
26 #define RDMNET_MESSAGE_H_
27 
28 #include <stdbool.h>
29 #include <stddef.h>
30 #include <stdint.h>
31 #include "etcpal/acn_rlp.h"
32 #include "etcpal/inet.h"
33 #include "etcpal/uuid.h"
34 #include "rdm/message.h"
35 #include "rdm/uid.h"
36 #include "rdmnet/common.h"
37 
43 #ifdef __cplusplus
44 extern "C" {
45 #endif
46 
53 typedef struct RdmnetRdmCommand
54 {
58  uint16_t dest_endpoint;
60  uint32_t seq_num;
62  RdmCommandHeader rdm_header;
64  const uint8_t* data;
66  uint8_t data_len;
68 
70 #define RDMNET_COMMAND_IS_TO_DEFAULT_RESPONDER(cmd_ptr) ((cmd_ptr) && ((cmd_ptr)->dest_endpoint == E133_NULL_ENDPOINT))
71 
73 typedef struct RdmnetSavedRdmCommand
74 {
78  uint16_t dest_endpoint;
80  uint32_t seq_num;
82  RdmCommandHeader rdm_header;
84  uint8_t data[RDM_MAX_PDL];
86  uint8_t data_len;
88 
90 typedef struct RdmnetRdmResponse
91 {
95  uint16_t source_endpoint;
97  uint32_t seq_num;
103 
105  RdmCommandHeader original_cmd_header;
107  const uint8_t* original_cmd_data;
113 
115  RdmResponseHeader rdm_header;
117  const uint8_t* rdm_data;
119  size_t rdm_data_len;
120 
130 
139 {
143  uint16_t source_endpoint;
145  uint32_t seq_num;
151 
153  RdmCommandHeader original_cmd_header;
155  uint8_t original_cmd_data[RDM_MAX_PDL];
161 
163  RdmResponseHeader rdm_header;
168  uint8_t* rdm_data;
170  size_t rdm_data_len;
172 
181 #define RDMNET_RESP_ORIGINAL_COMMAND_INCLUDED(resp) ((resp) && ((resp)->seq_num == 0))
182 
193 typedef struct RdmnetRptStatus
194 {
196  RdmUid source_uid;
198  uint16_t source_endpoint;
200  uint32_t seq_num;
204  const char* status_string;
206 
215 typedef struct RdmnetSavedRptStatus
216 {
218  RdmUid source_uid;
220  uint16_t source_endpoint;
222  uint32_t seq_num;
232 
235 {
239  RdmUid uid;
243 
246 {
250  size_t num_mappings;
259 
270 typedef struct RdmnetEptData
271 {
275  uint16_t manufacturer_id;
277  uint16_t protocol_id;
279  const uint8_t* data;
281  size_t data_len;
283 
291 typedef struct RdmnetSavedEptData
292 {
296  uint16_t manufacturer_id;
298  uint16_t protocol_id;
303  const uint8_t* data;
305  size_t data_len;
307 
309 typedef struct RdmnetEptStatus
310 {
316  const char* status_string;
318 
327 typedef struct RdmnetSavedEptStatus
328 {
338  const char* status_string;
340 
351 typedef enum
352 {
354  kRPTClientTypeDevice = E133_RPT_CLIENT_TYPE_DEVICE,
356  kRPTClientTypeController = E133_RPT_CLIENT_TYPE_CONTROLLER,
358  kRPTClientTypeUnknown = 0xffffffff
360 
362 typedef struct RdmnetRptClientEntry
363 {
365  RdmUid uid;
369 
371 #define EPT_PROTOCOL_STRING_PADDED_LENGTH 32
372 
379 typedef struct RdmnetEptSubProtocol
380 {
382  uint16_t manufacturer_id;
384  uint16_t protocol_id;
386  const char* protocol_string;
388 
390 typedef struct RdmnetEptClientEntry
391 {
394  size_t num_protocols;
396 
398 typedef struct RdmnetRptClientList
399 {
412 
414 typedef struct RdmnetEptClientList
415 {
428 
439 typedef struct LlrpRdmCommand
440 {
444  uint32_t seq_num;
451  RdmCommandHeader rdm_header;
453  const uint8_t* data;
455  uint8_t data_len;
457 
459 typedef struct LlrpSavedRdmCommand
460 {
464  uint32_t seq_num;
471  RdmCommandHeader rdm_header;
473  uint8_t data[RDM_MAX_PDL];
475  uint8_t data_len;
477 
479 typedef struct LlrpRdmResponse
480 {
484  uint32_t seq_num;
486  RdmResponseHeader rdm_header;
488  const uint8_t* rdm_data;
490  uint8_t rdm_data_len;
492 
494 typedef struct LlrpSavedRdmResponse
495 {
499  uint32_t seq_num;
501  RdmResponseHeader rdm_header;
503  uint8_t rdm_data[RDM_MAX_PDL];
505  uint8_t rdm_data_len;
507 
512 const char* rdmnet_rpt_client_type_to_string(rpt_client_type_t client_type);
513 
517  RdmnetSavedRdmResponse* previously_saved_response);
519 
521  RdmnetSavedRdmResponse* saved_resp_new);
523  RdmnetSavedRptStatus* saved_status_new);
524 
527 
530 
533  RdmnetSavedEptStatus* saved_status_new);
534 
537 
541  LlrpSavedRdmResponse* saved_resp_new);
542 
543 #ifdef __cplusplus
544 }
545 #endif
546 
551 #endif /* RDMNET_MESSAGE_H_ */
Functions and definitions common to all RDMnet API modules.
etcpal_error_t
struct RdmnetSavedEptData RdmnetSavedEptData
An EPT data message received over RDMnet and saved for later processing.
etcpal_error_t rdmnet_copy_saved_rdm_response(const RdmnetSavedRdmResponse *saved_resp_old, RdmnetSavedRdmResponse *saved_resp_new)
Copy the data from a saved RDM response to a different saved RDM response.
Definition: message.c:225
etcpal_error_t rdmnet_free_saved_rdm_response(RdmnetSavedRdmResponse *saved_response)
Free the memory owned by a saved RDM response.
Definition: message.c:265
etcpal_error_t rdmnet_free_saved_ept_status(RdmnetSavedEptStatus *saved_status)
Free the memory owned by a saved EPT status message.
Definition: message.c:424
struct RdmnetSavedRdmCommand RdmnetSavedRdmCommand
struct RdmnetEptStatus RdmnetEptStatus
ept_status_code_t
Definition: common.h:76
etcpal_error_t rdmnet_copy_saved_llrp_rdm_response(const LlrpSavedRdmResponse *saved_resp_old, LlrpSavedRdmResponse *saved_resp_new)
Copy the data from a saved LLRP RDM response to a different saved LLRP RDM response.
Definition: message.c:491
struct RdmnetSavedEptStatus RdmnetSavedEptStatus
An EPT status received over RDMnet and saved for later processing.
etcpal_error_t rdmnet_append_to_saved_rdm_response(const RdmnetRdmResponse *new_response, RdmnetSavedRdmResponse *previously_saved_response)
Append more data to a SavedRdmResponse's parameter data.
Definition: message.c:152
etcpal_error_t rdmnet_save_llrp_rdm_response(const LlrpRdmResponse *response, LlrpSavedRdmResponse *saved_response)
Save the data in a received LLRP RDM response for later use from a different context.
Definition: message.c:469
struct RdmnetDynamicUidAssignmentList RdmnetDynamicUidAssignmentList
etcpal_error_t rdmnet_save_rdm_command(const RdmnetRdmCommand *command, RdmnetSavedRdmCommand *saved_command)
Save the data in a received RDM command for later use with API functions from a different context.
Definition: message.c:70
etcpal_error_t rdmnet_free_saved_rpt_status(RdmnetSavedRptStatus *saved_status)
Free the memory owned by a saved RPT status message.
Definition: message.c:291
struct LlrpRdmCommand LlrpRdmCommand
struct RdmnetRdmCommand RdmnetRdmCommand
etcpal_error_t rdmnet_copy_saved_ept_data(const RdmnetSavedEptData *saved_data_old, RdmnetSavedEptData *saved_data_new)
Copy the data from a saved EPT data message to a different saved EPT data message.
Definition: message.c:368
struct RdmnetEptSubProtocol RdmnetEptSubProtocol
A description of an EPT sub-protocol.
struct RdmnetDynamicUidMapping RdmnetDynamicUidMapping
struct RdmnetSavedRdmResponse RdmnetSavedRdmResponse
An RDM response received over RDMnet and saved for later processing.
struct LlrpRdmResponse LlrpRdmResponse
etcpal_error_t rdmnet_save_ept_data(const RdmnetEptData *data, RdmnetSavedEptData *saved_data)
Save the data in a received EPT data message for later use from a different context.
Definition: message.c:323
etcpal_error_t rdmnet_save_llrp_rdm_command(const LlrpRdmCommand *command, LlrpSavedRdmCommand *saved_command)
Save the data in a received LLRP RDM command for later use with API functions from a different contex...
Definition: message.c:443
struct RdmnetRdmResponse RdmnetRdmResponse
rpt_client_type_t
Definition: message.h:352
rpt_status_code_t
Definition: common.h:53
etcpal_error_t rdmnet_free_saved_ept_data(RdmnetSavedEptData *saved_data)
Free the memory owned by a saved EPT data message.
Definition: message.c:407
etcpal_error_t rdmnet_save_rpt_status(const RdmnetRptStatus *status, RdmnetSavedRptStatus *saved_status)
Save the data in a received RPT status message for later use from a different context.
Definition: message.c:178
etcpal_error_t rdmnet_copy_saved_rpt_status(const RdmnetSavedRptStatus *saved_status_old, RdmnetSavedRptStatus *saved_status_new)
Copy the data from a saved RPT status message to a different saved RPT status message.
Definition: message.c:246
struct LlrpSavedRdmCommand LlrpSavedRdmCommand
etcpal_error_t rdmnet_save_rdm_response(const RdmnetRdmResponse *response, RdmnetSavedRdmResponse *saved_response)
Save the data in a received RDM response for later use from a different context.
Definition: message.c:102
const char * rdmnet_rpt_client_type_to_string(rpt_client_type_t client_type)
Get a string description of an RPT client type.
Definition: message.c:50
etcpal_error_t rdmnet_copy_saved_ept_status(const RdmnetSavedEptStatus *saved_status_old, RdmnetSavedEptStatus *saved_status_new)
Copy the data from a saved EPT status message to a different saved EPT status message.
Definition: message.c:388
struct RdmnetEptData RdmnetEptData
struct RdmnetEptClientEntry RdmnetEptClientEntry
struct RdmnetEptClientList RdmnetEptClientList
struct LlrpSavedRdmResponse LlrpSavedRdmResponse
etcpal_error_t rdmnet_save_ept_status(const RdmnetEptStatus *status, RdmnetSavedEptStatus *saved_status)
Save the data in a received EPT status message for later use from a different context.
Definition: message.c:348
struct RdmnetRptStatus RdmnetRptStatus
struct RdmnetSavedRptStatus RdmnetSavedRptStatus
An RPT status received over RDMnet and saved for later processing.
struct RdmnetRptClientList RdmnetRptClientList
rdmnet_dynamic_uid_status_t
Definition: common.h:134
struct RdmnetRptClientEntry RdmnetRptClientEntry
@ kRPTClientTypeDevice
Definition: message.h:354
@ kRPTClientTypeUnknown
Definition: message.h:358
@ kRPTClientTypeController
Definition: message.h:356
Definition: message.h:440
EtcPalUuid source_cid
Definition: message.h:442
EtcPalMcastNetintId netint_id
Definition: message.h:449
const uint8_t * data
Definition: message.h:453
uint32_t seq_num
Definition: message.h:444
RdmCommandHeader rdm_header
Definition: message.h:451
uint8_t data_len
Definition: message.h:455
Definition: message.h:480
EtcPalUuid source_cid
Definition: message.h:482
const uint8_t * rdm_data
Definition: message.h:488
RdmResponseHeader rdm_header
Definition: message.h:486
uint32_t seq_num
Definition: message.h:484
uint8_t rdm_data_len
Definition: message.h:490
Definition: message.h:460
EtcPalUuid source_cid
Definition: message.h:462
uint8_t data[RDM_MAX_PDL]
Definition: message.h:473
EtcPalMcastNetintId netint_id
Definition: message.h:469
uint32_t seq_num
Definition: message.h:464
RdmCommandHeader rdm_header
Definition: message.h:471
uint8_t data_len
Definition: message.h:475
Definition: message.h:495
EtcPalUuid source_cid
Definition: message.h:497
RdmResponseHeader rdm_header
Definition: message.h:501
uint32_t seq_num
Definition: message.h:499
uint8_t rdm_data[RDM_MAX_PDL]
Definition: message.h:503
uint8_t rdm_data_len
Definition: message.h:505
Definition: message.h:246
RdmnetDynamicUidMapping * mappings
Definition: message.h:248
bool more_coming
Definition: message.h:257
size_t num_mappings
Definition: message.h:250
Definition: message.h:235
EtcPalUuid rid
Definition: message.h:241
rdmnet_dynamic_uid_status_t status_code
Definition: message.h:237
RdmUid uid
Definition: message.h:239
Definition: message.h:391
RdmnetEptSubProtocol * protocols
Definition: message.h:393
EtcPalUuid cid
Definition: message.h:392
size_t num_protocols
Definition: message.h:394
Definition: message.h:415
bool more_coming
Definition: message.h:426
RdmnetEptClientEntry * client_entries
Definition: message.h:417
size_t num_client_entries
Definition: message.h:419
Definition: message.h:271
EtcPalUuid source_cid
Definition: message.h:273
uint16_t manufacturer_id
Definition: message.h:275
const uint8_t * data
Definition: message.h:279
size_t data_len
Definition: message.h:281
uint16_t protocol_id
Definition: message.h:277
Definition: message.h:310
const char * status_string
Definition: message.h:316
ept_status_code_t status_code
Definition: message.h:314
EtcPalUuid source_cid
Definition: message.h:312
A description of an EPT sub-protocol.
Definition: message.h:380
uint16_t manufacturer_id
Definition: message.h:382
const char * protocol_string
Definition: message.h:386
uint16_t protocol_id
Definition: message.h:384
Definition: message.h:54
const uint8_t * data
Definition: message.h:64
uint32_t seq_num
Definition: message.h:60
RdmUid rdmnet_source_uid
Definition: message.h:56
RdmCommandHeader rdm_header
Definition: message.h:62
uint8_t data_len
Definition: message.h:66
uint16_t dest_endpoint
Definition: message.h:58
Definition: message.h:91
RdmCommandHeader original_cmd_header
Definition: message.h:105
const uint8_t * rdm_data
Definition: message.h:117
uint8_t original_cmd_data_len
Definition: message.h:112
uint16_t source_endpoint
Definition: message.h:95
size_t rdm_data_len
Definition: message.h:119
RdmResponseHeader rdm_header
Definition: message.h:115
uint32_t seq_num
Definition: message.h:97
RdmUid rdmnet_source_uid
Definition: message.h:93
bool more_coming
Definition: message.h:128
const uint8_t * original_cmd_data
Definition: message.h:107
bool is_response_to_me
Whether the response was sent in response to a command previously sent by this controller.
Definition: message.h:102
Definition: message.h:363
EtcPalUuid cid
Definition: message.h:364
rpt_client_type_t type
Definition: message.h:366
EtcPalUuid binding_cid
Definition: message.h:367
RdmUid uid
Definition: message.h:365
Definition: message.h:399
RdmnetRptClientEntry * client_entries
Definition: message.h:401
bool more_coming
Definition: message.h:410
size_t num_client_entries
Definition: message.h:403
Definition: message.h:194
const char * status_string
Definition: message.h:204
RdmUid source_uid
Definition: message.h:196
uint16_t source_endpoint
Definition: message.h:198
uint32_t seq_num
Definition: message.h:200
rpt_status_code_t status_code
Definition: message.h:202
An EPT data message received over RDMnet and saved for later processing.
Definition: message.h:292
EtcPalUuid source_cid
Definition: message.h:294
uint16_t manufacturer_id
Definition: message.h:296
const uint8_t * data
Definition: message.h:303
size_t data_len
Definition: message.h:305
uint16_t protocol_id
Definition: message.h:298
An EPT status received over RDMnet and saved for later processing.
Definition: message.h:328
const char * status_string
Definition: message.h:338
ept_status_code_t status_code
Definition: message.h:332
EtcPalUuid source_cid
Definition: message.h:330
Definition: message.h:74
uint8_t data[RDM_MAX_PDL]
Definition: message.h:84
uint32_t seq_num
Definition: message.h:80
RdmUid rdmnet_source_uid
Definition: message.h:76
RdmCommandHeader rdm_header
Definition: message.h:82
uint8_t data_len
Definition: message.h:86
uint16_t dest_endpoint
Definition: message.h:78
An RDM response received over RDMnet and saved for later processing.
Definition: message.h:139
RdmCommandHeader original_cmd_header
Definition: message.h:153
uint8_t original_cmd_data_len
Definition: message.h:160
uint16_t source_endpoint
Definition: message.h:143
size_t rdm_data_len
Definition: message.h:170
uint8_t original_cmd_data[RDM_MAX_PDL]
Definition: message.h:155
RdmResponseHeader rdm_header
Definition: message.h:163
uint32_t seq_num
Definition: message.h:145
RdmUid rdmnet_source_uid
Definition: message.h:141
uint8_t * rdm_data
Definition: message.h:168
bool is_response_to_me
Whether the response was sent in response to a command previously sent by this controller.
Definition: message.h:150
An RPT status received over RDMnet and saved for later processing.
Definition: message.h:216
RdmUid source_uid
Definition: message.h:218
uint16_t source_endpoint
Definition: message.h:220
uint32_t seq_num
Definition: message.h:222
rpt_status_code_t status_code
Definition: message.h:224
char * status_string
Definition: message.h:230