RDM  HEAD (unstable)
Implementation of ANSI E1.31 (Streaming ACN)
View other versions:
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Modules Pages
message.h File Reference

Contains type definitions for use with RDM (E1.20) messages. More...

Go to the source code of this file.

Data Structures

struct  RdmBuffer
 
struct  RdmCommandHeader
 
struct  RdmResponseHeader
 

Macros

#define RDM_MAX_BYTES   257
 
#define RDM_MIN_BYTES   26
 
#define RDM_MAX_PDL   231
 
#define RDM_HEADER_SIZE   24
 
#define RDM_NUM_STANDARD_NR_CODES   20
 
#define RDM_GET_COMMAND_CLASS(rdmbufptr)   ((rdmbufptr)->data[RDM_OFFSET_COMMAND_CLASS])
 Get the command class value from a packed RDM command. More...
 
#define RDM_GET_TRANSACTION_NUM(rdmbufptr)   ((rdmbufptr)->data[RDM_OFFSET_TRANSACTION])
 Get the RDM transaction number from a packed RDM command. More...
 
#define RDM_PACKED_SIZE(data_len)   (RDM_HEADER_SIZE + (data_len) + 2u)
 Get the packed size in bytes of an RDM message. More...
 
RDM packet offsets
#define RDM_OFFSET_STARTCODE   0
 
#define RDM_OFFSET_SUBSTART   1
 
#define RDM_OFFSET_LENGTH   2
 
#define RDM_OFFSET_DEST_MANUFACTURER   3
 
#define RDM_OFFSET_DEST_DEVICE   5
 
#define RDM_OFFSET_SRC_MANUFACTURER   9
 
#define RDM_OFFSET_SRC_DEVICE   11
 
#define RDM_OFFSET_TRANSACTION   15
 
#define RDM_OFFSET_PORTID_RESPTYPE   16
 
#define RDM_OFFSET_MSGCOUNT   17
 
#define RDM_OFFSET_SUBDEVICE   18
 
#define RDM_OFFSET_COMMAND_CLASS   20
 
#define RDM_OFFSET_PARAM_ID   21
 
#define RDM_OFFSET_PARAM_DATA_LEN   23
 
#define RDM_OFFSET_PARAM_DATA   24
 

Typedefs

typedef struct RdmBuffer RdmBuffer
 
typedef struct RdmCommandHeader RdmCommandHeader
 
typedef struct RdmResponseHeader RdmResponseHeader
 

Enumerations

enum  rdm_command_class_t {
  kRdmCCDiscoveryCommand = E120_DISCOVERY_COMMAND , kRdmCCDiscoveryCommandResponse = E120_DISCOVERY_COMMAND_RESPONSE , kRdmCCGetCommand = E120_GET_COMMAND , kRdmCCGetCommandResponse = E120_GET_COMMAND_RESPONSE ,
  kRdmCCSetCommand = E120_SET_COMMAND , kRdmCCSetCommandResponse = E120_SET_COMMAND_RESPONSE
}
 
enum  rdm_response_type_t { kRdmResponseTypeAck = E120_RESPONSE_TYPE_ACK , kRdmResponseTypeAckTimer = E120_RESPONSE_TYPE_ACK_TIMER , kRdmResponseTypeNackReason = E120_RESPONSE_TYPE_NACK_REASON , kRdmResponseTypeAckOverflow = E120_RESPONSE_TYPE_ACK_OVERFLOW }
 
enum  rdm_nack_reason_t {
  kRdmNRUnknownPid = E120_NR_UNKNOWN_PID , kRdmNRFormatError = E120_NR_FORMAT_ERROR , kRdmNRHardwareFault = E120_NR_HARDWARE_FAULT , kRdmNRProxyReject = E120_NR_PROXY_REJECT ,
  kRdmNRWriteProtect = E120_NR_WRITE_PROTECT , kRdmNRUnsupportedCommandClass = E120_NR_UNSUPPORTED_COMMAND_CLASS , kRdmNRDataOutOfRange = E120_NR_DATA_OUT_OF_RANGE , kRdmNRBufferFull = E120_NR_BUFFER_FULL ,
  kRdmNRPacketSizeUnsupported = E120_NR_PACKET_SIZE_UNSUPPORTED , kRdmNRSubDeviceOutOfRange = E120_NR_SUB_DEVICE_OUT_OF_RANGE , kRdmNRProxyBufferFull = E120_NR_PROXY_BUFFER_FULL , kRdmNRActionNotSupported = E137_2_NR_ACTION_NOT_SUPPORTED ,
  kRdmNREndpointNumberInvalid = E137_7_NR_ENDPOINT_NUMBER_INVALID , kRdmNRInvalidEndpointMode = E137_7_NR_INVALID_ENDPOINT_MODE , kRdmNRUnknownUid = E137_7_NR_UNKNOWN_UID , kRdmNRUnknownScope = E133_NR_UNKNOWN_SCOPE ,
  kRdmNRInvalidStaticConfigType = E133_NR_INVALID_STATIC_CONFIG_TYPE , kRdmNRInvalidIpv4Address = E133_NR_INVALID_IPV4_ADDRESS , kRdmNRInvalidIpv6Address = E133_NR_INVALID_IPV6_ADDRESS , kRdmNRInvalidPort = E133_NR_INVALID_PORT
}
 

