1
0
Fork 0

unit lookup helpers

This commit is contained in:
Kevin Matz 2023-05-02 13:01:33 -04:00
parent e1f0836a55
commit 41b51f7aa9
2 changed files with 401 additions and 19 deletions

View File

@ -411,65 +411,440 @@ std::string NackReasonDescription(const uint16_t NR)
/**
* @brief StatusMessageDescription
* @param status
* @param data1
* @param data2
* @param label
* @return
*
* %d Decimal Number -- as decimal number
* %x Hexadecimal Number -- as hexadecimal number
* %L Slot Label Code -- as text description of Slot Label Code
*/
std::string StatusMessageDescription(uint16_t status)
std::string StatusMessageDescription(uint16_t status, std::string label, int data1, int data2)
{
switch (status) {
case STS_CAL_FAIL:
return "%L failed calibration";
return label+" failed calibration";
case STS_SENS_NOT_FOUND:
return "%L sensor not found";
return label+" sensor not found";
case STS_SENS_ALWAYS_ON:
return "%L sensor always on";
return label+" sensor always on";
case STS_LAMP_DOUSED:
return "Lamp doused";
case STS_LAMP_STRIKE:
return "Lamp failed to strike";
case STS_OVERTEMP:
return "Sensor %d over temp at %d degrees C";
return "Sensor "+std::to_string(data1)+" over temp at "+std::to_string(data2)+" °C";
case STS_UNDERTEMP:
return "Sensor %d under temp at %d degrees C";
return "Sensor "+std::to_string(data1)+" under temp at "+std::to_string(data2)+" °C";
case STS_SENS_OUT_RANGE:
return "Sensor %d out of range";
return "Sensor "+std::to_string(data1)+" out of range";
case STS_OVERVOLTAGE_PHASE:
return "Phase %d over voltage at %d V.";
return "Phase "+std::to_string(data1)+" over voltage at "+std::to_string(data2)+" V.";
case STS_UNDERVOLTAGE_PHASE:
return "Phase %d under voltage at %d V.";
return "Phase "+std::to_string(data1)+" under voltage at "+std::to_string(data2)+" V.";
case STS_OVERCURRENT:
return "Phase %d over current at %d A.";
return "Phase "+std::to_string(data1)+" over current at "+std::to_string(data2)+" A.";
case STS_UNDERCURRENT:
return "Phase %d under current at %d A.";
return "Phase "+std::to_string(data1)+" under current at "+std::to_string(data2)+" A.";
case STS_PHASE:
return "Phase %d is at %d degrees";
return "Phase "+std::to_string(data1)+" is at "+std::to_string(data2)+"°";
case STS_PHASE_ERROR:
return "Phase %d Error.";
return "Phase "+std::to_string(data1)+" Error.";
case STS_AMPS:
return "%d Amps";
return std::to_string(data1)+" Amps";
case STS_VOLTS:
return "%d Volts";
return std::to_string(data1)+" Volts";
case STS_DIMSLOT_OCCUPIED:
return "No Dimmer";
case STS_BREAKER_TRIP:
return "Tripped Breaker";
case STS_WATTS:
return "%d Watts";
return std::to_string(data1)+" Watts";
case STS_DIM_FAILURE:
return "Dimmer Failure";
case STS_DIM_PANIC:
return "Panic Mode";
case STS_READY:
return "%L ready";
return label+" ready";
case STS_NOT_READY:
return "%L not ready";
return label+" not ready";
case STS_LOW_FLUID:
return "%L low fluid";
return label+" low fluid";
default:
return std::string();
}
}
/**
* @brief SiUnitName
* @param unit
* @return
*/
std::string SiUnitName(const uint8_t unit)
{
switch (unit) {
case UNITS_CENTIGRADE:
return "Centigrade";
case UNITS_VOLTS_DC:
return "DC Volts";
case UNITS_VOLTS_AC_PEAK:
return "Peak AC Volts";
case UNITS_VOLTS_AC_RMS:
return "RMS AC Volts";
case UNITS_AMPERE_DC:
return "DC Amps";
case UNITS_AMPERE_AC_PEAK:
return "Peak AC Amps";
case UNITS_AMPERE_AC_RMS:
return "RMS AC Amps";
case UNITS_HERTZ:
return "Hertz";
case UNITS_OHM:
return "Ohms";
case UNITS_WATT:
return "Watts";
case UNITS_KILOGRAM:
return "kilograms";
case UNITS_METERS:
return "meters";
case UNITS_METERS_SQUARED:
return "square meters";
case UNITS_METERS_CUBED:
return "cubic meters";
case UNITS_KILOGRAMES_PER_METER_CUBED:
return "kilograms per cubic meter";
case UNITS_METERS_PER_SECOND:
return "meters per second";
case UNITS_METERS_PER_SECOND_SQUARED:
return "meters per second sqared";
case UNITS_NEWTON:
return "Newtons";
case UNITS_JOULE:
return "Joules";
case UNITS_PASCAL:
return "Pascals";
case UNITS_SECOND:
return "seconds";
case UNITS_DEGREE:
return "degrees";
case UNITS_STERADIAN:
return "streradians";
case UNITS_CANDELA:
return "candelas";
case UNITS_LUMEN:
return "lumen";
case UNITS_LUX:
return "lux";
case UNITS_IRE:
return "IRE";
case UNITS_BYTE:
return "byte";
default:
return std::string();
}
}
/**
* @brief SiUnitSymbol
* @param unit
* @return
*/
std::string SiUnitSymbol(const uint8_t unit)
{
switch (unit) {
case UNITS_CENTIGRADE:
return "°C";
case UNITS_VOLTS_DC:
return "Vᵈᶜ";
case UNITS_VOLTS_AC_PEAK:
return "Vᵖᵉᵃᵏ";
case UNITS_VOLTS_AC_RMS:
return "Vʳᵐˢ";
case UNITS_AMPERE_DC:
return "Aᵈᶜ";
case UNITS_AMPERE_AC_PEAK:
return "Aᵖᵉᵃᵏ";
case UNITS_AMPERE_AC_RMS:
return "Aʳᵐˢ";
case UNITS_HERTZ:
return "Hz";
case UNITS_OHM:
return "Ω";
case UNITS_WATT:
return "W";
case UNITS_KILOGRAM:
return "kg";
case UNITS_METERS:
return "m";
case UNITS_METERS_SQUARED:
return "";
case UNITS_METERS_CUBED:
return "";
case UNITS_KILOGRAMES_PER_METER_CUBED:
return "kg/m³";
case UNITS_METERS_PER_SECOND:
return "m/s";
case UNITS_METERS_PER_SECOND_SQUARED:
return "m/s²";
case UNITS_NEWTON:
return "N";
case UNITS_JOULE:
return "J";
case UNITS_PASCAL:
return "σ";
case UNITS_SECOND:
return "s";
case UNITS_DEGREE:
return "°";
case UNITS_STERADIAN:
return "Ω";
case UNITS_CANDELA:
return "Ιᵥ";
case UNITS_LUMEN:
return "Φᵥ";
case UNITS_LUX:
return "lx";
case UNITS_IRE:
return "IRE";
case UNITS_BYTE:
return "B";
default:
return std::string();
}
}
/**
* @brief SiUnitSymbolASCII
* @param unit
* @return
*/
std::string SiUnitSymbolASCII(const uint8_t unit)
{
switch (unit) {
case UNITS_CENTIGRADE:
return "deg(C)";
case UNITS_VOLTS_DC:
return "V(dc)";
case UNITS_VOLTS_AC_PEAK:
return "V(peak)";
case UNITS_VOLTS_AC_RMS:
return "V(rms)";
case UNITS_AMPERE_DC:
return "A(dc)";
case UNITS_AMPERE_AC_PEAK:
return "A(peak)";
case UNITS_AMPERE_AC_RMS:
return "A(rms)";
case UNITS_OHM:
return "Ohm";
case UNITS_METERS_SQUARED:
return "m^2";
case UNITS_METERS_CUBED:
return "m^3";
case UNITS_KILOGRAMES_PER_METER_CUBED:
return "kg/m^3";
case UNITS_METERS_PER_SECOND_SQUARED:
return "m/s^2";
case UNITS_PASCAL:
return "Pa";
case UNITS_DEGREE:
return "deg";
case UNITS_STERADIAN:
return "sr";
case UNITS_CANDELA:
return "cd";
case UNITS_LUMEN:
return "lm";
default:
return SiUnitSymbol(unit);
}
}
/**
* @brief SiPrefixName
* @param prefix
* @return
*/
std::string SiPrefixName(const uint8_t prefix)
{
switch (prefix) {
case PREFIX_DECI:
return "deci";
case PREFIX_CENTI:
return "centi";
case PREFIX_MILLI:
return "milli";
case PREFIX_MICRO:
return "micro";
case PREFIX_NANO:
return "nano";
case PREFIX_PICO:
return "pico";
case PREFIX_FEMPTO:
return "fempto";
case PREFIX_ATTO:
return "atto";
case PREFIX_ZEPTO:
return "zepto";
case PREFIX_YOCTO:
return "yocto";
case PREFIX_DECA:
return "deca";
case PREFIX_HECTO:
return "hecto";
case PREFIX_KILO:
return "kilo";
case PREFIX_MEGA:
return "mega";
case PREFIX_GIGA:
return "giga";
case PREFIX_TERA:
return "tera";
case PREFIX_PETA:
return "peta";
case PREFIX_EXA:
return "exa";
case PREFIX_ZETTA:
return "zetta";
case PREFIX_YOTTA:
return "yotta";
default:
return std::string();
}
}
/**
* @brief SiPrefixSymbol
* @param prefix
* @return
*/
std::string SiPrefixSymbol(const uint8_t prefix)
{
switch (prefix) {
case PREFIX_DECI:
return "d";
case PREFIX_CENTI:
return "c";
case PREFIX_MILLI:
return "m";
case PREFIX_MICRO:
return "μ";
case PREFIX_NANO:
return "n";
case PREFIX_PICO:
return "p";
case PREFIX_FEMPTO:
return "f";
case PREFIX_ATTO:
return "a";
case PREFIX_ZEPTO:
return "z";
case PREFIX_YOCTO:
return "y";
case PREFIX_DECA:
return "da";
case PREFIX_HECTO:
return "h";
case PREFIX_KILO:
return "k";
case PREFIX_MEGA:
return "M";
case PREFIX_GIGA:
return "G";
case PREFIX_TERA:
return "T";
case PREFIX_PETA:
return "P";
case PREFIX_EXA:
return "E";
case PREFIX_ZETTA:
return "Z";
case PREFIX_YOTTA:
return "Y";
default:
return std::string();
}
}
/**
* @brief SiPrefixSymbolASCII
* @param prefix
* @return
*/
std::string SiPrefixSymbolASCII(const uint8_t prefix)
{
switch (prefix) {
case PREFIX_MICRO:
return "u";
default:
return SiPrefixSymbol(prefix);
}
}
/**
* @brief SiPrefixBase10Exponent
* @param prefix
* @return
*/
int SiPrefixBase10Exponent(const uint8_t prefix)
{
switch (prefix) {
case PREFIX_NONE:
return 0;
case PREFIX_DECI:
return -1;
case PREFIX_CENTI:
return -2;
case PREFIX_MILLI:
return -3;
case PREFIX_MICRO:
return -6;
case PREFIX_NANO:
return -9;
case PREFIX_PICO:
return -12;
case PREFIX_FEMPTO:
return -15;
case PREFIX_ATTO:
return -18;
case PREFIX_ZEPTO:
return -21;
case PREFIX_YOCTO:
return -24;
case PREFIX_DECA:
return 1;
case PREFIX_HECTO:
return 2;
case PREFIX_KILO:
return 3;
case PREFIX_MEGA:
return 6;
case PREFIX_GIGA:
return 9;
case PREFIX_TERA:
return 12;
case PREFIX_PETA:
return 15;
case PREFIX_EXA:
return 18;
case PREFIX_ZETTA:
return 21;
case PREFIX_YOTTA:
return 24;
default:
return 0;
}
}
/**
* @brief StandardDescription
* @param pid

View File

@ -892,6 +892,13 @@ namespace RDM {
static const uint8_t SENS_OTHER = 0x7f;
// Tables A-13 thru A-16 are in parameterdescription.h
std::string SiUnitName(const uint8_t unit);
std::string SiUnitSymbol(const uint8_t unit);
std::string SiUnitSymbolASCII(const uint8_t unit);
std::string SiPrefixName(const uint8_t prefix);
std::string SiPrefixSymbol(const uint8_t prefix);
std::string SiPrefixSymbolASCII(const uint8_t prefix);
int SiPrefixBase10Exponent(const uint8_t prefix);
std::string NackReasonDescription(const uint16_t NR);
// Table A-17: Response NACK Reason Code