00001 #include "cmwfw_defs.h"
00002 #include "cmwfwTime.h"
00003 #include "cmwfwIOPMapper.h"
00004 #include "cmwfwDeviceServer.h"
00005 #include "cmwfwDeviceAdapter.h"
00006 #include "cmwfwPoller.h"
00007 #include "cmwfwForwarder.h"
00008 #include "cmwfwIOValue.h"
00009 #ifndef CMWFW_WINDOWSNT
00010 #include <tgm/tgm.h>
00011 #include <gm/gm_def.h>
00012 extern"C"{
00013 TgmMachine gm_getmachine();
00014 }
00015 #endif
00016
00017
00018 extern cmwfwIOPMapper framework_iop_mapper;
00019
00020
00021 #define FILE "source file:cmwfwDeviceAdapter.cc"
00022 #define ID "Contact Steen JENSEN, PS/CO"
00023 #define PROGRAM "Middleware server framework"
00024 #define T(a,b,c,d,e) TRACE(a,"%s(%s): %s %s %s %s\n",myname,FILE,b,c,d,e)
00025 #define E(a,b,c,d) ERROR("%s:%s(%s):ERROR: %s %s %s %s - %s\n",PROGRAM,myname,FILE,a,b,c,d,ID)
00026
00027
00028
00029
00030
00041 cmwfwDeviceAdapter::cmwfwDeviceAdapter(){
00042
00043 char* myname = "cmwfwDeviceAdapter::cmwfwDeviceAdapter";
00044 T(CMWFW_TRACE_CALLS,"Entering","","","");
00045 T(CMWFW_TRACE_SERVER,"Registering adapter","","","");
00046
00047 framework_iop_mapper.reg(*this);
00048
00049 T(CMWFW_TRACE_CALLS,"Returning","","","");
00050 };
00051
00052
00062 cmwfwDeviceAdapter::~cmwfwDeviceAdapter(){
00063 char* myname = "cmwfwDeviceAdapter::~cmwfwDeviceAdapter";
00064 T(CMWFW_TRACE_CALLS,"Entering","","","");
00065 T(CMWFW_TRACE_SERVER,"Unregistering adapter","","","");
00066
00067 framework_iop_mapper.unreg(*this);
00068
00069 T(CMWFW_TRACE_CALLS,"Returning","","","");
00070 };
00071
00072
00082 cmwfwData* cmwfwDeviceAdapter::cmwfw_get(const cmwfwIOPoint& iop,
00083 const cmwfwData& ctx){
00084 char* myname = "cmwfwDeviceAdapter::cmwfw_get";
00085 T(CMWFW_TRACE_CALLS,"Entering","","","");
00086 cmwfwData* value = this->get(iop,ctx);
00087 if(!value){
00088 T(CMWFW_TRACE_CALLS,"Returning - no value from get","","","");
00089 return value;
00090 };
00091
00092 if(!value->contains(CYCLESTAMP_TAG))
00093 value->insert(CYCLESTAMP_TAG,cmwfwGetCurrentTime());
00094
00095 T(CMWFW_TRACE_CALLS,"Returning - all ok","","","");
00096 return value;
00097 };
00098
00099
00100
00110 void cmwfwDeviceAdapter::cmwfw_poll(const cmwfwIOPoint& iop,
00111 cmwfwData& value_to_fill,
00112 cmwfwValueQualifier& vq_to_set){
00113 char* myname = "cmwfwDeviceAdapter::cmwfw_poll";
00114 T(CMWFW_TRACE_CALLS,"Entering","","","");
00115
00116 this->poll(iop,value_to_fill,vq_to_set);
00117
00118 if(!value_to_fill.contains(CYCLESTAMP_TAG))
00119 value_to_fill.insert(CYCLESTAMP_TAG,cmwfwGetCurrentTime());
00120
00121 T(CMWFW_TRACE_CALLS,"Returning - all ok","","","");
00122 };
00123
00124
00125
00126
00127
00128 char* cmwfwDeviceAdapter::generateIOPString(const cmwfwIOPoint& iop){
00129 char* myname = "cmwfwDeviceAdapter::generateIOPString";
00130 T(CMWFW_TRACE_CALLS,"Entering","","","");
00131
00132 char* cn = iop.getClassName();
00133 char* dn = iop.getDeviceName();
00134 char* pn = iop.getPropertyName();
00135 char* cs = iop.getCycleSelector();
00136 int cnl = strlen(cn);
00137 int dnl = strlen(dn);
00138 int pnl = strlen(pn);
00139 int csl = 0;
00140 if(cs)
00141 csl = strlen(cs);
00142
00143 char* m = new char[cnl+dnl+pnl+csl+2+5];
00144 if(!m)heaperr(1928);
00145 m[0] = 0;
00146 strcat(m,cn);
00147 strcat(m,":");
00148 strcat(m,dn);
00149 strcat(m,":");
00150 strcat(m,pn);
00151 if(cs){
00152 strcat(m,":");
00153 strcat(m,cs);
00154 };
00155 T(CMWFW_TRACE_CALLS,"Returning - all ok","","","");
00156 return m;
00157 };
00158
00159
00160
00161
00162
00163
00164 void cmwfwDeviceAdapter::heaperr(int line){
00165 char* myname = "cmwfwDeviceServer";
00166 T(CMWFW_TRACE_CALLS,"Entering","","","");
00167
00168 char l[30];
00169 itoa(line,l);
00170 E("Out of heap in line ",l,"","");
00171 throw cmwfwInternalError(FILE,line,"Out of heap memory");
00172
00173 T(CMWFW_TRACE_CALLS,"Exiting","","","");
00174 exit(-1);
00175 };
00176
00177