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
}
Beispiel #2
0
/**
* @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;
}
Beispiel #3
0
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");
}
Beispiel #4
0
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);
 
}