2 #include <QApplication>
3 #include <QCommandLineParser>
4 #include <QCommandLineOption>
11 #undef UPDATER_RELEASE
17 #define MY_ADDR "10.0.1.104"
23 using namespace yarp::os;
56 void printCanDevices(QList<sBoard> canBoards, QString onIPboard,
bool slimprint);
65 int verifyOnSecondLevel(
FirmwareUpdaterCore *core,QString device,QString
id,
const QString &targetIPaddr,
const QString &targetCANline,
const QString &targetCANaddr,
const QString &targetFWvers);
68 int verifyCanDevices(QList<sBoard> canBoards,
const QString &targetCANline,
const QString &targetCANaddr,
const QString &targetFWvers);
74 int queryCanDevices(QList<sBoard> canBoards,
const QString onIPboard,
const QString &targetCANline,
const QString &targetCANaddr);
88 QApplication a(
argc, argv);
90 QApplication::setStyle(
"motif");
95 #ifdef UPDATER_RELEASE
97 yDebug() <<
"The application is busy";
98 qDebug() <<
"The application is busy. Check if an instance is already running, or if it is in zombie state. If none of them ... remove the file .firmwareUpdater.singleton";
103 QCommandLineParser parser;
104 parser.addVersionOption();
105 parser.setApplicationDescription(
"Firmware Updater Help");
106 parser.addHelpOption();
108 QCommandLineOption noGuiOption(QStringList() <<
"g" <<
"nogui",
"The application starts in console mode");
109 QCommandLineOption strainCalibOption(QStringList() <<
"0" <<
"strain-acquisition",
"The application starts the STRAIN acquisition mode");
110 QCommandLineOption adminOption(QStringList() <<
"a" <<
"admin",
"The application starts in admin mode");
111 QCommandLineOption iniFileOption(QStringList() <<
"f" <<
"from",
"Override the default ini file",
"config",
"firmwareupdater.ini");
112 QCommandLineOption addressOption(QStringList() <<
"s" <<
"address",
"Override the default address",
"address",
MY_ADDR);
113 QCommandLineOption portOption(QStringList() <<
"p" <<
"port",
"Override the default port",
"port",
"3333");
114 QCommandLineOption discoverOption(QStringList() <<
"d" <<
"discover",
"Discover devices");
115 QCommandLineOption deviceOption(QStringList() <<
"e" <<
"device",
"Choose Device (i.e. ETH or CFW2_CAN, ESD_CAN...)",
"device",
"");
116 QCommandLineOption idOption(QStringList() <<
"i" <<
"id",
"Choose a device id (i.e. eth1 or 1-2-3...)",
"id",
"");
117 QCommandLineOption boardOption(QStringList() <<
"t" <<
"eth_board",
"Choose a device board (i.e. 10.0.0.1)",
"eth_board",
"");
118 QCommandLineOption programOption(QStringList() <<
"r" <<
"program",
"Program devices");
119 QCommandLineOption fileOption(QStringList() <<
"l" <<
"file",
"Path to a firmware file",
"file",
"");
120 QCommandLineOption ethCanLineOption(QStringList() <<
"c" <<
"can_line",
"Select a can line",
"can_line",
"");
121 QCommandLineOption ethCanIdOption(QStringList() <<
"n" <<
"can_id",
"Select a can id",
"can_id",
"");
122 QCommandLineOption ethForceMaintenance(QStringList() <<
"m" <<
"force-eth-maintenance",
"Force the board to go in maintenace mode",
"");
123 QCommandLineOption ethForceApplication(QStringList() <<
"o" <<
"force-eth-application",
"Force the board to go in application mode",
"");
124 QCommandLineOption eraseEEpromOption(QStringList() <<
"1" <<
"erase_eeprom" <<
"Erase EEPROM of STRAIN during FW update",
"");
125 QCommandLineOption verbosityOption(QStringList() <<
"x" <<
"verbosity",
"Choose a verbosity level [0, 1]",
"verbosity",
"");
126 QCommandLineOption verifyOption(QStringList() <<
"y" <<
"verify",
"Verify FW version [ma.mi / ma.mi.re]. returns 0 if address and FW both match, 1 if board is found but FW does not match, 2 if board is not even found",
"verify",
"");
127 QCommandLineOption queryOption(QStringList() <<
"q" <<
"query",
"Queries a given address for its type and FW version [ma.mi / ma.mi.re]. prints a result on stdout. it returns 1 if it does not find a board at address");
128 QCommandLineOption loadDatFileOption(QStringList() <<
"z" <<
"load-dat-file",
"Loads the calibration .dat file into STRAIN2 eeprom (pass the file.dat with -l or --file option)",
"",
"");
129 QCommandLineOption setStrainSnOption(QStringList() <<
"w" <<
"set-strain-sn",
"Sets the passed serialNumber (i.e. SN001) on STRAIN2",
"sn",
"");
130 QCommandLineOption setStrainGainsOffsetOption(QStringList() <<
"j" <<
"set-strain-gains",
"Sets on STRAIN2 default gains to (8,24,24,10,10,24) , adjust the offset and check if some channel saturates",
"",
"");
131 QCommandLineOption setStrainGainsSpecificOffsetOption(QStringList() <<
"3" <<
"set-strain-gains-specific",
"Sets on STRAIN2 default gains to (8,24,24,10,10,24) or to (8,10,10,10,10,10) depending on the sensor type, adjust the offset and check if some channel saturates",
"xx",
"");
132 QCommandLineOption getCanBoardVersionOption(QStringList() <<
"b" <<
"get-canboard-version",
"Gets Bootloader or Application version (<saveFile> must be y or n to save or not a file containing fw info)",
"saveFile",
"");
133 QCommandLineOption saveDatFileOption(QStringList() <<
"u" <<
"save-dat-file",
"Saves the calibration .dat file from STRAIN2 eeprom",
"",
"");
134 QCommandLineOption changeCanIdOption(QStringList() <<
"k" <<
"change-can-id",
"changes CAN ID",
"id-new",
"");
135 QCommandLineOption changeBoardIpOption(QStringList() <<
"2" <<
"change-ip-addr",
"changes board IP address",
"ip-new",
"");
138 parser.addOption(noGuiOption);
139 parser.addOption(strainCalibOption);
140 parser.addOption(adminOption);
141 parser.addOption(iniFileOption);
142 parser.addOption(addressOption);
143 parser.addOption(portOption);
144 parser.addOption(discoverOption);
145 parser.addOption(deviceOption);
146 parser.addOption(idOption);
147 parser.addOption(boardOption);
148 parser.addOption(programOption);
149 parser.addOption(fileOption);
150 parser.addOption(ethCanLineOption);
151 parser.addOption(ethCanIdOption);
152 parser.addOption(ethForceMaintenance);
153 parser.addOption(ethForceApplication);
154 parser.addOption(eraseEEpromOption);
155 parser.addOption(verbosityOption);
156 parser.addOption(verifyOption);
157 parser.addOption(queryOption);
158 parser.addOption(loadDatFileOption);
159 parser.addOption(setStrainSnOption);
160 parser.addOption(setStrainGainsOffsetOption);
161 parser.addOption(setStrainGainsSpecificOffsetOption);
162 parser.addOption(getCanBoardVersionOption);
163 parser.addOption(saveDatFileOption);
164 parser.addOption(changeCanIdOption);
165 parser.addOption(changeBoardIpOption);
169 bool noGui = parser.isSet(noGuiOption);
170 bool adminMode = parser.isSet(adminOption);
172 QString iniFile = parser.value(iniFileOption);
174 bool bPrintUsage=
false;
177 if(parser.isSet(verbosityOption))
179 QString vv = parser.value(verbosityOption);
184 if(parser.isSet(addressOption)){
185 address = parser.value(addressOption);
192 if(parser.isSet(portOption)){
193 port = parser.value(portOption).toInt();
205 rf.setDefaultContext(
"firmwareUpdater");
206 rf.setDefaultConfigFile(iniFile.toLatin1().data());
208 if(!rf.configure(
argc, argv)){
221 bool discover = parser.isSet(discoverOption);
222 bool program = parser.isSet(programOption);
223 bool verify = parser.isSet(verifyOption);
224 bool query = parser.isSet(queryOption);
225 QString device = parser.value(deviceOption);
226 QString
id = parser.value(idOption);
227 QString
board = parser.value(boardOption);
228 QString
file = parser.value(fileOption);
229 QString canLine = parser.value(ethCanLineOption);
230 QString canId = parser.value(ethCanIdOption);
231 QString sensorModel = parser.value(setStrainGainsSpecificOffsetOption);
233 if(parser.isSet(setStrainGainsSpecificOffsetOption)){
234 if(
verbosity >= 1) qDebug() <<
"Sensor model:" << sensorModel;
237 QString targetFW = parser.value(verifyOption);
239 bool forceMaintenance = parser.isSet(ethForceMaintenance);
240 bool forceApplication = parser.isSet(ethForceApplication);
241 bool eraseEEprom = parser.isSet(eraseEEpromOption);
242 bool loadDatFile = parser.isSet(loadDatFileOption);
243 bool saveDatFile = parser.isSet(saveDatFileOption);
244 bool setSn = parser.isSet(setStrainSnOption);
245 QString serialNumber = parser.value(setStrainSnOption);
246 bool setGains = parser.isSet(setStrainGainsOffsetOption);
247 bool setGainsSpecific = parser.isSet(setStrainGainsSpecificOffsetOption);
248 QString saveVersion = parser.value(getCanBoardVersionOption);
249 bool getVersion = parser.isSet(getCanBoardVersionOption);
250 bool changeCanID = parser.isSet(changeCanIdOption);
251 bool changeIp = parser.isSet(changeBoardIpOption);
254 QString canIdNew = parser.value(changeCanIdOption);
255 QString newIp = parser.value(changeBoardIpOption);
444 if(
verbosity >= 1) qDebug() <<
"specify at least one option amongst discover / verify / program / forcemaintenance / forceapplication";
452 if(
verbosity >= 1) qDebug() <<
"specify only one option amongst discover / verify / program / forcemaintenance / forceapplication";
461 if(device.isEmpty()){
462 if(
verbosity >= 1) qDebug() <<
"Need a device to be set";
463 }
else if(
id.isEmpty()){
464 if(
verbosity >= 1) qDebug() <<
"Need an id to be set";
483 if(
verbosity >= 1) qDebug() <<
"Need a device";
485 else if (device.contains(
"ETH"))
490 if(
verbosity >= 1) qDebug() <<
"Need an IP address";
492 else if((canLine.isEmpty()) && (canId.isEmpty()))
497 else if((!canLine.isEmpty()) && (!canId.isEmpty()))
505 if(
verbosity >= 1) qDebug() <<
"Must have both can line and address";
511 if((canLine.isEmpty()) || (canId.isEmpty()))
513 if(
verbosity >= 1) qDebug() <<
"Must have both can line and address";
533 if(
verbosity >= 1) qDebug() <<
"Need a device";
535 else if (device.contains(
"ETH"))
540 if(
verbosity >= 1) qDebug() <<
"Need an ip address";
542 else if(targetFW.isEmpty())
544 if(
verbosity >= 1) qDebug() <<
"Need a target fw version";
546 else if((canLine.isEmpty()) && (canId.isEmpty()))
551 else if((!canLine.isEmpty()) && (!canId.isEmpty()))
559 if(
verbosity >= 1) qDebug() <<
"Must have both can line and address";
565 if(targetFW.isEmpty())
567 if(
verbosity >= 1) qDebug() <<
"Need a target fw version";
569 else if((canLine.isEmpty()) || (canId.isEmpty()))
571 if(
verbosity >= 1) qDebug() <<
"Must have both can line and address";
588 if(device.isEmpty()){
589 if(
verbosity >= 1) qDebug() <<
"Need a device to be set";
590 }
else if(
id.isEmpty()){
591 if(
verbosity >= 1) qDebug() <<
"Need an id to be set";
592 }
else if(
board.isEmpty() && device.contains(
"ETH")){
593 if(
verbosity >= 1) qDebug() <<
"Need a board to be set";
594 }
else if(
file.isEmpty()){
595 if(
verbosity >= 1) qDebug() <<
"Need a file path to be set";
596 }
else if(canLine.isEmpty() && canId.isEmpty()){
602 if(canLine.isEmpty()){
603 if(
verbosity >= 1) qDebug() <<
"Need a can line to be set";
604 }
else if(canId.isEmpty()){
605 if(
verbosity >= 1) qDebug() <<
"Need a can id to be set";
618 if(device.isEmpty()){
619 if(
verbosity >= 1) qDebug() <<
"Need a device to be set";
620 }
else if(
id.isEmpty()){
621 if(
verbosity >= 1) qDebug() <<
"Need an id to be set";
622 }
else if(
board.isEmpty()){
623 if(
verbosity >= 1) qDebug() <<
"Need a board to be set";
636 if(device.isEmpty()){
637 if(
verbosity >= 1) qDebug() <<
"Need a device to be set";
638 }
else if(
id.isEmpty()){
639 if(
verbosity >= 1) qDebug() <<
"Need an id to be set";
640 }
else if(
board.isEmpty()){
641 if(
verbosity >= 1) qDebug() <<
"Need a board to be set";
653 if(device.isEmpty()){
654 if(
verbosity >= 1) qDebug() <<
"Need a device to be set";
655 }
else if(
id.isEmpty()){
656 if(
verbosity >= 1) qDebug() <<
"Need an id to be set";
657 }
else if(
file.isEmpty()){
658 if(
verbosity >= 1) qDebug() <<
"Need a file path to be set";
660 if(!device.contains(
"ETH") && canLine.isEmpty()){
661 if(
verbosity >= 1) qDebug() <<
"Need a can line to be set";
662 }
else if(!device.contains(
"ETH") && canId.isEmpty()){
663 if(
verbosity >= 1) qDebug() <<
"Need a can id to be set";
675 if(device.isEmpty()){
676 if(
verbosity >= 1) qDebug() <<
"Need a device to be set";
677 }
else if(
id.isEmpty()){
678 if(
verbosity >= 1) qDebug() <<
"Need an id to be set";
680 if(!device.contains(
"ETH") && canLine.isEmpty()){
681 if(
verbosity >= 1) qDebug() <<
"Need a can line to be set";
682 }
else if(!device.contains(
"ETH") && canId.isEmpty()){
683 if(
verbosity >= 1) qDebug() <<
"Need a can id to be set";
684 }
else if(!device.contains(
"ETH") && serialNumber.isEmpty()){
685 if(
verbosity >= 1) qDebug() <<
"Need a serial number to be set";
697 if(device.isEmpty()){
698 if(
verbosity >= 1) qDebug() <<
"Need a device to be set";
699 }
else if(
id.isEmpty()){
700 if(
verbosity >= 1) qDebug() <<
"Need an id to be set";
702 if(!device.contains(
"ETH") && canLine.isEmpty()){
703 if(
verbosity >= 1) qDebug() <<
"Need a can line to be set";
704 }
else if(!device.contains(
"ETH") && canId.isEmpty()){
705 if(
verbosity >= 1) qDebug() <<
"Need a can id to be set";
717 if(device.isEmpty()){
718 if(
verbosity >= 1) qDebug() <<
"Need a device to be set";
719 }
else if(
id.isEmpty()){
720 if(
verbosity >= 1) qDebug() <<
"Need an id to be set";
722 if(!device.contains(
"ETH") && canLine.isEmpty()){
723 if(
verbosity >= 1) qDebug() <<
"Need a can line to be set";
724 }
else if(!device.contains(
"ETH") && canId.isEmpty()){
725 if(
verbosity >= 1) qDebug() <<
"Need a can id to be set";
728 if(sensorModel==
"FT58")
745 if(device.isEmpty()){
746 if(
verbosity >= 1) qDebug() <<
"Need a device to be set";
747 }
else if(
id.isEmpty()){
748 if(
verbosity >= 1) qDebug() <<
"Need an id to be set";
750 if(!device.contains(
"ETH") && canLine.isEmpty()){
751 if(
verbosity >= 1) qDebug() <<
"Need a can line to be set";
752 }
else if(!device.contains(
"ETH") && canId.isEmpty()){
753 if(
verbosity >= 1) qDebug() <<
"Need a can id to be set";
756 if(saveVersion ==
"y") save =
true;
768 if(device.isEmpty()){
769 if(
verbosity >= 1) qDebug() <<
"Need a device to be set";
770 }
else if(
id.isEmpty()){
771 if(
verbosity >= 1) qDebug() <<
"Need an id to be set";
773 if(!device.contains(
"ETH") && canLine.isEmpty()){
774 if(
verbosity >= 1) qDebug() <<
"Need a can line to be set";
775 }
else if(!device.contains(
"ETH") && canId.isEmpty()){
776 if(
verbosity >= 1) qDebug() <<
"Need a can id to be set";
787 if(device.isEmpty()){
788 if(
verbosity >= 1) qDebug() <<
"Need a device to be set";
789 }
else if(
id.isEmpty()){
790 if(
verbosity >= 1) qDebug() <<
"Need an id to be set";
792 if(!device.contains(
"ETH") && canLine.isEmpty()){
793 if(
verbosity >= 1) qDebug() <<
"Need a can line to be set";
794 }
else if(!device.contains(
"ETH") && canId.isEmpty()){
795 if(
verbosity >= 1) qDebug() <<
"Need a can id to be set";
806 if(device.isEmpty()){
807 if(
verbosity >= 1) qDebug() <<
"Need a device to be set";
808 }
else if(
id.isEmpty()){
809 if(
verbosity >= 1) qDebug() <<
"Need an id to be set";
811 if(!device.contains(
"ETH") ||
board.isEmpty() || newIp.isEmpty()){
812 if(
verbosity >= 1) qDebug() <<
"\nNeed a ETH device, the old IP and the new one to be set\n i.e.FirmwareUpdater -g -e ETH -i eth1 -t 10.0.1.1 -2 10.0.1.2";
824 if(device.isEmpty()){
825 if(
verbosity >= 1) qDebug() <<
"Need a device to be set";
826 }
else if(
id.isEmpty()){
827 if(
verbosity >= 1) qDebug() <<
"Need an id to be set";
837 if(device.isEmpty()){
838 if(
verbosity >= 1) qDebug() <<
"Need a device to be set";
839 }
else if(
id.isEmpty()){
840 if(
verbosity >= 1) qDebug() <<
"Need an id to be set";
841 }
else if(
board.isEmpty() && device.contains(
"ETH")){
842 if(
verbosity >= 1) qDebug() <<
"Need a board to be set";
843 }
else if(
file.isEmpty()){
844 if(
verbosity >= 1) qDebug() <<
"Need a file path to be set";
845 }
else if(canLine.isEmpty() && canId.isEmpty()){
851 if(canLine.isEmpty()){
852 if(
verbosity >= 1) qDebug() <<
"Need a can line to be set";
853 }
else if(canId.isEmpty()){
854 if(
verbosity >= 1) qDebug() <<
"Need a can id to be set";
859 }
else if(forceApplication || forceMaintenance){
860 if(device.isEmpty()){
861 if(
verbosity >= 1) qDebug() <<
"Need a device to be set";
862 }
else if(
id.isEmpty()){
863 if(
verbosity >= 1) qDebug() <<
"Need an id to be set";
864 }
else if(
board.isEmpty()){
865 if(
verbosity >= 1) qDebug() <<
"Need a board to be set";
867 if(forceApplication){
884 #ifdef UPDATER_RELEASE
938 yError(
"ETH board is not present or not in maintenace mode!!\n");
944 for(
int i = 0 ; i< ethl.
size(); i++){
945 if(ethl[i].getIPV4string() ==
board.toStdString()) index = i;
949 if(ret) yInfo() <<
"Cahnge board IP Succeded !!!";
950 else yError() <<
"Cahnge board IP Failed !!!";
959 QList <sBoard> canBoards;
965 if(device.contains(
"SOCKETCAN"))
968 if (canId.toInt() <1 || canId.toInt() >= 15 || canIdNew.toInt() <1 || canIdNew.toInt() >= 15){
969 yError(
"Invalid board address!\n");
975 if(canBoards.count() > 0)
978 yInfo() <<
"Cahnge CAN ID message sent !!!";
981 yError() <<
"No CAN board found, stopped!";
985 else if(device.contains(
"ETH"))
991 yError(
"ETH board is not present or not in maintenace mode!!\n");
995 if(canBoards.count() > 0)
999 if(ret) yInfo() <<
"Cahnge CAN ID Succeded !!!";
1000 else yError() <<
"Cahnge CAN ID Failed !!!";
1003 yError() <<
"No CAN board found, stopped!";
1013 QList <sBoard> canBoards;
1018 if(device.contains(
"SOCKETCAN"))
1020 if (canId.toInt() <1 || canId.toInt() >= 15){
1021 yError(
"Invalid board address!\n");
1029 else if(device.contains(
"ETH"))
1031 QString result, ret;
1034 yError(
"ETH board is not present or not in maintenace mode!!\n");
1040 if(canBoards.count() > 0 && icubCanProto_boardType__strain2 == canBoards[0].type)
1043 string prefix =
"Application ";
1045 if(!canBoards[0].applicationisrunning && save)
1049 prefix =
" Bootloader ";
1050 myfile << canBoards[0].appl_vers_major <<
"." << canBoards[0].appl_vers_minor <<
"\n";
1052 yInfo() << prefix <<
" version : " << canBoards[0].appl_vers_major <<
"." << canBoards[0].appl_vers_minor;
1054 catch (std::ifstream::failure
e) {
1055 yError() <<
"Exception opening file";
1058 }
else if(canBoards[0].applicationisrunning && save)
1062 prefix =
" Application ";
1063 myfile << canBoards[0].appl_vers_major <<
"." << canBoards[0].appl_vers_minor <<
"." << canBoards[0].appl_vers_build <<
"\n";
1065 yInfo() << prefix <<
" version : " << canBoards[0].appl_vers_major <<
"." << canBoards[0].appl_vers_minor <<
"." << canBoards[0].appl_vers_build;
1067 catch (std::ifstream::failure
e) {
1068 yError() <<
"Exception opening file";
1074 yError() <<
"No CAN board found, stopped!";
1089 QList <sBoard> canBoards;
1093 std::vector<strain2_ampl_discretegain_t> gains(0);
1094 std::vector<int16_t> targets(0);
1096 std::vector<strain2_ampl_discretegain_t> ampsets = {
1108 for(
int i = 0; i < 6; i++){ targets.push_back(0); gains.push_back(ampsets[i]);}
1110 if(device.contains(
"SOCKETCAN"))
1112 if (canId.toInt() <1 || canId.toInt() >= 15){
1113 yError(
"Invalid board address!\n");
1121 else if(device.contains(
"ETH"))
1123 QString result, ret;
1126 yError(
"ETH board is not present or not in maintenace mode!!\n");
1132 if(canBoards.count() > 0 && icubCanProto_boardType__strain2 == canBoards[0].type)
1136 yDebug() <<
"strain2-amplifier-tuning: STEP-1. imposing gains which are different of each channel";
1139 yarp::os::Time::delay(0.2);
1141 yInfo() <<
"Gains Saved!";
1144 yError() <<
"No STRAIN2 board found, stopped!";
1148 unsigned int adc[6];
1150 bool failCh =
false;
1152 for(
int i=0; i<6; i++){
1157 unsigned int z =
static_cast<int>(adc[i])-32768;
1158 sprintf(tempbuf,
"%d",
z);
1159 int t = std::stoi(tempbuf);
1160 if(t < -500 || t > 500) failCh =
true;
1161 yDebug() << i <<
" " << std::stoi(tempbuf);
1162 yarp::os::Time::delay(0.2);
1166 yError() <<
"Strange value on Channels ADC readings...";
1169 yInfo() <<
"Good values in ADC channels reading!";
1190 QList <sBoard> canBoards;
1195 QByteArray
string = serialNumber.toLatin1();
1196 char * sn =
string.data();
1198 if(device.contains(
"SOCKETCAN"))
1200 if (canId.toInt() <1 || canId.toInt() >= 15){
1201 yError(
"Invalid board address!\n");
1208 else if(device.contains(
"ETH"))
1210 QString result, ret;
1213 yError(
"ETH board is not present or not in maintenace mode!!\n");
1220 if(canBoards.count() > 0 && icubCanProto_boardType__strain2 == canBoards[0].type)
1227 yInfo() <<
"Serial Number Saved!";
1231 yError() <<
"No STRAIN2 board found, stopped!";
1253 QList <sBoard> canBoards;
1261 unsigned int calib_matrix[3][6][6];
1263 unsigned int full_scale_const[3][6];
1268 yError(
"File not found!\n");
1273 if(device.contains(
"SOCKETCAN"))
1275 if (canId.toInt() <1 || canId.toInt() >= 15){
1276 yError(
"Invalid board address!\n");
1284 else if(device.contains(
"ETH"))
1286 QString result, ret;
1289 yError(
"ETH board is not present or not in maintenace mode!!\n");
1296 if(canBoards.count() > 0 && icubCanProto_boardType__strain2 == canBoards[0].type)
1299 if(canBoards.count() > 0)
1301 int boardtype = canBoards[0].type;
1302 int regset = canBoards[0].strainregsetinuse;
1306 filestr.open (
file.toLatin1().data(), fstream::in);
1307 if (!filestr.is_open()){
1308 yError(
"Error opening calibration file!\n");
1316 filestr.getline (buffer,256);
1317 filestr.getline (buffer,256);
1318 sscanf (buffer,
"%d",&file_version);
1321 if((icubCanProto_boardType__strain2 == boardtype) && (3 != file_version))
1323 yError(
"Wrong file. Calibration version not supported for strain2: %d\n", file_version);
1326 else if((icubCanProto_boardType__strain == boardtype) && (2 != file_version))
1328 yError(
"Wrong file. Calibration version not supported: %d\n", file_version);
1332 if(3 == file_version)
1335 filestr.getline (buffer,256);
1336 filestr.getline (buffer,256);
1337 if(0 != strcmp(buffer,
"strain2"))
1339 yError(
"Wrong file. Board type not supported: %s\n", buffer);
1344 filestr.getline (buffer,256);
1345 filestr.getline (buffer,256);
1346 sprintf(sn,
"%s", buffer);
1351 filestr.getline (buffer,256);
1354 filestr.getline (buffer,256);
1356 unsigned int t08[6] = {0};
1357 sscanf (buffer,
"0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x", &t08[0], &t08[1], &t08[2], &t08[3], &t08[4], &t08[5]);
1358 for(
int j=0; j<6; j++) amp_registers[i].
data[j] = t08[j];
1374 filestr.getline (buffer,256);
1375 filestr.getline (buffer,256);
1376 sprintf(sn,
"%s", buffer);
1380 filestr.getline (buffer,256);
1383 filestr.getline (buffer,256);
1384 sscanf (buffer,
"%d",&
offset[i]);
1392 filestr.getline (buffer,256);
1393 for (i=0;i<36; i++){
1396 filestr.getline (buffer,256);
1397 sscanf (buffer,
"%x",&calib_matrix[index][ri][ci]);
1403 filestr.getline (buffer,256);
1404 filestr.getline (buffer,256);
1406 sscanf (buffer,
"%d",&cc);
1410 filestr.getline (buffer,256);
1412 filestr.getline (buffer,256);
1413 sscanf (buffer,
"%d",&calib_bias[i]);
1418 filestr.getline (buffer,256);
1420 filestr.getline (buffer,256);
1421 sscanf (buffer,
"%d",&full_scale_const[index][i]);
1429 yInfo() <<
"Calibration file loaded!";
1433 yError() <<
"No STRAIN2 board found, stopped!";
1454 QList <sBoard> canBoards;
1461 unsigned int calib_matrix[3][6][6];
1464 uint16_t amp_offsets[6];
1465 unsigned int full_scale_const[3][6];
1466 unsigned int matrix[3][6][6];
1467 unsigned int full_scale_calib[3][6];
1468 unsigned int calib_const[3];
1479 char path[256] = { 0 };
1480 std::string filename;
1486 if(device.contains(
"SOCKETCAN"))
1488 if (canId.toInt() <1 || canId.toInt() >= 15){
1489 yError(
"Invalid board address!\n");
1496 else if(device.contains(
"ETH"))
1498 QString result, ret;
1501 yError(
"ETH board is not present or not in maintenace mode!!\n");
1508 if(canBoards.count() > 0 && icubCanProto_boardType__strain2 == canBoards[0].type)
1512 filename +=
"calibrationData";
1513 filename += serial_no;
1518 for(
int i=0; i<6; i++)
1525 for(
int mi=0;mi<1;mi++){
1535 if(icubCanProto_boardType__strain2 == canBoards[0].type)
1538 filestr<<
"File version:"<<endl;
1541 filestr<<
"Board type:"<<endl;
1542 filestr<<
"strain2"<<endl;
1544 filestr<<
"Serial number:"<<endl;
1545 sprintf (buffer,
"%s",serial_no);
1546 filestr<<buffer<<endl;
1548 filestr<<
"Amplifier registers:"<<endl;
1550 sprintf (buffer,
"0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x",
1551 amp_registers[i].
data[0], amp_registers[i].
data[1], amp_registers[i].
data[2],
1552 amp_registers[i].
data[3], amp_registers[i].
data[4], amp_registers[i].
data[5]);
1553 filestr<<buffer<<endl;
1559 filestr<<
"File version:"<<endl;
1563 filestr<<
"Serial number:"<<endl;
1564 sprintf (buffer,
"%s",serial_no);
1565 filestr<<buffer<<endl;
1568 filestr<<
"Offsets:"<<endl;
1570 sprintf (buffer,
"%d",
offset[i]);
1571 filestr<<buffer<<endl;
1578 filestr<<
"Calibration matrix:"<<endl;
1579 for (i=0;i<36; i++){
1580 sprintf (buffer,
"%x",matrix[index][i/6][i%6]);
1581 filestr<<buffer<<endl;
1586 filestr<<
"Matrix gain:"<<endl;
1587 sprintf (buffer,
"%d",calib_const[index]);
1588 filestr<<buffer<<endl;
1592 filestr<<
"Tare:"<<endl;
1594 sprintf (buffer,
"%d",calib_bias[i]);
1595 filestr<<buffer<<endl;
1599 filestr<<
"Full scale values:"<<endl;
1601 sprintf (buffer,
"%d",full_scale_const[index][i]);
1602 filestr<<buffer<<endl;
1605 yInfo() <<
"Calibration file saved!";
1608 yError() <<
"No STRAIN2 board found, stopped!";
1617 int boards = core->
connectTo(device,
id);
1619 if(device.contains(
"ETH")){
1629 int boards = core->
connectTo(device,
id);
1631 if(device.contains(
"ETH")){
1644 if(device.contains(
"ETH")){
1645 int boards = core->
connectTo(device,
id);
1647 char board_ipaddr[16];
1650 snprintf(board_ipaddr,
sizeof(board_ipaddr),
"%s", ethBoard.
getIPV4string().c_str());
1652 if(
board.contains(board_ipaddr)){
1655 if(canBoards.count() > 0){
1656 int selectedCount = 0;
1657 for(
int j=0;j<canBoards.count();j++){
1658 sBoard b = canBoards.at(j);
1659 if(b.
bus == canLine.toInt() && b.
pid == canId.toInt()){
1662 canBoards.replace(j,b);
1667 if(selectedCount > 0){
1670 if(
verbosity >= 1) qDebug() << retString;
1671 return ret ? 0 : -1;
1673 if(
verbosity >= 1) qDebug() <<
"No board selected";
1677 if(
verbosity >= 1) qDebug() << retString;
1687 if(canBoards.count() > 0){
1688 int selectedCount = 0;
1689 for(
int j=0;j<canBoards.count();j++){
1690 sBoard b = canBoards.at(j);
1691 if(b.
bus == canLine.toInt() && b.
pid == canId.toInt()){
1694 canBoards.replace(j,b);
1698 if(selectedCount > 0){
1701 if(
verbosity >= 1) qDebug() << retString;
1702 return ret ? 0 : -1;
1704 if(
verbosity >= 1) qDebug() <<
"No board selected";
1708 if(
verbosity >= 1) qDebug() << retString;
1718 int boards = core->
connectTo(device,
id);
1720 if(device.contains(
"ETH")){
1721 char board_ipaddr[16];
1724 snprintf(board_ipaddr,
sizeof(board_ipaddr),
"%s", ethBoard.
getIPV4string().c_str());
1726 if(
board.contains(board_ipaddr)){
1728 QString resultString;
1731 if(
verbosity >= 1) qDebug() << resultString;
1734 if(
verbosity >= 1) qDebug() <<
"Update Done";
1743 if(
verbosity >= 1) qDebug() <<
"No boards found";
1751 if(device.contains(
"ETH")){
1752 int boards = core->
connectTo(device,
id);
1755 char board_ipaddr[16];
1758 char board_version[16];
1759 char board_date[24];
1760 char board_built[24];
1761 char board_type[24];
1762 char running_process[24];
1763 char board_info[32];
1764 char appl_version[32] = {0};
1766 memset(board_ipaddr,0,
sizeof(board_ipaddr));
1767 memset(board_mac,0,
sizeof(board_mac));
1768 memset(board_version,0,
sizeof(board_version));
1769 memset(board_date,0,
sizeof(board_date));
1770 memset(board_built,0,
sizeof(board_built));
1771 memset(board_type,0,
sizeof(board_type));
1772 memset(running_process,0,
sizeof(running_process));
1773 memset(board_info,0,
sizeof(board_info));
1776 if(
verbosity >= 1) qDebug() <<
"-------------------------------------------------------------";
1780 snprintf(board_ipaddr,
sizeof(board_ipaddr),
"%s",
board.getIPV4string().c_str());
1782 ACE_UINT64 mac =
board.getInfo().macaddress;
1784 snprintf(board_mac,
sizeof(board_mac),
"%02X-%02X-%02X-%02X-%02X-%02X",
1785 (uint8_t)(mac >> 40) & 0xff,
1786 (uint8_t)(mac >> 32) & 0xff,
1787 (uint8_t)(mac >> 24) & 0xff,
1788 (uint8_t)(mac >> 16) & 0xff,
1789 (uint8_t)(mac >> 8 ) & 0xff,
1790 (uint8_t)(mac ) & 0xff
1794 snprintf(board_version,
sizeof(board_version),
"%s",
board.getVersionfRunning().c_str());
1795 snprintf(board_type,
sizeof(board_type),
"%s", eoboards_type2string2(eoboards_ethtype2type(
board.getInfo().boardtype), eobool_true));
1796 snprintf(running_process,
sizeof(running_process),
"%s", eouprot_process2string((eOuprot_process_t)
board.getInfo().processes.runningnow));
1797 snprintf(board_info,
sizeof(board_info),
"%s",
board.getInfoOnEEPROM().c_str());
1798 snprintf(board_date,
sizeof(board_date),
"%s",
board.getDatefRunning().c_str());
1799 snprintf(board_built,
sizeof(board_date),
"%s",
board.getCompilationDateOfRunning().c_str());
1800 snprintf(appl_version,
sizeof(appl_version),
"%d.%d",
board.getInfo().processes.info[2].version.major,
board.getInfo().processes.info[2].version.minor);
1802 if(
true == slimprint)
1804 char IPslimstring[512] = {0};
1805 snprintf(IPslimstring,
sizeof(IPslimstring),
"%s: type = %s, application = %d.%d, updater = %d.%d, loader = %d.%d",
1806 board.getIPV4string().c_str(),
1807 eoboards_type2string2(eoboards_ethtype2type(
board.getInfo().boardtype), eobool_true),
1808 board.getInfo().processes.info[2].version.major,
board.getInfo().processes.info[2].version.minor,
1809 board.getInfo().processes.info[1].version.major,
board.getInfo().processes.info[1].version.minor,
1810 board.getInfo().processes.info[0].version.major,
board.getInfo().processes.info[0].version.minor);
1812 qDebug() << IPslimstring;
1816 if(
verbosity >= 1) qDebug() <<
"************** Device " << i <<
" ******************";
1817 if(
verbosity >= 1) qDebug() <<
"Ip: "<< board_ipaddr;
1818 if(
verbosity >= 1) qDebug() <<
"Mac: "<< board_mac;
1819 if(
verbosity >= 1) qDebug() <<
"Version: "<< board_version;
1820 if(
verbosity >= 1) qDebug() <<
"Appl Ver: "<< appl_version;
1821 if(
verbosity >= 1) qDebug() <<
"Type: "<< board_type;
1822 if(
verbosity >= 1) qDebug() <<
"Process: "<< running_process;
1823 if(
verbosity >= 1) qDebug() <<
"Info: "<< board_info;
1824 if(
verbosity >= 1) qDebug() <<
"Date: "<< board_date;
1825 if(
verbosity >= 1) qDebug() <<
"Built: "<< board_built;
1830 if(
verbosity >= 1) qDebug() <<
"-------------------------------------------------------------";
1836 if(canBoards.count() <= 0){
1837 if(
verbosity >= 1) qDebug() << retString;
1856 int boards = core->
connectTo(device,
id);
1858 if(device.contains(
"ETH")){
1859 if(forceMaintenance){
1862 }
else if(forceApplication){
1869 if(canBoards.count() <= 0){
1870 if(
verbosity >= 1) qDebug() << retString;
1876 if(
verbosity >= 1) qDebug() <<
"for board" <<
board <<
"You have to put the device in maintenace mode to perform this operation.";
1881 if(
verbosity >= 1) qDebug() <<
"No boards Found";
1889 if(
verbosity >= 1) qDebug() <<
"-------------------------------------------------------------";
1890 for(
int i=0;i<canBoards.count();i++){
1893 char board_type [50]; memset (board_type, 0,
sizeof(board_type));
1894 char board_process [50]; memset (board_process, 0,
sizeof(board_process));
1895 char board_status [50]; memset (board_status, 0,
sizeof(board_status));
1896 char board_add_info [50]; memset (board_add_info, 0,
sizeof(board_add_info));
1897 char board_firmware_version [32]; memset (board_firmware_version, 0,
sizeof(board_firmware_version));
1898 char board_appl_minor [10]; memset (board_appl_minor, 0,
sizeof(board_appl_minor));
1899 char board_appl_build [10]; memset (board_appl_build, 0,
sizeof(board_appl_build));
1900 char board_serial [50]; memset (board_serial, 0,
sizeof(board_serial));
1901 char board_protocol [10]; memset (board_protocol, 0,
sizeof(board_protocol));
1903 snprintf(board_type,
sizeof(board_type),
"%s", eoboards_type2string2((eObrd_type_t)
board.type, eobool_true));
1905 switch (
board.status)
1908 strcpy(board_status,
"RUNNING");
1911 strcpy(board_status,
"WAITING");
1914 strcpy(board_status,
"WAITING_ACK");
1917 strcpy(board_status,
"DOWNLOADING");
1920 strcpy(board_status,
"OK");
1923 strcpy(board_status,
"ERR");
1926 strcpy(board_status,
"UNKNOWN");
1930 if(
true ==
board.applicationisrunning){
1931 strcpy(board_process,
"canApplication");
1933 strcpy(board_process,
"canBootloader");
1936 strncpy (board_add_info,
board.add_info,32);
1938 if(-1 ==
board.appl_vers_build){
1939 snprintf (board_firmware_version,
sizeof(board_firmware_version),
"%d.%d",
board.appl_vers_major,
board.appl_vers_minor);
1941 snprintf (board_firmware_version,
sizeof(board_firmware_version),
"%d.%d.%d",
board.appl_vers_major,
board.appl_vers_minor,
board.appl_vers_build);
1944 snprintf (board_appl_minor,
sizeof(board_appl_minor),
"%d",
board.appl_vers_minor);
1945 snprintf (board_appl_build,
sizeof(board_appl_build),
"%d",
board.appl_vers_build);
1946 snprintf (board_serial,
sizeof(board_serial),
"%s",
board.serial);
1948 if((0 ==
board.prot_vers_major) && (0 ==
board.prot_vers_minor))
1950 snprintf (board_protocol,
sizeof(board_protocol),
"N/A");
1954 snprintf (board_protocol,
sizeof(board_protocol),
"%d.%d",
board.prot_vers_major,
board.prot_vers_minor);
1957 if(
true == slimprint)
1959 char CANslimstring[512] = {0};
1960 char IPstr[24] = {0};
1961 if(
false == onIPboard.isEmpty())
1963 snprintf(IPstr,
sizeof(IPstr),
"%s:", onIPboard.toStdString().c_str());
1965 snprintf(CANslimstring,
sizeof(CANslimstring),
"%sCAN%d:%d: type = %s, application = %s",
1969 eoboards_type2string2((eObrd_type_t)
board.type, eobool_true),
1970 board_firmware_version);
1972 qDebug() << CANslimstring;
1976 if(
verbosity >= 1) qDebug() <<
"************** Board " << i <<
" ******************";
1977 if(
verbosity >= 1) qDebug() <<
"Type: " << board_type;
1979 if(
verbosity >= 1) qDebug() <<
"Address: " <<
"CAN_" <<
board.bus;
1980 if(
verbosity >= 1) qDebug() <<
"Process: " << board_process;
1981 if(
verbosity >= 1) qDebug() <<
"Status: " << board_status;
1982 if(
verbosity >= 1) qDebug() <<
"Info: " << board_add_info;
1983 if(
verbosity >= 1) qDebug() <<
"Firmware Version: " << board_firmware_version;
1984 if(
verbosity >= 1) qDebug() <<
"Serial: " << board_serial;
1985 if(
verbosity >= 1) qDebug() <<
"Protocol: " << board_protocol;
1989 if(
verbosity >= 1) qDebug() <<
"-------------------------------------------------------------";
1996 tempFile = QDir::homePath() +
"/firmwareUpdater.singleton";
1998 tempFile = QDir::homePath() +
"/.firmwareUpdater.singleton";
2001 QFileInfo fInfo(tempFile);
2007 f.open(QIODevice::WriteOnly);
2013 LPCSTR a = (
const char*)fInfo.filePath().utf16();
2014 BOOL b = SetFileAttributes(a,FILE_ATTRIBUTE_HIDDEN);
2026 tempFile = QDir::homePath() +
"/firmwareUpdater.singleton";
2028 tempFile = QDir::homePath() +
"/.firmwareUpdater.singleton";
2031 QFileInfo fInfo(tempFile);
2032 if(!fInfo.exists()){
2045 if(device.contains(
"ETH"))
2047 int boards = core->
connectTo(device,
id);
2051 if(
verbosity >= 1) qDebug() <<
"-------------------------------------------------------------";
2058 if(targetIPaddr.toStdString() ==
board.getIPV4string())
2062 char board_ipaddr[16] = {0};
2063 char appl_version[32] = {0};
2065 snprintf(board_ipaddr,
sizeof(board_ipaddr),
"%s",
board.getIPV4string().c_str());
2066 snprintf(appl_version,
sizeof(appl_version),
"%d.%d",
board.getInfo().processes.info[2].version.major,
board.getInfo().processes.info[2].version.minor);
2068 if(targetFWvers == appl_version)
2071 if(
verbosity >= 1) qDebug() <<
"MATCHED";
2076 if(
verbosity >= 1) qDebug() <<
"NOT MATCHED";
2089 if(
verbosity >= 1) qDebug() <<
"NOT MATCHED (IP = " << targetIPaddr <<
" not in found boards)";
2091 if(
verbosity >= 1) qDebug() <<
"-------------------------------------------------------------";
2097 if(
verbosity >= 1) qDebug() <<
"NOT MATCHED (found no board)";
2104 if(canBoards.count() <= 0)
2107 if(
verbosity >= 1) qDebug() << retString;
2111 ret =
verifyCanDevices(canBoards, targetCANline, targetCANaddr, targetFWvers);
2125 int boards = core->
connectTo(device,
id);
2129 if(
verbosity >= 1) qDebug() <<
"-------------------------------------------------------------";
2136 if(targetIPaddr.toStdString() ==
board.getIPV4string())
2141 char board_ipaddr[16] = {0};
2142 char appl_version[32] = {0};
2144 snprintf(board_ipaddr,
sizeof(board_ipaddr),
"%s",
board.getIPV4string().c_str());
2145 snprintf(appl_version,
sizeof(appl_version),
"%d.%d",
board.getInfo().processes.info[2].version.major,
board.getInfo().processes.info[2].version.minor);
2147 if(targetFWvers == appl_version)
2150 if(
verbosity >= 1) qDebug() <<
"ETH FOUND + FW MATCHED";
2155 if(
verbosity >= 1) qDebug() <<
"ETH FOUND + FW NOT MATCHED";
2168 if(
verbosity >= 1) qDebug() <<
"NOT MATCHED (IP = " << targetIPaddr <<
" not in found boards)";
2170 if(
verbosity >= 1) qDebug() <<
"-------------------------------------------------------------";
2176 if(
verbosity >= 1) qDebug() <<
"NOT MATCHED (found no board)";
2204 if(canBoards.count() <= 0)
2207 if(
verbosity >= 1) qDebug() << retString;
2211 ret =
verifyCanDevices(canBoards, targetCANline, targetCANaddr, targetFWvers);
2218 int verifyCanDevices(QList<sBoard> canBoards,
const QString &targetCANline,
const QString &targetCANaddr,
const QString &targetFWvers)
2224 for(
int i=0;i<canBoards.count();i++)
2228 if(
verbosity >= 1) qDebug() <<
"---------------------------------------------------------";
2232 snprintf(line,
sizeof(line),
"%d",
board.bus);
2234 snprintf(addr,
sizeof(addr),
"%d",
board.pid);
2239 if((targetCANline.toStdString() ==
string(line)) && (targetCANaddr.toStdString() ==
string(addr)) )
2244 if(
verbosity >= 1) qDebug() <<
"CAN ADDRESS: FOUND";
2248 if(
true ==
board.applicationisrunning)
2250 char board_firmware_version [32] = {0};
2251 snprintf (board_firmware_version,
sizeof(board_firmware_version),
"%d.%d.%d",
board.appl_vers_major,
board.appl_vers_minor,
board.appl_vers_build);
2254 if(
string(board_firmware_version) == targetFWvers.toStdString())
2257 if(
verbosity >= 1) qDebug() <<
"CAN FW VERSION: MATCHES";
2265 if(
verbosity >= 1) qDebug() <<
"-------------------------------------------------------------";
2275 const bool forceMaintenance =
true;
2277 int boards = core->
connectTo(device,
id);
2281 if(device.contains(
"ETH"))
2283 if(forceMaintenance)
2293 if(canBoards.count() <= 0)
2295 if(
verbosity >= 1) qDebug() << retString;
2299 ret =
verifyCanDevices(canBoards, targetCANline, targetCANaddr, targetFWvers);
2305 if(
verbosity >= 1) qDebug() <<
"You have to put the device in maintenace mode to perform this operation.";
2312 if(
verbosity >= 1) qDebug() <<
"No boards Found";
2323 const bool slimprint =
true;
2327 if(
verbosity >= 1) qDebug() <<
"-------------------------------------------------------------";
2329 int boards = core->
connectTo(device,
id);
2336 if(targetIPaddr.toStdString() ==
board.getIPV4string())
2341 if(
true == slimprint)
2343 char IPslimstring[512] = {0};
2344 snprintf(IPslimstring,
sizeof(IPslimstring),
"%s: type = %s, application = %d.%d, updater = %d.%d, loader = %d.%d",
2345 board.getIPV4string().c_str(),
2346 eoboards_type2string2(eoboards_ethtype2type(
board.getInfo().boardtype), eobool_true),
2347 board.getInfo().processes.info[2].version.major,
board.getInfo().processes.info[2].version.minor,
2348 board.getInfo().processes.info[1].version.major,
board.getInfo().processes.info[1].version.minor,
2349 board.getInfo().processes.info[0].version.major,
board.getInfo().processes.info[0].version.minor);
2351 qDebug() << IPslimstring;
2366 char notfound[512] = {0};
2367 snprintf(notfound,
sizeof(notfound),
"%s: not found",
2368 targetIPaddr.toStdString().c_str());
2370 qDebug() << notfound;
2372 if(
verbosity >= 1) qDebug() <<
"-------------------------------------------------------------";
2383 const bool forceMaintenance =
true;
2385 char notfound[256] = {0};
2387 int boards = core->
connectTo(device,
id);
2391 if(device.contains(
"ETH"))
2393 if(forceMaintenance)
2403 if(canBoards.count() <= 0)
2405 if(
verbosity >= 1) qDebug() << retString;
2406 snprintf(notfound,
sizeof(notfound),
"%s: no can board beneath",
board.toStdString().c_str());
2407 qDebug() << notfound;
2417 if(
verbosity >= 1) qDebug() <<
"You have to put the device in maintenace mode to perform this operation.";
2424 if(
verbosity >= 1) qDebug() <<
"No boards Found";
2425 snprintf(notfound,
sizeof(notfound),
"%s: cannot find it",
board.toStdString().c_str());
2426 qDebug() << notfound;
2433 int queryCanDevices(QList<sBoard> canBoards,
const QString onIPboard,
const QString &targetCANline,
const QString &targetCANaddr)
2438 const bool slimprint =
true;
2440 for(
int i=0;i<canBoards.count();i++)
2444 if(
verbosity >= 1) qDebug() <<
"---------------------------------------------------------";
2448 snprintf(line,
sizeof(line),
"%d",
board.bus);
2450 snprintf(addr,
sizeof(addr),
"%d",
board.pid);
2453 if((targetCANline.toStdString() ==
string(line)) && (targetCANaddr.toStdString() ==
string(addr)) )
2458 char board_firmware_version[32] = {0};
2460 if(
true ==
board.applicationisrunning)
2462 snprintf (board_firmware_version,
sizeof(board_firmware_version),
"%d.%d.%d",
board.appl_vers_major,
board.appl_vers_minor,
board.appl_vers_build);
2466 snprintf (board_firmware_version,
sizeof(board_firmware_version),
"%d.%d",
board.appl_vers_major,
board.appl_vers_minor);
2469 if(
true == slimprint)
2471 char CANslimstring[512] = {0};
2472 char IPstr[24] = {0};
2473 if(
false == onIPboard.isEmpty())
2475 snprintf(IPstr,
sizeof(IPstr),
"%s:", onIPboard.toStdString().c_str());
2477 snprintf(CANslimstring,
sizeof(CANslimstring),
"%sCAN%d:%d: type = %s, application = %s",
2480 eoboards_type2string2((eObrd_type_t)
board.type, eobool_true),
2481 board_firmware_version);
2483 qDebug() << CANslimstring;
2493 char notfound[512] = {0};
2494 char IPstr[24] = {0};
2495 if(
false == onIPboard.isEmpty())
2497 snprintf(IPstr,
sizeof(IPstr),
"%s:", onIPboard.toStdString().c_str());
2499 snprintf(notfound,
sizeof(notfound),
"%sCAN%s:%s: not found",
2501 targetCANline.toStdString().c_str(), targetCANaddr.toStdString().c_str());
2503 qDebug() << notfound;
2506 if(
verbosity >= 1) qDebug() <<
"-------------------------------------------------------------";
2516 char notfound[256] = {0};
2520 if(canBoards.count() <= 0)
2523 if(
verbosity >= 1) qDebug() << retString;
2524 snprintf(notfound,
sizeof(notfound),
"<%s>: no can boards beneath", device.toStdString().c_str());
2525 qDebug() << notfound;
QList< sBoard > getCanBoardsFromDriver(QString driver, int networkId, QString *retString, bool force=false)
int connectTo(QString device, QString id)
void setSelectedCanBoards(QList< sBoard > selectedBoards, QString address, int deviceId=-1)
bool setEthBoardAddress(int index, QString newAddress)
bool uploadCanApplication(QString filename, QString *resultString, bool ee, QString address="", int deviceId=-1, QList< sBoard > *resultCanBoards=NULL)
QList< sBoard > getCanBoardsFromEth(QString address, QString *retString, int canID=CanPacket::everyCANbus, bool force=false)
void setSelectedEthBoard(int index, bool selected)
EthBoardList getEthBoardList()
bool isBoardInMaintenanceMode(QString ip)
bool setCanBoardAddress(int bus, int id, int canType, QString newAddress, QString ethAddress="", int deviceId=-1, QString *resultString=NULL)
bool uploadEthApplication(QString filename, QString *resultString)
bool init(Searchable &config, int port, QString address, int VerbositY)
cDownloader * getDownloader()
bool setVerbosity(int verb)
int strain_get_serial_number(int bus, int target_id, char *serial_number, string *errorstring=NULL)
int strain_set_matrix_gain(int bus, int target_id, unsigned int gain, int regset=strain_regset_inuse, string *errorstring=NULL)
int strain_get_offset(int bus, int target_id, char channel, unsigned int &offset, int regset=strain_regset_inuse, string *errorstring=NULL)
int change_card_address(int bus, int target_id, int new_id, int board_type)
int strain_get_full_scale(int bus, int target_id, unsigned char channel, unsigned int &full_scale, int regset=strain_regset_inuse, string *errorstring=NULL)
int strain_set_offset(int bus, int target_id, char channel, unsigned int offset, int regset=strain_regset_inuse, string *errorstring=NULL)
int strain_set_serial_number(int bus, int target_id, const char *serial_number, string *errorstring=NULL)
int strain_save_to_eeprom(int bus, int target_id, string *errorstring=NULL)
int strain_get_adc(int bus, int target_id, char channel, unsigned int &adc, int type, string *errorstring=NULL)
int get_serial_no(int bus, int target_id, char *board_info)
int strain_get_matrix_rc(int bus, int target_id, char r, char c, unsigned int &elem, int regset=strain_regset_inuse, string *errorstring=NULL)
int strain_set_full_scale(int bus, int target_id, unsigned char channel, unsigned int full_scale, int regset=strain_regset_inuse, string *errorstring=NULL)
int strain_set_calib_bias(int bus, int target_id, string *errorstring=NULL)
int strain_get_amplifier_regs(int bus, int target_id, unsigned char channel, strain2_ampl_regs_t &regs, int regset=strain_regset_inuse, string *errorstring=NULL)
int strain_get_amplifier_gain_offset(int bus, int target_id, unsigned char channel, float &gain, uint16_t &offset, int regset=strain_regset_inuse, string *errorstring=NULL)
int strain_set_matrix_rc(int bus, int target_id, char r, char c, unsigned int elem, int regset=strain_regset_inuse, string *errorstring=NULL)
int strain_set_amplifier_regs(int bus, int target_id, unsigned char channel, const strain2_ampl_regs_t &regs, int regset=strain_regset_inuse, string *errorstring=NULL)
int strain_calibrate_offset2(int bus, int target_id, icubCanProto_boardType_t boardtype, const std::vector< strain2_ampl_discretegain_t > &gains, const std::vector< int16_t > &targets, string *errorstring=NULL)
void drv_sleep(double time)
#define BOARD_WAITING_ACK
#define BOARD_DOWNLOADING
int main(int argc, char *argv[])
int changeCanId(FirmwareUpdaterCore *core, QString device, QString id, QString board, QString canLine, QString canId, QString canIdNew)
int verifyOnSecondLevel_CANboard(FirmwareUpdaterCore *core, QString device, QString id, const QString &targetCANline, const QString &targetCANaddr, const QString &targetFWvers)
int queryOnSecondLevel_ETHboard(FirmwareUpdaterCore *core, QString device, QString id, const QString &targetIPaddr)
void printCanDevices(QList< sBoard > canBoards, QString onIPboard, bool slimprint)
int programCanDevice(FirmwareUpdaterCore *, QString device, QString id, QString board, QString canLine, QString canId, QString file, bool eraseEEprom)
int verifyCanDevices(QList< sBoard > canBoards, const QString &targetCANline, const QString &targetCANaddr, const QString &targetFWvers)
int getCanBoardVersion(FirmwareUpdaterCore *core, QString device, QString id, QString board, QString canLine, QString canId, bool save)
int printSecondLevelDevices(FirmwareUpdaterCore *, QString device, QString id, bool slimprint)
int changeBoardIp(FirmwareUpdaterCore *core, QString device, QString id, QString board, QString newipaddr)
int printThirdLevelDevices(FirmwareUpdaterCore *, QString device, QString id, QString board, bool forceMaintenance, bool forceApplication, bool slimprint)
int setBoardToApplication(FirmwareUpdaterCore *core, QString device, QString id, QString board)
int verifyOnThirdLevel_CANunderETH(FirmwareUpdaterCore *core, QString device, QString id, QString board, const QString &targetCANline, const QString &targetCANaddr, const QString &targetFWvers)
void removeApplicationLock()
int saveDatFileStrain2(FirmwareUpdaterCore *core, QString device, QString id, QString board, QString canLine, QString canId, bool eraseEEprom)
bool checkApplicationLock()
int setStrainSn(FirmwareUpdaterCore *core, QString device, QString id, QString board, QString canLine, QString canId, QString serialNumber)
int setBoardToMaintenance(FirmwareUpdaterCore *core, QString device, QString id, QString board)
int queryOnThirdLevel_CANunderETH(FirmwareUpdaterCore *core, QString device, QString id, const QString board, const QString &targetCANline, const QString &targetCANaddr)
int verifyOnSecondLevel_ETHboard(FirmwareUpdaterCore *core, QString device, QString id, const QString &targetIPaddr, const QString &targetFWvers)
int verifyOnSecondLevel(FirmwareUpdaterCore *core, QString device, QString id, const QString &targetIPaddr, const QString &targetCANline, const QString &targetCANaddr, const QString &targetFWvers)
int queryCanDevices(QList< sBoard > canBoards, const QString onIPboard, const QString &targetCANline, const QString &targetCANaddr)
int loadDatFileStrain2(FirmwareUpdaterCore *core, QString device, QString id, QString board, QString canLine, QString canId, QString file, bool eraseEEprom)
int programEthDevice(FirmwareUpdaterCore *, QString device, QString id, QString board, QString file)
@ action_setstrainft45gainsoffsets
@ action_forceapplication
@ action_setstraingainsspecificoffsets
@ action_setstrainft58gainsoffsets
@ action_setstraingainsoffsets
@ action_forcemaintenance
@ action_getcanboardversion
int queryOnSecondLevel_CANboard(FirmwareUpdaterCore *core, QString device, QString id, const QString &targetCANline, const QString &targetCANaddr)
int setStrainGainsOffsets(FirmwareUpdaterCore *core, QString device, QString id, QString board, QString canLine, QString canId, SensorModel model)
Copyright (C) 2008 RobotCub Consortium.