RDM  HEAD (unstable)
Implementation of ANSI E1.31 (Streaming ACN)
View other versions:
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.