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 ); }
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); } }
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; }