void CommandLineParser::parse(const QStringList &commandLine) { m_profile.clear(); m_startCommit.clear(); m_maxDuration = 0; m_jobCount = 0; m_log = false; m_commandLine = commandLine; Q_ASSERT(!m_commandLine.isEmpty()); m_command = m_commandLine.takeFirst(); while (!m_commandLine.isEmpty()) { const QString arg = m_commandLine.takeFirst(); if (arg == profileOption()) assignOptionArgument(arg, m_profile); else if (arg == startCommitOption()) assignOptionArgument(arg, m_startCommit); else if (arg == jobCountOption()) assignOptionArgument(arg, m_jobCount); else if (arg == maxDurationoption()) parseDuration(); else if (arg == logOption()) m_log = true; else throw ParseException(QString::fromLocal8Bit("Unknown parameter '%1'").arg(arg)); } if (m_profile.isEmpty()) throw ParseException("No profile given."); if (m_startCommit.isEmpty()) throw ParseException("No start commit given."); }
void PlanConfigParser::parse(Parsers::Config& cfg, std::string id, IMC::Dubin& man) { // Get configurable parameters parseSpeed(cfg, id, man); parseDuration(cfg, id, man); parseTimeout(cfg, id, man); parseZ(cfg, id, man); parseZUnits(cfg, id, man); }
void PlanConfigParser::parse(Parsers::Config& cfg, std::string id, IMC::StationKeeping& man) { // Get configurable parameters parseCoordinate(cfg, id, man); parseSpeed(cfg, id, man); parseZ(cfg, id, man); parseZUnits(cfg, id, man); parseDuration(cfg, id, man); cfg.get(id, "Radius (meters)", "15.0", man.radius); }
void PlanConfigParser::parse(Parsers::Config& cfg, std::string id, IMC::PopUp& man) { parseCoordinate(cfg, id, man); parseSpeed(cfg, id, man); parseTimeout(cfg, id, man); parseDuration(cfg, id, man); parseZ(cfg, id, man); parseZUnits(cfg, id, man); cfg.get(id, "Radius (meters)", "15.0", man.radius); cfg.get(id, "Flags", "0x00", man.flags); }
TimeVal::TimeVal (const std::string &s, const parseformat fmt) { struct tm conv; time_t res; memset(&parser_context,0,sizeof(parser_context)); reset(); setBuffer(s); initParser(); switch (fmt) { case XML_DATETIME: parseDateTime(); break; case XML_DURATION: parseDuration(); break; default: throw TimeValException("unknown XML TimeVal format"); break; } xmlnormalize(); memset(&conv,0,sizeof(conv)); conv.tm_sec = parser_context.fValue[Second]; conv.tm_min = parser_context.fValue[Minute]; conv.tm_hour= parser_context.fValue[Hour]; conv.tm_mday= parser_context.fValue[Day]; if (parser_context.fValue[Month] > 0) { conv.tm_mon = parser_context.fValue[Month]-1; } conv.tm_year = parser_context.fValue[CentYear]; if (conv.tm_year > 1900) conv.tm_year -= 1900; conv.tm_isdst = 0; if (fmt == XML_DURATION) { conv.tm_year += 70; // start of epoch added to the duration conv.tm_mday += 1; conv.tm_hour += 1; } tv_sec = mktime (&conv); tv_usec = parser_context.fValue[MiliSecond] * 1000; m_tz = gmt; // not give we get here, destructor does same thing to be sure }
void PlanConfigParser::parse(Parsers::Config& cfg, std::string id, IMC::Loiter& man) { // Get configurable parameters parseCoordinate(cfg, id, man); parseSpeed(cfg, id, man); parseTimeout(cfg, id, man); parseDuration(cfg, id, man); parseZ(cfg, id, man); parseZUnits(cfg, id, man); int8_t type; cfg.get(id, "Loiter Type", "0", type); switch (type) { case 1: man.type = IMC::Loiter::LT_RACETRACK; break; case 2: man.type = IMC::Loiter::LT_HOVER; break; case 3: man.type = IMC::Loiter::LT_EIGHT; break; case 0: default: man.type = IMC::Loiter::LT_CIRCULAR; break; } std::string ldir; cfg.get(id, "Loiter Direction", "Clock", ldir); if (ldir == "Clockwise") man.direction = IMC::Loiter::LD_CLOCKW; else man.direction = IMC::Loiter::LD_CCLOCKW; cfg.get(id, "Radius (meters)", "50", man.radius); parseAngle(cfg, id, "Bearing (degrees)", man.bearing, 0.0); cfg.get(id, "Length (meters)", "100", man.length); }
void PlanConfigParser::parse(Parsers::Config& cfg, std::string id, IMC::CompassCalibration& man) { // Get configurable parameters parseCoordinate(cfg, id, man); parseSpeed(cfg, id, man); parseTimeout(cfg, id, man); parseDuration(cfg, id, man); parseZ(cfg, id, man); parseZUnits(cfg, id, man); std::string ldir; cfg.get(id, "Loiter Direction", "Clock", ldir); if (ldir == "Clockwise") man.direction = IMC::Loiter::LD_CLOCKW; else man.direction = IMC::Loiter::LD_CCLOCKW; cfg.get(id, "Radius (meters)", "50", man.radius); cfg.get(id, "Amplitude (meters)", "1", man.amplitude); parseAngle(cfg, id, "Pitch (degrees)", man.pitch, (fp32_t)0.0); }
int main (int argc, char **argv) { struct CCDdev device = {"/dev/ccda"}; struct CCDexp exposure = {&device}; unsigned short *pixelRow, *end; int overage; unsigned avgPixel = 0; char *outFn; FILE *outFile; const static struct option options[] = { {"autoexpose", 2, NULL, 'a'}, {"binning", 1, NULL, 'b'}, {"bin", 1, NULL, 'b'}, {"offset", 1, NULL, 'o'}, {"origin", 1, NULL, 'o'}, {"size", 1, NULL, 's'}, {"dark", 0, NULL, 'D'}, // {"depth", 1, NULL, 'd'}, {"nowipe", 0, NULL, 'w'}, {"noclear", 0, NULL, 'c'}, {"noaccumulation", 0, NULL, 'A'}, {"tdi", 0, NULL, 't'}, {"TDI", 0, NULL, 't'}, {"tiff", 2, NULL, 'T'}, {"TIFF", 2, NULL, 'T'}, {"FITS", 0, NULL, 'F'}, {"fits", 0, NULL, 'F'}, {"JPEG", 0, NULL, 'J'}, {"jpeg", 0, NULL, 'J'}, {"camera", 1, NULL, 'n'}, {"debug", 2, NULL, 'S'}, {"help", 0, NULL, 'h'}, {NULL} }; progName = basename (argv[0]); if (write (progressFD, "", 0)) progressFD=fileno(stdout); for (;;) { int optc = getopt_long_only (argc, argv, "", options, 0); switch(optc) { case -1: goto gotAllOpts; case 'a': //auto exposure exposureSecs = 5*60; //default to 5 minute max exposure time if (optarg) { char *terminator = optarg; if (*optarg != ',') terminator=parseDuration (optarg, &exposureSecs); switch (*terminator) { case ',': switch(*(terminator=parseInt (terminator+1, &maxAutoSignal))) { case ',': if (*parseInt(terminator+1, &adcBias)) syntaxErr("Junk text after min A/D counts!"); case '\0': break; default: syntaxErr("Junk text after autoexposure max A/D count target!"); } case '\0': break; default: syntaxErr ("Junk text after autoexposure max duration!"); } if (exposureSecs < 0.002) syntaxErr ("autoexposure limit must be > 2ms"); } exposureSecs = -exposureSecs; break; case 'b': //XY binning parseXYoptArg (&binX, &binY); if (!validBin(binX) || !validBin(binY)) syntaxErr ("Binning factors must be between 1 and 4!"); break; case 'o': //origin offset parseXYoptArg (&offsetX, &offsetY); if (offsetX < 0 || offsetY < 0) syntaxErr ("Negative origin offset specified!"); break; case 's': //image size parseXYoptArg (&sizeX, &sizeY); if (sizeX < 0 || sizeY < 0) syntaxErr ("Negative image size specified!"); break; case 'd': //depth if (*parseInt (optarg, &CCDdepth)) syntaxErr ("invalid text after depth option"); if (CCDdepth <= 0) syntaxErr ("Negative # of depth bits specified"); break; case 'S': //display debuging status info debug = optarg ? atoi(optarg) : 1; break; case 'w': //suppress CCD wipe exposure.flags |= CCD_EXP_FLAGS_NOWIPE_FRAME; break; case 'c': //suppress image clear exposure.flags |= CCD_EXP_FLAGS_NOCLEAR_FRAME; break; case 't': //time delay integration exposure.flags |= CCD_EXP_FLAGS_TDI; break; case 'A': //no binning accumulation exposure.flags |= CCD_EXP_FLAGS_NOBIN_ACCUM; break; case 'D': //dard frame exposure.flags |= CCD_EXP_FLAGS_NOOPEN_SHUTTER; break; case 'n': //camera device file device.filename[NAME_STRING_LENGTH]='\0'; strncpy (device.filename, optarg, NAME_STRING_LENGTH-1); break; case 'T': //generate TIFF file assignType(TIFFfile); if (optarg && toupper(*optarg)=='D') setenv ("TIFF_COMPRESSION", "32946", 1); break; case 'F': //generate FITS file assignType(FITSfile); break; case 'J': //generate JPEG file assignType(JPEGfile); break; case 'h': usage(); return 0; default: syntaxErr("invalid option: %s", argv[optind]); } } gotAllOpts: //on to arguments (exposure time and output file name) if (exposureSecs == 0.0) { if (!argv[optind]) syntaxErr ("Missing Exposure Time"); if (*parseDuration (argv[optind], &exposureSecs)) syntaxErr ("Junk text after exposure duration"); if (exposureSecs < 0.001) syntaxErr ("Exposure duration must be >= 0.001 seconds"); ++optind; } if (!CCDconnect (&device)) { fprintf (stderr, "Cannot open camera device: %s\n", device.filename); return 1; } printf ("%s: %dx%d pixel %d-bit CCD camera\n", device.camera, device.width, device.height, device.depth); outFn = argv[optind]; if (outFn) { char *lastDot; outFile = fopen (outFn, "w"); if (!outFile) { perror(outFn); return errno; } if (outputFileType == unspecifiedFile) { lastDot = strrchr (outFn, '.'); if (lastDot) switch (toupper(lastDot[1])) { case 'J': outputFileType = JPEGfile; break; case 'T': outputFileType = TIFFfile; break; case 'F': outputFileType = FITSfile; break; } } }else //trying to write image to stdout syntaxErr ("Missing output image filename!"); exposure.width = sizeX ? sizeX : device.width; exposure.height = sizeY ? sizeY : device.height; exposure.xoffset = offsetX; exposure.yoffset = offsetY; overage = device.width - exposure.width - offsetX; if (overage < 0) exposure.width += overage; overage = device.height - exposure.height - offsetY; if (overage < 0) exposure.height += overage; exposure.xbin = binX; exposure.ybin = binY; exposure.dacBits = CCDdepth ? CCDdepth : device.dacBits; if (exposure.dacBits < 8 || exposure.dacBits > 16) syntaxErr ("Pixel depth of %d bits is not currently supported!\n", exposure.dacBits); if (exposureSecs < 0.0) { exposureSecs = -exposureSecs; if (debug) printf( "Calibrating <= %g second exposure between %d and %d A/D counts...\n", exposureSecs, maxAutoSignal, adcBias); exposure.msec = exposureSecs * 1000.0 + 0.5; if (optimizeExposure (&exposure)) { fprintf (stderr, "Autoexposure calibration failed!\n"); return 6; } }else exposure.msec = exposureSecs * 1000.0 + 0.5; exposureSecs = (double)exposure.msec / 1000.0; printf ("Exposing %dx%d pixel %d-bit image for %g seconds\n", exposure.width/binX, exposure.height/binY, exposure.dacBits, exposureSecs); expose (&exposure); /* Write out the image in the specified format */ switch (outputFileType) { case unspecifiedFile: outputFileType = TIFFfile; //default to TIFF case TIFFfile: { TIFF *tif = TIFFFdOpen (fileno(outFile), outFn, "w"); if (!tif || saveTIFF (tif, &exposure)) imageWrtFailed(); TIFFClose(tif); } break; case FITSfile: if (saveFITS (fileno(outFile), &exposure)) imageWrtFailed(); break; default: syntaxErr("Unsupported image file type: %s",fileTypeName[outputFileType]); } printf ("%s: %s Upload Complete\n", outFn, fileTypeName[outputFileType]); return 0; }
void AnalyzeTask::updateInfo(AudioFileModel &audioFile, bool &skipNext, QPair<quint32, quint32> &id_val, quint32 &coverType, QByteArray &coverData, const QString &key, const QString &value) { //qWarning("'%s' -> '%s'", MUTILS_UTF8(key), MUTILS_UTF8(value)); /*New Stream*/ if(IS_KEY("Gen_ID") || IS_KEY("Aud_ID")) { if(value.isEmpty()) { skipNext = false; } else { //We ignore all ID's, except for the lowest one! bool ok = false; unsigned int id = value.toUInt(&ok); if(ok) { if(IS_KEY("Gen_ID")) { id_val.first = qMin(id_val.first, id); skipNext = (id > id_val.first); } if(IS_KEY("Aud_ID")) { id_val.second = qMin(id_val.second, id); skipNext = (id > id_val.second); } } else { skipNext = true; } } if(skipNext) { qWarning("Skipping info for non-primary stream!"); } return; } /*Skip or empty?*/ if((skipNext) || value.isEmpty()) { return; } /*Playlist file?*/ if(IS_KEY("Aud_Source")) { skipNext = true; audioFile.techInfo().setContainerType(QString()); audioFile.techInfo().setAudioType(QString()); qWarning("Skipping info for playlist file!"); return; } /*General Section*/ if(IS_SEC("Gen")) { if(IS_KEY("Gen_Format")) { audioFile.techInfo().setContainerType(value); } else if(IS_KEY("Gen_Format_Profile")) { audioFile.techInfo().setContainerProfile(value); } else if(IS_KEY("Gen_Title") || IS_KEY("Gen_Track")) { audioFile.metaInfo().setTitle(value); } else if(IS_KEY("Gen_Duration")) { unsigned int tmp = parseDuration(value); if(tmp > 0) audioFile.techInfo().setDuration(tmp); } else if(IS_KEY("Gen_Artist") || IS_KEY("Gen_Performer")) { audioFile.metaInfo().setArtist(value); } else if(IS_KEY("Gen_Album")) { audioFile.metaInfo().setAlbum(value); } else if(IS_KEY("Gen_Genre")) { audioFile.metaInfo().setGenre(value); } else if(IS_KEY("Gen_Released_Date") || IS_KEY("Gen_Recorded_Date")) { unsigned int tmp = parseYear(value); if(tmp > 0) audioFile.metaInfo().setYear(tmp); } else if(IS_KEY("Gen_Comment")) { audioFile.metaInfo().setComment(value); } else if(IS_KEY("Gen_Track/Position")) { bool ok = false; unsigned int tmp = value.toUInt(&ok); if(ok) audioFile.metaInfo().setPosition(tmp); } else if(IS_KEY("Gen_Cover") || IS_KEY("Gen_Cover_Type")) { if(coverType == UINT_MAX) { coverType = 0; } } else if(IS_KEY("Gen_Cover_Mime")) { QString temp = FIRST_TOK(value); for (quint32 i = 0; MIME_TYPES[i].type; i++) { if (temp.compare(QString::fromLatin1(MIME_TYPES[i].type), Qt::CaseInsensitive) == 0) { coverType = i; break; } } } else if(IS_KEY("Gen_Cover_Data")) { if(!coverData.isEmpty()) coverData.clear(); coverData.append(QByteArray::fromBase64(FIRST_TOK(value).toLatin1())); } else { qWarning("Unknown key '%s' with value '%s' found!", MUTILS_UTF8(key), MUTILS_UTF8(value)); } return; } /*Audio Section*/ if(IS_SEC("Aud")) { if(IS_KEY("Aud_Format")) { audioFile.techInfo().setAudioType(value); } else if(IS_KEY("Aud_Format_Profile")) { audioFile.techInfo().setAudioProfile(value); } else if(IS_KEY("Aud_Format_Version")) { audioFile.techInfo().setAudioVersion(value); } else if(IS_KEY("Aud_Channel(s)")) { bool ok = false; unsigned int tmp = value.toUInt(&ok); if(ok) audioFile.techInfo().setAudioChannels(tmp); } else if(IS_KEY("Aud_SamplingRate")) { bool ok = false; unsigned int tmp = value.toUInt(&ok); if(ok) audioFile.techInfo().setAudioSamplerate(tmp); } else if(IS_KEY("Aud_BitDepth")) { bool ok = false; unsigned int tmp = value.toUInt(&ok); if(ok) audioFile.techInfo().setAudioBitdepth(tmp); } else if(IS_KEY("Aud_Duration")) { unsigned int tmp = parseDuration(value); if(tmp > 0) audioFile.techInfo().setDuration(tmp); } else if(IS_KEY("Aud_BitRate")) { bool ok = false; unsigned int tmp = value.toUInt(&ok); if(ok) audioFile.techInfo().setAudioBitrate(tmp/1000); } else if(IS_KEY("Aud_BitRate_Mode")) { if(!value.compare("CBR", Qt::CaseInsensitive)) audioFile.techInfo().setAudioBitrateMode(AudioFileModel::BitrateModeConstant); if(!value.compare("VBR", Qt::CaseInsensitive)) audioFile.techInfo().setAudioBitrateMode(AudioFileModel::BitrateModeVariable); } else if(IS_KEY("Aud_Encoded_Library")) { audioFile.techInfo().setAudioEncodeLib(value); } else { qWarning("Unknown key '%s' with value '%s' found!", MUTILS_UTF8(key), MUTILS_UTF8(value)); } return; } /*Section not recognized*/ qWarning("Unknown section: %s", MUTILS_UTF8(key)); }
void AnalyzeTask::updateInfo(AudioFileModel &audioFile, bool *skipNext, unsigned int *id_val, cover_t *coverType, QByteArray *coverData, const QString &key, const QString &value) { //qWarning("'%s' -> '%s'", QUTF8(key), QUTF8(value)); /*New Stream*/ if(IS_KEY("Gen_ID") || IS_KEY("Aud_ID")) { if(value.isEmpty()) { *skipNext = false; } else { //We ignore all ID's, except for the lowest one! bool ok = false; unsigned int id = value.toUInt(&ok); if(ok) { if(IS_KEY("Gen_ID")) { id_val[0] = qMin(id_val[0], id); *skipNext = (id > id_val[0]); } if(IS_KEY("Aud_ID")) { id_val[1] = qMin(id_val[1], id); *skipNext = (id > id_val[1]); } } else { *skipNext = true; } } if(*skipNext) { qWarning("Skipping info for non-primary stream!"); } return; } /*Skip or empty?*/ if((*skipNext) || value.isEmpty()) { return; } /*Playlist file?*/ if(IS_KEY("Aud_Source")) { *skipNext = true; audioFile.techInfo().setContainerType(QString()); audioFile.techInfo().setAudioType(QString()); qWarning("Skipping info for playlist file!"); return; } /*General Section*/ if(IS_SEC("Gen")) { if(IS_KEY("Gen_Format")) { audioFile.techInfo().setContainerType(value); } else if(IS_KEY("Gen_Format_Profile")) { audioFile.techInfo().setContainerProfile(value); } else if(IS_KEY("Gen_Title") || IS_KEY("Gen_Track")) { audioFile.metaInfo().setTitle(value); } else if(IS_KEY("Gen_Duration")) { unsigned int tmp = parseDuration(value); if(tmp > 0) audioFile.techInfo().setDuration(tmp); } else if(IS_KEY("Gen_Artist") || IS_KEY("Gen_Performer")) { audioFile.metaInfo().setArtist(value); } else if(IS_KEY("Gen_Album")) { audioFile.metaInfo().setAlbum(value); } else if(IS_KEY("Gen_Genre")) { audioFile.metaInfo().setGenre(value); } else if(IS_KEY("Gen_Released_Date") || IS_KEY("Gen_Recorded_Date")) { unsigned int tmp = parseYear(value); if(tmp > 0) audioFile.metaInfo().setYear(tmp); } else if(IS_KEY("Gen_Comment")) { audioFile.metaInfo().setComment(value); } else if(IS_KEY("Gen_Track/Position")) { bool ok = false; unsigned int tmp = value.toUInt(&ok); if(ok) audioFile.metaInfo().setPosition(tmp); } else if(IS_KEY("Gen_Cover") || IS_KEY("Gen_Cover_Type")) { if(*coverType == coverNone) { *coverType = coverJpeg; } } else if(IS_KEY("Gen_Cover_Mime")) { QString temp = FIRST_TOK(value); if(!temp.compare("image/jpeg", Qt::CaseInsensitive)) *coverType = coverJpeg; else if(!temp.compare("image/png", Qt::CaseInsensitive)) *coverType = coverPng; else if(!temp.compare("image/gif", Qt::CaseInsensitive)) *coverType = coverGif; } else if(IS_KEY("Gen_Cover_Data")) { if(!coverData->isEmpty()) coverData->clear(); coverData->append(QByteArray::fromBase64(FIRST_TOK(value).toLatin1())); } else { qWarning("Unknown key '%s' with value '%s' found!", QUTF8(key), QUTF8(value)); } return; } /*Audio Section*/ if(IS_SEC("Aud")) { if(IS_KEY("Aud_Format")) { audioFile.techInfo().setAudioType(value); } else if(IS_KEY("Aud_Format_Profile")) { audioFile.techInfo().setAudioProfile(value); } else if(IS_KEY("Aud_Format_Version")) { audioFile.techInfo().setAudioVersion(value); } else if(IS_KEY("Aud_Channel(s)")) { bool ok = false; unsigned int tmp = value.toUInt(&ok); if(ok) audioFile.techInfo().setAudioChannels(tmp); } else if(IS_KEY("Aud_SamplingRate")) { bool ok = false; unsigned int tmp = value.toUInt(&ok); if(ok) audioFile.techInfo().setAudioSamplerate(tmp); } else if(IS_KEY("Aud_BitDepth")) { bool ok = false; unsigned int tmp = value.toUInt(&ok); if(ok) audioFile.techInfo().setAudioBitdepth(tmp); } else if(IS_KEY("Aud_Duration")) { unsigned int tmp = parseDuration(value); if(tmp > 0) audioFile.techInfo().setDuration(tmp); } else if(IS_KEY("Aud_BitRate")) { bool ok = false; unsigned int tmp = value.toUInt(&ok); if(ok) audioFile.techInfo().setAudioBitrate(tmp/1000); } else if(IS_KEY("Aud_BitRate_Mode")) { if(!value.compare("CBR", Qt::CaseInsensitive)) audioFile.techInfo().setAudioBitrateMode(AudioFileModel::BitrateModeConstant); if(!value.compare("VBR", Qt::CaseInsensitive)) audioFile.techInfo().setAudioBitrateMode(AudioFileModel::BitrateModeVariable); } else if(IS_KEY("Aud_Encoded_Library")) { audioFile.techInfo().setAudioEncodeLib(value); } else { qWarning("Unknown key '%s' with value '%s' found!", QUTF8(key), QUTF8(value)); } return; } /*Section not recognized*/ qWarning("Unknown section: %s", QUTF8(key)); }
void PlanConfigParser::parse(Parsers::Config& cfg, std::string id, IMC::IdleManeuver& man) { parseDuration(cfg, id, man); }