static void resetDecoder() { // reset whatever requires reseting at // any point in the ADB subsystem __BEGIN_CRITICAL_SECTION // reset Timer 3 counter TCNT3 = 0; __END_CRITICAL_SECTION // abort/disable input capture interrupt cbi(TIMSK3, ICIE3); // configure "falling edge" for the next capture cbi(TCCR3B, ICES3); // abort/disable timeout timer stopTimeout(); }
void GameControl::stepTime() { double tNew = getCurrentTime(); double dt = tNew - _tLast; _tLast = tNew; /** printf("game state %i\n", _gameInfo.game.state); */ /** save restore file */ _gameInfo.save(_saveName); /** update game time */ _gameInfo.game.time += dt; if (_gameInfo.isTimeout()) { _gameInfo.game.timeouts[_gameInfo.game.timeoutTeam] -= dt; if (_gameInfo.isTimeoutComplete()) { stopTimeout(); } } else { if ((_gameInfo.game.stage == HALF_TIME) || !_gameInfo.isHalted()) { _gameInfo.game.timeTaken += dt; for (int x = 0; x < NUM_TEAMS; ++x) { if (_gameInfo.game.timePenalty[x] > 0) { _gameInfo.game.timePenalty[x] -= dt; } else { _gameInfo.game.timePenalty[x] = 0; } } } if (_gameInfo.isTimeComplete()) { switch (_gameInfo.game.stage) { case PREGAME: case PRESECONDHALF: case PREOVERTIME1: case PREOVERTIME2: break; case FIRST_HALF: beginHalfTime(); break; case HALF_TIME: beginSecondHalf(); break; case SECOND_HALF: if (_gameInfo.isGameTied()) beginOvertime1(); break; case OVER_TIME1: beginOvertime2(); break; case OVER_TIME2: if (_gameInfo.isGameTied()) beginPenaltyShootout(); break; case PENALTY_SHOOTOUT: break; } } } /** repeat last command (if someone missed it) */ ethernetSendCommand(_lastCommand, _lastCommandCounter); }