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 //############################################################################################