RDMnet  HEAD (unstable)
Implementation of ANSI E1.33 (RDMnet)
View other versions:
common.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_COMMON_H_
26 #define RDMNET_COMMON_H_
27 
28 #include "etcpal/error.h"
29 #include "etcpal/inet.h"
30 #include "etcpal/log.h"
31 #include "rdm/message.h"
32 #include "rdmnet/defs.h"
33 
47 #ifdef __cplusplus
48 extern "C" {
49 #endif
50 
52 typedef enum
53 {
55  kRptStatusUnknownRptUid = VECTOR_RPT_STATUS_UNKNOWN_RPT_UID,
57  kRptStatusRdmTimeout = VECTOR_RPT_STATUS_RDM_TIMEOUT,
59  kRptStatusInvalidRdmResponse = VECTOR_RPT_STATUS_RDM_INVALID_RESPONSE,
61  kRptStatusUnknownRdmUid = VECTOR_RPT_STATUS_UNKNOWN_RDM_UID,
63  kRptStatusUnknownEndpoint = VECTOR_RPT_STATUS_UNKNOWN_ENDPOINT,
65  kRptStatusBroadcastComplete = VECTOR_RPT_STATUS_BROADCAST_COMPLETE,
67  kRptStatusUnknownVector = VECTOR_RPT_STATUS_UNKNOWN_VECTOR,
69  kRptStatusInvalidMessage = VECTOR_RPT_STATUS_INVALID_MESSAGE,
71  kRptStatusInvalidCommandClass = VECTOR_RPT_STATUS_INVALID_COMMAND_CLASS
73 
75 typedef enum
76 {
78  kEptStatusUnknownCid = VECTOR_EPT_STATUS_UNKNOWN_CID,
80  kEptStatusUnknownVector = VECTOR_EPT_STATUS_UNKNOWN_VECTOR
82 
84 typedef enum
85 {
87  kRdmnetDisconnectShutdown = E133_DISCONNECT_SHUTDOWN,
89  kRdmnetDisconnectCapacityExhausted = E133_DISCONNECT_CAPACITY_EXHAUSTED,
91  kRdmnetDisconnectHardwareFault = E133_DISCONNECT_HARDWARE_FAULT,
93  kRdmnetDisconnectSoftwareFault = E133_DISCONNECT_SOFTWARE_FAULT,
95  kRdmnetDisconnectSoftwareReset = E133_DISCONNECT_SOFTWARE_RESET,
97  kRdmnetDisconnectIncorrectScope = E133_DISCONNECT_INCORRECT_SCOPE,
102  kRdmnetDisconnectRptReconfigure = E133_DISCONNECT_RPT_RECONFIGURE,
107  kRdmnetDisconnectLlrpReconfigure = E133_DISCONNECT_LLRP_RECONFIGURE,
112  kRdmnetDisconnectUserReconfigure = E133_DISCONNECT_USER_RECONFIGURE
114 
116 typedef enum
117 {
119  kRdmnetConnectOk = E133_CONNECT_OK,
121  kRdmnetConnectScopeMismatch = E133_CONNECT_SCOPE_MISMATCH,
123  kRdmnetConnectCapacityExceeded = E133_CONNECT_CAPACITY_EXCEEDED,
125  kRdmnetConnectDuplicateUid = E133_CONNECT_DUPLICATE_UID,
127  kRdmnetConnectInvalidClientEntry = E133_CONNECT_INVALID_CLIENT_ENTRY,
129  kRdmnetConnectInvalidUid = E133_CONNECT_INVALID_UID
131 
133 typedef enum
134 {
136  kRdmnetDynamicUidStatusOk = E133_DYNAMIC_UID_STATUS_OK,
138  kRdmnetDynamicUidStatusInvalidRequest = E133_DYNAMIC_UID_STATUS_INVALID_REQUEST,
140  kRdmnetDynamicUidStatusUidNotFound = E133_DYNAMIC_UID_STATUS_UID_NOT_FOUND,
142  kRdmnetDynamicUidStatusDuplicateRid = E133_DYNAMIC_UID_STATUS_DUPLICATE_RID,
144  kRdmnetDynamicUidStatusCapacityExhausted = E133_DYNAMIC_UID_STATUS_CAPACITY_EXHAUSTED
146 
148 typedef enum
149 {
171 
173 typedef enum
174 {
189 
193 typedef enum
194 {
204 
216 typedef struct RdmnetSyncRdmResponse
217 {
220 
222  union
223  {
230  rdm_nack_reason_t nack_reason;
233 
243 #define RDMNET_SYNC_SEND_RDM_ACK(response_ptr, response_data_len_in) \
244  if (response_ptr) \
245  { \
246  (response_ptr)->response_action = kRdmnetRdmResponseActionSendAck; \
247  (response_ptr)->response_data.response_data_len = (response_data_len_in); \
248  }
249 
255 #define RDMNET_SYNC_SEND_RDM_NACK(response_ptr, nack_reason_in) \
256  if (response_ptr) \
257  { \
258  (response_ptr)->response_action = kRdmnetRdmResponseActionSendNack; \
259  (response_ptr)->response_data.nack_reason = (nack_reason_in); \
260  }
261 
267 #define RDMNET_SYNC_DEFER_RDM_RESPONSE(response_ptr) \
268  if (response_ptr) \
269  { \
270  (response_ptr)->response_action = kRdmnetRdmResponseActionDefer; \
271  }
272 
277 #define RDMNET_SYNC_RETRY_LATER(response_ptr) \
278  if (response_ptr) \
279  { \
280  (response_ptr)->response_action = kRdmnetRdmResponseActionRetryLater; \
281  }
282 
286 typedef enum
287 {
298 
309 typedef struct RdmnetSyncEptResponse
310 {
313 
315  union
316  {
326 
335 #define RDMNET_SYNC_SEND_EPT_DATA(response_ptr, response_data_len_in) \
336  if (response_ptr) \
337  { \
338  (response_ptr)->response_action = kRdmnetEptResponseActionSendData; \
339  (response_ptr)->response_data.response_data_len = (response_data_len_in); \
340  }
341 
347 #define RDMNET_SYNC_SEND_EPT_STATUS(response_ptr, status_code_in) \
348  if (response_ptr) \
349  { \
350  (response_ptr)->response_action = kRdmnetEptResponseActionSendStatus; \
351  (response_ptr)->response_data.status_code = (status_code_in); \
352  }
353 
358 #define RDMNET_SYNC_DEFER_EPT_RESPONSE(response_ptr) \
359  if (response_ptr) \
360  { \
361  (response_ptr)->response_action = kRdmnetEptResponseActionDefer; \
362  }
363 
370 typedef enum
371 {
375  kRdmnetCCSetCommand = 0x30
377 
382 typedef struct RdmnetNetintConfig
383 {
388  size_t num_netints;
393 
403 #define RDMNET_NETINT_CONFIG_DEFAULT_INIT \
404  { \
405  NULL, 0, false \
406  }
407 
408 etcpal_error_t rdmnet_init(const EtcPalLogParams* log_params, const RdmnetNetintConfig* netint_config);
409 void rdmnet_deinit(void);
410 
418 
419 #ifdef __cplusplus
420 }
421 #endif
422 
427 #endif /* RDMNET_COMMON_H_ */
etcpal_error_t
rdmnet_ept_response_action_t
Definition: common.h:287
const char * rdmnet_rpt_status_code_to_string(rpt_status_code_t code)
Get a string representation of an RPT status code.
Definition: common.c:305
const char * rdmnet_ept_status_code_to_string(ept_status_code_t code)
Get a string representation of an EPT status code.
Definition: common.c:324
ept_status_code_t
Definition: common.h:76
const char * rdmnet_dynamic_uid_status_to_string(rdmnet_dynamic_uid_status_t code)
Get a string description of an RDMnet Dynamic UID status code.
Definition: common.c:466
struct RdmnetNetintConfig RdmnetNetintConfig
rdmnet_disconnect_reason_t
Definition: common.h:85
rdmnet_command_class_t
An RDM command class, for RDMnet purposes.
Definition: common.h:371
rdmnet_connect_fail_event_t
Definition: common.h:149
struct RdmnetSyncEptResponse RdmnetSyncEptResponse
rdmnet_disconnect_event_t
Definition: common.h:174
const char * rdmnet_connect_fail_event_to_string(rdmnet_connect_fail_event_t event)
Get a string description of an RDMnet connection failure event.
Definition: common.c:350
const char * rdmnet_disconnect_event_to_string(rdmnet_disconnect_event_t event)
Get a string description of an RDMnet disconnect event.
Definition: common.c:378
struct RdmnetSyncRdmResponse RdmnetSyncRdmResponse
rpt_status_code_t
Definition: common.h:53
void rdmnet_deinit(void)
Deinitialize the RDMnet library.
Definition: common.c:275
rdmnet_rdm_response_action_t
Definition: common.h:194
const char * rdmnet_disconnect_reason_to_string(rdmnet_disconnect_reason_t code)
Get a string description of an RDMnet disconnect reason code.
Definition: common.c:438
etcpal_error_t rdmnet_init(const EtcPalLogParams *log_params, const RdmnetNetintConfig *netint_config)
Initialize the RDMnet library.
Definition: common.c:220
rdmnet_connect_status_t
Definition: common.h:117
const char * rdmnet_connect_status_to_string(rdmnet_connect_status_t code)
Get a string description of an RDMnet connect status code.
Definition: common.c:407
rdmnet_dynamic_uid_status_t
Definition: common.h:134
@ kRdmnetEptResponseActionSendStatus
Definition: common.h:291
@ kRdmnetEptResponseActionSendData
Definition: common.h:289
@ kRdmnetEptResponseActionDefer
Definition: common.h:296
@ kEptStatusUnknownCid
Definition: common.h:78
@ kEptStatusUnknownVector
Definition: common.h:80
@ kRdmnetDisconnectSoftwareFault
Definition: common.h:93
@ kRdmnetDisconnectUserReconfigure
Definition: common.h:112
@ kRdmnetDisconnectHardwareFault
Definition: common.h:91
@ kRdmnetDisconnectShutdown
Definition: common.h:87
@ kRdmnetDisconnectRptReconfigure
Definition: common.h:102
@ kRdmnetDisconnectIncorrectScope
Definition: common.h:97
@ kRdmnetDisconnectLlrpReconfigure
Definition: common.h:107
@ kRdmnetDisconnectSoftwareReset
Definition: common.h:95
@ kRdmnetDisconnectCapacityExhausted
Definition: common.h:89
@ kRdmnetCCSetCommand
Definition: common.h:375
@ kRdmnetCCGetCommand
Definition: common.h:373
@ kRdmnetConnectFailRejected
Definition: common.h:169
@ kRdmnetConnectFailNoReply
Definition: common.h:164
@ kRdmnetConnectFailSocketFailure
Definition: common.h:154
@ kRdmnetConnectFailTcpLevel
Definition: common.h:159
@ kRdmnetDisconnectNoHeartbeat
Definition: common.h:181
@ kRdmnetDisconnectRedirected
Definition: common.h:183
@ kRdmnetDisconnectAbruptClose
Definition: common.h:176
@ kRdmnetDisconnectGracefulRemoteInitiated
Definition: common.h:185
@ kRdmnetDisconnectGracefulLocalInitiated
Definition: common.h:187
@ kRptStatusRdmTimeout
Definition: common.h:57
@ kRptStatusUnknownEndpoint
Definition: common.h:63
@ kRptStatusUnknownVector
Definition: common.h:67
@ kRptStatusInvalidMessage
Definition: common.h:69
@ kRptStatusInvalidRdmResponse
Definition: common.h:59
@ kRptStatusInvalidCommandClass
Definition: common.h:71
@ kRptStatusBroadcastComplete
Definition: common.h:65
@ kRptStatusUnknownRdmUid
Definition: common.h:61
@ kRptStatusUnknownRptUid
Definition: common.h:55
@ kRdmnetRdmResponseActionRetryLater
Definition: common.h:202
@ kRdmnetRdmResponseActionSendNack
Definition: common.h:198
@ kRdmnetRdmResponseActionDefer
Definition: common.h:200
@ kRdmnetRdmResponseActionSendAck
Definition: common.h:196
@ kRdmnetConnectInvalidClientEntry
Definition: common.h:127
@ kRdmnetConnectDuplicateUid
Definition: common.h:125
@ kRdmnetConnectOk
Definition: common.h:119
@ kRdmnetConnectInvalidUid
Definition: common.h:129
@ kRdmnetConnectScopeMismatch
Definition: common.h:121
@ kRdmnetConnectCapacityExceeded
Definition: common.h:123
@ kRdmnetDynamicUidStatusOk
Definition: common.h:136
@ kRdmnetDynamicUidStatusUidNotFound
Definition: common.h:140
@ kRdmnetDynamicUidStatusCapacityExhausted
Definition: common.h:144
@ kRdmnetDynamicUidStatusDuplicateRid
Definition: common.h:142
@ kRdmnetDynamicUidStatusInvalidRequest
Definition: common.h:138
Definition: common.h:383
bool no_netints
Definition: common.h:391
size_t num_netints
Definition: common.h:388
const EtcPalMcastNetintId * netints
Definition: common.h:386
Definition: common.h:310
ept_status_code_t status_code
Definition: common.h:323
union RdmnetSyncEptResponse::@1 response_data
rdmnet_ept_response_action_t response_action
Definition: common.h:312
size_t response_data_len
Definition: common.h:321
Definition: common.h:217
union RdmnetSyncRdmResponse::@0 response_data
size_t response_data_len
Definition: common.h:228
rdm_nack_reason_t nack_reason
Definition: common.h:230
rdmnet_rdm_response_action_t response_action
Definition: common.h:219