17#include <yarp/os/Time.h>
18#include <yarp/os/Log.h>
19#include <yarp/os/LogStream.h>
22#include <yarp/dev/PolyDriver.h>
23#include <ace/config.h>
24#include <ace/Log_Msg.h>
30#include <yarp/os/LogStream.h>
31#include "EoAnalogSensors.h"
33#include "EoProtocol.h"
34#include "EoProtocolMN.h"
35#include "EoProtocolAS.h"
37#include <yarp/os/NetType.h>
40#pragma warning(once:4355)
46using namespace yarp::os;
67 const char *t = fromstring.c_str();
69 toservicetype = eomn_string2servicetype(t);
71 if(eomn_serv_UNKNOWN == toservicetype)
73 yWarning() <<
"ServiceParser::convert():" << t <<
"is not a legal string for eOmn_serv_type_t";
84 const char *t = fromstring.c_str();
86 todiagnmode = eomn_string2servicediagnmode(t);
88 if(eomn_serv_diagn_mode_UNKNOWN == todiagnmode)
90 yWarning() <<
"ServiceParser::convert():" << t <<
"is not a legal string for eOmn_serv_diagn_mode_t";
124 const char *t = fromstring.c_str();
126 tosensortype = eoas_string2sensor(t);
128 if(eoas_unknown == tosensortype)
130 yWarning() <<
"ServiceParser::convert():" << t <<
"is not a legal string for eOas_sensor_t";
141 const char *t = fromstring.c_str();
143 eObool_t usecompactstring = eobool_false;
144 tobrdtype = eoboards_string2type2(t, usecompactstring);
146 if(eobrd_unknown == tobrdtype)
148 usecompactstring = eobool_true;
149 tobrdtype = eoboards_string2type2(t, usecompactstring);
152 if(eobrd_unknown == tobrdtype)
154 yWarning() <<
"ServiceParser::convert(): string" << t <<
"cannot be converted into a proper eObrd_type_t";
165 const char *t = fromstring.c_str();
167 eObool_t usecompactstring = eobool_false;
168 pidoutputtype = eomc_string2pidoutputtype(t, usecompactstring);
170 if(eomc_pidoutputtype_unknown == pidoutputtype)
172 usecompactstring = eobool_true;
173 pidoutputtype = eomc_string2pidoutputtype(t, usecompactstring);
176 if(eomc_pidoutputtype_unknown == pidoutputtype)
178 yWarning() <<
"ServiceParser::convert(): string" << t <<
"cannot be converted into a proper eOmc_pidoutputtype_t";
188 const char *t = fromstring.c_str();
190 eObool_t usecompactstring = eobool_false;
191 jsetconstraint = eomc_string2jsetconstraint(t, usecompactstring);
193 if(eomc_jsetconstraint_unknown == jsetconstraint)
195 usecompactstring = eobool_true;
196 jsetconstraint = eomc_string2jsetconstraint(t, usecompactstring);
199 if(eomc_jsetconstraint_unknown == jsetconstraint)
201 yWarning() <<
"ServiceParser::convert(): string" << t <<
"cannot be converted into a proper eOmc_jsetconstraint_t";
211 const char *t = fromstring.c_str();
213 eObool_t usecompactstring = eobool_false;
214 eObrd_type_t type = eoboards_string2type2(t, usecompactstring);
216 if(eobrd_unknown == type)
218 usecompactstring = eobool_true;
219 type = eoboards_string2type2(t, usecompactstring);
222 if(eobrd_unknown == type)
224 yWarning() <<
"ServiceParser::convert(): string" << t <<
"cannot be converted into a proper eObrd_type_t";
229 tobrdcantype = eoboards_type2cantype(type);
230 if(eobrd_cantype_unknown == tobrdcantype)
232 yWarning() <<
"ServiceParser::convert():" << t <<
"is not a legal string for eObrd_cantype_t";
242 const char *t = fromstring.c_str();
244 eObool_t usecompactstring = eobool_false;
245 eObrd_type_t type = eoboards_string2type2(t, usecompactstring);
247 if(eobrd_unknown == type)
249 usecompactstring = eobool_true;
250 type = eoboards_string2type2(t, usecompactstring);
253 if(eobrd_unknown == type)
255 yWarning() <<
"ServiceParser::convert(): string" << t <<
"cannot be converted into a proper eObrd_type_t";
260 tobrdethtype = eoboards_type2ethtype(type);
261 if(eobrd_ethtype_unknown == tobrdethtype)
263 yWarning() <<
"ServiceParser::convert():" << t <<
"is not a legal string for eObrd_ethtype_t";
274 const char *t = fromstring.c_str();
276 if(0 == strcmp(t,
"true"))
280 else if(0 == strcmp(t,
"false"))
284 else if(0 == strcmp(t,
"TRUE"))
288 else if(0 == strcmp(t,
"FALSE"))
292 else if(0 == strcmp(t,
"1"))
296 else if(0 == strcmp(t,
"0"))
302 yWarning() <<
"ServiceParser::convert():" << t <<
"is not a legal string for bool";
314 if((number >= 0) && (number < 256))
320 yWarning() <<
"ServiceParser::convert():" << number <<
"is not a legal value for uint8_t";
331 if((number >= 0) && (number < (64*1024)))
337 yWarning() <<
"ServiceParser::convert():" << number <<
"is not a legal value for uint16_t";
350 const char *t = fromstring.c_str();
352 if((NULL == str) || (0 == strsize))
354 yWarning() <<
"ServiceParser::convert(): there is an attempt to convert string" << t <<
"into a NULL or zero-sized char *str: len = " << strsize;
359 if(strsize >= strlen(t))
361 snprintf(str, strsize,
"%s", t);
365 yWarning() <<
"ServiceParser::convert():" << t <<
"is not a legal string for a char[] of max size" << strsize;
376 const char *t = fromstring.c_str();
384 yWarning() <<
"ServiceParser::convert():" << t <<
"is not a legal string";
399 const char *t = fromstring.c_str();
404 yWarning() <<
"ServiceParser::convert():" << t <<
"is not a legal string for a eObrd_location_t because it is too long with size = " << len;
409 char prefix[16] = {0};
410 sscanf(t,
"%3c", prefix);
411 if(0 == strcmp(prefix,
"ETH"))
414 sscanf(t,
"%3c:%d", prefix, &adr);
415 location.any.place = eobrd_place_eth;
416 location.eth.id = adr;
418 else if(0 == strcmp(prefix,
"CAN"))
424 int numberofreaditems = sscanf(t,
"%3c%d:%d%c%d", prefix, &bus, &adr, &cc, &sub);
426 if((3 != numberofreaditems) && (5 != numberofreaditems))
428 yWarning() <<
"ServiceParser::convert():" << t <<
"is not a legal string for a eObrd_location_t because we dont have correct number of sections separated by :";
434 if((1 != bus) && (2 != bus))
436 yWarning() <<
"ServiceParser::convert():" << t <<
"is not a legal string for a eObrd_location_t because we can have either CAN1 or CAN2";
440 if((0 == adr) || (adr > 14))
442 yWarning() <<
"ServiceParser::convert():" << t <<
"is not a legal string for a eObrd_location_t because CAN address is in range [1, 14]";
447 location.any.place = (3 == numberofreaditems) ? (eobrd_place_can) : (eobrd_place_extcan);
448 if(eobrd_place_can == location.any.place)
450 location.can.port = (1 == bus) ? (eOcanport1) : (eOcanport2);
451 location.can.addr = adr;
452 location.can.ffu = 0;
456 location.extcan.port = (1 == bus) ? (eOcanport1) : (eOcanport2);
457 location.extcan.addr = adr;
458 if((eobrd_caninsideindex_first != sub) && (eobrd_caninsideindex_second != sub) && (eobrd_caninsideindex_third != sub) && (eobrd_caninsideindex_fourth != sub))
460 yWarning() <<
"ServiceParser::convert():" << t <<
"is not a legal string for a eObrd_location_t because in CANx:adr:SUB, SUB address must be in range [0, 3]";
464 location.extcan.index = sub;
468 else if(0 == strcmp(prefix,
"LOC"))
476 yWarning() <<
"ServiceParser::convert():" << t <<
"is not a legal string for a eObrd_location_t because it does not begin with ETH or CAN";
486 if((NULL == str) || (0 == len))
491 if(eobrd_place_can == loc.any.place)
493 snprintf(str, len,
"CAN%d:%d", (eOcanport1 == loc.can.port) ? 1 : 2, loc.can.addr);
495 else if(eobrd_place_extcan == loc.any.place)
497 snprintf(str, len,
"CAN%d:%d:%d", (eOcanport1 == loc.extcan.port) ? 1 : 2, loc.extcan.addr, loc.extcan.index);
499 else if(eobrd_place_eth == loc.any.place)
501 snprintf(str, len,
"ETH:%d", loc.eth.id);
515 const char *t = fromstring.c_str();
520 yWarning() <<
"ServiceParser::convert():" << t <<
"is not a legal string for a eOlocation_t because it is too long with size = " << len;
525 char prefix[16] = {0};
526 sscanf(t,
"%3c", prefix);
527 if(0 == strcmp(prefix,
"LOC"))
530 sscanf(t,
"%3c:%d", prefix, &adr);
531 location.bus = eobus_local;
535 else if((0 == strcmp(prefix,
"CAN")) || (0 == strcmp(prefix,
"ICC")))
539 int numberofreaditems = sscanf(t,
"%3c%d:%d", prefix, &bus, &adr);
541 if(3 != numberofreaditems)
543 yWarning() <<
"ServiceParser::convert():" << t <<
"is not a legal string for a eOlocation_t because we dont have correct number of sections separated by :";
549 if((1 != bus) && (2 != bus))
551 yWarning() <<
"ServiceParser::convert():" << t <<
"is not a legal string for a eOlocation_t because we can have either ---1 or ---2";
556 if((0 == adr) || (adr > 14))
558 yWarning() <<
"ServiceParser::convert():" << t <<
"is not a legal string for a eOlocation_t because address is not in range [1, 14]";
564 if(0 == strcmp(prefix,
"CAN"))
566 location.bus = (1 == bus) ? eobus_can1 : eobus_can2;
568 else if(0 == strcmp(prefix,
"ICC"))
570 location.bus = (1 == bus) ? eobus_icc1 : eobus_icc2;
578 yWarning() <<
"ServiceParser::convert():" << t <<
"is not a legal string for a eOlocation_t because it does not begin with LOC, CAN, ICC";
588 if((NULL == str) || (0 == len))
593 if(eobus_can1 == loc.bus)
595 snprintf(str, len,
"CAN1:%d", loc.adr);
597 else if(eobus_can2 == loc.bus)
599 snprintf(str, len,
"CAN2:%d", loc.adr);
601 else if(eobus_local == loc.bus)
603 snprintf(str, len,
"LOC:%d", loc.adr);
605 else if(eobus_icc1 == loc.bus)
607 snprintf(str, len,
"ICC1:%d", loc.adr);
609 else if(eobus_icc2 == loc.bus)
611 snprintf(str, len,
"ICC2:%d", loc.adr);
623 if((NULL == str) || (0 == len))
628 if(eobrd_caninsideindex_none == canloc.insideindex)
630 snprintf(str, len,
"CAN%d:%d", (eOcanport1 == canloc.port) ? 1 : 2, canloc.addr);
634 snprintf(str, len,
"CAN%d:%d:%d", (eOcanport1 == canloc.port) ? 1 : 2, canloc.addr, canloc.insideindex);
642 if((NULL == str) || (0 == len))
647 snprintf(str, len,
"(%d, %d, %d)", firm.major, firm.minor, firm.build);
654 if((NULL == str) || (0 == len))
659 snprintf(str, len,
"(%d, %d)", prot.major, prot.minor);
664bool ServiceParser::check_analog(Searchable &config, eOmn_serv_type_t type)
666 bool formaterror =
false;
668 if((eomn_serv_AS_mais != type) && (eomn_serv_AS_strain != type) &&
669 (eomn_serv_AS_inertials3 != type) && (eomn_serv_AS_psc != type) && (eomn_serv_AS_pos != type))
671 yError() <<
"ServiceParser::check_analog() is called with wrong type";
679 Bottle b_SERVICE(config.findGroup(
"SERVICE"));
680 if(b_SERVICE.isNull())
682 yError() <<
"ServiceParser::check_analog() cannot find SERVICE group";
688 if(
false == b_SERVICE.check(
"type"))
690 yError() <<
"ServiceParser::check_analog() cannot find SERVICE.type";
695 Bottle b_type(b_SERVICE.find(
"type").asString());
698 yError() <<
"ServiceParser::check_analog() has found unknown SERVICE.type = " << b_type.toString();
703 yError() <<
"ServiceParser::check_analog() has found wrong SERVICE.type = " <<
as_service.
type <<
"it must be" <<
"TODO: tostring() function";
710 Bottle b_PROPERTIES = Bottle(b_SERVICE.findGroup(
"PROPERTIES"));
711 if(b_PROPERTIES.isNull())
713 yError() <<
"ServiceParser::check_analog() cannot find PROPERTIES";
718 Bottle b_PROPERTIES_CANBOARDS = Bottle(b_PROPERTIES.findGroup(
"CANBOARDS"));
719 if(b_PROPERTIES_CANBOARDS.isNull())
721 yError() <<
"ServiceParser::check() cannot find PROPERTIES.CANBOARDS";
729 Bottle b_PROPERTIES_CANBOARDS_type = b_PROPERTIES_CANBOARDS.findGroup(
"type");
730 if(b_PROPERTIES_CANBOARDS_type.isNull())
732 yError() <<
"ServiceParser::check() cannot find PROPERTIES.CANBOARDS.type";
735 Bottle b_PROPERTIES_CANBOARDS_PROTOCOL = Bottle(b_PROPERTIES_CANBOARDS.findGroup(
"PROTOCOL"));
736 if(b_PROPERTIES_CANBOARDS_PROTOCOL.isNull())
738 yError() <<
"ServiceParser::check() cannot find PROPERTIES.CANBOARDS.PROTOCOL";
741 Bottle b_PROPERTIES_CANBOARDS_PROTOCOL_major = Bottle(b_PROPERTIES_CANBOARDS_PROTOCOL.findGroup(
"major"));
742 if(b_PROPERTIES_CANBOARDS_PROTOCOL_major.isNull())
744 yError() <<
"ServiceParser::check() cannot find PROPERTIES.CANBOARDS.PROTOCOL.major";
747 Bottle b_PROPERTIES_CANBOARDS_PROTOCOL_minor = Bottle(b_PROPERTIES_CANBOARDS_PROTOCOL.findGroup(
"minor"));
748 if(b_PROPERTIES_CANBOARDS_PROTOCOL_minor.isNull())
750 yError() <<
"ServiceParser::check() cannot find PROPERTIES.CANBOARDS.PROTOCOL.minor";
753 Bottle b_PROPERTIES_CANBOARDS_FIRMWARE = Bottle(b_PROPERTIES_CANBOARDS.findGroup(
"FIRMWARE"));
754 if(b_PROPERTIES_CANBOARDS_FIRMWARE.isNull())
756 yError() <<
"ServiceParser::check() cannot find PROPERTIES.CANBOARDS.FIRMWARE";
759 Bottle b_PROPERTIES_CANBOARDS_FIRMWARE_major = Bottle(b_PROPERTIES_CANBOARDS_FIRMWARE.findGroup(
"major"));
760 if(b_PROPERTIES_CANBOARDS_FIRMWARE_major.isNull())
762 yError() <<
"ServiceParser::check() cannot find PROPERTIES.CANBOARDS.FIRMWARE.major";
765 Bottle b_PROPERTIES_CANBOARDS_FIRMWARE_minor = Bottle(b_PROPERTIES_CANBOARDS_FIRMWARE.findGroup(
"minor"));
766 if(b_PROPERTIES_CANBOARDS_FIRMWARE_minor.isNull())
768 yError() <<
"ServiceParser::check() cannot find PROPERTIES.CANBOARDS.FIRMWARE.minor";
771 Bottle b_PROPERTIES_CANBOARDS_FIRMWARE_build = Bottle(b_PROPERTIES_CANBOARDS_FIRMWARE.findGroup(
"build"));
772 if(b_PROPERTIES_CANBOARDS_FIRMWARE_build.isNull())
774 yError() <<
"ServiceParser::check() cannot find PROPERTIES.CANBOARDS.FIRMWARE.build";
778 size_t tmp = b_PROPERTIES_CANBOARDS_type.size();
779 int numboards =
tmp - 1;
782 if( (
tmp != b_PROPERTIES_CANBOARDS_PROTOCOL_major.size()) ||
783 (
tmp != b_PROPERTIES_CANBOARDS_PROTOCOL_minor.size()) ||
784 (
tmp != b_PROPERTIES_CANBOARDS_FIRMWARE_major.size()) ||
785 (
tmp != b_PROPERTIES_CANBOARDS_FIRMWARE_minor.size()) ||
786 (
tmp != b_PROPERTIES_CANBOARDS_FIRMWARE_build.size())
789 yError() <<
"ServiceParser::check_analog() in PROPERTIES.CANBOARDS some param has inconsistent length";
797 for(
int i=0; i<numboards; i++)
801 convert(b_PROPERTIES_CANBOARDS_type.get(i+1).asString(), item.
type, formaterror);
802 convert(b_PROPERTIES_CANBOARDS_PROTOCOL_major.get(i+1).asInt32(), item.
protocol.major, formaterror);
803 convert(b_PROPERTIES_CANBOARDS_PROTOCOL_minor.get(i+1).asInt32(), item.
protocol.minor, formaterror);
805 convert(b_PROPERTIES_CANBOARDS_FIRMWARE_major.get(i+1).asInt32(), item.
firmware.major, formaterror);
806 convert(b_PROPERTIES_CANBOARDS_FIRMWARE_minor.get(i+1).asInt32(), item.
firmware.minor, formaterror);
807 convert(b_PROPERTIES_CANBOARDS_FIRMWARE_build.get(i+1).asInt32(), item.
firmware.build, formaterror);
815 if(
true == formaterror)
817 yError() <<
"ServiceParser::check_analog() has detected an illegal format for some of the params of PROPERTIES.CANBOARDS some param has inconsistent length";
822 Bottle b_PROPERTIES_SENSORS = Bottle(b_PROPERTIES.findGroup(
"SENSORS"));
823 if(b_PROPERTIES_SENSORS.isNull())
825 yError() <<
"ServiceParser::check_analog() cannot find PROPERTIES.SENSORS";
831 Bottle b_PROPERTIES_SENSORS_id = Bottle(b_PROPERTIES_SENSORS.findGroup(
"id"));
832 if(b_PROPERTIES_SENSORS_id.isNull())
834 yError() <<
"ServiceParser::check_analog() cannot find PROPERTIES.SENSORS.id";
837 Bottle b_PROPERTIES_SENSORS_type = Bottle(b_PROPERTIES_SENSORS.findGroup(
"type"));
838 if(b_PROPERTIES_SENSORS_type.isNull())
840 yError() <<
"ServiceParser::check_analog() cannot find PROPERTIES.SENSORS.type";
843 Bottle b_PROPERTIES_SENSORS_location = Bottle(b_PROPERTIES_SENSORS.findGroup(
"location"));
844 if(b_PROPERTIES_SENSORS_location.isNull())
846 yError() <<
"ServiceParser::check_analog() cannot find PROPERTIES.SENSORS.location";
849 Bottle b_PROPERTIES_SENSORS_frameName = Bottle(b_PROPERTIES_SENSORS.findGroup(
"framename"));
850 if(b_PROPERTIES_SENSORS_frameName.isNull() && eoas_string2sensor(b_PROPERTIES_SENSORS_type.get(1).asString().c_str())==eoas_strain)
852 yWarning() <<
"ServiceParser::check_analog() cannot find PROPERTIES.SENSORS.framename";
854 Bottle b_PROPERTIES_SENSORS_sensorName = Bottle(b_PROPERTIES_SENSORS.findGroup(
"sensorName"));
855 if(b_PROPERTIES_SENSORS_sensorName.isNull())
857 yWarning() <<
"ServiceParser::check_analog() cannot find PROPERTIES.SENSORS.sensorName";
859 Bottle b_PROPERTIES_SENSORS_boardType;
860 if((eomn_serv_AS_inertials3 == type) || (eomn_serv_AS_pos == type))
863 b_PROPERTIES_SENSORS_boardType = Bottle(b_PROPERTIES_SENSORS.findGroup(
"boardType"));
864 if(b_PROPERTIES_SENSORS_boardType.isNull())
866 yError() <<
"ServiceParser::check_analog() cannot find PROPERTIES.SENSORS.boardType";
872 b_PROPERTIES_SENSORS_boardType.clear();
875 Bottle b_PROPERTIES_SENSORS_pos_port;
876 Bottle b_PROPERTIES_SENSORS_pos_connector;
877 Bottle b_PROPERTIES_SENSORS_pos_CALIBRATION;
878 Bottle b_PROPERTIES_SENSORS_pos_CALIBRATION_type;
879 Bottle b_PROPERTIES_SENSORS_pos_CALIBRATION_rotation;
880 Bottle b_PROPERTIES_SENSORS_pos_CALIBRATION_offset;
881 Bottle b_PROPERTIES_SENSORS_pos_CALIBRATION_invertDirection;
884 if(type == eomn_serv_AS_pos)
886 b_PROPERTIES_SENSORS_pos_port = Bottle(b_PROPERTIES_SENSORS.findGroup(
"port"));
887 if(b_PROPERTIES_SENSORS_pos_port.isNull())
889 yError() <<
"ServiceParser::check_analog() cannot find PROPERTIES.SENSORS.port";
893 b_PROPERTIES_SENSORS_pos_connector = Bottle(b_PROPERTIES_SENSORS.findGroup(
"connector"));
894 if(b_PROPERTIES_SENSORS_pos_connector.isNull())
896 yError() <<
"ServiceParser::check_analog() cannot find PROPERTIES.SENSORS.connector";
900 b_PROPERTIES_SENSORS_pos_CALIBRATION = Bottle(b_PROPERTIES_SENSORS.findGroup(
"CALIBRATION"));
901 if(b_PROPERTIES_SENSORS_pos_CALIBRATION.isNull())
903 yWarning() <<
"ServiceParser::check_analog() cannot find PROPERTIES.SENSORS.CALIBRATION. Using neutral values (ROT:zero, 0.0, false)";
907 b_PROPERTIES_SENSORS_pos_CALIBRATION_type = Bottle(b_PROPERTIES_SENSORS_pos_CALIBRATION.findGroup(
"type"));
908 if(b_PROPERTIES_SENSORS_pos_CALIBRATION_type.isNull())
910 yWarning() <<
"ServiceParser::check_analog() cannot find PROPERTIES.SENSORS.CALIBRATION.type. Using value TYPE::decideg";
913 b_PROPERTIES_SENSORS_pos_CALIBRATION_rotation = Bottle(b_PROPERTIES_SENSORS_pos_CALIBRATION.findGroup(
"rotation"));
914 if(b_PROPERTIES_SENSORS_pos_CALIBRATION_rotation.isNull())
916 yWarning() <<
"ServiceParser::check_analog() cannot find PROPERTIES.SENSORS.CALIBRATION.rotation. Using value ROT::zero";
918 b_PROPERTIES_SENSORS_pos_CALIBRATION_offset = Bottle(b_PROPERTIES_SENSORS_pos_CALIBRATION.findGroup(
"offset"));
919 if(b_PROPERTIES_SENSORS_pos_CALIBRATION_offset.isNull())
921 yWarning() <<
"ServiceParser::check_analog() cannot find PROPERTIES.SENSORS.CALIBRATION.offset. Using value 0.0";
923 b_PROPERTIES_SENSORS_pos_CALIBRATION_invertDirection = Bottle(b_PROPERTIES_SENSORS_pos_CALIBRATION.findGroup(
"invertDirection"));
924 if(b_PROPERTIES_SENSORS_pos_CALIBRATION_invertDirection.isNull())
926 yWarning() <<
"ServiceParser::check_analog() cannot find PROPERTIES.SENSORS.CALIBRATION.invertDirection. Using value false";
933 b_PROPERTIES_SENSORS_pos_port.clear();
934 b_PROPERTIES_SENSORS_pos_connector.clear();
935 b_PROPERTIES_SENSORS_pos_CALIBRATION.clear();
936 b_PROPERTIES_SENSORS_pos_CALIBRATION_type.clear();
937 b_PROPERTIES_SENSORS_pos_CALIBRATION_rotation.clear();
938 b_PROPERTIES_SENSORS_pos_CALIBRATION_offset.clear();
939 b_PROPERTIES_SENSORS_pos_CALIBRATION_invertDirection.clear();
942 size_t tmp = b_PROPERTIES_SENSORS_id.size();
943 int numsensors =
tmp - 1;
946 if( (
tmp != b_PROPERTIES_SENSORS_type.size()) ||
947 (
tmp != b_PROPERTIES_SENSORS_location.size()) ||
948 (((eomn_serv_AS_inertials3 == type) || (eomn_serv_AS_pos == type)) && (b_PROPERTIES_SENSORS_boardType.size() !=
tmp))
951 yError() <<
"ServiceParser::check_analog() xx in PROPERTIES.SENSORS some param has inconsistent length";
959 for(
int i=0; i<numsensors; i++)
964 convert(b_PROPERTIES_SENSORS_id.get(i+1).asString(), item.id, formaterror);
965 convert(b_PROPERTIES_SENSORS_type.get(i+1).asString(), item.
type, formaterror);
966 convert(b_PROPERTIES_SENSORS_location.get(i+1).asString(), item.location, formaterror);
967 if(!b_PROPERTIES_SENSORS_frameName.isNull())
969 convert(b_PROPERTIES_SENSORS_frameName.get(i+1).asString(), item.frameName, formaterror);
971 if(!b_PROPERTIES_SENSORS_sensorName.isNull())
973 convert(b_PROPERTIES_SENSORS_sensorName.get(i+1).asString(), item.sensorName, formaterror);
975 if((eomn_serv_AS_inertials3 == type) || (eomn_serv_AS_pos == type))
977 convert(b_PROPERTIES_SENSORS_boardType.get(i+1).asString(), item.boardtype, formaterror);
980 if(eomn_serv_AS_pos == type)
983 parse_POS_port(b_PROPERTIES_SENSORS_pos_port.get(i+1).asString(), item.pos.port, formaterror);
984 parse_POS_connector(b_PROPERTIES_SENSORS_pos_connector.get(i+1).asString(), item.boardtype, item.pos.connector, formaterror);
986 bool wehaveCALIBRATION = b_PROPERTIES_SENSORS_pos_CALIBRATION.isNull() ? false :
true;
988 item.pos.calibration.
clear();
989 item.pos.calibration.
type = eoas_pos_TYPE_decideg;
991 if(wehaveCALIBRATION)
996 if(
false == b_PROPERTIES_SENSORS_pos_CALIBRATION_type.isNull())
998 parse_POS_CALIB_type(b_PROPERTIES_SENSORS_pos_CALIBRATION_type.get(i+1).asString(), item.pos.calibration.
type, formaterror);
1002 if(
false == b_PROPERTIES_SENSORS_pos_CALIBRATION_rotation.isNull())
1004 parse_POS_CALIB_rotation(b_PROPERTIES_SENSORS_pos_CALIBRATION_rotation.get(i+1).asString(), item.pos.calibration.rotation, formaterror);
1008 if(
false == b_PROPERTIES_SENSORS_pos_CALIBRATION_offset.isNull())
1010 item.pos.calibration.offset = b_PROPERTIES_SENSORS_pos_CALIBRATION_offset.get(i+1).asFloat32();
1014 if(
false == b_PROPERTIES_SENSORS_pos_CALIBRATION_invertDirection.isNull())
1016 item.pos.calibration.invertdirection = b_PROPERTIES_SENSORS_pos_CALIBRATION_invertDirection.get(i+1).asBool();
1029 if(
true == formaterror)
1031 yError() <<
"ServiceParser::check_analog() has detected an illegal format for some of the params of PROPERTIES.SENSORS some param has inconsistent length";
1039 Bottle b_SETTINGS = Bottle(b_SERVICE.findGroup(
"SETTINGS"));
1040 if(b_SETTINGS.isNull())
1042 yError() <<
"ServiceParser::check_analog() cannot find SETTINGS";
1048 Bottle b_SETTINGS_acquisitionRate = Bottle(b_SETTINGS.findGroup(
"acquisitionRate"));
1049 if(b_SETTINGS_acquisitionRate.isNull())
1051 yError() <<
"ServiceParser::check_analog() cannot find SETTINGS.acquisitionRate";
1054 Bottle b_SETTINGS_enabledSensors = Bottle(b_SETTINGS.findGroup(
"enabledSensors"));
1055 if(b_SETTINGS_enabledSensors.isNull())
1057 yError() <<
"ServiceParser::check_analog() cannot find SETTINGS.enabledSensors";
1061 size_t s = b_SETTINGS_enabledSensors.size();
1062 size_t numenabledsensors = (0 == s) ? (0) : (s - 1) ;
1067 yError() <<
"ServiceParser::check_analog() in SETTINGS.enabledSensors there are too many items with respect to supported sensors:" << numenabledsensors <<
"vs." <<
as_service.
properties.
sensors.size();
1076 for(
size_t i=0; i<numenabledsensors; i++)
1080 std::string s_enabled_id = b_SETTINGS_enabledSensors.get(i+1).asString();
1093 if(item.
id == s_enabled_id)
1112 yError() <<
"ServiceParser::check_analog() could not find any item in SETTINGS.enabledSensors which matches what in PROPERTIES.SENSORS.id";
1122 if(eomn_serv_AS_strain == type)
1124 Bottle b_STRAIN_SETTINGS = Bottle(b_SERVICE.findGroup(
"STRAIN_SETTINGS"));
1125 if(b_STRAIN_SETTINGS.isNull())
1127 yError() <<
"ServiceParser::check_analog() cannot find STRAIN_SETTINGS";
1133 Bottle b_STRAIN_SETTINGS_useCalibration = Bottle(b_STRAIN_SETTINGS.findGroup(
"useCalibration"));
1134 if(b_STRAIN_SETTINGS_useCalibration.isNull())
1136 yError() <<
"ServiceParser::check_analog() cannot find STRAIN_SETTINGS.useCalibration";
1140 formaterror =
false;
1143 if(
true == formaterror)
1145 yError() <<
"ServiceParser::check_analog() has detected an illegal format for paramf STRAIN_SETTINGS.useCalibration";
1160bool ServiceParser::check_skin(Searchable &config)
1162 const eOmn_serv_type_t type = eomn_serv_SK_skin;
1163 bool formaterror =
false;
1172 Bottle b_SERVICE(config.findGroup(
"SERVICE"));
1173 if(b_SERVICE.isNull())
1181 if(
false == b_SERVICE.check(
"type"))
1188 Bottle b_type(b_SERVICE.find(
"type").asString());
1191 yWarning() <<
"ServiceParser::check_skin() has found unknown SERVICE.type = " << b_type.toString();
1196 yWarning() <<
"ServiceParser::check_skin() has found wrong SERVICE.type = " <<
sk_service.
type <<
"it must be" <<
"TODO: tostring() function";
1203 Bottle b_PROPERTIES = Bottle(b_SERVICE.findGroup(
"PROPERTIES"));
1204 if(b_PROPERTIES.isNull())
1206 yWarning() <<
"ServiceParser::check_skin() cannot find PROPERTIES";
1211 Bottle b_PROPERTIES_CANBOARDS = Bottle(b_PROPERTIES.findGroup(
"CANBOARDS"));
1212 if(b_PROPERTIES_CANBOARDS.isNull())
1214 yWarning() <<
"ServiceParser::check() cannot find PROPERTIES.CANBOARDS";
1222 Bottle b_PROPERTIES_CANBOARDS_type = b_PROPERTIES_CANBOARDS.findGroup(
"type");
1223 if(b_PROPERTIES_CANBOARDS_type.isNull())
1225 yError() <<
"ServiceParser::check_skin() cannot find PROPERTIES.CANBOARDS.type";
1228 Bottle b_PROPERTIES_CANBOARDS_PROTOCOL = Bottle(b_PROPERTIES_CANBOARDS.findGroup(
"PROTOCOL"));
1229 if(b_PROPERTIES_CANBOARDS_PROTOCOL.isNull())
1231 yError() <<
"ServiceParser::check_skin() cannot find PROPERTIES.CANBOARDS.PROTOCOL";
1234 Bottle b_PROPERTIES_CANBOARDS_PROTOCOL_major = Bottle(b_PROPERTIES_CANBOARDS_PROTOCOL.findGroup(
"major"));
1235 if(b_PROPERTIES_CANBOARDS_PROTOCOL_major.isNull())
1237 yError() <<
"ServiceParser::check_skin() cannot find PROPERTIES.CANBOARDS.PROTOCOL.major";
1240 Bottle b_PROPERTIES_CANBOARDS_PROTOCOL_minor = Bottle(b_PROPERTIES_CANBOARDS_PROTOCOL.findGroup(
"minor"));
1241 if(b_PROPERTIES_CANBOARDS_PROTOCOL_minor.isNull())
1243 yError() <<
"ServiceParser::check_skin() cannot find PROPERTIES.CANBOARDS.PROTOCOL.minor";
1246 Bottle b_PROPERTIES_CANBOARDS_FIRMWARE = Bottle(b_PROPERTIES_CANBOARDS.findGroup(
"FIRMWARE"));
1247 if(b_PROPERTIES_CANBOARDS_FIRMWARE.isNull())
1249 yError() <<
"ServiceParser::check_skin() cannot find PROPERTIES.CANBOARDS.FIRMWARE";
1252 Bottle b_PROPERTIES_CANBOARDS_FIRMWARE_major = Bottle(b_PROPERTIES_CANBOARDS_FIRMWARE.findGroup(
"major"));
1253 if(b_PROPERTIES_CANBOARDS_FIRMWARE_major.isNull())
1255 yError() <<
"ServiceParser::check_skin() cannot find PROPERTIES.CANBOARDS.FIRMWARE.major";
1258 Bottle b_PROPERTIES_CANBOARDS_FIRMWARE_minor = Bottle(b_PROPERTIES_CANBOARDS_FIRMWARE.findGroup(
"minor"));
1259 if(b_PROPERTIES_CANBOARDS_FIRMWARE_minor.isNull())
1261 yError() <<
"ServiceParser::check_skin() cannot find PROPERTIES.CANBOARDS.FIRMWARE.minor";
1264 Bottle b_PROPERTIES_CANBOARDS_FIRMWARE_build = Bottle(b_PROPERTIES_CANBOARDS_FIRMWARE.findGroup(
"build"));
1265 if(b_PROPERTIES_CANBOARDS_FIRMWARE_build.isNull())
1267 yError() <<
"ServiceParser::check_skin() cannot find PROPERTIES.CANBOARDS.FIRMWARE.build";
1271 size_t tmp = b_PROPERTIES_CANBOARDS_type.size();
1272 size_t numboards = (0 ==
tmp) ? 0 : (
tmp - 1);
1275 if( (
tmp != b_PROPERTIES_CANBOARDS_PROTOCOL_major.size()) ||
1276 (
tmp != b_PROPERTIES_CANBOARDS_PROTOCOL_minor.size()) ||
1277 (
tmp != b_PROPERTIES_CANBOARDS_FIRMWARE_major.size()) ||
1278 (
tmp != b_PROPERTIES_CANBOARDS_FIRMWARE_minor.size()) ||
1279 (
tmp != b_PROPERTIES_CANBOARDS_FIRMWARE_build.size())
1282 yError() <<
"ServiceParser::check_skin() in PROPERTIES.CANBOARDS some param has inconsistent length";
1288 yError() <<
"ServiceParser::check_skin() in PROPERTIES.CANBOARDS has found more than one board";
1292 formaterror =
false;
1309 if(
true == formaterror)
1311 yError() <<
"ServiceParser::check_skin() has detected an illegal format for some of the params of PROPERTIES.CANBOARDS some param has inconsistent length";
1319 Bottle b_PROPERTIES_SENSORS = Bottle(b_PROPERTIES.findGroup(
"SENSORS"));
1320 if(b_PROPERTIES_SENSORS.isNull())
1322 yError() <<
"ServiceParser::check() cannot find PROPERTIES.SENSORS";
1328 Bottle b_PROPERTIES_SENSORS_id = Bottle(b_PROPERTIES_SENSORS.findGroup(
"id"));
1329 if(b_PROPERTIES_SENSORS_id.isNull())
1331 yError() <<
"ServiceParser::check() cannot find PROPERTIES.SENSORS.id";
1334 Bottle b_PROPERTIES_SENSORS_type = Bottle(b_PROPERTIES_SENSORS.findGroup(
"type"));
1335 if(b_PROPERTIES_SENSORS_type.isNull())
1337 yError() <<
"ServiceParser::check() cannot find PROPERTIES.SENSORS.type";
1340 Bottle b_PROPERTIES_SENSORS_location = Bottle(b_PROPERTIES_SENSORS.findGroup(
"location"));
1341 if(b_PROPERTIES_SENSORS_location.isNull())
1343 yError() <<
"ServiceParser::check() cannot find PROPERTIES.SENSORS.location";
1346 Bottle b_PROPERTIES_SENSORS_boardtype;
1347 if(type == eomn_serv_AS_inertials3)
1350 b_PROPERTIES_SENSORS_boardtype = Bottle(b_PROPERTIES_SENSORS.findGroup(
"boardType"));
1351 if(b_PROPERTIES_SENSORS_boardtype.isNull())
1353 yError() <<
"ServiceParser::check() cannot find PROPERTIES.SENSORS.boardType";
1359 b_PROPERTIES_SENSORS_boardtype.clear();
1362 int tmp = b_PROPERTIES_SENSORS_id.size();
1363 int numsensors =
tmp - 1;
1366 if( (
tmp != b_PROPERTIES_SENSORS_type.size()) ||
1367 (
tmp != b_PROPERTIES_SENSORS_location.size()) ||
1368 ((type == eomn_serv_AS_inertials3) && (b_PROPERTIES_SENSORS_boardtype.size() !=
tmp))
1371 yError() <<
"ServiceParser::check() in PROPERTIES.SENSORS some param has inconsistent length";
1378 formaterror =
false;
1379 for(
int i=0; i<numsensors; i++)
1382 item.
type = eoas_none;
1383 item.
location.any.place = eobrd_place_none;
1385 convert(b_PROPERTIES_SENSORS_id.get(i+1).asString(), item.
id, formaterror);
1386 convert(b_PROPERTIES_SENSORS_type.get(i+1).asString(), item.
type, formaterror);
1387 convert(b_PROPERTIES_SENSORS_location.get(i+1).asString(), item.
location, formaterror);
1388 if(type == eomn_serv_AS_inertials3)
1390 convert(b_PROPERTIES_SENSORS_boardtype.get(i+1).asString(), item.
boardtype, formaterror);
1403 if(
true == formaterror)
1405 yError() <<
"ServiceParser::check() has detected an illegal format for some of the params of PROPERTIES.SENSORS some param has inconsistent length";
1419 Bottle b_SETTINGS = Bottle(b_SERVICE.findGroup(
"SETTINGS"));
1420 if(b_SETTINGS.isNull())
1422 yError() <<
"ServiceParser::check() cannot find SETTINGS";
1428 Bottle b_SETTINGS_acquisitionRate = Bottle(b_SETTINGS.findGroup(
"acquisitionRate"));
1429 if(b_SETTINGS_acquisitionRate.isNull())
1431 yError() <<
"ServiceParser::check() cannot find SETTINGS.acquisitionRate";
1434 Bottle b_SETTINGS_enabledSensors = Bottle(b_SETTINGS.findGroup(
"enabledSensors"));
1435 if(b_SETTINGS_enabledSensors.isNull())
1437 yError() <<
"ServiceParser::check() cannot find SETTINGS.enabledSensors";
1441 int numenabledsensors = b_SETTINGS_enabledSensors.size() - 1;
1446 yError() <<
"ServiceParser::check() in SETTINGS.enabledSensors there are too many items with respect to supported sensors:" << numenabledsensors <<
"vs." <<
sk_service.
properties.sensors.size();
1450 convert(b_SETTINGS_acquisitionRate.get(1).asInt32(),
sk_service.settings.acquisitionrate, formaterror);
1453 sk_service.settings.enabledsensors.resize(0);
1455 for(
int i=0; i<numenabledsensors; i++)
1459 std::string s_enabled_id = b_SETTINGS_enabledSensors.get(i+1).asString();
1472 if(item.
id == s_enabled_id)
1482 sk_service.settings.enabledsensors.push_back(founditem);
1489 if(0 ==
sk_service.settings.enabledsensors.size())
1491 yError() <<
"ServiceParser::check() could not find any item in SETTINGS.enabledSensors which matches what in PROPERTIES.SENSORS.id";
1506 if(eomn_serv_AS_strain == type)
1508 Bottle b_STRAIN_SETTINGS = Bottle(b_SERVICE.findGroup(
"STRAIN_SETTINGS"));
1509 if(b_STRAIN_SETTINGS.isNull())
1511 yError() <<
"ServiceParser::check() cannot find STRAIN_SETTINGS";
1517 Bottle b_STRAIN_SETTINGS_useCalibration = Bottle(b_STRAIN_SETTINGS.findGroup(
"useCalibration"));
1518 if(b_STRAIN_SETTINGS_useCalibration.isNull())
1520 yError() <<
"ServiceParser::check() cannot find STRAIN_SETTINGS.useCalibration";
1524 formaterror =
false;
1525 convert(b_STRAIN_SETTINGS_useCalibration.get(1).asString(), sk_skin_settings.useCalibration, formaterror);
1527 if(
true == formaterror)
1529 yError() <<
"ServiceParser::check() has detected an illegal format for paramf STRAIN_SETTINGS.useCalibration";
1548 if(
false == check_analog(config, eomn_serv_AS_mais))
1550 yError() <<
"ServiceParser::parseService() has received an invalid SERVICE group for mais";
1560 if(eobrd_cantype_mais != themais_props.
type)
1562 yError() <<
"ServiceParser::parseService() has detected an invalid type of board. it should be a eobrd_mais but is a:" << eoboards_type2string2(eoboards_cantype2type(themais_props.
type), eobool_false);
1572 maisconfig.
ethservice.configuration.type = eomn_serv_AS_mais;
1573 memcpy(&maisconfig.
ethservice.configuration.data.as.mais.version.protocol, &themais_props.
protocol,
sizeof(eObrd_protocolversion_t));
1574 memcpy(&maisconfig.
ethservice.configuration.data.as.mais.version.firmware, &themais_props.
firmware,
sizeof(eObrd_firmwareversion_t));
1577 if(eobrd_place_can != themais_sensor.
location.any.place)
1579 yError() <<
"ServiceParser::parseService() has received an invalid location for its mais. it is not a CANx:adr location";
1582 maisconfig.
ethservice.configuration.data.as.mais.canloc.port = themais_sensor.
location.can.port;
1583 maisconfig.
ethservice.configuration.data.as.mais.canloc.addr = themais_sensor.
location.can.addr;
1584 maisconfig.
ethservice.configuration.data.as.mais.canloc.insideindex = eobrd_caninsideindex_none;
1593 if(
false == check_analog(config, eomn_serv_AS_strain))
1595 yError() <<
"ServiceParser::parseService() has received an invalid SERVICE group for strain";
1604 if((eobrd_cantype_strain != thestrain_props.
type) && (eobrd_cantype_strain2 != thestrain_props.
type) && (eobrd_cantype_strain2c != thestrain_props.
type))
1606 yError() <<
"ServiceParser::parseService() has detected an invalid type of board. it should be a eobrd_strain, eobrd_strain2 or eobrd_strain2c but is a:" << eoboards_type2string2(eoboards_cantype2type(thestrain_props.
type), eobool_false);
1614 memset(&strainconfig.
ethservice.configuration, 0,
sizeof(strainconfig.
ethservice.configuration));
1616 strainconfig.
ethservice.configuration.type = eomn_serv_AS_strain;
1617 strainconfig.
ethservice.configuration.data.as.strain.boardtype.type = thestrain_props.
type;
1618 memcpy(&strainconfig.
ethservice.configuration.data.as.strain.boardtype.protocol, &thestrain_props.
protocol,
sizeof(eObrd_protocolversion_t));
1619 memcpy(&strainconfig.
ethservice.configuration.data.as.strain.boardtype.firmware, &thestrain_props.
firmware,
sizeof(eObrd_firmwareversion_t));
1622 if(eobrd_place_can != thestrain_sensor.
location.any.place)
1624 yError() <<
"ServiceParser::parseService() has received an invalid location for strain. it is not a CANx:adr location";
1627 strainconfig.
ethservice.configuration.data.as.strain.canloc.port = thestrain_sensor.
location.can.port;
1628 strainconfig.
ethservice.configuration.data.as.strain.canloc.addr = thestrain_sensor.
location.can.addr;
1629 strainconfig.
ethservice.configuration.data.as.strain.canloc.insideindex = eobrd_caninsideindex_none;
1638 if(
false == check_analog(config, eomn_serv_AS_strain))
1640 yError() <<
"ServiceParser::parseService() has received an invalid SERVICE group for strain";
1649 if( (eobrd_cantype_strain != thestrain_props.
type) && (eobrd_cantype_strain2 != thestrain_props.
type) && (eobrd_cantype_strain2c != thestrain_props.
type))
1651 yError() <<
"ServiceParser::parseService() for embObjFTsensor has detected an invalid type of board. it should be a eobrd_strain2 or a eobrd_strain2c but is a:" << eoboards_type2string2(eoboards_cantype2type(thestrain_props.
type), eobool_false);
1662 ftconfig.
ethservice.configuration.type = eomn_serv_AS_strain;
1663 ftconfig.
ethservice.configuration.data.as.strain.boardtype.type = thestrain_props.
type;
1664 memcpy(&ftconfig.
ethservice.configuration.data.as.strain.boardtype.protocol, &thestrain_props.
protocol,
sizeof(eObrd_protocolversion_t));
1665 memcpy(&ftconfig.
ethservice.configuration.data.as.strain.boardtype.firmware, &thestrain_props.
firmware,
sizeof(eObrd_firmwareversion_t));
1668 if(eobrd_place_can != thestrain_sensor.
location.any.place)
1670 yError() <<
"ServiceParser::parseService() has received an invalid location for strain. it is not a CANx:adr location";
1673 ftconfig.
ethservice.configuration.data.as.strain.canloc.port = thestrain_sensor.
location.can.port;
1674 ftconfig.
ethservice.configuration.data.as.strain.canloc.addr = thestrain_sensor.
location.can.addr;
1675 ftconfig.
ethservice.configuration.data.as.strain.canloc.insideindex = eobrd_caninsideindex_none;
1679 Bottle b_SERVICE(config.findGroup(
"SERVICE"));
1680 Bottle b_SETTINGS = Bottle(b_SERVICE.findGroup(
"SETTINGS"));
1681 Bottle b_SETTINGS_temp = Bottle(b_SETTINGS.findGroup(
"temperature-acquisitionRate"));
1683 if(b_SETTINGS_temp.isNull())
1685 if (eobrd_cantype_strain != thestrain_props.
type) {
1686 yError() <<
"ServiceParser::parseService() for embObjFTsensor device cannot find SETTINGS.temperature-acquisitionRate";
1705 if(
false == check_analog(config, eomn_serv_AS_inertials3))
1707 yError() <<
"ServiceParser::parseService(IMU) has received an invalid SERVICE group for IMU";
1716 yError() <<
"ServiceParser::parseService(IMU): too many type board info are configured. The max num is " << eOas_inertials3_boardinfos_maxnumber;
1724 imuconfig.
ethservice.configuration.type = eomn_serv_AS_inertials3;
1734 eOas_inertial3_setof_boardinfos_t * boardInfoSet_ptr = &imuconfig.
ethservice.configuration.data.as.inertial3.setofboardinfos;
1735 eOresult_t res = eoas_inertial3_setof_boardinfos_clear(boardInfoSet_ptr);
1738 yError() <<
"ServiceParser::parseService(IMU). Error in eoas_inertial3_setof_boardinfos_clear()";
1742 EOarray* array = eo_array_New(eOas_inertials3_descriptors_maxnumber,
sizeof(eOas_inertial3_descriptor_t), &imuconfig.
ethservice.configuration.data.as.inertial3.arrayofdescriptor);
1746 eOas_sensor_t type = sensor.
type;
1749 if( (eoas_imu_acc != type) && (eoas_imu_mag != type) && (eoas_imu_gyr != type) && (eoas_imu_eul != type) &&
1750 (eoas_imu_qua != type) && (eoas_imu_lia != type) && (eoas_imu_grv != type) && (eoas_imu_status != type) &&
1751 (eoas_accel_mtb_int != type) && (eoas_accel_mtb_ext != type) && (eoas_gyros_mtb_ext != type) &&
1752 (eoas_gyros_st_l3g4200d != type))
1754 yWarning() <<
"ServiceParser::parseService() has detected a wrong inertial sensor:" << eoas_sensor2string(type) <<
" ... we drop it";
1759 eOas_inertial3_descriptor_t des = {};
1760 des.typeofsensor = type;
1761 memcpy(&des.on, &sensor.
location,
sizeof(eObrd_location_t));
1763 const eObrd_info_t *boardInfo_ptr = eoas_inertial3_setof_boardinfos_find(boardInfoSet_ptr, eoboards_type2cantype(sensor.
boardtype));
1764 if(
nullptr == boardInfo_ptr && sensor.
boardtype != eobrd_ems4)
1780 yError() <<
"ServiceParser::parseService(IMU). The sensor " << sensor.
boardtype <<
"with type "<< eoas_sensor2string(
static_cast<eOas_sensor_t
> (des.typeofsensor)) <<
"has borad type " << eoboards_type2string2(sensor.
boardtype,
false) <<
" that is not declared in the SERVICE.PROPERTIES.CANBOARDS tag";
1783 eObrd_info_t boardInfo = {};
1787 res = eoas_inertial3_setof_boardinfos_add(boardInfoSet_ptr, &boardInfo);
1790 yError() <<
"ServiceParser::parseService(IMU). Error in eoas_inertial3_setof_boardinfos_add()";
1796 eo_array_PushBack(array, &des);
1798 imuconfig.
id.push_back(sensor.
id);
1818 if(
false == check_skin(config))
1820 yWarning() <<
"ServiceParser::parseService(SKIN) has received an invalid SERVICE group: using defaults";
1829 yError() <<
"ServiceParser::parseService(SK): only mtb / mtb4 / mtb4c / psc boards are allowed: using defaults";
1848 if(
false == check_analog(config, eomn_serv_AS_psc))
1850 yError() <<
"ServiceParser::parseService(PSC) has received an invalid SERVICE group for PSC";
1859 yError() <<
"ServiceParser::parseService(PSC): too many type board info are configured. The max num is " << 1;
1865 yError() <<
"ServiceParser::parseService(PSC): too many enabled sensors are configured. The max num is " << eOas_psc_boards_maxnumber;
1873 pscconfig.
ethservice.configuration.type = eomn_serv_AS_psc;
1880 eOmn_serv_config_data_as_psc_t *pscBoardConfig_ptr = &pscconfig.
ethservice.configuration.data.as.psc;
1883 pscBoardConfig_ptr->version.firmware.major = asServBoardInfo_ptr->
firmware.major;
1884 pscBoardConfig_ptr->version.firmware.minor = asServBoardInfo_ptr->
firmware.minor;
1885 pscBoardConfig_ptr->version.firmware.build = asServBoardInfo_ptr->
firmware.build;
1886 pscBoardConfig_ptr->version.protocol.major = asServBoardInfo_ptr->
protocol.major;
1887 pscBoardConfig_ptr->version.protocol.minor = asServBoardInfo_ptr->
protocol.minor;
1893 if(eoas_psc_angle != sensor.
type)
1895 yWarning() <<
"ServiceParser::parseService() has detected a wrong psc sensor:" << eoas_sensor2string(sensor.
type) <<
" ... we drop it";
1900 pscBoardConfig_ptr->boardInfo.canloc[i].addr= sensor.
location.can.addr;
1901 pscBoardConfig_ptr->boardInfo.canloc[i].port= sensor.
location.can.port;
1911 if(
false == check_analog(config, eomn_serv_AS_pos))
1913 yError() <<
"ServiceParser::parseService(POS) has received an invalid SERVICE group for POS";
1918 yDebug() <<
"ServiceParser::parseService(POS) has received a valid SERVICE group for POS with size of enabled sensors equal to:" <<
as_service.
settings.
enabledsensors.size();
1923 yError() <<
"ServiceParser::parseService(POS): too many enabled sensors are configured. The max num is " << eOas_pos_sensorsinboard_maxnumber;
1929 eObrd_type_t boardtype = eobrd_none;
1930 eObrd_location_t location = {};
1931 std::string sensorName =
"";
1934 if(eobrd_none == boardtype)
1939 bool validBoardForPOS = (eobrd_mtb4 == boardtype) || (eobrd_mtb4c == boardtype) || (eobrd_pmc == boardtype);
1940 if(!validBoardForPOS)
1942 yError() <<
"ServiceParser::parseService(POS): sensors must have the correct boardtype (mtb4, mtb4c or pmc).";
1950 yError() <<
"ServiceParser::parseService(POS): all sensors must have the same boardtype. See SENSORS::boardType values";
1956 yError() <<
"ServiceParser::parseService(POS): all sensors must have the same can location. See SENSORS::location values";
1971 if(
nullptr ==
board)
1973 yError() <<
"ServiceParser::parseService(POS): cannot find the boardtype " << eoboards_type2string2(boardtype, eobool_true) <<
" of SENSORS::boardType inside CANBOARDS::type";
1981 posconfig.
ethservice.configuration.type = eomn_serv_AS_pos;
1997 eOmn_serv_config_data_as_pos_t *pos = &posconfig.
ethservice.configuration.data.as.pos;
1998 for(
size_t b=0; b<eOas_pos_boards_maxnumber; b++)
2000 pos->config.boardconfig[b].boardinfo.type = boardtype;
2001 pos->config.boardconfig[b].boardinfo.firmware.major =
board->firmware.major;
2002 pos->config.boardconfig[b].boardinfo.firmware.minor =
board->firmware.minor;
2003 pos->config.boardconfig[b].boardinfo.firmware.build =
board->firmware.build;
2004 pos->config.boardconfig[b].boardinfo.protocol.major =
board->protocol.major;
2005 pos->config.boardconfig[b].boardinfo.protocol.minor =
board->protocol.minor;
2007 pos->config.boardconfig[b].canloc.addr = location.can.addr;
2008 pos->config.boardconfig[b].canloc.port = location.can.port;
2013 pos->config.boardconfig[b].sensors[s].connector = snsr.
pos.
connector;
2015 pos->config.boardconfig[b].sensors[s].port = snsr.
pos.
port;
2016 pos->config.boardconfig[b].sensors[s].enabled = 1;
2019 pos->config.boardconfig[b].sensors[s].offset =
static_cast<int16_t
>(10 * snsr.
pos.
calibration.
offset);
2027#if defined(SERVICE_PARSER_USE_MC)
2032 const char *t = fromstring.c_str();
2036 case eomc_enc_unknown:
2038 yWarning() <<
"ServiceParser::parse_encoder_port():" << t <<
"cannot be converted into a port because argument type is" << eomc_encoder2string(type, eobool_false);
2039 toport = eobrd_port_none;
2046 toport = eobrd_port_none;
2052 case eomc_enc_aksim2:
2055 case eomc_enc_spichainof2:
2056 case eomc_enc_absanalog:
2057 case eomc_enc_spichainof3:
2059 uint8_t toport1 = eobrd_port_unknown;
2060 bool result =
parse_port_conn(fromstring,
static_cast<eObrd_type_t
>(ethboard), toport1, formaterror);
2064 yWarning() <<
"ServiceParser::parse_encoder_port():" << t <<
"is not a legal string for an encoder connector port";
2079 uint8_t toport1 = eobrd_port_unknown;
2084 yWarning() <<
"ServiceParser::parse_encoder_port():" << t <<
"is not a legal string for an encoder connector port";
2098 uint8_t toport1 = eobrd_port_unknown;
2103 yWarning() <<
"ServiceParser::parse_encoder_port():" << t <<
"is not a legal string for an encoder connector port";
2117 uint8_t toport1 = eobrd_port_unknown;
2122 yWarning() <<
"ServiceParser::parse_encoder_port():" << t <<
"is not a legal string for an encoder connector port";
2136 int len = strlen(t);
2140 yWarning() <<
"ServiceParser::parse_encoder_port():" << t <<
"is not a legal string for a encoder port because it is too long with size =" << len;
2144 char prefix[16] = {0};
2145 sscanf(t,
"%3c", prefix);
2146 if(0 == strcmp(prefix,
"CAN"))
2148 toport = eobrd_port_nolocal;
2153 toport = eobrd_port_none;
2154 yWarning() <<
"ServiceParser::parse_encoder_port():" << t <<
"is not a legal string for a encoder port!";
2166 const char *t = fromstring.c_str();
2170 eObrd_connector_t conn = eobrd_conn_unknown;
2175 yWarning() <<
"ServiceParser::parse_port_conn():" << t <<
"is not a legal string for a eObrd_connector_t";
2181 eObrd_port_t port = eoboards_connector2port(conn,
board);
2182 if(eobrd_port_unknown == port)
2184 yWarning() <<
"ServiceParser::parse_port_conn():" << t <<
"does not convert to a legal port for connector" << eoboards_connector2string(conn, eobool_false) <<
"and parsed board";
2202 const char *t = fromstring.c_str();
2206 eObrd_portmais_t pmais = eobrd_portmais_unknown;
2207 bool result =
parse_mais(fromstring, pmais, formaterror);
2211 yWarning() <<
"ServiceParser::parse_port_mais():" << t <<
"is not a legal string for a port mais";
2227 const char *t = fromstring.c_str();
2231 eObrd_portpsc_t ppsc = eobrd_portpsc_unknown;
2232 bool result =
parse_psc(fromstring, ppsc, formaterror);
2236 yWarning() <<
"ServiceParser::parse_port_psc():" << t <<
"is not a legal string for a port psc";
2256 eObrd_portpos_t ppos = eobrd_portpos_unknown;
2261 yWarning() <<
"ServiceParser::parse_port_pos():" << fromstring <<
"is not a legal string for a port pos";
2319bool ServiceParser::parse_actuator_port(std::string
const &fromstring, eObrd_ethtype_t
const ethboard, eOmc_actuator_t
const type, eOmc_actuator_descriptor_t &todes,
bool &formaterror)
2321 const char *t = fromstring.c_str();
2327 case eomc_act_unknown:
2329 yWarning() <<
"ServiceParser::parse_actuator_port():" << t <<
"cannot be converted into a eObrd_location_t because argument type is" << eomc_actuator2string(type, eobool_false);
2330 todes.none.port = eobrd_port_none;
2338 todes.none.port = eobrd_port_none;
2345 uint8_t toport = eobrd_port_unknown;
2346 bool result =
parse_port_conn(fromstring,
static_cast<eObrd_type_t
>(ethboard), toport, formaterror);
2350 yWarning() <<
"ServiceParser::parse_actuator_port():" << t <<
"is not a legal string for a pwm connector port";
2356 todes.pwm.port = toport;
2366 eObrd_location_t loc;
2367 bool result =
convert(fromstring, loc, formaterror);
2371 yWarning() <<
"ServiceParser::parse_actuator_port():" << t <<
"is not a legal string for a eObrd_location_t";
2375 else if((eomc_act_mc4 == type) && (eobrd_place_extcan != loc.any.place))
2377 yWarning() <<
"ServiceParser::parse_actuator_port():" << t <<
"is not a legal string for a eomc_act_mc4 location because it is not a eobrd_place_extcan";
2381 else if(eomc_act_foc == type)
2383 if((eobrd_place_can != loc.any.place) && (eobrd_place_extcan != loc.any.place))
2385 yWarning() <<
"ServiceParser::parse_actuator_port():" << t <<
"is not a legal string for a eomc_act_foc location because it is not a eobrd_place_extcan or eobrd_place_can";
2396 if(eomc_act_foc == type)
2399 if(eobrd_place_can == loc.any.place)
2401 todes.foc.canloc.port = loc.can.port;
2402 todes.foc.canloc.addr = loc.can.addr;
2403 todes.foc.canloc.insideindex = eobrd_caninsideindex_first;
2409 todes.foc.canloc.port = loc.extcan.port;
2410 todes.foc.canloc.addr = loc.extcan.addr;
2411 todes.foc.canloc.insideindex = loc.extcan.index;
2412 if(eobrd_caninsideindex_first != todes.foc.canloc.insideindex)
2414 yWarning() <<
"ServiceParser::parse_actuator_port():" <<
"in eomc_act_foc the location has an index different from eobrd_caninsideindex_first. For now we force to it, but correct xml file.";
2415 todes.foc.canloc.insideindex = eobrd_caninsideindex_first;
2425 else if(eomc_act_mc4 == type)
2428 todes.mc4.canloc.port = loc.extcan.port;
2429 todes.mc4.canloc.addr = loc.extcan.addr;
2430 todes.mc4.canloc.insideindex = loc.extcan.index;
2432 if(eobrd_caninsideindex_none == todes.foc.canloc.insideindex)
2434 yWarning() <<
"ServiceParser::parse_actuator_port():" <<
"in eomc_act_mc4 the location has an eobrd_caninsideindex_none. Correct xml file.";
2446 case eomc_act_advfoc:
2449 eOlocation_t loc {eobus_none, 0, 0};
2450 bool result =
convert(fromstring, loc, formaterror);
2454 yWarning() <<
"ServiceParser::parse_actuator_port():" << t <<
"is not a legal string for a eOlocation_t required by eomc_act_advfoc";
2465 todes.gen.location = loc;
2476bool ServiceParser::convert(std::string
const &fromstring, eOmc_actuator_t &toactuatortype,
bool &formaterror)
2478 const char *t = fromstring.c_str();
2479 eObool_t usecompactstring = eobool_false;
2480 toactuatortype = eomc_string2actuator(t, usecompactstring);
2482 if(eomc_act_unknown == toactuatortype)
2484 usecompactstring = eobool_true;
2485 toactuatortype = eomc_string2actuator(t, usecompactstring);
2488 if(eomc_act_unknown == toactuatortype)
2490 yWarning() <<
"ServiceParser::convert():" << t <<
"is not a legal string for eOmc_actuator_t";
2499bool ServiceParser::convert(std::string
const &fromstring, eOmc_position_t &toposition,
bool &formaterror)
2501 const char *t = fromstring.c_str();
2502 eObool_t usecompactstring = eobool_false;
2503 toposition = eomc_string2position(t, usecompactstring);
2505 if(eomc_pos_unknown == toposition)
2507 usecompactstring = eobool_true;
2508 toposition = eomc_string2position(t, usecompactstring);
2511 if(eomc_pos_unknown == toposition)
2513 yWarning() <<
"ServiceParser::convert():" << t <<
"is not a legal string for eOmc_position_t";
2525 const char *tt = fromstring.c_str();
2526 char prefix[16] = {0};
2527 sscanf(tt,
"%5c", prefix);
2529 if(0 != strcmp(prefix,
"CONN:"))
2531 yWarning() <<
"ServiceParser::convert():" << tt <<
"is not a legal string for eObrd_connector_t because it must begin with CONN:";
2537 const char *t = &tt[5];
2539 eObool_t usecompactstring = eobool_false;
2540 toconnector = eoboards_string2connector(t, usecompactstring);
2542 if(eobrd_conn_unknown == toconnector)
2544 usecompactstring = eobool_true;
2545 toconnector = eoboards_string2connector(t, usecompactstring);
2548 if(eobrd_conn_unknown == toconnector)
2550 yWarning() <<
"ServiceParser::convert():" << t <<
"is not a legal string for eObrd_connector_t";
2562 const char *tt = fromstring.c_str();
2563 char prefix[16] = {0};
2564 sscanf(tt,
"%5c", prefix);
2566 if(0 != strcmp(prefix,
"MAIS:"))
2568 yWarning() <<
"ServiceParser::parse_mais():" << tt <<
"is not a legal string for eObrd_portmais_t because it must begin with MAIS:";
2574 const char *t = &tt[5];
2576 eObool_t usecompactstring = eobool_false;
2577 toportmais = eoboards_string2portmais(t, usecompactstring);
2579 if(eobrd_portmais_unknown == toportmais)
2581 usecompactstring = eobool_true;
2582 toportmais = eoboards_string2portmais(t, usecompactstring);
2585 if(eobrd_portmais_unknown == toportmais)
2587 yWarning() <<
"ServiceParser::parse_mais():" << t <<
"is not a legal string for eObrd_portmais_t";
2600 const char *tt = fromstring.c_str();
2601 char prefix[16] = {0};
2602 sscanf(tt,
"%4c", prefix);
2604 const char *t=
nullptr;
2606 if(0 != strcmp(prefix,
"PSC:"))
2611 eObool_t usecompactstring = eobool_false;
2612 toportpsc = eoboards_string2portpsc(t, usecompactstring);
2614 if(eobrd_portpsc_unknown == toportpsc)
2616 usecompactstring = eobool_true;
2617 toportpsc = eoboards_string2portpsc(t, usecompactstring);
2620 if(eobrd_portpsc_unknown == toportpsc)
2622 yWarning() <<
"ServiceParser::parse_psc(): " << t <<
" is not a legal string for eObrd_portpsc_t";
2634 const char *tt = fromstring.c_str();
2635 char prefix[16] = {0};
2636 sscanf(tt,
"%4c", prefix);
2638 const char *t=
nullptr;
2640 if(0 != strcmp(prefix,
"POS:"))
2645 eObool_t usecompactstring = eobool_false;
2646 toportpos = eoboards_string2portpos(t, usecompactstring);
2648 if(eobrd_portpos_unknown == toportpos)
2650 usecompactstring = eobool_true;
2651 toportpos = eoboards_string2portpos(t, usecompactstring);
2654 if(eobrd_portpos_unknown == toportpos)
2656 yWarning() <<
"ServiceParser::parse_POS_port(): " << t <<
" is not a legal string for eObrd_portpos_t";
2668 const char *tt = fromstring.c_str();
2669 char prefix[16] = {0};
2670 sscanf(tt,
"%5c", prefix);
2672 if(0 != strcmp(prefix,
"TYPE:"))
2674 yWarning() <<
"ServiceParser::convert():" << tt <<
"is not a legal string for eoas_pos_TYPE_t because it must begin with TYPE:";
2680 const char *t = &tt[5];
2682 eObool_t usecompactstring = eobool_false;
2683 type = eoas_string2postype(t, usecompactstring);
2685 if(eoas_pos_TYPE_unknown == type)
2687 usecompactstring = eobool_true;
2688 type = eoas_string2postype(t, usecompactstring);
2691 if(eoas_pos_TYPE_unknown == type)
2693 yWarning() <<
"ServiceParser::convert():" << t <<
"is not a legal string for eoas_pos_TYPE_t";
2703 const char *tt = fromstring.c_str();
2704 char prefix[16] = {0};
2705 sscanf(tt,
"%4c", prefix);
2707 if(0 != strcmp(prefix,
"ROT:"))
2709 yWarning() <<
"ServiceParser::convert():" << tt <<
"is not a legal string for eoas_pos_ROT_t because it must begin with ROT:";
2715 const char *t = &tt[4];
2717 eObool_t usecompactstring = eobool_false;
2718 rot = eoas_string2posrot(t, usecompactstring);
2720 yDebug() << t <<
" yyyyyyyyyyyyyyyyyyy " << rot;
2723 if(eoas_pos_ROT_unknown == rot)
2725 usecompactstring = eobool_true;
2726 rot = eoas_string2posrot(t, usecompactstring);
2727 yDebug() << t <<
" xxxxxxxxxxxxxxxxxxx " << rot;
2730 if(eoas_pos_ROT_unknown == rot)
2732 yWarning() <<
"ServiceParser::convert():" << t <<
"is not a legal string for eoas_pos_ROT_t";
2744 conn = r ?
static_cast<eObrd_connector_t
>(
tmp) : eobrd_conn_unknown;
2748bool ServiceParser::convert(std::string
const &fromstring, eOmc_encoder_t &toencodertype,
bool &formaterror)
2750 const char *t = fromstring.c_str();
2751 eObool_t usecompactstring = eobool_false;
2752 toencodertype = eomc_string2encoder(t, usecompactstring);
2754 if(eomc_enc_unknown == toencodertype)
2756 usecompactstring = eobool_true;
2757 toencodertype = eomc_string2encoder(t, usecompactstring);
2760 if(eomc_enc_unknown == toencodertype)
2762 yWarning() <<
"ServiceParser::convert():" << t <<
"is not a legal string for eOmc_encoder_t";
2771bool ServiceParser::check_motion(Searchable &config)
2773 bool formaterror =
false;
2785 const bool itisOKifwedontfindtheXMLgroup =
true;
2787 Bottle b_SERVICE(config.findGroup(
"SERVICE"));
2788 if(b_SERVICE.isNull())
2790 if(
false == itisOKifwedontfindtheXMLgroup)
2792 yError() <<
"ServiceParser::check_motion() cannot find SERVICE group";
2797 yWarning() <<
"ServiceParser::check_motion() cannot find SERVICE group, but we are in permissive mode, hence we ask the ETH board to config itself according to its IP address";
2805 if(
false == b_SERVICE.check(
"type"))
2807 if(
false == itisOKifwedontfindtheXMLgroup)
2809 yError() <<
"ServiceParser::check_motion() cannot find SERVICE.type";
2814 yWarning() <<
"ServiceParser::check_motion() cannot find SERVICE.type, but we are in permissive mode, hence we ask the ETH board to config itself according to its IP address";
2820 Bottle b_type(b_SERVICE.find(
"type").asString());
2823 yError() <<
"ServiceParser::check_motion() has found unknown SERVICE.type = " << b_type.toString();
2829 yWarning() <<
"ServiceParser::check_motion() detects SERVICE.type = eomn_serv_MC_generic.. hence we ask the ETH board to config itself according to its IP address";
2835 Bottle b_PROPERTIES = Bottle(b_SERVICE.findGroup(
"PROPERTIES"));
2836 if(b_PROPERTIES.isNull())
2838 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES";
2845 Bottle b_PROPERTIES_ETHBOARD = Bottle(b_PROPERTIES.findGroup(
"ETHBOARD"));
2846 bool has_PROPERTIES_ETHBOARD = !b_PROPERTIES_ETHBOARD.isNull();
2848 Bottle b_PROPERTIES_MAIS = Bottle(b_PROPERTIES.findGroup(
"MAIS"));
2849 bool has_PROPERTIES_MAIS = !b_PROPERTIES_MAIS.isNull();
2851 Bottle b_PROPERTIES_PSC = Bottle(b_PROPERTIES.findGroup(
"PSC"));
2852 bool has_PROPERTIES_PSC = !b_PROPERTIES_PSC.isNull();
2854 Bottle b_PROPERTIES_POS = Bottle(b_PROPERTIES.findGroup(
"POS"));
2855 bool has_PROPERTIES_POS = !b_PROPERTIES_POS.isNull();
2857 Bottle b_PROPERTIES_MC4 = Bottle(b_PROPERTIES.findGroup(
"MC4"));
2858 bool has_PROPERTIES_MC4 = !b_PROPERTIES_MC4.isNull();
2860 Bottle b_PROPERTIES_CANBOARDS = Bottle(b_PROPERTIES.findGroup(
"CANBOARDS"));
2861 bool has_PROPERTIES_CANBOARDS = !b_PROPERTIES_CANBOARDS.isNull();
2863 Bottle b_PROPERTIES_JOINTMAPPING = Bottle(b_PROPERTIES.findGroup(
"JOINTMAPPING"));
2864 bool has_PROPERTIES_JOINTMAPPING = !b_PROPERTIES_JOINTMAPPING.isNull();
2866 Bottle b_PROPERTIES_DIAGNOSTICS = Bottle(b_PROPERTIES.findGroup(
"DIAGNOSTICS"));
2867 bool has_PROPERTIES_DIAGNOSTICS = !b_PROPERTIES_DIAGNOSTICS.isNull();
2873 bool itisoksofar =
false;
2876 case eomn_serv_MC_foc:
2881 if(
false == has_PROPERTIES_ETHBOARD)
2883 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.ETHBOARD for type" << eomn_servicetype2string(
mc_service.
type);
2884 itisoksofar =
false;
2887 if(
false == has_PROPERTIES_CANBOARDS)
2889 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.CANBOARDS for type" << eomn_servicetype2string(
mc_service.
type);
2890 itisoksofar =
false;
2893 if(
false == has_PROPERTIES_JOINTMAPPING)
2895 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.JOINTMAPPING for type" << eomn_servicetype2string(
mc_service.
type);
2896 itisoksofar =
false;
2902 case eomn_serv_MC_mc4plus:
2908 if(
false == has_PROPERTIES_ETHBOARD)
2910 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.ETHBOARD for type" << eomn_servicetype2string(
mc_service.
type);
2911 itisoksofar =
false;
2914 if(
false == has_PROPERTIES_JOINTMAPPING)
2916 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.JOINTMAPPING for type" << eomn_servicetype2string(
mc_service.
type);
2917 itisoksofar =
false;
2923 case eomn_serv_MC_mc4plusmais:
2929 if(
false == has_PROPERTIES_ETHBOARD)
2931 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.ETHBOARD for type" << eomn_servicetype2string(
mc_service.
type);
2932 itisoksofar =
false;
2935 if(
false == has_PROPERTIES_CANBOARDS)
2937 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.CANBOARDS for type" << eomn_servicetype2string(
mc_service.
type);
2938 itisoksofar =
false;
2941 if(
false == has_PROPERTIES_MAIS)
2943 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.MAIS for type" << eomn_servicetype2string(
mc_service.
type);
2944 itisoksofar =
false;
2947 if(
false == has_PROPERTIES_JOINTMAPPING)
2949 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.JOINTMAPPING for type" << eomn_servicetype2string(
mc_service.
type);
2950 itisoksofar =
false;
2956 case eomn_serv_MC_mc4:
2962 if(
false == has_PROPERTIES_ETHBOARD)
2964 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.ETHBOARD for type" << eomn_servicetype2string(
mc_service.
type);
2965 itisoksofar =
false;
2968 if(
false == has_PROPERTIES_CANBOARDS)
2970 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.CANBOARDS for type" << eomn_servicetype2string(
mc_service.
type);
2971 itisoksofar =
false;
2974 if(
false == has_PROPERTIES_MC4)
2976 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.MC4 for type" << eomn_servicetype2string(
mc_service.
type);
2977 itisoksofar =
false;
2980 if(
false == has_PROPERTIES_MAIS)
2982 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.MAIS for type" << eomn_servicetype2string(
mc_service.
type);
2983 itisoksofar =
false;
2988 case eomn_serv_MC_mc2pluspsc:
2994 if(
false == has_PROPERTIES_ETHBOARD)
2996 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.ETHBOARD for type" << eomn_servicetype2string(
mc_service.
type);
2997 itisoksofar =
false;
3000 if(
false == has_PROPERTIES_CANBOARDS)
3002 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.CANBOARDS for type" << eomn_servicetype2string(
mc_service.
type);
3003 itisoksofar =
false;
3006 if(
false == has_PROPERTIES_PSC)
3008 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.PSC for type" << eomn_servicetype2string(
mc_service.
type);
3009 itisoksofar =
false;
3012 if(
false == has_PROPERTIES_JOINTMAPPING)
3014 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.JOINTMAPPING for type" << eomn_servicetype2string(
mc_service.
type);
3015 itisoksofar =
false;
3022 case eomn_serv_MC_mc4plusfaps:
3028 if(
false == has_PROPERTIES_ETHBOARD)
3030 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.ETHBOARD for type" << eomn_servicetype2string(
mc_service.
type);
3031 itisoksofar =
false;
3034 if(
false == has_PROPERTIES_CANBOARDS)
3036 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.CANBOARDS for type" << eomn_servicetype2string(
mc_service.
type);
3037 itisoksofar =
false;
3040 if(
false == has_PROPERTIES_POS)
3042 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.POS for type" << eomn_servicetype2string(
mc_service.
type);
3043 itisoksofar =
false;
3046 if(
false == has_PROPERTIES_JOINTMAPPING)
3048 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.JOINTMAPPING for type" << eomn_servicetype2string(
mc_service.
type);
3049 itisoksofar =
false;
3055 case eomn_serv_MC_advfoc:
3061 if(
false == has_PROPERTIES_ETHBOARD)
3063 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.ETHBOARD for type" << eomn_servicetype2string(
mc_service.
type);
3064 itisoksofar =
false;
3067 if(
false == has_PROPERTIES_CANBOARDS)
3069 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.CANBOARDS for type" << eomn_servicetype2string(
mc_service.
type);
3070 itisoksofar =
false;
3073 if(
false == has_PROPERTIES_JOINTMAPPING)
3075 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.JOINTMAPPING for type" << eomn_servicetype2string(
mc_service.
type);
3076 itisoksofar =
false;
3083 yError() <<
"ServiceParser::check_motion() has found an unknown type" << eomn_servicetype2string(
mc_service.
type);
3084 itisoksofar =
false;
3088 if(
false == itisoksofar)
3090 yError() <<
"ServiceParser::check_motion() detected missing groups in PROPERTIES";
3096 if(
true == has_PROPERTIES_ETHBOARD)
3100 Bottle b_PROPERTIES_ETHBOARD_type = b_PROPERTIES_ETHBOARD.findGroup(
"type");
3101 if(b_PROPERTIES_ETHBOARD_type.isNull())
3103 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.ETHBOARD.type";
3108 int numofethboards = b_PROPERTIES_ETHBOARD_type.size() - 1;
3109 if(1 != numofethboards)
3111 yError() <<
"ServiceParser::check_motion() PROPERTIES.ETHBOARD.type must have one board only";
3116 yError() <<
"ServiceParser::check_motion() has found unknown SERVICE.PROPERTIES.ETHBOARD.type = " << b_PROPERTIES_ETHBOARD_type.get(1).asString();
3123 if(
true == has_PROPERTIES_CANBOARDS)
3127 Bottle b_PROPERTIES_CANBOARDS_type = b_PROPERTIES_CANBOARDS.findGroup(
"type");
3128 if(b_PROPERTIES_CANBOARDS_type.isNull())
3130 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.CANBOARDS.type";
3133 Bottle b_PROPERTIES_CANBOARDS_PROTOCOL = Bottle(b_PROPERTIES_CANBOARDS.findGroup(
"PROTOCOL"));
3134 if(b_PROPERTIES_CANBOARDS_PROTOCOL.isNull())
3136 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.CANBOARDS.PROTOCOL";
3139 Bottle b_PROPERTIES_CANBOARDS_PROTOCOL_major = Bottle(b_PROPERTIES_CANBOARDS_PROTOCOL.findGroup(
"major"));
3140 if(b_PROPERTIES_CANBOARDS_PROTOCOL_major.isNull())
3142 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.CANBOARDS.PROTOCOL.major";
3145 Bottle b_PROPERTIES_CANBOARDS_PROTOCOL_minor = Bottle(b_PROPERTIES_CANBOARDS_PROTOCOL.findGroup(
"minor"));
3146 if(b_PROPERTIES_CANBOARDS_PROTOCOL_minor.isNull())
3148 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.CANBOARDS.PROTOCOL.minor";
3151 Bottle b_PROPERTIES_CANBOARDS_FIRMWARE = Bottle(b_PROPERTIES_CANBOARDS.findGroup(
"FIRMWARE"));
3152 if(b_PROPERTIES_CANBOARDS_FIRMWARE.isNull())
3154 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.CANBOARDS.FIRMWARE";
3157 Bottle b_PROPERTIES_CANBOARDS_FIRMWARE_major = Bottle(b_PROPERTIES_CANBOARDS_FIRMWARE.findGroup(
"major"));
3158 if(b_PROPERTIES_CANBOARDS_FIRMWARE_major.isNull())
3160 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.CANBOARDS.FIRMWARE.major";
3163 Bottle b_PROPERTIES_CANBOARDS_FIRMWARE_minor = Bottle(b_PROPERTIES_CANBOARDS_FIRMWARE.findGroup(
"minor"));
3164 if(b_PROPERTIES_CANBOARDS_FIRMWARE_minor.isNull())
3166 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.CANBOARDS.FIRMWARE.minor";
3169 Bottle b_PROPERTIES_CANBOARDS_FIRMWARE_build = Bottle(b_PROPERTIES_CANBOARDS_FIRMWARE.findGroup(
"build"));
3170 if(b_PROPERTIES_CANBOARDS_FIRMWARE_build.isNull())
3172 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.CANBOARDS.FIRMWARE.build";
3176 size_t tmp = b_PROPERTIES_CANBOARDS_type.size();
3177 size_t numboards = (0 ==
tmp) ? 0 : (
tmp - 1);
3180 if( (
tmp != b_PROPERTIES_CANBOARDS_PROTOCOL_major.size()) ||
3181 (
tmp != b_PROPERTIES_CANBOARDS_PROTOCOL_minor.size()) ||
3182 (
tmp != b_PROPERTIES_CANBOARDS_FIRMWARE_major.size()) ||
3183 (
tmp != b_PROPERTIES_CANBOARDS_FIRMWARE_minor.size()) ||
3184 (
tmp != b_PROPERTIES_CANBOARDS_FIRMWARE_build.size())
3187 yError() <<
"ServiceParser::check_motion() in PROPERTIES.CANBOARDS some params have inconsistent lengths";
3194 formaterror =
false;
3195 for(
size_t i=0; i<numboards; i++)
3199 convert(b_PROPERTIES_CANBOARDS_type.get(i+1).asString(), item.
type, formaterror);
3200 convert(b_PROPERTIES_CANBOARDS_PROTOCOL_major.get(i+1).asInt32(), item.
protocol.major, formaterror);
3201 convert(b_PROPERTIES_CANBOARDS_PROTOCOL_minor.get(i+1).asInt32(), item.
protocol.minor, formaterror);
3203 convert(b_PROPERTIES_CANBOARDS_FIRMWARE_major.get(i+1).asInt32(), item.
firmware.major, formaterror);
3204 convert(b_PROPERTIES_CANBOARDS_FIRMWARE_minor.get(i+1).asInt32(), item.
firmware.minor, formaterror);
3205 convert(b_PROPERTIES_CANBOARDS_FIRMWARE_build.get(i+1).asInt32(), item.
firmware.build, formaterror);
3213 if(
true == formaterror)
3215 yError() <<
"ServiceParser::check_motion() has detected an illegal format for some of the params of PROPERTIES.CANBOARDS some param has inconsistent length";
3222 if(
true == has_PROPERTIES_MAIS &&
mc_service.
type == eomn_serv_MC_mc4plusmais)
3226 Bottle b_PROPERTIES_MAIS_location = b_PROPERTIES_MAIS.findGroup(
"location");
3227 if(b_PROPERTIES_MAIS_location.isNull())
3229 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.MAIS.location";
3233 int tmp = b_PROPERTIES_MAIS_location.size();
3234 int numboards =
tmp - 1;
3239 yError() <<
"ServiceParser::check_motion() in PROPERTIES.MAIS.location must contain one item only and it has:" << numboards;
3243 formaterror =
false;
3244 eObrd_location_t loc;
3245 if(
false ==
convert(b_PROPERTIES_MAIS_location.get(1).asString(), loc, formaterror))
3247 yError() <<
"ServiceParser::check_motion() has detected an illegal format for SERVICE.PROPERTIES.MAIS.location";
3251 if(eobrd_place_can == loc.any.place)
3257 else if(eobrd_place_extcan == loc.any.place)
3265 yError() <<
"ServiceParser::check_motion() has detected an illegal format for SERVICE.PROPERTIES.MAIS.location. it must be either can or extcan";
3272 if(
true == has_PROPERTIES_MC4)
3278 Bottle b_PROPERTIES_MC4_SHIFTS = Bottle(b_PROPERTIES_MC4.findGroup(
"SHIFTS"));
3279 if(b_PROPERTIES_MC4_SHIFTS.isNull())
3281 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.MC4.SHIFTS";
3285 Bottle b_PROPERTIES_MC4_SHIFTS_velocity = Bottle(b_PROPERTIES_MC4_SHIFTS.findGroup(
"velocity"));
3286 if(b_PROPERTIES_MC4_SHIFTS_velocity.isNull())
3288 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.MC4.SHIFTS.velocity";
3291 Bottle b_PROPERTIES_MC4_SHIFTS_estimJointVelocity = Bottle(b_PROPERTIES_MC4_SHIFTS.findGroup(
"estimJointVelocity"));
3292 if(b_PROPERTIES_MC4_SHIFTS_estimJointVelocity.isNull())
3294 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.MC4.SHIFTS.estimJointVelocity";
3297 Bottle b_PROPERTIES_MC4_SHIFTS_estimJointAcceleration = Bottle(b_PROPERTIES_MC4_SHIFTS.findGroup(
"estimJointAcceleration"));
3298 if(b_PROPERTIES_MC4_SHIFTS_estimJointAcceleration.isNull())
3300 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.MC4.SHIFTS.estimJointAcceleration";
3303 Bottle b_PROPERTIES_MC4_SHIFTS_estimMotorVelocity = Bottle(b_PROPERTIES_MC4_SHIFTS.findGroup(
"estimMotorVelocity"));
3304 if(b_PROPERTIES_MC4_SHIFTS_estimMotorVelocity.isNull())
3306 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.MC4.SHIFTS.estimMotorVelocity";
3309 Bottle b_PROPERTIES_MC4_SHIFTS_estimMotorAcceleration = Bottle(b_PROPERTIES_MC4_SHIFTS.findGroup(
"estimMotorAcceleration"));
3310 if(b_PROPERTIES_MC4_SHIFTS_estimMotorAcceleration.isNull())
3312 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.MC4.SHIFTS.estimMotorAcceleration";
3316 Bottle b_PROPERTIES_MC4_BROADCASTPOLICY = Bottle(b_PROPERTIES_MC4.findGroup(
"BROADCASTPOLICY"));
3317 if(b_PROPERTIES_MC4_BROADCASTPOLICY.isNull())
3319 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.MC4.BROADCASTPOLICY";
3323 Bottle b_PROPERTIES_MC4_BROADCASTPOLICY_enable = Bottle(b_PROPERTIES_MC4_BROADCASTPOLICY.findGroup(
"enable"));
3324 if(b_PROPERTIES_MC4_BROADCASTPOLICY_enable.isNull())
3326 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.MC4.BROADCASTPOLICY.enable";
3347 if(
true ==
convert(b_PROPERTIES_MC4_SHIFTS_velocity.get(1).asInt32(), value, formaterror))
3351 if(
true ==
convert(b_PROPERTIES_MC4_SHIFTS_estimJointVelocity.get(1).asInt32(), value, formaterror))
3355 yError() <<
"ServiceParser::check_motion() manages values of PROPERTIES.MC4.SHIFTS.estim* only in range [0, 15]. read value =" << value;
3360 if(
true ==
convert(b_PROPERTIES_MC4_SHIFTS_estimJointAcceleration.get(1).asInt32(), value, formaterror))
3364 yError() <<
"ServiceParser::check_motion() manages values of PROPERTIES.MC4.SHIFTS.estim* only in range [0, 15]. read value =" << value;
3369 if(
true ==
convert(b_PROPERTIES_MC4_SHIFTS_estimMotorVelocity.get(1).asInt32(), value, formaterror))
3373 yError() <<
"ServiceParser::check_motion() manages values of PROPERTIES.MC4.SHIFTS.estim* only in range [0, 15]. read value =" << value;
3378 if(
true ==
convert(b_PROPERTIES_MC4_SHIFTS_estimMotorAcceleration.get(1).asInt32(), value, formaterror))
3382 yError() <<
"ServiceParser::check_motion() manages values of PROPERTIES.MC4.SHIFTS.estim* only in range [0, 15]. read value =" << value;
3390 int tmp = b_PROPERTIES_MC4_BROADCASTPOLICY_enable.size();
3391 int numofenables =
tmp - 1;
3394 for(
int i=0; i<numofenables; i++)
3397 eOmc_mc4broadcast_t item = eomc_mc4broadcast_unknown;
3398 const char *str = b_PROPERTIES_MC4_BROADCASTPOLICY_enable.get(i+1).asString().c_str();
3401 if(eomc_mc4broadcast_unknown == (item = eomc_string2mc4broadcast(str, eobool_true)))
3403 item = eomc_string2mc4broadcast(str, eobool_false);
3406 if((eomc_mc4broadcast_unknown != item) && (eomc_mc4broadcast_none != item))
3457 if(
true == has_PROPERTIES_PSC)
3461 Bottle b_PROPERTIES_PSC_location = b_PROPERTIES_PSC.findGroup(
"location");
3462 if(b_PROPERTIES_PSC_location.isNull())
3464 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.PSC.location";
3468 int tmp = b_PROPERTIES_PSC_location.size();
3469 int numboards =
tmp - 1;
3472 if(eOas_psc_boards_maxnumber != numboards)
3474 yError() <<
"ServiceParser::check_motion() in PROPERTIES.PSC.location must contain three items and it has:" << numboards;
3479 for(
int i=0; i<3; i++)
3481 eObrd_location_t loc;
3482 formaterror =
false;
3483 if(
false ==
convert(b_PROPERTIES_PSC_location.get(1+i).asString(), loc, formaterror))
3485 yError() <<
"ServiceParser::check_motion() has detected an illegal format for SERVICE.PROPERTIES.PSC.location";
3489 if(eobrd_place_can == loc.any.place)
3496 else if(eobrd_place_extcan == loc.any.place)
3504 yError() <<
"ServiceParser::check_motion() has detected an illegal format for SERVICE.PROPERTIES.PSC.location. it must be either can or extcan";
3512 if(
true == has_PROPERTIES_POS)
3516 Bottle b_PROPERTIES_POS_location = b_PROPERTIES_POS.findGroup(
"location");
3517 if(b_PROPERTIES_POS_location.isNull())
3519 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.POS.location";
3523 int tmp = b_PROPERTIES_POS_location.size();
3524 int numboards =
tmp - 1;
3527 constexpr uint8_t wantedboards = 1;
3528 if(wantedboards != numboards)
3530 yError() <<
"ServiceParser::check_motion() in PROPERTIES.POS.location must contain " << wantedboards <<
" items and it has:" << numboards;
3535 for(
int i=0; i<wantedboards; i++)
3537 eObrd_location_t loc;
3538 formaterror =
false;
3539 if(
false ==
convert(b_PROPERTIES_POS_location.get(1+i).asString(), loc, formaterror))
3541 yError() <<
"ServiceParser::check_motion() has detected an illegal format for SERVICE.PROPERTIES.POS.location";
3545 if(eobrd_place_can == loc.any.place)
3552 else if(eobrd_place_extcan == loc.any.place)
3554 yError() <<
"ServiceParser::check_motion() has detected an incorrect format for SERVICE.PROPERTIES.POS.location. it must be either can, not extcan";
3561 yError() <<
"ServiceParser::check_motion() has detected an illegal format for SERVICE.PROPERTIES.POS.location. it must be can";
3568 if(
true == has_PROPERTIES_JOINTMAPPING)
3573 Bottle b_PROPERTIES_JOINTMAPPING_ACTUATOR = Bottle(b_PROPERTIES_JOINTMAPPING.findGroup(
"ACTUATOR"));
3574 if(b_PROPERTIES_JOINTMAPPING_ACTUATOR.isNull())
3576 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.JOINTMAPPING.ACTUATOR";
3580 Bottle b_PROPERTIES_JOINTMAPPING_ENCODER1 = Bottle(b_PROPERTIES_JOINTMAPPING.findGroup(
"ENCODER1"));
3581 if(b_PROPERTIES_JOINTMAPPING_ENCODER1.isNull())
3583 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.JOINTMAPPING.ENCODER1";
3587 Bottle b_PROPERTIES_JOINTMAPPING_ENCODER2 = Bottle(b_PROPERTIES_JOINTMAPPING.findGroup(
"ENCODER2"));
3588 if(b_PROPERTIES_JOINTMAPPING_ENCODER2.isNull())
3590 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.JOINTMAPPING.ENCODER2";
3596 Bottle b_PROPERTIES_JOINTMAPPING_ACTUATOR_type = Bottle(b_PROPERTIES_JOINTMAPPING_ACTUATOR.findGroup(
"type"));
3597 if(b_PROPERTIES_JOINTMAPPING_ACTUATOR_type.isNull())
3599 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.JOINTMAPPING.ACTUATOR.type";
3603 Bottle b_PROPERTIES_JOINTMAPPING_ACTUATOR_onboard = Bottle(b_PROPERTIES_JOINTMAPPING_ACTUATOR.findGroup(
"onboard"));
3606 Bottle b_PROPERTIES_JOINTMAPPING_ACTUATOR_port = Bottle(b_PROPERTIES_JOINTMAPPING_ACTUATOR.findGroup(
"port"));
3607 if(b_PROPERTIES_JOINTMAPPING_ACTUATOR_port.isNull())
3609 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.JOINTMAPPING.ACTUATOR.port";
3613 Bottle b_PROPERTIES_JOINTMAPPING_ENCODER1_type = Bottle(b_PROPERTIES_JOINTMAPPING_ENCODER1.findGroup(
"type"));
3614 if(b_PROPERTIES_JOINTMAPPING_ENCODER1_type.isNull())
3616 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.JOINTMAPPING.ENCODER1.type";
3619 Bottle b_PROPERTIES_JOINTMAPPING_ENCODER1_port = Bottle(b_PROPERTIES_JOINTMAPPING_ENCODER1.findGroup(
"port"));
3620 if(b_PROPERTIES_JOINTMAPPING_ENCODER1_port.isNull())
3622 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.JOINTMAPPING.ENCODER1.port";
3625 Bottle b_PROPERTIES_JOINTMAPPING_ENCODER1_position = Bottle(b_PROPERTIES_JOINTMAPPING_ENCODER1.findGroup(
"position"));
3626 if(b_PROPERTIES_JOINTMAPPING_ENCODER1_position.isNull())
3628 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.JOINTMAPPING.ENCODER1.position";
3631 Bottle b_PROPERTIES_JOINTMAPPING_ENCODER1_resolution = Bottle(b_PROPERTIES_JOINTMAPPING_ENCODER1.findGroup(
"resolution"));
3632 if(b_PROPERTIES_JOINTMAPPING_ENCODER1_resolution.isNull())
3634 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.JOINTMAPPING.ENCODER1.resolution";
3637 Bottle b_PROPERTIES_JOINTMAPPING_ENCODER1_tolerance = Bottle(b_PROPERTIES_JOINTMAPPING_ENCODER1.findGroup(
"tolerance"));
3638 if(b_PROPERTIES_JOINTMAPPING_ENCODER1_tolerance.isNull())
3640 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.JOINTMAPPING.ENCODER1.tolerance";
3646 Bottle b_PROPERTIES_JOINTMAPPING_ENCODER2_type = Bottle(b_PROPERTIES_JOINTMAPPING_ENCODER2.findGroup(
"type"));
3647 if(b_PROPERTIES_JOINTMAPPING_ENCODER2_type.isNull())
3649 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.JOINTMAPPING.ENCODER2.type";
3652 Bottle b_PROPERTIES_JOINTMAPPING_ENCODER2_port = Bottle(b_PROPERTIES_JOINTMAPPING_ENCODER2.findGroup(
"port"));
3653 if(b_PROPERTIES_JOINTMAPPING_ENCODER2_port.isNull())
3655 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.JOINTMAPPING.ENCODER2.port";
3658 Bottle b_PROPERTIES_JOINTMAPPING_ENCODER2_position = Bottle(b_PROPERTIES_JOINTMAPPING_ENCODER2.findGroup(
"position"));
3659 if(b_PROPERTIES_JOINTMAPPING_ENCODER2_position.isNull())
3661 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.JOINTMAPPING.ENCODER2.position";
3664 Bottle b_PROPERTIES_JOINTMAPPING_ENCODER2_resolution = Bottle(b_PROPERTIES_JOINTMAPPING_ENCODER2.findGroup(
"resolution"));
3665 if(b_PROPERTIES_JOINTMAPPING_ENCODER2_resolution.isNull())
3667 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.JOINTMAPPING.ENCODER2.resolution";
3670 Bottle b_PROPERTIES_JOINTMAPPING_ENCODER2_tolerance = Bottle(b_PROPERTIES_JOINTMAPPING_ENCODER2.findGroup(
"tolerance"));
3671 if(b_PROPERTIES_JOINTMAPPING_ENCODER2_tolerance.isNull())
3673 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.JOINTMAPPING.ENCODER2.tolerance";
3678 size_t tmp = b_PROPERTIES_JOINTMAPPING_ACTUATOR_type.size();
3679 if( (
tmp != b_PROPERTIES_JOINTMAPPING_ACTUATOR_port.size()) ||
3680 (
tmp != b_PROPERTIES_JOINTMAPPING_ENCODER1_type.size()) ||
3681 (
tmp != b_PROPERTIES_JOINTMAPPING_ENCODER1_port.size()) ||
3682 (
tmp != b_PROPERTIES_JOINTMAPPING_ENCODER1_position.size()) ||
3683 (
tmp != b_PROPERTIES_JOINTMAPPING_ENCODER1_resolution.size())||
3684 (
tmp != b_PROPERTIES_JOINTMAPPING_ENCODER1_tolerance.size()) ||
3685 (
tmp != b_PROPERTIES_JOINTMAPPING_ENCODER2_type.size()) ||
3686 (
tmp != b_PROPERTIES_JOINTMAPPING_ENCODER2_port.size()) ||
3687 (
tmp != b_PROPERTIES_JOINTMAPPING_ENCODER2_position.size()) ||
3688 (
tmp != b_PROPERTIES_JOINTMAPPING_ENCODER2_resolution.size()) ||
3689 (
tmp != b_PROPERTIES_JOINTMAPPING_ENCODER2_tolerance.size())
3692 yError() <<
"ServiceParser::check_motion() detected wrong number of columns somewhere inside PROPERTIES.JOINTMAPPING";
3716 bool formaterror =
false;
3718 eOmc_encoder_t enctype = eomc_enc_unknown;
3719 uint8_t encport = eobrd_port_unknown;
3720 eOmc_position_t encposition = eomc_pos_unknown;
3723 act.
type = eomc_act_unknown;
3724 act.
desc.pwm.port = eobrd_port_unknown;
3726 if(
false ==
convert(b_PROPERTIES_JOINTMAPPING_ACTUATOR_type.get(i+1).asString(), act.
type, formaterror))
3728 yError() <<
"ServiceParser::check_motion() PROPERTIES.JOINTMAPPING.actuator.type not valid for item" << i;
3734 yError() <<
"ServiceParser::check_motion() PROPERTIES.JOINTMAPPING.actuator.type should be mc4 with mc service of type eomn_serv_MC_mc4. Error in item" << i;
3740 yError() <<
"ServiceParser::check_motion() PROPERTIES.JOINTMAPPING.actuator.port not valid for item" << i;
3746 eObrd_canlocation_t item;
3747 item.port = act.
desc.mc4.canloc.port;
3748 item.addr = act.
desc.mc4.canloc.addr;
3749 item.insideindex = act.
desc.mc4.canloc.insideindex;
3756 if(b_PROPERTIES_JOINTMAPPING_ACTUATOR_onboard.isNull())
3758 yError() <<
"ServiceParser::check_motion() cannot find PROPERTIES.JOINTMAPPING.ACTUATOR.onboard for eomn_serv_MC_advfoc";
3762 if(act.
type != eomc_act_advfoc)
3764 yError() <<
"ServiceParser::check_motion() detectde that PROPERTIES.JOINTMAPPING.ACTUATOR.type for eomn_serv_MC_advfoc id not advfoc";
3768 act.
advdescr.type = eomc_act_advfoc;
3770 eObrd_cantype_t bb {};
3771 convert(b_PROPERTIES_JOINTMAPPING_ACTUATOR_onboard.get(i+1).asString(), bb, formaterror);
3778 enc1.
desc.type = eomc_enc_unknown;
3779 enc1.
desc.port = eobrd_port_unknown;
3780 enc1.
desc.pos = eomc_pos_unknown;
3782 enctype = eomc_enc_unknown;
3783 if(
false ==
convert(b_PROPERTIES_JOINTMAPPING_ENCODER1_type.get(i+1).asString(), enctype, formaterror))
3785 yError() <<
"ServiceParser::check_motion() PROPERTIES.JOINTMAPPING.encoder1.type not valid for item" << i;
3788 enc1.
desc.type = enctype;
3796 encport = eobrd_port_unknown;
3799 yError() <<
"ServiceParser::check_motion() PROPERTIES.JOINTMAPPING.encoder1.port not valid for item" << i;
3802 enc1.
desc.port = encport;
3804 encposition = eomc_pos_unknown;
3805 if(
false ==
convert(b_PROPERTIES_JOINTMAPPING_ENCODER1_position.get(i+1).asString(), encposition, formaterror))
3807 yError() <<
"ServiceParser::check_motion() PROPERTIES.JOINTMAPPING.encoder1.position not valid for item" << i;
3810 enc1.
desc.pos = encposition;
3812 enc1.
resolution = b_PROPERTIES_JOINTMAPPING_ENCODER1_resolution.get(i+1).asInt32();
3814 enc1.
tolerance = b_PROPERTIES_JOINTMAPPING_ENCODER1_tolerance.get(i+1).asFloat64();
3820 enc2.
desc.type = eomc_enc_unknown;
3821 enc2.
desc.port = eobrd_port_unknown;
3822 enc2.
desc.pos = eomc_pos_unknown;
3824 enctype = eomc_enc_unknown;
3825 if(
false ==
convert(b_PROPERTIES_JOINTMAPPING_ENCODER2_type.get(i+1).asString(), enctype, formaterror))
3827 yError() <<
"ServiceParser::check_motion() PROPERTIES.JOINTMAPPING.encoder2.type not valid for item" << i;
3831 enc2.
desc.type = enctype;
3834 encport = eobrd_port_unknown;
3837 yError() <<
"ServiceParser::check_motion() PROPERTIES.JOINTMAPPING.encoder2.port not valid for item" << i;
3840 enc2.
desc.port = encport;
3842 encposition = eomc_pos_unknown;
3843 if(
false ==
convert(b_PROPERTIES_JOINTMAPPING_ENCODER2_position.get(i+1).asString(), encposition, formaterror))
3845 yError() <<
"ServiceParser::check_motion() PROPERTIES.JOINTMAPPING.encoder2.position not valid for item" << i;
3849 enc2.
desc.pos = encposition;
3851 enc2.
resolution = b_PROPERTIES_JOINTMAPPING_ENCODER2_resolution.get(i+1).asInt32();
3852 enc2.
tolerance = b_PROPERTIES_JOINTMAPPING_ENCODER2_tolerance.get(i+1).asFloat64();
3870 if(
true == has_PROPERTIES_DIAGNOSTICS)
3872 Bottle b_PROPERTIES_DIAGNOSTICS_mode = b_PROPERTIES_DIAGNOSTICS.findGroup(
"mode");
3873 Bottle b_PROPERTIES_DIAGNOSTICS_par16 = b_PROPERTIES_DIAGNOSTICS.findGroup(
"par16");
3874 if(!b_PROPERTIES_DIAGNOSTICS_mode.isNull() && !b_PROPERTIES_DIAGNOSTICS_par16.isNull())
3877 int n_type = b_PROPERTIES_DIAGNOSTICS_mode.size() - 1;
3878 int n_par16 = b_PROPERTIES_DIAGNOSTICS_par16.size() - 1;
3879 if((1 == n_type) && (1 == n_par16))
3881 eOmn_serv_diagn_mode_t dm = eomn_serv_diagn_mode_NONE;
3883 if(
false ==
convert(b_PROPERTIES_DIAGNOSTICS_mode.get(1).asString(), dm, formaterror))
3885 yWarning() <<
"ServiceParser::check_motion() has detected an illegal format for SERVICE.PROPERTIES.DIAGNOSTICS.mode. Using {eOmn_serv_diagn_mode_NONE, 0}";
3887 else if(!b_PROPERTIES_DIAGNOSTICS_par16.get(1).isInt32())
3889 yWarning() <<
"ServiceParser::check_motion() has detected an illegal format for SERVICE.PROPERTIES.DIAGNOSTICS.par16. Using {eOmn_serv_diagn_mode_NONE, 0}";
3893 par16 = b_PROPERTIES_DIAGNOSTICS_par16.get(1).asInt32();
3899 yWarning() <<
"ServiceParser::check_motion() has detected some DIAGNOSTICS config for this MC service: mode = " << eomn_servicediagnmode2string(dm) <<
", par16 = " <<
mc_service.
diagconfig.par16;
4039 if(
false == check_motion(config))
4041 yError() <<
"ServiceParser::parseService() gets same errors parsing SERVICE MC group";
4055 case eomn_serv_MC_foc:
4057 eOmn_serv_config_data_mc_foc_t *data_mc = &(mcconfig.
ethservice.configuration.data.mc.foc_based);
4070 EOarray *arrayofjomos = eo_array_New(4,
sizeof(eOmc_jomo_descriptor_t), &data_mc->arrayofjomodescriptors);
4073 for(
int i=0; i<numofjomos; i++)
4075 eOmc_jomo_descriptor_t jomodes = {};
4080 jomodes.actuator.foc.canloc.insideindex = eobrd_caninsideindex_first;
4092 eo_array_PushBack(arrayofjomos, &jomodes);
4107 case eomn_serv_MC_mc4:
4109 eOmn_serv_config_data_mc_mc4_t *data_mc = &(mcconfig.
ethservice.configuration.data.mc.mc4_based);
4112 bool mc4boardFound =
false;
4113 bool maisboardFound =
false;
4120 mc4boardFound =
true;
4126 maisboardFound =
true;
4130 if((
false == maisboardFound) || (
false == mc4boardFound))
4132 yError() <<
"ServiceParser::parseService() gets same errors parsing SERVICE MC group for mc4: cannot find description of mc4 or mais board";
4145 for(
int i=0; i<12; i++)
4155 data_mc->broadcastflags = 0;
4159 if((eomc_mc4broadcast_none != item) && (eomc_mc4broadcast_unknown != item))
4161 eo_common_hlfword_bitset(&data_mc->broadcastflags, item);
4170 case eomn_serv_MC_mc4plus:
4172 eOmn_serv_config_data_mc_mc4plus_t *data_mc = &(mcconfig.
ethservice.configuration.data.mc.mc4plus_based);
4175 EOarray *arrayofjomos = eo_array_New(4,
sizeof(eOmc_jomo_descriptor_t), &data_mc->arrayofjomodescriptors);
4178 for(
int i=0; i<numofjomos; i++)
4180 eOmc_jomo_descriptor_t jomodes = {};
4195 eo_array_PushBack(arrayofjomos, &jomodes);
4209 case eomn_serv_MC_mc4plusmais:
4211 eOmn_serv_config_data_mc_mc4plusmais_t *data_mc = &(mcconfig.
ethservice.configuration.data.mc.mc4plusmais_based);
4214 eOmn_serv_config_data_as_mais_t *mais = &data_mc->mais;
4227 EOarray *arrayofjomos = eo_array_New(4,
sizeof(eOmc_jomo_descriptor_t), &data_mc->arrayofjomodescriptors);
4230 for(
int i=0; i<numofjomos; i++)
4232 eOmc_jomo_descriptor_t jomodes = {};
4247 eo_array_PushBack(arrayofjomos, &jomodes);
4262 case eomn_serv_MC_mc2pluspsc:
4264 eOmn_serv_config_data_mc_mc2pluspsc_t *data_mc = &(mcconfig.
ethservice.configuration.data.mc.mc2pluspsc);
4267 eOmn_serv_config_data_as_psc_t *psc = &data_mc->psc;
4285 EOarray *arrayofjomos = eo_array_New(4,
sizeof(eOmc_jomo_descriptor_t), &data_mc->arrayofjomodescriptors);
4288 for(
int i=0; i<numofjomos; i++)
4290 eOmc_jomo_descriptor_t jomodes = {};
4305 eo_array_PushBack(arrayofjomos, &jomodes);
4315 case eomn_serv_MC_mc4plusfaps:
4317 eOmn_serv_config_data_mc_mc4plusfaps_t *data_mc = &(mcconfig.
ethservice.configuration.data.mc.mc4plusfaps);
4320 eOmn_serv_config_data_as_pos_t *pos = &data_mc->pos;
4323 for(
size_t b=0; b<eOas_pos_boards_maxnumber; b++)
4335 for(
size_t s=0; s<eOas_pos_sensorsinboard_maxnumber; s++)
4337 pos->config.boardconfig[b].sensors[s].connector = s;
4338 pos->config.boardconfig[b].sensors[s].type = eoas_pos_TYPE_decideg;
4339 pos->config.boardconfig[b].sensors[s].port =
static_cast<eObrd_portpos_t
>(s);
4340 pos->config.boardconfig[b].sensors[s].enabled = 1;
4341 pos->config.boardconfig[b].sensors[s].invertdirection = 0;
4342 pos->config.boardconfig[b].sensors[s].rotation = eoas_pos_ROT_zero;
4343 pos->config.boardconfig[b].sensors[s].offset = 0;
4363 EOarray *arrayofjomos = eo_array_New(4,
sizeof(eOmc_jomo_descriptor_t), &data_mc->arrayofjomodescriptors);
4366 for(
size_t i=0; i<numofjomos; i++)
4368 eOmc_jomo_descriptor_t jomodes = {};
4383 eo_array_PushBack(arrayofjomos, &jomodes);
4391 case eomn_serv_MC_advfoc:
4393 eOmn_serv_config_data_mc_advfoc_t *data_mc = &(mcconfig.
ethservice.configuration.data.mc.advfoc);
4398 EOarray *arrayofjomos = eo_array_New(4,
sizeof(eOmc_adv_jomo_descriptor_t), &data_mc->arrayof4advjomodescriptors);
4401 for(
size_t i=0; i<numofjomos; i++)
4403 eOmc_adv_jomo_descriptor_t jomodes = {};
4408 yError() <<
"ServiceParser::parseService() unknown actuator value for eomn_serv_MC_advfoc mode. we need eomc_act_advfoc";
4417 jomodes.actuator.type = eomc_act_advfoc;
4420 eObrd_firmwareversion_t fw {};
4421 eObrd_protocolversion_t pr {};
4437 yError() <<
"ServiceParser::parseService() could not find the actuator board inside the mc_service.properties.canboards[] vector";
4441 jomodes.actuator.board.firmware = fw;
4442 jomodes.actuator.board.protocol = pr;
4454 eo_array_PushBack(arrayofjomos, &jomodes);
4462 case eomn_serv_MC_generic:
4464 yWarning() <<
"ServiceParser::parseService() eomn_serv_MC_generic detected. set type = eomn_serv_MC_generic to let the remote board configure itself according to its IP address";
4465 mcconfig.
ethservice.configuration.type = eomn_serv_MC_generic;
4471 yError() <<
"ServiceParser::parseService() unknown value in eOmn_serv_type_t field";
5002static eOmn_serv_configuration_t s_serv_config_mc_v3_0B1 = {};
5006 eOmc_arrayof_4jomodescriptors_t *ja = &s_serv_config_mc_v3_0B1.data.mc.mc4plus_based.arrayofjomodescriptors;
5007 eOmc_4jomo_coupling_t *jc = &s_serv_config_mc_v3_0B1.data.mc.mc4plus_based.jomocoupling;
5010 eOq17_14_t m1[][4] =
5012 { EO_COMMON_FLOAT_TO_Q17_14(1.0f), EO_COMMON_FLOAT_TO_Q17_14(0.0f), EO_COMMON_FLOAT_TO_Q17_14(0.0f), EO_COMMON_FLOAT_TO_Q17_14(0.0f) },
5013 { EO_COMMON_FLOAT_TO_Q17_14(0.0f), EO_COMMON_FLOAT_TO_Q17_14(1.0f), EO_COMMON_FLOAT_TO_Q17_14(0.0f), EO_COMMON_FLOAT_TO_Q17_14(0.0f) },
5014 { EO_COMMON_FLOAT_TO_Q17_14(0.0f), EO_COMMON_FLOAT_TO_Q17_14(0.0f), EO_COMMON_FLOAT_TO_Q17_14(1.0f), EO_COMMON_FLOAT_TO_Q17_14(-1.0f) },
5015 { EO_COMMON_FLOAT_TO_Q17_14(0.0f), EO_COMMON_FLOAT_TO_Q17_14(0.0f), EO_COMMON_FLOAT_TO_Q17_14(1.0f), EO_COMMON_FLOAT_TO_Q17_14(1.0f) }
5020 { EO_COMMON_FLOAT_TO_Q17_14(1.0f), EO_COMMON_FLOAT_TO_Q17_14(0.0f), EO_COMMON_FLOAT_TO_Q17_14(0.0f), EO_COMMON_FLOAT_TO_Q17_14(0.0f) },
5021 { EO_COMMON_FLOAT_TO_Q17_14(0.0f), EO_COMMON_FLOAT_TO_Q17_14(1.0f), EO_COMMON_FLOAT_TO_Q17_14(0.0f), EO_COMMON_FLOAT_TO_Q17_14(0.0f) },
5022 { EO_COMMON_FLOAT_TO_Q17_14(0.0f), EO_COMMON_FLOAT_TO_Q17_14(0.0f), EO_COMMON_FLOAT_TO_Q17_14(1.0f), EO_COMMON_FLOAT_TO_Q17_14(0.0f) },
5023 { EO_COMMON_FLOAT_TO_Q17_14(0.0f), EO_COMMON_FLOAT_TO_Q17_14(0.0f), EO_COMMON_FLOAT_TO_Q17_14(0.0f), EO_COMMON_FLOAT_TO_Q17_14(1.0f) }
5033 ja->head.capacity = 4;
5034 ja->head.itemsize =
sizeof(eOmc_jomo_descriptor_t);
5036 ja->head.internalmem = 0;
5038 ja->data[0].actuator.pwm.port = 0 ;
5039 ja->data[0].encoder1.type = eomc_enc_aea;
5040 ja->data[0].encoder1.port = 1;
5041 ja->data[0].encoder1.pos = eomc_pos_atjoint;
5043 ja->data[0].encoder2.type = eomc_enc_qenc;
5044 ja->data[0].encoder2.port = 0;
5045 ja->data[0].encoder2.pos = eomc_pos_atmotor;
5047 ja->data[1].actuator.pwm.port = 1;
5048 ja->data[1].encoder1.type = eomc_enc_aea;
5049 ja->data[1].encoder1.port = 0;
5050 ja->data[1].encoder1.pos = eomc_pos_atjoint;
5051 ja->data[1].encoder2.type = eomc_enc_qenc;
5052 ja->data[1].encoder2.port = 1;
5053 ja->data[1].encoder2.pos = eomc_pos_atmotor;
5055 ja->data[2].actuator.pwm.port = 3;
5056 ja->data[2].encoder1.type = eomc_enc_qenc;
5057 ja->data[2].encoder1.port = 3;
5058 ja->data[2].encoder1.pos = eomc_pos_atjoint;
5059 ja->data[2].encoder2.type = eomc_enc_qenc,
5060 ja->data[2].encoder2.port = 3,
5061 ja->data[2].encoder2.pos = eomc_pos_atmotor;
5063 ja->data[3].actuator.pwm.port = 2;
5065 ja->data[3].encoder1.type = eomc_enc_qenc;
5066 ja->data[3].encoder1.port = 2;
5067 ja->data[3].encoder1.pos = eomc_pos_atjoint;
5070 ja->data[3].encoder2.type = eomc_enc_qenc;
5071 ja->data[3].encoder2.port = 2;
5072 ja->data[3].encoder2.pos = eomc_pos_atmotor;
5075 jc->joint2set[0] = eomc_jointSetNum_zero;
5076 jc->joint2set[1] = eomc_jointSetNum_one;
5077 jc->joint2set[2] = eomc_jointSetNum_two;
5078 jc->joint2set[3] = eomc_jointSetNum_two;
5101 memcpy(&jc->joint2motor, &m1,
sizeof(m1));
5102 memcpy(&jc->encoder2joint, &m2,
sizeof(m2));
5104 yError() <<
"print first m ";
5105 for(
int r=0; r<4; r++)
5107 for(
int c=0; c<4; c++)
5109 yError() <<
"r=" <<r <<
"c=" << c <<
"val=" << m1[r][c];
5113 yError() <<
"print second m ";
5114 for(
int r=0; r<4; r++)
5116 for(
int c=0; c<4; c++)
5118 yError() <<
"r=" <<r <<
"c=" << c <<
"val=" << m2[r][c];
5126 yError() <<
" id scheda sbagliato " << mcconfig.
id;
5131 memcpy(&mcconfig.
ethservice, &s_serv_config_mc_v3_0B1,
sizeof(eOmn_serv_configuration_t));
bool parseService2(yarp::os::Searchable &config, servConfigMC_t &mcconfig)
bool parse_encoder_port(std::string const &fromstring, eObrd_ethtype_t const ethboard, eOmc_encoder_t type, uint8_t &toport, bool &formaterror)
bool parse_port_conn(std::string const &fromstring, eObrd_type_t const board, uint8_t &toport, bool &formaterror)
servASstrainSettings_t as_strain_settings
bool parse_actuator_port(std::string const &fromstring, eObrd_ethtype_t const ethboard, eOmc_actuator_t const type, eOmc_actuator_descriptor_t &todes, bool &formaterror)
bool parse_POS_CALIB_rotation(std::string const &fromstring, eoas_pos_ROT_t &rot, bool &formaterror)
bool convert(std::string const &fromstring, eOmc_actuator_t &toactuatortype, bool &formaterror)
servMC_encoder_t * getEncoderAtMotor(int index)
bool parse_mais(std::string const &fromstring, eObrd_portmais_t &pmais, bool &formaterror)
servMCcollector_t mc_service
eOmn_serv_config_data_sk_skin_t tmp
servSKcollector_t sk_service
bool parse_port_psc(std::string const &fromstring, uint8_t &toport, bool &formaterror)
bool parse_POS_CALIB_type(std::string const &fromstring, eoas_pos_TYPE_t &type, bool &formaterror)
bool parseService(yarp::os::Searchable &config, servConfigMais_t &maisconfig)
bool parse_port_pos(std::string const &fromstring, uint8_t &toport, bool &formaterror)
bool parse_POS_connector(std::string const &fromstring, const eObrd_type_t brd, eObrd_connector_t &conn, bool &formaterror)
bool parse_POS_port(std::string const &fromstring, eObrd_portpos_t &ppos, bool &formaterror)
bool parse_connector(const std::string &fromstring, eObrd_connector_t &toconnector, bool &formaterror)
servMC_encoder_t * getEncoderAtJoint(int index)
bool parse_psc(std::string const &fromstring, eObrd_portpsc_t &ppsc, bool &formaterror)
servAScollector_t as_service
bool parse_port_mais(std::string const &fromstring, uint8_t &toport, bool &formaterror)
Copyright (C) 2008 RobotCub Consortium.
servASsettings_t settings
servASproperties_t properties
std::vector< servAnalogSensor_t > sensors
std::vector< servCanBoard_t > canboards
std::vector< servAnalogSensor_t > enabledsensors
servAnalogPOScalibration_t calibration
eObrd_connector_t connector
servAnalogPOSspecific_t pos
eObrd_location_t location
eObrd_protocolversion_t protocol
eObrd_firmwareversion_t firmware
int temperatureAcquisitionrate
eOmn_serv_parameter_t ethservice
eOmn_serv_parameter_t ethservice
std::vector< eOas_inertial3_descriptor_t > inertials
std::vector< std::string > id
std::vector< std::string > sensorName
eOmn_serv_parameter_t ethservice
eOmn_serv_parameter_t ethservice
std::vector< std::string > idList
eOmn_serv_parameter_t ethservice
std::vector< std::string > sensorName
eOmn_serv_parameter_t ethservice
eOmn_serv_parameter_t ethservice
eOmc_adv_actuator_descriptor_t advdescr
eOmc_actuator_descriptor_t desc
eOmc_encoder_descriptor_t desc
servMCproperties_t properties
eOmn_serv_diagn_cfg_t diagconfig
std::vector< eOmc_mc4broadcast_t > mc4broadcasts
eOmc_mc4shifts_t mc4shifts
std::vector< eObrd_canlocation_t > poslocations
eObrd_canlocation_t maislocation
std::vector< servMC_actuator_t > actuators
std::vector< servMC_encoder_t > encoder2s
eObrd_ethtype_t ethboardtype
std::vector< eObrd_canlocation_t > mc4joints
std::vector< servMC_encoder_t > encoder1s
std::vector< eObrd_canlocation_t > psclocations
std::vector< servCanBoard_t > canboards
servSKproperties_t properties