Convert aos over to flatbuffers
Everything builds, and all the tests pass. I suspect that some entries
are missing from the config files, but those will be found pretty
quickly on startup.
There is no logging or live introspection of queue messages.
Change-Id: I496ee01ed68f202c7851bed7e8786cee30df29f5
diff --git a/frc971/wpilib/ADIS16448.cc b/frc971/wpilib/ADIS16448.cc
index 4fc2c7b..f364d56 100644
--- a/frc971/wpilib/ADIS16448.cc
+++ b/frc971/wpilib/ADIS16448.cc
@@ -8,10 +8,9 @@
#include <chrono>
#include "aos/init.h"
-#include "aos/logging/queue_logging.h"
-#include "aos/robot_state/robot_state.q.h"
+#include "aos/robot_state/robot_state_generated.h"
#include "aos/time/time.h"
-#include "frc971/wpilib/imu.q.h"
+#include "frc971/wpilib/imu_generated.h"
#include "frc971/zeroing/averager.h"
namespace frc971 {
@@ -121,10 +120,9 @@
ADIS16448::ADIS16448(::aos::EventLoop *event_loop, frc::SPI::Port port,
frc::DigitalInput *dio1)
: event_loop_(event_loop),
- joystick_state_fetcher_(event_loop_->MakeFetcher<::aos::JoystickState>(
- ".aos.joystick_state")),
+ robot_state_fetcher_(event_loop_->MakeFetcher<::aos::RobotState>("/aos")),
imu_values_sender_(
- event_loop_->MakeSender<::frc971::IMUValues>(".frc971.imu_values")),
+ event_loop_->MakeSender<::frc971::IMUValues>("/drivetrain")),
spi_(new frc::SPI(port)),
dio1_(dio1) {
// 1MHz is the maximum supported for burst reads, but we
@@ -247,31 +245,35 @@
}
}
- auto message = imu_values_sender_.MakeMessage();
- message->fpga_timestamp = ::aos::time::DurationInSeconds(
- dio1_->ReadRisingTimestamp().time_since_epoch());
- message->monotonic_timestamp_ns =
- chrono::duration_cast<chrono::nanoseconds>(read_time.time_since_epoch())
- .count();
+ auto builder = imu_values_sender_.MakeBuilder();
- message->gyro_x =
+ IMUValues::Builder imu_builder = builder.MakeBuilder<IMUValues>();
+
+ imu_builder.add_fpga_timestamp(::aos::time::DurationInSeconds(
+ dio1_->ReadRisingTimestamp().time_since_epoch()));
+ imu_builder.add_monotonic_timestamp_ns(
+ chrono::duration_cast<chrono::nanoseconds>(read_time.time_since_epoch())
+ .count());
+
+ float gyro_x =
ConvertValue(&to_receive[4], kGyroLsbDegreeSecond * M_PI / 180.0);
- message->gyro_y =
+ float gyro_y =
ConvertValue(&to_receive[6], kGyroLsbDegreeSecond * M_PI / 180.0);
- message->gyro_z =
+ float gyro_z =
ConvertValue(&to_receive[8], kGyroLsbDegreeSecond * M_PI / 180.0);
// The first few seconds of samples are averaged and subtracted from
// subsequent samples for zeroing purposes.
if (!gyros_are_zeroed_) {
- average_gyro_x.AddData(message->gyro_x);
- average_gyro_y.AddData(message->gyro_y);
- average_gyro_z.AddData(message->gyro_z);
+ average_gyro_x.AddData(gyro_x);
+ average_gyro_y.AddData(gyro_y);
+ average_gyro_z.AddData(gyro_z);
if (average_gyro_x.full() && average_gyro_y.full() &&
average_gyro_z.full()) {
- joystick_state_fetcher_.Fetch();
- if (joystick_state_fetcher_.get() && joystick_state_fetcher_->enabled) {
+ robot_state_fetcher_.Fetch();
+ if (robot_state_fetcher_.get() &&
+ robot_state_fetcher_->outputs_enabled()) {
gyro_x_zeroed_offset_ = -average_gyro_x.GetAverage();
gyro_y_zeroed_offset_ = -average_gyro_y.GetAverage();
gyro_z_zeroed_offset_ = -average_gyro_z.GetAverage();
@@ -282,33 +284,36 @@
}
}
}
+ gyro_x += gyro_x_zeroed_offset_;
+ gyro_y += gyro_y_zeroed_offset_;
+ gyro_z += gyro_z_zeroed_offset_;
- message->gyro_x += gyro_x_zeroed_offset_;
- message->gyro_y += gyro_y_zeroed_offset_;
- message->gyro_z += gyro_z_zeroed_offset_;
+ imu_builder.add_gyro_x(gyro_x);
+ imu_builder.add_gyro_y(gyro_y);
+ imu_builder.add_gyro_z(gyro_z);
- message->accelerometer_x =
- ConvertValue(&to_receive[10], kAccelerometerLsbG);
- message->accelerometer_y =
- ConvertValue(&to_receive[12], kAccelerometerLsbG);
- message->accelerometer_z =
- ConvertValue(&to_receive[14], kAccelerometerLsbG);
+ imu_builder.add_accelerometer_x(
+ ConvertValue(&to_receive[10], kAccelerometerLsbG));
+ imu_builder.add_accelerometer_y(
+ ConvertValue(&to_receive[12], kAccelerometerLsbG));
+ imu_builder.add_accelerometer_z(
+ ConvertValue(&to_receive[14], kAccelerometerLsbG));
- message->magnetometer_x =
- ConvertValue(&to_receive[16], kMagnetometerLsbGauss);
- message->magnetometer_y =
- ConvertValue(&to_receive[18], kMagnetometerLsbGauss);
- message->magnetometer_z =
- ConvertValue(&to_receive[20], kMagnetometerLsbGauss);
+ imu_builder.add_magnetometer_x(
+ ConvertValue(&to_receive[16], kMagnetometerLsbGauss));
+ imu_builder.add_magnetometer_y(
+ ConvertValue(&to_receive[18], kMagnetometerLsbGauss));
+ imu_builder.add_magnetometer_z(
+ ConvertValue(&to_receive[20], kMagnetometerLsbGauss));
- message->barometer =
- ConvertValue(&to_receive[22], kBarometerLsbPascal, false);
+ imu_builder.add_barometer(
+ ConvertValue(&to_receive[22], kBarometerLsbPascal, false));
- message->temperature =
- ConvertValue(&to_receive[24], kTemperatureLsbDegree) + kTemperatureZero;
+ imu_builder.add_temperature(
+ ConvertValue(&to_receive[24], kTemperatureLsbDegree) +
+ kTemperatureZero);
- AOS_LOG_STRUCT(DEBUG, "sending", *message);
- if (!message.Send()) {
+ if (!builder.Send(imu_builder.Finish())) {
AOS_LOG(WARNING, "sending queue message failed\n");
}