15 #include <yarp/os/Time.h>
16 #include <yarp/os/Log.h>
17 #include <yarp/os/LogStream.h>
20 #include <yarp/dev/PolyDriver.h>
21 #include <ace/config.h>
22 #include <ace/Log_Msg.h>
28 #include <yarp/os/LogStream.h>
29 #include "EoAnalogSensors.h"
32 #include "EoProtocol.h"
33 #include "EoProtocolMN.h"
34 #include "EoProtocolAS.h"
36 #include <yarp/os/NetType.h>
39 #pragma warning(once:4355)
45 using namespace yarp::os;
50 bool embObjPSC::fromConfig(yarp::os::Searchable &config,
servConfigPSC_t &serviceConfig)
55 yError() << m_PDdevice.getBoardInfo() <<
": missing some configuration parameter. Check logs and your config file.";
63 embObjPSC::embObjPSC(): m_PDdevice(
"embObjPSC")
77 return m_PDdevice.
isOpen();
92 if(!fromConfig(config, serviceConfig))
94 yError() <<
"embObjPSC missing some configuration parameter. Check logs and your config file.";
100 m_data.resize(eOas_psc_data_maxnumber, 0.0);
112 const eOmn_serv_parameter_t* servparam = &serviceConfig.
ethservice;
116 yError() << m_PDdevice.
getBoardInfo() <<
"open() has an error in call of ethResources::serviceVerifyActivate() ";
125 if(
false == sendConfig2PSCboards(serviceConfig))
132 if(
false == initRegulars())
141 yError() << m_PDdevice.
getBoardInfo() <<
"open() fails to start as service.... cannot continue";
149 yDebug() << m_PDdevice.
getBoardInfo() <<
"open() correctly starts service";
154 sendStart2PSCboards();
163 eOprotID32_t id32 = eo_prot_ID32dummy;
165 eOas_psc_config_t cfg;
167 id32 = eoprot_ID_get(eoprot_endpoint_analogsensors, eoprot_entity_as_psc, 0, eoprot_tag_as_psc_config);
171 yError() << m_PDdevice.
getBoardInfo() <<
"FATAL error in sendConfig2PSCboards() while try to configure datarate=" << cfg.datarate;
177 yDebug() << m_PDdevice.
getBoardInfo() <<
": sendConfig2PSCboards() correctly configured boards with datarate=" << cfg.datarate;
184 bool embObjPSC::sendStart2PSCboards(
void)
186 eOprotID32_t id32 = eo_prot_ID32dummy;
190 id32 = eoprot_ID_get(eoprot_endpoint_analogsensors, eoprot_entity_as_psc, 0, eoprot_tag_as_psc_cmmnds_enable);
194 yError() << m_PDdevice.
getBoardInfo() <<
"FATAL error in sendStart2PSCboards() while try to enable the boards transmission";
200 yDebug() << m_PDdevice.
getBoardInfo() <<
": sendStart2PSCboards() correctly enabled the boards transmission";
208 bool embObjPSC::initRegulars(
void)
212 vector<eOprotID32_t> id32v(0);
213 eOprotID32_t id32 = eo_prot_ID32dummy;
217 id32 = eoprot_ID_get(eoprot_endpoint_analogsensors, eoprot_entity_as_psc, 0, eoprot_tag_as_psc_status);;
221 id32v.push_back(id32);
227 yError() << m_PDdevice.
getBoardInfo() <<
"initRegulars() fails to add its variables to regulars: cannot proceed any further";
233 yDebug() << m_PDdevice.
getBoardInfo() <<
"initRegulars() added" << id32v.size() <<
"regular rops ";
235 for (
size_t r = 0; r<id32v.size(); r++)
237 uint32_t item = id32v.at(r);
238 eoprot_ID2information(item, nvinfo,
sizeof(nvinfo));
239 yDebug() <<
"\t it added regular rop for" << nvinfo;
260 std::lock_guard<std::mutex> lock(m_mutex);
272 printf(
"getstate\n");
279 return static_cast<int>(eOas_psc_data_maxnumber);
320 eOas_psc_status_t *psc_st_ptr = (eOas_psc_status_t*)rxdata;
321 uint32_t sizeOfData = psc_st_ptr->arrayofdata.head.size;
323 if(sizeOfData>m_data.size())
324 yWarning() << m_PDdevice.
getBoardInfo() <<
"In update function I received more data than I had been configured to store.My size is " << m_data.size() <<
"while I received " << sizeOfData <<
"values!";
326 std::lock_guard<std::mutex> lock(m_mutex);
328 for(uint32_t i=0; i<sizeOfData; i++)
330 eOas_psc_data_t pscdata = psc_st_ptr->arrayofdata.data[i];
332 m_data[i]= pscdata.value*0.1;
367 void embObjPSC::cleanup(
void)
bool parseService(yarp::os::Searchable &config, servConfigMais_t &maisconfig)
virtual bool setcheckRemoteValue(const eOprotID32_t id32, void *value, const unsigned int retries=10, const double waitbeforecheck=0.001, const double timeout=0.050)=0
virtual bool serviceVerifyActivate(eOmn_serv_category_t category, const eOmn_serv_parameter_t *param, double timeout=0.500)=0
virtual bool verifyEPprotocol(eOprot_endpoint_t ep)=0
virtual bool serviceSetRegulars(eOmn_serv_category_t category, vector< eOprotID32_t > &id32vector, double timeout=0.500)=0
virtual bool serviceStart(eOmn_serv_category_t category, double timeout=0.500)=0
virtual bool isOpen() const
bool prerareEthService(yarp::os::Searchable &config, eth::IethResource *interface)
void cleanup(eth::IethResource *interface)
std::string getBoardInfo(void) const
eth::AbstractEthResource * res
virtual int calibrateChannel(int ch, double v)
virtual int read(yarp::sig::Vector &out)
Read a vector from the sensor.
virtual int getChannels()
virtual bool update(eOprotID32_t id32, double timestamp, void *rxdata)
bool open(yarp::os::Searchable &config)
virtual int calibrateSensor()
virtual int getState(int ch)
virtual bool initialised()
virtual eth::iethresType_t type()
Copyright (C) 2008 RobotCub Consortium.
eOmn_serv_parameter_t ethservice