etisserant@137: #ifndef IEC_TYPES_ALL_H etisserant@137: #define IEC_TYPES_ALL_H etisserant@137: etisserant@137: #include "iec_std_lib_generated.h" etisserant@137: etisserant@137: /*********************/ etisserant@137: /* IEC Types defs */ etisserant@137: /*********************/ etisserant@137: etisserant@137: /* Include non windows.h clashing typedefs */ etisserant@137: #include "iec_types.h" etisserant@137: etisserant@137: /* Those typdefs clash with windows.h */ etisserant@137: /* i.e. this file cannot be included aside windows.h */ etisserant@137: typedef IEC_BOOL BOOL; etisserant@137: etisserant@137: #define TRUE 1 etisserant@137: #define FALSE 0 etisserant@137: etisserant@137: typedef IEC_SINT SINT; etisserant@137: typedef IEC_INT INT; etisserant@137: typedef IEC_DINT DINT; etisserant@137: typedef IEC_LINT LINT; etisserant@137: etisserant@137: typedef IEC_USINT USINT; etisserant@137: typedef IEC_UINT UINT; etisserant@137: typedef IEC_UDINT UDINT; etisserant@137: typedef IEC_ULINT ULINT; etisserant@137: etisserant@137: typedef IEC_BYTE BYTE; etisserant@137: typedef IEC_WORD WORD; etisserant@137: typedef IEC_DWORD DWORD; etisserant@137: typedef IEC_LWORD LWORD; etisserant@137: etisserant@137: typedef IEC_REAL REAL; etisserant@137: typedef IEC_LREAL LREAL; etisserant@137: etisserant@137: typedef IEC_TIME TIME; etisserant@137: typedef IEC_DATE DATE; etisserant@137: typedef IEC_DT DT; etisserant@137: typedef IEC_TOD TOD; etisserant@137: etisserant@137: typedef IEC_STRING STRING; etisserant@137: etisserant@137: typedef struct { etisserant@137: BOOL state; // current step state. 0 : inative, 1: active etisserant@137: BOOL prev_state; // previous step state. 0 : inative, 1: active etisserant@137: TIME elapsed_time; // time since step is active etisserant@137: } STEP; etisserant@137: etisserant@137: typedef struct { etisserant@137: BOOL stored; // action storing state. 0 : not stored, 1: stored etisserant@137: BOOL state; // current action state. 0 : inative, 1: active etisserant@137: BOOL set; // set have been requested (reset each time the body is evaluated) etisserant@137: BOOL reset; // reset have been requested (reset each time the body is evaluated) etisserant@137: TIME set_remaining_time; // time before set will be requested etisserant@137: TIME reset_remaining_time; // time before reset will be requested etisserant@137: } ACTION; etisserant@137: etisserant@137: /* Extra debug types for SFC */ etisserant@137: #define ANY_SFC(DO) DO(STEP) DO(TRANSITION) DO(ACTION) etisserant@137: etisserant@137: /* Enumerate native types */ etisserant@137: #define __decl_enum_type(TYPENAME) TYPENAME##_ENUM, etisserant@137: typedef enum{ etisserant@137: ANY(__decl_enum_type) etisserant@137: ANY_SFC(__decl_enum_type) etisserant@137: /*TODO handle custom types*/ etisserant@137: } __IEC_types_enum; etisserant@137: etisserant@137: /* Get size of type from its number */ etisserant@137: #define __decl_size_case(TYPENAME) case TYPENAME##_ENUM: return sizeof(TYPENAME); etisserant@137: #define __decl_size_case_force_BOOL(TYPENAME) case TYPENAME##_ENUM: return sizeof(BOOL); etisserant@137: static inline USINT __get_type_enum_size(__IEC_types_enum t){ etisserant@137: switch(t){ etisserant@137: ANY(__decl_size_case) etisserant@137: /* size do not correspond to real struct. etisserant@137: * only a bool is used to represent state*/ etisserant@137: ANY_SFC(__decl_size_case_force_BOOL) etisserant@137: /*TODO handle custom types*/ etisserant@137: } etisserant@137: } etisserant@137: etisserant@137: /* Get name of type from its number */ etisserant@137: #define __decl_typename_case(TYPENAME) case TYPENAME##_ENUM: return #TYPENAME ; etisserant@137: static inline const char* __get_type_enum_name(__IEC_types_enum t){ etisserant@137: switch(t){ etisserant@137: ANY(__decl_typename_case) etisserant@137: /* size do not correspond to real struct. etisserant@137: * only a bool is used to represent state*/ etisserant@137: ANY_SFC(__decl_typename_case) etisserant@137: /*TODO handle custom types*/ etisserant@137: } etisserant@137: } etisserant@137: etisserant@137: etisserant@137: #endif /*IEC_TYPES_ALL_H*/