Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions src/main/java/xbot/common/controls/sensors/XSpiController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package xbot.common.controls.sensors;

import java.nio.ByteBuffer;

import edu.wpi.first.wpilibj.SPI;
import xbot.common.injection.DevicePolice;
import xbot.common.injection.DevicePolice.DeviceType;

public abstract class XSpiController {
public interface XSpiControllerFactory {
XSpiController create(
SPI.Port port);
}

public XSpiController(
SPI.Port port,
DevicePolice police) {

police.registerDevice(DeviceType.SPI, port.value, this);
}

public abstract int write(ByteBuffer dataToSend, int size);
public abstract void close();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package xbot.common.controls.sensors.mock_adapters;

import java.nio.ByteBuffer;

import org.json.JSONObject;

import dagger.assisted.Assisted;
import dagger.assisted.AssistedFactory;
import dagger.assisted.AssistedInject;
import edu.wpi.first.wpilibj.SPI.Port;
import xbot.common.controls.sensors.XSpiController;
import xbot.common.controls.sensors.XEncoder.XEncoderFactory;
import xbot.common.controls.sensors.XSpiController.XSpiControllerFactory;
import xbot.common.injection.DevicePolice;
import xbot.common.properties.PropertyFactory;
import xbot.common.simulation.ISimulatableSensor;

public class MockSpiController extends XSpiController implements ISimulatableSensor{

@AssistedFactory
public abstract static class MockSpiControllerFactory implements XSpiControllerFactory {
public abstract MockSpiController create(
@Assisted("port") Port port);
}

@AssistedInject
public MockSpiController(
@Assisted("port") Port port,
DevicePolice police) {
super(port, police);
}

@Override
public int write(ByteBuffer dataToSend, int size) {
return 0;
}

@Override
public void close() {}

@Override
public void ingestSimulationData(JSONObject payload) {
// TODO
throw new UnsupportedOperationException("Unimplemented method 'ingestSimulationData'");
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package xbot.common.controls.sensors.wpi_adapters;

import java.nio.ByteBuffer;
import java.util.Arrays;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import dagger.assisted.Assisted;
import dagger.assisted.AssistedFactory;
import dagger.assisted.AssistedInject;
import edu.wpi.first.wpilibj.SPI;
import edu.wpi.first.wpilibj.SPI.Port;
import xbot.common.injection.DevicePolice;
import xbot.common.controls.sensors.XSpiController;

public class SpiWPIAdapter extends XSpiController {
private static final Character END_CHARACTER = '\uffff';
private SPI internalSpi;
private Logger log = LogManager.getLogger(SpiWPIAdapter.class);

@AssistedFactory
public abstract static class SpiWPIAdapterFactory implements XSpiControllerFactory {
@Override
public abstract SpiWPIAdapter create(
@Assisted("port") Port port);
}

@AssistedInject
public SpiWPIAdapter(
@Assisted("port")Port port,
DevicePolice police
) {
super(port, police);
internalSpi = new SPI(port);
}

@Override
public int write(ByteBuffer dataToSend, int size) {
//add end char \uffff to signal end of package
int packetSize = size + Character.BYTES;
ByteBuffer packet = ByteBuffer.allocate(packetSize);
packet.put(dataToSend.array());
packet.putChar(END_CHARACTER);

return internalSpi.write(packet, packetSize);
}

@Override
public void close() {
internalSpi.close();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
import xbot.common.controls.sensors.XDutyCycleEncoder;
import xbot.common.controls.sensors.XLaserCAN;
import xbot.common.controls.sensors.XSettableTimerImpl;
import xbot.common.controls.sensors.XSpiController;
import xbot.common.controls.sensors.XSpiController.XSpiControllerFactory;
import xbot.common.controls.sensors.XTimerImpl;
import xbot.common.controls.sensors.XAbsoluteEncoder.XAbsoluteEncoderFactory;
import xbot.common.controls.sensors.XAnalogDistanceSensor.XAnalogDistanceSensorFactory;
Expand Down Expand Up @@ -173,4 +175,6 @@ public abstract class BaseComponent {
public abstract XDutyCycleEncoder.XDutyCycleEncoderFactory dutyCycleEncoderFactory();

public abstract XLaserCAN.XLaserCANFactory laserCANFactory();

public abstract XSpiControllerFactory spiControllerFactory();
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import xbot.common.controls.sensors.XEncoder.XEncoderFactory;
import xbot.common.controls.sensors.XGyro.XGyroFactory;
import xbot.common.controls.sensors.XLaserCAN;
import xbot.common.controls.sensors.XSpiController;
import xbot.common.controls.sensors.XLidarLite.XLidarLiteFactory;
import xbot.common.controls.sensors.XPowerDistributionPanel.XPowerDistributionPanelFactory;
import xbot.common.controls.sensors.mock_adapters.MockAbsoluteEncoder.MockAbsoluteEncoderFactory;
Expand All @@ -40,6 +41,7 @@
import xbot.common.controls.sensors.mock_adapters.MockEncoder.MockEncoderFactory;
import xbot.common.controls.sensors.mock_adapters.MockGyro.MockGyroFactory;
import xbot.common.controls.sensors.mock_adapters.MockLaserCAN;
import xbot.common.controls.sensors.mock_adapters.MockSpiController;
import xbot.common.networking.MockZeromqListener.MockZeromqListenerFactory;
import xbot.common.networking.XZeromqListener.XZeromqListenerFactory;

Expand Down Expand Up @@ -129,4 +131,8 @@ public abstract class MockDevicesModule {
@Binds
@Singleton
public abstract XLaserCAN.XLaserCANFactory getLaserCANFactory(MockLaserCAN.MockLaserCANFactory impl);

@Binds
@Singleton
public abstract XSpiController.XSpiControllerFactory getSpiControllerFactory(MockSpiController.MockSpiControllerFactory impl);
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import xbot.common.controls.sensors.XEncoder.XEncoderFactory;
import xbot.common.controls.sensors.XGyro.XGyroFactory;
import xbot.common.controls.sensors.XLaserCAN;
import xbot.common.controls.sensors.XSpiController;
import xbot.common.controls.sensors.XLidarLite.XLidarLiteFactory;
import xbot.common.controls.sensors.XPowerDistributionPanel.XPowerDistributionPanelFactory;
import xbot.common.controls.sensors.wpi_adapters.AnalogInputWPIAdapater.AnalogInputWPIAdapaterFactory;
Expand All @@ -37,6 +38,7 @@
import xbot.common.controls.sensors.wpi_adapters.EncoderWPIAdapter.EncoderWPIAdapterFactory;
import xbot.common.controls.sensors.wpi_adapters.InertialMeasurementUnitAdapter.InertialMeasurementUnitAdapterFactory;
import xbot.common.controls.sensors.wpi_adapters.LaserCANWpiAdapter;
import xbot.common.controls.sensors.wpi_adapters.SpiWPIAdapter;
import xbot.common.controls.sensors.wpi_adapters.LidarLiteWpiAdapter.LidarLiteWpiAdapterFactory;
import xbot.common.controls.sensors.wpi_adapters.PowerDistributionPanelWPIAdapter.PowerDistributionPanelWPIAdapaterFactory;
import xbot.common.networking.XZeromqListener.XZeromqListenerFactory;
Expand Down Expand Up @@ -128,4 +130,8 @@ public abstract class RealDevicesModule {
@Binds
@Singleton
public abstract XLaserCAN.XLaserCANFactory getLaserCANFactory(LaserCANWpiAdapter.LaserCANWpiAdapterFactory impl);

@Binds
@Singleton
public abstract XSpiController.XSpiControllerFactory getSpiControllerFactory(SpiWPIAdapter.SpiWPIAdapterFactory impl);
}