1 // *********************************************************************
    2 //   IQRF standards header file                                        *
    3 // *********************************************************************
    4 // Copyright (c) IQRF Tech s.r.o.
    5 //
    6 // File:    $RCSfile: IQRFstandard.h,v $
    7 // Version: $Revision: 1.60 $
    8 // Date:    $Date: 2020/05/06 13:12:50 $
    9 //
   10 // Revision history:
   11 //   2020/04/03  Release for DPA 4.14
   12 //   2020/02/27  Release for DPA 4.13
   13 //   2020/01/09  Release for DPA 4.12
   14 //   2019/12/11  Release for DPA 4.11
   15 //   2019/10/09  Release for DPA 4.10
   16 //   2019/06/12  Release for DPA 4.03
   17 //   2019/06/03  Release for DPA 4.02
   18 //   2019/03/07  Release for DPA 4.01
   19 //   2019/01/20  Release for DPA 4.00
   20 //   2018/10/25  Release for DPA 3.03
   21 //   2017/11/16  Release for DPA 3.02
   22 //   2017/08/14  Release for DPA 3.01
   23 //
   24 // *********************************************************************
   25 
   26 // Online DPA documentation https://doc.iqrf.org/DpaTechGuide/
   27 // IQRF Standards documentation https://www.iqrfalliance.org/iqrf-interoperability/
   28 
   29 #ifndef _IQRFSTD_HEADER_
   30 #define _IQRFSTD_HEADER_
   31 
   32 //############################################################################################
   33 
   34 // Enumerate command valid for standards, when applicable
   35 #define PCMD_STD_ENUMERATE                      0x3E
   36 
   37 // -------------------------------------------------------------------------------------------
   38 // IQRF Sensors standard
   39 // -------------------------------------------------------------------------------------------
   40 // IQRF Sensors standard peripheral
   41 #define PNUM_STD_SENSORS                        0x5E
   42 // IQRF Sensors standard peripheral type
   43 #define PERIPHERAL_TYPE_STD_SENSORS             0x5E
   44 // Current version
   45 #define STD_SENSORS_VERSION                     15
   46 
   47 // IQRF Sensors standard peripheral - read sensor values command
   48 #define PCMD_STD_SENSORS_READ_VALUES            0x00
   49 // IQRF Sensors standard peripheral - read sensor types and values command
   50 #define PCMD_STD_SENSORS_READ_TYPES_AND_VALUES  0x01
   51 
   52 // IQRF Sensors standard peripheral - sensor types
   53 //  2 bytes
   54 #define STD_SENSOR_TYPE_TEMPERATURE             0x01
   55 #define STD_SENSOR_TYPE_CO2                     0x02
   56 #define STD_SENSOR_TYPE_VOC                     0x03
   57 #define STD_SENSOR_TYPE_EXTRA_LOW_VOLTAGE       0x04
   58 #define STD_SENSOR_TYPE_EARTHS_MAGNETIC_FIELD   0x05
   59 #define STD_SENSOR_TYPE_LOW_VOLTAGE             0x06
   60 #define STD_SENSOR_TYPE_CURRENT                 0x07
   61 #define STD_SENSOR_TYPE_POWER                   0x08
   62 #define STD_SENSOR_TYPE_MAINS_FREQUENCY         0x09
   63 #define STD_SENSOR_TYPE_TIMESPAN                0x0A
   64 #define STD_SENSOR_TYPE_ILLUMINANCE             0x0B
   65 #define STD_SENSOR_TYPE_NO2                     0x0C
   66 #define STD_SENSOR_TYPE_SO2                     0x0D
   67 #define STD_SENSOR_TYPE_CO                      0x0E
   68 #define STD_SENSOR_TYPE_O3                      0x0F
   69 #define STD_SENSOR_TYPE_ATMOSPHERIC_PRESSURE    0x10
   70 #define STD_SENSOR_TYPE_COLOR_TEMPERATURE       0x11
   71 #define STD_SENSOR_TYPE_PARTICULATES_PM25       0x12
   72 #define STD_SENSOR_TYPE_SOUND_PRESSURE_LEVEL    0x13
   73 #define STD_SENSOR_TYPE_ALTITUDE                0x14
   74 #define STD_SENSOR_TYPE_ACCELERATION            0x15
   75 #define STD_SENSOR_TYPE_NH3                     0x16
   76 #define STD_SENSOR_TYPE_METHANE                 0x17
   77 #define STD_SENSOR_TYPE_SHORT_LENGTH            0x18
   78 #define STD_SENSOR_TYPE_PARTICULATES_PM1        0x19
   79 #define STD_SENSOR_TYPE_PARTICULATES_PM4        0x1A
   80 #define STD_SENSOR_TYPE_PARTICULATES_PM10       0x1B
   81 
   82 //  1 byte
   83 #define STD_SENSOR_TYPE_HUMIDITY                0x80
   84 #define STD_SENSOR_TYPE_BINARYDATA7             0x81
   85 #define STD_SENSOR_TYPE_POWER_FACTOR            0x82
   86 #define STD_SENSOR_TYPE_UV_INDEX                0x83
   87 #define STD_SENSOR_TYPE_PH                      0x84
   88 
   89 //  4 bytes
   90 #define STD_SENSOR_TYPE_BINARYDATA30            0xA0
   91 #define STD_SENSOR_TYPE_CONSUMPTION             0xA1
   92 #define STD_SENSOR_TYPE_DATETIME                0xA2
   93 #define STD_SENSOR_TYPE_TIMESPAN_LONG           0xA3
   94 #define STD_SENSOR_TYPE_LATITUDE                0xA4
   95 #define STD_SENSOR_TYPE_LONGITUDE               0xA5
   96 
   97 // Computes constant (otherwise not optimal) quantity size
   98 #define STD_SENSOR_TYPE_SIZE(q) ( ( ( (q) & 0x80 ) == 0x00 ) * 2 + ( ( (q) & 0xE0 ) == 0x80 ) * 1 + ( ( (q) & 0xE0 ) == 0xA0 ) * 4  + ( ( q & 0xC0 ) == 0xC0 || (q) == 0x00 ) * 0xFfFfFfFf /* hopefully causes overflow to signal error */ )
   99 
  100 //  Multiple bytes
  101 #define STD_SENSOR_TYPE_DATA_BLOCK              0xC0
  102 
  103 // IQRF Sensors standard peripheral - FRC commands
  104 #define FRC_STD_SENSORS_BIT                     0x10
  105 #define FRC_STD_SENSORS_1B                      0x90
  106 #define FRC_STD_SENSORS_2B                      0xE0
  107 #define FRC_STD_SENSORS_4B                      0xF9
  108 
  109 typedef struct
  110 {
  111   // Equals to PNUM_STD_SENSORS
  112   uns8  Header;
  113   // Sensor type STD_SENSOR_TYPE_???
  114   uns8  SensorType;
  115   // Sensor index (bits 0-4) + optional extended data (bits 5-7)
  116   uns8  SensorIndex;
  117   // Options
  118   // bit  0  : sleep
  119   // bits 1-7: reserved
  120   uns8  Options;
  121   // Optional sleep parameters
  122   TPerOSSleep_Request SleepParameters;
  123 } STRUCTATTR TPerStdSensorFrc;
  124 
  125 
  126 #ifdef __CC5X__
  127 // The above structure located at memory
  128 TPerStdSensorFrc PerStdSensorFrc @ DataOutBeforeResponseFRC;
  129 #endif  // #ifdef __CC5X__
  130 
  131 // Structure for PCMD_STD_SENSORS_READ[_TYPES_AND]_VALUES
  132 typedef struct
  133 {
  134   uns8  Bitmap[4];
  135   uns8  WrittenData[DPA_MAX_DATA_LENGTH - 4];
  136 } STRUCTATTR TPerStdSensorRead_Request;
  137 
  138 // IQRF Sensors standard peripheral - error values
  139 //  2 bytes
  140 #define STD_SENSOR_TYPE_TEMPERATURE_SET_ERROR(v)            do { v = 0x8000; } while( 0 )
  141 #define STD_SENSOR_TYPE_TEMPERATURE_IS_ERROR(v)             ( (v) == 0x8000 )
  142 
  143 #define STD_SENSOR_TYPE_CO2_SET_ERROR(v)                    do { v = 0x8000; } while( 0 )
  144 #define STD_SENSOR_TYPE_CO2_IS_ERROR(v)                     ( (v) == 0x8000 )
  145 
  146 #define STD_SENSOR_TYPE_VOC_SET_ERROR(v)                    do { v = 0x8000; } while( 0 )
  147 #define STD_SENSOR_TYPE_VOC_IS_ERROR(v)                     ( (v) == 0x8000 )
  148 
  149 #define STD_SENSOR_TYPE_EXTRA_LOW_VOLTAGE_SET_ERROR(v)      do { v = 0x8000; } while( 0 )
  150 #define STD_SENSOR_TYPE_EXTRA_LOW_VOLTAGE_IS_ERROR(v)       ( (v) == 0x8000 )
  151 
  152 #define STD_SENSOR_TYPE_EARTHS_MAGNETIC_FIELD_SET_ERROR(v)  do { v = 0x8000; } while( 0 )
  153 #define STD_SENSOR_TYPE_EARTHS_MAGNETIC_FIELD_IS_ERROR(v)   ( (v) == 0x8000 )
  154 
  155 #define STD_SENSOR_TYPE_LOW_VOLTAGE_SET_ERROR(v)            do { v = 0x8000; } while( 0 )
  156 #define STD_SENSOR_TYPE_LOW_VOLTAGE_IS_ERROR(v)             ( (v) == 0x8000 )
  157 
  158 #define STD_SENSOR_TYPE_CURRENT_SET_ERROR(v)                do { v = 0x8000; } while( 0 )
  159 #define STD_SENSOR_TYPE_CURRENT_IS_ERROR(v)                 ( (v) == 0x8000 )
  160 
  161 #define STD_SENSOR_TYPE_POWER_SET_ERROR(v)                  do { v = 0xFfFf; } while( 0 )
  162 #define STD_SENSOR_TYPE_POWER_IS_ERROR(v)                   ( (v) == 0xFfFf )
  163 
  164 #define STD_SENSOR_TYPE_MAINS_FREQUENCY_SET_ERROR(v)        do { v = 0xFfFf; } while( 0 )
  165 #define STD_SENSOR_TYPE_MAINS_FREQUENCY_IS_ERROR(v)         ( (v) == 0xFfFf )
  166 
  167 #define STD_SENSOR_TYPE_TIMESPAN_SET_ERROR(v)               do { v = 0xFfFf; } while( 0 )
  168 #define STD_SENSOR_TYPE_TIMESPAN_IS_ERROR(v)                ( (v) == 0xFfFf )
  169 
  170 #define STD_SENSOR_TYPE_ILLUMINANCE_SET_ERROR(v)            do { v = 0xFfFf; } while( 0 )
  171 #define STD_SENSOR_TYPE_ILLUMINANCE_IS_ERROR(v)             ( (v) == 0xFfFf )
  172 
  173 #define STD_SENSOR_TYPE_NO2_SET_ERROR(v)                    do { v = 0xFfFf; } while( 0 )
  174 #define STD_SENSOR_TYPE_NO2_IS_ERROR(v)                     ( (v) == 0xFfFf )
  175 
  176 #define STD_SENSOR_TYPE_SO2_SET_ERROR(v)                    do { v = 0xFfFf; } while( 0 )
  177 #define STD_SENSOR_TYPE_SO2_IS_ERROR(v)                     ( (v) == 0xFfFf )
  178 
  179 #define STD_SENSOR_TYPE_CO_SET_ERROR(v)                     do { v = 0xFfFf; } while( 0 )
  180 #define STD_SENSOR_TYPE_CO_IS_ERROR(v)                      ( (v) == 0xFfFf )
  181 
  182 #define STD_SENSOR_TYPE_O3_SET_ERROR(v)                     do { v = 0xFfFf; } while( 0 )
  183 #define STD_SENSOR_TYPE_O3_IS_ERROR(v)                      ( (v) == 0xFfFf )
  184 
  185 #define STD_SENSOR_TYPE_ATMOSPHERIC_PRESSURE_SET_ERROR(v)   do { v = 0xFfFf; } while( 0 )
  186 #define STD_SENSOR_TYPE_ATMOSPHERIC_PRESSURE_IS_ERROR(v)    ( (v) == 0xFfFf )
  187 
  188 #define STD_SENSOR_TYPE_COLOR_TEMPERATURE_SET_ERROR(v)      do { v = 0x8000; } while( 0 )
  189 #define STD_SENSOR_TYPE_COLOR_TEMPERATURE_IS_ERROR(v)       ( (v) == 0x8000 )
  190 
  191 #define STD_SENSOR_TYPE_PARTICULATES_PM25_SET_ERROR(v)      do { v = 0x8000; } while( 0 )
  192 #define STD_SENSOR_TYPE_PARTICULATES_PM25_IS_ERROR(v)       ( (v) == 0x8000 )
  193 
  194 #define STD_SENSOR_TYPE_SOUND_PRESSURE_LEVEL_SET_ERROR(v)   do { v = 0x8000; } while( 0 )
  195 #define STD_SENSOR_TYPE_SOUND_PRESSURE_LEVEL_IS_ERROR(v)    ( (v) == 0x8000 )
  196 
  197 #define STD_SENSOR_TYPE_ALTITUDE_SET_ERROR(v)               do { v = 0xFfFf; } while( 0 )
  198 #define STD_SENSOR_TYPE_ALTITUDE_IS_ERROR(v)                ( (v) == 0xFfFf )
  199 
  200 #define STD_SENSOR_TYPE_ACCELERATION_SET_ERROR(v)           do { v = 0x8000; } while( 0 )
  201 #define STD_SENSOR_TYPE_ACCELERATION_IS_ERROR(v)            ( (v) == 0x8000 )
  202 
  203 #define STD_SENSOR_TYPE_NH3_SET_ERROR(v)                    do { v = 0xFfFf; } while( 0 )
  204 #define STD_SENSOR_TYPE_NH3_IS_ERROR(v)                     ( (v) == 0xFfFf )
  205 
  206 #define STD_SENSOR_TYPE_METHANE_SET_ERROR(v)                do { v = 0xFfFf; } while( 0 )
  207 #define STD_SENSOR_TYPE_METHANE_IS_ERROR(v)                 ( (v) == 0xFfFf )
  208 
  209 #define STD_SENSOR_TYPE_SHORT_LENGTH_SET_ERROR(v)           do { v = 0xFfFf; } while( 0 )
  210 #define STD_SENSOR_TYPE_SHORT_LENGTH_IS_ERROR(v)            ( (v) == 0xFfFf )
  211 
  212 #define STD_SENSOR_TYPE_PARTICULATES_PM1_SET_ERROR(v)       do { v = 0x8000; } while( 0 )
  213 #define STD_SENSOR_TYPE_PARTICULATES_PM1_IS_ERROR(v)        ( (v) == 0x8000 )
  214 
  215 #define STD_SENSOR_TYPE_PARTICULATES_PM4_SET_ERROR(v)       do { v = 0x8000; } while( 0 )
  216 #define STD_SENSOR_TYPE_PARTICULATES_PM4_IS_ERROR(v)        ( (v) == 0x8000 )
  217 
  218 #define STD_SENSOR_TYPE_PARTICULATES_PM10_SET_ERROR(v)      do { v = 0x8000; } while( 0 )
  219 #define STD_SENSOR_TYPE_PARTICULATES_PM10_IS_ERROR(v)       ( (v) == 0x8000 )
  220 
  221 //  1 byte
  222 #define STD_SENSOR_TYPE_HUMIDITY_SET_ERROR(v)               do { v = 0xEE; } while( 0 )
  223 #define STD_SENSOR_TYPE_HUMIDITY_IS_ERROR(v)                ( (v) == 0xEE )
  224 
  225 #define STD_SENSOR_TYPE_BINARYDATA7_SET_ERROR(v)            do { v = 0x80; } while( 0 )
  226 #define STD_SENSOR_TYPE_BINARYDATA7_IS_ERROR(v)             ( ( (v) & 0x80 ) != 0x00 )
  227 
  228 #define STD_SENSOR_TYPE_POWER_FACTOR_SET_ERROR(v)           do { v = 0xEE; } while( 0 )
  229 #define STD_SENSOR_TYPE_POWER_FACTOR_IS_ERROR(v)            ( (v) == 0xEE )
  230 
  231 #define STD_SENSOR_TYPE_UV_INDEX_SET_ERROR(v)               do { v = 0xFF; } while( 0 )
  232 #define STD_SENSOR_TYPE_UV_INDEX_IS_ERROR(v)                ( (v) == 0xFF )
  233 
  234 #define STD_SENSOR_TYPE_PH_INDEX_SET_ERROR(v)               do { v = 0xFF; } while( 0 )
  235 #define STD_SENSOR_TYPE_PH_INDEX_IS_ERROR(v)                ( (v) == 0xFF )
  236 
  237 
  238 //  4 bytes
  239 #define STD_SENSOR_TYPE_BINARYDATA30_SET_ERROR(v)           do { v = 0x80000000; } while( 0 )
  240 #define STD_SENSOR_TYPE_BINARYDATA30_IS_ERROR(v)            ( ( (v) & 0x80000000 ) != 0x00000000 )
  241 
  242 #define STD_SENSOR_TYPE_CONSUMPTION_SET_ERROR(v)            do { v = 0xFfFfFfFf; } while( 0 )
  243 #define STD_SENSOR_TYPE_CONSUMPTION_IS_ERROR(v)             ( (v) == 0xFfFfFfFf )
  244 
  245 #define STD_SENSOR_TYPE_DATETIME_SET_ERROR(v)               do { v = 0xFfFfFfFf; } while( 0 )
  246 #define STD_SENSOR_TYPE_DATETIME_IS_ERROR(v)                ( (v) == 0xFfFfFfFf )
  247 
  248 #define STD_SENSOR_TYPE_TIMESPAN_LONG_SET_ERROR(v)          do { v = 0xFfFfFfFf; } while( 0 )
  249 #define STD_SENSOR_TYPE_TIMESPAN_LONG_IS_ERROR(v)           ( (v) == 0xFfFfFfFf )
  250 
  251 #define STD_SENSOR_TYPE_LATITUDE_SET_ERROR(v)               do { v = 0xFF000000; } while( 0 )
  252 #define STD_SENSOR_TYPE_LATITUDE_IS_ERROR(v)                ( ( (v) & 0xFF000000 ) == 0xFF000000 )
  253 
  254 #define STD_SENSOR_TYPE_LONGITUDE_SET_ERROR(v)              do { v = 0xFF000000; } while( 0 )
  255 #define STD_SENSOR_TYPE_LONGITUDE_IS_ERROR(v)               ( ( (v) & 0xFF000000 ) == 0xFF000000 )
  256 
  257 //  Written data constants
  258 #define STD_SENSOR_TYPE_TEMPERATURE_DATA_GET_1_POINT_CALIBRATION  1
  259 #define STD_SENSOR_TYPE_TEMPERATURE_DATA_SET_1_POINT_CALIBRATION  2
  260 
  261 // -------------------------------------------------------------------------------------------
  262 // IQRF Binary Outputs standard
  263 // -------------------------------------------------------------------------------------------
  264 // IQRF Binary Outputs standard peripheral
  265 #define PNUM_STD_BINARY_OUTPUTS                 0x4B
  266 // IQRF Binary Outputs peripheral type
  267 #define PERIPHERAL_TYPE_STD_BINARY_OUTPUTS      0x4B
  268 // Current version
  269 #define STD_BINARY_OUTPUTS_VERSION              4
  270 
  271 // IQRF Binary Outputs standard peripheral - set outputs
  272 #define PCMD_STD_BINARY_OUTPUTS_SET             0x00
  273 
  274 // Structure returned by PCMD_STD_ENUMERATE
  275 typedef struct
  276 {
  277   uns8  Count;
  278 } STRUCTATTR TPerStdBinaryOutputEnumerate_Response;
  279 
  280 // Structure for PCMD_STD_BINARY_OUTPUTS_SET
  281 typedef struct
  282 {
  283   uns8  Bitmap[4];
  284   uns8  NewState[DPA_MAX_DATA_LENGTH - 4];
  285 } STRUCTATTR TPerStdBinaryOutputSet_Request;
  286 
  287 #define STD_BINARY_OUTPUT_STATE_OFF                    0x00
  288 #define STD_BINARY_OUTPUT_STATE_ON                     0x01
  289 
  290 #define STD_BINARY_OUTPUT_IS_STATE_OK(state)           ( (state) != 0x80 )
  291 #define STD_BINARY_OUTPUT_IS_STATE_OFF(state)          ( (state) == STD_BINARY_OUTPUT_STATE_OFF )
  292 #define STD_BINARY_OUTPUT_IS_STATE_ON(state)           ( (state) >= STD_BINARY_OUTPUT_STATE_ON )
  293 #define STD_BINARY_OUTPUT_STATE_HAS_TIME(state)        ( (state) > STD_BINARY_OUTPUT_STATE_ON )
  294 #define STD_BINARY_OUTPUT_STATE_TIME_IN_SECONDS(state) ( ( (state) & 0x80 ) != 0x00 )
  295 #define STD_BINARY_OUTPUT_STATE_GET_SECONDS(state)     ( (state) & 0x7F )
  296 #define STD_BINARY_OUTPUT_STATE_TIME_IN_MINUTES(state) ( (state) > STD_BINARY_OUTPUT_STATE_ON && (state) <= 0x7F )
  297 #define STD_BINARY_OUTPUT_STATE_GET_MINUTES(state)     (state)
  298 
  299 // Structure returned by PCMD_STD_BINARY_OUTPUTS_SET
  300 typedef struct
  301 {
  302   uns8  PreviousStates[4];
  303 } STRUCTATTR TPerStdBinaryOutputSet_Response;
  304 
  305 
  306 // -------------------------------------------------------------------------------------------
  307 // IQRF Light standard
  308 // -------------------------------------------------------------------------------------------
  309 // IQRF Light standard peripheral
  310 #define PNUM_STD_LIGHT                          0x71
  311 // IQRF Light standard peripheral type
  312 #define PERIPHERAL_TYPE_STD_LIGHT               0x71
  313 // Current version
  314 #define STD_LIGHT_VERSION                       5
  315 
  316 // IQRF Light standard peripheral - Set Power
  317 #define PCMD_STD_LIGHT_SET                      0x00
  318 // IQRF Light standard peripheral - Increment Power
  319 #define PCMD_STD_LIGHT_INC                      0x01
  320 // IQRF Light standard peripheral - Decrement Power
  321 #define PCMD_STD_LIGHT_DEC                      0x02
  322 
  323 // IQRF Light standard peripheral - FRC commands
  324 #define FRC_STD_LIGHT_ONOFF                     0x10
  325 #define FRC_STD_LIGHT_ALARM                     0x11
  326 
  327 // Structure returned by PCMD_STD_ENUMERATE
  328 typedef struct
  329 {
  330   uns8  Count;
  331 } STRUCTATTR TPerStdLightEnumerate_Response;
  332 
  333 // Structure for PCMD_STD_LIGHT_???
  334 typedef struct
  335 {
  336   uns8  Bitmap[4];
  337   uns8  Power[DPA_MAX_DATA_LENGTH - 4];
  338 } STRUCTATTR TPerStdLightSetIncDec_Request;
  339 
  340 #define STD_LIGHT_POWER_MIN                 0
  341 #define STD_LIGHT_POWER_MAX                 100
  342 #define STD_LIGHT_KEEP_POWER                127
  343 #define STD_LIGHT_IS_POWER_OK(power)        ( ( ( (power) & 0x7F ) <= STD_LIGHT_POWER_MAX ) || ( (power) & 0x7F ) == STD_LIGHT_KEEP_POWER )
  344 #define STD_LIGHT_TIME_FOLLOWS_POWER(power) ( ( (power) & 0x80 ) != 0x00 )
  345 
  346 #define STD_LIGHT_IS_TIME_OK(time)          ( ( (time) & 0x7F ) != 0x00 )
  347 #define STD_LIGHT_TIME_IN_SECONDS(time)     ( ( (time) & 0x80 ) != 0x00 )
  348 #define STD_LIGHT_TIME_GET_SECONDS(time)    ( (time) & 0x7F )
  349 #define STD_LIGHT_TIME_IN_MINUTES(time)     ( !STD_LIGHT_TIME_IN_SECONDS( time ) )
  350 #define STD_LIGHT_TIME_GET_MINUTES(time)    (time)
  351 
  352 // -------------------------------------------------------------------------------------------
  353 // IQRF DALI standard
  354 // -------------------------------------------------------------------------------------------
  355 // IQRF DALI standard peripheral
  356 #define PNUM_STD_DALI                           0x4A
  357 // IQRF DALI standard peripheral type
  358 #define PERIPHERAL_TYPE_STD_DALI                0x4A
  359 // Current version
  360 #define STD_DALI_VERSION                        0
  361 
  362 // IQRF DALI standard peripheral - Send DALI commands
  363 #define PCMD_STD_DALI_SEND_COMMANDS             0x00
  364 // IQRF DALI standard peripheral - Send DALI commands asynchronously
  365 #define PCMD_STD_DALI_SEND_COMMANDS_ASYNC       0x01
  366 
  367 // IQRF DALI standard peripheral - FRC commands
  368 #define FRC_STD_DALI_SEND                       0xE0
  369 
  370 // DALI answer byte #0
  371 typedef struct
  372 {
  373   bit Answer;
  374   bit AnswerError;
  375   bit _bit2_reserved;
  376   bit _bit3_reserved;
  377   bit _bit4_reserved;
  378   bit _bit5_reserved;
  379   bit _bit6_reserved;
  380   bit Always1;
  381 } TSTD_DALI_Answer0;
  382 
  383 // -------------------------------------------------------------------------------------------
  384 
  385 
  386 // DPA Message data structure (packet w/o NADR, PNUM, PCMD, HWPID) for IQRF standards
  387 typedef union
  388 {
  389   // Structure for PCMD_STD_SENSORS_READ[_TYPES_AND]_VALUES
  390   TPerStdSensorRead_Request PerStdSensorRead_Request;
  391 
  392   // Structure returned by PCMD_STD_ENUMERATE for binary output
  393   TPerStdBinaryOutputEnumerate_Response PerStdBinaryOutputEnumerate_Response;
  394 
  395   // Structure for PCMD_STD_BINARY_OUTPUTS_SET
  396   TPerStdBinaryOutputSet_Request PerStdBinaryOutputSet_Request;
  397 
  398   // Structure returned by PCMD_STD_BINARY_OUTPUTS_SET
  399   TPerStdBinaryOutputSet_Response PerStdBinaryOutputSet_Response;
  400 
  401   // Structure returned by PCMD_STD_ENUMERATE for light
  402   TPerStdLightEnumerate_Response PerStdLightEnumerate_Response;
  403 } TDpaMessageIqrfStd;
  404 
  405 #ifdef __CC5X__
  406 // The structure above mapped at the DpaMessage
  407 TDpaMessageIqrfStd  _DpaMessageIqrfStd @ DpaRfMessage;
  408 #endif  // #ifdef __CC5X__
  409 
  410 // -------------------------------------------------------------------------------------------
  411 
  412 #endif  // _IQRFSTD_HEADER_
  413 
  414 //############################################################################################