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