Add support for active-low buttons to switch camera modes
Change-Id: I254408f35dd7b48c48210111e9ee99c40198198a
diff --git a/y2019/wpilib_interface.cc b/y2019/wpilib_interface.cc
index be6ee33..02269eb 100644
--- a/y2019/wpilib_interface.cc
+++ b/y2019/wpilib_interface.cc
@@ -279,11 +279,26 @@
spi_->SetMSBFirst();
}
+ void set_activate_usb(std::unique_ptr<frc::DigitalInput> activate_usb) {
+ activate_usb_ = std::move(activate_usb);
+ }
+
+ void set_activate_passthrough(
+ std::unique_ptr<frc::DigitalInput> activate_passthrough) {
+ activate_passthrough_ = std::move(activate_passthrough);
+ }
+
void DoSpiTransaction() {
using namespace frc971::jevois;
RoborioToTeensy to_teensy{};
to_teensy.realtime_now = aos::realtime_clock::now();
- to_teensy.camera_command = CameraCommand::kNormal;
+ if (activate_usb_ && !activate_usb_->Get()) {
+ to_teensy.camera_command = CameraCommand::kUsb;
+ } else if (activate_passthrough_ && !activate_passthrough_->Get()) {
+ to_teensy.camera_command = CameraCommand::kCameraPassthrough;
+ } else {
+ to_teensy.camera_command = CameraCommand::kNormal;
+ }
std::array<char, spi_transfer_size() + 1> to_send{};
{
@@ -344,6 +359,9 @@
frc::SPI *spi_ = nullptr;
::std::unique_ptr<frc::SPI> dummy_spi_;
+ std::unique_ptr<frc::DigitalInput> activate_usb_;
+ std::unique_ptr<frc::DigitalInput> activate_passthrough_;
+
frc971::wpilib::SpiRxClearer rx_clearer_;
};
@@ -554,6 +572,9 @@
frc::SPI camera_spi(frc::SPI::Port::kOnboardCS3);
camera_reader.set_spi(&camera_spi);
camera_reader.SetDummySPI(frc::SPI::Port::kOnboardCS2);
+ // Austin says 8, 9, 24, and 25 are good options to choose from for these.
+ camera_reader.set_activate_usb(make_unique<frc::DigitalInput>(24));
+ camera_reader.set_activate_passthrough(make_unique<frc::DigitalInput>(25));
auto imu_trigger = make_unique<frc::DigitalInput>(0);
::frc971::wpilib::ADIS16448 imu(frc::SPI::Port::kOnboardCS1,