plc/rt/include/plc.h

00001 /* $Id$
00002  * PLC runtime header 
00003  */
00004 
00005 #define enumeration int
00006 #define BEGIN_DATA struct { char *name; enum {DT_INTEGER=6, DT_DOUBLE=1} type; void *addr; } data[] = {
00007 typedef void (*SENDFN)(void *src,char *to,void *msg,unsigned int sz);
00008 typedef int (*RECVFN)(void *dst,char *from,void *data, unsigned int sz);
00009 #define INTEGER(N) {#N,DT_INTEGER,0},
00010 #define DOUBLE(N) {#N,DT_DOUBLE,0},
00011 #define END_DATA {0}};
00012 #define DATA(T,N) (*(T*)(data[N].addr))
00013 #define INIT int init(void)
00014 #define CODE(DT,DEV) int code(void *my, double DT, PLCDEV *DEV)
00015 /* this structure must match the plc/machine.h PLCDEV structure */
00016 typedef struct {
00017     unsigned int time;
00018     struct {
00019         SENDFN send;
00020         RECVFN recv;
00021     } net;
00022 } PLCDEV;
00023 #define NEVER (0x7fffffff)
00024 #define SNDMSG(DST,MSG) dev->net.send(my,DST,MSG,0)
00025 #define SNDDAT(DST,PTR,SZ) dev->net.send(my,DST,PTR,SZ)
00026 #define RCVMSG(SRC,BUF) dev->net.recv(my,SRC,BUF,sizeof(BUF)-1)
00027 #define RCVDAT(SRC,BUF,SZ) dev->net.recv(my,SRC,BUF,SZ)
00028 #define TIME dev->time;
00029 

GridLAB-DTM Version 1.0
An open-source project initiated by the US Department of Energy