-
Notifications
You must be signed in to change notification settings - Fork 35
/
Copy pathAutoModeExecutor.java
87 lines (70 loc) · 1.88 KB
/
AutoModeExecutor.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package com.team254.frc2019.auto;
import com.team254.frc2019.auto.modes.AutoModeBase;
import com.team254.lib.util.CrashTrackingRunnable;
/**
* This class selects, runs, and (if necessary) stops a specified autonomous mode.
*/
public class AutoModeExecutor {
private static AutoModeExecutor mInstance = null;
private AutoModeBase mAutoMode = null;
private Thread mThread = null;
public AutoModeExecutor() {}
public static AutoModeExecutor getInstance() {
if (mInstance == null) {
mInstance = new AutoModeExecutor();
}
return mInstance;
}
public void setAutoMode(AutoModeBase new_auto_mode) {
mAutoMode = new_auto_mode;
mThread = new Thread(new CrashTrackingRunnable() {
@Override
public void runCrashTracked() {
if (mAutoMode != null) {
mAutoMode.run();
}
}
});
}
public void start() {
if (mThread != null) {
mThread.start();
}
}
public boolean isStarted() {
return mAutoMode != null && mAutoMode.isActive() && mThread != null && mThread.isAlive();
}
public void reset() {
if (isStarted()) {
stop();
}
mAutoMode = null;
}
public void stop() {
if (mAutoMode != null) {
mAutoMode.stop();
}
mThread = null;
}
public AutoModeBase getAutoMode() {
return mAutoMode;
}
public boolean isInterrupted() {
if (mAutoMode == null) {
return false;
}
return mAutoMode.getIsInterrupted();
}
public void interrupt() {
if (mAutoMode == null) {
return;
}
mAutoMode.interrupt();
}
public void resume() {
if (mAutoMode == null) {
return;
}
mAutoMode.resume();
}
}