OLE Developer Guide  Latest Git
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
RDM

Detailed Description

Remote Device Management.

Files

file  rdm.h
 Remote Device Management.
 
file  rdm_buffer.h
 The memory buffer used to construct the RDM response.
 
file  rdm_frame.h
 Remote Device Management.
 
file  rdm_model.h
 The API for an RDM Model implementation.
 
file  rdm_responder.h
 The base RDM Responder.
 

Data Structures

struct  __attribute__
 The common RDM header. More...
 
struct  ModelEntry
 The function table entry for a particular responder model. More...
 
struct  ParameterDescription
 A parameter description. More...
 
struct  PIDDescriptor
 A descriptor for a PID. More...
 
struct  ProductDetailIds
 The Product Detail IDs for the responder. More...
 
struct  SlotDefinition
 The definition of a DMX slot. More...
 
struct  PersonalityDefinition
 The definition of a DMX512 personality. More...
 
struct  SensorDefinition
 An RDM sensor definition. More...
 
struct  SensorData
 Data for an RDM Sensor. More...
 
struct  ResponderDefinition
 The definition of a responder. More...
 
struct  RDMResponder
 A core implementation of a responder. More...
 
struct  RDMResponderSettings
 The settings to use for the RDM Responder. More...
 

Typedefs

typedef int(* PIDCommandHandler )(const RDMHeader *incoming_header, const uint8_t *param_data)
 A PID handler. More...
 

Enumerations

enum  { MAX_PRODUCT_DETAILS = 6 }
 The maximum number of product detail ids a responder can have.
 
enum  { RDM_DEFAULT_STRING_SIZE = 32 }
 The size of the default strings used in RDM.
 
enum  { RDM_LANGUAGE_STRING_SIZE = 2 }
 The size of the language strings used in RDM.
 
enum  { DUB_RESPONSE_LENGTH = 24 }
 The size of a DUB response.
 
enum  { RDM_MAX_FRAME_SIZE = 257 }
 The size of an RDM frame.
 
enum  { MAX_PARAM_DATA_SIZE = 231 }
 Maximum size of RDM Parameter Data. More...
 
enum  { SENSOR_SUPPORTS_RECORDING_MASK = 0x01 }
 The recording mask for the recorded value support bit field.
 
enum  { SENSOR_SUPPORTS_LOWEST_HIGHEST_MASK = 0x02 }
 The lowest / highest mask for the recorded value support bit field.
 
enum  { DNS_HOST_NAME_SIZE = 63 }
 The size of the DNS Host Name field from E1.37-2.
 
enum  { DNS_DOMAIN_NAME_SIZE = 231 }
 The size of the DNS Domain Name field from E1.37-2.
 
enum  { ETHERNET_HARDWARE_TYPE = 1, IPSEC_HARDWARE_TYPE = 31 }
 Interface hardware types. More...
 
enum  DHCPMode { DHCP_STATUS_INACTIVE = 0x00, DHCP_STATUS_ACTIVE = 0x01, DHCP_STATUS_UNKNOWN = 0x02 }
 DHCP Status.
 
enum  RDMCommandClass {
  DISCOVERY_COMMAND = 0x10, DISCOVERY_COMMAND_RESPONSE = 0x11, GET_COMMAND = 0x20, GET_COMMAND_RESPONSE = 0x21,
  SET_COMMAND = 0x30, SET_COMMAND_RESPONSE = 0x31
}
 RDM Command Classes from E1.20. More...
 
enum  RDMResponseType { ACK = 0x00, ACK_TIMER = 0x01, NACK_REASON = 0x02, ACK_OVERFLOW = 0x03 }
 RDM Command Classes from E1.20. More...
 
enum  RDMPid {
  PID_DISC_UNIQUE_BRANCH = 0x0001, PID_DISC_MUTE = 0x0002, PID_DISC_UN_MUTE = 0x0003, PID_PROXIED_DEVICES = 0x0010,
  PID_PROXIED_DEVICE_COUNT = 0x0011, PID_COMMS_STATUS = 0x0015, PID_QUEUED_MESSAGE = 0x0020, PID_STATUS_MESSAGES = 0x0030,
  PID_STATUS_ID_DESCRIPTION = 0x0031, PID_CLEAR_STATUS_ID = 0x0032, PID_SUB_DEVICE_STATUS_REPORT_THRESHOLD = 0x0033, PID_SUPPORTED_PARAMETERS = 0x0050,
  PID_PARAMETER_DESCRIPTION = 0x0051, PID_DEVICE_INFO = 0x0060, PID_PRODUCT_DETAIL_ID_LIST = 0x0070, PID_DEVICE_MODEL_DESCRIPTION = 0x0080,
  PID_MANUFACTURER_LABEL = 0x0081, PID_DEVICE_LABEL = 0x0082, PID_FACTORY_DEFAULTS = 0x0090, PID_LANGUAGE_CAPABILITIES = 0x00a0,
  PID_LANGUAGE = 0x00b0, PID_SOFTWARE_VERSION_LABEL = 0x00c0, PID_BOOT_SOFTWARE_VERSION_ID = 0x00c1, PID_BOOT_SOFTWARE_VERSION_LABEL = 0x00c2,
  PID_DMX_PERSONALITY = 0x00e0, PID_DMX_PERSONALITY_DESCRIPTION = 0x00e1, PID_DMX_START_ADDRESS = 0x00f0, PID_SLOT_INFO = 0x0120,
  PID_SLOT_DESCRIPTION = 0x0121, PID_DEFAULT_SLOT_VALUE = 0x0122, PID_SENSOR_DEFINITION = 0x0200, PID_SENSOR_VALUE = 0x0201,
  PID_RECORD_SENSORS = 0x0202, PID_DEVICE_HOURS = 0x0400, PID_LAMP_HOURS = 0x0401, PID_LAMP_STRIKES = 0x0402,
  PID_LAMP_STATE = 0x0403, PID_LAMP_ON_MODE = 0x0404, PID_DEVICE_POWER_CYCLES = 0x0405, PID_DISPLAY_INVERT = 0x0500,
  PID_DISPLAY_LEVEL = 0x0501, PID_PAN_INVERT = 0x0600, PID_TILT_INVERT = 0x0601, PID_PAN_TILT_SWAP = 0x0602,
  PID_REAL_TIME_CLOCK = 0x0603, PID_IDENTIFY_DEVICE = 0x1000, PID_RESET_DEVICE = 0x1001, PID_POWER_STATE = 0x1010,
  PID_PERFORM_SELFTEST = 0x1020, PID_SELF_TEST_DESCRIPTION = 0x1021, PID_CAPTURE_PRESET = 0x1030, PID_PRESET_PLAYBACK = 0x1031,
  PID_DMX_BLOCK_ADDRESS = 0x0140, PID_DMX_FAIL_MODE = 0x0141, PID_DMX_STARTUP_MODE = 0x0142, PID_DIMMER_INFO = 0x0340,
  PID_MINIMUM_LEVEL = 0x0341, PID_MAXIMUM_LEVEL = 0x0342, PID_CURVE = 0x0343, PID_CURVE_DESCRIPTION = 0x0344,
  PID_OUTPUT_RESPONSE_TIME = 0x0345, PID_OUTPUT_RESPONSE_TIME_DESCRIPTION = 0x0346, PID_MODULATION_FREQUENCY = 0x0347, PID_MODULATION_FREQUENCY_DESCRIPTION = 0x0348,
  PID_BURN_IN = 0x0440, PID_LOCK_PIN = 0x0640, PID_LOCK_STATE = 0x0641, PID_LOCK_STATE_DESCRIPTION = 0x0642,
  PID_IDENTIFY_MODE = 0x1040, PID_PRESET_INFO = 0x1041, PID_PRESET_STATUS = 0x1042, PID_PRESET_MERGEMODE = 0x1043,
  PID_POWER_ON_SELF_TEST = 0x1044, PID_LIST_INTERFACES = 0x0700, PID_INTERFACE_LABEL = 0x0701, PID_INTERFACE_HARDWARE_ADDRESS_TYPE1 = 0x0702,
  PID_IPV4_DHCP_MODE = 0x0703, PID_IPV4_ZEROCONF_MODE = 0x0704, PID_IPV4_CURRENT_ADDRESS = 0x0705, PID_IPV4_STATIC_ADDRESS = 0x0706,
  PID_INTERFACE_RENEW_DHCP = 0x0707, PID_INTERFACE_RELEASE_DHCP = 0x0708, PID_INTERFACE_APPLY_CONFIGURATION = 0x0709, PID_IPV4_DEFAULT_ROUTE = 0x070a,
  PID_DNS_NAME_SERVER = 0x070b, PID_DNS_HOSTNAME = 0x070c, PID_DNS_DOMAIN_NAME = 0x070d
}
 RDM Parameter IDs. More...
 
enum  OpenLightingManufacturerPID { PID_DEVICE_MODEL = 0x8002, PID_DEVICE_MODEL_LIST = 0x8003, PID_PIXEL_TYPE = 0x8005, PID_PIXEL_COUNT = 0x8006 }
 Open Lighting Project manufacturer PIDs.
 
enum  RDMNackReason {
  NR_UNKNOWN_PID = 0x0000, NR_FORMAT_ERROR = 0x0001, NR_HARDWARE_FAULT = 0x0002, NR_PROXY_REJECT = 0x0003,
  NR_WRITE_PROTECT = 0x0004, NR_UNSUPPORTED_COMMAND_CLASS = 0x0005, NR_DATA_OUT_OF_RANGE = 0x0006, NR_BUFFER_FULL = 0x0007,
  NR_PACKET_SIZE_UNSUPPORTED = 0x0008, NR_SUB_DEVICE_OUT_OF_RANGE = 0x0009, NR_PROXY_BUFFER_FULL = 0x000a, NR_ACTION_NOT_SUPPORTED = 0x000b,
  NR_ENDPOINT_NUMBER_INVALID = 0x0011
}
 RDM NACK reason codes from E1.20. More...
 
enum  RDMStatusType {
  STATUS_NONE = 0x0, STATUS_GET_LAST_MESSAGE = 0x1, STATUS_ADVISORY = 0x2, STATUS_WARNING = 0x3,
  STATUS_ERROR = 0x4, STATUS_ADVISORY_CLEARED = 0x12, STATUS_WARNING_CLEARED = 0x13, STATUS_ERROR_CLEARED = 0x14
}
 
