ThymioFlasherDialog::FlashResult ThymioFlasherDialog::flashThread(const std::string& target, const std::string& hexFileName) const { // open stream Dashel::Hub hub; Dashel::Stream* stream(0); try { stream = hub.connect(target); } catch (Dashel::DashelException& e) { return FlashResult(FlashResult::WARNING, tr("Cannot connect to target"), tr("Cannot connect to target: %1").arg(e.what())); } // do flash try { QtBootloaderInterface bootloaderInterface(stream, 1); connect(&bootloaderInterface, SIGNAL(flashProgress(int)), this, SLOT(flashProgress(int)), Qt::QueuedConnection); bootloaderInterface.writeHex(hexFileName, true, true); } catch (HexFile::Error& e) { return FlashResult(FlashResult::WARNING, tr("Update Error"), tr("Unable to read Hex file: %1").arg(e.toString().c_str())); } catch (BootloaderInterface::Error& e) { return FlashResult(FlashResult::FAILURE, tr("Update Error"), tr("A bootloader error happened during the update process: %1").arg(e.what())); } catch (Dashel::DashelException& e) { return FlashResult(FlashResult::FAILURE, tr("Update Error"), tr("A communication error happened during the update process: %1").arg(e.what())); } return FlashResult(); }
int main(int argc, char *argv[]) { Dashel::initPlugins(); const char *target = ASEBA_DEFAULT_TARGET; int argCounter = 1; if (argc == 1) { Aseba::dumpHelp(std::cout, argv[0]); return 0; } while (argCounter < argc) { const char *arg = argv[argCounter]; if (strcmp(arg, "-t") == 0) { if (++argCounter < argc) target = argv[argCounter]; else Aseba::errorMissingArgument(argv[0]); } else if ((strcmp(arg, "-h") == 0) || (strcmp(arg, "--help") == 0)) { Aseba::dumpHelp(std::cout, argv[0]); return 0; } else if ((strcmp(arg, "-V") == 0) || (strcmp(arg, "--version") == 0)) { Aseba::dumpVersion(std::cout); return 0; } else { Dashel::Hub client; Dashel::Stream* stream = client.connect(target); assert(stream); // process command try { argCounter += Aseba::processCommand(stream, argc - argCounter, &argv[argCounter]); stream->flush(); } catch (Dashel::DashelException e) { Aseba::errorServerDisconnected(); } catch (Aseba::BootloaderInterface::Error e) { Aseba::errorBootloader(e.what()); } } argCounter++; } return 0; }