Energy Micro IEC60355 Library Example Project 1.0 (internal use only!) GCC-Version
Example project demonstrating POST and BIST library functions

iec60335_class_b_critical_data.h

Go to the documentation of this file.
00001 /***************************************************************************/
00030 #ifndef __IEC60335_CLASS_B_CRITCAL_DATA_H__
00031 #define __IEC60335_CLASS_B_CRITCAL_DATA_H__
00032 
00037 #include "iec60335_class_b_typedef.h"
00038 
00039 #ifdef __cplusplus
00040 extern "C"
00041 {
00042 #endif /* __cplusplus */
00043 
00059 typedef struct critical_double_struct
00060 {
00061   double inverse;       
00062   double data;          
00063 } critical_double;
00064 
00077 typedef struct critical_float_struct
00078 {
00079   float inverse;    
00080   float data;       
00081 } critical_float;
00082 
00095 typedef struct critical_uint64_t_struct
00096 {
00097   uint64_t inverse;       
00098   uint64_t data;          
00099 } critical_uint64_t;
00100 
00113 typedef struct critical_int64_t_struct
00114 {
00115   int64_t inverse;        
00116   int64_t data;           
00117 } critical_int64_t;
00118 
00131 typedef struct critical_uint32_t_struct
00132 {
00133   uint32_t inverse;         
00134   uint32_t data;            
00135 } critical_uint32_t;
00136 
00149 typedef struct critical_int32_t_struct
00150 {
00151   int32_t inverse;          
00152   int32_t data;             
00153 } critical_int32_t;
00154 
00167 typedef struct critical_uint16_t_struct
00168 {
00169   uint16_t inverse;         
00170   uint16_t data;            
00171 } critical_uint16_t;
00172 
00185 typedef struct critical_int16_t_struct
00186 {
00187   int16_t inverse;          
00188   int16_t data;             
00189 } critical_int16_t;
00190 
00203 typedef struct critical_uint8_t_struct
00204 {
00205   uint8_t inverse;          
00206   uint8_t data;             
00207 } critical_uint8_t;
00208 
00221 typedef struct critical_int8_t_struct
00222 {
00223   int8_t inverse;           
00224   int8_t data;              
00225 } critical_int8_t;
00226 
00232 #define IEC60335_ClassB_CriticalDataValidate(criticalVar) \
00233   ((criticalVar.data == ~(criticalVar.inverse)) ? (IEC60335_testPassed) : (IEC60335_testFailed))
00234 
00239 #define IEC60335_ClassB_CriticalDataPop(criticalVar) \
00240   (criticalVar.data)
00241 
00247 #define IEC60335_ClassB_CriticalDataPush(criticalVar, value)    { \
00248     criticalVar.inverse = ~value;                                 \
00249     criticalVar.data    = value;                                  \
00250 }
00251 
00257 #define IEC60335_ClassB_CriticalDataInit(value)                 { \
00258     ~value, value                                                 \
00259 }
00260 
00261 #ifdef __cplusplus
00262 }
00263 #endif /* __cplusplus */
00264 
00269 #endif  /* __IEC60335_CLASS_B_CRITCAL_DATA_H__ */
00270 
00271 /************************************** EOF *********************************/