RobotCore 1.0
WPILib port to raspberry Pi
Loading...
Searching...
No Matches
ControlWord.java
1// Copyright (c) FIRST and other WPILib contributors.
2// Open Source Software; you can modify and/or share it under the terms of
3// the WPILib BSD license file in the root directory of this project.
4
5package org.wpilib.hardware.hal;
6
7import org.wpilib.hardware.hal.struct.ControlWordStruct;
8
10public class ControlWord {
11 private static final long OPMODE_HASH_MASK = 0x00FFFFFFFFFFFFFFL;
12 private static final long ROBOT_MODE_MASK = 0x0300000000000000L;
13 private static final long ROBOT_MODE_SHIFT = 56;
14 private static final long ENABLED_MASK = 0x0400000000000000L;
15 private static final long ESTOP_MASK = 0x0800000000000000L;
16 private static final long FMS_ATTACHED_MASK = 0x1000000000000000L;
17 private static final long DS_ATTACHED_MASK = 0x2000000000000000L;
18
19 private long m_word;
20 private RobotMode m_robotMode = RobotMode.UNKNOWN;
21
23 public ControlWord() {}
24
35 public void update(
36 long opModeHash,
37 RobotMode robotMode,
38 boolean enabled,
39 boolean emergencyStop,
40 boolean fmsAttached,
41 boolean dsAttached) {
42 m_word =
43 (opModeHash & OPMODE_HASH_MASK)
44 | ((long) robotMode.getValue() << ROBOT_MODE_SHIFT)
45 | (enabled ? ENABLED_MASK : 0)
46 | (emergencyStop ? ESTOP_MASK : 0)
47 | (fmsAttached ? FMS_ATTACHED_MASK : 0)
48 | (dsAttached ? DS_ATTACHED_MASK : 0);
49 m_robotMode = robotMode;
50 }
51
57 public void update(long word) {
58 m_word = word;
59 m_robotMode = RobotMode.fromInt((int) ((word & ROBOT_MODE_MASK) >> ROBOT_MODE_SHIFT));
60 }
61
67 public void update(ControlWord word) {
68 m_word = word.m_word;
69 m_robotMode = word.m_robotMode;
70 }
71
77 public long getOpModeId() {
78 // if the hash portion is zero, return 0
79 if ((m_word & OPMODE_HASH_MASK) == 0) {
80 return 0;
81 }
82 // otherwise return the full ID (which includes the robot mode)
83 return m_word & (OPMODE_HASH_MASK | ROBOT_MODE_MASK);
84 }
85
91 public void setOpModeId(long id) {
92 m_word &= ~(OPMODE_HASH_MASK | ROBOT_MODE_MASK);
93 m_word |= id & (OPMODE_HASH_MASK | ROBOT_MODE_MASK);
94 // keep robot mode in sync
95 m_robotMode = RobotMode.fromInt((int) ((m_word & ROBOT_MODE_MASK) >> ROBOT_MODE_SHIFT));
96 }
97
104 return m_robotMode;
105 }
106
112 public boolean isEnabled() {
113 return (m_word & ENABLED_MASK) != 0;
114 }
115
121 public boolean isEStopped() {
122 return (m_word & ESTOP_MASK) != 0;
123 }
124
130 public boolean isFMSAttached() {
131 return (m_word & FMS_ATTACHED_MASK) != 0;
132 }
133
139 public boolean isDSAttached() {
140 return (m_word & DS_ATTACHED_MASK) != 0;
141 }
142
149 public boolean isAutonomous() {
151 }
152
159 public boolean isAutonomousEnabled() {
160 return isAutonomous() && isEnabled() && isDSAttached();
161 }
162
169 public boolean isTeleop() {
171 }
172
179 public boolean isTeleopEnabled() {
180 return isTeleop() && isEnabled() && isDSAttached();
181 }
182
189 public boolean isUtility() {
190 return getRobotMode() == RobotMode.UTILITY;
191 }
192
199 public boolean isUtilityEnabled() {
200 return isUtility() && isEnabled() && isDSAttached();
201 }
202
208 public long getNative() {
209 return m_word;
210 }
211
212 @Override
213 public boolean equals(Object obj) {
214 return obj instanceof ControlWord word && m_word == word.m_word;
215 }
216
217 @Override
218 public int hashCode() {
219 return Long.hashCode(m_word);
220 }
221
222 public static final ControlWordStruct struct = new ControlWordStruct();
223}
void update(long opModeHash, RobotMode robotMode, boolean enabled, boolean emergencyStop, boolean fmsAttached, boolean dsAttached)
static RobotMode fromInt(int value)