enum  __attribute__ {
  PRODUCT_CATEGORY_NOT_DECLARED = 0x0000, PRODUCT_CATEGORY_FIXTURE = 0x0100, PRODUCT_CATEGORY_FIXTURE_FIXED = 0x0101, PRODUCT_CATEGORY_FIXTURE_MOVING_YOKE = 0x0102,
  PRODUCT_CATEGORY_FIXTURE_MOVING_MIRROR = 0x0103, PRODUCT_CATEGORY_FIXTURE_OTHER = 0x01ff, PRODUCT_CATEGORY_FIXTURE_ACCESSORY = 0x0200, PRODUCT_CATEGORY_FIXTURE_ACCESSORY_COLOR = 0x0201,
  PRODUCT_CATEGORY_FIXTURE_ACCESSORY_YOKE = 0x0202, PRODUCT_CATEGORY_FIXTURE_ACCESSORY_MIRROR = 0x0203, PRODUCT_CATEGORY_FIXTURE_ACCESSORY_EFFECT = 0x0204, PRODUCT_CATEGORY_FIXTURE_ACCESSORY_BEAM = 0x0205,
  PRODUCT_CATEGORY_FIXTURE_ACCESSORY_OTHER = 0x02ff, PRODUCT_CATEGORY_PROJECTOR = 0x0300, PRODUCT_CATEGORY_PROJECTOR_FIXED = 0x0301, PRODUCT_CATEGORY_PROJECTOR_MOVING_YOKE = 0x0302,
  PRODUCT_CATEGORY_PROJECTOR_MOVING_MIRROR = 0x0303, PRODUCT_CATEGORY_PROJECTOR_OTHER = 0x03ff, PRODUCT_CATEGORY_ATMOSPHERIC = 0x0400, PRODUCT_CATEGORY_ATMOSPHERIC_EFFECT = 0x0401,
  PRODUCT_CATEGORY_ATMOSPHERIC_PYRO = 0x0402, PRODUCT_CATEGORY_ATMOSPHERIC_OTHER = 0x04ff, PRODUCT_CATEGORY_DIMMER = 0x0500, PRODUCT_CATEGORY_DIMMER_AC_INCANDESCENT = 0x0501,
  PRODUCT_CATEGORY_DIMMER_AC_FLUORESCENT = 0x0502, PRODUCT_CATEGORY_DIMMER_AC_COLDCATHODE = 0x0503, PRODUCT_CATEGORY_DIMMER_AC_NONDIM = 0x0504, PRODUCT_CATEGORY_DIMMER_AC_ELV = 0x0505,
  PRODUCT_CATEGORY_DIMMER_AC_OTHER = 0x0506, PRODUCT_CATEGORY_DIMMER_DC_LEVEL = 0x0507, PRODUCT_CATEGORY_DIMMER_DC_PWM = 0x0508, PRODUCT_CATEGORY_DIMMER_CS_LED = 0x0509,
  PRODUCT_CATEGORY_DIMMER_OTHER = 0x05ff, PRODUCT_CATEGORY_POWER = 0x0600, PRODUCT_CATEGORY_POWER_CONTROL = 0x0601, PRODUCT_CATEGORY_POWER_SOURCE = 0x0602,
  PRODUCT_CATEGORY_POWER_OTHER = 0x06ff, PRODUCT_CATEGORY_SCENIC = 0x0700, PRODUCT_CATEGORY_SCENIC_DRIVE = 0x0701, PRODUCT_CATEGORY_SCENIC_OTHER = 0x07ff,
  PRODUCT_CATEGORY_DATA = 0x0800, PRODUCT_CATEGORY_DATA_DISTRIBUTION = 0x0801, PRODUCT_CATEGORY_DATA_CONVERSION = 0x0802, PRODUCT_CATEGORY_DATA_OTHER = 0x08ff,
  PRODUCT_CATEGORY_AV = 0x0900, PRODUCT_CATEGORY_AV_AUDIO = 0x0901, PRODUCT_CATEGORY_AV_VIDEO = 0x0902, PRODUCT_CATEGORY_AV_OTHER = 0x09ff,
  PRODUCT_CATEGORY_MONITOR = 0x0a00, PRODUCT_CATEGORY_MONITOR_ACLINEPOWER = 0x0a01, PRODUCT_CATEGORY_MONITOR_DCPOWER = 0x0a02, PRODUCT_CATEGORY_MONITOR_ENVIRONMENTAL = 0x0a03,
  PRODUCT_CATEGORY_MONITOR_OTHER = 0x0aff, PRODUCT_CATEGORY_CONTROL = 0x7000, PRODUCT_CATEGORY_CONTROL_CONTROLLER = 0x7001, PRODUCT_CATEGORY_CONTROL_BACKUPDEVICE = 0x7002,
  PRODUCT_CATEGORY_CONTROL_OTHER = 0x70ff, PRODUCT_CATEGORY_TEST = 0x7100, PRODUCT_CATEGORY_TEST_EQUIPMENT = 0x7101, PRODUCT_CATEGORY_TEST_EQUIPMENT_OTHER = 0x71ff,
  PRODUCT_CATEGORY_OTHER = 0x7fff, PRODUCT_DETAIL_NOT_DECLARED = 0x0000, PRODUCT_DETAIL_ARC = 0x0001, PRODUCT_DETAIL_METAL_HALIDE = 0x0002,
  PRODUCT_DETAIL_INCANDESCENT = 0x0003, PRODUCT_DETAIL_LED = 0x0004, PRODUCT_DETAIL_FLUORESCENT = 0x0005, PRODUCT_DETAIL_COLDCATHODE = 0x0006,
  PRODUCT_DETAIL_ELECTROLUMINESCENT = 0x0007, PRODUCT_DETAIL_LASER = 0x0008, PRODUCT_DETAIL_FLASHTUBE = 0x0009, PRODUCT_DETAIL_COLORSCROLLER = 0x0100,
  PRODUCT_DETAIL_COLORWHEEL = 0x0101, PRODUCT_DETAIL_COLORCHANGE = 0x0102, PRODUCT_DETAIL_IRIS_DOUSER = 0x0103, PRODUCT_DETAIL_DIMMING_SHUTTER = 0x0104,
  PRODUCT_DETAIL_PROFILE_SHUTTER = 0x0105, PRODUCT_DETAIL_BARNDOOR_SHUTTER = 0x0106, PRODUCT_DETAIL_EFFECTS_DISC = 0x0107, PRODUCT_DETAIL_GOBO_ROTATOR = 0x0108,
  PRODUCT_DETAIL_VIDEO = 0x0200, PRODUCT_DETAIL_SLIDE = 0x0201, PRODUCT_DETAIL_FILM = 0x0202, PRODUCT_DETAIL_OILWHEEL = 0x0203,
  PRODUCT_DETAIL_LCDGATE = 0x0204, PRODUCT_DETAIL_FOGGER_GLYCOL = 0x0300, PRODUCT_DETAIL_FOGGER_MINERALOIL = 0x0301, PRODUCT_DETAIL_FOGGER_WATER = 0x0302,
  PRODUCT_DETAIL_CO2 = 0x0303, PRODUCT_DETAIL_LN2 = 0x0304, PRODUCT_DETAIL_BUBBLE = 0x0305, PRODUCT_DETAIL_FLAME_PROPANE = 0x0306,
  PRODUCT_DETAIL_FLAME_OTHER = 0x0307, PRODUCT_DETAIL_OLEFACTORY_STIMULATOR = 0x0308, PRODUCT_DETAIL_SNOW = 0x0309, PRODUCT_DETAIL_WATER_JET = 0x030a,
  PRODUCT_DETAIL_WIND = 0x030b, PRODUCT_DETAIL_CONFETTI = 0x030c, PRODUCT_DETAIL_HAZARD = 0x030d, PRODUCT_DETAIL_PHASE_CONTROL = 0x0400,
  PRODUCT_DETAIL_REVERSE_PHASE_CONTROL = 0x0401, PRODUCT_DETAIL_SINE = 0x0402, PRODUCT_DETAIL_PWM = 0x0403, PRODUCT_DETAIL_DC = 0x0404,
  PRODUCT_DETAIL_HFBALLAST = 0x0405, PRODUCT_DETAIL_HFHV_NEONBALLAST = 0x0406, PRODUCT_DETAIL_HFHV_EL = 0x0407, PRODUCT_DETAIL_MHR_BALLAST = 0x0408,
  PRODUCT_DETAIL_BITANGLE_MODULATION = 0x0409, PRODUCT_DETAIL_FREQUENCY_MODULATION = 0x040a, PRODUCT_DETAIL_HIGHFREQUENCY_12V = 0x040b, PRODUCT_DETAIL_RELAY_MECHANICAL = 0x040c,
  PRODUCT_DETAIL_RELAY_ELECTRONIC = 0x040d, PRODUCT_DETAIL_SWITCH_ELECTRONIC = 0x040e, PRODUCT_DETAIL_CONTACTOR = 0x040f, PRODUCT_DETAIL_MIRRORBALL_ROTATOR = 0x0500,
  PRODUCT_DETAIL_OTHER_ROTATOR = 0x0501, PRODUCT_DETAIL_KABUKI_DROP = 0x0502, PRODUCT_DETAIL_CURTAIN = 0x0503, PRODUCT_DETAIL_LINESET = 0x0504,
  PRODUCT_DETAIL_MOTOR_CONTROL = 0x0505, PRODUCT_DETAIL_DAMPER_CONTROL = 0x0506, PRODUCT_DETAIL_SPLITTER = 0x0600, PRODUCT_DETAIL_ETHERNET_NODE = 0x0601,
  PRODUCT_DETAIL_MERGE = 0x0602, PRODUCT_DETAIL_DATAPATCH = 0x0603, PRODUCT_DETAIL_WIRELESS_LINK = 0x0604, PRODUCT_DETAIL_PROTOCOL_CONVERTER = 0x0701,
  PRODUCT_DETAIL_ANALOG_DEMULTIPLEX = 0x0702, PRODUCT_DETAIL_ANALOG_MULTIPLEX = 0x0703, PRODUCT_DETAIL_SWITCH_PANEL = 0x0704, PRODUCT_DETAIL_ROUTER = 0x0800,
  PRODUCT_DETAIL_FADER = 0x0801, PRODUCT_DETAIL_MIXER = 0x0802, PRODUCT_DETAIL_CHANGEOVER_MANUAL = 0x0900, PRODUCT_DETAIL_CHANGEOVER_AUTO = 0x0901,
  PRODUCT_DETAIL_TEST = 0x0902, PRODUCT_DETAIL_GFI_RCD = 0x0a00, PRODUCT_DETAIL_BATTERY = 0x0a01, PRODUCT_DETAIL_CONTROLLABLE_BREAKER = 0x0a02,
  PRODUCT_DETAIL_OTHER = 0x7fff, SENSOR_TEMPERATURE = 0x00, SENSOR_VOLTAGE = 0x01, SENSOR_CURRENT = 0x02,
  SENSOR_FREQUENCY = 0x03, SENSOR_RESISTANCE = 0x04, SENSOR_POWER = 0x05, SENSOR_MASS = 0x06,
  SENSOR_LENGTH = 0x07, SENSOR_AREA = 0x08, SENSOR_VOLUME = 0x09, SENSOR_DENSITY = 0x0a,
  SENSOR_VELOCITY = 0x0b, SENSOR_ACCELERATION = 0x0c, SENSOR_FORCE = 0x0d, SENSOR_ENERGY = 0x0e,
  SENSOR_PRESSURE = 0x0f, SENSOR_TIME = 0x10, SENSOR_ANGLE = 0x11, SENSOR_POSITION_X = 0x12,
  SENSOR_POSITION_Y = 0x13, SENSOR_POSITION_Z = 0x14, SENSOR_ANGULAR_VELOCITY = 0x15, SENSOR_LUMINOUS_INTENSITY = 0x16,
  SENSOR_LUMINOUS_FLUX = 0x17, SENSOR_ILLUMINANCE = 0x18, SENSOR_CHROMINANCE_RED = 0x19, SENSOR_CHROMINANCE_GREEN = 0x1a,
  SENSOR_CHROMINANCE_BLUE = 0x1b, SENSOR_CONTACTS = 0x1c, SENSOR_MEMORY = 0x1d, SENSOR_ITEMS = 0x1e,
  SENSOR_HUMIDITY = 0x1f, SENSOR_COUNTER_16BIT = 0x20, SENSOR_OTHER = 0x7f, UNITS_NONE = 0x00,
  UNITS_CENTIGRADE = 0x01, UNITS_VOLTS_DC = 0x02, UNITS_VOLTS_AC_PEAK = 0x03, UNITS_VOLTS_AC_RMS = 0x04,
  UNITS_AMPERE_DC = 0x05, UNITS_AMPERE_AC_PEAK = 0x06, UNITS_AMPERE_AC_RMS = 0x07, UNITS_HERTZ = 0x08,
  UNITS_OHM = 0x09, UNITS_WATT = 0x0a, UNITS_KILOGRAM = 0x0b, UNITS_METERS = 0x0c,
  UNITS_METERS_SQUARED = 0x0d, UNITS_METERS_CUBED = 0x0e, UNITS_KILOGRAMMES_PER_METER_CUBED = 0x0f, UNITS_METERS_PER_SECOND = 0x10,
  UNITS_METERS_PER_SECOND_SQUARED = 0x11, UNITS_NEWTON = 0x12, UNITS_JOULE = 0x13, UNITS_PASCAL = 0x14,
  UNITS_SECOND = 0x15, UNITS_DEGREE = 0x16, UNITS_STERADIAN = 0x17, UNITS_CANDELA = 0x18,
  UNITS_LUMEN = 0x19, UNITS_LUX = 0x1a, UNITS_IRE = 0x1b, UNITS_BYTE = 0x1c,
  PREFIX_NONE = 0x00, PREFIX_DECI = 0x01, PREFIX_CENTI = 0x02, PREFIX_MILLI = 0x03,
  PREFIX_MICRO = 0x04, PREFIX_NANO = 0x05, PREFIX_PICO = 0x06, PREFIX_FEMTO = 0x07,
  PREFIX_ATTO = 0x08, PREFIX_ZEPTO = 0x09, PREFIX_YOCTO = 0x0a, PREFIX_DECA = 0x11,
  PREFIX_HECTO = 0x12, PREFIX_KILO = 0x13, PREFIX_MEGA = 0x14, PREFIX_GIGA = 0x15,
  PREFIX_TERA = 0x16, PREFIX_PETA = 0x17, PREFIX_EXA = 0x18, PREFIX_ZETTA = 0x19,
  PREFIX_YOTTA = 0x1a
}
 RDM Product Category codes from E1.20. More...
 
