lib/C/iec_types.h
changeset 904 423ea3749212
parent 900 1e749c7b70f8
child 1100 f7cc4f6ce756
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/C/iec_types.h	Sun Jul 06 11:07:38 2014 +0100
@@ -0,0 +1,83 @@
+#ifndef IEC_TYPES_H
+#define IEC_TYPES_H
+
+#include <limits.h>
+#include <float.h>
+#include <stdint.h>
+
+/*********************/
+/*  IEC Types defs   */
+/*********************/
+
+typedef uint8_t  IEC_BOOL;
+
+typedef int8_t    IEC_SINT;
+typedef int16_t   IEC_INT;
+typedef int32_t   IEC_DINT;
+typedef int64_t   IEC_LINT;
+
+typedef uint8_t    IEC_USINT;
+typedef uint16_t   IEC_UINT;
+typedef uint32_t   IEC_UDINT;
+typedef uint64_t   IEC_ULINT;
+
+typedef uint8_t    IEC_BYTE;
+typedef uint16_t   IEC_WORD;
+typedef uint32_t   IEC_DWORD;
+typedef uint64_t   IEC_LWORD;
+
+typedef float    IEC_REAL;
+typedef double   IEC_LREAL;
+
+/* WARNING: When editing the definition of IEC_TIMESPEC, take note that 
+ *          if the order of the two elements 'tv_sec' and 'tv_nsec' is changed, then the macros 
+ *          __time_to_timespec() and __tod_to_timespec() will need to be changed accordingly.
+ *          (these macros may be found in iec_std_lib.h)
+ */
+typedef struct {
+    long int tv_sec;            /* Seconds.  */
+    long int tv_nsec;           /* Nanoseconds.  */
+} /* __attribute__((packed)) */ IEC_TIMESPEC;  /* packed is gcc specific! */
+
+typedef IEC_TIMESPEC IEC_TIME;
+typedef IEC_TIMESPEC IEC_DATE;
+typedef IEC_TIMESPEC IEC_DT;
+typedef IEC_TIMESPEC IEC_TOD;
+
+#ifndef STR_MAX_LEN
+#define STR_MAX_LEN 126
+#endif
+
+#ifndef STR_LEN_TYPE
+#define STR_LEN_TYPE int8_t
+#endif
+
+#define __INIT_REAL 0
+#define __INIT_LREAL 0
+#define __INIT_SINT 0
+#define __INIT_INT 0
+#define __INIT_DINT 0
+#define __INIT_LINT 0
+#define __INIT_USINT 0
+#define __INIT_UINT 0
+#define __INIT_UDINT 0
+#define __INIT_ULINT 0
+#define __INIT_TIME (TIME){0,0}
+#define __INIT_BOOL 0
+#define __INIT_BYTE 0
+#define __INIT_WORD 0
+#define __INIT_DWORD 0
+#define __INIT_LWORD 0
+#define __INIT_STRING (STRING){0,""}
+//#define __INIT_WSTRING
+#define __INIT_DATE (DATE){0,0}
+#define __INIT_TOD (TOD){0,0}
+#define __INIT_DT (DT){0,0}
+
+typedef STR_LEN_TYPE __strlen_t;
+typedef struct {
+    __strlen_t len;
+    uint8_t body[STR_MAX_LEN];
+} /* __attribute__((packed)) */ IEC_STRING;  /* packed is gcc specific! */
+
+#endif /*IEC_TYPES_H*/