36 #include <yarp/os/Log.h>
37 #include <yarp/os/LogStream.h>
40 #include <yarp/os/Bottle.h>
41 #include <yarp/os/Value.h>
43 using namespace yarp::os;
60 yDebug() <<
"eth::parser::print(pc104Data) for PC104:";
62 yDebug() <<
"PC104/PC104IpAddress:PC104IpPort = " << pc104data.
addressingstring;
63 yDebug() <<
"PC104/PC104TXrate = " << pc104data.
txrate;
64 yDebug() <<
"PC104/PC104RXrate = " << pc104data.
rxrate;
72 yDebug() <<
"eth::parser::print(boardData) for BOARD" << boarddata.
settings.
name;
74 yDebug() <<
"ETH_BOARD/ETH_BOARD_PROPERTIES:";
81 yDebug() <<
"ETH_BOARD/ETH_BOARD_SETTINGS:";
82 yDebug() <<
"ETH_BOARD/ETH_BOARD_SETTINGS/Name = " << boarddata.
settings.
name;
83 yDebug() <<
"ETH_BOARD/ETH_BOARD_SETTINGS/RUNNINGMODE/(period, maxTimeOfRXactivity, maxTimeOfDOactivity, maxTimeOfTXactivity, TXrateOfRegularROPs) = " <<
85 yDebug() <<
"ETH_BOARD/ETH_BOARD_ACTIONS/MONITOR_ITS_PRESENCE";
86 yDebug() <<
"ETH_BOARD/ETH_BOARD_ACTIONS/MONITOR_ITS_PRESENCE/(enabled, timeout, periodOfMissingReport) = " <<
96 Bottle groupDEBUG = cfgtotal.findGroup(
"DEBUG");
97 if ((! groupDEBUG.isNull()) && (groupDEBUG.check(
"embBoardsConnected")))
104 yError() <<
"ATTENTION: NO EMBEDDED BOARDS CONNECTED. YOU ARE IN DEBUG MODE";
109 Bottle groupPC104 = Bottle(cfgtotal.findGroup(
"PC104"));
110 if (groupPC104.isNull())
112 yError() <<
"eth::parser::read() cannot find PC104 group in config files";
118 if (!groupPC104.check(
"PC104IpAddress", value))
120 yError() <<
"eth::parser::read(): missing PC104/PC104IpAddress in config files";
123 if (!groupPC104.check(
"PC104IpPort", value))
125 yError() <<
"eth::parser::read(): missing PC104/PC104IpPort in config files";
129 Bottle paramIPaddress(groupPC104.find(
"PC104IpAddress").asString());
130 uint16_t port = groupPC104.find(
"PC104IpPort").asInt32();
131 char strIP[64] = {0};
134 snprintf(strIP,
sizeof(strIP),
"%s", paramIPaddress.toString().c_str());
136 int ip1, ip2, ip3, ip4;
137 sscanf(strIP,
"\"%d.%d.%d.%d", &ip1, &ip2, &ip3, &ip4);
139 pc104data.
localaddressing.addr = eo_common_ipv4addr(ip1, ip2, ip3, ip4);
143 snprintf(ss,
sizeof(ss),
"%d.%d.%d.%d:%d", ip1, ip2, ip3, ip4, port);
149 if(cfgtotal.findGroup(
"PC104").check(
"PC104TXrate"))
151 int value = cfgtotal.findGroup(
"PC104").find(
"PC104TXrate").asInt32();
159 yWarning () <<
"eth::parser::read() cannot find ETH/PC104TXrate. thus using default value" << pc104data.
txrate;
163 if(cfgtotal.findGroup(
"PC104").check(
"PC104RXrate"))
165 int value = cfgtotal.findGroup(
"PC104").find(
"PC104RXrate").asInt32();
173 yWarning () <<
"eth::parser::read() cannot find ETH/PC104RXrate. thus using default value" << pc104data.
rxrate;
186 Bottle groupEthBoard = Bottle(cfgtotal.findGroup(
"ETH_BOARD"));
187 if(groupEthBoard.isNull())
189 yError() <<
"eth::parser::read() cannot find ETH_BOARD group in config files";
192 Bottle groupEthBoardProps = Bottle(groupEthBoard.findGroup(
"ETH_BOARD_PROPERTIES"));
193 if(groupEthBoardProps.isNull())
195 yError() <<
"eth::parser::read() cannot find ETH_BOARD_PROPERTIES group in config files";
198 Bottle groupEthBoardSettings = Bottle(groupEthBoard.findGroup(
"ETH_BOARD_SETTINGS"));
199 if(groupEthBoardSettings.isNull())
201 yError() <<
"eth::parser::read() cannot find ETH_BOARD_PROPERTIES group in config files";
210 if(
true == groupEthBoardProps.check(
"IpAddress"))
212 Bottle paramIPboard(groupEthBoardProps.find(
"IpAddress").asString());
214 strcpy(str, paramIPboard.toString().c_str());
215 int ip1, ip2, ip3, ip4;
216 sscanf(str,
"\"%d.%d.%d.%d", &ip1, &ip2, &ip3, &ip4);
221 yError() <<
"eth::parser::read() cannot find ETH_BOARD_PROPERTIES/IpAddress group in config files";
225 char ipinfo[20] = {0};
231 if(
true == groupEthBoardProps.check(
"IpPort"))
238 yWarning() <<
"eth::parser::read() cannot find ETH_BOARD_PROPERTIES/IpPort group in config files." <<
" using:" << boarddata.
properties.
ipv4addressing.port;
246 Bottle b_ETH_BOARD_PROPERTIES_Type = groupEthBoardProps.findGroup(
"Type");
247 std::string Type = b_ETH_BOARD_PROPERTIES_Type.get(1).asString();
248 const char *strType = Type.c_str();
250 if(0 == strcmp(strType,
"EMS4"))
254 else if(0 == strcmp(strType,
"MC4PLUS"))
258 else if(0 == strcmp(strType,
"MC2PLUS"))
264 eObrd_type_t brd = eobrd_unknown;
265 if(eobrd_unknown == (brd = eoboards_string2type2(strType, eobool_true)))
267 brd = eoboards_string2type2(strType, eobool_false);
274 char boardTypeString[30];
275 snprintf(boardTypeString,
sizeof(boardTypeString),
"%s", eoboards_type2string2(eoboards_ethtype2type(boarddata.
properties.
type), eobool_true));
280 if(
true == groupEthBoardProps.check(
"maxSizeRXpacket"))
292 if(
true == groupEthBoardProps.check(
"maxSizeROP"))
310 Bottle paramNameBoard(groupEthBoardSettings.find(
"Name").asString());
311 char xmlboardname[64] = {0};
312 snprintf(xmlboardname,
sizeof(xmlboardname),
"%s", paramNameBoard.toString().c_str());
315 if(0 != strlen(xmlboardname))
327 Bottle groupEthBoardSettings_RunningMode = Bottle(groupEthBoardSettings.findGroup(
"RUNNINGMODE"));
328 if(groupEthBoardSettings_RunningMode.isNull())
330 yWarning() <<
"eth::parser::read(): cannot find ETH_BOARD_PROPERTIES/RUNNINGMODE group in config files for BOARD w/ IP" << boarddata.
properties.
ipv4string <<
" and will use default values";
331 yWarning() <<
"Default values for ETH_BOARD_PROPERTIES/RUNNINGMODE group: (period, maxTimeOfRXactivity, maxTimeOfDOactivity, maxTimeOfTXactivity, TXrateOfRegularROPs) = " <<
337 if(
true == groupEthBoardSettings_RunningMode.check(
"period"))
339 int tmp = groupEthBoardSettings_RunningMode.find(
"period").asInt32();
343 yWarning() <<
"eth::parser::read() for BOARD" << boarddata.
properties.
ipv4string <<
"ETH_BOARD_SETTINGS::RUNNINGMODE::period can be only 1000 (so far) and it was:" <<
tmp;
349 if(
true == groupEthBoardSettings_RunningMode.check(
"maxTimeOfRXactivity"))
351 int tmp = groupEthBoardSettings_RunningMode.find(
"maxTimeOfRXactivity").asInt32();
353 if((
tmp < 5) || (
tmp > 990))
355 yWarning() <<
"eth::parser::read() for BOARD" << boarddata.
properties.
ipv4string <<
"ETH_BOARD_SETTINGS::RUNNINGMODE::maxTimeOfRXactivity must be in [5, 990] (so far) and it was:" <<
tmp <<
"Using default value";
362 if(
true == groupEthBoardSettings_RunningMode.check(
"maxTimeOfDOactivity"))
364 int tmp = groupEthBoardSettings_RunningMode.find(
"maxTimeOfDOactivity").asInt32();
366 if((
tmp < 5) || (
tmp > 990))
368 yWarning() <<
"eth::parser::read() for BOARD" << boarddata.
properties.
ipv4string <<
"ETH_BOARD_SETTINGS::RUNNINGMODE::maxtimeOfDOactivity must be in [5, 990] (so far) and it was:" <<
tmp <<
"Using default value";
375 if(
true == groupEthBoardSettings_RunningMode.check(
"maxTimeOfTXactivity"))
377 int tmp = groupEthBoardSettings_RunningMode.find(
"maxTimeOfTXactivity").asInt32();
379 if((
tmp < 5) || (
tmp > 990))
381 yWarning() <<
"eth::parser::read() for BOARD" << boarddata.
properties.
ipv4string <<
"ETH_BOARD_SETTINGS::RUNNINGMODE::maxTimeOfTXactivity must be in [5, 990] (so far) and it was:" <<
tmp <<
"Using default value";
389 if(
true == groupEthBoardSettings_RunningMode.check(
"TXrateOfRegularROPs"))
391 int tmp = groupEthBoardSettings_RunningMode.find(
"TXrateOfRegularROPs").asInt32();
395 yWarning() <<
"eth::parser::read() for BOARD" << boarddata.
properties.
ipv4string <<
"ETH_BOARD_SETTINGS::RUNNINGMODE::TXrateOfRegularROPs must be in [1, 20] and it was:" <<
tmp <<
"Using value = 1";
400 yWarning() <<
"eth::parser::read() for BOARD" << boarddata.
properties.
ipv4string <<
"ETH_BOARD_SETTINGS::RUNNINGMODE::TXrateOfRegularROPs must be in [1, 20] and it was:" <<
tmp <<
"Using value = 20";
409 yWarning() <<
"eth::parser::read() for BOARD" << boarddata.
properties.
ipv4string <<
"In ETH_BOARD_SETTINGS::RUNNINGMODE sum(maxTimeOfRXactivity, maxTimeOfDOactivity, maxTimeOfTXactivity) != period !!! Using default values";
434 Bottle groupEthBoardActions = Bottle(groupEthBoard.findGroup(
"ETH_BOARD_ACTIONS"));
435 if(!groupEthBoardActions.isNull())
437 Bottle groupEthBoardActions_Monitor = Bottle(groupEthBoardActions.findGroup(
"MONITOR_ITS_PRESENCE"));
438 if(!groupEthBoardActions_Monitor.isNull())
440 Bottle groupEthBoardActions_Monitor_enabled = groupEthBoardActions_Monitor.findGroup(
"enabled");
441 std::string Ena = groupEthBoardActions_Monitor_enabled.get(1).asString();
442 const char *strEna = Ena.c_str();
444 if(0 == strcmp(strEna,
"true"))
453 if(
true == groupEthBoardActions_Monitor.check(
"timeout"))
455 double presenceTimeout = groupEthBoardActions_Monitor.find(
"timeout").asFloat64();
457 if(presenceTimeout <= 0)
463 if(presenceTimeout > 0.100)
465 presenceTimeout = 0.100;
473 if(
true == groupEthBoardActions_Monitor.check(
"periodOfMissingReport"))
475 double reportMissingPeriod = groupEthBoardActions_Monitor.find(
"periodOfMissingReport").asFloat64();
477 if(reportMissingPeriod <= 0)
479 reportMissingPeriod = 0.0;
482 if(reportMissingPeriod > 600)
484 reportMissingPeriod = 600;
bool read(yarp::os::Searchable &cfgtotal, pc104Data &pc104data)
bool print(const pc104Data &pc104data)
double monitorpresence_periodofmissingreport
bool monitorpresence_enabled
double monitorpresence_timeout
boardProperties properties
std::uint16_t maxSizeRXpacket
eOipv4addressing_t ipv4addressing
std::string ipv4addressingstring
eOmn_appl_config_t txconfig
eOipv4addressing_t localaddressing
std::string addressingstring