OLE Developer Guide  Latest Git
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
rdm.h
Go to the documentation of this file.
1 /*
2  * This library is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU Lesser General Public
4  * License as published by the Free Software Foundation; either
5  * version 2.1 of the License, or (at your option) any later version.
6  *
7  * This library is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
10  * Lesser General Public License for more details.
11  *
12  * You should have received a copy of the GNU Lesser General Public
13  * License along with this library; if not, write to the Free Software
14  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
15  *
16  * rdm.h
17  * Copyright (C) 2015 Simon Newton
18  */
19 
30 #ifndef FIRMWARE_SRC_RDM_H_
31 #define FIRMWARE_SRC_RDM_H_
32 
33 #include <stdbool.h>
34 #include <stdint.h>
35 
36 #include "uid.h"
37 
38 #ifdef __cplusplus
39 extern "C" {
40 #endif
41 
45 static const uint16_t SUBDEVICE_ROOT = 0u;
46 
50 static const uint16_t SUBDEVICE_ALL = 0xffffu;
51 
55 static const uint16_t SUBDEVICE_MAX = 0x0200u;
56 
60 enum { MAX_PRODUCT_DETAILS = 6 };
61 
65 static const uint8_t SUB_START_CODE = 0x01u;
66 
70 static const uint8_t RDM_CHECKSUM_LENGTH = 2u;
71 
75 static const uint8_t MESSAGE_LENGTH_OFFSET = 2u;
76 
80 static const uint8_t RDM_PARAM_DATA_LENGTH_OFFSET = 23u;
81 
85 static const uint8_t RDM_PARAM_DATA_OFFSET = 24u;
86 
90 static const uint16_t RDM_VERSION = 0x0100u;
91 
95 static const uint16_t MAX_DMX_START_ADDRESS = 512u;
96 
100 static const uint16_t INVALID_DMX_START_ADDRESS = 0xffffu;
101 
105 static const uint16_t MUTE_MANAGED_PROXY_FLAG = 0x01;
106 
110 static const uint16_t MUTE_SUBDEVICE_FLAG = 0x02;
111 
115 static const uint16_t MUTE_BOOTLOADER_FLAG = 0x04;
116 
120 static const uint16_t MUTE_PROXY_FLAG = 0x08;
121 
125 enum { RDM_DEFAULT_STRING_SIZE = 32 };
126 
130 enum { RDM_LANGUAGE_STRING_SIZE = 2 };
131 
135 enum { DUB_RESPONSE_LENGTH = 24 };
136 
140 enum { RDM_MAX_FRAME_SIZE = 257 };
141 
145 enum {
147 };
148 
152 enum { SENSOR_SUPPORTS_RECORDING_MASK = 0x01 };
153 
157 enum { SENSOR_SUPPORTS_LOWEST_HIGHEST_MASK = 0x02 };
158 
162 static const uint8_t ALL_SENSORS = 0xffu;
163 
167 static const uint16_t SENSOR_VALUE_UNSUPPORTED = 0u;
168 
169 /*
170  * @brief The maximum number of status messages per frame.
171  */
172 static const unsigned int MAX_STATUS_MESSAGES_PER_FRAME = 21u;
173 
174 /*
175  * @brief The maximum number of slot info entries in a RDM frame.
176  */
177 static const unsigned int MAX_SLOT_INFO_PER_FRAME = 46u;
178 
182 static const unsigned int MAX_DEFAULT_SLOT_VALUE_PER_FRAME = 77u;
183 
187 static const uint16_t MAX_PIN_CODE = 9999u;
188 
192 enum { DNS_HOST_NAME_SIZE = 63 };
193 
197 enum { DNS_DOMAIN_NAME_SIZE = 231 };
198 
202 enum {
205 };
206 
210 static const uint32_t NO_DEFAULT_ROUTE = 0u;
211 
215 static const uint32_t IPV4_UNCONFIGURED = 0u;
216 
220 static const uint8_t MAX_NETMASK = 32u;
221 
225 typedef enum {
226  DHCP_STATUS_INACTIVE = 0x00,
227  DHCP_STATUS_ACTIVE = 0x01,
228  DHCP_STATUS_UNKNOWN = 0x02
229 } DHCPMode;
230 
235 typedef enum {
238  GET_COMMAND = 0x20,
240  SET_COMMAND = 0x30,
243 
248 typedef enum {
249  ACK = 0x00,
250  ACK_TIMER = 0x01,
251  NACK_REASON = 0x02,
252  ACK_OVERFLOW = 0x03
254 
259 typedef enum {
260  // Discovery
261  PID_DISC_UNIQUE_BRANCH = 0x0001,
262  PID_DISC_MUTE = 0x0002,
263  PID_DISC_UN_MUTE = 0x0003,
264  // network management
265  PID_PROXIED_DEVICES = 0x0010,
266  PID_PROXIED_DEVICE_COUNT = 0x0011,
267  PID_COMMS_STATUS = 0x0015,
268  // status collection
269  PID_QUEUED_MESSAGE = 0x0020,
270  PID_STATUS_MESSAGES = 0x0030,
271  PID_STATUS_ID_DESCRIPTION = 0x0031,
272  PID_CLEAR_STATUS_ID = 0x0032,
273  PID_SUB_DEVICE_STATUS_REPORT_THRESHOLD = 0x0033,
274  // RDM information
275  PID_SUPPORTED_PARAMETERS = 0x0050,
276  PID_PARAMETER_DESCRIPTION = 0x0051,
277  // production information
278  PID_DEVICE_INFO = 0x0060,
279  PID_PRODUCT_DETAIL_ID_LIST = 0x0070,
280  PID_DEVICE_MODEL_DESCRIPTION = 0x0080,
281  PID_MANUFACTURER_LABEL = 0x0081,
282  PID_DEVICE_LABEL = 0x0082,
283  PID_FACTORY_DEFAULTS = 0x0090,
284  PID_LANGUAGE_CAPABILITIES = 0x00a0,
285  PID_LANGUAGE = 0x00b0,
286  PID_SOFTWARE_VERSION_LABEL = 0x00c0,
287  PID_BOOT_SOFTWARE_VERSION_ID = 0x00c1,
288  PID_BOOT_SOFTWARE_VERSION_LABEL = 0x00c2,
289  // DMX512
290  PID_DMX_PERSONALITY = 0x00e0,
291  PID_DMX_PERSONALITY_DESCRIPTION = 0x00e1,
292  PID_DMX_START_ADDRESS = 0x00f0,
293  PID_SLOT_INFO = 0x0120,
294  PID_SLOT_DESCRIPTION = 0x0121,
295  PID_DEFAULT_SLOT_VALUE = 0x0122,
296  // sensors
297  PID_SENSOR_DEFINITION = 0x0200,
298  PID_SENSOR_VALUE = 0x0201,
299  PID_RECORD_SENSORS = 0x0202,
300  // power/lamp settings
301  PID_DEVICE_HOURS = 0x0400,
302  PID_LAMP_HOURS = 0x0401,
303  PID_LAMP_STRIKES = 0x0402,
304  PID_LAMP_STATE = 0x0403,
305  PID_LAMP_ON_MODE = 0x0404,
306  PID_DEVICE_POWER_CYCLES = 0x0405,
307  // display settings
308  PID_DISPLAY_INVERT = 0x0500,
309  PID_DISPLAY_LEVEL = 0x0501,
310  // configuration
311  PID_PAN_INVERT = 0x0600,
312  PID_TILT_INVERT = 0x0601,
313  PID_PAN_TILT_SWAP = 0x0602,
314  PID_REAL_TIME_CLOCK = 0x0603,
315  // control
316  PID_IDENTIFY_DEVICE = 0x1000,
317  PID_RESET_DEVICE = 0x1001,
318  PID_POWER_STATE = 0x1010,
319  PID_PERFORM_SELFTEST = 0x1020,
320  PID_SELF_TEST_DESCRIPTION = 0x1021,
321  PID_CAPTURE_PRESET = 0x1030,
322  PID_PRESET_PLAYBACK = 0x1031,
323 
324  // E1.37-1 PIDS
325  // DMX512 setup
326  PID_DMX_BLOCK_ADDRESS = 0x0140,
327  PID_DMX_FAIL_MODE = 0x0141,
328  PID_DMX_STARTUP_MODE = 0x0142,
329 
330  // Dimmer Settings
331  PID_DIMMER_INFO = 0x0340,
332  PID_MINIMUM_LEVEL = 0x0341,
333  PID_MAXIMUM_LEVEL = 0x0342,
334  PID_CURVE = 0x0343,
335  PID_CURVE_DESCRIPTION = 0x0344,
336 
337  // Control
338  PID_OUTPUT_RESPONSE_TIME = 0x0345,
339  PID_OUTPUT_RESPONSE_TIME_DESCRIPTION = 0x0346,
340  PID_MODULATION_FREQUENCY = 0x0347,
341  PID_MODULATION_FREQUENCY_DESCRIPTION = 0x0348,
342 
343  // Power/Lamp Settings
344  PID_BURN_IN = 0x0440,
345 
346  // Configuration
347  PID_LOCK_PIN = 0x0640,
348  PID_LOCK_STATE = 0x0641,
349  PID_LOCK_STATE_DESCRIPTION = 0x0642,
350  PID_IDENTIFY_MODE = 0x1040,
351  PID_PRESET_INFO = 0x1041,
352  PID_PRESET_STATUS = 0x1042,
353  PID_PRESET_MERGEMODE = 0x1043,
354  PID_POWER_ON_SELF_TEST = 0x1044,
355 
356  // E1.37-2 PIDs
357  PID_LIST_INTERFACES = 0x0700,
358  PID_INTERFACE_LABEL = 0x0701,
359  PID_INTERFACE_HARDWARE_ADDRESS_TYPE1 = 0x0702,
360  PID_IPV4_DHCP_MODE = 0x0703,
361  PID_IPV4_ZEROCONF_MODE = 0x0704,
362  PID_IPV4_CURRENT_ADDRESS = 0x0705,
363  PID_IPV4_STATIC_ADDRESS = 0x0706,
364  PID_INTERFACE_RENEW_DHCP = 0x0707,
365  PID_INTERFACE_RELEASE_DHCP = 0x0708,
366  PID_INTERFACE_APPLY_CONFIGURATION = 0x0709,
367  PID_IPV4_DEFAULT_ROUTE = 0x070a,
368  PID_DNS_NAME_SERVER = 0x070b,
369  PID_DNS_HOSTNAME = 0x070c,
370  PID_DNS_DOMAIN_NAME = 0x070d,
371 } RDMPid;
372 
373 
377 typedef enum {
378  PID_DEVICE_MODEL = 0x8002,
379  PID_DEVICE_MODEL_LIST = 0x8003,
380  // 8004 is reserved for MODEL_ID_DESCRIPTION if we ever implement it
381  PID_PIXEL_TYPE = 0x8005,
382  PID_PIXEL_COUNT = 0x8006
384 
389 typedef enum {
390  NR_UNKNOWN_PID = 0x0000,
391  NR_FORMAT_ERROR = 0x0001,
392  NR_HARDWARE_FAULT = 0x0002,
393  NR_PROXY_REJECT = 0x0003,
394  NR_WRITE_PROTECT = 0x0004,
395  NR_UNSUPPORTED_COMMAND_CLASS = 0x0005,
396  NR_DATA_OUT_OF_RANGE = 0x0006,
397  NR_BUFFER_FULL = 0x0007,
398  NR_PACKET_SIZE_UNSUPPORTED = 0x0008,
399  NR_SUB_DEVICE_OUT_OF_RANGE = 0x0009,
400  NR_PROXY_BUFFER_FULL = 0x000a,
401  NR_ACTION_NOT_SUPPORTED = 0x000b,
402  NR_ENDPOINT_NUMBER_INVALID = 0x0011
403 } RDMNackReason;
404 
405 typedef enum {
406  STATUS_NONE = 0x0,
407  STATUS_GET_LAST_MESSAGE = 0x1,
408  STATUS_ADVISORY = 0x2,
409  STATUS_WARNING = 0x3,
410  STATUS_ERROR = 0x4,
411  STATUS_ADVISORY_CLEARED = 0x12,
412  STATUS_WARNING_CLEARED = 0x13,
413  STATUS_ERROR_CLEARED = 0x14,
414 } RDMStatusType;
415 
420 typedef enum {
421  PRODUCT_CATEGORY_NOT_DECLARED = 0x0000,
422  PRODUCT_CATEGORY_FIXTURE = 0x0100,
423  PRODUCT_CATEGORY_FIXTURE_FIXED = 0x0101,
424  PRODUCT_CATEGORY_FIXTURE_MOVING_YOKE = 0x0102,
425  PRODUCT_CATEGORY_FIXTURE_MOVING_MIRROR = 0x0103,
426  PRODUCT_CATEGORY_FIXTURE_OTHER = 0x01ff,
427  PRODUCT_CATEGORY_FIXTURE_ACCESSORY = 0x0200,
428  PRODUCT_CATEGORY_FIXTURE_ACCESSORY_COLOR = 0x0201,
429  PRODUCT_CATEGORY_FIXTURE_ACCESSORY_YOKE = 0x0202,
430  PRODUCT_CATEGORY_FIXTURE_ACCESSORY_MIRROR = 0x0203,
431  PRODUCT_CATEGORY_FIXTURE_ACCESSORY_EFFECT = 0x0204,
432  PRODUCT_CATEGORY_FIXTURE_ACCESSORY_BEAM = 0x0205,
433  PRODUCT_CATEGORY_FIXTURE_ACCESSORY_OTHER = 0x02ff,
434  PRODUCT_CATEGORY_PROJECTOR = 0x0300,
435  PRODUCT_CATEGORY_PROJECTOR_FIXED = 0x0301,
436  PRODUCT_CATEGORY_PROJECTOR_MOVING_YOKE = 0x0302,
437  PRODUCT_CATEGORY_PROJECTOR_MOVING_MIRROR = 0x0303,
438  PRODUCT_CATEGORY_PROJECTOR_OTHER = 0x03ff,
439  PRODUCT_CATEGORY_ATMOSPHERIC = 0x0400,
440  PRODUCT_CATEGORY_ATMOSPHERIC_EFFECT = 0x0401,
441  PRODUCT_CATEGORY_ATMOSPHERIC_PYRO = 0x0402,
442  PRODUCT_CATEGORY_ATMOSPHERIC_OTHER = 0x04ff,
443  PRODUCT_CATEGORY_DIMMER = 0x0500,
444  PRODUCT_CATEGORY_DIMMER_AC_INCANDESCENT = 0x0501,
445  PRODUCT_CATEGORY_DIMMER_AC_FLUORESCENT = 0x0502,
446  PRODUCT_CATEGORY_DIMMER_AC_COLDCATHODE = 0x0503,
447  PRODUCT_CATEGORY_DIMMER_AC_NONDIM = 0x0504,
448  PRODUCT_CATEGORY_DIMMER_AC_ELV = 0x0505,
449  PRODUCT_CATEGORY_DIMMER_AC_OTHER = 0x0506,
450  PRODUCT_CATEGORY_DIMMER_DC_LEVEL = 0x0507,
451  PRODUCT_CATEGORY_DIMMER_DC_PWM = 0x0508,
452  PRODUCT_CATEGORY_DIMMER_CS_LED = 0x0509,
453  PRODUCT_CATEGORY_DIMMER_OTHER = 0x05ff,
454  PRODUCT_CATEGORY_POWER = 0x0600,
455  PRODUCT_CATEGORY_POWER_CONTROL = 0x0601,
456  PRODUCT_CATEGORY_POWER_SOURCE = 0x0602,
457  PRODUCT_CATEGORY_POWER_OTHER = 0x06ff,
458  PRODUCT_CATEGORY_SCENIC = 0x0700,
459  PRODUCT_CATEGORY_SCENIC_DRIVE = 0x0701,
460  PRODUCT_CATEGORY_SCENIC_OTHER = 0x07ff,
461  PRODUCT_CATEGORY_DATA = 0x0800,
462  PRODUCT_CATEGORY_DATA_DISTRIBUTION = 0x0801,
463  PRODUCT_CATEGORY_DATA_CONVERSION = 0x0802,
464  PRODUCT_CATEGORY_DATA_OTHER = 0x08ff,
465  PRODUCT_CATEGORY_AV = 0x0900,
466  PRODUCT_CATEGORY_AV_AUDIO = 0x0901,
467  PRODUCT_CATEGORY_AV_VIDEO = 0x0902,
468  PRODUCT_CATEGORY_AV_OTHER = 0x09ff,
469  PRODUCT_CATEGORY_MONITOR = 0x0a00,
470  PRODUCT_CATEGORY_MONITOR_ACLINEPOWER = 0x0a01,
471  PRODUCT_CATEGORY_MONITOR_DCPOWER = 0x0a02,
472  PRODUCT_CATEGORY_MONITOR_ENVIRONMENTAL = 0x0a03,
473  PRODUCT_CATEGORY_MONITOR_OTHER = 0x0aff,
474  PRODUCT_CATEGORY_CONTROL = 0x7000,
475  PRODUCT_CATEGORY_CONTROL_CONTROLLER = 0x7001,
476  PRODUCT_CATEGORY_CONTROL_BACKUPDEVICE = 0x7002,
477  PRODUCT_CATEGORY_CONTROL_OTHER = 0x70ff,
478  PRODUCT_CATEGORY_TEST = 0x7100,
479  PRODUCT_CATEGORY_TEST_EQUIPMENT = 0x7101,
480  PRODUCT_CATEGORY_TEST_EQUIPMENT_OTHER = 0x71ff,
481  PRODUCT_CATEGORY_OTHER = 0x7fff,
482 } __attribute__((packed)) RDMProductCategory;
483 
484 // product details
485 typedef enum {
486  PRODUCT_DETAIL_NOT_DECLARED = 0x0000,
487  PRODUCT_DETAIL_ARC = 0x0001,
488  PRODUCT_DETAIL_METAL_HALIDE = 0x0002,
489  PRODUCT_DETAIL_INCANDESCENT = 0x0003,
490  PRODUCT_DETAIL_LED = 0x0004,
491  PRODUCT_DETAIL_FLUORESCENT = 0x0005,
492  PRODUCT_DETAIL_COLDCATHODE = 0x0006,
493  PRODUCT_DETAIL_ELECTROLUMINESCENT = 0x0007,
494  PRODUCT_DETAIL_LASER = 0x0008,
495  PRODUCT_DETAIL_FLASHTUBE = 0x0009,
496  PRODUCT_DETAIL_COLORSCROLLER = 0x0100,
497  PRODUCT_DETAIL_COLORWHEEL = 0x0101,
498  PRODUCT_DETAIL_COLORCHANGE = 0x0102,
499  PRODUCT_DETAIL_IRIS_DOUSER = 0x0103,
500  PRODUCT_DETAIL_DIMMING_SHUTTER = 0x0104,
501  PRODUCT_DETAIL_PROFILE_SHUTTER = 0x0105,
502  PRODUCT_DETAIL_BARNDOOR_SHUTTER = 0x0106,
503  PRODUCT_DETAIL_EFFECTS_DISC = 0x0107,
504  PRODUCT_DETAIL_GOBO_ROTATOR = 0x0108,
505  PRODUCT_DETAIL_VIDEO = 0x0200,
506  PRODUCT_DETAIL_SLIDE = 0x0201,
507  PRODUCT_DETAIL_FILM = 0x0202,
508  PRODUCT_DETAIL_OILWHEEL = 0x0203,
509  PRODUCT_DETAIL_LCDGATE = 0x0204,
510  PRODUCT_DETAIL_FOGGER_GLYCOL = 0x0300,
511  PRODUCT_DETAIL_FOGGER_MINERALOIL = 0x0301,
512  PRODUCT_DETAIL_FOGGER_WATER = 0x0302,
513  PRODUCT_DETAIL_CO2 = 0x0303,
514  PRODUCT_DETAIL_LN2 = 0x0304,
515  PRODUCT_DETAIL_BUBBLE = 0x0305,
516  PRODUCT_DETAIL_FLAME_PROPANE = 0x0306,
517  PRODUCT_DETAIL_FLAME_OTHER = 0x0307,
518  PRODUCT_DETAIL_OLEFACTORY_STIMULATOR = 0x0308,
519  PRODUCT_DETAIL_SNOW = 0x0309,
520  PRODUCT_DETAIL_WATER_JET = 0x030a,
521  PRODUCT_DETAIL_WIND = 0x030b,
522  PRODUCT_DETAIL_CONFETTI = 0x030c,
523  PRODUCT_DETAIL_HAZARD = 0x030d,
524  PRODUCT_DETAIL_PHASE_CONTROL = 0x0400,
525  PRODUCT_DETAIL_REVERSE_PHASE_CONTROL = 0x0401,
526  PRODUCT_DETAIL_SINE = 0x0402,
527  PRODUCT_DETAIL_PWM = 0x0403,
528  PRODUCT_DETAIL_DC = 0x0404,
529  PRODUCT_DETAIL_HFBALLAST = 0x0405,
530  PRODUCT_DETAIL_HFHV_NEONBALLAST = 0x0406,
531  PRODUCT_DETAIL_HFHV_EL = 0x0407,
532  PRODUCT_DETAIL_MHR_BALLAST = 0x0408,
533  PRODUCT_DETAIL_BITANGLE_MODULATION = 0x0409,
534  PRODUCT_DETAIL_FREQUENCY_MODULATION = 0x040a,
535  PRODUCT_DETAIL_HIGHFREQUENCY_12V = 0x040b,
536  PRODUCT_DETAIL_RELAY_MECHANICAL = 0x040c,
537  PRODUCT_DETAIL_RELAY_ELECTRONIC = 0x040d,
538  PRODUCT_DETAIL_SWITCH_ELECTRONIC = 0x040e,
539  PRODUCT_DETAIL_CONTACTOR = 0x040f,
540  PRODUCT_DETAIL_MIRRORBALL_ROTATOR = 0x0500,
541  PRODUCT_DETAIL_OTHER_ROTATOR = 0x0501,
542  PRODUCT_DETAIL_KABUKI_DROP = 0x0502,
543  PRODUCT_DETAIL_CURTAIN = 0x0503,
544  PRODUCT_DETAIL_LINESET = 0x0504,
545  PRODUCT_DETAIL_MOTOR_CONTROL = 0x0505,
546  PRODUCT_DETAIL_DAMPER_CONTROL = 0x0506,
547  PRODUCT_DETAIL_SPLITTER = 0x0600,
548  PRODUCT_DETAIL_ETHERNET_NODE = 0x0601,
549  PRODUCT_DETAIL_MERGE = 0x0602,
550  PRODUCT_DETAIL_DATAPATCH = 0x0603,
551  PRODUCT_DETAIL_WIRELESS_LINK = 0x0604,
552  PRODUCT_DETAIL_PROTOCOL_CONVERTER = 0x0701,
553  PRODUCT_DETAIL_ANALOG_DEMULTIPLEX = 0x0702,
554  PRODUCT_DETAIL_ANALOG_MULTIPLEX = 0x0703,
555  PRODUCT_DETAIL_SWITCH_PANEL = 0x0704,
556  PRODUCT_DETAIL_ROUTER = 0x0800,
557  PRODUCT_DETAIL_FADER = 0x0801,
558  PRODUCT_DETAIL_MIXER = 0x0802,
559  PRODUCT_DETAIL_CHANGEOVER_MANUAL = 0x0900,
560  PRODUCT_DETAIL_CHANGEOVER_AUTO = 0x0901,
561  PRODUCT_DETAIL_TEST = 0x0902,
562  PRODUCT_DETAIL_GFI_RCD = 0x0a00,
563  PRODUCT_DETAIL_BATTERY = 0x0a01,
564  PRODUCT_DETAIL_CONTROLLABLE_BREAKER = 0x0a02,
565  PRODUCT_DETAIL_OTHER = 0x7fff,
566 } __attribute__((packed)) RDMProductDetail;
567 
568 typedef enum {
569  LAMP_OFF = 0x00,
570  LAMP_ON = 0x01,
571  LAMP_STRIKE = 0x02,
572  LAMP_STANDBY = 0x03,
573  LAMP_NOT_PRESENT = 0x04,
574  LAMP_ERROR = 0x7f,
575 } RDMLampState;
576 
577 typedef enum {
578  LAMP_ON_MODE_OFF = 0x00,
579  LAMP_ON_MODE_DMX = 0x01,
580  LAMP_ON_MODE_ON = 0x02,
581  LAMP_ON_MODE_ON_AFTER_CAL = 0x03,
582 } RDMLampMode;
583 
584 typedef enum {
585  DISPLAY_INVERT_OFF = 0x00,
586  DISPLAY_INVERT_ON = 0x01,
587  DISPLAY_INVERT_AUTO = 0x02,
588 } RDMDisplayInvert;
589 
590 typedef enum {
591  SELF_TEST_OFF = 0x00,
592  SELF_TEST_ALL = 0xff,
593 } RDMSelfTest;
594 
595 typedef enum {
596  POWER_STATE_FULL_OFF = 0x00,
597  POWER_STATE_SHUTDOWN = 0x01,
598  POWER_STATE_STANDBY = 0x02,
599  POWER_STATE_NORMAL = 0xff,
600 } RDMPowerState;
601 
602 typedef enum {
603  SENSOR_TEMPERATURE = 0x00,
604  SENSOR_VOLTAGE = 0x01,
605  SENSOR_CURRENT = 0x02,
606  SENSOR_FREQUENCY = 0x03,
607  SENSOR_RESISTANCE = 0x04,
608  SENSOR_POWER = 0x05,
609  SENSOR_MASS = 0x06,
610  SENSOR_LENGTH = 0x07,
611  SENSOR_AREA = 0x08,
612  SENSOR_VOLUME = 0x09,
613  SENSOR_DENSITY = 0x0a,
614  SENSOR_VELOCITY = 0x0b,
615  SENSOR_ACCELERATION = 0x0c,
616  SENSOR_FORCE = 0x0d,
617  SENSOR_ENERGY = 0x0e,
618  SENSOR_PRESSURE = 0x0f,
619  SENSOR_TIME = 0x10,
620  SENSOR_ANGLE = 0x11,
621  SENSOR_POSITION_X = 0x12,
622  SENSOR_POSITION_Y = 0x13,
623  SENSOR_POSITION_Z = 0x14,
624  SENSOR_ANGULAR_VELOCITY = 0x15,
625  SENSOR_LUMINOUS_INTENSITY = 0x16,
626  SENSOR_LUMINOUS_FLUX = 0x17,
627  SENSOR_ILLUMINANCE = 0x18,
628  SENSOR_CHROMINANCE_RED = 0x19,
629  SENSOR_CHROMINANCE_GREEN = 0x1a,
630  SENSOR_CHROMINANCE_BLUE = 0x1b,
631  SENSOR_CONTACTS = 0x1c,
632  SENSOR_MEMORY = 0x1d,
633  SENSOR_ITEMS = 0x1e,
634  SENSOR_HUMIDITY = 0x1f,
635  SENSOR_COUNTER_16BIT = 0x20,
636  SENSOR_OTHER = 0x7f
637 } __attribute__((packed)) RDMSensorType;
638 
639 typedef enum {
640  UNITS_NONE = 0x00,
641  UNITS_CENTIGRADE = 0x01,
642  UNITS_VOLTS_DC = 0x02,
643  UNITS_VOLTS_AC_PEAK = 0x03,
644  UNITS_VOLTS_AC_RMS = 0x04,
645  UNITS_AMPERE_DC = 0x05,
646  UNITS_AMPERE_AC_PEAK = 0x06,
647  UNITS_AMPERE_AC_RMS = 0x07,
648  UNITS_HERTZ = 0x08,
649  UNITS_OHM = 0x09,
650  UNITS_WATT = 0x0a,
651  UNITS_KILOGRAM = 0x0b,
652  UNITS_METERS = 0x0c,
653  UNITS_METERS_SQUARED = 0x0d,
654  UNITS_METERS_CUBED = 0x0e,
655  UNITS_KILOGRAMMES_PER_METER_CUBED = 0x0f,
656  UNITS_METERS_PER_SECOND = 0x10,
657  UNITS_METERS_PER_SECOND_SQUARED = 0x11,
658  UNITS_NEWTON = 0x12,
659  UNITS_JOULE = 0x13,
660  UNITS_PASCAL = 0x14,
661  UNITS_SECOND = 0x15,
662  UNITS_DEGREE = 0x16,
663  UNITS_STERADIAN = 0x17,
664  UNITS_CANDELA = 0x18,
665  UNITS_LUMEN = 0x19,
666  UNITS_LUX = 0x1a,
667  UNITS_IRE = 0x1b,
668  UNITS_BYTE = 0x1c,
669 } __attribute__((packed)) RDMUnit;
670 
671 typedef enum {
672  PREFIX_NONE = 0x00,
673  PREFIX_DECI = 0x01,
674  PREFIX_CENTI = 0x02,
675  PREFIX_MILLI = 0x03,
676  PREFIX_MICRO = 0x04,
677  PREFIX_NANO = 0x05,
678  PREFIX_PICO = 0x06,
679  PREFIX_FEMTO = 0x07,
680  PREFIX_ATTO = 0x08,
681  PREFIX_ZEPTO = 0x09,
682  PREFIX_YOCTO = 0x0a,
683  PREFIX_DECA = 0x11,
684  PREFIX_HECTO = 0x12,
685  PREFIX_KILO = 0x13,
686  PREFIX_MEGA = 0x14,
687  PREFIX_GIGA = 0x15,
688  PREFIX_TERA = 0x16,
689  PREFIX_PETA = 0x17,
690  PREFIX_EXA = 0x18,
691  PREFIX_ZETTA = 0x19,
692  PREFIX_YOTTA = 0x1a,
693 } __attribute__((packed)) RDMPrefix;
694 
695 typedef enum {
696  DS_NOT_DEFINED = 0x0,
697  DS_BIT_FIELD = 0x01,
698  DS_ASCII = 0x02,
699  DS_UNSIGNED_BYTE = 0x03,
700  DS_SIGNED_BYTE = 0x04,
701  DS_UNSIGNED_WORD = 0x05,
702  DS_SIGNED_WORD = 0x06,
703  DS_UNSIGNED_DWORD = 0x07,
704  DS_SIGNED_DWORD = 0x08,
705 } RDMDataType;
706 
707 typedef enum {
708  CC_GET = 0x01,
709  CC_SET = 0x02,
710  CC_GET_SET = 0x03,
711 } RDMCommandClassSupported;
712 
716 typedef enum {
717  ST_PRIMARY = 0x00,
718  ST_SEC_FINE = 0x01,
719  ST_SEC_TIMING = 0x02,
720  ST_SEC_SPEED = 0x03,
721  ST_SEC_CONTROL = 0x04,
722  ST_SEC_INDEX = 0x05,
723  ST_SEC_ROTATION = 0x06,
724  ST_SEC_INDEX_ROTATE = 0x07,
725  ST_SEC_UNDEFINED = 0xff,
726 } RDMSlotType;
727 
728 typedef enum {
729  SD_INTENSITY = 0x0001,
730  SD_INTENSITY_MASTER = 0x0002,
731  SD_PAN = 0x0101,
732  SD_TILT = 0x0102,
733  SD_COLOR_WHEEL = 0x0201,
734  SD_COLOR_SUB_CYAN = 0x0202,
735  SD_COLOR_SUB_YELLOW = 0x0203,
736  SD_COLOR_SUB_MAGENTA = 0x0204,
737  SD_COLOR_ADD_RED = 0x0205,
738  SD_COLOR_ADD_GREEN = 0x0206,
739  SD_COLOR_ADD_BLUE = 0x0207,
740  SD_COLOR_CORRECTION = 0x0208,
741  SD_COLOR_SCROLL = 0x0209,
742  SD_COLOR_SEMAPHORE = 0x0210,
743  SD_COLOR_ADD_AMBER = 0x0211,
744  SD_COLOR_ADD_WHITE = 0x0212,
745  SD_COLOR_ADD_WARM_WHITE = 0x0213,
746  SD_COLOR_ADD_COOL_WHITE = 0x0214,
747  SD_COLOR_SUB_UV = 0x0215,
748  SD_COLOR_HUE = 0x0216,
749  SD_COLOR_SATURATION = 0x0217,
750  SD_STATIC_GOBO_WHEEL = 0x0301,
751  SD_ROTO_GOBO_WHEEL = 0x0302,
752  SD_PRISM_WHEEL = 0x0303,
753  SD_EFFECTS_WHEEL = 0x0304,
754  SD_BEAM_SIZE_IRIS = 0x0401,
755  SD_EDGE = 0x0402,
756  SD_FROST = 0x0403,
757  SD_STROBE = 0x0404,
758  SD_ZOOM = 0x0405,
759  SD_FRAMING_SHUTTER = 0x0406,
760  SD_SHUTTER_ROTATE = 0x0407,
761  SD_DOUSER = 0x0408,
762  SD_BARN_DOOR = 0x0409,
763  SD_LAMP_CONTROL = 0x0501,
764  SD_FIXTURE_CONTROL = 0x0502,
765  SD_FIXTURE_SPEED = 0x0503,
766  SD_MACRO = 0x0504,
767  SD_POWER_CONTROL = 0x0505,
768  SD_FAN_CONTROL = 0x0506,
769  SD_HEATER_CONTROL = 0x0507,
770  SD_FOUNTAIN_CONTROL = 0x0508,
771  SD_UNDEFINED = 0xffff,
772 } RDMSlotCategory;
773 
774 typedef enum {
775  IDENTIFY_MODE_QUIET = 0x00,
776  IDENTIFY_MODE_LOUD = 0xff,
777 } RDMIdentifyMode;
778 
779 typedef enum {
780  PRESET_PLAYBACK_OFF = 0x0000,
781  PRESET_PLAYBACK_ALL = 0xffff,
782 } RDMPresetPlayback;
783 
784 typedef enum {
785  PRESET_NOT_PROGRAMMED = 0x00,
786  PRESET_PROGRAMMED = 0x01,
787  PRESET_PROGRAMMED_READ_ONLY = 0x02
788 } RDMPresetProgrammed;
789 
790 typedef enum {
791  MERGE_MODE_DEFAULT = 0x00,
792  MERGE_MODE_HTP = 0x01,
793  MERGE_MODE_LTP = 0x02,
794  MERGE_MODE_DMX_ONLY = 0x03,
795  MERGE_MODE_OTHER = 0xff,
796 } RDMMergeMode;
797 
798 typedef enum {
799  STS_CAL_FAIL = 0x0001,
800  STS_SENS_NOT_FOUND = 0x0002,
801  STS_SENS_ALWAYS_ON = 0x0003,
802  STS_FEEDBACK_ERROR = 0x0004,
803  STS_INDEX_ERROR = 0x0005,
804  STS_LAMP_DOUSED = 0x0011,
805  STS_LAMP_STRIKE = 0x0012,
806  STS_LAMP_ACCESS_OPEN = 0x0013,
807  STS_LAMP_ALWAYS_ON = 0x0014,
808  STS_OVERTEMP = 0x0021,
809  STS_UNDERTEMP = 0x0022,
810  STS_SENS_OUT_RANGE = 0x0023,
811  STS_OVERVOLTAGE_PHASE = 0x0031,
812  STS_UNDERVOLTAGE_PHASE = 0x0032,
813  STS_OVERCURRENT = 0x0033,
814  STS_UNDERCURRENT = 0x0034,
815  STS_PHASE = 0x0035,
816  STS_PHASE_ERROR = 0x0036,
817  STS_AMPS = 0x0037,
818  STS_VOLTS = 0x0038,
819  STS_DIMSLOT_OCCUPIED = 0x0041,
820  STS_BREAKER_TRIP = 0x0042,
821  STS_WATTS = 0x0043,
822  STS_DIM_FAILURE = 0x0044,
823  STS_DIM_PANIC = 0x0045,
824  STS_LOAD_FAILURE = 0x0046,
825  STS_READY = 0x0050,
826  STS_NOT_READY = 0x0051,
827  STS_LOW_FLUID = 0x0052,
828  STS_EEPROM_ERROR = 0x0060,
829  STS_RAM_ERROR = 0x0061,
830  STS_FPGA_ERROR = 0x0062,
831  STS_PROXY_BROADCAST_DROPPED = 0x0070,
832  STS_ASC_RXOK = 0x0071,
833  STS_ASC_DROPPED = 0x0072,
834  STS_DMXNSCNONE = 0x0080,
835  STS_DMXNSCLOSS = 0x0081,
836  STS_DMXNSCERROR = 0x0082,
837  STS_DMXNSC_OK = 0x0083,
838 } RDMStatusMessageId;
839 
840 typedef enum {
841  STS_OLP_TESTING = 0x8000,
842  STS_OLP_SELFTEST_PASSED = 0x8001,
843  STS_OLP_SELFTEST_FAILED = 0x8002,
844 } OpenLightingStatusIdType;
845 
846 #ifdef __cplusplus
847 }
848 #endif
849 
854 #endif // FIRMWARE_SRC_RDM_H_
RDMPid
RDM Parameter IDs.
Definition: rdm.h:259
UID constants.
Definition: rdm.h:240
static const uint16_t MAX_PIN_CODE
The maximum pin code from E1.37-1.
Definition: rdm.h:187
static const uint16_t MUTE_SUBDEVICE_FLAG
Indicates the responder has subdevices.
Definition: rdm.h:110
Definition: rdm.h:252
Definition: rdm.h:237
Definition: rdm.h:249
static const uint8_t MESSAGE_LENGTH_OFFSET
The location of the message length field in a frame.
Definition: rdm.h:75
RDMSlotType
The RDM slot types, from table C-1 of the standard.
Definition: rdm.h:716
RDMResponseType
RDM Command Classes from E1.20.
Definition: rdm.h:248
static const uint16_t SUBDEVICE_ROOT
The root sub device.
Definition: rdm.h:45
IPSEC.
Definition: rdm.h:204
static const uint16_t SENSOR_VALUE_UNSUPPORTED
Indicates that recorded / highest / lowest values aren't supported.
Definition: rdm.h:167
Definition: rdm.h:250
static const uint8_t ALL_SENSORS
The all-sensors value.
Definition: rdm.h:162
RDMCommandClass
RDM Command Classes from E1.20.
Definition: rdm.h:235
static const uint32_t NO_DEFAULT_ROUTE
Indicates no route is assigned.
Definition: rdm.h:210
static const uint32_t IPV4_UNCONFIGURED
Indicates no IP address is configured.
Definition: rdm.h:215
static const uint16_t MUTE_BOOTLOADER_FLAG
Indicates the responder is in bootloader mode.
Definition: rdm.h:115
Definition: rdm.h:236
__attribute__
RDM Product Category codes from E1.20.
Definition: rdm.h:420
static const uint16_t MUTE_MANAGED_PROXY_FLAG
Indicates the responder is a managed proxy.
Definition: rdm.h:105
static const uint8_t MAX_NETMASK
The maximum netmask value.
Definition: rdm.h:220
static const unsigned int MAX_DEFAULT_SLOT_VALUE_PER_FRAME
The maximum number of default slot value entries in a RDM frame.
Definition: rdm.h:182
Definition: rdm.h:238
RDMNackReason
RDM NACK reason codes from E1.20.
Definition: rdm.h:389
static const uint16_t MAX_DMX_START_ADDRESS
The maximum value for a DMX start address.
Definition: rdm.h:95
Definition: rdm.h:241
Maximum size of RDM Parameter Data.
Definition: rdm.h:146
Ethernet.
Definition: rdm.h:203
static const uint8_t RDM_CHECKSUM_LENGTH
The number of bytes in an RDM checksum.
Definition: rdm.h:70
static const uint16_t INVALID_DMX_START_ADDRESS
The 'unpatched' DMX start address.
Definition: rdm.h:100
Definition: rdm.h:251
Definition: rdm.h:239
OpenLightingManufacturerPID
Open Lighting Project manufacturer PIDs.
Definition: rdm.h:377
static const uint16_t SUBDEVICE_ALL
All sub devices.
Definition: rdm.h:50
static const uint16_t RDM_VERSION
The RDM version we support.
Definition: rdm.h:90
static const uint16_t SUBDEVICE_MAX
The maximum index for a sub device.
Definition: rdm.h:55
static const uint8_t SUB_START_CODE
The RDM Sub Start Code.
Definition: rdm.h:65
static const uint8_t RDM_PARAM_DATA_OFFSET
The location of the parameter data in a frame.
Definition: rdm.h:85
DHCPMode
DHCP Status.
Definition: rdm.h:225
static const uint8_t RDM_PARAM_DATA_LENGTH_OFFSET
The location of the parameter data length in a frame.
Definition: rdm.h:80
static const uint16_t MUTE_PROXY_FLAG
Indicates the responder is a proxy.
Definition: rdm.h:120