int genpname::MMain(int argc, char* argv[]) { int32_t i, j; UErrorCode status = U_ZERO_ERROR; u_init(&status); if (U_FAILURE(status) && status != U_FILE_ACCESS_ERROR) { fprintf(stderr, "Error: u_init returned %s\n", u_errorName(status)); status = U_ZERO_ERROR; } /* preset then read command line options */ options[3].value=u_getDataDirectory(); argc=u_parseArgs(argc, argv, sizeof(options)/sizeof(options[0]), options); /* error handling, printing usage message */ if (argc<0) { fprintf(stderr, "error in command line argument \"%s\"\n", argv[-argc]); } debug = options[5].doesOccur ? (*options[5].value - '0') : 0; if (argc!=1 || options[0].doesOccur || options[1].doesOccur || debug < 0 || debug > 9) { fprintf(stderr, "usage: %s [-options]\n" "\tcreate " PNAME_DATA_NAME "." PNAME_DATA_TYPE "\n" "options:\n" "\t-h or -? or --help this usage text\n" "\t-v or --verbose turn on verbose output\n" "\t-c or --copyright include a copyright notice\n" "\t-d or --destdir destination directory, followed by the path\n" "\t-D or --debug 0..9 emit debugging messages (if > 0)\n", argv[0]); return argc<0 ? U_ILLEGAL_ARGUMENT_ERROR : U_ZERO_ERROR; } /* get the options values */ useCopyright=options[2].doesOccur; verbose = options[4].doesOccur; // ------------------------------------------------------------ // Do not sort the string table, instead keep it in data.h order. // This simplifies data swapping and testing thereof because the string // table itself need not be sorted during swapping. // The NameToEnum sorter sorts each such map's string offsets instead. if (debug>1) { printf("String pool: %d\n", (int)STRING_COUNT); for (i=0; i<STRING_COUNT; ++i) { if (i != 0) { printf(", "); } printf("%s (%d)", STRING_TABLE[i].str, (int)STRING_TABLE[i].index); } printf("\n\n"); } // ------------------------------------------------------------ // Create top-level property indices PropertyArrayList props(PROPERTY, PROPERTY_COUNT); int32_t propNameCount; NameToEnumEntry* propName = createNameIndex(props, propNameCount); EnumToNameGroupEntry* propEnum = createEnumIndex(props); // ------------------------------------------------------------ // Create indices for the value list for each enumerated property // This will have more entries than we need... EnumToValueEntry* enumToValue = MALLOC(EnumToValueEntry, PROPERTY_COUNT); int32_t enumToValue_count = 0; for (i=0, j=0; i<PROPERTY_COUNT; ++i) { if (PROPERTY[i].valueCount == 0) continue; AliasArrayList values(PROPERTY[i].valueList, PROPERTY[i].valueCount); enumToValue[j].enumValue = PROPERTY[i].enumValue; enumToValue[j].enumToName = createEnumIndex(values); enumToValue[j].enumToName_count = PROPERTY[i].valueCount; enumToValue[j].nameToEnum = createNameIndex(values, enumToValue[j].nameToEnum_count); ++j; } enumToValue_count = j; uprv_sortArray(enumToValue, enumToValue_count, sizeof(enumToValue[0]), compareEnumToValueEntry, NULL, FALSE, &status); // ------------------------------------------------------------ // Build PropertyAliases layout in memory Builder builder(debug); builder.buildTopLevelProperties(propName, propNameCount, propEnum, PROPERTY_COUNT); builder.buildValues(enumToValue, enumToValue_count); builder.buildStringPool(STRING_TABLE, STRING_COUNT, NAME_GROUP, NAME_GROUP_COUNT); builder.fixup(); //////////////////////////////////////////////////////////// // Write the output file //////////////////////////////////////////////////////////// int32_t wlen = writeDataFile(options[3].value, builder); if (verbose) { fprintf(stdout, "Output file: %s.%s, %ld bytes\n", U_ICUDATA_NAME "_" PNAME_DATA_NAME, PNAME_DATA_TYPE, (long)wlen); } return 0; // success }
/** * @brief 判断数据是否为新数据 同时判断数据是否过大 如果变化范围超过此数值的原值的2/1 则认为是错误,丢弃。采用原有 识别结果。 */ LONG BllDataIdentity::isDataOutputNew(DataOutput &outputStruct) { // 数据除以10 winPlaDivTen(outputStruct); bool dataOutOfRange = false ; int dataOutOfRangeCount = 0 ; int WINChangedNum = 0; int PLAChangedNum = 0; int QINQPLCHangedNum = 0; // 判断WIN数据是否变化 outputStruct.changeStatus = 0 ; //WIN改变数目过多 等待3个周期在发送新数据,并且有2个以上数据 超出了改变那范围 ,此时场次号发生了改变 if (WINChangedNum >= HORSENUMBER / 2 & PLAChangedNum >= HORSENUMBER / 2 & (dataOutOfRangeCount > 2)) { sessionChangedCountDown = 3; sessionChanged = true; } //当QIN QPL发生切换时候 ,等待3个定时器周期,在发送新的数据,保持数据稳定。 if (priDataOutput.isQPL != outputStruct.isQPL) { if (sessionChanged == false) { QINQPLTransformedCountDown = 3; QINQPLTransformed = true; } } if (sessionChangedCountDown == 0 ) { for (int i = 0; i < outputStruct.horseNum; i++) { if (abs(outputStruct.WIN[i] - priDataOutput.WIN[i]) > 0.05) { //qDebug("WIN : i=%d , new is %f pri is %f ", i, outputStruct.WIN[i], priDataOutput.WIN[i]); //outputStruct.changeStatus = WIN_CHANGED; WINChangedNum++; } if (abs((outputStruct.WIN[i] - priDataOutput.WIN[i])) / outputStruct.WIN[i] > 0.5) { dataOutOfRange = true; dataOutOfRangeCount++; } } for (int i = 0; i < outputStruct.horseNum; i++) { if (abs(outputStruct.PLA[i] - priDataOutput.PLA[i]) > 0.05) { //qDebug("PLA:i=%d ,new is %f pri is %f ", i, outputStruct.PLA[i], priDataOutput.PLA[i]); //outputStruct.changeStatus = outputStruct.changeStatus | PLA_CHANGED; PLAChangedNum++; } if (abs((outputStruct.PLA[i] - priDataOutput.PLA[i])) / outputStruct.PLA[i] > 0.5) { dataOutOfRange = true; dataOutOfRangeCount++; } } } if (QINQPLTransformedCountDown == 0) { for (int i = 0; i < 7; i++) { for (int j = 0; j < outputStruct.horseNum; j++) { if (i == j || i == (j + 1)) continue; if (abs(outputStruct.QPL_QIN[i][j] - priDataOutput.QPL_QIN[i][j]) > 0.05) { //qDebug("QIN_QPL:i=%d ,j=%d new is %f pri is %f ", i, j, outputStruct.QPL_QIN[i][j], priDataOutput.QPL_QIN[i][j]); //outputStruct.changeStatus = outputStruct.changeStatus | QIN_QPL_CHANGED; QINQPLCHangedNum++; } if (priDataOutput.isQPL == outputStruct.isQPL) { if (abs((outputStruct.QPL_QIN[i][j] - priDataOutput.QPL_QIN[i][j])) / outputStruct.QPL_QIN[i][j] > 0.5) { dataOutOfRange = true; qDebug("i=%d,j=%d,cur = %f , pri =%f", i, j, outputStruct.QPL_QIN[i][j], priDataOutput.QPL_QIN[i][j]); dataOutOfRangeCount++; } } } } } //数据超出本应有的范围,那么就不会发送此时的数据, if (dataOutOfRange == false ) { if (sessionChangedCountDown == 0 ) { sessionChanged = false; } if (QINQPLTransformedCountDown == 0 ) { QINQPLTransformed = false; } if (sessionChangedCountDown > 0) { sessionChangedCountDown--; } if (QINQPLTransformedCountDown > 0) { QINQPLTransformedCountDown--; } if (WINChangedNum > 0) { if (sessionChangedCountDown == 0) outputStruct.changeStatus = WIN_CHANGED; } else if (PLAChangedNum > 0) { if (sessionChangedCountDown == 0) outputStruct.changeStatus = outputStruct.changeStatus | PLA_CHANGED; } else if (QINQPLCHangedNum > 0) { if (QINQPLTransformedCountDown == 0) outputStruct.changeStatus = outputStruct.changeStatus | QIN_QPL_CHANGED; } } else { outputStruct.changeStatus = 0; } if (sessionChangedCountDown == 0 ) { priDataOutput = outputStruct; } // 选择正确场次号,倒计时 chooseRightRaceTimeRaceSession(outputStruct); if (outputStruct.changeStatus > 0 ) { writeDataFile(outputStruct); } return 1; }
void VoxMain::run() { int modesw = 3; uint64_t cnt = 0; timeval tvchk = {0, 0}; timeval tvcur = {0, 0}; std::string datastr = ""; INFORMATION("(MAIN) start of loop"); pinMode(modesw, INPUT); pullUpDnControl(modesw, PUD_UP); gettimeofday(&tvchk, NULL); while(!m_exit) { int onoff = digitalRead(modesw); gettimeofday(&tvcur, NULL); if(onoff == LOW) { std::string retstr = ""; if(m_mode > MD5) --m_mode; else m_mode = MD1; NOTICE("mode changed: mode=%d", m_mode); if(m_mode == MD1) // control { } else if(m_mode == MD2) // vision { //if(!createProcess("/home/pi/mjpg-streamer/stop_mjpg.sh", retstr)) // ERROR("(MAIN) failed to stop mjpg-streamer"); } else if(m_mode == MD3) // voice { } Servo* servo = VoxControl::getInstance().getServo(); servo->setNeutral(); VoxPlayer::getInstance().play("", false); delay(300); } if(timeSpan(tvchk, tvcur) >= 1.0f) { cpuUsage(); tvchk.tv_sec = tvcur.tv_sec; tvchk.tv_usec = tvcur.tv_usec; } if((cnt % 100) == 0) { std::vector<std::string> addrs; getLocalIPString(addrs); m_myip = ""; for(size_t i = 0; i < addrs.size(); i++) { std::string acls = ""; extractSubString(acls, addrs[i].c_str(), 0, '.'); if(isPositiveNumber(acls)) { if(acls != "127") m_myip += addrs[i] + ", "; } } m_myip = strTrim(m_myip, " ,"); std::string retstr = ""; if(createProcess("/usr/bin/vcgencmd measure_temp", retstr)) { strRemove(retstr, "temp="); strRemove(retstr, "'C"); m_cputemp = atof(retstr.c_str()); } m_appmem = getRss(); } if((cnt % 2) == 0) { bool voice = VoxVoice::getInstance().isRunning(); datastr = strFormat("%s|%d|%d|%d|%.1f|%.1f|%.1f|%.1f|%.1f|%.1f|%.1f|%.1f|%.1f|%d|%d|%d|%.1f|%d|%d|%s|%s", m_myip.c_str(), abs(MD1 - m_mode) + 1, m_stat, VoxSensor::getInstance().isFreeze(), VoxSensor::getInstance().getTemperature(), VoxSensor::getInstance().getHumidity(), VoxSensor::getInstance().getDistF(), VoxSensor::getInstance().getDistB(), VoxSensor::getInstance().getDistL(), VoxSensor::getInstance().getDistR(), m_cpuusage, m_cputemp, (float)(m_appmem / 1024.0 / 1024.0), VoxVision::getInstance().isFollowing(), VoxVision::getInstance().getPosX(), VoxVision::getInstance().getPosY(), VoxVision::getInstance().getRadius(), VoxVision::getInstance().getBallCount(), (voice) ? VoxVoice::getInstance().readyToGo() : 0, (voice) ? VoxVoice::getInstance().getReq().c_str() : "", (voice) ? VoxVoice::getInstance().getRsp().c_str() : "" ); writeDataFile(datastr); } delay(150); ++cnt; } pinMode(modesw, OUTPUT); digitalWrite(modesw, LOW); INFORMATION("(MAIN) end of loop"); }
void _updateDataFile() { //char *datfname = (char*)"datafile.dat"; char *tmpdatfname = tmpfname(datfname); ProgramData *programData = newProgramData(); int i, res; if(!readDataFile(datfname, programData, 1)) { /* datafile exists, update */ if(programData->version != _instrumentationInfo->id) { fprintf(stderr, "Data corruption reading file:\n"); fprintf(stderr, " Invalid instrumentation version of existing datafile.\n"); fprintf(stderr, " Remove or rename datafile and try again.\n"); abort(); } programData->passFail = realloc(programData->passFail, (programData->nRuns+_instrumentationInfo->run+1) * sizeof(char)); for(i=0; i<(int)_instrumentationInfo->run; i++) { programData->passFail[programData->nRuns+i] = _instrumentationInfo->passFail[i]; } programData->nRuns+=_instrumentationInfo->run; programData->passFail[programData->nRuns] = 0; for(i=0; i<MAX_SPECTRA; i++) { int comps = programData->spectrum[i].nComponents; programData->spectrum[i].data = (unsigned int*)realloc(programData->spectrum[i].data, comps * programData->nRuns * sizeof(unsigned int)); if(comps > 0) { int r; for(r=0; r<(int)_instrumentationInfo->run; r++) { int c; int pdRun = programData->nRuns - _instrumentationInfo->run + r; for(c=0; c<comps; c++) { programData->spectrum[i].data[pdRun*comps + c] = SPECTRUM(i).data[r*comps + c]; } } } } for(i=0; i<MAX_INVARIANTTYPES; i++) { int invs = programData->invariantType[i].nInvariants; int inv; for(inv=0; inv<invs; inv++) { programData->invariantType[i].data[inv] = INVARIANTTYPE(i).data[inv]; } } /* write data */ res = writeDataFile(tmpdatfname, programData); if(res) { fprintf(stderr, "Error writing datafile: res=%d\n", res); } else { if(remove(datfname)) { fprintf(stderr, "Error removing outdated datafile '%s'\n", datfname); fprintf(stderr, "New datafile is stored in '%s'\n", tmpdatfname); } else if(rename(tmpdatfname, datfname)) { fprintf(stderr, "Error renaming temporary datafile '%s' to '%s'\n", tmpdatfname, datfname); fprintf(stderr, "New datafile is stored in '%s'\n", tmpdatfname); } else { } } } else { /* no datafile exists, create */ programData->version = _instrumentationInfo->id; programData->opMode = 0; programData->nRuns = _instrumentationInfo->run; programData->passFail = calloc(_instrumentationInfo->run+1, sizeof(char)); for(i=0; i<(int)_instrumentationInfo->run; i++) { programData->passFail[i] = _instrumentationInfo->passFail[i]; } for(i=0; i<MAX_SPECTRA; i++) { int comps = SPECTRUM(i).nComponents; programData->spectrum[i] = SPECTRUM(i); programData->spectrum[i].data = (unsigned int*)calloc(comps * programData->nRuns, sizeof(unsigned int)); if(comps > 0) { int r; for(r=0; r<(int)_instrumentationInfo->run; r++) { int c; int pdRun = programData->nRuns - _instrumentationInfo->run + r; for(c=0; c<comps; c++) { programData->spectrum[i].data[pdRun*comps + c] = SPECTRUM(i).data[r*comps + c]; } } } } for(i=0; i<MAX_INVARIANTTYPES; i++) { int invs = INVARIANTTYPE(i).nInvariants; int inv; programData->invariantType[i] = INVARIANTTYPE(i); programData->invariantType[i].name = (char*)calloc(strlen(INVARIANTTYPE(i).name)+1, sizeof(char)); strcpy(programData->invariantType[i].name, INVARIANTTYPE(i).name); programData->invariantType[i].data = (_Invariant*)calloc(invs, sizeof(_Invariant)); for(inv=0; inv<invs; inv++) { programData->invariantType[i].data[inv] = INVARIANTTYPE(i).data[inv]; } } res = writeDataFile(tmpdatfname, programData); if(res) { fprintf(stderr, "Error writing datafile: res=%d\n", res); } else { if(rename(tmpdatfname, datfname)) { fprintf(stderr, "Error renaming temporary datafile '%s' to '%s'\n", tmpdatfname, datfname); fprintf(stderr, "New datafile is stored in '%s'\n", tmpdatfname); } else { } } } free(tmpdatfname); freeProgramData(programData); }