enum  __attribute__ {
  PRODUCT_CATEGORY_NOT_DECLARED = 0x0000, PRODUCT_CATEGORY_FIXTURE = 0x0100, PRODUCT_CATEGORY_FIXTURE_FIXED = 0x0101, PRODUCT_CATEGORY_FIXTURE_MOVING_YOKE = 0x0102,
  PRODUCT_CATEGORY_FIXTURE_MOVING_MIRROR = 0x0103, PRODUCT_CATEGORY_FIXTURE_OTHER = 0x01ff, PRODUCT_CATEGORY_FIXTURE_ACCESSORY = 0x0200, PRODUCT_CATEGORY_FIXTURE_ACCESSORY_COLOR = 0x0201,
  PRODUCT_CATEGORY_FIXTURE_ACCESSORY_YOKE = 0x0202, PRODUCT_CATEGORY_FIXTURE_ACCESSORY_MIRROR = 0x0203, PRODUCT_CATEGORY_FIXTURE_ACCESSORY_EFFECT = 0x0204, PRODUCT_CATEGORY_FIXTURE_ACCESSORY_BEAM = 0x0205,
  PRODUCT_CATEGORY_FIXTURE_ACCESSORY_OTHER = 0x02ff, PRODUCT_CATEGORY_PROJECTOR = 0x0300, PRODUCT_CATEGORY_PROJECTOR_FIXED = 0x0301, PRODUCT_CATEGORY_PROJECTOR_MOVING_YOKE = 0x0302,
  PRODUCT_CATEGORY_PROJECTOR_MOVING_MIRROR = 0x0303, PRODUCT_CATEGORY_PROJECTOR_OTHER = 0x03ff, PRODUCT_CATEGORY_ATMOSPHERIC = 0x0400, PRODUCT_CATEGORY_ATMOSPHERIC_EFFECT = 0x0401,
  PRODUCT_CATEGORY_ATMOSPHERIC_PYRO = 0x0402, PRODUCT_CATEGORY_ATMOSPHERIC_OTHER = 0x04ff, PRODUCT_CATEGORY_DIMMER = 0x0500, PRODUCT_CATEGORY_DIMMER_AC_INCANDESCENT = 0x0501,
  PRODUCT_CATEGORY_DIMMER_AC_FLUORESCENT = 0x0502, PRODUCT_CATEGORY_DIMMER_AC_COLDCATHODE = 0x0503, PRODUCT_CATEGORY_DIMMER_AC_NONDIM = 0x0504, PRODUCT_CATEGORY_DIMMER_AC_ELV = 0x0505,
  PRODUCT_CATEGORY_DIMMER_AC_OTHER = 0x0506, PRODUCT_CATEGORY_DIMMER_DC_LEVEL = 0x0507, PRODUCT_CATEGORY_DIMMER_DC_PWM = 0x0508, PRODUCT_CATEGORY_DIMMER_CS_LED = 0x0509,
  PRODUCT_CATEGORY_DIMMER_OTHER = 0x05ff, PRODUCT_CATEGORY_POWER = 0x0600, PRODUCT_CATEGORY_POWER_CONTROL = 0x0601, PRODUCT_CATEGORY_POWER_SOURCE = 0x0602,
  PRODUCT_CATEGORY_POWER_OTHER = 0x06ff, PRODUCT_CATEGORY_SCENIC = 0x0700, PRODUCT_CATEGORY_SCENIC_DRIVE = 0x0701, PRODUCT_CATEGORY_SCENIC_OTHER = 0x07ff,
  PRODUCT_CATEGORY_DATA = 0x0800, PRODUCT_CATEGORY_DATA_DISTRIBUTION = 0x0801, PRODUCT_CATEGORY_DATA_CONVERSION = 0x0802, PRODUCT_CATEGORY_DATA_OTHER = 0x08ff,
  PRODUCT_CATEGORY_AV = 0x0900, PRODUCT_CATEGORY_AV_AUDIO = 0x0901, PRODUCT_CATEGORY_AV_VIDEO = 0x0902, PRODUCT_CATEGORY_AV_OTHER = 0x09ff,
  PRODUCT_CATEGORY_MONITOR = 0x0a00, PRODUCT_CATEGORY_MONITOR_ACLINEPOWER = 0x0a01, PRODUCT_CATEGORY_MONITOR_DCPOWER = 0x0a02, PRODUCT_CATEGORY_MONITOR_ENVIRONMENTAL = 0x0a03,
  PRODUCT_CATEGORY_MONITOR_OTHER = 0x0aff, PRODUCT_CATEGORY_CONTROL = 0x7000, PRODUCT_CATEGORY_CONTROL_CONTROLLER = 0x7001, PRODUCT_CATEGORY_CONTROL_BACKUPDEVICE = 0x7002,
  PRODUCT_CATEGORY_CONTROL_OTHER = 0x70ff, PRODUCT_CATEGORY_TEST = 0x7100, PRODUCT_CATEGORY_TEST_EQUIPMENT = 0x7101, PRODUCT_CATEGORY_TEST_EQUIPMENT_OTHER = 0x71ff,
  PRODUCT_CATEGORY_OTHER = 0x7fff, PRODUCT_DETAIL_NOT_DECLARED = 0x0000, PRODUCT_DETAIL_ARC = 0x0001, PRODUCT_DETAIL_METAL_HALIDE = 0x0002,
  PRODUCT_DETAIL_INCANDESCENT = 0x0003, PRODUCT_DETAIL_LED = 0x0004, PRODUCT_DETAIL_FLUORESCENT = 0x0005, PRODUCT_DETAIL_COLDCATHODE = 0x0006,
  PRODUCT_DETAIL_ELECTROLUMINESCENT = 0x0007, PRODUCT_DETAIL_LASER = 0x0008, PRODUCT_DETAIL_FLASHTUBE = 0x0009, PRODUCT_DETAIL_COLORSCROLLER = 0x0100,
  PRODUCT_DETAIL_COLORWHEEL = 0x0101, PRODUCT_DETAIL_COLORCHANGE = 0x0102, PRODUCT_DETAIL_IRIS_DOUSER = 0x0103, PRODUCT_DETAIL_DIMMING_SHUTTER = 0x0104,
  PRODUCT_DETAIL_PROFILE_SHUTTER = 0x0105, PRODUCT_DETAIL_BARNDOOR_SHUTTER = 0x0106, PRODUCT_DETAIL_EFFECTS_DISC = 0x0107, PRODUCT_DETAIL_GOBO_ROTATOR = 0x0108,
  PRODUCT_DETAIL_VIDEO = 0x0200, PRODUCT_DETAIL_SLIDE = 0x0201, PRODUCT_DETAIL_FILM = 0x0202, PRODUCT_DETAIL_OILWHEEL = 0x0203,
  PRODUCT_DETAIL_LCDGATE = 0x0204, PRODUCT_DETAIL_FOGGER_GLYCOL = 0x0300, PRODUCT_DETAIL_FOGGER_MINERALOIL = 0x0301, PRODUCT_DETAIL_FOGGER_WATER = 0x0302,
  PRODUCT_DETAIL_CO2 = 0x0303, PRODUCT_DETAIL_LN2 = 0x0304, PRODUCT_DETAIL_BUBBLE = 0x0305, PRODUCT_DETAIL_FLAME_PROPANE = 0x0306,
  PRODUCT_DETAIL_FLAME_OTHER = 0x0307, PRODUCT_DETAIL_OLEFACTORY_STIMULATOR = 0x0308, PRODUCT_DETAIL_SNOW = 0x0309, PRODUCT_DETAIL_WATER_JET = 0x030a,
  PRODUCT_DETAIL_WIND = 0x030b, PRODUCT_DETAIL_CONFETTI = 0x030c, PRODUCT_DETAIL_HAZARD = 0x030d, PRODUCT_DETAIL_PHASE_CONTROL = 0x0400,
  PRODUCT_DETAIL_REVERSE_PHASE_CONTROL = 0x0401, PRODUCT_DETAIL_SINE = 0x0402, PRODUCT_DETAIL_PWM = 0x0403, PRODUCT_DETAIL_DC = 0x0404,
  PRODUCT_DETAIL_HFBALLAST = 0x0405, PRODUCT_DETAIL_HFHV_NEONBALLAST = 0x0406, PRODUCT_DETAIL_HFHV_EL = 0x0407, PRODUCT_DETAIL_MHR_BALLAST = 0x0408,
  PRODUCT_DETAIL_BITANGLE_MODULATION = 0x0409, PRODUCT_DETAIL_FREQUENCY_MODULATION = 0x040a, PRODUCT_DETAIL_HIGHFREQUENCY_12V = 0x040b, PRODUCT_DETAIL_RELAY_MECHANICAL = 0x040c,
  PRODUCT_DETAIL_RELAY_ELECTRONIC = 0x040d, PRODUCT_DETAIL_SWITCH_ELECTRONIC = 0x040e, PRODUCT_DETAIL_CONTACTOR = 0x040f, PRODUCT_DETAIL_MIRRORBALL_ROTATOR = 0x0500,
  PRODUCT_DETAIL_OTHER_ROTATOR = 0x0501, PRODUCT_DETAIL_KABUKI_DROP = 0x0502, PRODUCT_DETAIL_CURTAIN = 0x0503, PRODUCT_DETAIL_LINESET = 0x0504,
  PRODUCT_DETAIL_MOTOR_CONTROL = 0x0505, PRODUCT_DETAIL_DAMPER_CONTROL = 0x0506, PRODUCT_DETAIL_SPLITTER = 0x0600, PRODUCT_DETAIL_ETHERNET_NODE = 0x0601,
  PRODUCT_DETAIL_MERGE = 0x0602, PRODUCT_DETAIL_DATAPATCH = 0x0603, PRODUCT_DETAIL_WIRELESS_LINK = 0x0604, PRODUCT_DETAIL_PROTOCOL_CONVERTER = 0x0701,
  PRODUCT_DETAIL_ANALOG_DEMULTIPLEX = 0x0702, PRODUCT_DETAIL_ANALOG_MULTIPLEX = 0x0703, PRODUCT_DETAIL_SWITCH_PANEL = 0x0704, PRODUCT_DETAIL_ROUTER = 0x0800,
  PRODUCT_DETAIL_FADER = 0x0801, PRODUCT_DETAIL_MIXER = 0x0802, PRODUCT_DETAIL_CHANGEOVER_MANUAL = 0x0900, PRODUCT_DETAIL_CHANGEOVER_AUTO = 0x0901,
  PRODUCT_DETAIL_TEST = 0x0902, PRODUCT_DETAIL_GFI_RCD = 0x0a00, PRODUCT_DETAIL_BATTERY = 0x0a01, PRODUCT_DETAIL_CONTROLLABLE_BREAKER = 0x0a02,
  PRODUCT_DETAIL_OTHER = 0x7fff, SENSOR_TEMPERATURE = 0x00, SENSOR_VOLTAGE = 0x01, SENSOR_CURRENT = 0x02,
  SENSOR_FREQUENCY = 0x03, SENSOR_RESISTANCE = 0x04, SENSOR_POWER = 0x05, SENSOR_MASS = 0x06,
  SENSOR_LENGTH = 0x07, SENSOR_AREA = 0x08, SENSOR_VOLUME = 0x09, SENSOR_DENSITY = 0x0a,
  SENSOR_VELOCITY = 0x0b, SENSOR_ACCELERATION = 0x0c, SENSOR_FORCE = 0x0d, SENSOR_ENERGY = 0x0e,
  SENSOR_PRESSURE = 0x0f, SENSOR_TIME = 0x10, SENSOR_ANGLE = 0x11, SENSOR_POSITION_X = 0x12,
  SENSOR_POSITION_Y = 0x13, SENSOR_POSITION_Z = 0x14, SENSOR_ANGULAR_VELOCITY = 0x15, SENSOR_LUMINOUS_INTENSITY = 0x16,
  SENSOR_LUMINOUS_FLUX = 0x17, SENSOR_ILLUMINANCE = 0x18, SENSOR_CHROMINANCE_RED = 0x19, SENSOR_CHROMINANCE_GREEN = 0x1a,
  SENSOR_CHROMINANCE_BLUE = 0x1b, SENSOR_CONTACTS = 0x1c, SENSOR_MEMORY = 0x1d, SENSOR_ITEMS = 0x1e,
  SENSOR_HUMIDITY = 0x1f, SENSOR_COUNTER_16BIT = 0x20, SENSOR_OTHER = 0x7f, UNITS_NONE = 0x00,
  UNITS_CENTIGRADE = 0x01, UNITS_VOLTS_DC = 0x02, UNITS_VOLTS_AC_PEAK = 0x03, UNITS_VOLTS_AC_RMS = 0x04,
  UNITS_AMPERE_DC = 0x05, UNITS_AMPERE_AC_PEAK = 0x06, UNITS_AMPERE_AC_RMS = 0x07, UNITS_HERTZ = 0x08,
  UNITS_OHM = 0x09, UNITS_WATT = 0x0a, UNITS_KILOGRAM = 0x0b, UNITS_METERS = 0x0c,
  UNITS_METERS_SQUARED = 0x0d, UNITS_METERS_CUBED = 0x0e, UNITS_KILOGRAMMES_PER_METER_CUBED = 0x0f, UNITS_METERS_PER_SECOND = 0x10,
  UNITS_METERS_PER_SECOND_SQUARED = 0x11, UNITS_NEWTON = 0x12, UNITS_JOULE = 0x13, UNITS_PASCAL = 0x14,
  UNITS_SECOND = 0x15, UNITS_DEGREE = 0x16, UNITS_STERADIAN = 0x17, UNITS_CANDELA = 0x18,
  UNITS_LUMEN = 0x19, UNITS_LUX = 0x1a, UNITS_IRE = 0x1b, UNITS_BYTE = 0x1c,
  PREFIX_NONE = 0x00, PREFIX_DECI = 0x01, PREFIX_CENTI = 0x02, PREFIX_MILLI = 0x03,
  PREFIX_MICRO = 0x04, PREFIX_NANO = 0x05, PREFIX_PICO = 0x06, PREFIX_FEMTO = 0x07,
  PREFIX_ATTO = 0x08, PREFIX_ZEPTO = 0x09, PREFIX_YOCTO = 0x0a, PREFIX_DECA = 0x11,
  PREFIX_HECTO = 0x12, PREFIX_KILO = 0x13, PREFIX_MEGA = 0x14, PREFIX_GIGA = 0x15,
  PREFIX_TERA = 0x16, PREFIX_PETA = 0x17, PREFIX_EXA = 0x18, PREFIX_ZETTA = 0x19,
  PREFIX_YOTTA = 0x1a
}
 
enum  RDMLampState {
  LAMP_OFF = 0x00, LAMP_ON = 0x01, LAMP_STRIKE = 0x02, LAMP_STANDBY = 0x03,
  LAMP_NOT_PRESENT = 0x04, LAMP_ERROR = 0x7f
}
 
enum  RDMLampMode { LAMP_ON_MODE_OFF = 0x00, LAMP_ON_MODE_DMX = 0x01, LAMP_ON_MODE_ON = 0x02, LAMP_ON_MODE_ON_AFTER_CAL = 0x03 }
 
enum  RDMDisplayInvert { DISPLAY_INVERT_OFF = 0x00, DISPLAY_INVERT_ON = 0x01, DISPLAY_INVERT_AUTO = 0x02 }
 
enum  RDMSelfTest { SELF_TEST_OFF = 0x00, SELF_TEST_ALL = 0xff }
 
enum  RDMPowerState { POWER_STATE_FULL_OFF = 0x00, POWER_STATE_SHUTDOWN = 0x01, POWER_STATE_STANDBY = 0x02, POWER_STATE_NORMAL = 0xff }
 
