mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-19 00:41:43 +00:00
Use Java 17 features (#6691)
Uses enhanced instanceof (and simplify equals methods) Uses switch expressions and arrow labels Seal and finalize some Shuffleboard classes Co-authored-by: Sam Carlberg <sam@slfc.dev>
This commit is contained in:
@@ -39,11 +39,7 @@ public class AprilTag {
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj instanceof AprilTag) {
|
||||
var other = (AprilTag) obj;
|
||||
return ID == other.ID && pose.equals(other.pose);
|
||||
}
|
||||
return false;
|
||||
return obj instanceof AprilTag tag && ID == tag.ID && pose.equals(tag.pose);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -99,12 +99,8 @@ public class AprilTagDetector implements AutoCloseable {
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (!(obj instanceof Config)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Config other = (Config) obj;
|
||||
return numThreads == other.numThreads
|
||||
return obj instanceof Config other
|
||||
&& numThreads == other.numThreads
|
||||
&& quadDecimate == other.quadDecimate
|
||||
&& quadSigma == other.quadSigma
|
||||
&& refineEdges == other.refineEdges
|
||||
@@ -194,12 +190,8 @@ public class AprilTagDetector implements AutoCloseable {
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (!(obj instanceof QuadThresholdParameters)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
QuadThresholdParameters other = (QuadThresholdParameters) obj;
|
||||
return minClusterPixels == other.minClusterPixels
|
||||
return obj instanceof QuadThresholdParameters other
|
||||
&& minClusterPixels == other.minClusterPixels
|
||||
&& maxNumMaxima == other.maxNumMaxima
|
||||
&& criticalAngle == other.criticalAngle
|
||||
&& maxLineFitMSE == other.maxLineFitMSE
|
||||
|
||||
@@ -148,19 +148,14 @@ public class AprilTagFieldLayout {
|
||||
*/
|
||||
@JsonIgnore
|
||||
public final void setOrigin(OriginPosition origin) {
|
||||
switch (origin) {
|
||||
case kBlueAllianceWallRightSide:
|
||||
setOrigin(Pose3d.kZero);
|
||||
break;
|
||||
case kRedAllianceWallRightSide:
|
||||
setOrigin(
|
||||
new Pose3d(
|
||||
new Translation3d(m_fieldDimensions.fieldLength, m_fieldDimensions.fieldWidth, 0),
|
||||
new Rotation3d(0, 0, Math.PI)));
|
||||
break;
|
||||
default:
|
||||
throw new IllegalArgumentException("Unsupported enum value");
|
||||
}
|
||||
var pose =
|
||||
switch (origin) {
|
||||
case kBlueAllianceWallRightSide -> Pose3d.kZero;
|
||||
case kRedAllianceWallRightSide -> new Pose3d(
|
||||
new Translation3d(m_fieldDimensions.fieldLength, m_fieldDimensions.fieldWidth, 0),
|
||||
new Rotation3d(0, 0, Math.PI));
|
||||
};
|
||||
setOrigin(pose);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -271,11 +266,9 @@ public class AprilTagFieldLayout {
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj instanceof AprilTagFieldLayout) {
|
||||
var other = (AprilTagFieldLayout) obj;
|
||||
return m_apriltags.equals(other.m_apriltags) && m_origin.equals(other.m_origin);
|
||||
}
|
||||
return false;
|
||||
return obj instanceof AprilTagFieldLayout layout
|
||||
&& m_apriltags.equals(layout.m_apriltags)
|
||||
&& m_origin.equals(layout.m_origin);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -55,12 +55,8 @@ public class AprilTagPoseEstimator {
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (!(obj instanceof Config)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Config other = (Config) obj;
|
||||
return tagSize == other.tagSize
|
||||
return obj instanceof Config other
|
||||
&& tagSize == other.tagSize
|
||||
&& fx == other.fx
|
||||
&& fy == other.fy
|
||||
&& cx == other.cx
|
||||
|
||||
@@ -94,24 +94,24 @@ public final class CameraServer {
|
||||
|
||||
void update(VideoEvent event) {
|
||||
switch (event.propertyKind) {
|
||||
case kBoolean:
|
||||
case kBoolean -> {
|
||||
if (m_booleanValueEntry != null) {
|
||||
m_booleanValueEntry.set(event.value != 0);
|
||||
}
|
||||
break;
|
||||
case kInteger:
|
||||
case kEnum:
|
||||
}
|
||||
case kInteger, kEnum -> {
|
||||
if (m_integerValueEntry != null) {
|
||||
m_integerValueEntry.set(event.value);
|
||||
}
|
||||
break;
|
||||
case kString:
|
||||
}
|
||||
case kString -> {
|
||||
if (m_stringValueEntry != null) {
|
||||
m_stringValueEntry.set(event.valueStr);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
default -> {
|
||||
// NOP
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -231,112 +231,93 @@ public final class CameraServer {
|
||||
event -> {
|
||||
synchronized (CameraServer.class) {
|
||||
switch (event.kind) {
|
||||
case kSourceCreated:
|
||||
{
|
||||
// Create subtable for the camera
|
||||
NetworkTable table = m_publishTable.getSubTable(event.name);
|
||||
m_publishers.put(
|
||||
event.sourceHandle, new SourcePublisher(table, event.sourceHandle));
|
||||
break;
|
||||
case kSourceCreated -> {
|
||||
// Create subtable for the camera
|
||||
NetworkTable table = m_publishTable.getSubTable(event.name);
|
||||
m_publishers.put(
|
||||
event.sourceHandle, new SourcePublisher(table, event.sourceHandle));
|
||||
}
|
||||
case kSourceDestroyed -> {
|
||||
SourcePublisher publisher = m_publishers.remove(event.sourceHandle);
|
||||
if (publisher != null) {
|
||||
try {
|
||||
publisher.close();
|
||||
} catch (Exception e) {
|
||||
// ignore (nothing we can do about it)
|
||||
}
|
||||
}
|
||||
case kSourceDestroyed:
|
||||
{
|
||||
SourcePublisher publisher = m_publishers.remove(event.sourceHandle);
|
||||
if (publisher != null) {
|
||||
}
|
||||
case kSourceConnected -> {
|
||||
SourcePublisher publisher = m_publishers.get(event.sourceHandle);
|
||||
if (publisher != null) {
|
||||
// update the description too (as it may have changed)
|
||||
publisher.m_descriptionPublisher.set(
|
||||
CameraServerJNI.getSourceDescription(event.sourceHandle));
|
||||
publisher.m_connectedPublisher.set(true);
|
||||
}
|
||||
}
|
||||
case kSourceDisconnected -> {
|
||||
SourcePublisher publisher = m_publishers.get(event.sourceHandle);
|
||||
if (publisher != null) {
|
||||
publisher.m_connectedPublisher.set(false);
|
||||
}
|
||||
}
|
||||
case kSourceVideoModesUpdated -> {
|
||||
SourcePublisher publisher = m_publishers.get(event.sourceHandle);
|
||||
if (publisher != null) {
|
||||
publisher.m_modesPublisher.set(getSourceModeValues(event.sourceHandle));
|
||||
}
|
||||
}
|
||||
case kSourceVideoModeChanged -> {
|
||||
SourcePublisher publisher = m_publishers.get(event.sourceHandle);
|
||||
if (publisher != null) {
|
||||
publisher.m_modeEntry.set(videoModeToString(event.mode));
|
||||
}
|
||||
}
|
||||
case kSourcePropertyCreated -> {
|
||||
SourcePublisher publisher = m_publishers.get(event.sourceHandle);
|
||||
if (publisher != null) {
|
||||
publisher.m_properties.put(
|
||||
event.propertyHandle, new PropertyPublisher(publisher.m_table, event));
|
||||
}
|
||||
}
|
||||
case kSourcePropertyValueUpdated -> {
|
||||
SourcePublisher publisher = m_publishers.get(event.sourceHandle);
|
||||
if (publisher != null) {
|
||||
PropertyPublisher pp = publisher.m_properties.get(event.propertyHandle);
|
||||
if (pp != null) {
|
||||
pp.update(event);
|
||||
}
|
||||
}
|
||||
}
|
||||
case kSourcePropertyChoicesUpdated -> {
|
||||
SourcePublisher publisher = m_publishers.get(event.sourceHandle);
|
||||
if (publisher != null) {
|
||||
PropertyPublisher pp = publisher.m_properties.get(event.propertyHandle);
|
||||
if (pp != null && pp.m_choicesTopic != null) {
|
||||
try {
|
||||
publisher.close();
|
||||
} catch (Exception e) {
|
||||
// ignore (nothing we can do about it)
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case kSourceConnected:
|
||||
{
|
||||
SourcePublisher publisher = m_publishers.get(event.sourceHandle);
|
||||
if (publisher != null) {
|
||||
// update the description too (as it may have changed)
|
||||
publisher.m_descriptionPublisher.set(
|
||||
CameraServerJNI.getSourceDescription(event.sourceHandle));
|
||||
publisher.m_connectedPublisher.set(true);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case kSourceDisconnected:
|
||||
{
|
||||
SourcePublisher publisher = m_publishers.get(event.sourceHandle);
|
||||
if (publisher != null) {
|
||||
publisher.m_connectedPublisher.set(false);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case kSourceVideoModesUpdated:
|
||||
{
|
||||
SourcePublisher publisher = m_publishers.get(event.sourceHandle);
|
||||
if (publisher != null) {
|
||||
publisher.m_modesPublisher.set(getSourceModeValues(event.sourceHandle));
|
||||
}
|
||||
break;
|
||||
}
|
||||
case kSourceVideoModeChanged:
|
||||
{
|
||||
SourcePublisher publisher = m_publishers.get(event.sourceHandle);
|
||||
if (publisher != null) {
|
||||
publisher.m_modeEntry.set(videoModeToString(event.mode));
|
||||
}
|
||||
break;
|
||||
}
|
||||
case kSourcePropertyCreated:
|
||||
{
|
||||
SourcePublisher publisher = m_publishers.get(event.sourceHandle);
|
||||
if (publisher != null) {
|
||||
publisher.m_properties.put(
|
||||
event.propertyHandle, new PropertyPublisher(publisher.m_table, event));
|
||||
}
|
||||
break;
|
||||
}
|
||||
case kSourcePropertyValueUpdated:
|
||||
{
|
||||
SourcePublisher publisher = m_publishers.get(event.sourceHandle);
|
||||
if (publisher != null) {
|
||||
PropertyPublisher pp = publisher.m_properties.get(event.propertyHandle);
|
||||
if (pp != null) {
|
||||
pp.update(event);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case kSourcePropertyChoicesUpdated:
|
||||
{
|
||||
SourcePublisher publisher = m_publishers.get(event.sourceHandle);
|
||||
if (publisher != null) {
|
||||
PropertyPublisher pp = publisher.m_properties.get(event.propertyHandle);
|
||||
if (pp != null && pp.m_choicesTopic != null) {
|
||||
try {
|
||||
String[] choices =
|
||||
CameraServerJNI.getEnumPropertyChoices(event.propertyHandle);
|
||||
if (pp.m_choicesPublisher == null) {
|
||||
pp.m_choicesPublisher = pp.m_choicesTopic.publish();
|
||||
}
|
||||
pp.m_choicesPublisher.set(choices);
|
||||
} catch (VideoException ignored) {
|
||||
// ignore (just don't publish choices if we can't get them)
|
||||
String[] choices =
|
||||
CameraServerJNI.getEnumPropertyChoices(event.propertyHandle);
|
||||
if (pp.m_choicesPublisher == null) {
|
||||
pp.m_choicesPublisher = pp.m_choicesTopic.publish();
|
||||
}
|
||||
pp.m_choicesPublisher.set(choices);
|
||||
} catch (VideoException ignored) {
|
||||
// ignore (just don't publish choices if we can't get them)
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case kSinkSourceChanged:
|
||||
case kSinkCreated:
|
||||
case kSinkDestroyed:
|
||||
case kNetworkInterfacesChanged:
|
||||
{
|
||||
m_addresses = CameraServerJNI.getNetworkInterfaces();
|
||||
updateStreamValues();
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
case kSinkSourceChanged,
|
||||
kSinkCreated,
|
||||
kSinkDestroyed,
|
||||
kNetworkInterfacesChanged -> {
|
||||
m_addresses = CameraServerJNI.getNetworkInterfaces();
|
||||
updateStreamValues();
|
||||
}
|
||||
default -> {
|
||||
// NOP
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -352,25 +333,20 @@ public final class CameraServer {
|
||||
* @param source Source index.
|
||||
*/
|
||||
private static String makeSourceValue(int source) {
|
||||
switch (VideoSource.getKindFromInt(CameraServerJNI.getSourceKind(source))) {
|
||||
case kUsb:
|
||||
return "usb:" + CameraServerJNI.getUsbCameraPath(source);
|
||||
case kHttp:
|
||||
{
|
||||
String[] urls = CameraServerJNI.getHttpCameraUrls(source);
|
||||
if (urls.length > 0) {
|
||||
return "ip:" + urls[0];
|
||||
} else {
|
||||
return "ip:";
|
||||
}
|
||||
return switch (VideoSource.getKindFromInt(CameraServerJNI.getSourceKind(source))) {
|
||||
case kUsb -> "usb:" + CameraServerJNI.getUsbCameraPath(source);
|
||||
case kHttp -> {
|
||||
String[] urls = CameraServerJNI.getHttpCameraUrls(source);
|
||||
if (urls.length > 0) {
|
||||
yield "ip:" + urls[0];
|
||||
} else {
|
||||
yield "ip:";
|
||||
}
|
||||
case kCv:
|
||||
return "cv:";
|
||||
case kRaw:
|
||||
return "raw:";
|
||||
default:
|
||||
return "unknown:";
|
||||
}
|
||||
}
|
||||
case kCv -> "cv:";
|
||||
case kRaw -> "raw:";
|
||||
case kUnknown -> "unknown:";
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -504,20 +480,17 @@ public final class CameraServer {
|
||||
|
||||
/** Provide string description of pixel format. */
|
||||
private static String pixelFormatToString(PixelFormat pixelFormat) {
|
||||
switch (pixelFormat) {
|
||||
case kMJPEG:
|
||||
return "MJPEG";
|
||||
case kYUYV:
|
||||
return "YUYV";
|
||||
case kRGB565:
|
||||
return "RGB565";
|
||||
case kBGR:
|
||||
return "BGR";
|
||||
case kGray:
|
||||
return "Gray";
|
||||
default:
|
||||
return "Unknown";
|
||||
}
|
||||
return switch (pixelFormat) {
|
||||
case kMJPEG -> "MJPEG";
|
||||
case kYUYV -> "YUYV";
|
||||
case kRGB565 -> "RGB565";
|
||||
case kBGR -> "BGR";
|
||||
case kBGRA -> "BGRA";
|
||||
case kGray -> "Gray";
|
||||
case kY16 -> "Y16";
|
||||
case kUYVY -> "UYVY";
|
||||
case kUnknown -> "Unknown";
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -20,22 +20,12 @@ public class RawCVMatSink extends ImageSink {
|
||||
int bgrValue = PixelFormat.kBGR.getValue();
|
||||
|
||||
private int getCVFormat(PixelFormat pixelFormat) {
|
||||
int type = 0;
|
||||
switch (pixelFormat) {
|
||||
case kYUYV:
|
||||
case kRGB565:
|
||||
type = CvType.CV_8UC2;
|
||||
break;
|
||||
case kBGR:
|
||||
type = CvType.CV_8UC3;
|
||||
break;
|
||||
case kGray:
|
||||
case kMJPEG:
|
||||
default:
|
||||
type = CvType.CV_8UC1;
|
||||
break;
|
||||
}
|
||||
return type;
|
||||
return switch (pixelFormat) {
|
||||
case kYUYV, kRGB565, kY16, kUYVY -> CvType.CV_8UC2;
|
||||
case kBGR -> CvType.CV_8UC3;
|
||||
case kBGRA -> CvType.CV_8UC4;
|
||||
case kGray, kMJPEG, kUnknown -> CvType.CV_8UC1;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -32,27 +32,12 @@ public class CvSink extends ImageSink {
|
||||
}
|
||||
|
||||
private int getCVFormat(PixelFormat pixelFormat) {
|
||||
int type = 0;
|
||||
switch (pixelFormat) {
|
||||
case kYUYV:
|
||||
case kRGB565:
|
||||
case kY16:
|
||||
case kUYVY:
|
||||
type = CvType.CV_8UC2;
|
||||
break;
|
||||
case kBGR:
|
||||
type = CvType.CV_8UC3;
|
||||
break;
|
||||
case kBGRA:
|
||||
type = CvType.CV_8UC4;
|
||||
break;
|
||||
case kGray:
|
||||
case kMJPEG:
|
||||
default:
|
||||
type = CvType.CV_8UC1;
|
||||
break;
|
||||
}
|
||||
return type;
|
||||
return switch (pixelFormat) {
|
||||
case kYUYV, kRGB565, kY16, kUYVY -> CvType.CV_8UC2;
|
||||
case kBGR -> CvType.CV_8UC3;
|
||||
case kBGRA -> CvType.CV_8UC4;
|
||||
case kGray, kMJPEG, kUnknown -> CvType.CV_8UC1;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -62,22 +62,15 @@ public class CvSource extends ImageSource {
|
||||
|
||||
try {
|
||||
int channels = finalImage.channels();
|
||||
PixelFormat format;
|
||||
if (channels == 1) {
|
||||
// 1 channel is assumed Graysacle
|
||||
format = PixelFormat.kGray;
|
||||
} else if (channels == 2) {
|
||||
// 2 channels is assumed YUYV
|
||||
format = PixelFormat.kYUYV;
|
||||
} else if (channels == 3) {
|
||||
// 3 channels is assumed BGR
|
||||
format = PixelFormat.kBGR;
|
||||
} else if (channels == 4) {
|
||||
// 4 channels is assumed BGRA
|
||||
format = PixelFormat.kBGRA;
|
||||
} else {
|
||||
throw new VideoException("Unable to get pixel format for " + channels + " channels");
|
||||
}
|
||||
PixelFormat format =
|
||||
switch (channels) {
|
||||
case 1 -> PixelFormat.kGray; // 1 channel is assumed Grayscale
|
||||
case 2 -> PixelFormat.kYUYV; // 2 channels is assumed YUYV
|
||||
case 3 -> PixelFormat.kBGR; // 3 channels is assumed BGR
|
||||
case 4 -> PixelFormat.kBGRA; // 4 channels is assumed BGRA
|
||||
default -> throw new VideoException(
|
||||
"Unable to get pixel format for " + channels + " channels");
|
||||
};
|
||||
|
||||
putFrame(finalImage, format, true);
|
||||
} finally {
|
||||
|
||||
@@ -40,16 +40,12 @@ public class HttpCamera extends VideoCamera {
|
||||
* @return The kind
|
||||
*/
|
||||
public static HttpCameraKind getHttpCameraKindFromInt(int kind) {
|
||||
switch (kind) {
|
||||
case 1:
|
||||
return HttpCameraKind.kMJPGStreamer;
|
||||
case 2:
|
||||
return HttpCameraKind.kCSCore;
|
||||
case 3:
|
||||
return HttpCameraKind.kAxis;
|
||||
default:
|
||||
return HttpCameraKind.kUnknown;
|
||||
}
|
||||
return switch (kind) {
|
||||
case 1 -> HttpCameraKind.kMJPGStreamer;
|
||||
case 2 -> HttpCameraKind.kCSCore;
|
||||
case 3 -> HttpCameraKind.kAxis;
|
||||
default -> HttpCameraKind.kUnknown;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -75,48 +75,28 @@ public class VideoEvent {
|
||||
* @return The kind
|
||||
*/
|
||||
public static Kind getKindFromInt(int kind) {
|
||||
switch (kind) {
|
||||
case 0x0001:
|
||||
return Kind.kSourceCreated;
|
||||
case 0x0002:
|
||||
return Kind.kSourceDestroyed;
|
||||
case 0x0004:
|
||||
return Kind.kSourceConnected;
|
||||
case 0x0008:
|
||||
return Kind.kSourceDisconnected;
|
||||
case 0x0010:
|
||||
return Kind.kSourceVideoModesUpdated;
|
||||
case 0x0020:
|
||||
return Kind.kSourceVideoModeChanged;
|
||||
case 0x0040:
|
||||
return Kind.kSourcePropertyCreated;
|
||||
case 0x0080:
|
||||
return Kind.kSourcePropertyValueUpdated;
|
||||
case 0x0100:
|
||||
return Kind.kSourcePropertyChoicesUpdated;
|
||||
case 0x0200:
|
||||
return Kind.kSinkSourceChanged;
|
||||
case 0x0400:
|
||||
return Kind.kSinkCreated;
|
||||
case 0x0800:
|
||||
return Kind.kSinkDestroyed;
|
||||
case 0x1000:
|
||||
return Kind.kSinkEnabled;
|
||||
case 0x2000:
|
||||
return Kind.kSinkDisabled;
|
||||
case 0x4000:
|
||||
return Kind.kNetworkInterfacesChanged;
|
||||
case 0x10000:
|
||||
return Kind.kSinkPropertyCreated;
|
||||
case 0x20000:
|
||||
return Kind.kSinkPropertyValueUpdated;
|
||||
case 0x40000:
|
||||
return Kind.kSinkPropertyChoicesUpdated;
|
||||
case 0x80000:
|
||||
return Kind.kUsbCamerasChanged;
|
||||
default:
|
||||
return Kind.kUnknown;
|
||||
}
|
||||
return switch (kind) {
|
||||
case 0x0001 -> Kind.kSourceCreated;
|
||||
case 0x0002 -> Kind.kSourceDestroyed;
|
||||
case 0x0004 -> Kind.kSourceConnected;
|
||||
case 0x0008 -> Kind.kSourceDisconnected;
|
||||
case 0x0010 -> Kind.kSourceVideoModesUpdated;
|
||||
case 0x0020 -> Kind.kSourceVideoModeChanged;
|
||||
case 0x0040 -> Kind.kSourcePropertyCreated;
|
||||
case 0x0080 -> Kind.kSourcePropertyValueUpdated;
|
||||
case 0x0100 -> Kind.kSourcePropertyChoicesUpdated;
|
||||
case 0x0200 -> Kind.kSinkSourceChanged;
|
||||
case 0x0400 -> Kind.kSinkCreated;
|
||||
case 0x0800 -> Kind.kSinkDestroyed;
|
||||
case 0x1000 -> Kind.kSinkEnabled;
|
||||
case 0x2000 -> Kind.kSinkDisabled;
|
||||
case 0x4000 -> Kind.kNetworkInterfacesChanged;
|
||||
case 0x10000 -> Kind.kSinkPropertyCreated;
|
||||
case 0x20000 -> Kind.kSinkPropertyValueUpdated;
|
||||
case 0x40000 -> Kind.kSinkPropertyChoicesUpdated;
|
||||
case 0x80000 -> Kind.kUsbCamerasChanged;
|
||||
default -> Kind.kUnknown;
|
||||
};
|
||||
}
|
||||
|
||||
VideoEvent(
|
||||
|
||||
@@ -42,18 +42,13 @@ public class VideoProperty {
|
||||
* @return The kind
|
||||
*/
|
||||
public static Kind getKindFromInt(int kind) {
|
||||
switch (kind) {
|
||||
case 1:
|
||||
return Kind.kBoolean;
|
||||
case 2:
|
||||
return Kind.kInteger;
|
||||
case 4:
|
||||
return Kind.kString;
|
||||
case 8:
|
||||
return Kind.kEnum;
|
||||
default:
|
||||
return Kind.kNone;
|
||||
}
|
||||
return switch (kind) {
|
||||
case 1 -> Kind.kBoolean;
|
||||
case 2 -> Kind.kInteger;
|
||||
case 4 -> Kind.kString;
|
||||
case 8 -> Kind.kEnum;
|
||||
default -> Kind.kNone;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -43,16 +43,12 @@ public class VideoSink implements AutoCloseable {
|
||||
* @return The kind
|
||||
*/
|
||||
public static Kind getKindFromInt(int kind) {
|
||||
switch (kind) {
|
||||
case 2:
|
||||
return Kind.kMjpeg;
|
||||
case 4:
|
||||
return Kind.kCv;
|
||||
case 8:
|
||||
return Kind.kRaw;
|
||||
default:
|
||||
return Kind.kUnknown;
|
||||
}
|
||||
return switch (kind) {
|
||||
case 2 -> Kind.kMjpeg;
|
||||
case 4 -> Kind.kCv;
|
||||
case 8 -> Kind.kRaw;
|
||||
default -> Kind.kUnknown;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -79,18 +79,13 @@ public class VideoSource implements AutoCloseable {
|
||||
* @return The kind
|
||||
*/
|
||||
public static Kind getKindFromInt(int kind) {
|
||||
switch (kind) {
|
||||
case 1:
|
||||
return Kind.kUsb;
|
||||
case 2:
|
||||
return Kind.kHttp;
|
||||
case 4:
|
||||
return Kind.kCv;
|
||||
case 8:
|
||||
return Kind.kRaw;
|
||||
default:
|
||||
return Kind.kUnknown;
|
||||
}
|
||||
return switch (kind) {
|
||||
case 1 -> Kind.kUsb;
|
||||
case 2 -> Kind.kHttp;
|
||||
case 4 -> Kind.kCv;
|
||||
case 8 -> Kind.kRaw;
|
||||
default -> Kind.kUnknown;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -162,24 +162,16 @@ public class DriverStationJNI extends JNIWrapper {
|
||||
* @see "HAL_GetAllianceStation"
|
||||
*/
|
||||
public static AllianceStationID getAllianceStation() {
|
||||
switch (nativeGetAllianceStation()) {
|
||||
case kUnknownAllianceStation:
|
||||
return AllianceStationID.Unknown;
|
||||
case kRed1AllianceStation:
|
||||
return AllianceStationID.Red1;
|
||||
case kRed2AllianceStation:
|
||||
return AllianceStationID.Red2;
|
||||
case kRed3AllianceStation:
|
||||
return AllianceStationID.Red3;
|
||||
case kBlue1AllianceStation:
|
||||
return AllianceStationID.Blue1;
|
||||
case kBlue2AllianceStation:
|
||||
return AllianceStationID.Blue2;
|
||||
case kBlue3AllianceStation:
|
||||
return AllianceStationID.Blue3;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
return switch (nativeGetAllianceStation()) {
|
||||
case kUnknownAllianceStation -> AllianceStationID.Unknown;
|
||||
case kRed1AllianceStation -> AllianceStationID.Red1;
|
||||
case kRed2AllianceStation -> AllianceStationID.Red2;
|
||||
case kRed3AllianceStation -> AllianceStationID.Red3;
|
||||
case kBlue1AllianceStation -> AllianceStationID.Blue1;
|
||||
case kBlue2AllianceStation -> AllianceStationID.Blue2;
|
||||
case kBlue3AllianceStation -> AllianceStationID.Blue3;
|
||||
default -> null;
|
||||
};
|
||||
}
|
||||
|
||||
public static final int kMaxJoystickAxes = 12;
|
||||
|
||||
@@ -145,19 +145,13 @@ public final class HALValue {
|
||||
* @return HAL value
|
||||
*/
|
||||
public static HALValue fromNative(int type, long value1, double value2) {
|
||||
switch (type) {
|
||||
case kBoolean:
|
||||
return makeBoolean(value1 != 0);
|
||||
case kDouble:
|
||||
return makeDouble(value2);
|
||||
case kEnum:
|
||||
return makeEnum((int) value1);
|
||||
case kInt:
|
||||
return makeInt((int) value1);
|
||||
case kLong:
|
||||
return makeLong(value1);
|
||||
default:
|
||||
return makeUnassigned();
|
||||
}
|
||||
return switch (type) {
|
||||
case kBoolean -> makeBoolean(value1 != 0);
|
||||
case kDouble -> makeDouble(value2);
|
||||
case kEnum -> makeEnum((int) value1);
|
||||
case kInt -> makeInt((int) value1);
|
||||
case kLong -> makeLong(value1);
|
||||
default -> makeUnassigned();
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,58 +69,34 @@ public class PowerDistributionFaults {
|
||||
* the hardware.
|
||||
*/
|
||||
public final boolean getBreakerFault(int channel) {
|
||||
switch (channel) {
|
||||
case 0:
|
||||
return Channel0BreakerFault;
|
||||
case 1:
|
||||
return Channel1BreakerFault;
|
||||
case 2:
|
||||
return Channel2BreakerFault;
|
||||
case 3:
|
||||
return Channel3BreakerFault;
|
||||
case 4:
|
||||
return Channel4BreakerFault;
|
||||
case 5:
|
||||
return Channel5BreakerFault;
|
||||
case 6:
|
||||
return Channel6BreakerFault;
|
||||
case 7:
|
||||
return Channel7BreakerFault;
|
||||
case 8:
|
||||
return Channel8BreakerFault;
|
||||
case 9:
|
||||
return Channel9BreakerFault;
|
||||
case 10:
|
||||
return Channel10BreakerFault;
|
||||
case 11:
|
||||
return Channel11BreakerFault;
|
||||
case 12:
|
||||
return Channel12BreakerFault;
|
||||
case 13:
|
||||
return Channel13BreakerFault;
|
||||
case 14:
|
||||
return Channel14BreakerFault;
|
||||
case 15:
|
||||
return Channel15BreakerFault;
|
||||
case 16:
|
||||
return Channel16BreakerFault;
|
||||
case 17:
|
||||
return Channel17BreakerFault;
|
||||
case 18:
|
||||
return Channel18BreakerFault;
|
||||
case 19:
|
||||
return Channel19BreakerFault;
|
||||
case 20:
|
||||
return Channel20BreakerFault;
|
||||
case 21:
|
||||
return Channel21BreakerFault;
|
||||
case 22:
|
||||
return Channel22BreakerFault;
|
||||
case 23:
|
||||
return Channel23BreakerFault;
|
||||
default:
|
||||
throw new IndexOutOfBoundsException("Power distribution fault channel out of bounds!");
|
||||
}
|
||||
return switch (channel) {
|
||||
case 0 -> Channel0BreakerFault;
|
||||
case 1 -> Channel1BreakerFault;
|
||||
case 2 -> Channel2BreakerFault;
|
||||
case 3 -> Channel3BreakerFault;
|
||||
case 4 -> Channel4BreakerFault;
|
||||
case 5 -> Channel5BreakerFault;
|
||||
case 6 -> Channel6BreakerFault;
|
||||
case 7 -> Channel7BreakerFault;
|
||||
case 8 -> Channel8BreakerFault;
|
||||
case 9 -> Channel9BreakerFault;
|
||||
case 10 -> Channel10BreakerFault;
|
||||
case 11 -> Channel11BreakerFault;
|
||||
case 12 -> Channel12BreakerFault;
|
||||
case 13 -> Channel13BreakerFault;
|
||||
case 14 -> Channel14BreakerFault;
|
||||
case 15 -> Channel15BreakerFault;
|
||||
case 16 -> Channel16BreakerFault;
|
||||
case 17 -> Channel17BreakerFault;
|
||||
case 18 -> Channel18BreakerFault;
|
||||
case 19 -> Channel19BreakerFault;
|
||||
case 20 -> Channel20BreakerFault;
|
||||
case 21 -> Channel21BreakerFault;
|
||||
case 22 -> Channel22BreakerFault;
|
||||
case 23 -> Channel23BreakerFault;
|
||||
default -> throw new IndexOutOfBoundsException(
|
||||
"Power distribution fault channel out of bounds!");
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -71,58 +71,34 @@ public class PowerDistributionStickyFaults {
|
||||
* the hardware.
|
||||
*/
|
||||
public final boolean getBreakerFault(int channel) {
|
||||
switch (channel) {
|
||||
case 0:
|
||||
return Channel0BreakerFault;
|
||||
case 1:
|
||||
return Channel1BreakerFault;
|
||||
case 2:
|
||||
return Channel2BreakerFault;
|
||||
case 3:
|
||||
return Channel3BreakerFault;
|
||||
case 4:
|
||||
return Channel4BreakerFault;
|
||||
case 5:
|
||||
return Channel5BreakerFault;
|
||||
case 6:
|
||||
return Channel6BreakerFault;
|
||||
case 7:
|
||||
return Channel7BreakerFault;
|
||||
case 8:
|
||||
return Channel8BreakerFault;
|
||||
case 9:
|
||||
return Channel9BreakerFault;
|
||||
case 10:
|
||||
return Channel10BreakerFault;
|
||||
case 11:
|
||||
return Channel11BreakerFault;
|
||||
case 12:
|
||||
return Channel12BreakerFault;
|
||||
case 13:
|
||||
return Channel13BreakerFault;
|
||||
case 14:
|
||||
return Channel14BreakerFault;
|
||||
case 15:
|
||||
return Channel15BreakerFault;
|
||||
case 16:
|
||||
return Channel16BreakerFault;
|
||||
case 17:
|
||||
return Channel17BreakerFault;
|
||||
case 18:
|
||||
return Channel18BreakerFault;
|
||||
case 19:
|
||||
return Channel19BreakerFault;
|
||||
case 20:
|
||||
return Channel20BreakerFault;
|
||||
case 21:
|
||||
return Channel21BreakerFault;
|
||||
case 22:
|
||||
return Channel22BreakerFault;
|
||||
case 23:
|
||||
return Channel23BreakerFault;
|
||||
default:
|
||||
throw new IndexOutOfBoundsException("Power distribution fault channel out of bounds!");
|
||||
}
|
||||
return switch (channel) {
|
||||
case 0 -> Channel0BreakerFault;
|
||||
case 1 -> Channel1BreakerFault;
|
||||
case 2 -> Channel2BreakerFault;
|
||||
case 3 -> Channel3BreakerFault;
|
||||
case 4 -> Channel4BreakerFault;
|
||||
case 5 -> Channel5BreakerFault;
|
||||
case 6 -> Channel6BreakerFault;
|
||||
case 7 -> Channel7BreakerFault;
|
||||
case 8 -> Channel8BreakerFault;
|
||||
case 9 -> Channel9BreakerFault;
|
||||
case 10 -> Channel10BreakerFault;
|
||||
case 11 -> Channel11BreakerFault;
|
||||
case 12 -> Channel12BreakerFault;
|
||||
case 13 -> Channel13BreakerFault;
|
||||
case 14 -> Channel14BreakerFault;
|
||||
case 15 -> Channel15BreakerFault;
|
||||
case 16 -> Channel16BreakerFault;
|
||||
case 17 -> Channel17BreakerFault;
|
||||
case 18 -> Channel18BreakerFault;
|
||||
case 19 -> Channel19BreakerFault;
|
||||
case 20 -> Channel20BreakerFault;
|
||||
case 21 -> Channel21BreakerFault;
|
||||
case 22 -> Channel22BreakerFault;
|
||||
case 23 -> Channel23BreakerFault;
|
||||
default -> throw new IndexOutOfBoundsException(
|
||||
"Power distribution fault channel out of bounds!");
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -59,42 +59,25 @@ public class REVPHFaults {
|
||||
* the hardware.
|
||||
*/
|
||||
public final boolean getChannelFault(int channel) {
|
||||
switch (channel) {
|
||||
case 0:
|
||||
return Channel0Fault;
|
||||
case 1:
|
||||
return Channel1Fault;
|
||||
case 2:
|
||||
return Channel2Fault;
|
||||
case 3:
|
||||
return Channel3Fault;
|
||||
case 4:
|
||||
return Channel4Fault;
|
||||
case 5:
|
||||
return Channel5Fault;
|
||||
case 6:
|
||||
return Channel6Fault;
|
||||
case 7:
|
||||
return Channel7Fault;
|
||||
case 8:
|
||||
return Channel8Fault;
|
||||
case 9:
|
||||
return Channel9Fault;
|
||||
case 10:
|
||||
return Channel10Fault;
|
||||
case 11:
|
||||
return Channel11Fault;
|
||||
case 12:
|
||||
return Channel12Fault;
|
||||
case 13:
|
||||
return Channel13Fault;
|
||||
case 14:
|
||||
return Channel14Fault;
|
||||
case 15:
|
||||
return Channel15Fault;
|
||||
default:
|
||||
throw new IndexOutOfBoundsException("Pneumatics fault channel out of bounds!");
|
||||
}
|
||||
return switch (channel) {
|
||||
case 0 -> Channel0Fault;
|
||||
case 1 -> Channel1Fault;
|
||||
case 2 -> Channel2Fault;
|
||||
case 3 -> Channel3Fault;
|
||||
case 4 -> Channel4Fault;
|
||||
case 5 -> Channel5Fault;
|
||||
case 6 -> Channel6Fault;
|
||||
case 7 -> Channel7Fault;
|
||||
case 8 -> Channel8Fault;
|
||||
case 9 -> Channel9Fault;
|
||||
case 10 -> Channel10Fault;
|
||||
case 11 -> Channel11Fault;
|
||||
case 12 -> Channel12Fault;
|
||||
case 13 -> Channel13Fault;
|
||||
case 14 -> Channel14Fault;
|
||||
case 15 -> Channel15Fault;
|
||||
default -> throw new IndexOutOfBoundsException("Pneumatics fault channel out of bounds!");
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -29,23 +29,19 @@ public final class CANExceptionFactory {
|
||||
*/
|
||||
public static void checkStatus(int status, int messageID) {
|
||||
switch (status) {
|
||||
case NIRioStatus.kRioStatusSuccess:
|
||||
case NIRioStatus.kRioStatusSuccess -> {
|
||||
// Everything is ok... don't throw.
|
||||
return;
|
||||
case ERR_CANSessionMux_InvalidBuffer:
|
||||
case NIRioStatus.kRIOStatusBufferInvalidSize:
|
||||
throw new CANInvalidBufferException();
|
||||
case ERR_CANSessionMux_MessageNotFound:
|
||||
case NIRioStatus.kRIOStatusOperationTimedOut:
|
||||
throw new CANMessageNotFoundException();
|
||||
case ERR_CANSessionMux_NotAllowed:
|
||||
case NIRioStatus.kRIOStatusFeatureNotSupported:
|
||||
throw new CANMessageNotAllowedException("MessageID = " + messageID);
|
||||
case ERR_CANSessionMux_NotInitialized:
|
||||
case NIRioStatus.kRIOStatusResourceNotInitialized:
|
||||
throw new CANNotInitializedException();
|
||||
default:
|
||||
throw new UncleanStatusException("Fatal status code detected: " + status);
|
||||
}
|
||||
case ERR_CANSessionMux_InvalidBuffer,
|
||||
NIRioStatus.kRIOStatusBufferInvalidSize -> throw new CANInvalidBufferException();
|
||||
case ERR_CANSessionMux_MessageNotFound,
|
||||
NIRioStatus.kRIOStatusOperationTimedOut -> throw new CANMessageNotFoundException();
|
||||
case ERR_CANSessionMux_NotAllowed,
|
||||
NIRioStatus.kRIOStatusFeatureNotSupported -> throw new CANMessageNotAllowedException(
|
||||
"MessageID = " + messageID);
|
||||
case ERR_CANSessionMux_NotInitialized,
|
||||
NIRioStatus.kRIOStatusResourceNotInitialized -> throw new CANNotInitializedException();
|
||||
default -> throw new UncleanStatusException("Fatal status code detected: " + status);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -179,8 +179,8 @@ public final class NetworkTableInstance implements AutoCloseable {
|
||||
*/
|
||||
public {{ t.TypeName }}Topic get{{ t.TypeName }}Topic(String name) {
|
||||
Topic topic = m_topics.get(name);
|
||||
if (topic instanceof {{ t.TypeName }}Topic) {
|
||||
return ({{ t.TypeName }}Topic) topic;
|
||||
if (topic instanceof {{ t.TypeName }}Topic t) {
|
||||
return t;
|
||||
}
|
||||
|
||||
int handle;
|
||||
@@ -212,8 +212,7 @@ public final class NetworkTableInstance implements AutoCloseable {
|
||||
public <T, MessageType extends ProtoMessage<?>>
|
||||
ProtobufTopic<T> getProtobufTopic(String name, Protobuf<T, MessageType> proto) {
|
||||
Topic topic = m_topics.get(name);
|
||||
if (topic instanceof ProtobufTopic<?>
|
||||
&& ((ProtobufTopic<?>) topic).getProto().equals(proto)) {
|
||||
if (topic instanceof ProtobufTopic<?> t && t.getProto().equals(proto)) {
|
||||
@SuppressWarnings("unchecked")
|
||||
ProtobufTopic<T> wrapTopic = (ProtobufTopic<T>) topic;
|
||||
return wrapTopic;
|
||||
@@ -246,8 +245,7 @@ public final class NetworkTableInstance implements AutoCloseable {
|
||||
public <T>
|
||||
StructTopic<T> getStructTopic(String name, Struct<T> struct) {
|
||||
Topic topic = m_topics.get(name);
|
||||
if (topic instanceof StructTopic<?>
|
||||
&& ((StructTopic<?>) topic).getStruct().equals(struct)) {
|
||||
if (topic instanceof StructTopic<?> t && t.getStruct().equals(struct)) {
|
||||
@SuppressWarnings("unchecked")
|
||||
StructTopic<T> wrapTopic = (StructTopic<T>) topic;
|
||||
return wrapTopic;
|
||||
@@ -280,8 +278,7 @@ public final class NetworkTableInstance implements AutoCloseable {
|
||||
public <T>
|
||||
StructArrayTopic<T> getStructArrayTopic(String name, Struct<T> struct) {
|
||||
Topic topic = m_topics.get(name);
|
||||
if (topic instanceof StructArrayTopic<?>
|
||||
&& ((StructArrayTopic<?>) topic).getStruct().equals(struct)) {
|
||||
if (topic instanceof StructArrayTopic<?> t && t.getStruct().equals(struct)) {
|
||||
@SuppressWarnings("unchecked")
|
||||
StructArrayTopic<T> wrapTopic = (StructArrayTopic<T>) topic;
|
||||
return wrapTopic;
|
||||
@@ -1245,11 +1242,7 @@ public final class NetworkTableInstance implements AutoCloseable {
|
||||
if (other == this) {
|
||||
return true;
|
||||
}
|
||||
if (!(other instanceof NetworkTableInstance)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return m_handle == ((NetworkTableInstance) other).m_handle;
|
||||
return other instanceof NetworkTableInstance inst && m_handle == inst.m_handle;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -157,11 +157,9 @@ public final class NetworkTableValue {
|
||||
if (other == this) {
|
||||
return true;
|
||||
}
|
||||
if (!(other instanceof NetworkTableValue)) {
|
||||
return false;
|
||||
}
|
||||
NetworkTableValue ntOther = (NetworkTableValue) other;
|
||||
return m_type == ntOther.m_type && m_value.equals(ntOther.m_value);
|
||||
return other instanceof NetworkTableValue ntOther
|
||||
&& m_type == ntOther.m_type
|
||||
&& m_value.equals(ntOther.m_value);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -179,8 +179,8 @@ public final class NetworkTableInstance implements AutoCloseable {
|
||||
*/
|
||||
public BooleanTopic getBooleanTopic(String name) {
|
||||
Topic topic = m_topics.get(name);
|
||||
if (topic instanceof BooleanTopic) {
|
||||
return (BooleanTopic) topic;
|
||||
if (topic instanceof BooleanTopic t) {
|
||||
return t;
|
||||
}
|
||||
|
||||
int handle;
|
||||
@@ -207,8 +207,8 @@ public final class NetworkTableInstance implements AutoCloseable {
|
||||
*/
|
||||
public IntegerTopic getIntegerTopic(String name) {
|
||||
Topic topic = m_topics.get(name);
|
||||
if (topic instanceof IntegerTopic) {
|
||||
return (IntegerTopic) topic;
|
||||
if (topic instanceof IntegerTopic t) {
|
||||
return t;
|
||||
}
|
||||
|
||||
int handle;
|
||||
@@ -235,8 +235,8 @@ public final class NetworkTableInstance implements AutoCloseable {
|
||||
*/
|
||||
public FloatTopic getFloatTopic(String name) {
|
||||
Topic topic = m_topics.get(name);
|
||||
if (topic instanceof FloatTopic) {
|
||||
return (FloatTopic) topic;
|
||||
if (topic instanceof FloatTopic t) {
|
||||
return t;
|
||||
}
|
||||
|
||||
int handle;
|
||||
@@ -263,8 +263,8 @@ public final class NetworkTableInstance implements AutoCloseable {
|
||||
*/
|
||||
public DoubleTopic getDoubleTopic(String name) {
|
||||
Topic topic = m_topics.get(name);
|
||||
if (topic instanceof DoubleTopic) {
|
||||
return (DoubleTopic) topic;
|
||||
if (topic instanceof DoubleTopic t) {
|
||||
return t;
|
||||
}
|
||||
|
||||
int handle;
|
||||
@@ -291,8 +291,8 @@ public final class NetworkTableInstance implements AutoCloseable {
|
||||
*/
|
||||
public StringTopic getStringTopic(String name) {
|
||||
Topic topic = m_topics.get(name);
|
||||
if (topic instanceof StringTopic) {
|
||||
return (StringTopic) topic;
|
||||
if (topic instanceof StringTopic t) {
|
||||
return t;
|
||||
}
|
||||
|
||||
int handle;
|
||||
@@ -319,8 +319,8 @@ public final class NetworkTableInstance implements AutoCloseable {
|
||||
*/
|
||||
public RawTopic getRawTopic(String name) {
|
||||
Topic topic = m_topics.get(name);
|
||||
if (topic instanceof RawTopic) {
|
||||
return (RawTopic) topic;
|
||||
if (topic instanceof RawTopic t) {
|
||||
return t;
|
||||
}
|
||||
|
||||
int handle;
|
||||
@@ -347,8 +347,8 @@ public final class NetworkTableInstance implements AutoCloseable {
|
||||
*/
|
||||
public BooleanArrayTopic getBooleanArrayTopic(String name) {
|
||||
Topic topic = m_topics.get(name);
|
||||
if (topic instanceof BooleanArrayTopic) {
|
||||
return (BooleanArrayTopic) topic;
|
||||
if (topic instanceof BooleanArrayTopic t) {
|
||||
return t;
|
||||
}
|
||||
|
||||
int handle;
|
||||
@@ -375,8 +375,8 @@ public final class NetworkTableInstance implements AutoCloseable {
|
||||
*/
|
||||
public IntegerArrayTopic getIntegerArrayTopic(String name) {
|
||||
Topic topic = m_topics.get(name);
|
||||
if (topic instanceof IntegerArrayTopic) {
|
||||
return (IntegerArrayTopic) topic;
|
||||
if (topic instanceof IntegerArrayTopic t) {
|
||||
return t;
|
||||
}
|
||||
|
||||
int handle;
|
||||
@@ -403,8 +403,8 @@ public final class NetworkTableInstance implements AutoCloseable {
|
||||
*/
|
||||
public FloatArrayTopic getFloatArrayTopic(String name) {
|
||||
Topic topic = m_topics.get(name);
|
||||
if (topic instanceof FloatArrayTopic) {
|
||||
return (FloatArrayTopic) topic;
|
||||
if (topic instanceof FloatArrayTopic t) {
|
||||
return t;
|
||||
}
|
||||
|
||||
int handle;
|
||||
@@ -431,8 +431,8 @@ public final class NetworkTableInstance implements AutoCloseable {
|
||||
*/
|
||||
public DoubleArrayTopic getDoubleArrayTopic(String name) {
|
||||
Topic topic = m_topics.get(name);
|
||||
if (topic instanceof DoubleArrayTopic) {
|
||||
return (DoubleArrayTopic) topic;
|
||||
if (topic instanceof DoubleArrayTopic t) {
|
||||
return t;
|
||||
}
|
||||
|
||||
int handle;
|
||||
@@ -459,8 +459,8 @@ public final class NetworkTableInstance implements AutoCloseable {
|
||||
*/
|
||||
public StringArrayTopic getStringArrayTopic(String name) {
|
||||
Topic topic = m_topics.get(name);
|
||||
if (topic instanceof StringArrayTopic) {
|
||||
return (StringArrayTopic) topic;
|
||||
if (topic instanceof StringArrayTopic t) {
|
||||
return t;
|
||||
}
|
||||
|
||||
int handle;
|
||||
@@ -492,8 +492,7 @@ public final class NetworkTableInstance implements AutoCloseable {
|
||||
public <T, MessageType extends ProtoMessage<?>>
|
||||
ProtobufTopic<T> getProtobufTopic(String name, Protobuf<T, MessageType> proto) {
|
||||
Topic topic = m_topics.get(name);
|
||||
if (topic instanceof ProtobufTopic<?>
|
||||
&& ((ProtobufTopic<?>) topic).getProto().equals(proto)) {
|
||||
if (topic instanceof ProtobufTopic<?> t && t.getProto().equals(proto)) {
|
||||
@SuppressWarnings("unchecked")
|
||||
ProtobufTopic<T> wrapTopic = (ProtobufTopic<T>) topic;
|
||||
return wrapTopic;
|
||||
@@ -526,8 +525,7 @@ public final class NetworkTableInstance implements AutoCloseable {
|
||||
public <T>
|
||||
StructTopic<T> getStructTopic(String name, Struct<T> struct) {
|
||||
Topic topic = m_topics.get(name);
|
||||
if (topic instanceof StructTopic<?>
|
||||
&& ((StructTopic<?>) topic).getStruct().equals(struct)) {
|
||||
if (topic instanceof StructTopic<?> t && t.getStruct().equals(struct)) {
|
||||
@SuppressWarnings("unchecked")
|
||||
StructTopic<T> wrapTopic = (StructTopic<T>) topic;
|
||||
return wrapTopic;
|
||||
@@ -560,8 +558,7 @@ public final class NetworkTableInstance implements AutoCloseable {
|
||||
public <T>
|
||||
StructArrayTopic<T> getStructArrayTopic(String name, Struct<T> struct) {
|
||||
Topic topic = m_topics.get(name);
|
||||
if (topic instanceof StructArrayTopic<?>
|
||||
&& ((StructArrayTopic<?>) topic).getStruct().equals(struct)) {
|
||||
if (topic instanceof StructArrayTopic<?> t && t.getStruct().equals(struct)) {
|
||||
@SuppressWarnings("unchecked")
|
||||
StructArrayTopic<T> wrapTopic = (StructArrayTopic<T>) topic;
|
||||
return wrapTopic;
|
||||
@@ -1525,11 +1522,7 @@ public final class NetworkTableInstance implements AutoCloseable {
|
||||
if (other == this) {
|
||||
return true;
|
||||
}
|
||||
if (!(other instanceof NetworkTableInstance)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return m_handle == ((NetworkTableInstance) other).m_handle;
|
||||
return other instanceof NetworkTableInstance inst && m_handle == inst.m_handle;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -649,11 +649,9 @@ public final class NetworkTableValue {
|
||||
if (other == this) {
|
||||
return true;
|
||||
}
|
||||
if (!(other instanceof NetworkTableValue)) {
|
||||
return false;
|
||||
}
|
||||
NetworkTableValue ntOther = (NetworkTableValue) other;
|
||||
return m_type == ntOther.m_type && m_value.equals(ntOther.m_value);
|
||||
return other instanceof NetworkTableValue ntOther
|
||||
&& m_type == ntOther.m_type
|
||||
&& m_value.equals(ntOther.m_value);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -608,14 +608,9 @@ public final class NetworkTable {
|
||||
|
||||
@Override
|
||||
public boolean equals(Object other) {
|
||||
if (other == this) {
|
||||
return true;
|
||||
}
|
||||
if (!(other instanceof NetworkTable)) {
|
||||
return false;
|
||||
}
|
||||
NetworkTable ntOther = (NetworkTable) other;
|
||||
return m_inst.equals(ntOther.m_inst) && m_path.equals(ntOther.m_path);
|
||||
return other instanceof NetworkTable ntOther
|
||||
&& m_inst.equals(ntOther.m_inst)
|
||||
&& m_path.equals(ntOther.m_path);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -64,32 +64,20 @@ public enum NetworkTableType {
|
||||
* @return The kind
|
||||
*/
|
||||
public static NetworkTableType getFromInt(int value) {
|
||||
switch (value) {
|
||||
case 0x01:
|
||||
return kBoolean;
|
||||
case 0x02:
|
||||
return kDouble;
|
||||
case 0x04:
|
||||
return kString;
|
||||
case 0x08:
|
||||
return kRaw;
|
||||
case 0x10:
|
||||
return kBooleanArray;
|
||||
case 0x20:
|
||||
return kDoubleArray;
|
||||
case 0x40:
|
||||
return kStringArray;
|
||||
case 0x100:
|
||||
return kInteger;
|
||||
case 0x200:
|
||||
return kFloat;
|
||||
case 0x400:
|
||||
return kIntegerArray;
|
||||
case 0x800:
|
||||
return kFloatArray;
|
||||
default:
|
||||
return kUnassigned;
|
||||
}
|
||||
return switch (value) {
|
||||
case 0x01 -> kBoolean;
|
||||
case 0x02 -> kDouble;
|
||||
case 0x04 -> kString;
|
||||
case 0x08 -> kRaw;
|
||||
case 0x10 -> kBooleanArray;
|
||||
case 0x20 -> kDoubleArray;
|
||||
case 0x40 -> kStringArray;
|
||||
case 0x100 -> kInteger;
|
||||
case 0x200 -> kFloat;
|
||||
case 0x400 -> kIntegerArray;
|
||||
case 0x800 -> kFloatArray;
|
||||
default -> kUnassigned;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -99,33 +87,20 @@ public enum NetworkTableType {
|
||||
* @return The kind
|
||||
*/
|
||||
public static NetworkTableType getFromString(String typeString) {
|
||||
switch (typeString) {
|
||||
case "boolean":
|
||||
return kBoolean;
|
||||
case "double":
|
||||
return kDouble;
|
||||
case "float":
|
||||
return kFloat;
|
||||
case "int":
|
||||
return kInteger;
|
||||
case "string":
|
||||
case "json":
|
||||
return kString;
|
||||
case "boolean[]":
|
||||
return kBooleanArray;
|
||||
case "double[]":
|
||||
return kDoubleArray;
|
||||
case "float[]":
|
||||
return kFloatArray;
|
||||
case "int[]":
|
||||
return kIntegerArray;
|
||||
case "string[]":
|
||||
return kStringArray;
|
||||
case "":
|
||||
return kUnassigned;
|
||||
default:
|
||||
return kRaw;
|
||||
}
|
||||
return switch (typeString) {
|
||||
case "boolean" -> kBoolean;
|
||||
case "double" -> kDouble;
|
||||
case "float" -> kFloat;
|
||||
case "int" -> kInteger;
|
||||
case "string", "json" -> kString;
|
||||
case "boolean[]" -> kBooleanArray;
|
||||
case "double[]" -> kDoubleArray;
|
||||
case "float[]" -> kFloatArray;
|
||||
case "int[]" -> kIntegerArray;
|
||||
case "string[]" -> kStringArray;
|
||||
case "" -> kUnassigned;
|
||||
default -> kRaw;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -167,11 +167,9 @@ public final class ProtobufTopic<T> extends Topic {
|
||||
if (other == this) {
|
||||
return true;
|
||||
}
|
||||
if (!(other instanceof ProtobufTopic)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return super.equals(other) && m_proto == ((ProtobufTopic<?>) other).m_proto;
|
||||
return other instanceof ProtobufTopic<?> topic
|
||||
&& super.equals(topic)
|
||||
&& m_proto == topic.m_proto;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -15,38 +15,19 @@ public class PubSubOptions {
|
||||
public PubSubOptions(PubSubOption... options) {
|
||||
for (PubSubOption option : options) {
|
||||
switch (option.m_kind) {
|
||||
case periodic:
|
||||
periodic = option.m_dValue;
|
||||
break;
|
||||
case sendAll:
|
||||
sendAll = option.m_bValue;
|
||||
break;
|
||||
case topicsOnly:
|
||||
topicsOnly = option.m_bValue;
|
||||
break;
|
||||
case pollStorage:
|
||||
pollStorage = option.m_iValue;
|
||||
break;
|
||||
case keepDuplicates:
|
||||
keepDuplicates = option.m_bValue;
|
||||
break;
|
||||
case disableRemote:
|
||||
disableRemote = option.m_bValue;
|
||||
break;
|
||||
case disableLocal:
|
||||
disableLocal = option.m_bValue;
|
||||
break;
|
||||
case excludePublisher:
|
||||
excludePublisher = option.m_iValue;
|
||||
break;
|
||||
case excludeSelf:
|
||||
excludeSelf = option.m_bValue;
|
||||
break;
|
||||
case hidden:
|
||||
hidden = option.m_bValue;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
case periodic -> periodic = option.m_dValue;
|
||||
case sendAll -> sendAll = option.m_bValue;
|
||||
case topicsOnly -> topicsOnly = option.m_bValue;
|
||||
case pollStorage -> pollStorage = option.m_iValue;
|
||||
case keepDuplicates -> keepDuplicates = option.m_bValue;
|
||||
case disableRemote -> disableRemote = option.m_bValue;
|
||||
case disableLocal -> disableLocal = option.m_bValue;
|
||||
case excludePublisher -> excludePublisher = option.m_iValue;
|
||||
case excludeSelf -> excludeSelf = option.m_bValue;
|
||||
case hidden -> hidden = option.m_bValue;
|
||||
default -> {
|
||||
// NOP
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -167,11 +167,9 @@ public final class StructArrayTopic<T> extends Topic {
|
||||
if (other == this) {
|
||||
return true;
|
||||
}
|
||||
if (!(other instanceof StructArrayTopic)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return super.equals(other) && m_struct == ((StructArrayTopic<?>) other).m_struct;
|
||||
return other instanceof StructArrayTopic<?> topic
|
||||
&& super.equals(topic)
|
||||
&& m_struct == topic.m_struct;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -166,11 +166,9 @@ public final class StructTopic<T> extends Topic {
|
||||
if (other == this) {
|
||||
return true;
|
||||
}
|
||||
if (!(other instanceof StructTopic)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return super.equals(other) && m_struct == ((StructTopic<?>) other).m_struct;
|
||||
return other instanceof StructTopic<?> topic
|
||||
&& super.equals(topic)
|
||||
&& m_struct == topic.m_struct;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -321,14 +321,7 @@ public class Topic {
|
||||
|
||||
@Override
|
||||
public boolean equals(Object other) {
|
||||
if (other == this) {
|
||||
return true;
|
||||
}
|
||||
if (!(other instanceof Topic)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return m_handle == ((Topic) other).m_handle;
|
||||
return other instanceof Topic topic && m_handle == topic.m_handle;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1057,16 +1057,11 @@ public class ADIS16448_IMU implements AutoCloseable, Sendable {
|
||||
* @return Yaw axis angle in degrees (CCW positive).
|
||||
*/
|
||||
public synchronized double getAngle() {
|
||||
switch (m_yaw_axis) {
|
||||
case kX:
|
||||
return getGyroAngleX();
|
||||
case kY:
|
||||
return getGyroAngleY();
|
||||
case kZ:
|
||||
return getGyroAngleZ();
|
||||
default:
|
||||
return 0.0;
|
||||
}
|
||||
return switch (m_yaw_axis) {
|
||||
case kX -> getGyroAngleX();
|
||||
case kY -> getGyroAngleY();
|
||||
case kZ -> getGyroAngleZ();
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1075,16 +1070,11 @@ public class ADIS16448_IMU implements AutoCloseable, Sendable {
|
||||
* @return Yaw axis angular rate in degrees per second (CCW positive).
|
||||
*/
|
||||
public synchronized double getRate() {
|
||||
switch (m_yaw_axis) {
|
||||
case kX:
|
||||
return getGyroRateX();
|
||||
case kY:
|
||||
return getGyroRateY();
|
||||
case kZ:
|
||||
return getGyroRateZ();
|
||||
default:
|
||||
return 0.0;
|
||||
}
|
||||
return switch (m_yaw_axis) {
|
||||
case kX -> getGyroRateX();
|
||||
case kY -> getGyroRateY();
|
||||
case kZ -> getGyroRateZ();
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1061,30 +1061,21 @@ public class ADIS16470_IMU implements AutoCloseable, Sendable {
|
||||
* @param angle A double in degrees (CCW positive)
|
||||
*/
|
||||
public void setGyroAngle(IMUAxis axis, double angle) {
|
||||
switch (axis) {
|
||||
case kYaw:
|
||||
axis = m_yaw_axis;
|
||||
break;
|
||||
case kPitch:
|
||||
axis = m_pitch_axis;
|
||||
break;
|
||||
case kRoll:
|
||||
axis = m_roll_axis;
|
||||
break;
|
||||
default:
|
||||
}
|
||||
axis =
|
||||
switch (axis) {
|
||||
case kYaw -> m_yaw_axis;
|
||||
case kPitch -> m_pitch_axis;
|
||||
case kRoll -> m_roll_axis;
|
||||
default -> axis;
|
||||
};
|
||||
|
||||
switch (axis) {
|
||||
case kX:
|
||||
this.setGyroAngleX(angle);
|
||||
break;
|
||||
case kY:
|
||||
this.setGyroAngleY(angle);
|
||||
break;
|
||||
case kZ:
|
||||
this.setGyroAngleZ(angle);
|
||||
break;
|
||||
default:
|
||||
case kX -> setGyroAngleX(angle);
|
||||
case kY -> setGyroAngleY(angle);
|
||||
case kZ -> setGyroAngleZ(angle);
|
||||
default -> {
|
||||
// NOP
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1131,39 +1122,35 @@ public class ADIS16470_IMU implements AutoCloseable, Sendable {
|
||||
* @return The axis angle in degrees (CCW positive).
|
||||
*/
|
||||
public synchronized double getAngle(IMUAxis axis) {
|
||||
switch (axis) {
|
||||
case kYaw:
|
||||
axis = m_yaw_axis;
|
||||
break;
|
||||
case kPitch:
|
||||
axis = m_pitch_axis;
|
||||
break;
|
||||
case kRoll:
|
||||
axis = m_roll_axis;
|
||||
break;
|
||||
default:
|
||||
}
|
||||
axis =
|
||||
switch (axis) {
|
||||
case kYaw -> m_yaw_axis;
|
||||
case kPitch -> m_pitch_axis;
|
||||
case kRoll -> m_roll_axis;
|
||||
default -> axis;
|
||||
};
|
||||
|
||||
switch (axis) {
|
||||
case kX:
|
||||
return switch (axis) {
|
||||
case kX -> {
|
||||
if (m_simGyroAngleX != null) {
|
||||
return m_simGyroAngleX.get();
|
||||
yield m_simGyroAngleX.get();
|
||||
}
|
||||
return m_integ_angle_x;
|
||||
case kY:
|
||||
yield m_integ_angle_x;
|
||||
}
|
||||
case kY -> {
|
||||
if (m_simGyroAngleY != null) {
|
||||
return m_simGyroAngleY.get();
|
||||
yield m_simGyroAngleY.get();
|
||||
}
|
||||
return m_integ_angle_y;
|
||||
case kZ:
|
||||
yield m_integ_angle_y;
|
||||
}
|
||||
case kZ -> {
|
||||
if (m_simGyroAngleZ != null) {
|
||||
return m_simGyroAngleZ.get();
|
||||
yield m_simGyroAngleZ.get();
|
||||
}
|
||||
return m_integ_angle_z;
|
||||
default:
|
||||
}
|
||||
|
||||
return 0.0;
|
||||
yield m_integ_angle_z;
|
||||
}
|
||||
default -> 0.0;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1172,25 +1159,27 @@ public class ADIS16470_IMU implements AutoCloseable, Sendable {
|
||||
* @return The Yaw axis angle in degrees (CCW positive).
|
||||
*/
|
||||
public synchronized double getAngle() {
|
||||
switch (m_yaw_axis) {
|
||||
case kX:
|
||||
return switch (m_yaw_axis) {
|
||||
case kX -> {
|
||||
if (m_simGyroAngleX != null) {
|
||||
return m_simGyroAngleX.get();
|
||||
yield m_simGyroAngleX.get();
|
||||
}
|
||||
return m_integ_angle_x;
|
||||
case kY:
|
||||
yield m_integ_angle_x;
|
||||
}
|
||||
case kY -> {
|
||||
if (m_simGyroAngleY != null) {
|
||||
return m_simGyroAngleY.get();
|
||||
yield m_simGyroAngleY.get();
|
||||
}
|
||||
return m_integ_angle_y;
|
||||
case kZ:
|
||||
yield m_integ_angle_y;
|
||||
}
|
||||
case kZ -> {
|
||||
if (m_simGyroAngleZ != null) {
|
||||
return m_simGyroAngleZ.get();
|
||||
yield m_simGyroAngleZ.get();
|
||||
}
|
||||
return m_integ_angle_z;
|
||||
default:
|
||||
}
|
||||
return 0.0;
|
||||
yield m_integ_angle_z;
|
||||
}
|
||||
default -> 0.0;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1200,38 +1189,35 @@ public class ADIS16470_IMU implements AutoCloseable, Sendable {
|
||||
* @return Axis angular rate in degrees per second (CCW positive).
|
||||
*/
|
||||
public synchronized double getRate(IMUAxis axis) {
|
||||
switch (axis) {
|
||||
case kYaw:
|
||||
axis = m_yaw_axis;
|
||||
break;
|
||||
case kPitch:
|
||||
axis = m_pitch_axis;
|
||||
break;
|
||||
case kRoll:
|
||||
axis = m_roll_axis;
|
||||
break;
|
||||
default:
|
||||
}
|
||||
axis =
|
||||
switch (axis) {
|
||||
case kYaw -> m_yaw_axis;
|
||||
case kPitch -> m_pitch_axis;
|
||||
case kRoll -> m_roll_axis;
|
||||
default -> axis;
|
||||
};
|
||||
|
||||
switch (axis) {
|
||||
case kX:
|
||||
return switch (axis) {
|
||||
case kX -> {
|
||||
if (m_simGyroRateX != null) {
|
||||
return m_simGyroRateX.get();
|
||||
yield m_simGyroRateX.get();
|
||||
}
|
||||
return m_gyro_rate_x;
|
||||
case kY:
|
||||
yield m_gyro_rate_x;
|
||||
}
|
||||
case kY -> {
|
||||
if (m_simGyroRateY != null) {
|
||||
return m_simGyroRateY.get();
|
||||
yield m_simGyroRateY.get();
|
||||
}
|
||||
return m_gyro_rate_y;
|
||||
case kZ:
|
||||
yield m_gyro_rate_y;
|
||||
}
|
||||
case kZ -> {
|
||||
if (m_simGyroRateZ != null) {
|
||||
return m_simGyroRateZ.get();
|
||||
yield m_simGyroRateZ.get();
|
||||
}
|
||||
return m_gyro_rate_z;
|
||||
default:
|
||||
}
|
||||
return 0.0;
|
||||
yield m_gyro_rate_z;
|
||||
}
|
||||
default -> 0.0;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1240,25 +1226,27 @@ public class ADIS16470_IMU implements AutoCloseable, Sendable {
|
||||
* @return Yaw axis angular rate in degrees per second (CCW positive).
|
||||
*/
|
||||
public synchronized double getRate() {
|
||||
switch (m_yaw_axis) {
|
||||
case kX:
|
||||
return switch (m_yaw_axis) {
|
||||
case kX -> {
|
||||
if (m_simGyroRateX != null) {
|
||||
return m_simGyroRateX.get();
|
||||
yield m_simGyroRateX.get();
|
||||
}
|
||||
return m_gyro_rate_x;
|
||||
case kY:
|
||||
yield m_gyro_rate_x;
|
||||
}
|
||||
case kY -> {
|
||||
if (m_simGyroRateY != null) {
|
||||
return m_simGyroRateY.get();
|
||||
yield m_simGyroRateY.get();
|
||||
}
|
||||
return m_gyro_rate_y;
|
||||
case kZ:
|
||||
yield m_gyro_rate_y;
|
||||
}
|
||||
case kZ -> {
|
||||
if (m_simGyroRateZ != null) {
|
||||
return m_simGyroRateZ.get();
|
||||
yield m_simGyroRateZ.get();
|
||||
}
|
||||
return m_gyro_rate_z;
|
||||
default:
|
||||
}
|
||||
return 0.0;
|
||||
yield m_gyro_rate_z;
|
||||
}
|
||||
default -> 0.0;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -182,23 +182,13 @@ public class ADXL345_I2C implements NTSendable, AutoCloseable {
|
||||
* measure.
|
||||
*/
|
||||
public final void setRange(Range range) {
|
||||
final byte value;
|
||||
switch (range) {
|
||||
case k2G:
|
||||
value = 0;
|
||||
break;
|
||||
case k4G:
|
||||
value = 1;
|
||||
break;
|
||||
case k8G:
|
||||
value = 2;
|
||||
break;
|
||||
case k16G:
|
||||
value = 3;
|
||||
break;
|
||||
default:
|
||||
throw new IllegalArgumentException("Missing case for range type " + range);
|
||||
}
|
||||
final byte value =
|
||||
switch (range) {
|
||||
case k2G -> 0;
|
||||
case k4G -> 1;
|
||||
case k8G -> 2;
|
||||
case k16G -> 3;
|
||||
};
|
||||
|
||||
// Specify the data format to read
|
||||
m_i2c.write(kDataFormatRegister, kDataFormat_FullRes | value);
|
||||
|
||||
@@ -171,23 +171,13 @@ public class ADXL345_SPI implements NTSendable, AutoCloseable {
|
||||
* measure.
|
||||
*/
|
||||
public void setRange(Range range) {
|
||||
final byte value;
|
||||
switch (range) {
|
||||
case k2G:
|
||||
value = 0;
|
||||
break;
|
||||
case k4G:
|
||||
value = 1;
|
||||
break;
|
||||
case k8G:
|
||||
value = 2;
|
||||
break;
|
||||
case k16G:
|
||||
value = 3;
|
||||
break;
|
||||
default:
|
||||
throw new IllegalArgumentException("Missing case for range type " + range);
|
||||
}
|
||||
final byte value =
|
||||
switch (range) {
|
||||
case k2G -> 0;
|
||||
case k4G -> 1;
|
||||
case k8G -> 2;
|
||||
case k16G -> 3;
|
||||
};
|
||||
|
||||
// Specify the data format to read
|
||||
byte[] commands = new byte[] {kDataFormatRegister, (byte) (kDataFormat_FullRes | value)};
|
||||
|
||||
@@ -193,23 +193,21 @@ public class ADXL362 implements NTSendable, AutoCloseable {
|
||||
return;
|
||||
}
|
||||
|
||||
final byte value;
|
||||
switch (range) {
|
||||
case k2G:
|
||||
value = kFilterCtl_Range2G;
|
||||
m_gsPerLSB = 0.001;
|
||||
break;
|
||||
case k4G:
|
||||
value = kFilterCtl_Range4G;
|
||||
m_gsPerLSB = 0.002;
|
||||
break;
|
||||
case k8G:
|
||||
value = kFilterCtl_Range8G;
|
||||
m_gsPerLSB = 0.004;
|
||||
break;
|
||||
default:
|
||||
throw new IllegalArgumentException("Missing case for range type " + range);
|
||||
}
|
||||
final byte value =
|
||||
switch (range) {
|
||||
case k2G -> {
|
||||
m_gsPerLSB = 0.001;
|
||||
yield kFilterCtl_Range2G;
|
||||
}
|
||||
case k4G -> {
|
||||
m_gsPerLSB = 0.002;
|
||||
yield kFilterCtl_Range4G;
|
||||
}
|
||||
case k8G -> {
|
||||
m_gsPerLSB = 0.004;
|
||||
yield kFilterCtl_Range8G;
|
||||
}
|
||||
};
|
||||
|
||||
// Specify the data format to read
|
||||
byte[] commands =
|
||||
|
||||
@@ -74,24 +74,12 @@ public class AddressableLEDBuffer {
|
||||
final int X = (chroma * remainder) >> 8;
|
||||
|
||||
switch (region) {
|
||||
case 0:
|
||||
setRGB(index, v, X + m, m);
|
||||
break;
|
||||
case 1:
|
||||
setRGB(index, v - X, v, m);
|
||||
break;
|
||||
case 2:
|
||||
setRGB(index, m, v, X + m);
|
||||
break;
|
||||
case 3:
|
||||
setRGB(index, m, v - X, v);
|
||||
break;
|
||||
case 4:
|
||||
setRGB(index, X + m, m, v);
|
||||
break;
|
||||
default:
|
||||
setRGB(index, v, m, v - X);
|
||||
break;
|
||||
case 0 -> setRGB(index, v, X + m, m);
|
||||
case 1 -> setRGB(index, v - X, v, m);
|
||||
case 2 -> setRGB(index, m, v, X + m);
|
||||
case 3 -> setRGB(index, m, v - X, v);
|
||||
case 4 -> setRGB(index, X + m, m, v);
|
||||
default -> setRGB(index, v, m, v - X);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -6,7 +6,6 @@ package edu.wpi.first.wpilibj;
|
||||
|
||||
import static edu.wpi.first.util.ErrorMessages.requireNonNullParam;
|
||||
|
||||
import edu.wpi.first.wpilibj.SynchronousInterrupt.WaitResult;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.function.BiConsumer;
|
||||
|
||||
@@ -132,25 +131,22 @@ public class AsynchronousInterrupt implements AutoCloseable {
|
||||
if (!m_keepRunning.get()) {
|
||||
break;
|
||||
}
|
||||
if (result == WaitResult.kTimeout) {
|
||||
continue;
|
||||
}
|
||||
|
||||
boolean rising = false;
|
||||
boolean falling = false;
|
||||
switch (result) {
|
||||
case kBoth:
|
||||
case kBoth -> {
|
||||
rising = true;
|
||||
falling = true;
|
||||
break;
|
||||
case kFallingEdge:
|
||||
}
|
||||
case kFallingEdge -> {
|
||||
falling = true;
|
||||
break;
|
||||
case kRisingEdge:
|
||||
}
|
||||
case kRisingEdge -> {
|
||||
rising = true;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
default -> {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
m_callback.accept(rising, falling);
|
||||
|
||||
@@ -58,20 +58,14 @@ public class BuiltInAccelerometer implements Sendable, AutoCloseable {
|
||||
public final void setRange(Range range) {
|
||||
AccelerometerJNI.setAccelerometerActive(false);
|
||||
|
||||
switch (range) {
|
||||
case k2G:
|
||||
AccelerometerJNI.setAccelerometerRange(0);
|
||||
break;
|
||||
case k4G:
|
||||
AccelerometerJNI.setAccelerometerRange(1);
|
||||
break;
|
||||
case k8G:
|
||||
AccelerometerJNI.setAccelerometerRange(2);
|
||||
break;
|
||||
default:
|
||||
throw new IllegalArgumentException("Missing case for range type " + range);
|
||||
}
|
||||
int rangeValue =
|
||||
switch (range) {
|
||||
case k2G -> 0;
|
||||
case k4G -> 1;
|
||||
case k8G -> 2;
|
||||
};
|
||||
|
||||
AccelerometerJNI.setAccelerometerRange(rangeValue);
|
||||
AccelerometerJNI.setAccelerometerActive(true);
|
||||
}
|
||||
|
||||
|
||||
@@ -31,16 +31,12 @@ public enum CompressorConfigType {
|
||||
* @return type
|
||||
*/
|
||||
public static CompressorConfigType fromValue(int value) {
|
||||
switch (value) {
|
||||
case REVPHJNI.COMPRESSOR_CONFIG_TYPE_HYBRID:
|
||||
return Hybrid;
|
||||
case REVPHJNI.COMPRESSOR_CONFIG_TYPE_ANALOG:
|
||||
return Analog;
|
||||
case REVPHJNI.COMPRESSOR_CONFIG_TYPE_DIGITAL:
|
||||
return Digital;
|
||||
default:
|
||||
return Disabled;
|
||||
}
|
||||
return switch (value) {
|
||||
case REVPHJNI.COMPRESSOR_CONFIG_TYPE_HYBRID -> Hybrid;
|
||||
case REVPHJNI.COMPRESSOR_CONFIG_TYPE_ANALOG -> Analog;
|
||||
case REVPHJNI.COMPRESSOR_CONFIG_TYPE_DIGITAL -> Digital;
|
||||
default -> Disabled;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -382,21 +382,13 @@ public final class DataLogManager {
|
||||
DriverStation.MatchType matchType = DriverStation.getMatchType();
|
||||
if (matchType != DriverStation.MatchType.None) {
|
||||
// rename per match info
|
||||
char matchTypeChar;
|
||||
switch (matchType) {
|
||||
case Practice:
|
||||
matchTypeChar = 'P';
|
||||
break;
|
||||
case Qualification:
|
||||
matchTypeChar = 'Q';
|
||||
break;
|
||||
case Elimination:
|
||||
matchTypeChar = 'E';
|
||||
break;
|
||||
default:
|
||||
matchTypeChar = '_';
|
||||
break;
|
||||
}
|
||||
char matchTypeChar =
|
||||
switch (matchType) {
|
||||
case Practice -> 'P';
|
||||
case Qualification -> 'Q';
|
||||
case Elimination -> 'E';
|
||||
default -> '_';
|
||||
};
|
||||
m_log.setFilename(
|
||||
"FRC_"
|
||||
+ m_timeFormatter.format(LocalDateTime.now(m_utc))
|
||||
|
||||
@@ -125,21 +125,12 @@ public class DoubleSolenoid implements Sendable, AutoCloseable {
|
||||
* @param value The value to set (Off, Forward, Reverse)
|
||||
*/
|
||||
public void set(final Value value) {
|
||||
int setValue;
|
||||
|
||||
switch (value) {
|
||||
case kOff:
|
||||
setValue = 0;
|
||||
break;
|
||||
case kForward:
|
||||
setValue = m_forwardMask;
|
||||
break;
|
||||
case kReverse:
|
||||
setValue = m_reverseMask;
|
||||
break;
|
||||
default:
|
||||
throw new AssertionError("Illegal value: " + value);
|
||||
}
|
||||
int setValue =
|
||||
switch (value) {
|
||||
case kOff -> 0;
|
||||
case kForward -> m_forwardMask;
|
||||
case kReverse -> m_reverseMask;
|
||||
};
|
||||
|
||||
m_module.setSolenoids(m_mask, setValue);
|
||||
}
|
||||
|
||||
@@ -137,34 +137,17 @@ public final class DriverStation {
|
||||
|
||||
private void sendMatchData() {
|
||||
AllianceStationID allianceID = DriverStationJNI.getAllianceStation();
|
||||
boolean isRedAlliance = false;
|
||||
int stationNumber = 1;
|
||||
switch (allianceID) {
|
||||
case Blue1:
|
||||
isRedAlliance = false;
|
||||
stationNumber = 1;
|
||||
break;
|
||||
case Blue2:
|
||||
isRedAlliance = false;
|
||||
stationNumber = 2;
|
||||
break;
|
||||
case Blue3:
|
||||
isRedAlliance = false;
|
||||
stationNumber = 3;
|
||||
break;
|
||||
case Red1:
|
||||
isRedAlliance = true;
|
||||
stationNumber = 1;
|
||||
break;
|
||||
case Red2:
|
||||
isRedAlliance = true;
|
||||
stationNumber = 2;
|
||||
break;
|
||||
default:
|
||||
isRedAlliance = true;
|
||||
stationNumber = 3;
|
||||
break;
|
||||
}
|
||||
final int stationNumber =
|
||||
switch (allianceID) {
|
||||
case Blue1, Red1 -> 1;
|
||||
case Blue2, Red2 -> 2;
|
||||
case Blue3, Red3, Unknown -> 3;
|
||||
};
|
||||
final boolean isRedAlliance =
|
||||
switch (allianceID) {
|
||||
case Blue1, Blue2, Blue3 -> false;
|
||||
case Red1, Red2, Red3, Unknown -> true;
|
||||
};
|
||||
|
||||
String currentEventName;
|
||||
String currentGameSpecificMessage;
|
||||
@@ -1059,16 +1042,12 @@ public final class DriverStation {
|
||||
} finally {
|
||||
m_cacheDataMutex.unlock();
|
||||
}
|
||||
switch (matchType) {
|
||||
case 1:
|
||||
return MatchType.Practice;
|
||||
case 2:
|
||||
return MatchType.Qualification;
|
||||
case 3:
|
||||
return MatchType.Elimination;
|
||||
default:
|
||||
return MatchType.None;
|
||||
}
|
||||
return switch (matchType) {
|
||||
case 1 -> MatchType.Practice;
|
||||
case 2 -> MatchType.Qualification;
|
||||
case 3 -> MatchType.Elimination;
|
||||
default -> MatchType.None;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -562,16 +562,11 @@ public class Encoder implements CounterBase, Sendable, AutoCloseable {
|
||||
* @return decoding scale factor
|
||||
*/
|
||||
public double getDecodingScaleFactor() {
|
||||
switch (m_encodingType) {
|
||||
case k1X:
|
||||
return 1.0;
|
||||
case k2X:
|
||||
return 0.5;
|
||||
case k4X:
|
||||
return 0.25;
|
||||
default:
|
||||
return 0.0;
|
||||
}
|
||||
return switch (m_encodingType) {
|
||||
case k1X -> 1.0;
|
||||
case k2X -> 0.5;
|
||||
case k4X -> 0.25;
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -457,17 +457,12 @@ public class GenericHID {
|
||||
value = MathUtil.clamp(value, 0, 1);
|
||||
int rumbleValue = (int) (value * 65535);
|
||||
switch (type) {
|
||||
case kLeftRumble:
|
||||
this.m_leftRumble = rumbleValue;
|
||||
break;
|
||||
case kRightRumble:
|
||||
this.m_rightRumble = rumbleValue;
|
||||
break;
|
||||
case kBothRumble:
|
||||
default:
|
||||
case kLeftRumble -> this.m_leftRumble = rumbleValue;
|
||||
case kRightRumble -> this.m_rightRumble = rumbleValue;
|
||||
default -> {
|
||||
this.m_leftRumble = rumbleValue;
|
||||
this.m_rightRumble = rumbleValue;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
DriverStationJNI.setJoystickOutputs(
|
||||
|
||||
@@ -323,59 +323,77 @@ public abstract class IterativeRobotBase extends RobotBase {
|
||||
// If mode changed, call mode exit and entry functions
|
||||
if (m_lastMode != mode) {
|
||||
// Call last mode's exit function
|
||||
if (m_lastMode == Mode.kDisabled) {
|
||||
disabledExit();
|
||||
} else if (m_lastMode == Mode.kAutonomous) {
|
||||
autonomousExit();
|
||||
} else if (m_lastMode == Mode.kTeleop) {
|
||||
teleopExit();
|
||||
} else if (m_lastMode == Mode.kTest) {
|
||||
if (m_lwEnabledInTest) {
|
||||
LiveWindow.setEnabled(false);
|
||||
Shuffleboard.disableActuatorWidgets();
|
||||
switch (m_lastMode) {
|
||||
case kDisabled -> disabledExit();
|
||||
case kAutonomous -> autonomousExit();
|
||||
case kTeleop -> teleopExit();
|
||||
case kTest -> {
|
||||
if (m_lwEnabledInTest) {
|
||||
LiveWindow.setEnabled(false);
|
||||
Shuffleboard.disableActuatorWidgets();
|
||||
}
|
||||
testExit();
|
||||
}
|
||||
default -> {
|
||||
// NOP
|
||||
}
|
||||
testExit();
|
||||
}
|
||||
|
||||
// Call current mode's entry function
|
||||
if (mode == Mode.kDisabled) {
|
||||
disabledInit();
|
||||
m_watchdog.addEpoch("disabledInit()");
|
||||
} else if (mode == Mode.kAutonomous) {
|
||||
autonomousInit();
|
||||
m_watchdog.addEpoch("autonomousInit()");
|
||||
} else if (mode == Mode.kTeleop) {
|
||||
teleopInit();
|
||||
m_watchdog.addEpoch("teleopInit()");
|
||||
} else if (mode == Mode.kTest) {
|
||||
if (m_lwEnabledInTest) {
|
||||
LiveWindow.setEnabled(true);
|
||||
Shuffleboard.enableActuatorWidgets();
|
||||
switch (mode) {
|
||||
case kDisabled -> {
|
||||
disabledInit();
|
||||
m_watchdog.addEpoch("disabledInit()");
|
||||
}
|
||||
case kAutonomous -> {
|
||||
autonomousInit();
|
||||
m_watchdog.addEpoch("autonomousInit()");
|
||||
}
|
||||
case kTeleop -> {
|
||||
teleopInit();
|
||||
m_watchdog.addEpoch("teleopInit()");
|
||||
}
|
||||
case kTest -> {
|
||||
if (m_lwEnabledInTest) {
|
||||
LiveWindow.setEnabled(true);
|
||||
Shuffleboard.enableActuatorWidgets();
|
||||
}
|
||||
testInit();
|
||||
m_watchdog.addEpoch("testInit()");
|
||||
}
|
||||
default -> {
|
||||
// NOP
|
||||
}
|
||||
testInit();
|
||||
m_watchdog.addEpoch("testInit()");
|
||||
}
|
||||
|
||||
m_lastMode = mode;
|
||||
}
|
||||
|
||||
// Call the appropriate function depending upon the current robot mode
|
||||
if (mode == Mode.kDisabled) {
|
||||
DriverStationJNI.observeUserProgramDisabled();
|
||||
disabledPeriodic();
|
||||
m_watchdog.addEpoch("disabledPeriodic()");
|
||||
} else if (mode == Mode.kAutonomous) {
|
||||
DriverStationJNI.observeUserProgramAutonomous();
|
||||
autonomousPeriodic();
|
||||
m_watchdog.addEpoch("autonomousPeriodic()");
|
||||
} else if (mode == Mode.kTeleop) {
|
||||
DriverStationJNI.observeUserProgramTeleop();
|
||||
teleopPeriodic();
|
||||
m_watchdog.addEpoch("teleopPeriodic()");
|
||||
} else {
|
||||
DriverStationJNI.observeUserProgramTest();
|
||||
testPeriodic();
|
||||
m_watchdog.addEpoch("testPeriodic()");
|
||||
switch (mode) {
|
||||
case kDisabled -> {
|
||||
DriverStationJNI.observeUserProgramDisabled();
|
||||
disabledPeriodic();
|
||||
m_watchdog.addEpoch("disabledPeriodic()");
|
||||
}
|
||||
case kAutonomous -> {
|
||||
DriverStationJNI.observeUserProgramAutonomous();
|
||||
autonomousPeriodic();
|
||||
m_watchdog.addEpoch("autonomousPeriodic()");
|
||||
}
|
||||
case kTeleop -> {
|
||||
DriverStationJNI.observeUserProgramTeleop();
|
||||
teleopPeriodic();
|
||||
m_watchdog.addEpoch("teleopPeriodic()");
|
||||
}
|
||||
case kTest -> {
|
||||
DriverStationJNI.observeUserProgramTest();
|
||||
testPeriodic();
|
||||
m_watchdog.addEpoch("testPeriodic()");
|
||||
}
|
||||
default -> {
|
||||
// NOP
|
||||
}
|
||||
}
|
||||
|
||||
robotPeriodic();
|
||||
|
||||
@@ -211,22 +211,14 @@ public class PWM implements Sendable, AutoCloseable {
|
||||
* @param mult The period multiplier to apply to this channel
|
||||
*/
|
||||
public void setPeriodMultiplier(PeriodMultiplier mult) {
|
||||
switch (mult) {
|
||||
case k4X:
|
||||
// Squelch 3 out of 4 outputs
|
||||
PWMJNI.setPWMPeriodScale(m_handle, 3);
|
||||
break;
|
||||
case k2X:
|
||||
// Squelch 1 out of 2 outputs
|
||||
PWMJNI.setPWMPeriodScale(m_handle, 1);
|
||||
break;
|
||||
case k1X:
|
||||
// Don't squelch any outputs
|
||||
PWMJNI.setPWMPeriodScale(m_handle, 0);
|
||||
break;
|
||||
default:
|
||||
// Cannot hit this, limited by PeriodMultiplier enum
|
||||
}
|
||||
int scale =
|
||||
switch (mult) {
|
||||
case k4X -> 3; // Squelch 3 out of 4 outputs
|
||||
case k2X -> 1; // Squelch 1 out of 2 outputs
|
||||
case k1X -> 0; // Don't squelch any outputs
|
||||
};
|
||||
|
||||
PWMJNI.setPWMPeriodScale(m_handle, scale);
|
||||
}
|
||||
|
||||
/** Latches PWM to zero. */
|
||||
|
||||
@@ -14,12 +14,10 @@ public interface PneumaticsBase extends AutoCloseable {
|
||||
* @return module
|
||||
*/
|
||||
static PneumaticsBase getForType(int module, PneumaticsModuleType type) {
|
||||
if (type == PneumaticsModuleType.CTREPCM) {
|
||||
return new PneumaticsControlModule(module);
|
||||
} else if (type == PneumaticsModuleType.REVPH) {
|
||||
return new PneumaticHub(module);
|
||||
}
|
||||
throw new IllegalArgumentException("Unknown module type");
|
||||
return switch (type) {
|
||||
case CTREPCM -> new PneumaticsControlModule(module);
|
||||
case REVPH -> new PneumaticHub(module);
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -29,12 +27,10 @@ public interface PneumaticsBase extends AutoCloseable {
|
||||
* @return module default
|
||||
*/
|
||||
static int getDefaultForType(PneumaticsModuleType type) {
|
||||
if (type == PneumaticsModuleType.CTREPCM) {
|
||||
return SensorUtil.getDefaultCTREPCMModule();
|
||||
} else if (type == PneumaticsModuleType.REVPH) {
|
||||
return SensorUtil.getDefaultREVPHModule();
|
||||
}
|
||||
throw new IllegalArgumentException("Unknown module type");
|
||||
return switch (type) {
|
||||
case CTREPCM -> SensorUtil.getDefaultCTREPCMModule();
|
||||
case REVPH -> SensorUtil.getDefaultREVPHModule();
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -182,23 +182,23 @@ public class Relay extends MotorSafety implements Sendable, AutoCloseable {
|
||||
*/
|
||||
public void set(Value value) {
|
||||
switch (value) {
|
||||
case kOff:
|
||||
case kOff -> {
|
||||
if (m_direction == Direction.kBoth || m_direction == Direction.kForward) {
|
||||
RelayJNI.setRelay(m_forwardHandle, false);
|
||||
}
|
||||
if (m_direction == Direction.kBoth || m_direction == Direction.kReverse) {
|
||||
RelayJNI.setRelay(m_reverseHandle, false);
|
||||
}
|
||||
break;
|
||||
case kOn:
|
||||
}
|
||||
case kOn -> {
|
||||
if (m_direction == Direction.kBoth || m_direction == Direction.kForward) {
|
||||
RelayJNI.setRelay(m_forwardHandle, true);
|
||||
}
|
||||
if (m_direction == Direction.kBoth || m_direction == Direction.kReverse) {
|
||||
RelayJNI.setRelay(m_reverseHandle, true);
|
||||
}
|
||||
break;
|
||||
case kForward:
|
||||
}
|
||||
case kForward -> {
|
||||
if (m_direction == Direction.kReverse) {
|
||||
throw new InvalidValueException(
|
||||
"A relay configured for reverse cannot be set to " + "forward");
|
||||
@@ -209,8 +209,8 @@ public class Relay extends MotorSafety implements Sendable, AutoCloseable {
|
||||
if (m_direction == Direction.kBoth) {
|
||||
RelayJNI.setRelay(m_reverseHandle, false);
|
||||
}
|
||||
break;
|
||||
case kReverse:
|
||||
}
|
||||
case kReverse -> {
|
||||
if (m_direction == Direction.kForward) {
|
||||
throw new InvalidValueException(
|
||||
"A relay configured for forward cannot be set to " + "reverse");
|
||||
@@ -221,9 +221,10 @@ public class Relay extends MotorSafety implements Sendable, AutoCloseable {
|
||||
if (m_direction == Direction.kBoth || m_direction == Direction.kReverse) {
|
||||
RelayJNI.setRelay(m_reverseHandle, true);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
}
|
||||
default -> {
|
||||
// Cannot hit this, limited by Value enum
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -91,43 +91,28 @@ public abstract class RobotBase implements AutoCloseable {
|
||||
@Override
|
||||
public void reportUsage(MathUsageId id, int count) {
|
||||
switch (id) {
|
||||
case kKinematics_DifferentialDrive:
|
||||
HAL.report(
|
||||
tResourceType.kResourceType_Kinematics,
|
||||
tInstances.kKinematics_DifferentialDrive);
|
||||
break;
|
||||
case kKinematics_MecanumDrive:
|
||||
HAL.report(
|
||||
tResourceType.kResourceType_Kinematics, tInstances.kKinematics_MecanumDrive);
|
||||
break;
|
||||
case kKinematics_SwerveDrive:
|
||||
HAL.report(
|
||||
tResourceType.kResourceType_Kinematics, tInstances.kKinematics_SwerveDrive);
|
||||
break;
|
||||
case kTrajectory_TrapezoidProfile:
|
||||
HAL.report(tResourceType.kResourceType_TrapezoidProfile, count);
|
||||
break;
|
||||
case kFilter_Linear:
|
||||
HAL.report(tResourceType.kResourceType_LinearFilter, count);
|
||||
break;
|
||||
case kOdometry_DifferentialDrive:
|
||||
HAL.report(
|
||||
tResourceType.kResourceType_Odometry, tInstances.kOdometry_DifferentialDrive);
|
||||
break;
|
||||
case kOdometry_SwerveDrive:
|
||||
HAL.report(tResourceType.kResourceType_Odometry, tInstances.kOdometry_SwerveDrive);
|
||||
break;
|
||||
case kOdometry_MecanumDrive:
|
||||
HAL.report(tResourceType.kResourceType_Odometry, tInstances.kOdometry_MecanumDrive);
|
||||
break;
|
||||
case kController_PIDController2:
|
||||
HAL.report(tResourceType.kResourceType_PIDController2, count);
|
||||
break;
|
||||
case kController_ProfiledPIDController:
|
||||
HAL.report(tResourceType.kResourceType_ProfiledPIDController, count);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
case kKinematics_DifferentialDrive -> HAL.report(
|
||||
tResourceType.kResourceType_Kinematics, tInstances.kKinematics_DifferentialDrive);
|
||||
case kKinematics_MecanumDrive -> HAL.report(
|
||||
tResourceType.kResourceType_Kinematics, tInstances.kKinematics_MecanumDrive);
|
||||
case kKinematics_SwerveDrive -> HAL.report(
|
||||
tResourceType.kResourceType_Kinematics, tInstances.kKinematics_SwerveDrive);
|
||||
case kTrajectory_TrapezoidProfile -> HAL.report(
|
||||
tResourceType.kResourceType_TrapezoidProfile, count);
|
||||
case kFilter_Linear -> HAL.report(tResourceType.kResourceType_LinearFilter, count);
|
||||
case kOdometry_DifferentialDrive -> HAL.report(
|
||||
tResourceType.kResourceType_Odometry, tInstances.kOdometry_DifferentialDrive);
|
||||
case kOdometry_SwerveDrive -> HAL.report(
|
||||
tResourceType.kResourceType_Odometry, tInstances.kOdometry_SwerveDrive);
|
||||
case kOdometry_MecanumDrive -> HAL.report(
|
||||
tResourceType.kResourceType_Odometry, tInstances.kOdometry_MecanumDrive);
|
||||
case kController_PIDController2 -> HAL.report(
|
||||
tResourceType.kResourceType_PIDController2, count);
|
||||
case kController_ProfiledPIDController -> HAL.report(
|
||||
tResourceType.kResourceType_ProfiledPIDController, count);
|
||||
default -> {
|
||||
// NOP
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -345,18 +345,13 @@ public final class RobotController {
|
||||
* @return state
|
||||
*/
|
||||
public static RadioLEDState fromValue(int value) {
|
||||
switch (value) {
|
||||
case LEDJNI.RADIO_LED_STATE_OFF:
|
||||
return RadioLEDState.kOff;
|
||||
case LEDJNI.RADIO_LED_STATE_GREEN:
|
||||
return RadioLEDState.kGreen;
|
||||
case LEDJNI.RADIO_LED_STATE_RED:
|
||||
return RadioLEDState.kRed;
|
||||
case LEDJNI.RADIO_LED_STATE_ORANGE:
|
||||
return RadioLEDState.kOrange;
|
||||
default:
|
||||
return RadioLEDState.kOff;
|
||||
}
|
||||
return switch (value) {
|
||||
case LEDJNI.RADIO_LED_STATE_OFF -> RadioLEDState.kOff;
|
||||
case LEDJNI.RADIO_LED_STATE_GREEN -> RadioLEDState.kGreen;
|
||||
case LEDJNI.RADIO_LED_STATE_RED -> RadioLEDState.kRed;
|
||||
case LEDJNI.RADIO_LED_STATE_ORANGE -> RadioLEDState.kOrange;
|
||||
default -> RadioLEDState.kOff;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -29,11 +29,10 @@ public enum RuntimeType {
|
||||
* @return Matching runtime type
|
||||
*/
|
||||
public static RuntimeType getValue(int type) {
|
||||
if (type == HALUtil.RUNTIME_ROBORIO) {
|
||||
return RuntimeType.kRoboRIO;
|
||||
} else if (type == HALUtil.RUNTIME_ROBORIO2) {
|
||||
return RuntimeType.kRoboRIO2;
|
||||
}
|
||||
return RuntimeType.kSimulation;
|
||||
return switch (type) {
|
||||
case HALUtil.RUNTIME_ROBORIO -> RuntimeType.kRoboRIO;
|
||||
case HALUtil.RUNTIME_ROBORIO2 -> RuntimeType.kRoboRIO2;
|
||||
default -> RuntimeType.kSimulation;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -50,10 +50,7 @@ public class TimedRobot extends IterativeRobotBase {
|
||||
|
||||
@Override
|
||||
public boolean equals(Object rhs) {
|
||||
if (rhs instanceof Callback) {
|
||||
return Double.compare(expirationTime, ((Callback) rhs).expirationTime) == 0;
|
||||
}
|
||||
return false;
|
||||
return rhs instanceof Callback callback && expirationTime == callback.expirationTime;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -62,10 +62,8 @@ public class Watchdog implements Closeable, Comparable<Watchdog> {
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj instanceof Watchdog) {
|
||||
return Double.compare(m_expirationTimeSeconds, ((Watchdog) obj).m_expirationTimeSeconds) == 0;
|
||||
}
|
||||
return false;
|
||||
return obj instanceof Watchdog watchdog
|
||||
&& Double.compare(m_expirationTimeSeconds, watchdog.m_expirationTimeSeconds) == 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -16,7 +16,8 @@ import java.util.function.LongSupplier;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
/** Common interface for objects that can contain shuffleboard components. */
|
||||
public interface ShuffleboardContainer extends ShuffleboardValue {
|
||||
public sealed interface ShuffleboardContainer extends ShuffleboardValue
|
||||
permits ShuffleboardLayout, ShuffleboardTab {
|
||||
/**
|
||||
* Gets the components that are direct children of this container.
|
||||
*
|
||||
|
||||
@@ -103,11 +103,11 @@ final class ShuffleboardInstance implements ShuffleboardRoot {
|
||||
*/
|
||||
private void apply(ShuffleboardContainer container, Consumer<ComplexWidget> func) {
|
||||
for (ShuffleboardComponent<?> component : container.getComponents()) {
|
||||
if (component instanceof ComplexWidget) {
|
||||
func.accept((ComplexWidget) component);
|
||||
if (component instanceof ComplexWidget widget) {
|
||||
func.accept(widget);
|
||||
}
|
||||
if (component instanceof ShuffleboardContainer) {
|
||||
apply((ShuffleboardContainer) component, func);
|
||||
if (component instanceof ShuffleboardContainer nestedContainer) {
|
||||
apply(nestedContainer, func);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ import java.util.function.LongSupplier;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
/** A layout in a Shuffleboard tab. Layouts can contain widgets and other layouts. */
|
||||
public class ShuffleboardLayout extends ShuffleboardComponent<ShuffleboardLayout>
|
||||
public final class ShuffleboardLayout extends ShuffleboardComponent<ShuffleboardLayout>
|
||||
implements ShuffleboardContainer {
|
||||
private final ContainerHelper m_helper = new ContainerHelper(this);
|
||||
|
||||
|
||||
@@ -59,8 +59,8 @@ public final class SimpleWidget extends ShuffleboardWidget<SimpleWidget> impleme
|
||||
|
||||
private void forceGenerate() {
|
||||
ShuffleboardContainer parent = getParent();
|
||||
while (parent instanceof ShuffleboardLayout) {
|
||||
parent = ((ShuffleboardLayout) parent).getParent();
|
||||
while (parent instanceof ShuffleboardLayout layout) {
|
||||
parent = layout.getParent();
|
||||
}
|
||||
ShuffleboardTab tab = (ShuffleboardTab) parent;
|
||||
tab.getRoot().update();
|
||||
|
||||
@@ -93,21 +93,16 @@ public class CallbackStore implements AutoCloseable {
|
||||
@Override
|
||||
public void close() {
|
||||
switch (m_cancelType) {
|
||||
case kAlreadyCancelled:
|
||||
case kAlreadyCancelled -> {
|
||||
// Already cancelled so do nothing so that close() is idempotent.
|
||||
return;
|
||||
case kNormalCancel:
|
||||
m_cancelCallback.cancel(m_index, m_uid);
|
||||
break;
|
||||
case kChannelCancel:
|
||||
m_cancelCallbackChannel.cancel(m_index, m_channel, m_uid);
|
||||
break;
|
||||
case kNoIndexCancel:
|
||||
m_cancelCallbackNoIndex.cancel(m_uid);
|
||||
break;
|
||||
default:
|
||||
}
|
||||
case kNormalCancel -> m_cancelCallback.cancel(m_index, m_uid);
|
||||
case kChannelCancel -> m_cancelCallbackChannel.cancel(m_index, m_channel, m_uid);
|
||||
case kNoIndexCancel -> m_cancelCallbackNoIndex.cancel(m_uid);
|
||||
default -> {
|
||||
assert false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
m_cancelType = kAlreadyCancelled;
|
||||
}
|
||||
|
||||
@@ -228,24 +228,16 @@ public final class DriverStationSim {
|
||||
* @return the alliance station color and number
|
||||
*/
|
||||
public static AllianceStationID getAllianceStationId() {
|
||||
switch (DriverStationDataJNI.getAllianceStationId()) {
|
||||
case DriverStationJNI.kUnknownAllianceStation:
|
||||
return AllianceStationID.Unknown;
|
||||
case DriverStationJNI.kRed1AllianceStation:
|
||||
return AllianceStationID.Red1;
|
||||
case DriverStationJNI.kRed2AllianceStation:
|
||||
return AllianceStationID.Red2;
|
||||
case DriverStationJNI.kRed3AllianceStation:
|
||||
return AllianceStationID.Red3;
|
||||
case DriverStationJNI.kBlue1AllianceStation:
|
||||
return AllianceStationID.Blue1;
|
||||
case DriverStationJNI.kBlue2AllianceStation:
|
||||
return AllianceStationID.Blue2;
|
||||
case DriverStationJNI.kBlue3AllianceStation:
|
||||
return AllianceStationID.Blue3;
|
||||
default:
|
||||
return AllianceStationID.Unknown;
|
||||
}
|
||||
return switch (DriverStationDataJNI.getAllianceStationId()) {
|
||||
case DriverStationJNI.kUnknownAllianceStation -> AllianceStationID.Unknown;
|
||||
case DriverStationJNI.kRed1AllianceStation -> AllianceStationID.Red1;
|
||||
case DriverStationJNI.kRed2AllianceStation -> AllianceStationID.Red2;
|
||||
case DriverStationJNI.kRed3AllianceStation -> AllianceStationID.Red3;
|
||||
case DriverStationJNI.kBlue1AllianceStation -> AllianceStationID.Blue1;
|
||||
case DriverStationJNI.kBlue2AllianceStation -> AllianceStationID.Blue2;
|
||||
case DriverStationJNI.kBlue3AllianceStation -> AllianceStationID.Blue3;
|
||||
default -> AllianceStationID.Unknown;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -254,32 +246,16 @@ public final class DriverStationSim {
|
||||
* @param allianceStationId the new alliance station
|
||||
*/
|
||||
public static void setAllianceStationId(AllianceStationID allianceStationId) {
|
||||
int allianceStation;
|
||||
switch (allianceStationId) {
|
||||
case Unknown:
|
||||
allianceStation = DriverStationJNI.kUnknownAllianceStation;
|
||||
break;
|
||||
case Red1:
|
||||
allianceStation = DriverStationJNI.kRed1AllianceStation;
|
||||
break;
|
||||
case Red2:
|
||||
allianceStation = DriverStationJNI.kRed2AllianceStation;
|
||||
break;
|
||||
case Red3:
|
||||
allianceStation = DriverStationJNI.kRed3AllianceStation;
|
||||
break;
|
||||
case Blue1:
|
||||
allianceStation = DriverStationJNI.kBlue1AllianceStation;
|
||||
break;
|
||||
case Blue2:
|
||||
allianceStation = DriverStationJNI.kBlue2AllianceStation;
|
||||
break;
|
||||
case Blue3:
|
||||
allianceStation = DriverStationJNI.kBlue3AllianceStation;
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
int allianceStation =
|
||||
switch (allianceStationId) {
|
||||
case Unknown -> DriverStationJNI.kUnknownAllianceStation;
|
||||
case Red1 -> DriverStationJNI.kRed1AllianceStation;
|
||||
case Red2 -> DriverStationJNI.kRed2AllianceStation;
|
||||
case Red3 -> DriverStationJNI.kRed3AllianceStation;
|
||||
case Blue1 -> DriverStationJNI.kBlue1AllianceStation;
|
||||
case Blue2 -> DriverStationJNI.kBlue2AllianceStation;
|
||||
case Blue3 -> DriverStationJNI.kBlue3AllianceStation;
|
||||
};
|
||||
DriverStationDataJNI.setAllianceStationId(allianceStation);
|
||||
}
|
||||
|
||||
@@ -507,23 +483,13 @@ public final class DriverStationSim {
|
||||
* @param type the match type
|
||||
*/
|
||||
public static void setMatchType(DriverStation.MatchType type) {
|
||||
int matchType;
|
||||
switch (type) {
|
||||
case Practice:
|
||||
matchType = 1;
|
||||
break;
|
||||
case Qualification:
|
||||
matchType = 2;
|
||||
break;
|
||||
case Elimination:
|
||||
matchType = 3;
|
||||
break;
|
||||
case None:
|
||||
matchType = 0;
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
int matchType =
|
||||
switch (type) {
|
||||
case Practice -> 1;
|
||||
case Qualification -> 2;
|
||||
case Elimination -> 3;
|
||||
case None -> 0;
|
||||
};
|
||||
DriverStationDataJNI.setMatchType(matchType);
|
||||
}
|
||||
|
||||
|
||||
@@ -21,14 +21,10 @@ public abstract class PneumaticsBaseSim {
|
||||
* @return the module object.
|
||||
*/
|
||||
public static PneumaticsBaseSim getForType(int module, PneumaticsModuleType type) {
|
||||
switch (type) {
|
||||
case CTREPCM:
|
||||
return new CTREPCMSim(module);
|
||||
case REVPH:
|
||||
return new REVPHSim(module);
|
||||
default:
|
||||
throw new IllegalArgumentException("Unknown module type");
|
||||
}
|
||||
return switch (type) {
|
||||
case CTREPCM -> new CTREPCMSim(module);
|
||||
case REVPH -> new REVPHSim(module);
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -126,20 +126,14 @@ public class Color {
|
||||
// Goes from 0 to chroma as hue increases
|
||||
final int X = (chroma * remainder) >> 8;
|
||||
|
||||
switch (region) {
|
||||
case 0:
|
||||
return new Color(v, X + m, m);
|
||||
case 1:
|
||||
return new Color(v - X, v, m);
|
||||
case 2:
|
||||
return new Color(m, v, X + m);
|
||||
case 3:
|
||||
return new Color(m, v - X, v);
|
||||
case 4:
|
||||
return new Color(X + m, m, v);
|
||||
default:
|
||||
return new Color(v, m, v - X);
|
||||
}
|
||||
return switch (region) {
|
||||
case 0 -> new Color(v, X + m, m);
|
||||
case 1 -> new Color(v - X, v, m);
|
||||
case 2 -> new Color(m, v, X + m);
|
||||
case 3 -> new Color(m, v - X, v);
|
||||
case 4 -> new Color(X + m, m, v);
|
||||
default -> new Color(v, m, v - X);
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -103,33 +103,19 @@ class AddressableLEDBufferTest {
|
||||
buffer.forEach(
|
||||
(index, r, g, b) -> {
|
||||
switch (index) {
|
||||
case 0:
|
||||
{
|
||||
assertAll(
|
||||
() -> assertEquals(1, r, "red at index 0"),
|
||||
() -> assertEquals(2, g, "green at index 0"),
|
||||
() -> assertEquals(3, b, "blue at index 0"));
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
{
|
||||
assertAll(
|
||||
() -> assertEquals(4, r, "red at index 1"),
|
||||
() -> assertEquals(5, g, "green at index 1"),
|
||||
() -> assertEquals(6, b, "blue at index 1"));
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
{
|
||||
assertAll(
|
||||
() -> assertEquals(7, r, "red at index 2"),
|
||||
() -> assertEquals(8, g, "green at index 2"),
|
||||
() -> assertEquals(9, b, "blue at index 2"));
|
||||
}
|
||||
break;
|
||||
default:
|
||||
fail("Unexpected index " + index);
|
||||
break;
|
||||
case 0 -> assertAll(
|
||||
() -> assertEquals(1, r, "red at index 0"),
|
||||
() -> assertEquals(2, g, "green at index 0"),
|
||||
() -> assertEquals(3, b, "blue at index 0"));
|
||||
case 1 -> assertAll(
|
||||
() -> assertEquals(4, r, "red at index 1"),
|
||||
() -> assertEquals(5, g, "green at index 1"),
|
||||
() -> assertEquals(6, b, "blue at index 1"));
|
||||
case 2 -> assertAll(
|
||||
() -> assertEquals(7, r, "red at index 2"),
|
||||
() -> assertEquals(8, g, "green at index 2"),
|
||||
() -> assertEquals(9, b, "blue at index 2"));
|
||||
default -> fail("Unexpected index " + index);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -93,18 +93,10 @@ class ADIS16448SimTest {
|
||||
sim.setGyroAngleZ(4.13);
|
||||
|
||||
switch (yawAxis) {
|
||||
case kX:
|
||||
assertEquals(imu.getAngle(), imu.getGyroAngleX());
|
||||
break;
|
||||
case kY:
|
||||
assertEquals(imu.getAngle(), imu.getGyroAngleY());
|
||||
break;
|
||||
case kZ:
|
||||
assertEquals(imu.getAngle(), imu.getGyroAngleZ());
|
||||
break;
|
||||
default:
|
||||
fail("invalid YawAxis!");
|
||||
break;
|
||||
case kX -> assertEquals(imu.getAngle(), imu.getGyroAngleX());
|
||||
case kY -> assertEquals(imu.getAngle(), imu.getGyroAngleY());
|
||||
case kZ -> assertEquals(imu.getAngle(), imu.getGyroAngleZ());
|
||||
default -> fail("invalid YawAxis!");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -122,18 +114,10 @@ class ADIS16448SimTest {
|
||||
sim.setGyroRateZ(20.71);
|
||||
|
||||
switch (yawAxis) {
|
||||
case kX:
|
||||
assertEquals(imu.getRate(), imu.getGyroRateX());
|
||||
break;
|
||||
case kY:
|
||||
assertEquals(imu.getRate(), imu.getGyroRateY());
|
||||
break;
|
||||
case kZ:
|
||||
assertEquals(imu.getRate(), imu.getGyroRateZ());
|
||||
break;
|
||||
default:
|
||||
fail("invalid YawAxis!");
|
||||
break;
|
||||
case kX -> assertEquals(imu.getRate(), imu.getGyroRateX());
|
||||
case kY -> assertEquals(imu.getRate(), imu.getGyroRateY());
|
||||
case kZ -> assertEquals(imu.getRate(), imu.getGyroRateZ());
|
||||
default -> fail("invalid YawAxis!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -156,8 +156,8 @@ public abstract class MotorEncoderFixture<T extends MotorController> implements
|
||||
public void teardown() {
|
||||
if (!m_tornDown) {
|
||||
if (m_motor != null) {
|
||||
if (m_motor instanceof PWM) {
|
||||
((PWM) m_motor).close();
|
||||
if (m_motor instanceof PWM motor) {
|
||||
motor.close();
|
||||
}
|
||||
m_motor = null;
|
||||
}
|
||||
|
||||
@@ -106,7 +106,7 @@ public abstract class AbstractComsSetup {
|
||||
protected void failed(Throwable throwable, Description description, String status) {
|
||||
TestBench.out().println();
|
||||
// Instance of is the best way I know to retrieve this data.
|
||||
if (throwable instanceof MultipleFailureException) {
|
||||
if (throwable instanceof MultipleFailureException mfe) {
|
||||
/*
|
||||
* MultipleFailureExceptions hold multiple exceptions in one exception.
|
||||
* In order to properly display these stack traces we have to cast the
|
||||
@@ -114,8 +114,8 @@ public abstract class AbstractComsSetup {
|
||||
* it.
|
||||
*/
|
||||
int exceptionCount = 1; // Running exception count
|
||||
int failureCount = ((MultipleFailureException) throwable).getFailures().size();
|
||||
for (Throwable singleThrown : ((MultipleFailureException) throwable).getFailures()) {
|
||||
int failureCount = mfe.getFailures().size();
|
||||
for (Throwable singleThrown : mfe.getFailures()) {
|
||||
getClassLogger()
|
||||
.logp(
|
||||
Level.SEVERE,
|
||||
|
||||
@@ -730,15 +730,9 @@ public class Matrix<R extends Num, C extends Num> {
|
||||
if (this == other) {
|
||||
return true;
|
||||
}
|
||||
if (!(other instanceof Matrix)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Matrix<?, ?> matrix = (Matrix<?, ?>) other;
|
||||
if (MatrixFeatures_DDRM.hasUncountable(matrix.m_storage.getDDRM())) {
|
||||
return false;
|
||||
}
|
||||
return MatrixFeatures_DDRM.isEquals(this.m_storage.getDDRM(), matrix.m_storage.getDDRM());
|
||||
return other instanceof Matrix<?, ?> matrix
|
||||
&& !MatrixFeatures_DDRM.hasUncountable(matrix.m_storage.getDDRM())
|
||||
&& MatrixFeatures_DDRM.isEquals(this.m_storage.getDDRM(), matrix.m_storage.getDDRM());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -74,11 +74,9 @@ public class Pair<A, B> {
|
||||
if (obj == this) {
|
||||
return true;
|
||||
}
|
||||
if (obj instanceof Pair) {
|
||||
return Objects.equals(m_first, ((Pair) obj).getFirst())
|
||||
&& Objects.equals(m_second, ((Pair) obj).getSecond());
|
||||
}
|
||||
return false;
|
||||
return obj instanceof Pair<?, ?> other
|
||||
&& Objects.equals(m_first, other.getFirst())
|
||||
&& Objects.equals(m_second, other.getSecond());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -328,11 +328,8 @@ public class PoseEstimator<T> {
|
||||
if (this == obj) {
|
||||
return true;
|
||||
}
|
||||
if (!(obj instanceof PoseEstimator.InterpolationRecord)) {
|
||||
return false;
|
||||
}
|
||||
var record = (PoseEstimator<?>.InterpolationRecord) obj;
|
||||
return Objects.equals(gyroAngle, record.gyroAngle)
|
||||
return obj instanceof PoseEstimator<?>.InterpolationRecord record
|
||||
&& Objects.equals(gyroAngle, record.gyroAngle)
|
||||
&& Objects.equals(wheelPositions, record.wheelPositions)
|
||||
&& Objects.equals(poseMeters, record.poseMeters);
|
||||
}
|
||||
|
||||
@@ -40,17 +40,11 @@ public class Debouncer {
|
||||
|
||||
resetTimer();
|
||||
|
||||
switch (m_debounceType) {
|
||||
case kBoth: // fall-through
|
||||
case kRising:
|
||||
m_baseline = false;
|
||||
break;
|
||||
case kFalling:
|
||||
m_baseline = true;
|
||||
break;
|
||||
default:
|
||||
throw new IllegalArgumentException("Invalid debounce type!");
|
||||
}
|
||||
m_baseline =
|
||||
switch (m_debounceType) {
|
||||
case kBoth, kRising -> false;
|
||||
case kFalling -> true;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -308,11 +308,9 @@ public class Pose2d implements Interpolatable<Pose2d>, ProtobufSerializable, Str
|
||||
*/
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj instanceof Pose2d) {
|
||||
return ((Pose2d) obj).m_translation.equals(m_translation)
|
||||
&& ((Pose2d) obj).m_rotation.equals(m_rotation);
|
||||
}
|
||||
return false;
|
||||
return obj instanceof Pose2d pose
|
||||
&& m_translation.equals(pose.m_translation)
|
||||
&& m_rotation.equals(pose.m_rotation);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -303,11 +303,9 @@ public class Pose3d implements Interpolatable<Pose3d>, ProtobufSerializable, Str
|
||||
*/
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj instanceof Pose3d) {
|
||||
return ((Pose3d) obj).m_translation.equals(m_translation)
|
||||
&& ((Pose3d) obj).m_rotation.equals(m_rotation);
|
||||
}
|
||||
return false;
|
||||
return obj instanceof Pose3d pose
|
||||
&& m_translation.equals(pose.m_translation)
|
||||
&& m_rotation.equals(pose.m_rotation);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -140,13 +140,9 @@ public class Quaternion implements ProtobufSerializable, StructSerializable {
|
||||
*/
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj instanceof Quaternion) {
|
||||
var other = (Quaternion) obj;
|
||||
|
||||
return Math.abs(dot(other) - norm() * other.norm()) < 1e-9
|
||||
&& Math.abs(norm() - other.norm()) < 1e-9;
|
||||
}
|
||||
return false;
|
||||
return obj instanceof Quaternion other
|
||||
&& Math.abs(dot(other) - norm() * other.norm()) < 1e-9
|
||||
&& Math.abs(norm() - other.norm()) < 1e-9;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -316,11 +316,8 @@ public class Rotation2d
|
||||
*/
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj instanceof Rotation2d) {
|
||||
var other = (Rotation2d) obj;
|
||||
return Math.hypot(m_cos - other.m_cos, m_sin - other.m_sin) < 1E-9;
|
||||
}
|
||||
return false;
|
||||
return obj instanceof Rotation2d other
|
||||
&& Math.hypot(m_cos - other.m_cos, m_sin - other.m_sin) < 1E-9;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -422,11 +422,8 @@ public class Rotation3d
|
||||
*/
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj instanceof Rotation3d) {
|
||||
var other = (Rotation3d) obj;
|
||||
return Math.abs(Math.abs(m_q.dot(other.m_q)) - m_q.norm() * other.m_q.norm()) < 1e-9;
|
||||
}
|
||||
return false;
|
||||
return obj instanceof Rotation3d other
|
||||
&& Math.abs(Math.abs(m_q.dot(other.m_q)) - m_q.norm() * other.m_q.norm()) < 1e-9;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -179,11 +179,9 @@ public class Transform2d implements ProtobufSerializable, StructSerializable {
|
||||
*/
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj instanceof Transform2d) {
|
||||
return ((Transform2d) obj).m_translation.equals(m_translation)
|
||||
&& ((Transform2d) obj).m_rotation.equals(m_rotation);
|
||||
}
|
||||
return false;
|
||||
return obj instanceof Transform2d other
|
||||
&& other.m_translation.equals(m_translation)
|
||||
&& other.m_rotation.equals(m_rotation);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -173,11 +173,9 @@ public class Transform3d implements ProtobufSerializable, StructSerializable {
|
||||
*/
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj instanceof Transform3d) {
|
||||
return ((Transform3d) obj).m_translation.equals(m_translation)
|
||||
&& ((Transform3d) obj).m_rotation.equals(m_rotation);
|
||||
}
|
||||
return false;
|
||||
return obj instanceof Transform3d other
|
||||
&& other.m_translation.equals(m_translation)
|
||||
&& other.m_rotation.equals(m_rotation);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -278,11 +278,9 @@ public class Translation2d
|
||||
*/
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj instanceof Translation2d) {
|
||||
return Math.abs(((Translation2d) obj).m_x - m_x) < 1E-9
|
||||
&& Math.abs(((Translation2d) obj).m_y - m_y) < 1E-9;
|
||||
}
|
||||
return false;
|
||||
return obj instanceof Translation2d other
|
||||
&& Math.abs(other.m_x - m_x) < 1E-9
|
||||
&& Math.abs(other.m_y - m_y) < 1E-9;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -261,12 +261,10 @@ public class Translation3d
|
||||
*/
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj instanceof Translation3d) {
|
||||
return Math.abs(((Translation3d) obj).m_x - m_x) < 1E-9
|
||||
&& Math.abs(((Translation3d) obj).m_y - m_y) < 1E-9
|
||||
&& Math.abs(((Translation3d) obj).m_z - m_z) < 1E-9;
|
||||
}
|
||||
return false;
|
||||
return obj instanceof Translation3d other
|
||||
&& Math.abs(other.m_x - m_x) < 1E-9
|
||||
&& Math.abs(other.m_y - m_y) < 1E-9
|
||||
&& Math.abs(other.m_z - m_z) < 1E-9;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -55,12 +55,10 @@ public class Twist2d implements ProtobufSerializable, StructSerializable {
|
||||
*/
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj instanceof Twist2d) {
|
||||
return Math.abs(((Twist2d) obj).dx - dx) < 1E-9
|
||||
&& Math.abs(((Twist2d) obj).dy - dy) < 1E-9
|
||||
&& Math.abs(((Twist2d) obj).dtheta - dtheta) < 1E-9;
|
||||
}
|
||||
return false;
|
||||
return obj instanceof Twist2d other
|
||||
&& Math.abs(other.dx - dx) < 1E-9
|
||||
&& Math.abs(other.dy - dy) < 1E-9
|
||||
&& Math.abs(other.dtheta - dtheta) < 1E-9;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -72,15 +72,13 @@ public class Twist3d implements ProtobufSerializable, StructSerializable {
|
||||
*/
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj instanceof Twist3d) {
|
||||
return Math.abs(((Twist3d) obj).dx - dx) < 1E-9
|
||||
&& Math.abs(((Twist3d) obj).dy - dy) < 1E-9
|
||||
&& Math.abs(((Twist3d) obj).dz - dz) < 1E-9
|
||||
&& Math.abs(((Twist3d) obj).rx - rx) < 1E-9
|
||||
&& Math.abs(((Twist3d) obj).ry - ry) < 1E-9
|
||||
&& Math.abs(((Twist3d) obj).rz - rz) < 1E-9;
|
||||
}
|
||||
return false;
|
||||
return obj instanceof Twist3d other
|
||||
&& Math.abs(other.dx - dx) < 1E-9
|
||||
&& Math.abs(other.dy - dy) < 1E-9
|
||||
&& Math.abs(other.dz - dz) < 1E-9
|
||||
&& Math.abs(other.rx - rx) < 1E-9
|
||||
&& Math.abs(other.ry - ry) < 1E-9
|
||||
&& Math.abs(other.rz - rz) < 1E-9;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -394,14 +394,8 @@ public class ChassisSpeeds implements ProtobufSerializable, StructSerializable {
|
||||
if (o == this) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!(o instanceof ChassisSpeeds)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
ChassisSpeeds c = (ChassisSpeeds) o;
|
||||
|
||||
return vxMetersPerSecond == c.vxMetersPerSecond
|
||||
return o instanceof ChassisSpeeds c
|
||||
&& vxMetersPerSecond == c.vxMetersPerSecond
|
||||
&& vyMetersPerSecond == c.vyMetersPerSecond
|
||||
&& omegaRadiansPerSecond == c.omegaRadiansPerSecond;
|
||||
}
|
||||
|
||||
@@ -53,12 +53,9 @@ public class DifferentialDriveWheelPositions
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj instanceof DifferentialDriveWheelPositions) {
|
||||
DifferentialDriveWheelPositions other = (DifferentialDriveWheelPositions) obj;
|
||||
return Math.abs(other.leftMeters - leftMeters) < 1E-9
|
||||
&& Math.abs(other.rightMeters - rightMeters) < 1E-9;
|
||||
}
|
||||
return false;
|
||||
return obj instanceof DifferentialDriveWheelPositions other
|
||||
&& Math.abs(other.leftMeters - leftMeters) < 1E-9
|
||||
&& Math.abs(other.rightMeters - rightMeters) < 1E-9;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -79,14 +79,11 @@ public class MecanumDriveWheelPositions
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj instanceof MecanumDriveWheelPositions) {
|
||||
MecanumDriveWheelPositions other = (MecanumDriveWheelPositions) obj;
|
||||
return Math.abs(other.frontLeftMeters - frontLeftMeters) < 1E-9
|
||||
&& Math.abs(other.frontRightMeters - frontRightMeters) < 1E-9
|
||||
&& Math.abs(other.rearLeftMeters - rearLeftMeters) < 1E-9
|
||||
&& Math.abs(other.rearRightMeters - rearRightMeters) < 1E-9;
|
||||
}
|
||||
return false;
|
||||
return obj instanceof MecanumDriveWheelPositions other
|
||||
&& Math.abs(other.frontLeftMeters - frontLeftMeters) < 1E-9
|
||||
&& Math.abs(other.frontRightMeters - frontRightMeters) < 1E-9
|
||||
&& Math.abs(other.rearLeftMeters - rearLeftMeters) < 1E-9
|
||||
&& Math.abs(other.rearRightMeters - rearRightMeters) < 1E-9;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -61,11 +61,9 @@ public class SwerveModulePosition
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj instanceof SwerveModulePosition) {
|
||||
SwerveModulePosition other = (SwerveModulePosition) obj;
|
||||
return Math.abs(other.distanceMeters - distanceMeters) < 1E-9 && angle.equals(other.angle);
|
||||
}
|
||||
return false;
|
||||
return obj instanceof SwerveModulePosition other
|
||||
&& Math.abs(other.distanceMeters - distanceMeters) < 1E-9
|
||||
&& angle.equals(other.angle);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -57,12 +57,9 @@ public class SwerveModuleState
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj instanceof SwerveModuleState) {
|
||||
SwerveModuleState other = (SwerveModuleState) obj;
|
||||
return Math.abs(other.speedMetersPerSecond - speedMetersPerSecond) < 1E-9
|
||||
&& angle.equals(other.angle);
|
||||
}
|
||||
return false;
|
||||
return obj instanceof SwerveModuleState other
|
||||
&& Math.abs(other.speedMetersPerSecond - speedMetersPerSecond) < 1E-9
|
||||
&& angle.equals(other.angle);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -151,12 +151,9 @@ public class ExponentialProfile {
|
||||
|
||||
@Override
|
||||
public boolean equals(Object other) {
|
||||
if (other instanceof State) {
|
||||
State rhs = (State) other;
|
||||
return this.position == rhs.position && this.velocity == rhs.velocity;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
return other instanceof State rhs
|
||||
&& this.position == rhs.position
|
||||
&& this.velocity == rhs.velocity;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -383,14 +383,8 @@ public class Trajectory implements ProtobufSerializable {
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj) {
|
||||
return true;
|
||||
}
|
||||
if (!(obj instanceof State)) {
|
||||
return false;
|
||||
}
|
||||
State state = (State) obj;
|
||||
return Double.compare(state.timeSeconds, timeSeconds) == 0
|
||||
return obj instanceof State state
|
||||
&& Double.compare(state.timeSeconds, timeSeconds) == 0
|
||||
&& Double.compare(state.velocityMetersPerSecond, velocityMetersPerSecond) == 0
|
||||
&& Double.compare(state.accelerationMetersPerSecondSq, accelerationMetersPerSecondSq) == 0
|
||||
&& Double.compare(state.curvatureRadPerMeter, curvatureRadPerMeter) == 0
|
||||
@@ -421,6 +415,6 @@ public class Trajectory implements ProtobufSerializable {
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
return obj instanceof Trajectory && m_states.equals(((Trajectory) obj).getStates());
|
||||
return obj instanceof Trajectory other && m_states.equals(other.getStates());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -120,12 +120,9 @@ public class TrapezoidProfile {
|
||||
|
||||
@Override
|
||||
public boolean equals(Object other) {
|
||||
if (other instanceof State) {
|
||||
State rhs = (State) other;
|
||||
return this.position == rhs.position && this.velocity == rhs.velocity;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
return other instanceof State rhs
|
||||
&& this.position == rhs.position
|
||||
&& this.velocity == rhs.velocity;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -83,14 +83,9 @@ public class ImmutableMeasure<U extends Unit<U>> implements Measure<U> {
|
||||
*/
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
if (!(o instanceof Measure)) {
|
||||
return false;
|
||||
}
|
||||
Measure<?> that = (Measure<?>) o;
|
||||
return Objects.equals(m_unit, that.unit()) && m_baseUnitMagnitude == that.baseUnitMagnitude();
|
||||
return o instanceof Measure<?> that
|
||||
&& Objects.equals(m_unit, that.unit())
|
||||
&& m_baseUnitMagnitude == that.baseUnitMagnitude();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -85,36 +85,29 @@ public interface Measure<U extends Unit<U>> extends Comparable<Measure<U>> {
|
||||
* @param other the unit to multiply by
|
||||
* @return the multiplicative unit
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
default <U2 extends Unit<U2>> Measure<?> times(Measure<U2> other) {
|
||||
if (other.unit() instanceof Dimensionless) {
|
||||
// scalar multiplication
|
||||
return times(other.baseUnitMagnitude());
|
||||
}
|
||||
|
||||
if (unit() instanceof Per
|
||||
&& other.unit().getBaseUnit().equals(((Per<?, ?>) unit()).denominator().getBaseUnit())) {
|
||||
if (unit() instanceof Per<?, ?> per
|
||||
&& other.unit().getBaseUnit().equals(per.denominator().getBaseUnit())) {
|
||||
// denominator of the Per cancels out, return with just the units of the numerator
|
||||
Unit<?> numerator = ((Per<?, ?>) unit()).numerator();
|
||||
Unit<?> numerator = per.numerator();
|
||||
return numerator.ofBaseUnits(baseUnitMagnitude() * other.baseUnitMagnitude());
|
||||
} else if (unit() instanceof Velocity && other.unit().getBaseUnit().equals(Seconds)) {
|
||||
} else if (unit() instanceof Velocity<?> v && other.unit().getBaseUnit().equals(Seconds)) {
|
||||
// Multiplying a velocity by a time, return the scalar unit (eg Distance)
|
||||
Unit<?> numerator = ((Velocity<?>) unit()).getUnit();
|
||||
Unit<?> numerator = v.getUnit();
|
||||
return numerator.ofBaseUnits(baseUnitMagnitude() * other.baseUnitMagnitude());
|
||||
} else if (other.unit() instanceof Per
|
||||
&& unit().getBaseUnit().equals(((Per<?, ?>) other.unit()).denominator().getBaseUnit())) {
|
||||
Unit<?> numerator = ((Per<?, ?>) other.unit()).numerator();
|
||||
} else if (other.unit() instanceof Per<?, ?> per
|
||||
&& unit().getBaseUnit().equals(per.denominator().getBaseUnit())) {
|
||||
Unit<?> numerator = per.numerator();
|
||||
return numerator.ofBaseUnits(baseUnitMagnitude() * other.baseUnitMagnitude());
|
||||
} else if (unit() instanceof Per
|
||||
&& other.unit() instanceof Per
|
||||
&& ((Per<?, ?>) unit())
|
||||
.denominator()
|
||||
.getBaseUnit()
|
||||
.equals(((Per<?, U>) other.unit()).numerator().getBaseUnit())
|
||||
&& ((Per<?, ?>) unit())
|
||||
.numerator()
|
||||
.getBaseUnit()
|
||||
.equals(((Per<?, ?>) other.unit()).denominator().getBaseUnit())) {
|
||||
} else if (unit() instanceof Per<?, ?> per
|
||||
&& other.unit() instanceof Per<?, ?> otherPer
|
||||
&& per.denominator().getBaseUnit().equals(otherPer.numerator().getBaseUnit())
|
||||
&& per.numerator().getBaseUnit().equals(otherPer.denominator().getBaseUnit())) {
|
||||
// multiplying eg meters per second * milliseconds per foot
|
||||
// return a scalar
|
||||
return Units.Value.of(baseUnitMagnitude() * other.baseUnitMagnitude());
|
||||
|
||||
@@ -286,14 +286,9 @@ public final class MutableMeasure<U extends Unit<U>> implements Measure<U> {
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
if (!(o instanceof Measure)) {
|
||||
return false;
|
||||
}
|
||||
Measure<?> that = (Measure<?>) o;
|
||||
return Objects.equals(m_unit, that.unit()) && this.isEquivalent(that);
|
||||
return o instanceof Measure<?> that
|
||||
&& Objects.equals(m_unit, that.unit())
|
||||
&& this.isEquivalent(that);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -289,11 +289,10 @@ public class Unit<U extends Unit<U>> {
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
if (!(o instanceof Unit)) {
|
||||
return false;
|
||||
}
|
||||
Unit<?> that = (Unit<?>) o;
|
||||
return m_name.equals(that.m_name) && m_symbol.equals(that.m_symbol) && this.equivalent(that);
|
||||
return o instanceof Unit<?> that
|
||||
&& m_name.equals(that.m_name)
|
||||
&& m_symbol.equals(that.m_symbol)
|
||||
&& this.equivalent(that);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -579,23 +579,14 @@ public final class DynamicStruct {
|
||||
"arrIndex (" + arrIndex + ") is larger than array size (" + field.m_arraySize + ")");
|
||||
}
|
||||
|
||||
long val;
|
||||
switch (field.m_size) {
|
||||
case 1:
|
||||
val = m_data.get(field.m_offset + arrIndex);
|
||||
break;
|
||||
case 2:
|
||||
val = m_data.getShort(field.m_offset + arrIndex * 2);
|
||||
break;
|
||||
case 4:
|
||||
val = m_data.getInt(field.m_offset + arrIndex * 4);
|
||||
break;
|
||||
case 8:
|
||||
val = m_data.getLong(field.m_offset + arrIndex * 8);
|
||||
break;
|
||||
default:
|
||||
throw new IllegalStateException("invalid field size");
|
||||
}
|
||||
long val =
|
||||
switch (field.m_size) {
|
||||
case 1 -> m_data.get(field.m_offset + arrIndex);
|
||||
case 2 -> m_data.getShort(field.m_offset + arrIndex * 2);
|
||||
case 4 -> m_data.getInt(field.m_offset + arrIndex * 4);
|
||||
case 8 -> m_data.getLong(field.m_offset + arrIndex * 8);
|
||||
default -> throw new IllegalStateException("invalid field size");
|
||||
};
|
||||
|
||||
if (field.isUint() || field.getType() == StructFieldType.kBool) {
|
||||
// for unsigned fields, we can simply logical shift and mask
|
||||
@@ -623,60 +614,42 @@ public final class DynamicStruct {
|
||||
// common case is no bit shift and no masking
|
||||
if (!field.isBitField()) {
|
||||
switch (field.m_size) {
|
||||
case 1:
|
||||
m_data.put(field.m_offset + arrIndex, (byte) value);
|
||||
break;
|
||||
case 2:
|
||||
m_data.putShort(field.m_offset + arrIndex * 2, (short) value);
|
||||
break;
|
||||
case 4:
|
||||
m_data.putInt(field.m_offset + arrIndex * 4, (int) value);
|
||||
break;
|
||||
case 8:
|
||||
m_data.putLong(field.m_offset + arrIndex * 8, value);
|
||||
break;
|
||||
default:
|
||||
throw new IllegalStateException("invalid field size");
|
||||
case 1 -> m_data.put(field.m_offset + arrIndex, (byte) value);
|
||||
case 2 -> m_data.putShort(field.m_offset + arrIndex * 2, (short) value);
|
||||
case 4 -> m_data.putInt(field.m_offset + arrIndex * 4, (int) value);
|
||||
case 8 -> m_data.putLong(field.m_offset + arrIndex * 8, value);
|
||||
default -> throw new IllegalStateException("invalid field size");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// handle bit shifting and masking into current value
|
||||
switch (field.m_size) {
|
||||
case 1:
|
||||
{
|
||||
byte val = m_data.get(field.m_offset + arrIndex);
|
||||
val &= (byte) ~(field.getBitMask() << field.m_bitShift);
|
||||
val |= (byte) ((value & field.getBitMask()) << field.m_bitShift);
|
||||
m_data.put(field.m_offset + arrIndex, val);
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
short val = m_data.getShort(field.m_offset + arrIndex * 2);
|
||||
val &= (short) ~(field.getBitMask() << field.m_bitShift);
|
||||
val |= (short) ((value & field.getBitMask()) << field.m_bitShift);
|
||||
m_data.putShort(field.m_offset + arrIndex * 2, val);
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
int val = m_data.getInt(field.m_offset + arrIndex * 4);
|
||||
val &= (int) ~(field.getBitMask() << field.m_bitShift);
|
||||
val |= (int) ((value & field.getBitMask()) << field.m_bitShift);
|
||||
m_data.putInt(field.m_offset + arrIndex * 4, val);
|
||||
break;
|
||||
}
|
||||
case 8:
|
||||
{
|
||||
long val = m_data.getLong(field.m_offset + arrIndex * 8);
|
||||
val &= ~(field.getBitMask() << field.m_bitShift);
|
||||
val |= (value & field.getBitMask()) << field.m_bitShift;
|
||||
m_data.putLong(field.m_offset + arrIndex * 8, val);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
throw new IllegalStateException("invalid field size");
|
||||
case 1 -> {
|
||||
byte val = m_data.get(field.m_offset + arrIndex);
|
||||
val &= (byte) ~(field.getBitMask() << field.m_bitShift);
|
||||
val |= (byte) ((value & field.getBitMask()) << field.m_bitShift);
|
||||
m_data.put(field.m_offset + arrIndex, val);
|
||||
}
|
||||
case 2 -> {
|
||||
short val = m_data.getShort(field.m_offset + arrIndex * 2);
|
||||
val &= (short) ~(field.getBitMask() << field.m_bitShift);
|
||||
val |= (short) ((value & field.getBitMask()) << field.m_bitShift);
|
||||
m_data.putShort(field.m_offset + arrIndex * 2, val);
|
||||
}
|
||||
case 4 -> {
|
||||
int val = m_data.getInt(field.m_offset + arrIndex * 4);
|
||||
val &= (int) ~(field.getBitMask() << field.m_bitShift);
|
||||
val |= (int) ((value & field.getBitMask()) << field.m_bitShift);
|
||||
m_data.putInt(field.m_offset + arrIndex * 4, val);
|
||||
}
|
||||
case 8 -> {
|
||||
long val = m_data.getLong(field.m_offset + arrIndex * 8);
|
||||
val &= ~(field.getBitMask() << field.m_bitShift);
|
||||
val |= (value & field.getBitMask()) << field.m_bitShift;
|
||||
m_data.putLong(field.m_offset + arrIndex * 8, val);
|
||||
}
|
||||
default -> throw new IllegalStateException("invalid field size");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -27,43 +27,24 @@ public class Lexer {
|
||||
} while (m_current == ' ' || m_current == '\t' || m_current == '\n' || m_current == '\r');
|
||||
m_tokenStart = m_pos - 1;
|
||||
|
||||
switch (m_current) {
|
||||
case '[':
|
||||
return TokenKind.kLeftBracket;
|
||||
case ']':
|
||||
return TokenKind.kRightBracket;
|
||||
case '{':
|
||||
return TokenKind.kLeftBrace;
|
||||
case '}':
|
||||
return TokenKind.kRightBrace;
|
||||
case ':':
|
||||
return TokenKind.kColon;
|
||||
case ';':
|
||||
return TokenKind.kSemicolon;
|
||||
case ',':
|
||||
return TokenKind.kComma;
|
||||
case '=':
|
||||
return TokenKind.kEquals;
|
||||
case '-':
|
||||
case '0':
|
||||
case '1':
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
case '5':
|
||||
case '6':
|
||||
case '7':
|
||||
case '8':
|
||||
case '9':
|
||||
return scanInteger();
|
||||
case '\0':
|
||||
return TokenKind.kEndOfInput;
|
||||
default:
|
||||
return switch (m_current) {
|
||||
case '[' -> TokenKind.kLeftBracket;
|
||||
case ']' -> TokenKind.kRightBracket;
|
||||
case '{' -> TokenKind.kLeftBrace;
|
||||
case '}' -> TokenKind.kRightBrace;
|
||||
case ':' -> TokenKind.kColon;
|
||||
case ';' -> TokenKind.kSemicolon;
|
||||
case ',' -> TokenKind.kComma;
|
||||
case '=' -> TokenKind.kEquals;
|
||||
case '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' -> scanInteger();
|
||||
case '\0' -> TokenKind.kEndOfInput;
|
||||
default -> {
|
||||
if (Character.isLetter(m_current) || m_current == '_') {
|
||||
return scanIdentifier();
|
||||
yield scanIdentifier();
|
||||
}
|
||||
return TokenKind.kUnknown;
|
||||
}
|
||||
yield TokenKind.kUnknown;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -124,20 +124,17 @@ public final class PrintLog {
|
||||
continue;
|
||||
}
|
||||
|
||||
if ("double".equals(entry.type)) {
|
||||
System.out.println(" " + record.getDouble());
|
||||
} else if ("int64".equals(entry.type)) {
|
||||
System.out.println(" " + record.getInteger());
|
||||
} else if ("string".equals(entry.type) || "json".equals(entry.type)) {
|
||||
System.out.println(" '" + record.getString() + "'");
|
||||
} else if ("boolean".equals(entry.type)) {
|
||||
System.out.println(" " + record.getBoolean());
|
||||
} else if ("double[]".equals(entry.type)) {
|
||||
System.out.println(" " + List.of(record.getDoubleArray()));
|
||||
} else if ("int64[]".equals(entry.type)) {
|
||||
System.out.println(" " + List.of(record.getIntegerArray()));
|
||||
} else if ("string[]".equals(entry.type)) {
|
||||
System.out.println(" " + List.of(record.getStringArray()));
|
||||
switch (entry.type) {
|
||||
case "double" -> System.out.println(" " + record.getDouble());
|
||||
case "int64" -> System.out.println(" " + record.getInteger());
|
||||
case "string", "json" -> System.out.println(" '" + record.getString() + "'");
|
||||
case "boolean" -> System.out.println(" " + record.getBoolean());
|
||||
case "double[]" -> System.out.println(" " + List.of(record.getDoubleArray()));
|
||||
case "int64[]" -> System.out.println(" " + List.of(record.getIntegerArray()));
|
||||
case "string[]" -> System.out.println(" " + List.of(record.getStringArray()));
|
||||
default -> {
|
||||
// NOP
|
||||
}
|
||||
}
|
||||
} catch (InputMismatchException ex) {
|
||||
System.out.println(" invalid");
|
||||
|
||||
Reference in New Issue
Block a user