Skip to content

Commit

Permalink
ADXL and ADXRS new Sendable implementations (Java)
Browse files Browse the repository at this point in the history
  • Loading branch information
PeterJohnson committed Apr 17, 2024
1 parent a9f4438 commit fa5655c
Show file tree
Hide file tree
Showing 4 changed files with 235 additions and 83 deletions.
96 changes: 71 additions & 25 deletions wpilibj/src/main/java/edu/wpi/first/wpilibj/ADXL345_I2C.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,12 @@
import edu.wpi.first.hal.SimDevice;
import edu.wpi.first.hal.SimDouble;
import edu.wpi.first.hal.SimEnum;
import edu.wpi.first.networktables.DoublePublisher;
import edu.wpi.first.networktables.DoubleTopic;
import edu.wpi.first.networktables.NTSendable;
import edu.wpi.first.networktables.NTSendableBuilder;
import edu.wpi.first.util.sendable.SendableRegistry;
import edu.wpi.first.util.sendable2.Sendable;
import edu.wpi.first.util.sendable2.SendableSerializable;
import edu.wpi.first.util.sendable2.SendableTable;
import edu.wpi.first.util.struct.Struct;
import edu.wpi.first.util.struct.StructSerializable;

import java.nio.ByteBuffer;
import java.nio.ByteOrder;