enum  __attribute__ {
  PRODUCT_CATEGORY_NOT_DECLARED = 0x0000, PRODUCT_CATEGORY_FIXTURE = 0x0100, PRODUCT_CATEGORY_FIXTURE_FIXED = 0x0101, PRODUCT_CATEGORY_FIXTURE_MOVING_YOKE = 0x0102,
  PRODUCT_CATEGORY_FIXTURE_MOVING_MIRROR = 0x0103, PRODUCT_CATEGORY_FIXTURE_OTHER = 0x01ff, PRODUCT_CATEGORY_FIXTURE_ACCESSORY = 0x0200, PRODUCT_CATEGORY_FIXTURE_ACCESSORY_COLOR = 0x0201,
  PRODUCT_CATEGORY_FIXTURE_ACCESSORY_YOKE = 0x0202, PRODUCT_CATEGORY_FIXTURE_ACCESSORY_MIRROR = 0x0203, PRODUCT_CATEGORY_FIXTURE_ACCESSORY_EFFECT = 0x0204, PRODUCT_CATEGORY_FIXTURE_ACCESSORY_BEAM = 0x0205,
  PRODUCT_CATEGORY_FIXTURE_ACCESSORY_OTHER = 0x02ff, PRODUCT_CATEGORY_PROJECTOR = 0x0300, PRODUCT_CATEGORY_PROJECTOR_FIXED = 0x0301, PRODUCT_CATEGORY_PROJECTOR_MOVING_YOKE = 0x0302,
  PRODUCT_CATEGORY_PROJECTOR_MOVING_MIRROR = 0x0303, PRODUCT_CATEGORY_PROJECTOR_OTHER = 0x03ff, PRODUCT_CATEGORY_ATMOSPHERIC = 0x0400, PRODUCT_CATEGORY_ATMOSPHERIC_EFFECT = 0x0401,
  PRODUCT_CATEGORY_ATMOSPHERIC_PYRO = 0x0402, PRODUCT_CATEGORY_ATMOSPHERIC_OTHER = 0x04ff, PRODUCT_CATEGORY_DIMMER = 0x0500, PRODUCT_CATEGORY_DIMMER_AC_INCANDESCENT = 0x0501,
  PRODUCT_CATEGORY_DIMMER_AC_FLUORESCENT = 0x0502, PRODUCT_CATEGORY_DIMMER_AC_COLDCATHODE = 0x0503, PRODUCT_CATEGORY_DIMMER_AC_NONDIM = 0x0504, PRODUCT_CATEGORY_DIMMER_AC_ELV = 0x0505,
  PRODUCT_CATEGORY_DIMMER_AC_OTHER = 0x0506, PRODUCT_CATEGORY_DIMMER_DC_LEVEL = 0x0507, PRODUCT_CATEGORY_DIMMER_DC_PWM = 0x0508, PRODUCT_CATEGORY_DIMMER_CS_LED = 0x0509,
  PRODUCT_CATEGORY_DIMMER_OTHER = 0x05ff, PRODUCT_CATEGORY_POWER = 0x0600, PRODUCT_CATEGORY_POWER_CONTROL = 0x0601, PRODUCT_CATEGORY_POWER_SOURCE = 0x0602,
  PRODUCT_CATEGORY_POWER_OTHER = 0x06ff, PRODUCT_CATEGORY_SCENIC = 0x0700, PRODUCT_CATEGORY_SCENIC_DRIVE = 0x0701, PRODUCT_CATEGORY_SCENIC_OTHER = 0x07ff,
  PRODUCT_CATEGORY_DATA = 0x0800, PRODUCT_CATEGORY_DATA_DISTRIBUTION = 0x0801, PRODUCT_CATEGORY_DATA_CONVERSION = 0x0802, PRODUCT_CATEGORY_DATA_OTHER = 0x08ff,
  PRODUCT_CATEGORY_AV = 0x0900, PRODUCT_CATEGORY_AV_AUDIO = 0x0901, PRODUCT_CATEGORY_AV_VIDEO = 0x0902, PRODUCT_CATEGORY_AV_OTHER = 0x09ff,
  PRODUCT_CATEGORY_MONITOR = 0x0a00, PRODUCT_CATEGORY_MONITOR_ACLINEPOWER = 0x0a01, PRODUCT_CATEGORY_MONITOR_DCPOWER = 0x0a02, PRODUCT_CATEGORY_MONITOR_ENVIRONMENTAL = 0x0a03,
  PRODUCT_CATEGORY_MONITOR_OTHER = 0x0aff, PRODUCT_CATEGORY_CONTROL = 0x7000, PRODUCT_CATEGORY_CONTROL_CONTROLLER = 0x7001, PRODUCT_CATEGORY_CONTROL_BACKUPDEVICE = 0x7002,
  PRODUCT_CATEGORY_CONTROL_OTHER = 0x70ff, PRODUCT_CATEGORY_TEST = 0x7100, PRODUCT_CATEGORY_TEST_EQUIPMENT = 0x7101, PRODUCT_CATEGORY_TEST_EQUIPMENT_OTHER = 0x71ff,
  PRODUCT_CATEGORY_OTHER = 0x7fff, PRODUCT_DETAIL_NOT_DECLARED = 0x0000, PRODUCT_DETAIL_ARC = 0x0001, PRODUCT_DETAIL_METAL_HALIDE = 0x0002,
  PRODUCT_DETAIL_INCANDESCENT = 0x0003, PRODUCT_DETAIL_LED = 0x0004, PRODUCT_DETAIL_FLUORESCENT = 0x0005, PRODUCT_DETAIL_COLDCATHODE = 0x0006,
  PRODUCT_DETAIL_ELECTROLUMINESCENT = 0x0007, PRODUCT_DETAIL_LASER = 0x0008, PRODUCT_DETAIL_FLASHTUBE = 0x0009, PRODUCT_DETAIL_COLORSCROLLER = 0x0100,
  PRODUCT_DETAIL_COLORWHEEL = 0x0101, PRODUCT_DETAIL_COLORCHANGE = 0x0102, PRODUCT_DETAIL_IRIS_DOUSER = 0x0103, PRODUCT_DETAIL_DIMMING_SHUTTER = 0x0104,
  PRODUCT_DETAIL_PROFILE_SHUTTER = 0x0105, PRODUCT_DETAIL_BARNDOOR_SHUTTER = 0x0106, PRODUCT_DETAIL_EFFECTS_DISC = 0x0107, PRODUCT_DETAIL_GOBO_ROTATOR = 0x0108,
  PRODUCT_DETAIL_VIDEO = 0x0200, PRODUCT_DETAIL_SLIDE = 0x0201, PRODUCT_DETAIL_FILM = 0x0202, PRODUCT_DETAIL_OILWHEEL = 0x0203,
  PRODUCT_DETAIL_LCDGATE = 0x0204, PRODUCT_DETAIL_FOGGER_GLYCOL = 0x0300, PRODUCT_DETAIL_FOGGER_MINERALOIL = 0x0301, PRODUCT_DETAIL_FOGGER_WATER = 0x0302,
  PRODUCT_DETAIL_CO2 = 0x0303, PRODUCT_DETAIL_LN2 = 0x0304, PRODUCT_DETAIL_BUBBLE = 0x0305, PRODUCT_DETAIL_FLAME_PROPANE = 0x0306,
  PRODUCT_DETAIL_FLAME_OTHER = 0x0307, PRODUCT_DETAIL_OLEFACTORY_STIMULATOR = 0x0308, PRODUCT_DETAIL_SNOW = 0x0309, PRODUCT_DETAIL_WATER_JET = 0x030a,
  PRODUCT_DETAIL_WIND = 0x030b, PRODUCT_DETAIL_CONFETTI = 0x030c, PRODUCT_DETAIL_HAZARD = 0x030d, PRODUCT_DETAIL_PHASE_CONTROL = 0x0400,
  PRODUCT_DETAIL_REVERSE_PHASE_CONTROL = 0x0401, PRODUCT_DETAIL_SINE = 0x0402, PRODUCT_DETAIL_PWM = 0x0403, PRODUCT_DETAIL_DC = 0x0404,
  PRODUCT_DETAIL_HFBALLAST = 0x0405, PRODUCT_DETAIL_HFHV_NEONBALLAST = 0x0406, PRODUCT_DETAIL_HFHV_EL = 0x0407, PRODUCT_DETAIL_MHR_BALLAST = 0x0408,
  PRODUCT_DETAIL_BITANGLE_MODULATION = 0x0409, PRODUCT_DETAIL_FREQUENCY_MODULATION = 0x040a, PRODUCT_DETAIL_HIGHFREQUENCY_12V = 0x040b, PRODUCT_DETAIL_RELAY_MECHANICAL = 0x040c,
  PRODUCT_DETAIL_RELAY_ELECTRONIC = 0x040d, PRODUCT_DETAIL_SWITCH_ELECTRONIC = 0x040e, PRODUCT_DETAIL_CONTACTOR = 0x040f, PRODUCT_DETAIL_MIRRORBALL_ROTATOR = 0x0500,
  PRODUCT_DETAIL_OTHER_ROTATOR = 0x0501, PRODUCT_DETAIL_KABUKI_DROP = 0x0502, PRODUCT_DETAIL_CURTAIN = 0x0503, PRODUCT_DETAIL_LINESET = 0x0504,
  PRODUCT_DETAIL_MOTOR_CONTROL = 0x0505, PRODUCT_DETAIL_DAMPER_CONTROL = 0x0506, PRODUCT_DETAIL_SPLITTER = 0x0600, PRODUCT_DETAIL_ETHERNET_NODE = 0x0601,
  PRODUCT_DETAIL_MERGE = 0x0602, PRODUCT_DETAIL_DATAPATCH = 0x0603, PRODUCT_DETAIL_WIRELESS_LINK = 0x0604, PRODUCT_DETAIL_PROTOCOL_CONVERTER = 0x0701,
  PRODUCT_DETAIL_ANALOG_DEMULTIPLEX = 0x0702, PRODUCT_DETAIL_ANALOG_MULTIPLEX = 0x0703, PRODUCT_DETAIL_SWITCH_PANEL = 0x0704, PRODUCT_DETAIL_ROUTER = 0x0800,
  PRODUCT_DETAIL_FADER = 0x0801, PRODUCT_DETAIL_MIXER = 0x0802, PRODUCT_DETAIL_CHANGEOVER_MANUAL = 0x0900, PRODUCT_DETAIL_CHANGEOVER_AUTO = 0x0901,
  PRODUCT_DETAIL_TEST = 0x0902, PRODUCT_DETAIL_GFI_RCD = 0x0a00, PRODUCT_DETAIL_BATTERY = 0x0a01, PRODUCT_DETAIL_CONTROLLABLE_BREAKER = 0x0a02,
  PRODUCT_DETAIL_OTHER = 0x7fff, SENSOR_TEMPERATURE = 0x00, SENSOR_VOLTAGE = 0x01, SENSOR_CURRENT = 0x02,
  SENSOR_FREQUENCY = 0x03, SENSOR_RESISTANCE = 0x04, SENSOR_POWER = 0x05, SENSOR_MASS = 0x06,
  SENSOR_LENGTH = 0x07, SENSOR_AREA = 0x08, SENSOR_VOLUME = 0x09, SENSOR_DENSITY = 0x0a,
  SENSOR_VELOCITY = 0x0b, SENSOR_ACCELERATION = 0x0c, SENSOR_FORCE = 0x0d, SENSOR_ENERGY = 0x0e,
  SENSOR_PRESSURE = 0x0f, SENSOR_TIME = 0x10, SENSOR_ANGLE = 0x11, SENSOR_POSITION_X = 0x12,
  SENSOR_POSITION_Y = 0x13, SENSOR_POSITION_Z = 0x14, SENSOR_ANGULAR_VELOCITY = 0x15, SENSOR_LUMINOUS_INTENSITY = 0x16,
  SENSOR_LUMINOUS_FLUX = 0x17, SENSOR_ILLUMINANCE = 0x18, SENSOR_CHROMINANCE_RED = 0x19, SENSOR_CHROMINANCE_GREEN = 0x1a,
  SENSOR_CHROMINANCE_BLUE = 0x1b, SENSOR_CONTACTS = 0x1c, SENSOR_MEMORY = 0x1d, SENSOR_ITEMS = 0x1e,
  SENSOR_HUMIDITY = 0x1f, SENSOR_COUNTER_16BIT = 0x20, SENSOR_OTHER = 0x7f, UNITS_NONE = 0x00,
  UNITS_CENTIGRADE = 0x01, UNITS_VOLTS_DC = 0x02, UNITS_VOLTS_AC_PEAK = 0x03, UNITS_VOLTS_AC_RMS = 0x04,
  UNITS_AMPERE_DC = 0x05, UNITS_AMPERE_AC_PEAK = 0x06, UNITS_AMPERE_AC_RMS = 0x07, UNITS_HERTZ = 0x08,
  UNITS_OHM = 0x09, UNITS_WATT = 0x0a, UNITS_KILOGRAM = 0x0b, UNITS_METERS = 0x0c,
  UNITS_METERS_SQUARED = 0x0d, UNITS_METERS_CUBED = 0x0e, UNITS_KILOGRAMMES_PER_METER_CUBED = 0x0f, UNITS_METERS_PER_SECOND = 0x10,
  UNITS_METERS_PER_SECOND_SQUARED = 0x11, UNITS_NEWTON = 0x12, UNITS_JOULE = 0x13, UNITS_PASCAL = 0x14,
  UNITS_SECOND = 0x15, UNITS_DEGREE = 0x16, UNITS_STERADIAN = 0x17, UNITS_CANDELA = 0x18,
  UNITS_LUMEN = 0x19, UNITS_LUX = 0x1a, UNITS_IRE = 0x1b, UNITS_BYTE = 0x1c,
  PREFIX_NONE = 0x00, PREFIX_DECI = 0x01, PREFIX_CENTI = 0x02, PREFIX_MILLI = 0x03,
  PREFIX_MICRO = 0x04, PREFIX_NANO = 0x05, PREFIX_PICO = 0x06, PREFIX_FEMTO = 0x07,
  PREFIX_ATTO = 0x08, PREFIX_ZEPTO = 0x09, PREFIX_YOCTO = 0x0a, PREFIX_DECA = 0x11,
  PREFIX_HECTO = 0x12, PREFIX_KILO = 0x13, PREFIX_MEGA = 0x14, PREFIX_GIGA = 0x15,
  PREFIX_TERA = 0x16, PREFIX_PETA = 0x17, PREFIX_EXA = 0x18, PREFIX_ZETTA = 0x19,
  PREFIX_YOTTA = 0x1a
}
 
