run control loops and write their output on new sensor values
This also includes sending solenoid values from their own thread at 50Hz
(formerly I613f95a6efb5efe428029e4825ba6caeb34ea326).
Change-Id: I3d3021cdbbf2ddf895e5ceebd4db299b4743e124
diff --git a/frc971/wpilib/buffered_pcm.cc b/frc971/wpilib/buffered_pcm.cc
new file mode 100644
index 0000000..084d4b5
--- /dev/null
+++ b/frc971/wpilib/buffered_pcm.cc
@@ -0,0 +1,29 @@
+#include "frc971/wpilib/buffered_pcm.h"
+
+#include <inttypes.h>
+
+#include "aos/common/logging/logging.h"
+
+namespace frc971 {
+namespace wpilib {
+
+::std::unique_ptr<BufferedSolenoid> BufferedPcm::MakeSolenoid(int number) {
+ return ::std::unique_ptr<BufferedSolenoid>(
+ new BufferedSolenoid(number, this));
+}
+
+void BufferedPcm::Set(int number, bool value) {
+ if (value) {
+ values_ |= 1 << number;
+ } else {
+ values_ &= ~(1 << number);
+ }
+}
+
+void BufferedPcm::Flush() {
+ LOG(DEBUG, "sending solenoids 0x%" PRIx8 "\n", values_);
+ SolenoidBase::Set(values_, 0xFF);
+}
+
+} // namespace wpilib
+} // namespace frc971