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 typedef enum e_complex_part {NONE = 0, REAL, IMAG, MAG, ANG, ANG_RAD} CPLPT;
00021 typedef enum {UNKNOWN=0, PLAYER=1, RECORDER=2, GROUPRECORDER=3} DELTATAPEOBJ;
00022
00023
00024 typedef enum {HU_DEFAULT, HU_ALL, HU_NONE} HEADERUNITS;
00025 typedef enum {LU_DEFAULT, LU_ALL, LU_NONE} LINEUNITS;
00026
00027 typedef struct s_tape_operations {
00028 int (*open)(void *my, char *fname, char *flags);
00029 char *(*read)(void *my,char *buffer,unsigned int size);
00030 int (*write)(void *my, char *timestamp, char *value);
00031 int (*rewind)(void *my);
00032 void (*close)(void *my);
00033 void (*flush)(void *my);
00034 } TAPEOPS;
00035
00036 typedef struct s_tape_funcs {
00037 char256 mode;
00038 void *hLib;
00039 TAPEOPS *player;
00040 TAPEOPS *shaper;
00041 TAPEOPS *recorder;
00042 TAPEOPS *collector;
00043 TAPEOPS *histogram;
00044 struct s_tape_funcs *next;
00045 } TAPEFUNCS;
00046
00047 CDECL TAPEFUNCS *get_ftable(char *mode);
00048
00049 typedef struct {
00050 char *name;
00051 VARIABLETYPE type;
00052 void *addr;
00053 double min, max;
00054 } VARMAP;
00055
00056 typedef struct s_recobjmap {
00057 OBJECT *obj;
00058 PROPERTY prop;
00059 struct s_recobjmap *next;
00060 } RECORDER_MAP;
00061
00062 typedef struct s_deltaobj {
00063 OBJECT *obj;
00064 DELTATAPEOBJ obj_type;
00065 struct s_deltaobj *next;
00066 } DELTAOBJ_LIST;
00067
00072 struct player {
00073
00074 char1024 file;
00075 char8 filetype;
00076 char256 mode;
00077 char256 property;
00078 int32 loop;
00079
00080 FILETYPE type;
00081 union {
00082 FILE *fp;
00083 MEMORY *memory;
00084 void *tsp;
00086 };
00087 TAPESTATUS status;
00088 int32 loopnum;
00089 struct {
00090 TIMESTAMP ts;
00091 int64 ns;
00092 char1024 value;
00093 } next;
00094 struct {
00095 TIMESTAMP ts;
00096 TIMESTAMP ns;
00097 char1024 value;
00098 } delta_track;
00099 PROPERTY *target;
00100 TAPEOPS *ops;
00101 char lasterr[1024];
00102 };
00107 typedef struct s_shapertarget {
00108 double *addr;
00109 TIMESTAMP ts;
00110 double value;
00111 } SHAPERTARGET;
00113 struct shaper {
00114
00115 char1024 file;
00116 char8 filetype;
00117 char32 mode;
00118 char256 property;
00119 char256 group;
00120 double magnitude;
00121 double events;
00122
00123 TAPEOPS *ops;
00124 FILETYPE type;
00125 union {
00126 FILE *fp;
00127 MEMORY *memory;
00128 void *tsp;
00130 };
00131 TAPESTATUS status;
00132 char lasterr[1024];
00133 int16 interval;
00134 int16 step;
00135 double scale;
00136 int32 loopnum;
00137 unsigned char shape[12][31][7][24];
00138 #define SHAPER_QUEUE 0x0001
00139 unsigned int n_targets;
00140 SHAPERTARGET *targets;
00141 };
00146 struct recorder {
00147
00148 char1024 file;
00149 char8 filetype;
00150 char32 mode;
00151 char1024 multifile;
00152 char1024 multitempfile;
00153 FILE *multifp, *inputfp;
00154 int16 multirun_ct;
00155 char1024 multirun_header;
00156 int16 format;
00157 double dInterval;
00158 TIMESTAMP interval;
00159 int32 limit;
00160 char1024 property;
00161 char1024 out_property;
00162 PLOTFILE output;
00163 char1024 plotcommands;
00164 char32 xdata;
00165 char32 columns;
00166 char32 trigger;
00167 int32 flush;
00168
00169 RECORDER_MAP *rmap;
00170 TAPEOPS *ops;
00171 FILETYPE type;
00172 HEADERUNITS header_units;
00173 LINEUNITS line_units;
00174 union {
00175 FILE *fp;
00176 MEMORY *memory;
00177 void *tsp;
00179 };
00180 TAPESTATUS status;
00181 char8 delim;
00182 struct {
00183 TIMESTAMP ts;
00184 int64 ns;
00185 char1024 value;
00186 } last;
00187 int32 samples;
00188 PROPERTY *target;
00189 };
00194 struct collector {
00195
00196 char1024 file;
00197 char8 filetype;
00198 char32 mode;
00199 int16 format;
00200 double dInterval;
00201 TIMESTAMP interval;
00202 int32 limit;
00203 char1024 property;
00204 PLOTFILE output;
00205 char1024 plotcommands;
00206 char32 xdata;
00207 char32 columns;
00208 char32 trigger;
00209 char256 group;
00210 int32 flush;
00211
00212 TAPEOPS *ops;
00213 FILETYPE type;
00214 union {
00215 FILE *fp;
00216 MEMORY *memory;
00217 void *tsp;
00219 };
00220 TAPESTATUS status;
00221 char8 delim;
00222 struct {
00223 TIMESTAMP ts;
00224 char1024 value;
00225 } last;
00226 int32 samples;
00227 AGGREGATION *aggr;
00228 };
00229
00230 void enable_deltamode(TIMESTAMP t1);
00231 EXPORT int delta_add_tape_device(OBJECT *obj, DELTATAPEOBJ tape_type);
00232 void set_csv_options(void);
00233
00234 #endif