enum  __attribute__ {
  PRODUCT_CATEGORY_NOT_DECLARED = 0x0000, PRODUCT_CATEGORY_FIXTURE = 0x0100, PRODUCT_CATEGORY_FIXTURE_FIXED = 0x0101, PRODUCT_CATEGORY_FIXTURE_MOVING_YOKE = 0x0102,
  PRODUCT_CATEGORY_FIXTURE_MOVING_MIRROR = 0x0103, PRODUCT_CATEGORY_FIXTURE_OTHER = 0x01ff, PRODUCT_CATEGORY_FIXTURE_ACCESSORY = 0x0200, PRODUCT_CATEGORY_FIXTURE_ACCESSORY_COLOR = 0x0201,
  PRODUCT_CATEGORY_FIXTURE_ACCESSORY_YOKE = 0x0202, PRODUCT_CATEGORY_FIXTURE_ACCESSORY_MIRROR = 0x0203, PRODUCT_CATEGORY_FIXTURE_ACCESSORY_EFFECT = 0x0204, PRODUCT_CATEGORY_FIXTURE_ACCESSORY_BEAM = 0x0205,
  PRODUCT_CATEGORY_FIXTURE_ACCESSORY_OTHER = 0x02ff, PRODUCT_CATEGORY_PROJECTOR = 0x0300, PRODUCT_CATEGORY_PROJECTOR_FIXED = 0x0301, PRODUCT_CATEGORY_PROJECTOR_MOVING_YOKE = 0x0302,
  PRODUCT_CATEGORY_PROJECTOR_MOVING_MIRROR = 0x0303, PRODUCT_CATEGORY_PROJECTOR_OTHER = 0x03ff, PRODUCT_CATEGORY_ATMOSPHERIC = 0x0400, PRODUCT_CATEGORY_ATMOSPHERIC_EFFECT = 0x0401,
  PRODUCT_CATEGORY_ATMOSPHERIC_PYRO = 0x0402, PRODUCT_CATEGORY_ATMOSPHERIC_OTHER = 0x04ff, PRODUCT_CATEGORY_DIMMER = 0x0500, PRODUCT_CATEGORY_DIMMER_AC_INCANDESCENT = 0x0501,
  PRODUCT_CATEGORY_DIMMER_AC_FLUORESCENT = 0x0502, PRODUCT_CATEGORY_DIMMER_AC_COLDCATHODE = 0x0503, PRODUCT_CATEGORY_DIMMER_AC_NONDIM = 0x0504, PRODUCT_CATEGORY_DIMMER_AC_ELV = 0x0505,
  PRODUCT_CATEGORY_DIMMER_AC_OTHER = 0x0506, PRODUCT_CATEGORY_DIMMER_DC_LEVEL = 0x0507, PRODUCT_CATEGORY_DIMMER_DC_PWM = 0x0508, PRODUCT_CATEGORY_DIMMER_CS_LED = 0x0509,
  PRODUCT_CATEGORY_DIMMER_OTHER = 0x05ff, PRODUCT_CATEGORY_POWER = 0x0600, PRODUCT_CATEGORY_POWER_CONTROL = 0x0601, PRODUCT_CATEGORY_POWER_SOURCE = 0x0602,
  PRODUCT_CATEGORY_POWER_OTHER = 0x06ff, PRODUCT_CATEGORY_SCENIC = 0x0700, PRODUCT_CATEGORY_SCENIC_DRIVE = 0x0701, PRODUCT_CATEGORY_SCENIC_OTHER = 0x07ff,
  PRODUCT_CATEGORY_DATA = 0x0800, PRODUCT_CATEGORY_DATA_DISTRIBUTION = 0x0801, PRODUCT_CATEGORY_DATA_CONVERSION = 0x0802, PRODUCT_CATEGORY_DATA_OTHER = 0x08ff,
  PRODUCT_CATEGORY_AV = 0x0900, PRODUCT_CATEGORY_AV_AUDIO = 0x0901, PRODUCT_CATEGORY_AV_VIDEO = 0x0902, PRODUCT_CATEGORY_AV_OTHER = 0x09ff,
  PRODUCT_CATEGORY_MONITOR = 0x0a00, PRODUCT_CATEGORY_MONITOR_ACLINEPOWER = 0x0a01, PRODUCT_CATEGORY_MONITOR_DCPOWER = 0x0a02, PRODUCT_CATEGORY_MONITOR_ENVIRONMENTAL = 0x0a03,
  PRODUCT_CATEGORY_MONITOR_OTHER = 0x0aff, PRODUCT_CATEGORY_CONTROL = 0x7000, PRODUCT_CATEGORY_CONTROL_CONTROLLER = 0x7001, PRODUCT_CATEGORY_CONTROL_BACKUPDEVICE = 0x7002,
  PRODUCT_CATEGORY_CONTROL_OTHER = 0x70ff, PRODUCT_CATEGORY_TEST = 0x7100, PRODUCT_CATEGORY_TEST_EQUIPMENT = 0x7101, PRODUCT_CATEGORY_TEST_EQUIPMENT_OTHER = 0x71ff,
  PRODUCT_CATEGORY_OTHER = 0x7fff, PRODUCT_DETAIL_NOT_DECLARED = 0x0000, PRODUCT_DETAIL_ARC = 0x0001, PRODUCT_DETAIL_METAL_HALIDE = 0x0002,
  PRODUCT_DETAIL_INCANDESCENT = 0x0003, PRODUCT_DETAIL_LED = 0x0004, PRODUCT_DETAIL_FLUORESCENT = 0x0005, PRODUCT_DETAIL_COLDCATHODE = 0x0006,
  PRODUCT_DETAIL_ELECTROLUMINESCENT = 0x0007, PRODUCT_DETAIL_LASER = 0x0008, PRODUCT_DETAIL_FLASHTUBE = 0x0009, PRODUCT_DETAIL_COLORSCROLLER = 0x0100,
  PRODUCT_DETAIL_COLORWHEEL = 0x0101, PRODUCT_DETAIL_COLORCHANGE = 0x0102, PRODUCT_DETAIL_IRIS_DOUSER = 0x0103, PRODUCT_DETAIL_DIMMING_SHUTTER = 0x0104,
  PRODUCT_DETAIL_PROFILE_SHUTTER = 0x0105, PRODUCT_DETAIL_BARNDOOR_SHUTTER = 0x0106, PRODUCT_DETAIL_EFFECTS_DISC = 0x0107, PRODUCT_DETAIL_GOBO_ROTATOR = 0x0108,
  PRODUCT_DETAIL_VIDEO = 0x0200, PRODUCT_DETAIL_SLIDE = 0x0201, PRODUCT_DETAIL_FILM = 0x0202, PRODUCT_DETAIL_OILWHEEL = 0x0203,
  PRODUCT_DETAIL_LCDGATE = 0x0204, PRODUCT_DETAIL_FOGGER_GLYCOL = 0x0300, PRODUCT_DETAIL_FOGGER_MINERALOIL = 0x0301, PRODUCT_DETAIL_FOGGER_WATER = 0x0302,
  PRODUCT_DETAIL_CO2 = 0x0303, PRODUCT_DETAIL_LN2 = 0x0304, PRODUCT_DETAIL_BUBBLE = 0x0305, PRODUCT_DETAIL_FLAME_PROPANE = 0x0306,
  PRODUCT_DETAIL_FLAME_OTHER = 0x0307, PRODUCT_DETAIL_OLEFACTORY_STIMULATOR = 0x0308, PRODUCT_DETAIL_SNOW = 0x0309, PRODUCT_DETAIL_WATER_JET = 0x030a,
  PRODUCT_DETAIL_WIND = 0x030b, PRODUCT_DETAIL_CONFETTI = 0x030c, PRODUCT_DETAIL_HAZARD = 0x030d, PRODUCT_DETAIL_PHASE_CONTROL = 0x0400,
  PRODUCT_DETAIL_REVERSE_PHASE_CONTROL = 0x0401, PRODUCT_DETAIL_SINE = 0x0402, PRODUCT_DETAIL_PWM = 0x0403, PRODUCT_DETAIL_DC = 0x0404,
  PRODUCT_DETAIL_HFBALLAST = 0x0405, PRODUCT_DETAIL_HFHV_NEONBALLAST = 0x0406, PRODUCT_DETAIL_HFHV_EL = 0x0407, PRODUCT_DETAIL_MHR_BALLAST = 0x0408,
  PRODUCT_DETAIL_BITANGLE_MODULATION = 0x0409, PRODUCT_DETAIL_FREQUENCY_MODULATION = 0x040a, PRODUCT_DETAIL_HIGHFREQUENCY_12V = 0x040b, PRODUCT_DETAIL_RELAY_MECHANICAL = 0x040c,
  PRODUCT_DETAIL_RELAY_ELECTRONIC = 0x040d, PRODUCT_DETAIL_SWITCH_ELECTRONIC = 0x040e, PRODUCT_DETAIL_CONTACTOR = 0x040f, PRODUCT_DETAIL_MIRRORBALL_ROTATOR = 0x0500,
  PRODUCT_DETAIL_OTHER_ROTATOR = 0x0501, PRODUCT_DETAIL_KABUKI_DROP = 0x0502, PRODUCT_DETAIL_CURTAIN = 0x0503, PRODUCT_DETAIL_LINESET = 0x0504,
  PRODUCT_DETAIL_MOTOR_CONTROL = 0x0505, PRODUCT_DETAIL_DAMPER_CONTROL = 0x0506, PRODUCT_DETAIL_SPLITTER = 0x0600, PRODUCT_DETAIL_ETHERNET_NODE = 0x0601,
  PRODUCT_DETAIL_MERGE = 0x0602, PRODUCT_DETAIL_DATAPATCH = 0x0603, PRODUCT_DETAIL_WIRELESS_LINK = 0x0604, PRODUCT_DETAIL_PROTOCOL_CONVERTER = 0x0701,
  PRODUCT_DETAIL_ANALOG_DEMULTIPLEX = 0x0702, PRODUCT_DETAIL_ANALOG_MULTIPLEX = 0x0703, PRODUCT_DETAIL_SWITCH_PANEL = 0x0704, PRODUCT_DETAIL_ROUTER = 0x0800,
  PRODUCT_DETAIL_FADER = 0x0801, PRODUCT_DETAIL_MIXER = 0x0802, PRODUCT_DETAIL_CHANGEOVER_MANUAL = 0x0900, PRODUCT_DETAIL_CHANGEOVER_AUTO = 0x0901,
  PRODUCT_DETAIL_TEST = 0x0902, PRODUCT_DETAIL_GFI_RCD = 0x0a00, PRODUCT_DETAIL_BATTERY = 0x0a01, PRODUCT_DETAIL_CONTROLLABLE_BREAKER = 0x0a02,
  PRODUCT_DETAIL_OTHER = 0x7fff, SENSOR_TEMPERATURE = 0x00, SENSOR_VOLTAGE = 0x01, SENSOR_CURRENT = 0x02,
  SENSOR_FREQUENCY = 0x03, SENSOR_RESISTANCE = 0x04, SENSOR_POWER = 0x05, SENSOR_MASS = 0x06,
  SENSOR_LENGTH = 0x07, SENSOR_AREA = 0x08, SENSOR_VOLUME = 0x09, SENSOR_DENSITY = 0x0a,
  SENSOR_VELOCITY = 0x0b, SENSOR_ACCELERATION = 0x0c, SENSOR_FORCE = 0x0d, SENSOR_ENERGY = 0x0e,
  SENSOR_PRESSURE = 0x0f, SENSOR_TIME = 0x10, SENSOR_ANGLE = 0x11, SENSOR_POSITION_X = 0x12,
  SENSOR_POSITION_Y = 0x13, SENSOR_POSITION_Z = 0x14, SENSOR_ANGULAR_VELOCITY = 0x15, SENSOR_LUMINOUS_INTENSITY = 0x16,
  SENSOR_LUMINOUS_FLUX = 0x17, SENSOR_ILLUMINANCE = 0x18, SENSOR_CHROMINANCE_RED = 0x19, SENSOR_CHROMINANCE_GREEN = 0x1a,
  SENSOR_CHROMINANCE_BLUE = 0x1b, SENSOR_CONTACTS = 0x1c, SENSOR_MEMORY = 0x1d, SENSOR_ITEMS = 0x1e,
  SENSOR_HUMIDITY = 0x1f, SENSOR_COUNTER_16BIT = 0x20, SENSOR_OTHER = 0x7f, UNITS_NONE = 0x00,
  UNITS_CENTIGRADE = 0x01, UNITS_VOLTS_DC = 0x02, UNITS_VOLTS_AC_PEAK = 0x03, UNITS_VOLTS_AC_RMS = 0x04,
  UNITS_AMPERE_DC = 0x05, UNITS_AMPERE_AC_PEAK = 0x06, UNITS_AMPERE_AC_RMS = 0x07, UNITS_HERTZ = 0x08,
  UNITS_OHM = 0x09, UNITS_WATT = 0x0a, UNITS_KILOGRAM = 0x0b, UNITS_METERS = 0x0c,
  UNITS_METERS_SQUARED = 0x0d, UNITS_METERS_CUBED = 0x0e, UNITS_KILOGRAMMES_PER_METER_CUBED = 0x0f, UNITS_METERS_PER_SECOND = 0x10,
  UNITS_METERS_PER_SECOND_SQUARED = 0x11, UNITS_NEWTON = 0x12, UNITS_JOULE = 0x13, UNITS_PASCAL = 0x14,
  UNITS_SECOND = 0x15, UNITS_DEGREE = 0x16, UNITS_STERADIAN = 0x17, UNITS_CANDELA = 0x18,
  UNITS_LUMEN = 0x19, UNITS_LUX = 0x1a, UNITS_IRE = 0x1b, UNITS_BYTE = 0x1c,
  PREFIX_NONE = 0x00, PREFIX_DECI = 0x01, PREFIX_CENTI = 0x02, PREFIX_MILLI = 0x03,
  PREFIX_MICRO = 0x04, PREFIX_NANO = 0x05, PREFIX_PICO = 0x06, PREFIX_FEMTO = 0x07,
  PREFIX_ATTO = 0x08, PREFIX_ZEPTO = 0x09, PREFIX_YOCTO = 0x0a, PREFIX_DECA = 0x11,
  PREFIX_HECTO = 0x12, PREFIX_KILO = 0x13, PREFIX_MEGA = 0x14, PREFIX_GIGA = 0x15,
  PREFIX_TERA = 0x16, PREFIX_PETA = 0x17, PREFIX_EXA = 0x18, PREFIX_ZETTA = 0x19,
  PREFIX_YOTTA = 0x1a
}
 