Expand All @@ -26,7 +27,7 @@
* WPILib Known Issues</a> page for details.
*/
@SuppressWarnings("TypeName")
public class ADXL345_I2C implements NTSendable, AutoCloseable {
public class ADXL345_I2C implements SendableSerializable, AutoCloseable {
/** Default I2C device address. */
public static final byte kAddress = 0x1D;

Expand Down Expand Up @@ -77,7 +78,7 @@ public enum Axes {

/** Container type for accelerations from all axes. */
@SuppressWarnings("MemberName")
public static class AllAxes {
public static class AllAxes implements StructSerializable {
/** Acceleration along the X axis in g-forces. */
public double XAxis;

Expand All @@ -89,6 +90,46 @@ public static class AllAxes {

/** Default constructor. */
public AllAxes() {}

public static class AllAxesStruct implements Struct<AllAxes> {
@Override
public Class<AllAxes> getTypeClass() {
return AllAxes.class;
}

@Override
public String getTypeString() {
return "ADXL345_I2C.AllAxes";
}

@Override
public int getSize() {
return 24;
}

@Override
public String getSchema() {
return "double XAxis;double YAxis;double ZAxis";
}

@Override
public AllAxes unpack(ByteBuffer bb) {
AllAxes val = new AllAxes();
val.XAxis = bb.getDouble();
val.YAxis = bb.getDouble();
val.ZAxis = bb.getDouble();
return val;
}

@Override
public void pack(ByteBuffer bb, AllAxes value) {
bb.putDouble(value.XAxis);
bb.putDouble(value.YAxis);
bb.putDouble(value.ZAxis);
}
}

public static final AllAxesStruct struct = new AllAxesStruct();
}

private I2C m_i2c;
Expand Down Expand Up @@ -141,7 +182,6 @@ public ADXL345_I2C(I2C.Port port, Range range, int deviceAddress) {
setRange(range);

HAL.report(tResourceType.kResourceType_ADXL345, tInstances.kADXL345_I2C);
SendableRegistry.addLW(this, "ADXL345_I2C", port.value);
}

/**
Expand All @@ -164,7 +204,6 @@ public int getDeviceAddress() {

@Override
public void close() {
SendableRegistry.remove(this);
if (m_i2c != null) {
m_i2c.close();
m_i2c = null;
Expand Down Expand Up @@ -283,21 +322,28 @@ public AllAxes getAccelerations() {
return data;
}

@Override
public void initSendable(NTSendableBuilder builder) {
builder.setSmartDashboardType("3AxisAccelerometer");
DoublePublisher pubX = new DoubleTopic(builder.getTopic("X")).publish();
DoublePublisher pubY = new DoubleTopic(builder.getTopic("Y")).publish();
DoublePublisher pubZ = new DoubleTopic(builder.getTopic("Z")).publish();
builder.addCloseable(pubX);
builder.addCloseable(pubY);
builder.addCloseable(pubZ);
builder.setUpdateTable(
() -> {
AllAxes data = getAccelerations();
pubX.set(data.XAxis);
pubY.set(data.YAxis);
pubZ.set(data.ZAxis);
});
public static class ADXL345I2CSendable implements Sendable<ADXL345_I2C> {
@Override
public Class<ADXL345_I2C> getTypeClass() {
return ADXL345_I2C.class;
}

@Override
public String getTypeString() {
return "3AxisAccelerometer";
}

@Override
public boolean isClosed(ADXL345_I2C obj) {
return obj.m_i2c == null;
}

@Override
public void initSendable(ADXL345_I2C obj, SendableTable table) {
table.publishStruct("Value", AllAxes.struct, obj::getAccelerations);
}
}

/** Sendable for serialization. */
public static final ADXL345I2CSendable sendable = new ADXL345I2CSendable();
}
92 changes: 68 additions & 24 deletions wpilibj/src/main/java/edu/wpi/first/wpilibj/ADXL345_SPI.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,16 @@
import edu.wpi.first.hal.SimDevice;
import edu.wpi.first.hal.SimDouble;
import edu.wpi.first.hal.SimEnum;
import edu.wpi.first.networktables.DoublePublisher;
import edu.wpi.first.networktables.DoubleTopic;
import edu.wpi.first.networktables.NTSendable;
import edu.wpi.first.networktables.NTSendableBuilder;
import edu.wpi.first.util.sendable.SendableRegistry;
import edu.wpi.first.util.sendable2.Sendable;
import edu.wpi.first.util.sendable2.SendableSerializable;
import edu.wpi.first.util.sendable2.SendableTable;
import edu.wpi.first.util.struct.Struct;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;

/** ADXL345 SPI Accelerometer. */
@SuppressWarnings("TypeName")
public class ADXL345_SPI implements NTSendable, AutoCloseable {
public class ADXL345_SPI implements SendableSerializable, AutoCloseable {
private static final int kPowerCtlRegister = 0x2D;
private static final int kDataFormatRegister = 0x31;
private static final int kDataRegister = 0x32;
Expand Down Expand Up @@ -84,6 +83,46 @@ public static class AllAxes {

/** Default constructor. */
public AllAxes() {}

public static class AllAxesStruct implements Struct<AllAxes> {
@Override
public Class<AllAxes> getTypeClass() {
return AllAxes.class;
}

@Override
public String getTypeString() {
return "ADXL345_SPI.AllAxes";
}

@Override
public int getSize() {
return 24;
}

@Override
public String getSchema() {
return "double XAxis;double YAxis;double ZAxis";
}

@Override
public AllAxes unpack(ByteBuffer bb) {
AllAxes val = new AllAxes();
val.XAxis = bb.getDouble();
val.YAxis = bb.getDouble();
val.ZAxis = bb.getDouble();
return val;
}

@Override
public void pack(ByteBuffer bb, AllAxes value) {
bb.putDouble(value.XAxis);
bb.putDouble(value.YAxis);
bb.putDouble(value.ZAxis);
}
}

public static final AllAxesStruct struct = new AllAxesStruct();
}

private SPI m_spi;
Expand Down Expand Up @@ -118,7 +157,6 @@ public ADXL345_SPI(SPI.Port port, Range range) {
m_simZ = m_simDevice.createDouble("z", SimDevice.Direction.kInput, 0.0);
}
init(range);
SendableRegistry.addLW(this, "ADXL345_SPI", port.value);
}

/**
Expand All @@ -132,7 +170,6 @@ public int getPort() {

@Override
public void close() {
SendableRegistry.remove(this);
if (m_spi != null) {
m_spi.close();
m_spi = null;
Expand Down Expand Up @@ -279,21 +316,28 @@ public ADXL345_SPI.AllAxes getAccelerations() {
return data;
}

@Override
public void initSendable(NTSendableBuilder builder) {
builder.setSmartDashboardType("3AxisAccelerometer");
DoublePublisher pubX = new DoubleTopic(builder.getTopic("X")).publish();
DoublePublisher pubY = new DoubleTopic(builder.getTopic("Y")).publish();
DoublePublisher pubZ = new DoubleTopic(builder.getTopic("Z")).publish();
builder.addCloseable(pubX);
builder.addCloseable(pubY);
builder.addCloseable(pubZ);
builder.setUpdateTable(
() -> {
AllAxes data = getAccelerations();
pubX.set(data.XAxis);
pubY.set(data.YAxis);
pubZ.set(data.ZAxis);
});
public static class ADXL345SPISendable implements Sendable<ADXL345_SPI> {
@Override
public Class<ADXL345_SPI> getTypeClass() {
return ADXL345_SPI.class;
}

@Override
public String getTypeString() {
return "3AxisAccelerometer";
}

@Override
public boolean isClosed(ADXL345_SPI obj) {
return obj.m_spi == null;
}

@Override
public void initSendable(ADXL345_SPI obj, SendableTable table) {
table.publishStruct("Value", AllAxes.struct, obj::getAccelerations);
}
}

/** Sendable for serialization. */
public static final ADXL345SPISendable sendable = new ADXL345SPISendable();
}
Loading

0 comments on commit fa5655c

Please sign in to comment.