OpenLCP/protocol/esta/rdm/parameterdescription.h

108 lines
6.1 KiB
C++

#pragma once
#include <cstdint>
#include <limits>
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<uint32_t>::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