enum  __attribute__ {
  PRODUCT_CATEGORY_NOT_DECLARED = 0x0000, PRODUCT_CATEGORY_FIXTURE = 0x0100, PRODUCT_CATEGORY_FIXTURE_FIXED = 0x0101, PRODUCT_CATEGORY_FIXTURE_MOVING_YOKE = 0x0102,
  PRODUCT_CATEGORY_FIXTURE_MOVING_MIRROR = 0x0103, PRODUCT_CATEGORY_FIXTURE_OTHER = 0x01ff, PRODUCT_CATEGORY_FIXTURE_ACCESSORY = 0x0200, PRODUCT_CATEGORY_FIXTURE_ACCESSORY_COLOR = 0x0201,
  PRODUCT_CATEGORY_FIXTURE_ACCESSORY_YOKE = 0x0202, PRODUCT_CATEGORY_FIXTURE_ACCESSORY_MIRROR = 0x0203, PRODUCT_CATEGORY_FIXTURE_ACCESSORY_EFFECT = 0x0204, PRODUCT_CATEGORY_FIXTURE_ACCESSORY_BEAM = 0x0205,
  PRODUCT_CATEGORY_FIXTURE_ACCESSORY_OTHER = 0x02ff, PRODUCT_CATEGORY_PROJECTOR = 0x0300, PRODUCT_CATEGORY_PROJECTOR_FIXED = 0x0301, PRODUCT_CATEGORY_PROJECTOR_MOVING_YOKE = 0x0302,
  PRODUCT_CATEGORY_PROJECTOR_MOVING_MIRROR = 0x0303, PRODUCT_CATEGORY_PROJECTOR_OTHER = 0x03ff, PRODUCT_CATEGORY_ATMOSPHERIC = 0x0400, PRODUCT_CATEGORY_ATMOSPHERIC_EFFECT = 0x0401,
  PRODUCT_CATEGORY_ATMOSPHERIC_PYRO = 0x0402, PRODUCT_CATEGORY_ATMOSPHERIC_OTHER = 0x04ff, PRODUCT_CATEGORY_DIMMER = 0x0500, PRODUCT_CATEGORY_DIMMER_AC_INCANDESCENT = 0x0501,
  PRODUCT_CATEGORY_DIMMER_AC_FLUORESCENT = 0x0502, PRODUCT_CATEGORY_DIMMER_AC_COLDCATHODE = 0x0503, PRODUCT_CATEGORY_DIMMER_AC_NONDIM = 0x0504, PRODUCT_CATEGORY_DIMMER_AC_ELV = 0x0505,
  PRODUCT_CATEGORY_DIMMER_AC_OTHER = 0x0506, PRODUCT_CATEGORY_DIMMER_DC_LEVEL = 0x0507, PRODUCT_CATEGORY_DIMMER_DC_PWM = 0x0508, PRODUCT_CATEGORY_DIMMER_CS_LED = 0x0509,
  PRODUCT_CATEGORY_DIMMER_OTHER = 0x05ff, PRODUCT_CATEGORY_POWER = 0x0600, PRODUCT_CATEGORY_POWER_CONTROL = 0x0601, PRODUCT_CATEGORY_POWER_SOURCE = 0x0602,
  PRODUCT_CATEGORY_POWER_OTHER = 0x06ff, PRODUCT_CATEGORY_SCENIC = 0x0700, PRODUCT_CATEGORY_SCENIC_DRIVE = 0x0701, PRODUCT_CATEGORY_SCENIC_OTHER = 0x07ff,
  PRODUCT_CATEGORY_DATA = 0x0800, PRODUCT_CATEGORY_DATA_DISTRIBUTION = 0x0801, PRODUCT_CATEGORY_DATA_CONVERSION = 0x0802, PRODUCT_CATEGORY_DATA_OTHER = 0x08ff,
  PRODUCT_CATEGORY_AV = 0x0900, PRODUCT_CATEGORY_AV_AUDIO = 0x0901, PRODUCT_CATEGORY_AV_VIDEO = 0x0902, PRODUCT_CATEGORY_AV_OTHER = 0x09ff,
  PRODUCT_CATEGORY_MONITOR = 0x0a00, PRODUCT_CATEGORY_MONITOR_ACLINEPOWER = 0x0a01, PRODUCT_CATEGORY_MONITOR_DCPOWER = 0x0a02, PRODUCT_CATEGORY_MONITOR_ENVIRONMENTAL = 0x0a03,
  PRODUCT_CATEGORY_MONITOR_OTHER = 0x0aff, PRODUCT_CATEGORY_CONTROL = 0x7000, PRODUCT_CATEGORY_CONTROL_CONTROLLER = 0x7001, PRODUCT_CATEGORY_CONTROL_BACKUPDEVICE = 0x7002,
  PRODUCT_CATEGORY_CONTROL_OTHER = 0x70ff, PRODUCT_CATEGORY_TEST = 0x7100, PRODUCT_CATEGORY_TEST_EQUIPMENT = 0x7101, PRODUCT_CATEGORY_TEST_EQUIPMENT_OTHER = 0x71ff,
  PRODUCT_CATEGORY_OTHER = 0x7fff, PRODUCT_DETAIL_NOT_DECLARED = 0x0000, PRODUCT_DETAIL_ARC = 0x0001, PRODUCT_DETAIL_METAL_HALIDE = 0x0002,
  PRODUCT_DETAIL_INCANDESCENT = 0x0003, PRODUCT_DETAIL_LED = 0x0004, PRODUCT_DETAIL_FLUORESCENT = 0x0005, PRODUCT_DETAIL_COLDCATHODE = 0x0006,
  PRODUCT_DETAIL_ELECTROLUMINESCENT = 0x0007, PRODUCT_DETAIL_LASER = 0x0008, PRODUCT_DETAIL_FLASHTUBE = 0x0009, PRODUCT_DETAIL_COLORSCROLLER = 0x0100,
  PRODUCT_DETAIL_COLORWHEEL = 0x0101, PRODUCT_DETAIL_COLORCHANGE = 0x0102, PRODUCT_DETAIL_IRIS_DOUSER = 0x0103, PRODUCT_DETAIL_DIMMING_SHUTTER = 0x0104,
  PRODUCT_DETAIL_PROFILE_SHUTTER = 0x0105, PRODUCT_DETAIL_BARNDOOR_SHUTTER = 0x0106, PRODUCT_DETAIL_EFFECTS_DISC = 0x0107, PRODUCT_DETAIL_GOBO_ROTATOR = 0x0108,
  PRODUCT_DETAIL_VIDEO = 0x0200, PRODUCT_DETAIL_SLIDE = 0x0201, PRODUCT_DETAIL_FILM = 0x0202, PRODUCT_DETAIL_OILWHEEL = 0x0203,
  PRODUCT_DETAIL_LCDGATE = 0x0204, PRODUCT_DETAIL_FOGGER_GLYCOL = 0x0300, PRODUCT_DETAIL_FOGGER_MINERALOIL = 0x0301, PRODUCT_DETAIL_FOGGER_WATER = 0x0302,
  PRODUCT_DETAIL_CO2 = 0x0303, PRODUCT_DETAIL_LN2 = 0x0304, PRODUCT_DETAIL_BUBBLE = 0x0305, PRODUCT_DETAIL_FLAME_PROPANE = 0x0306,
  PRODUCT_DETAIL_FLAME_OTHER = 0x0307, PRODUCT_DETAIL_OLEFACTORY_STIMULATOR = 0x0308, PRODUCT_DETAIL_SNOW = 0x0309, PRODUCT_DETAIL_WATER_JET = 0x030a,
  PRODUCT_DETAIL_WIND = 0x030b, PRODUCT_DETAIL_CONFETTI = 0x030c, PRODUCT_DETAIL_HAZARD = 0x030d, PRODUCT_DETAIL_PHASE_CONTROL = 0x0400,
  PRODUCT_DETAIL_REVERSE_PHASE_CONTROL = 0x0401, PRODUCT_DETAIL_SINE = 0x0402, PRODUCT_DETAIL_PWM = 0x0403, PRODUCT_DETAIL_DC = 0x0404,
  PRODUCT_DETAIL_HFBALLAST = 0x0405, PRODUCT_DETAIL_HFHV_NEONBALLAST = 0x0406, PRODUCT_DETAIL_HFHV_EL = 0x0407, PRODUCT_DETAIL_MHR_BALLAST = 0x0408,
  PRODUCT_DETAIL_BITANGLE_MODULATION = 0x0409, PRODUCT_DETAIL_FREQUENCY_MODULATION = 0x040a, PRODUCT_DETAIL_HIGHFREQUENCY_12V = 0x040b, PRODUCT_DETAIL_RELAY_MECHANICAL = 0x040c,
  PRODUCT_DETAIL_RELAY_ELECTRONIC = 0x040d, PRODUCT_DETAIL_SWITCH_ELECTRONIC = 0x040e, PRODUCT_DETAIL_CONTACTOR = 0x040f, PRODUCT_DETAIL_MIRRORBALL_ROTATOR = 0x0500,
  PRODUCT_DETAIL_OTHER_ROTATOR = 0x0501, PRODUCT_DETAIL_KABUKI_DROP = 0x0502, PRODUCT_DETAIL_CURTAIN = 0x0503, PRODUCT_DETAIL_LINESET = 0x0504,
  PRODUCT_DETAIL_MOTOR_CONTROL = 0x0505, PRODUCT_DETAIL_DAMPER_CONTROL = 0x0506, PRODUCT_DETAIL_SPLITTER = 0x0600, PRODUCT_DETAIL_ETHERNET_NODE = 0x0601,
  PRODUCT_DETAIL_MERGE = 0x0602, PRODUCT_DETAIL_DATAPATCH = 0x0603, PRODUCT_DETAIL_WIRELESS_LINK = 0x0604, PRODUCT_DETAIL_PROTOCOL_CONVERTER = 0x0701,
  PRODUCT_DETAIL_ANALOG_DEMULTIPLEX = 0x0702, PRODUCT_DETAIL_ANALOG_MULTIPLEX = 0x0703, PRODUCT_DETAIL_SWITCH_PANEL = 0x0704, PRODUCT_DETAIL_ROUTER = 0x0800,
  PRODUCT_DETAIL_FADER = 0x0801, PRODUCT_DETAIL_MIXER = 0x0802, PRODUCT_DETAIL_CHANGEOVER_MANUAL = 0x0900, PRODUCT_DETAIL_CHANGEOVER_AUTO = 0x0901,
  PRODUCT_DETAIL_TEST = 0x0902, PRODUCT_DETAIL_GFI_RCD = 0x0a00, PRODUCT_DETAIL_BATTERY = 0x0a01, PRODUCT_DETAIL_CONTROLLABLE_BREAKER = 0x0a02,
  PRODUCT_DETAIL_OTHER = 0x7fff, SENSOR_TEMPERATURE = 0x00, SENSOR_VOLTAGE = 0x01, SENSOR_CURRENT = 0x02,
  SENSOR_FREQUENCY = 0x03, SENSOR_RESISTANCE = 0x04, SENSOR_POWER = 0x05, SENSOR_MASS = 0x06,
  SENSOR_LENGTH = 0x07, SENSOR_AREA = 0x08, SENSOR_VOLUME = 0x09, SENSOR_DENSITY = 0x0a,
  SENSOR_VELOCITY = 0x0b, SENSOR_ACCELERATION = 0x0c, SENSOR_FORCE = 0x0d, SENSOR_ENERGY = 0x0e,
  SENSOR_PRESSURE = 0x0f, SENSOR_TIME = 0x10, SENSOR_ANGLE = 0x11, SENSOR_POSITION_X = 0x12,
  SENSOR_POSITION_Y = 0x13, SENSOR_POSITION_Z = 0x14, SENSOR_ANGULAR_VELOCITY = 0x15, SENSOR_LUMINOUS_INTENSITY = 0x16,
  SENSOR_LUMINOUS_FLUX = 0x17, SENSOR_ILLUMINANCE = 0x18, SENSOR_CHROMINANCE_RED = 0x19, SENSOR_CHROMINANCE_GREEN = 0x1a,
  SENSOR_CHROMINANCE_BLUE = 0x1b, SENSOR_CONTACTS = 0x1c, SENSOR_MEMORY = 0x1d, SENSOR_ITEMS = 0x1e,
  SENSOR_HUMIDITY = 0x1f, SENSOR_COUNTER_16BIT = 0x20, SENSOR_OTHER = 0x7f, UNITS_NONE = 0x00,
  UNITS_CENTIGRADE = 0x01, UNITS_VOLTS_DC = 0x02, UNITS_VOLTS_AC_PEAK = 0x03, UNITS_VOLTS_AC_RMS = 0x04,
  UNITS_AMPERE_DC = 0x05, UNITS_AMPERE_AC_PEAK = 0x06, UNITS_AMPERE_AC_RMS = 0x07, UNITS_HERTZ = 0x08,
  UNITS_OHM = 0x09, UNITS_WATT = 0x0a, UNITS_KILOGRAM = 0x0b, UNITS_METERS = 0x0c,
  UNITS_METERS_SQUARED = 0x0d, UNITS_METERS_CUBED = 0x0e, UNITS_KILOGRAMMES_PER_METER_CUBED = 0x0f, UNITS_METERS_PER_SECOND = 0x10,
  UNITS_METERS_PER_SECOND_SQUARED = 0x11, UNITS_NEWTON = 0x12, UNITS_JOULE = 0x13, UNITS_PASCAL = 0x14,
  UNITS_SECOND = 0x15, UNITS_DEGREE = 0x16, UNITS_STERADIAN = 0x17, UNITS_CANDELA = 0x18,
  UNITS_LUMEN = 0x19, UNITS_LUX = 0x1a, UNITS_IRE = 0x1b, UNITS_BYTE = 0x1c,
  PREFIX_NONE = 0x00, PREFIX_DECI = 0x01, PREFIX_CENTI = 0x02, PREFIX_MILLI = 0x03,
  PREFIX_MICRO = 0x04, PREFIX_NANO = 0x05, PREFIX_PICO = 0x06, PREFIX_FEMTO = 0x07,
  PREFIX_ATTO = 0x08, PREFIX_ZEPTO = 0x09, PREFIX_YOCTO = 0x0a, PREFIX_DECA = 0x11,
  PREFIX_HECTO = 0x12, PREFIX_KILO = 0x13, PREFIX_MEGA = 0x14, PREFIX_GIGA = 0x15,
  PREFIX_TERA = 0x16, PREFIX_PETA = 0x17, PREFIX_EXA = 0x18, PREFIX_ZETTA = 0x19,
  PREFIX_YOTTA = 0x1a
}
 
enum  RDMDataType {
  DS_NOT_DEFINED = 0x0, DS_BIT_FIELD = 0x01, DS_ASCII = 0x02, DS_UNSIGNED_BYTE = 0x03,
  DS_SIGNED_BYTE = 0x04, DS_UNSIGNED_WORD = 0x05, DS_SIGNED_WORD = 0x06, DS_UNSIGNED_DWORD = 0x07,
  DS_SIGNED_DWORD = 0x08
}
 
enum  RDMCommandClassSupported { CC_GET = 0x01, CC_SET = 0x02, CC_GET_SET = 0x03 }
 
enum  RDMSlotType {
  ST_PRIMARY = 0x00, ST_SEC_FINE = 0x01, ST_SEC_TIMING = 0x02, ST_SEC_SPEED = 0x03,
  ST_SEC_CONTROL = 0x04, ST_SEC_INDEX = 0x05, ST_SEC_ROTATION = 0x06, ST_SEC_INDEX_ROTATE = 0x07,
  ST_SEC_UNDEFINED = 0xff
}
 The RDM slot types, from table C-1 of the standard.
 
enum  RDMSlotCategory {
  SD_INTENSITY = 0x0001, SD_INTENSITY_MASTER = 0x0002, SD_PAN = 0x0101, SD_TILT = 0x0102,
  SD_COLOR_WHEEL = 0x0201, SD_COLOR_SUB_CYAN = 0x0202, SD_COLOR_SUB_YELLOW = 0x0203, SD_COLOR_SUB_MAGENTA = 0x0204,
  SD_COLOR_ADD_RED = 0x0205, SD_COLOR_ADD_GREEN = 0x0206, SD_COLOR_ADD_BLUE = 0x0207, SD_COLOR_CORRECTION = 0x0208,
  SD_COLOR_SCROLL = 0x0209, SD_COLOR_SEMAPHORE = 0x0210, SD_COLOR_ADD_AMBER = 0x0211, SD_COLOR_ADD_WHITE = 0x0212,
  SD_COLOR_ADD_WARM_WHITE = 0x0213, SD_COLOR_ADD_COOL_WHITE = 0x0214, SD_COLOR_SUB_UV = 0x0215, SD_COLOR_HUE = 0x0216,
  SD_COLOR_SATURATION = 0x0217, SD_STATIC_GOBO_WHEEL = 0x0301, SD_ROTO_GOBO_WHEEL = 0x0302, SD_PRISM_WHEEL = 0x0303,
  SD_EFFECTS_WHEEL = 0x0304, SD_BEAM_SIZE_IRIS = 0x0401, SD_EDGE = 0x0402, SD_FROST = 0x0403,
  SD_STROBE = 0x0404, SD_ZOOM = 0x0405, SD_FRAMING_SHUTTER = 0x0406, SD_SHUTTER_ROTATE = 0x0407,
  SD_DOUSER = 0x0408, SD_BARN_DOOR = 0x0409, SD_LAMP_CONTROL = 0x0501, SD_FIXTURE_CONTROL = 0x0502,
  SD_FIXTURE_SPEED = 0x0503, SD_MACRO = 0x0504, SD_POWER_CONTROL = 0x0505, SD_FAN_CONTROL = 0x0506,
  SD_HEATER_CONTROL = 0x0507, SD_FOUNTAIN_CONTROL = 0x0508, SD_UNDEFINED = 0xffff
}
 
enum  RDMIdentifyMode { IDENTIFY_MODE_QUIET = 0x00, IDENTIFY_MODE_LOUD = 0xff }
 
enum  RDMPresetPlayback { PRESET_PLAYBACK_OFF = 0x0000, PRESET_PLAYBACK_ALL = 0xffff }
 
enum  RDMPresetProgrammed { PRESET_NOT_PROGRAMMED = 0x00, PRESET_PROGRAMMED = 0x01, PRESET_PROGRAMMED_READ_ONLY = 0x02 }
 
enum  RDMMergeMode {
  MERGE_MODE_DEFAULT = 0x00, MERGE_MODE_HTP = 0x01, MERGE_MODE_LTP = 0x02, MERGE_MODE_DMX_ONLY = 0x03,
  MERGE_MODE_OTHER = 0xff
}
 
enum  RDMStatusMessageId {
  STS_CAL_FAIL = 0x0001, STS_SENS_NOT_FOUND = 0x0002, STS_SENS_ALWAYS_ON = 0x0003, STS_FEEDBACK_ERROR = 0x0004,
  STS_INDEX_ERROR = 0x0005, STS_LAMP_DOUSED = 0x0011, STS_LAMP_STRIKE = 0x0012, STS_LAMP_ACCESS_OPEN = 0x0013,
  STS_LAMP_ALWAYS_ON = 0x0014, STS_OVERTEMP = 0x0021, STS_UNDERTEMP = 0x0022, STS_SENS_OUT_RANGE = 0x0023,
  STS_OVERVOLTAGE_PHASE = 0x0031, STS_UNDERVOLTAGE_PHASE = 0x0032, STS_OVERCURRENT = 0x0033, STS_UNDERCURRENT = 0x0034,
  STS_PHASE = 0x0035, STS_PHASE_ERROR = 0x0036, STS_AMPS = 0x0037, STS_VOLTS = 0x0038,
  STS_DIMSLOT_OCCUPIED = 0x0041, STS_BREAKER_TRIP = 0x0042, STS_WATTS = 0x0043, STS_DIM_FAILURE = 0x0044,
  STS_DIM_PANIC = 0x0045, STS_LOAD_FAILURE = 0x0046, STS_READY = 0x0050, STS_NOT_READY = 0x0051,
  STS_LOW_FLUID = 0x0052, STS_EEPROM_ERROR = 0x0060, STS_RAM_ERROR = 0x0061, STS_FPGA_ERROR = 0x0062,
  STS_PROXY_BROADCAST_DROPPED = 0x0070, STS_ASC_RXOK = 0x0071, STS_ASC_DROPPED = 0x0072, STS_DMXNSCNONE = 0x0080,
  STS_DMXNSCLOSS = 0x0081, STS_DMXNSCERROR = 0x0082, STS_DMXNSC_OK = 0x0083
}
 
