00001 #include "EventBase.h"
00002 #include <stdio.h>
00003 #include <sstream>
00004
00005 const char* const EventBase::EventGeneratorNames[numEGIDs] = {
00006 "unknownEGID",
00007 "aiEGID",
00008 "audioEGID",
00009 "buttonEGID",
00010 "erouterEGID",
00011 "estopEGID",
00012 "locomotionEGID",
00013 "micOSndEGID",
00014 "micRawEGID",
00015 "micFFTEGID",
00016 "motmanEGID",
00017 "powerEGID",
00018 "sensorEGID",
00019 "stateMachineEGID",
00020 "stateTransitionEGID",
00021 "testmsgEGID",
00022 "timerEGID",
00023 "visOFbkEGID",
00024 "visRawCameraEGID",
00025 "visInterleaveEGID",
00026 "visJPEGEGID",
00027 "visSegmentEGID",
00028 "visRLEEGID",
00029 "visRegionEGID",
00030 "visObjEGID",
00031 "wmVarEGID",
00032 "worldModelEGID",
00033 };
00034
00035
00036 EventBase::EventBase()
00037 : LoadSave(), stim_id(), magnitude(0), timestamp(get_time()), nameisgen(true), genID(unknownEGID), typeID(statusETID), sourceID((unsigned int)-1), duration(0)
00038 {
00039 genName();
00040 }
00041
00042 EventBase::EventBase(EventGeneratorID_t gid, unsigned int sid, EventTypeID_t tid, unsigned int dur)
00043 : LoadSave(), stim_id(), magnitude(0), timestamp(get_time()), nameisgen(true), genID(gid), typeID(tid), sourceID(sid), duration(dur)
00044 {
00045 genName();
00046 if(tid==deactivateETID)
00047 setMagnitude(0.0);
00048 else
00049 setMagnitude(1.0);
00050 }
00051
00052 EventBase::EventBase(EventGeneratorID_t gid, unsigned int sid, EventTypeID_t tid, unsigned int dur, const std::string& n, float mag)
00053 : LoadSave(), stim_id(), magnitude(mag), timestamp(get_time()), nameisgen(true), genID(gid), typeID(tid), sourceID(sid), duration(dur)
00054 {
00055 setName(n);
00056 }
00057
00058 EventBase&
00059 EventBase::setName(const std::string& sourcename) {
00060 stim_id='(';
00061 if(genID<numEGIDs) {
00062 stim_id+=EventGeneratorNames[genID];
00063 } else {
00064 stim_id+=std::string("InvalidGen");
00065 char tmp2[16];
00066 snprintf(tmp2,16,"(%d)",genID);
00067 stim_id+=tmp2;
00068 }
00069 stim_id+=',';
00070 stim_id+=sourcename;
00071 stim_id+=',';
00072 switch(getTypeID()) {
00073 case EventBase::activateETID:
00074 stim_id+='A'; break;
00075 case EventBase::statusETID:
00076 stim_id+='S'; break;
00077 case EventBase::deactivateETID:
00078 stim_id+='D'; break;
00079 default:
00080 stim_id+='U'; break;
00081 }
00082 stim_id+=')';
00083 nameisgen=false;
00084 return *this;
00085 }
00086
00087 std::string
00088 EventBase::getDescription(bool , unsigned int verbosity) const {
00089 std::ostringstream logdata;
00090 logdata << getName();
00091 if(verbosity>=1)
00092 logdata << '\t' << getGeneratorID() << '\t' << getSourceID() << '\t' << getTypeID();
00093 if(verbosity>=2)
00094 logdata << '\t' << getDuration() << '\t' << getTimeStamp();
00095 if(verbosity>=3)
00096 logdata << '\t' << getMagnitude();
00097 return logdata.str();
00098 }
00099
00100 unsigned int
00101 EventBase::getBinSize() const {
00102 unsigned int used=0;
00103 used+=creatorSize("EventBase");
00104 used+=stim_id.size()+stringpad;
00105 used+=sizeof(magnitude);
00106 used+=sizeof(timestamp);
00107 used+=sizeof(nameisgen);
00108 used+=sizeof(char);
00109 used+=sizeof(char);
00110 used+=sizeof(sourceID);
00111 used+=sizeof(duration);
00112 return used;
00113 }
00114
00115 unsigned int
00116 EventBase::LoadBuffer(const char buf[], unsigned int len) {
00117 unsigned int origlen=len;
00118 unsigned int used=0;
00119 if(0==(used=checkCreator("EventBase",buf,len,true))) return 0;
00120 len-=used; buf+=used;
00121 if(0==(used=decode(stim_id,buf,len))) return 0;
00122 len-=used; buf+=used;
00123 if(0==(used=decode(magnitude,buf,len))) return 0;
00124 len-=used; buf+=used;
00125 if(0==(used=decode(timestamp,buf,len))) return 0;
00126 len-=used; buf+=used;
00127 if(0==(used=decode(nameisgen,buf,len))) return 0;
00128 len-=used; buf+=used;
00129 char tmp;
00130 if(0==(used=decode(tmp,buf,len))) return 0;
00131 genID=(EventGeneratorID_t)tmp;
00132 len-=used; buf+=used;
00133 if(0==(used=decode(tmp,buf,len))) return 0;
00134 typeID=(EventTypeID_t)tmp;
00135 len-=used; buf+=used;
00136 if(0==(used=decode(sourceID,buf,len))) return 0;
00137 len-=used; buf+=used;
00138 if(0==(used=decode(duration,buf,len))) return 0;
00139 len-=used; buf+=used;
00140 return origlen-len;
00141 }
00142
00143 unsigned int
00144 EventBase::SaveBuffer(char buf[], unsigned int len) const {
00145 unsigned int origlen=len;
00146 unsigned int used=0;
00147 if(0==(used=saveCreator("EventBase",buf,len))) return 0;
00148 len-=used; buf+=used;
00149 if(0==(used=encode(stim_id,buf,len))) return 0;
00150 len-=used; buf+=used;
00151 if(0==(used=encode(magnitude,buf,len))) return 0;
00152 len-=used; buf+=used;
00153 if(0==(used=encode(timestamp,buf,len))) return 0;
00154 len-=used; buf+=used;
00155 if(0==(used=encode(nameisgen,buf,len))) return 0;
00156 len-=used; buf+=used;
00157 if(0==(used=encode((char)genID,buf,len))) return 0;
00158 len-=used; buf+=used;
00159 if(0==(used=encode((char)typeID,buf,len))) return 0;
00160 len-=used; buf+=used;
00161 if(0==(used=encode(sourceID,buf,len))) return 0;
00162 len-=used; buf+=used;
00163 if(0==(used=encode(duration,buf,len))) return 0;
00164 len-=used; buf+=used;
00165 return origlen-len;
00166 }
00167
00168 void
00169 EventBase::genName() {
00170 if(!nameisgen)
00171 return;
00172 char tmp[16];
00173 snprintf(tmp,16,"%d",sourceID);
00174 setName(tmp);
00175 nameisgen=true;
00176 }
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188