00001
00006 #ifndef _TAPE_H
00007 #define _TAPE_H
00008
00009 #include "gridlabd.h"
00010 #include "object.h"
00011 #include "aggregate.h"
00012 #include "memory.h"
00013
00014
00015 static char timestamp_format[32]="%Y-%m-%d %H:%M:%S";
00016 typedef enum {VT_INTEGER, VT_DOUBLE, VT_STRING} VARIABLETYPE;
00017 typedef enum {TS_INIT, TS_OPEN, TS_DONE, TS_ERROR} TAPESTATUS;
00018 typedef enum {FT_FILE, FT_ODBC, FT_MEMORY} FILETYPE;
00019 typedef enum {SCREEN, EPS, GIF, JPG, PDF, PNG, SVG} PLOTFILE;
00020
00021 typedef struct s_tape_operations {
00022 int (*open)(void *my, char *fname, char *flags);
00023 char *(*read)(void *my,char *buffer,unsigned int size);
00024 int (*write)(void *my, char *timestamp, char *value);
00025 int (*rewind)(void *my);
00026 void (*close)(void *my);
00027 } TAPEOPS;
00028
00029 typedef struct s_tape_funcs {
00030 char256 mode;
00031 void *hLib;
00032 TAPEOPS *player;
00033 TAPEOPS *shaper;
00034 TAPEOPS *recorder;
00035 TAPEOPS *collector;
00036 TAPEOPS *histogram;
00037 struct s_tape_funcs *next;
00038 } TAPEFUNCS;
00039
00040 CDECL TAPEFUNCS *get_ftable(char *mode);
00041
00042 typedef struct {
00043 char *name;
00044 VARIABLETYPE type;
00045 void *addr;
00046 double min, max;
00047 } VARMAP;
00048
00049 typedef struct s_recobjmap {
00050 OBJECT *obj;
00051 PROPERTY prop;
00052 struct s_recobjmap *next;
00053 } RECORDER_MAP;
00054
00059 struct player {
00060
00061 char1024 file;
00062 char8 filetype;
00063 char32 property;
00064 int32 loop;
00065
00066 FILETYPE type;
00067 union {
00068 FILE *fp;
00069 MEMORY *memory;
00070 void *tsp;
00072 };
00073 TAPESTATUS status;
00074 int32 loopnum;
00075 struct {
00076 TIMESTAMP ts;
00077 char32 value;
00078 } next;
00079 PROPERTY *target;
00080 TAPEOPS *ops;
00081 char lasterr[1024];
00082 };
00087 typedef struct s_shapertarget {
00088 double *addr;
00089 TIMESTAMP ts;
00090 double value;
00091 } SHAPERTARGET;
00093 struct shaper {
00094
00095 char1024 file;
00096 char8 filetype;
00097 char32 property;
00098 char256 group;
00099 double magnitude;
00100 double events;
00101
00102 TAPEOPS *ops;
00103 FILETYPE type;
00104 union {
00105 FILE *fp;
00106 MEMORY *memory;
00107 void *tsp;
00109 };
00110 TAPESTATUS status;
00111 char lasterr[1024];
00112 int16 interval;
00113 int16 step;
00114 double scale;
00115 int32 loopnum;
00116 unsigned char shape[12][31][7][24];
00117 #define SHAPER_QUEUE 0x0001
00118 unsigned int n_targets;
00119 SHAPERTARGET *targets;
00120 };
00125 struct recorder {
00126
00127 char1024 file;
00128 char1024 multifile;
00129 char1024 multitempfile;
00130 FILE *multifp, *inputfp;
00131 int16 multirun_ct;
00132 char1024 multirun_header;
00133 char8 filetype;
00134 int16 format;
00135 double dInterval;
00136 TIMESTAMP interval;
00137 int32 limit;
00138 char1024 property;
00139 PLOTFILE output;
00140 char1024 plotcommands;
00141 char32 xdata;
00142 char32 columns;
00143 char32 trigger;
00144
00145 RECORDER_MAP *rmap;
00146 TAPEOPS *ops;
00147 FILETYPE type;
00148 union {
00149 FILE *fp;
00150 MEMORY *memory;
00151 void *tsp;
00153 };
00154 TAPESTATUS status;
00155 char8 delim;
00156 struct {
00157 TIMESTAMP ts;
00158 char1024 value;
00159 } last;
00160 int32 samples;
00161 PROPERTY *target;
00162 };
00167 struct collector {
00168
00169 char1024 file;
00170 char8 filetype;
00171 int16 format;
00172 double dInterval;
00173 TIMESTAMP interval;
00174 int32 limit;
00175 char1024 property;
00176 PLOTFILE output;
00177 char1024 plotcommands;
00178 char32 xdata;
00179 char32 columns;
00180 char32 trigger;
00181 char256 group;
00182
00183 TAPEOPS *ops;
00184 FILETYPE type;
00185 union {
00186 FILE *fp;
00187 MEMORY *memory;
00188 void *tsp;
00190 };
00191 TAPESTATUS status;
00192 char8 delim;
00193 struct {
00194 TIMESTAMP ts;
00195 char1024 value;
00196 } last;
00197 int32 samples;
00198 AGGREGATION *aggr;
00199 };
00201 #endif