enum  OpenLightingStatusIdType { STS_OLP_TESTING = 0x8000, STS_OLP_SELFTEST_PASSED = 0x8001, STS_OLP_SELFTEST_FAILED = 0x8002 }
 
enum  ResponderModel {
  NULL_MODEL_ID = 0x0000, LED_MODEL_ID = 0x0100, PROXY_MODEL_ID = 0x0101, MOVING_LIGHT_MODEL_ID = 0x0102,
  SENSOR_MODEL_ID = 0x0103, NETWORK_MODEL_ID = 0x0104, DIMMER_MODEL_ID = 0x0105, PROXY_CHILD_MODEL_ID = 0x0106
}
 The Model IDs. More...
 
enum  ModelIoctl { IOCTL_GET_UID }
 Model ioctl enums. More...
 

Functions

void RDMResponder_Initialize (const RDMResponderSettings *settings)
 Initialize an RDMResponder struct. More...
 
void RDMResponder_Tasks ()
 Perform the periodic tasks. More...
 
void RDMResponder_SwitchResponder (RDMResponder *responder)
 Switch the current responder. More...
 
void RDMResponder_RestoreResponder ()
 Restore to the default responder.
 
void RDMResponder_InitResponder ()
 Initialize the current responder with default values.
 
void RDMResponder_ResetToFactoryDefaults ()
 Reset an RDMResponder to the factory defaults.
 
void RDMResponder_GetUID (uint8_t *uid)
 Get the UID of the responder. More...
 
int RDMResponder_HandleDUBRequest (const uint8_t *param_data, unsigned int param_data_length)
 Handle a Discovery-unique-branch request. More...
 
void RDMResponder_BuildHeader (const RDMHeader *incoming_header, RDMResponseType response_type, RDMCommandClass command_class, uint16_t pid, unsigned int param_data_length)
 Build the RDM header in the output buffer. More...
 
int RDMResponder_AddHeaderAndChecksum (const RDMHeader *incoming_header, RDMResponseType response_type, unsigned int message_length)
 
int RDMResponder_HandleDiscovery (const RDMHeader *incoming_header, const uint8_t *param_data)
 Handle discovery commands. More...
 
int RDMResponder_BuildSetAck (const RDMHeader *incoming_header)
 Build an RDM Set ACK with no param data. More...
 
int RDMResponder_BuildNack (const RDMHeader *incoming_header, RDMNackReason reason)
 Build an RDM NACK. More...
 
int RDMResponder_BuildAckTimer (const RDMHeader *incoming_header, uint16_t delay)
 Build an ACK TIMER. More...
 
int RDMResponder_BuildParamDescription (const RDMHeader *incoming_header, uint16_t param_id, const ParameterDescription *description)
 Build a PARAMETER_DESCRIPTION response. More...
 
int RDMResponder_DispatchPID (const RDMHeader *incoming_header, const uint8_t *param_data)
 Invoke a PID handler from the ResponderDefinition. More...
 
int RDMResponder_Ioctl (ModelIoctl command, uint8_t *data, unsigned int length)
 A base Ioctl handler. More...
 
int RDMResponder_GenericReturnString (const RDMHeader *incoming_header, const char *reply_string, unsigned int max_size)
 Build a response containing a string. More...
 
int RDMResponder_GenericGetBool (const RDMHeader *incoming_header, bool value)
 Handle a request to get a bool value. More...
 
int RDMResponder_GenericSetBool (const RDMHeader *incoming_header, const uint8_t *param_data, bool *value)
 Handle a request to set a bool value. More...
 
int RDMResponder_GenericGetUInt8 (const RDMHeader *incoming_header, uint8_t value)
 Handle a request to get a uint8_t value. More...
 
int RDMResponder_GenericSetUInt8 (const RDMHeader *incoming_header, const uint8_t *param_data, uint8_t *value)
 Handle a request to set a uint8_t value. More...
 
int RDMResponder_GenericGetUInt16 (const RDMHeader *incoming_header, uint16_t value)
 Handle a request to get a uint16_t value. More...
 
int RDMResponder_GenericSetUInt16 (const RDMHeader *incoming_header, const uint8_t *param_data, uint16_t *value)
 Handle a request to set a uint16_t value. More...
 
int RDMResponder_GenericGetUInt32 (const RDMHeader *incoming_header, uint32_t value)
 Handle a request to get a uint32_t value. More...
 
int RDMResponder_GenericSetUInt32 (const RDMHeader *incoming_header, const uint8_t *param_data, uint32_t *value)
 Handle a request to set a uint32_t value. More...
 
int RDMResponder_SetMute (const RDMHeader *incoming_header)
 Handle a SET MUTE request. More...
 
int RDMResponder_SetUnMute (const RDMHeader *incoming_header)
 Handle a SET UN_MUTE request. More...
 
int RDMResponder_GetCommsStatus (const RDMHeader *incoming_header, const uint8_t *param_data)
 Handle a GET COMMS_STATUS request. More...
 
int RDMResponder_SetCommsStatus (const RDMHeader *incoming_header, const uint8_t *param_data)
 Handle a SET COMMS_STATUS request. More...
 
int RDMResponder_GetDeviceInfo (const RDMHeader *incoming_header, const uint8_t *param_data)
 Handle a GET DEVICE_INFO request. More...
 
int RDMResponder_GetSupportedParameters (const RDMHeader *incoming_header, const uint8_t *param_data)
 Handle a SUPPORTED_PARAMETERS request. More...
 
int RDMResponder_GetProductDetailIds (const RDMHeader *incoming_header, const uint8_t *param_data)
 Handle a GET PRODUCT_DETAIL_IDS request. More...
 
int RDMResponder_GetDeviceModelDescription (const RDMHeader *incoming_header, const uint8_t *param_data)
 Handle a GET DEVICE_MODEL_DESCRIPTION request. More...
 
int RDMResponder_GetManufacturerLabel (const RDMHeader *incoming_header, const uint8_t *param_data)
 Handle a GET MANUFACTURER_LABEL request. More...
 
int RDMResponder_GetSoftwareVersionLabel (const RDMHeader *incoming_header, const uint8_t *param_data)
 Handle a GET SOFTWARE_VERSION_LABEL request. More...
 
int RDMResponder_GetBootSoftwareVersion (const RDMHeader *incoming_header, const uint8_t *param_data)
 Handle a GET BOOT_SOFTWARE_VERSION request. More...
 
int RDMResponder_GetBootSoftwareVersionLabel (const RDMHeader *incoming_header, const uint8_t *param_data)
 Handle a GET BOOT_SOFTWARE_LABEL request. More...
 
int RDMResponder_GetDeviceLabel (const RDMHeader *incoming_header, const uint8_t *param_data)
 Handle a GET DEVICE_LABEL request. More...
 
int RDMResponder_SetDeviceLabel (const RDMHeader *incoming_header, const uint8_t *param_data)
 
int RDMResponder_GetDMXPersonality (const RDMHeader *incoming_header, const uint8_t *param_data)
 Handle a GET DMX_PERSONALITY request. More...
 
int RDMResponder_SetDMXPersonality (const RDMHeader *incoming_header, const uint8_t *param_data)
 Handle a SET DMX_PERSONALITY request. More...
 
int RDMResponder_GetDMXPersonalityDescription (const RDMHeader *incoming_header, const uint8_t *param_data)
 Handle a GET DMX_PERSONALITY_DESCRIPTION request. More...
 
int RDMResponder_GetDMXStartAddress (const RDMHeader *incoming_header, const uint8_t *param_data)
 Handle a GET DMX_START_ADDRESS request. More...
 
int RDMResponder_SetDMXStartAddress (const RDMHeader *incoming_header, const uint8_t *param_data)
 Handle a SET DMX_START_ADDRESS request. More...
 
int RDMResponder_GetSlotInfo (const RDMHeader *incoming_header, const uint8_t *param_data)
 Handle a GET SLOT_INFO request. More...
 
int RDMResponder_GetSlotDescription (const RDMHeader *incoming_header, const uint8_t *param_data)
 Handle a GET SLOT_DESCRIPTION request. More...
 
int RDMResponder_GetDefaultSlotValue (const RDMHeader *incoming_header, const uint8_t *param_data)
 Handle a GET DEFAULT_SLOT_VALUE request. More...
 
int RDMResponder_GetSensorDefinition (const RDMHeader *incoming_header, const uint8_t *param_data)
 Handle a GET SENSOR_DEFINITION request. More...
 
int RDMResponder_GetSensorValue (const RDMHeader *incoming_header, const uint8_t *param_data)
 Handle a GET SENSOR_VALUE request. More...
 
int RDMResponder_SetSensorValue (const RDMHeader *incoming_header, const uint8_t *param_data)
 Handle a SET SENSOR_VALUE request. More...
 
int RDMResponder_SetRecordSensor (const RDMHeader *incoming_header, const uint8_t *param_data)
 Handle a SET RECORD_SENSOR request. More...
 
int RDMResponder_GetIdentifyDevice (const RDMHeader *incoming_header, const uint8_t *param_data)
 Handle a GET IDENTIFY_DEVICE request. More...
 
int RDMResponder_SetIdentifyDevice (const RDMHeader *incoming_header, const uint8_t *param_data)
 Handle a SET IDENTIFY_DEVICE request. More...
 

Variables

static const uint16_t SUBDEVICE_ROOT = 0u
 The root sub device.
 
static const uint16_t SUBDEVICE_ALL = 0xffffu
 All sub devices.
 
static const uint16_t SUBDEVICE_MAX = 0x0200u
 The maximum index for a sub device.
 
static const uint8_t SUB_START_CODE = 0x01u
 The RDM Sub Start Code.
 
static const uint8_t RDM_CHECKSUM_LENGTH = 2u
 The number of bytes in an RDM checksum.
 
static const uint8_t MESSAGE_LENGTH_OFFSET = 2u
 The location of the message length field in a frame.
 
static const uint8_t RDM_PARAM_DATA_LENGTH_OFFSET = 23u
 The location of the parameter data length in a frame.
 
static const uint8_t RDM_PARAM_DATA_OFFSET = 24u
 The location of the parameter data in a frame.
 
static const uint16_t RDM_VERSION = 0x0100u
 The RDM version we support.
 
static const uint16_t MAX_DMX_START_ADDRESS = 512u
 The maximum value for a DMX start address.
 
static const uint16_t INVALID_DMX_START_ADDRESS = 0xffffu
 The 'unpatched' DMX start address.
 
static const uint16_t MUTE_MANAGED_PROXY_FLAG = 0x01
 Indicates the responder is a managed proxy.
 
static const uint16_t MUTE_SUBDEVICE_FLAG = 0x02
 Indicates the responder has subdevices.
 
static const uint16_t MUTE_BOOTLOADER_FLAG = 0x04
 Indicates the responder is in bootloader mode.
 
static const uint16_t MUTE_PROXY_FLAG = 0x08
 Indicates the responder is a proxy.
 
static const uint8_t ALL_SENSORS = 0xffu
 The all-sensors value.
 
static const uint16_t SENSOR_VALUE_UNSUPPORTED = 0u
 Indicates that recorded / highest / lowest values aren't supported.
 
static const unsigned int MAX_STATUS_MESSAGES_PER_FRAME = 21u
 
static const unsigned int MAX_SLOT_INFO_PER_FRAME = 46u
 
static const unsigned int MAX_DEFAULT_SLOT_VALUE_PER_FRAME = 77u
 The maximum number of default slot value entries in a RDM frame.
 
static const uint16_t MAX_PIN_CODE = 9999u
 The maximum pin code from E1.37-1.
 
static const uint32_t NO_DEFAULT_ROUTE = 0u
 Indicates no route is assigned.
 
static const uint32_t IPV4_UNCONFIGURED = 0u
 Indicates no IP address is configured.
 
static const uint8_t MAX_NETMASK = 32u
 The maximum netmask value.
 
uint8_t * g_rdm_buffer
 The memory location used to build the RDM response. More...
 
const char MANUFACTURER_LABEL []
 The common MANUFACTURER_LABEL.
 
RDMResponderg_responder
 The global RDMResponder object.
 
static const int RDM_RESPONDER_NO_RESPONSE = 0
 Indicates there is no response required for the request.
 

Typedef Documentation

typedef int(* PIDCommandHandler)(const RDMHeader *incoming_header, const uint8_t *param_data)

A PID handler.

Parameters
incoming_headerThe header for the request.
param_dataThe parameter data, or NULL if there isn't any.
Returns
The size of the RDM response in g_rdm_buffer. Use RDM_RESPONDER_NO_RESPONSE if there is no response.

Enumeration Type Documentation

anonymous enum

Maximum size of RDM Parameter Data.

Enumerator
MAX_PARAM_DATA_SIZE 

Maximum size of RDM Parameter Data.

anonymous enum

Interface hardware types.

Enumerator
ETHERNET_HARDWARE_TYPE 

Ethernet.

IPSEC_HARDWARE_TYPE 

IPSEC.

RDM Product Category codes from E1.20.

Note
See Table A-5 from ANSI E1.20 for more information.
enum ModelIoctl

Model ioctl enums.

Ioctls are the generic 'catch-all' operations. We use them so we can reduce the number of functions we need to implement when adding a new model.

Enumerator
IOCTL_GET_UID 

Copies the model's UID into the data pointer.

Parameters
data,amemory location to copy the UID to.
lengthshould be set to UID_LENGTH.
Returns
Returns 1 on success or 0 if length didn't match UID_LENGTH.

RDM Command Classes from E1.20.

Note
See section 6.2.10 of ANSI E1.20 for more information.
Enumerator
DISCOVERY_COMMAND 

Discovery Command

DISCOVERY_COMMAND_RESPONSE 

Discovery Response

GET_COMMAND 

Get Command

GET_COMMAND_RESPONSE 

Get Response

SET_COMMAND 

Set Command

SET_COMMAND_RESPONSE 

Set Response

RDM NACK reason codes from E1.20.

Note
See Table A-17 from ANSI E1.20 for more information.
enum RDMPid

RDM Parameter IDs.

Note
These come from E1.20, E1.37-1, E1.37-2 etc.

RDM Command Classes from E1.20.

Note
See section 6.2.10 of ANSI E1.20 for more information.
Enumerator
ACK 

ACK

ACK_TIMER 

ACK Timer

NACK_REASON 

NACK with reason

ACK_OVERFLOW 

ACK OVERFLOW

The Model IDs.

See also
https://wiki.openlighting.org/index.php/Open_Lighting_Allocations.
Enumerator
NULL_MODEL_ID 

No model set.

LED_MODEL_ID 

A LED driver model.

PROXY_MODEL_ID 

A responder that acts as a proxy.

MOVING_LIGHT_MODEL_ID 

A responder that acts a moving light.

SENSOR_MODEL_ID 

A responder that contains only sensors.

NETWORK_MODEL_ID 

