#pragma once #include #include namespace RDM { using PID = uint16_t; //!< 16-bit number that identifies a specific type of Parameter Data // Table A-13: Sensor Unit Defines const uint8_t UNITS_NONE = 0x00; //!< dimentionless const uint8_t UNITS_CENTIGRADE = 0x01; //!< termodynamic temperature const uint8_t UNITS_VOLTS_DC = 0x02; //!< electric potential const uint8_t UNITS_VOLTS_AC_PEAK = 0x03; //!< electric potential const uint8_t UNITS_VOLTS_AC_RMS = 0x04; //!< electric potential const uint8_t UNITS_AMPERE_DC = 0x05; //!< electric current const uint8_t UNITS_AMPERE_AC_PEAK = 0x06; //!< electric current const uint8_t UNITS_AMPERE_AC_RMS = 0x07; //!< electric current const uint8_t UNITS_HERTZ = 0x08; //!< frequency const uint8_t UNITS_OHM = 0x09; //!< electrical resistance const uint8_t UNITS_WATT = 0x0A; //!< power or radiant flux const uint8_t UNITS_KILOGRAM = 0x0B; //!< mass (1 000 grams) const uint8_t UNITS_METERS = 0x0C; //!< length const uint8_t UNITS_METERS_SQUARED = 0x0D; //!< area const uint8_t UNITS_METERS_CUBED = 0x0E; //!< volume const uint8_t UNITS_KILOGRAMES_PER_METER_CUBED = 0x0F; //!< density const uint8_t UNITS_METERS_PER_SECOND = 0x10; //!< speed const uint8_t UNITS_METERS_PER_SECOND_SQUARED = 0x11; //!< acceleration const uint8_t UNITS_NEWTON = 0x12; //!< force const uint8_t UNITS_JOULE = 0x13; //!< energy const uint8_t UNITS_PASCAL = 0x14; //!< pressure (1 N/m²) const uint8_t UNITS_SECOND = 0x15; //!< time const uint8_t UNITS_DEGREE = 0x16; //!< plane angle const uint8_t UNITS_STERADIAN = 0x17; //!< solid angle const uint8_t UNITS_CANDELA = 0x18; //!< luminous intensity const uint8_t UNITS_LUMEN = 0x19; //!< luminous flux const uint8_t UNITS_LUX = 0x1A; //!< illuminance const uint8_t UNITS_IRE = 0x1B; //!< video signal energy const uint8_t UNITS_BYTE = 0x1C; //!< digital information // Table A-14: Sensor Unit Prefix const uint8_t PREFIX_NONE = 0x00; //!< 1 const uint8_t PREFIX_DECI = 0x01; //!< 0.1 const uint8_t PREFIX_CENTI = 0x02; //!< 0.01 const uint8_t PREFIX_MILLI = 0x03; //!< 0.001 const uint8_t PREFIX_MICRO = 0x04; //!< 0.000 001 const uint8_t PREFIX_NANO = 0x05; //!< 0.000 000 001 const uint8_t PREFIX_PICO = 0x06; //!< 0.000 000 000 001 const uint8_t PREFIX_FEMPTO = 0x07; //!< 0.000 000 000 000 001 const uint8_t PREFIX_ATTO = 0x08; //!< 0.000 000 000 000 000 001 const uint8_t PREFIX_ZEPTO = 0x09; //!< 0.000 000 000 000 000 000 001 const uint8_t PREFIX_YOCTO = 0x0a; //!< 0.000 000 000 000 000 000 000 001 const uint8_t PREFIX_DECA = 0x11; //!< 10 const uint8_t PREFIX_HECTO = 0x12; //!< 100 const uint8_t PREFIX_KILO = 0x13; //!< 1 000 const uint8_t PREFIX_MEGA = 0x14; //!< 1 000 000 const uint8_t PREFIX_GIGA = 0x15; //!< 1 000 000 000 const uint8_t PREFIX_TERA = 0x16; //!< 1 000 000 000 000 const uint8_t PREFIX_PETA = 0x17; //!< 1 000 000 000 000 000 const uint8_t PREFIX_EXA = 0x18; //!< 1 000 000 000 000 000 000 const uint8_t PREFIX_ZETTA = 0x19; //!< 1 000 000 000 000 000 000 000 const uint8_t PREFIX_YOTTA = 0x1a; //!< 1 000 000 000 000 000 000 000 000 // Table A-15: Data Type Defines const uint8_t DS_NOT_DEFINED = 0x00; //!< Data is undefined const uint8_t DS_BIT_FIELD = 0x01; //!< Data is bit packed const uint8_t DS_ASCII = 0x02; //!< Data is a string const uint8_t DS_UNSIGNED_BYTE = 0x03; //!< Data is an array of unsigned bytes const uint8_t DS_SIGNED_BYTE = 0x04; //!< Data is an array of signed bytes const uint8_t DS_UNSIGNED_WORD = 0x05; //!< Data is an array of unsigned 16-bit words const uint8_t DS_SIGNED_WORD = 0x06; //!< Data is an array of signed 16-bit words const uint8_t DS_UNSIGNED_DWORD = 0x07; //!< Data is an array of unsigned 32-bit words const uint8_t DS_SIGNED_DWORD = 0x08; //!< Data is an array of signed 32-bit words // Table A-16 Parameter Description Command Class const uint8_t CC_DISC = 0b100; //!< PID supports DISCOVERY only \note Non-Standard value const uint8_t CC_GET = 0b001; //!< PID supports GET only const uint8_t CC_SET = 0b010; //!< PID supports SET only const uint8_t CC_GET_SET = 0b011; //!< PID supports both GET and SET /** * @brief The Parameter Description class */ struct ParameterDescription { PID pid = 0; //!< PID # /// Defined PDL sizes are the minimum reqired length. /// \note Optional data lengths must be verified in the PID Action struct { uint8_t get = 0; // use get size for discovery size uint8_t get_response = 0; // use get_response size for discovery response size uint8_t set = 0; uint8_t set_response = 0; } pdl; //!< PDL field uint8_t data_type = DS_NOT_DEFINED; //!< Table A-15 field code. uint8_t command_class = -1; //!< Table A-16 field code. const uint8_t type = 0; //!< no longer has any meaning uint8_t unit = UNITS_NONE; //!< Table A-13 SI unit. uint8_t prefix = PREFIX_NONE; //!< Table A-14 SI prefix. uint32_t minimum_value = 0; //!< The lowest value that data can reach. uint32_t maximum_value = std::numeric_limits::max(); //!< The hightest value that data can reach. uint32_t default_value = 0; //!< the default value of that data. char description[32] = {0}; //!< Describe the function of the specified PID. }; } // namespace RDM