コード例 #1
0
AnalogsTable AnalogsTableGenerator::generateTable(const int &groupNum,
                                                  const int &analogsNum,
                                                  const int &maxProdNumFromSHG)
{
    if(groupNum <= 0 || analogsNum<= 0 || maxProdNumFromSHG<= 0)
    {
        return AnalogsTable();
    }
    int maxProdNum = maxProdNumFromSHG;
    if(groupNum * (analogsNum + 1) > maxProdNumFromSHG)
    {
        qWarning() << "Warning in AnalogsTableGenerator::generateTable "
                   << "maxProdNumFromSHG is small for this groupNum and analogsNum";

        maxProdNum = groupNum * (analogsNum + 1);
        qWarning() << "set maxProdNum = " << maxProdNum;
    }
    const QString prodPrefix = "prod_";
    AnalogsTable table;
    QList<int> past;
    for(int group = 0; group < groupNum; group++)
    {
        int randProdNum = 0;
        while(true)
        {
            randProdNum =  rand() % maxProdNum;
            if(!past.contains(randProdNum))
            {
                past.append(randProdNum);
                break;
            }
        }
        Analogs analogs(ID(prodPrefix + QString::number(randProdNum)));
        for(int an = 0; an < analogsNum; an++)
        {
            int randAnNum = 0;
            while(true)
            {
                randAnNum =  rand() % maxProdNum;
                if(!past.contains(randAnNum))
                {
                    past.append(randAnNum);
                    break;
                }
            }
            analogs.addAnalog(ID(prodPrefix + QString::number(randAnNum)));
        }
        table.addAnalogs(analogs);
    }
    return table;
}
コード例 #2
0
ファイル: Vrpn.cpp プロジェクト: Michael-Lfx/vrjuggler
bool Vrpn::sample()
{
   if ( mTrackerNumber > 0 )
   {
      std::vector<PositionData> positions(mTrackerNumber);
      vpr::Guard<vpr::Mutex> g(mTrackerMutex);

      for ( int i = 0; i < mTrackerNumber; ++i )
      {
         gmtl::Matrix44f pos;
         gmtl::setRot(pos, mQuats[i]);
         gmtl::setTrans(pos, mPositions[i]);

         positions[i].setValue(pos);
         positions[i].setTime();
      }

      addPositionSample(positions);
   }

   if ( mButtonNumber > 0 )
   {
      std::vector<DigitalData> buttons(mButtonNumber);
      vpr::Guard<vpr::Mutex> g(mButtonMutex);

      for ( int i = 0; i < mButtonNumber; ++i )
      {
         buttons[i] = mButtons[i];
         buttons[i].setTime();
      }

      addDigitalSample(buttons);
   }

   if ( mAnalogNumber > 0 )
   {
      std::vector<AnalogData> analogs(mAnalogNumber);
      vpr::Guard<vpr::Mutex> g(mAnalogMutex);

      for ( int i = 0; i < mAnalogNumber; ++i )
      {
         analogs[i] = mAnalogs[i];
         analogs[i].setTime();
      }

      addAnalogSample(analogs);
   }

   return true;
}
コード例 #3
0
ファイル: jvsdev.c プロジェクト: AreaScout/mame-libretro
int jvs_device::handle_message(const UINT8 *send_buffer, UINT32 send_size, UINT8 *&recv_buffer)
{
	UINT32 old_reset_counter = jvs_reset_counter;
	jvs_reset_counter = 0;

	switch(send_buffer[0]) {
	case 0xf0:
		if(send_size < 2 || send_buffer[1] != 0xd9)
			return 0;

		// Reset, must be sent twice
		jvs_reset_counter = old_reset_counter+1;
		if(jvs_reset_counter == 2)
			device_reset();
		return 2;

	case 0x10: {
		const char *id = device_id();
		int len = strlen(id)+1;
		*recv_buffer++ = 0x01;
		memcpy(recv_buffer, id, len);
		recv_buffer += len;
		return 1;
	}

	case 0x11:
		*recv_buffer++ = 0x01;
		*recv_buffer++ = command_format_version();
		return 1;

	case 0x12:
		*recv_buffer++ = 0x01;
		*recv_buffer++ = jvs_standard_version();
		return 1;

	case 0x13:
		*recv_buffer++ = 0x01;
		*recv_buffer++ = comm_method_version();
		return 1;

	case 0x14:
		*recv_buffer++ = 0x01;
		function_list(recv_buffer);
		*recv_buffer++ = 0x00;
		return 1;

	case 0x20:
		if(send_size < 3)
			return 0;
		*recv_buffer++ = 0x01;
		return switches(recv_buffer, send_buffer[1], send_buffer[2]) ? 3 : 0;

	case 0x21:
		if(send_size < 2)
			return 0;
		*recv_buffer++ = 0x01;
		return coin_counters(recv_buffer, send_buffer[1]) ? 2 : 0;

	case 0x22:
		if(send_size < 2)
			return 0;
		*recv_buffer++ = 0x01;
		return analogs(recv_buffer, send_buffer[1]) ? 2 : 0;

	case 0x30:
		if(send_size < 4)
			return 0;
		*recv_buffer++ = 0x01;
		return coin_add(send_buffer[1], -((send_buffer[2] << 8) | send_buffer[3])) ? 4 : 0;

	case 0x31:
		if(send_size < 4)
			return 0;
		*recv_buffer++ = 0x01;
		return coin_add(send_buffer[1],  ((send_buffer[2] << 8) | send_buffer[3])) ? 4 : 0;

	case 0x32:
		if(send_size < 2 || send_size < 2+send_buffer[1])
			return 0;
		*recv_buffer++ = 0x01;
		return swoutputs(send_buffer[1], send_buffer+2) ? 2+send_buffer[1] : 0;

	case 0x38:
		if(send_size < 3)
			return 0;
		*recv_buffer++ = 0x01;
		return swoutputs(send_buffer[1], send_buffer[2]) ? 3 : 0;

	default:
		logerror("JVSDEV: unhandled command %02x\n", send_buffer[0]);
		return 0;
	}

	return -1;
}