A responder that presents network interfaces.

DIMMER_MODEL_ID 

A responder that acts as a dimmer with sub-devices.

PROXY_CHILD_MODEL_ID 

A responder that sits behind the PROXY_MODEL_ID device.

Function Documentation

int RDMResponder_BuildAckTimer ( const RDMHeader *  incoming_header,
uint16_t  delay 
)

Build an ACK TIMER.

Parameters
incoming_headerThe header of the incoming frame.
delayThe ack timer delay in 10ths of a second.
Returns
The size of the RDM response frame.
void RDMResponder_BuildHeader ( const RDMHeader *  incoming_header,
RDMResponseType  response_type,
RDMCommandClass  command_class,
uint16_t  pid,
unsigned int  param_data_length 
)

Build the RDM header in the output buffer.

Parameters
incoming_headerThe header of the incoming frame.
response_typeThe response type to use.
command_classThe command class to use.
pidthe PID to use.
param_data_lengthThe length of the parameter data.
int RDMResponder_BuildNack ( const RDMHeader *  incoming_header,
RDMNackReason  reason 
)

Build an RDM NACK.

Parameters
incoming_headerThe header of the incoming frame.
reasonThe NACK reason code.
Returns
The size of the RDM response frame.
int RDMResponder_BuildParamDescription ( const RDMHeader *  incoming_header,
uint16_t  param_id,
const ParameterDescription description 
)

Build a PARAMETER_DESCRIPTION response.

Parameters
incoming_headerThe header of the incoming frame.
param_idThe PID this description is for.
descriptionthe parameter description.
Returns
The size of the RDM response frame.
int RDMResponder_BuildSetAck ( const RDMHeader *  incoming_header)

Build an RDM Set ACK with no param data.

Parameters
incoming_headerThe header of the incoming frame.
Returns
The size of the RDM response frame.
int RDMResponder_DispatchPID ( const RDMHeader *  incoming_header,
const uint8_t *  param_data 
)

Invoke a PID handler from the ResponderDefinition.

Parameters
incoming_headerThe header of the incoming frame.
param_dataThe received parameter data.
Returns
The size of the RDM response frame.

This checks the ResponderDefinition for a matching PID handler of the correct command class. If one isn't found, it'll NACK with NR_UNSUPPORTED_COMMAND_CLASS or NR_UNKNOWN_PID.

int RDMResponder_GenericGetBool ( const RDMHeader *  incoming_header,
bool  value 
)

Handle a request to get a bool value.

Parameters
incoming_headerThe header of the incoming frame.
valueThe bool value
Returns
The size of the RDM response frame.
int RDMResponder_GenericGetUInt16 ( const RDMHeader *  incoming_header,
uint16_t  value 
)

Handle a request to get a uint16_t value.

Parameters
incoming_headerThe header of the incoming frame.
valueThe uint16_t value to return.
Returns
The size of the RDM response frame.
int RDMResponder_GenericGetUInt32 ( const RDMHeader *  incoming_header,
uint32_t  value 
)

Handle a request to get a uint32_t value.

Parameters
incoming_headerThe header of the incoming frame.
valueThe unsigned int value
Returns
The size of the RDM response frame.
int RDMResponder_GenericGetUInt8 ( const RDMHeader *  incoming_header,
uint8_t  value 
)

Handle a request to get a uint8_t value.

Parameters
incoming_headerThe header of the incoming frame.
valueThe uint8_t value to return.
Returns
The size of the RDM response frame.
int RDMResponder_GenericReturnString ( const RDMHeader *  incoming_header,
const char *  reply_string,
unsigned int  max_size 
)

Build a response containing a string.

Parameters
incoming_headerThe header of the incoming frame.
reply_stringThe string to reply with
max_sizeThe maximum size of the string. We may return a shorter string if it contains a NULL.
Returns
The size of the RDM response frame.
int RDMResponder_GenericSetBool ( const RDMHeader *  incoming_header,
const uint8_t *  param_data,
bool *  value 
)

Handle a request to set a bool value.

Parameters
incoming_headerThe header of the incoming frame.
param_dataThe received parameter data.
valueThe bool value to set
Returns
The size of the RDM response frame.
int RDMResponder_GenericSetUInt16 ( const RDMHeader *  incoming_header,
const uint8_t *  param_data,
uint16_t *  value 
)

Handle a request to set a uint16_t value.

Parameters
incoming_headerThe header of the incoming frame.
param_dataThe received parameter data.
valueThe uint16_t value to set.
Returns
The size of the RDM response frame.
int RDMResponder_GenericSetUInt32 ( const RDMHeader *  incoming_header,
const uint8_t *  param_data,
uint32_t *  value 
)

Handle a request to set a uint32_t value.

Parameters
incoming_headerThe header of the incoming frame.
param_dataThe received parameter data.
valueThe uint32_t value to set
Returns
The size of the RDM response frame.
int RDMResponder_GenericSetUInt8 ( const RDMHeader *  incoming_header,
const uint8_t *  param_data,
uint8_t *  value 
)

Handle a request to set a uint8_t value.

Parameters
incoming_headerThe header of the incoming frame.
param_dataThe received parameter data.
valueThe uint8_t value to set.
Returns
The size of the RDM response frame.
int RDMResponder_GetBootSoftwareVersion ( const RDMHeader *  incoming_header,
const uint8_t *  param_data 
)

Handle a GET BOOT_SOFTWARE_VERSION request.

Parameters
incoming_headerThe header of the incoming frame.
param_dataThe received parameter data.
Returns
The size of the RDM response frame.
int RDMResponder_GetBootSoftwareVersionLabel ( const RDMHeader *  incoming_header,
const uint8_t *  param_data 
)

Handle a GET BOOT_SOFTWARE_LABEL request.

Parameters
incoming_headerThe header of the incoming frame.
param_dataThe received parameter data.
Returns
The size of the RDM response frame.
int RDMResponder_GetCommsStatus ( const RDMHeader *  incoming_header,
const uint8_t *  param_data 
)

Handle a GET COMMS_STATUS request.

Parameters
incoming_headerThe header of the incoming frame.
param_dataThe received parameter data.
Returns
The size of the RDM response frame.
int RDMResponder_GetDefaultSlotValue ( const RDMHeader *  incoming_header,
const uint8_t *  param_data 
)

Handle a GET DEFAULT_SLOT_VALUE request.

Parameters
incoming_headerThe header of the incoming frame.
param_dataThe received parameter data.
Returns
The size of the RDM response frame.
int RDMResponder_GetDeviceInfo ( const RDMHeader *  incoming_header,
const uint8_t *  param_data 
)

Handle a GET DEVICE_INFO request.

Parameters
incoming_headerThe header of the incoming frame.
param_dataThe received parameter data.
Returns
The size of the RDM response frame.
int RDMResponder_GetDeviceLabel ( const RDMHeader *  incoming_header,
const uint8_t *  param_data 
)

Handle a GET DEVICE_LABEL request.

Parameters
incoming_headerThe header of the incoming frame.
param_dataThe received parameter data.
Returns
The size of the RDM response frame.
int RDMResponder_GetDeviceModelDescription ( const RDMHeader *  incoming_header,
const uint8_t *  param_data 
)

Handle a GET DEVICE_MODEL_DESCRIPTION request.

Parameters
incoming_headerThe header of the incoming frame.
param_dataThe received parameter data.
Returns
The size of the RDM response frame.
int RDMResponder_GetDMXPersonality ( const RDMHeader *  incoming_header,
const uint8_t *  param_data 
)

Handle a GET DMX_PERSONALITY request.

Parameters
incoming_headerThe header of the incoming frame.
param_dataThe received parameter data.
Returns
The size of the RDM response frame.
int RDMResponder_GetDMXPersonalityDescription ( const RDMHeader *  incoming_header,
const uint8_t *  param_data 
)

Handle a GET DMX_PERSONALITY_DESCRIPTION request.

Parameters
incoming_headerThe header of the incoming frame.
param_dataThe received parameter data.
Returns
The size of the RDM response frame.
int RDMResponder_GetDMXStartAddress ( const RDMHeader *  incoming_header,
const uint8_t *  param_data 
)

Handle a GET DMX_START_ADDRESS request.

Parameters
incoming_headerThe header of the incoming frame.
param_dataThe received parameter data.
Returns
The size of the RDM response frame.
int RDMResponder_GetIdentifyDevice ( const RDMHeader *  incoming_header,
const uint8_t *  param_data 
)

Handle a GET IDENTIFY_DEVICE request.

Parameters
incoming_headerThe header of the incoming frame.
param_dataThe received parameter data.
Returns
The size of the RDM response frame.
int RDMResponder_GetManufacturerLabel ( const RDMHeader *  incoming_header,
const uint8_t *  param_data 
)

Handle a GET MANUFACTURER_LABEL request.

Parameters
incoming_headerThe header of the incoming frame.
param_dataThe received parameter data.
Returns
The size of the RDM response frame.
int RDMResponder_GetProductDetailIds ( const RDMHeader *  incoming_header,
const uint8_t *  param_data 
)

Handle a GET PRODUCT_DETAIL_IDS request.

Parameters
incoming_headerThe header of the incoming frame.
param_dataThe received parameter data.
Returns
The size of the RDM response frame.
int RDMResponder_GetSensorDefinition ( const RDMHeader *  incoming_header,
const uint8_t *  param_data 
)

Handle a GET SENSOR_DEFINITION request.

Parameters
incoming_headerThe header of the incoming frame.
param_dataThe received parameter data.
Returns
The size of the RDM response frame.
int RDMResponder_GetSensorValue ( const RDMHeader *  incoming_header,
const uint8_t *  param_data 
)

Handle a GET SENSOR_VALUE request.

Parameters
incoming_headerThe header of the incoming frame.
param_dataThe received parameter data.
Returns
The size of the RDM response frame.
int RDMResponder_GetSlotDescription ( const RDMHeader *  incoming_header,
const uint8_t *  param_data 
)

Handle a GET SLOT_DESCRIPTION request.

Parameters
incoming_headerThe header of the incoming frame.
param_dataThe received parameter data.
Returns
The size of the RDM response frame.
int RDMResponder_GetSlotInfo ( const RDMHeader *  incoming_header,
const uint8_t *  param_data 
)

Handle a GET SLOT_INFO request.

Parameters
incoming_headerThe header of the incoming frame.
param_dataThe received parameter data.
Returns
The size of the RDM response frame.
int RDMResponder_GetSoftwareVersionLabel ( const RDMHeader *  incoming_header,
const uint8_t *  param_data 
)

Handle a GET SOFTWARE_VERSION_LABEL request.

Parameters
incoming_headerThe header of the incoming frame.
param_dataThe received parameter data.
Returns
The size of the RDM response frame.
int RDMResponder_GetSupportedParameters ( const RDMHeader *  incoming_header,
const uint8_t *  param_data 
)

Handle a SUPPORTED_PARAMETERS request.

Parameters
incoming_headerThe header of the incoming frame.
param_dataThe received parameter data.
Returns
The size of the RDM response frame.
void RDMResponder_GetUID ( uint8_t *  uid)

Get the UID of the responder.

Parameters
uidA pointer to copy the UID to; should be at least UID_LENGTH.
int RDMResponder_HandleDiscovery ( const RDMHeader *  incoming_header,
const uint8_t *  param_data 
)

Handle discovery commands.

Parameters
incoming_headerThe header of the incoming frame.
param_dataThe received parameter data.
Returns
The size of the RDM response frame. A negative value means no break should be sent.
int RDMResponder_HandleDUBRequest ( const uint8_t *  param_data,
unsigned int  param_data_length 
)

Handle a Discovery-unique-branch request.

Parameters
param_dataThe DUB request param_data.
param_data_lengthThe size of the param_data.
Returns
The size of the RDM response frame, this will be negative to indicate no break should be sent.
void RDMResponder_Initialize ( const RDMResponderSettings settings)

Initialize an RDMResponder struct.

Parameters
settingsthe settings to use for the responder.
int RDMResponder_Ioctl ( ModelIoctl  command,
uint8_t *  data,
unsigned int  length 
)

A base Ioctl handler.

Parameters
commandThe ioctl command to run.
dataarbitrary data, depends on the ModelIoctl.
lengththe size of the data.
Returns
An int, the meaning of which depends on the ModelIoctl.
int RDMResponder_SetCommsStatus ( const RDMHeader *  incoming_header,
const uint8_t *  param_data 
)

Handle a SET COMMS_STATUS request.

Parameters
incoming_headerThe header of the incoming frame.
param_dataThe received parameter data.
Returns
The size of the RDM response frame.
int RDMResponder_SetDeviceLabel ( const RDMHeader *  incoming_header,
const uint8_t *  param_data 
)
Parameters
incoming_headerThe header of the incoming frame.
param_dataThe received parameter data.
Returns
The size of the RDM response frame.
int RDMResponder_SetDMXPersonality ( const RDMHeader *  incoming_header,
const uint8_t *  param_data 
)

Handle a SET DMX_PERSONALITY request.

Parameters
incoming_headerThe header of the incoming frame.
param_dataThe received parameter data.
Returns
The size of the RDM response frame.
int RDMResponder_SetDMXStartAddress ( const RDMHeader *  incoming_header,
const uint8_t *  param_data 
)

Handle a SET DMX_START_ADDRESS request.

Parameters
incoming_headerThe header of the incoming frame.
param_dataThe received parameter data.
Returns
The size of the RDM response frame.
int RDMResponder_SetIdentifyDevice ( const RDMHeader *  incoming_header,
const uint8_t *  param_data 
)

Handle a SET IDENTIFY_DEVICE request.

Parameters
incoming_headerThe header of the incoming frame.
param_dataThe received parameter data.
Returns
The size of the RDM response frame.
int RDMResponder_SetMute ( const RDMHeader *  incoming_header)

Handle a SET MUTE request.

Parameters
incoming_headerThe header of the incoming frame.
Returns
The size of the RDM response frame.
int RDMResponder_SetRecordSensor ( const RDMHeader *  incoming_header,
const uint8_t *  param_data 
)

Handle a SET RECORD_SENSOR request.

Parameters
incoming_headerThe header of the incoming frame.
param_dataThe received parameter data.
Returns
The size of the RDM response frame.
int RDMResponder_SetSensorValue ( const RDMHeader *  incoming_header,
const uint8_t *  param_data 
)

Handle a SET SENSOR_VALUE request.

Parameters
incoming_headerThe header of the incoming frame.
param_dataThe received parameter data.
Returns
The size of the RDM response frame.
int RDMResponder_SetUnMute ( const RDMHeader *  incoming_header)

Handle a SET UN_MUTE request.

Parameters
incoming_headerThe header of the incoming frame.
Returns
The size of the RDM response frame.
void RDMResponder_SwitchResponder ( RDMResponder responder)

Switch the current responder.

Parameters
responderThe new responder to use.
void RDMResponder_Tasks ( )

Perform the periodic tasks.

This should be called in the main event loop.

Variable Documentation

uint8_t* g_rdm_buffer

The memory location used to build the RDM response.

Guaranteed to be at least RDM_MAX_FRAME_SIZE bytes.