Ejemplo n.º 1
0
void Controller::processControllerState( const ::vr::VRControllerState_t& state )
{
	// Skip if the packet number is the same
	if( mPacketNum == state.unPacketNum ) {
		return;
	}

	// Update packet number
	mPacketNum = state.unPacketNum;

	// Process it all
	processButtons( state );
	processTriggers( state );
	processAxes( state );
}
Ejemplo n.º 2
0
  void PortamentoSlope::process() {
    MOPO_ASSERT(inputMatchesBufferSize(kTarget));

    processTriggers();
    int state = static_cast<int>(input(kPortamentoType)->at(0));
    mopo_float run_seconds = input(kRunSeconds)->at(0);
    if (state == kPortamentoOff || utils::closeToZero(run_seconds)) {
      processBypass(0);
      return;
    }

    mopo_float increment = 0.4 / (sample_rate_ * input(kRunSeconds)->at(0));
    mopo_float decay = 0.07 / (sample_rate_ * input(kRunSeconds)->at(0));
    const mopo_float* targets = input(kTarget)->source->buffer;

    int i = 0;
    int note_number = static_cast<int>(input(kNoteNumber)->source->trigger_value);

    if (state == kPortamentoAuto && note_number <= 1 && input(kTriggerJump)->source->triggered) {
      int trigger_offset = input(kTriggerJump)->source->trigger_offset;
      for (; i < trigger_offset; ++i)
        tick(i, targets[i], increment, decay);

      last_value_ = input(kTarget)->at(trigger_offset);
    }
    else if (input(kTriggerStart)->source->triggered) {
      int trigger_offset = input(kTriggerStart)->source->trigger_offset;
      for (; i < trigger_offset; ++i)
        tick(i, targets[i], increment, decay);

      last_value_ = input(kTriggerStart)->source->trigger_value;
    }

    if (last_value_ == input(kTarget)->at(0) &&
        last_value_ == input(kTarget)->at(buffer_size_ - 1)) {
      processBypass(i);
    }
    else {
      for (; i < buffer_size_; ++i)
        tick(i, targets[i], increment, decay);
    }
  }
Ejemplo n.º 3
0
Int32
PollingManagerThread::run()
{
	// let CIMOMEnvironment know we're running and ready to go.
	m_startedBarrier.wait();

	bool doInit = true;

	// Get all of the indication trigger providers
	PolledProviderIFCRefArray itpra =
			m_providerManager->getPolledProviders(createProvEnvRef(m_env));

	OW_LOG_DEBUG(m_logger, Format("PollingManager found %1 polled providers",
		itpra.size()));
	{
		// Get initial polling interval from all polled providers
		NonRecursiveMutexLock ml(m_triggerGuard);
		for (size_t i = 0; i < itpra.size(); ++i)
		{
			TriggerRunnerRef tr(new TriggerRunner(this, m_env));
			tr->m_pollInterval =
				itpra[i]->getInitialPollingInterval(createProvEnvRef(m_env));
			OW_LOG_DEBUG(m_logger, Format("PollingManager poll interval for provider"
				" %1: %2", i, tr->m_pollInterval));
			if (!tr->m_pollInterval)
			{
				continue;
			}
			tr->m_itp = itpra[i];
			m_triggerRunners.append(tr);
		}
	}
	{
		NonRecursiveMutexLock l(m_triggerGuard);
		while (!m_shuttingDown)
		{
			bool rightNow;
			UInt32 sleepTime = calcSleepTime(rightNow, doInit);
			doInit = false;
			if (!rightNow)
			{
				if (sleepTime == 0)
				{
					m_triggerCondition.wait(l);
				}
				else
				{
					m_triggerCondition.timedWait(l, sleepTime);
				}
			}
			if (m_shuttingDown)
			{
				break;
			}
			processTriggers();
		}
	}
	// wait until all the threads exit
	m_triggerRunnerThreadPool->shutdown(ThreadPool::E_DISCARD_WORK_IN_QUEUE, 60);
	m_triggerRunners.clear();
	return 0;
}