Go to the documentation of this file.00001 #include "NetcdfReporting.hpp"
00002 #include <rtt/RTT.hpp>
00003 #include <rtt/Logger.hpp>
00004 #include <rtt/types/Types.hpp>
00005 #include <rtt/types/TemplateTypeInfo.hpp>
00006 #include "NetcdfMarshaller.hpp"
00007 #include "NetcdfHeaderMarshaller.hpp"
00008
00009 #include "ocl/Component.hpp"
00010 ORO_CREATE_COMPONENT(OCL::NetcdfReporting)
00011
00012 #include <netcdf.h>
00013
00014 namespace OCL
00015 {
00016 using namespace RTT;
00017 using namespace std;
00018
00019 NetcdfReporting::NetcdfReporting(const std::string& fr_name)
00020 : ReportingComponent( fr_name ),
00021 repfile("ReportFile","Location on disc to store the reports.", "reports.nc")
00022 {
00023 this->properties()->addProperty( repfile );
00024
00025 if(types::TypeInfoRepository::Instance()->getTypeInfo<short>() == 0 )
00026 {
00027 types::TypeInfoRepository::Instance()->addType(new types::TemplateTypeInfo<short, true>("short"));
00028 }
00029 }
00030
00031 bool NetcdfReporting::startHook()
00032 {
00033 int retval;
00034
00039 retval = nc_create(repfile.get().c_str(), NC_CLOBBER | NC_SHARE, &ncid);
00040 if ( retval ) {
00041 log(Error) << "Could not create "+repfile.get()+" for reporting."<<endlog();
00042 return false;
00043 }
00044
00049 retval = nc_def_dim(ncid, "time", NC_UNLIMITED, &dimsid);
00050 if ( retval ) {
00051 log(Error) << "Could not create time dimension "+repfile.get() <<endlog();
00052 return false;
00053 }
00054
00058 retval = nc_enddef( ncid );
00059 if ( retval ) {
00060 log(Error) << "Could not leave define mode in "+repfile.get() <<endlog();
00061 return false;
00062 }
00063
00064 fheader = new RTT::NetcdfHeaderMarshaller( ncid , dimsid);
00065 fbody = new RTT::NetcdfMarshaller( ncid );
00066
00067 this->addMarshaller( fheader, fbody );
00068
00069 return ReportingComponent::startHook();
00070 }
00071
00072 void NetcdfReporting::stopHook()
00073 {
00074 int retval;
00075
00076 ReportingComponent::stopHook();
00077
00078 this->removeMarshallers();
00079
00083 if ( ncid )
00084 retval = nc_close (ncid);
00085 if ( retval )
00086 log(Error) << "Could not close file "+repfile.get()+" for reporting."<<endlog();
00087 }
00088
00089 }