Functions

void rdm_pack_checksum (uint8_t *buffer, size_t data_len_without_checksum)
 Calculate and pack an RDM checksum at the end of an RDM message. More...
 
bool rdm_validate_msg (const RdmBuffer *buffer)
 Perform basic validation of a packed RDM message. More...
 
bool rdm_command_header_is_valid (const RdmCommandHeader *cmd_header)
 Determine whether the values contained in a command header are valid for an RDM command. More...
 
bool rdm_response_header_is_valid (const RdmResponseHeader *resp_header)
 Determine whether the values contained in a response header are valid for an RDM response. More...
 
etcpal_error_t rdm_pack_command (const RdmCommandHeader *cmd_header, const uint8_t *cmd_data, uint8_t cmd_data_len, RdmBuffer *buffer)
 Convert an RDM command header and data to the RDM wire format. More...
 
etcpal_error_t rdm_pack_command_with_custom_buf (const RdmCommandHeader *cmd_header, const uint8_t *cmd_data, uint8_t cmd_data_len, uint8_t *buf, size_t buf_len)
 Convert an RDM command header and data to the RDM wire format in a user-provided buffer. More...
 
etcpal_error_t rdm_pack_response (const RdmCommandHeader *cmd_header, uint8_t msg_count, const uint8_t *response_data, uint8_t response_data_len, RdmBuffer *buffer)
 Serialize an RDM ACK response to a previously-received command. More...
 
etcpal_error_t rdm_pack_overflow_response (const RdmCommandHeader *cmd_header, const uint8_t *response_data, uint8_t response_data_len, RdmBuffer *buffer)
 Serialize an RDM ACK_OVERFLOW response to a previously-received command. More...
 
etcpal_error_t rdm_pack_nack_response (const RdmCommandHeader *cmd_header, uint8_t msg_count, rdm_nack_reason_t nack_reason, RdmBuffer *buffer)
 Serialize an RDM NACK response to a previously-received command. More...
 
etcpal_error_t rdm_pack_timer_response (const RdmCommandHeader *cmd_header, uint8_t msg_count, unsigned int delay_time_ms, RdmBuffer *buffer)
 Serialize an RDM ACK_TIMER response to a previously-received command. More...
 
etcpal_error_t rdm_pack_dub_response (const RdmUid *responder_uid, RdmBuffer *buffer)
 Serialize an RDM DISC_UNIQUE_BRANCH response. More...
 
size_t rdm_get_num_responses_needed (uint16_t param_id, size_t response_data_len)
 Get the number of RDM responses needed to send the given response data. More...
 
etcpal_error_t rdm_pack_full_response (const RdmCommandHeader *cmd_header, const uint8_t *response_data, size_t response_data_len, RdmBuffer *buffers, size_t num_buffers)
 Serialize a full RDM ACK response, splitting ACK_OVERFLOW responses if necessary. More...
 
etcpal_error_t rdm_append_parameter_data (RdmBuffer *buffer, const uint8_t *additional_data, uint8_t additional_data_len)
 Add additional parameter data to an already-serialized RDM command. More...
 
etcpal_error_t rdm_unpack_command (const RdmBuffer *buffer, RdmCommandHeader *cmd_header, const uint8_t **param_data, uint8_t *param_data_len)
 Deserialize an RDM command from its wire format. More...
 
etcpal_error_t rdm_unpack_response (const RdmBuffer *buffer, RdmResponseHeader *resp_header, const uint8_t **param_data, uint8_t *param_data_len)
 Deserialize an RDM response from its wire format. More...
 
etcpal_error_t rdm_unpack_dub_response (const RdmBuffer *buffer, RdmUid *responder_uid)
 Deserialize an RDM DISC_UNIQUE_BRANCH from its wire format. More...
 
unsigned int rdm_get_ack_timer_delay (const uint8_t *param_data)
 Get the ACK_TIMER delay in milliseconds from an ACK_TIMER message. More...
 
rdm_nack_reason_t rdm_get_nack_reason_code (const uint8_t *param_data)
 Get the NACK reason code from a NACK_REASON message. More...
 
const char * rdm_command_class_to_string (rdm_command_class_t command_class)
 Get a string representation of an RDM command class. More...
 
const char * rdm_response_type_to_string (rdm_response_type_t resp_type)
 Get a string representation of an RDM response type. More...
 
const char * rdm_nack_reason_to_string (rdm_nack_reason_t reason_code)
 Get a string representation of an RDM NACK reason code. More...
 

Detailed Description

Contains type definitions for use with RDM (E1.20) messages.