bool ObserverModule::configure(yarp::os::ResourceFinder &rf) { /* Process all parameters from both command-line and .ini file */ /* get the module name which will form the stem of all module port names */ moduleName = rf.check("name", Value(""), "module name (string)").asString(); /* * before continuing, set the module name before getting any other parameters, * specifically the port names which are dependent on the module name */ // setName(moduleName.c_str()); /* * get the robot name which will form the stem of the robot ports names * and append the specific part and device required */ robotName = rf.check("robot", Value("icub"), "Robot name (string)").asString(); //robotPortName = "/" + robotName + "/head"; inputPortName = rf.check("inputPortName", Value(":i"), "Input port name (string)").asString(); /* * attach a port of the same name as the module (prefixed with a /) to the module * so that messages received from the port are redirected to the respond method */ handlerPortName = ""; handlerPortName += getName(); // use getName() rather than a literal if (!handlerPort.open(handlerPortName.c_str())) { cout << getName() << ": Unable to open port " << handlerPortName << endl; return false; } attach(handlerPort); // attach to port if (rf.check("config")) { configFile=rf.findFile(rf.find("config").asString().c_str()); if (configFile=="") { return false; } } else { configFile.clear(); } bool returnval = true; //create the thread and configure it using the ResourceFinder _effectorThread = new EffectorThread(); returnval &= _effectorThread->configure(rf); _affordanceAccess = new darwin::observer::AffordanceAccessImpl(); if (returnval) { returnval &= _affordanceAccess->configure(rf); } _attentionAccess = new darwin::observer::AttentionAccessImpl(); if (returnval) { returnval &= _attentionAccess->configure(rf); } _workspace = new darwin::observer::WorkspaceCalculationsImpl(); if (returnval) { returnval &= _workspace->configure(rf); } /* create the thread and pass pointers to the module parameters */ rThread = new ObserverThread(robotName, configFile); rThread->setName(getName().c_str()); rThread->setEffectorAccess(_effectorThread); rThread->setAffordanceAccess(_affordanceAccess); rThread->setAttentionAccess(_attentionAccess); rThread->setWorkspaceAccess(_workspace); const string pt = rf.findPath("observerConfig.ini"); unsigned pos = pt.find("observerConfig.ini"); pathPrefix = pt.substr(0,pos); printf("observer configuraion file in %s \n", pathPrefix.c_str()); //////////////////////// find file paths ///////////input files rThread->setPath(pathPrefix); // rThread->setColorPath(colormapFile); // rThread->setModelPath(modelFile); //======================================================================= // //rThread->setInputPortName(inputPortName.c_str()); if (returnval) { returnval &= _effectorThread->start(); } /* now start the thread to do the work */ if (returnval) { returnval &= rThread->start(); // this calls threadInit() and it if returns true, it then calls run() } return returnval; // let the RFModule know everything went well // so that it will then run the module }