Package com.grt192.core

Source Code of com.grt192.core.GRTRobot

package com.grt192.core;

import java.util.Hashtable;
import java.util.Vector;

import com.grt192.controller.WatchDogController;
import com.grt192.event.GlobalEvent;
import com.grt192.event.GlobalListener;
import com.grt192.controller.DashBoardController;
import edu.wpi.first.wpilibj.SimpleRobot;

/**
*
* @author anand, ajc
*/
public abstract class GRTRobot extends SimpleRobot {
    // Shared objects

    protected Hashtable globals;
    protected Vector autonomousControllers;
    protected Vector teleopControllers;
    protected Vector globalListeners;
    protected static GRTRobot instance;
    private WatchDogController watchDogCtl;
    private DashBoardController dashboard;
    private GRTLogger logger;

    public GRTRobot() {
        this(false, false, true);
    }
    public GRTRobot(boolean useWatchDog, boolean useDashBoard, boolean useLogger) {
        autonomousControllers = new Vector();
        teleopControllers = new Vector();

        globals = new Hashtable();
        globalListeners = new Vector();

        if (useWatchDog) {
            watchDogCtl = new WatchDogController(getWatchdog());
//            watchDogCtl.setPriority(Thread.MAX_PRIORITY);
            watchDogCtl.start();
        }

        if (useDashBoard) {
            //Sends hardware status data to dashboard
            dashboard = new DashBoardController();
            dashboard.start();
            System.out.println("Dashboard Streaming: \tREADY");
        }

        if (useLogger) {
            logger = new GRTLogger();
            log("Logger:              \tREADY");
        }

        instance = this;
        log("GRT Framework:       \tREADY");
        startRobot();
    }

    public abstract void startRobot();

    public synchronized Hashtable getGlobals() {
        return globals;
    }

    /**
     * Get an object shared between controllers
     *
     * @param key
     * @return value
     */
    public synchronized Object getGlobal(String key) {
        return globals.get(key);
    }

    /**
     * Add an object to be shared between controllers
     *
     * @param key
     * @param value
     */
    public synchronized void putGlobal(String key, Object value) {
        globals.put(key, value);
        notifyGlobalListeners(key);
    }

    /**
     * This method is called when the robot enters Autonomous mode if any Teleop
     * controllers are started, they should be stopped then, all autonomous
     * controllers are started
     */
    public void autonomous() {
        System.out.println("AUTO");
        // Stop teleopcontrollers if started
        for (int i = 0; i < teleopControllers.size(); i++) {
            Controller c = (Controller) teleopControllers.elementAt(i);
            if (c.isRunning()) {
                c.stopControl();
            }
        }

        // Start
        for (int i = 0; i < autonomousControllers.size(); i++) {
            Controller c = (Controller) autonomousControllers.elementAt(i);
            if (!c.isRunning()) {
                c.start();
            }
        }

    }

    /**
     * This method is called when the robot enters Operator Control mode if any
     * Autonomous controllers are started, they should be stopped then, all
     * teleop controllers are started
     */
    public void operatorControl() {
        // Stop AutonomousControllers if started
        System.out.println("OP");
        for (int i = 0; i < autonomousControllers.size(); i++) {
            Controller c = (Controller) autonomousControllers.elementAt(i);
            if (c.isRunning()) {
                c.stopControl();
            }
        }

        // Start
        for (int i = 0; i < teleopControllers.size(); i++) {
            Controller c = (Controller) teleopControllers.elementAt(i);
            if (!c.isRunning()) {
                c.start();
            }
        }
    }

    protected void notifyGlobalListeners(String key) {
        for (int i = 0; i < globalListeners.size(); i++) {
            ((GlobalListener) globalListeners.elementAt(i)).globalChanged(new GlobalEvent(GlobalEvent.DEFAULT, key,
                    globals));
        }
    }

    public void addGlobalListener(GlobalListener gl) {
        this.globalListeners.addElement(gl);
    }

    public void removeGlobalListener(GlobalListener gl) {
        this.globalListeners.removeElement(gl);
    }

    public static GRTRobot getInstance() {
        return instance;
    }

    public GRTLogger getLogger() {
        return logger;
    }

    protected void log(String message) {
        logger.write("GRTRobot", message);
    }

    protected void log(String type, String message) {
        logger.write(type, message);
    }

    protected void logVar(String name, String message) {
        logger.write("(var)" + name, message);
    }

    protected void logVar(String string, double i) {
        logVar(string, Double.toString(i));
    }
}
TOP

Related Classes of com.grt192.core.GRTRobot

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.