Example #1
0
/**
 * Provide an alternate "main loop" via StartCompetition().
 *
 * This specific StartCompetition() implements "main loop" behavior like that of the FRC
 * control system in 2008 and earlier, with a primary (slow) loop that is
 * called periodically, and a "fast loop" (a.k.a. "spin loop") that is
 * called as fast as possible with no delay between calls.
 */
void IterativeRobot::StartCompetition()
{
	LiveWindow *lw = LiveWindow::GetInstance();
	// first and one-time initialization
	SmartDashboard::init();
	NetworkTable::GetTable("LiveWindow")->GetSubTable("~STATUS~")->PutBoolean("LW Enabled", false);
	RobotInit();

	// loop forever, calling the appropriate mode-dependent function
	lw->SetEnabled(false);
	while (true)
	{
		// Call the appropriate function depending upon the current robot mode
		if (IsDisabled())
		{
			// call DisabledInit() if we are now just entering disabled mode from
			// either a different mode or from power-on
			if(!m_disabledInitialized)
			{
				lw->SetEnabled(false);
				DisabledInit();
				m_disabledInitialized = true;
				// reset the initialization flags for the other modes
				m_autonomousInitialized = false;
                m_teleopInitialized = false;
                m_testInitialized = false;
			}
			if (NextPeriodReady())
			{
				// TODO: HALNetworkCommunicationObserveUserProgramDisabled();
				DisabledPeriodic();
			}
		}
		else if (IsAutonomous())
		{
			// call AutonomousInit() if we are now just entering autonomous mode from
			// either a different mode or from power-on
			if(!m_autonomousInitialized)
			{
				lw->SetEnabled(false);
				AutonomousInit();
				m_autonomousInitialized = true;
				// reset the initialization flags for the other modes
				m_disabledInitialized = false;
                m_teleopInitialized = false;
                m_testInitialized = false;
			}
			if (NextPeriodReady())
			{
				// TODO: HALNetworkCommunicationObserveUserProgramAutonomous();
				AutonomousPeriodic();
			}
		}
        else if (IsTest())
        {
            // call TestInit() if we are now just entering test mode from
            // either a different mode or from power-on
            if(!m_testInitialized)
            {
            	lw->SetEnabled(true);
                TestInit();
                m_testInitialized = true;
                // reset the initialization flags for the other modes
                m_disabledInitialized = false;
                m_autonomousInitialized = false;
                m_teleopInitialized = false;
            }
            if (NextPeriodReady())
            {
                // TODO: HALNetworkCommunicationObserveUserProgramTest();
                TestPeriodic();
            }
        }
		else
		{
			// call TeleopInit() if we are now just entering teleop mode from
			// either a different mode or from power-on
			if(!m_teleopInitialized)
			{
				lw->SetEnabled(false);
				TeleopInit();
				m_teleopInitialized = true;
				// reset the initialization flags for the other modes
				m_disabledInitialized = false;
                m_autonomousInitialized = false;
                m_testInitialized = false;
                Scheduler::GetInstance()->SetEnabled(true);
			}
			if (NextPeriodReady())
			{
				// TODO: HALNetworkCommunicationObserveUserProgramTeleop();
				TeleopPeriodic();
			}
		}
		// wait for driver station data so the loop doesn't hog the CPU
		m_ds.WaitForData();
	}
}
Example #2
0
/**
 * Provide an alternate "main loop" via StartCompetition().
 *
 * This specific StartCompetition() implements "main loop" behavior like
 * that of the FRC control system in 2008 and earlier, with a primary
 * (slow) loop that is called periodically, and a "fast loop"
 * (a.k.a. "spin loop") that is called as fast as possible with no delay
 * between calls.
 */
void IterativeRobot::StartCompetition()
{
    printf("RobotIterativeBase StartCompetition() Commenced\n");

    // first and one-time initialization
    RobotInit();

    // loop forever, calling the appropriate mode-dependent function
    while (TRUE)
    {
        // Call the appropriate function depending upon the current robot mode
        if (IsDisabled())
        {
            // call DisabledInit() if we are now just entering disabled
            // mode from either a different mode or from power-on
            if (!m_disabledInitialized)
            {
                DisabledInit();
                m_disabledInitialized = true;
                // reset the initialization flags for the other modes
                m_autonomousInitialized = false;
                m_teleopInitialized = false;
                printf("Disabled_Init() completed\n");
            }
            if (NextPeriodReady())
            {
                DisabledPeriodic();
            }
            DisabledContinuous();
        }
        else if (IsAutonomous())
        {
            // call AutonomousInit() if we are now just entering autonomous mode from
            // either a different mode or from power-on
            if (!m_autonomousInitialized)
            {
                // KBS NOTE:  old code reset all PWMs and relays to "safe values"
                // whenever entering autonomous mode, before calling
                // "Autonomous_Init()"
                AutonomousInit();
                m_autonomousInitialized = true;
                // reset the initialization flags for the other modes
                m_disabledInitialized = false;
                m_teleopInitialized = false;
                printf("Autonomous_Init() completed\n");
            }
            if (NextPeriodReady())
            {
                AutonomousPeriodic();
            }
            AutonomousContinuous();
        }
        else
        {
            // call TeleopInit() if we are now just entering teleop mode from
            // either a different mode or from power-on
            if (!m_teleopInitialized)
            {
                TeleopInit();
                m_teleopInitialized = true;
                // reset the initialization flags for the other modes
                m_disabledInitialized = false;
                m_autonomousInitialized = false;
                printf("Teleop_Init() completed\n");
            }
            if (NextPeriodReady())
            {
                TeleopPeriodic();
            }
            TeleopContinuous();
        }
    }
    printf("RobotIterativeBase StartCompetition() Ended\n");
}