diff --git a/core/include/librmcs/data/datas.hpp b/core/include/librmcs/data/datas.hpp index 9f0e8e1..0209101 100644 --- a/core/include/librmcs/data/datas.hpp +++ b/core/include/librmcs/data/datas.hpp @@ -112,21 +112,21 @@ struct GpioReadConfigView { } }; -struct AccelerometerDataView { +struct ImuAccelerometerDataView { int16_t x; int16_t y; int16_t z; uint32_t timestamp_quarter_us; }; -struct GyroscopeDataView { +struct ImuGyroscopeDataView { int16_t x; int16_t y; int16_t z; uint32_t timestamp_quarter_us; }; -struct TemperatureDataView { +struct ImuTemperatureDataView { uint16_t raw_register_value; uint32_t timestamp_quarter_us; }; @@ -164,9 +164,9 @@ class DataCallback { [[nodiscard]] virtual bool gpio_analog_read_result_callback(uint8_t channel_index, const GpioAnalogDataView& data) = 0; - virtual void accelerometer_receive_callback(const AccelerometerDataView& data) = 0; - virtual void gyroscope_receive_callback(const GyroscopeDataView& data) = 0; - virtual void temperature_receive_callback(const TemperatureDataView& data) = 0; + virtual void accelerometer_receive_callback(const ImuAccelerometerDataView& data) = 0; + virtual void gyroscope_receive_callback(const ImuGyroscopeDataView& data) = 0; + virtual void temperature_receive_callback(const ImuTemperatureDataView& data) = 0; }; } // namespace librmcs::data diff --git a/core/src/protocol/deserializer.cpp b/core/src/protocol/deserializer.cpp index b286cd5..7106e12 100644 --- a/core/src/protocol/deserializer.cpp +++ b/core/src/protocol/deserializer.cpp @@ -268,7 +268,7 @@ coroutine::LifoTask Deserializer::process_imu_field(FieldId) { switch (payload_type) { case ImuHeader::PayloadEnum::kAccelerometer: { - data::AccelerometerDataView data_view{}; + data::ImuAccelerometerDataView data_view{}; const auto* payload_bytes = co_await peek_bytes(sizeof(ImuAccelerometerPayload)); if (!payload_bytes) [[unlikely]] co_return false; @@ -282,7 +282,7 @@ coroutine::LifoTask Deserializer::process_imu_field(FieldId) { break; } case ImuHeader::PayloadEnum::kGyroscope: { - data::GyroscopeDataView data_view{}; + data::ImuGyroscopeDataView data_view{}; const auto* payload_bytes = co_await peek_bytes(sizeof(ImuGyroscopePayload)); if (!payload_bytes) [[unlikely]] co_return false; @@ -296,7 +296,7 @@ coroutine::LifoTask Deserializer::process_imu_field(FieldId) { break; } case ImuHeader::PayloadEnum::kTemperature: { - data::TemperatureDataView data_view{}; + data::ImuTemperatureDataView data_view{}; const auto* payload_bytes = co_await peek_bytes(sizeof(ImuTemperaturePayload)); if (!payload_bytes) [[unlikely]] co_return false; diff --git a/core/src/protocol/deserializer.hpp b/core/src/protocol/deserializer.hpp index 9c77fba..32fbef9 100644 --- a/core/src/protocol/deserializer.hpp +++ b/core/src/protocol/deserializer.hpp @@ -45,11 +45,12 @@ class DeserializeCallback { [[nodiscard]] virtual bool gpio_analog_read_config_deserialized_callback( uint8_t channel_index, const data::GpioReadConfigView& data) = 0; - virtual void accelerometer_deserialized_callback(const data::AccelerometerDataView& data) = 0; + virtual void + accelerometer_deserialized_callback(const data::ImuAccelerometerDataView& data) = 0; - virtual void gyroscope_deserialized_callback(const data::GyroscopeDataView& data) = 0; + virtual void gyroscope_deserialized_callback(const data::ImuGyroscopeDataView& data) = 0; - virtual void temperature_deserialized_callback(const data::TemperatureDataView& data) = 0; + virtual void temperature_deserialized_callback(const data::ImuTemperatureDataView& data) = 0; virtual void session_control_deserialized_callback(const data::SessionControlView& data) = 0; diff --git a/core/src/protocol/serializer.hpp b/core/src/protocol/serializer.hpp index c7bab96..04644e0 100644 --- a/core/src/protocol/serializer.hpp +++ b/core/src/protocol/serializer.hpp @@ -271,7 +271,7 @@ class Serializer { return SerializeResult::kSuccess; } - SerializeResult write_imu_accelerometer(const data::AccelerometerDataView& view) noexcept { + SerializeResult write_imu_accelerometer(const data::ImuAccelerometerDataView& view) noexcept { const std::size_t required = required_imu_size(FieldId::kImu, ImuPayload::kAccelerometer); LIBRMCS_VERIFY_LIKELY(required, SerializeResult::kInvalidArgument); @@ -297,7 +297,7 @@ class Serializer { return SerializeResult::kSuccess; } - SerializeResult write_imu_gyroscope(const data::GyroscopeDataView& view) noexcept { + SerializeResult write_imu_gyroscope(const data::ImuGyroscopeDataView& view) noexcept { const std::size_t required = required_imu_size(FieldId::kImu, ImuPayload::kGyroscope); LIBRMCS_VERIFY_LIKELY(required, SerializeResult::kInvalidArgument); @@ -323,7 +323,7 @@ class Serializer { return SerializeResult::kSuccess; } - SerializeResult write_imu_temperature(const data::TemperatureDataView& view) noexcept { + SerializeResult write_imu_temperature(const data::ImuTemperatureDataView& view) noexcept { const std::size_t required = required_imu_size(FieldId::kImu, ImuPayload::kTemperature); LIBRMCS_VERIFY_LIKELY(required, SerializeResult::kInvalidArgument); diff --git a/firmware/c_board/app/src/usb/vendor.hpp b/firmware/c_board/app/src/usb/vendor.hpp index e528cb7..9d881ba 100644 --- a/firmware/c_board/app/src/usb/vendor.hpp +++ b/firmware/c_board/app/src/usb/vendor.hpp @@ -196,15 +196,15 @@ class Vendor return false; } - void accelerometer_deserialized_callback(const data::AccelerometerDataView& data) override { + void accelerometer_deserialized_callback(const data::ImuAccelerometerDataView& data) override { (void)data; } - void gyroscope_deserialized_callback(const data::GyroscopeDataView& data) override { + void gyroscope_deserialized_callback(const data::ImuGyroscopeDataView& data) override { (void)data; } - void temperature_deserialized_callback(const data::TemperatureDataView& data) override { + void temperature_deserialized_callback(const data::ImuTemperatureDataView& data) override { (void)data; } diff --git a/firmware/rmcs_board/app/src/usb/vendor.hpp b/firmware/rmcs_board/app/src/usb/vendor.hpp index e9e2ee9..b8f50bc 100644 --- a/firmware/rmcs_board/app/src/usb/vendor.hpp +++ b/firmware/rmcs_board/app/src/usb/vendor.hpp @@ -215,15 +215,15 @@ class Vendor return false; } - void accelerometer_deserialized_callback(const data::AccelerometerDataView& data) override { + void accelerometer_deserialized_callback(const data::ImuAccelerometerDataView& data) override { (void)data; } - void gyroscope_deserialized_callback(const data::GyroscopeDataView& data) override { + void gyroscope_deserialized_callback(const data::ImuGyroscopeDataView& data) override { (void)data; } - void temperature_deserialized_callback(const data::TemperatureDataView& data) override { + void temperature_deserialized_callback(const data::ImuTemperatureDataView& data) override { (void)data; } diff --git a/host/include/librmcs/board/c_board.hpp b/host/include/librmcs/board/c_board.hpp index 47f1cd9..7fab621 100644 --- a/host/include/librmcs/board/c_board.hpp +++ b/host/include/librmcs/board/c_board.hpp @@ -37,43 +37,55 @@ class CBoard final { public: class Callback : public data::DataCallback { public: - virtual void can_receive_callback( - const librmcs::spec::c_board::CanDescriptor& can, - const librmcs::data::CanDataView& data) { + struct Spec { + using Can = spec::c_board::CanDescriptor; + static constexpr spec::c_board::internal::CanDescriptors kCans{}; + + using Uart = spec::c_board::UartDescriptor; + static constexpr spec::c_board::internal::UartDescriptors kUarts{}; + + using Gpio = spec::c_board::GpioDescriptor; + static constexpr spec::c_board::internal::GpioDescriptors kGpios{}; + }; + + struct View { + using Can = data::CanDataView; + + using Uart = data::UartDataView; + + using GpioDigital = data::GpioDigitalDataView; + + using ImuAccelerometer = librmcs::data::ImuAccelerometerDataView; + using ImuGyroscope = librmcs::data::ImuGyroscopeDataView; + using ImuTemperature = librmcs::data::ImuTemperatureDataView; + }; + + virtual void can_receive_callback(const Spec::Can& can, const View::Can& data) { (void)can; (void)data; } - virtual void uart_receive_callback( - const librmcs::spec::c_board::UartDescriptor& uart, - const librmcs::data::UartDataView& data) { + virtual void uart_receive_callback(const Spec::Uart& uart, const View::Uart& data) { (void)uart; (void)data; } virtual void gpio_digital_read_result_callback( - const librmcs::spec::c_board::GpioDescriptor& gpio, - const librmcs::data::GpioDigitalDataView& data) { + const Spec::Gpio& gpio, const View::GpioDigital& data) { (void)gpio; (void)data; } virtual void gpio_analog_read_result_callback( - const librmcs::spec::c_board::GpioDescriptor& gpio, - const librmcs::data::GpioAnalogDataView& data) { + const Spec::Gpio& gpio, const librmcs::data::GpioAnalogDataView& data) { (void)gpio; (void)data; } - void accelerometer_receive_callback( - const librmcs::data::AccelerometerDataView& data) override { - (void)data; - } - void gyroscope_receive_callback(const librmcs::data::GyroscopeDataView& data) override { - (void)data; - } - void temperature_receive_callback(const librmcs::data::TemperatureDataView& data) override { + void accelerometer_receive_callback(const View::ImuAccelerometer& data) override { (void)data; } + void gyroscope_receive_callback(const View::ImuGyroscope& data) override { (void)data; } + void temperature_receive_callback(const View::ImuTemperature& data) override { (void)data; } public: bool can_receive_callback(data::DataId id, const data::CanDataView& data) final { diff --git a/host/include/librmcs/board/rmcs_board_lite.hpp b/host/include/librmcs/board/rmcs_board_lite.hpp index b5979d8..56d7bde 100644 --- a/host/include/librmcs/board/rmcs_board_lite.hpp +++ b/host/include/librmcs/board/rmcs_board_lite.hpp @@ -37,43 +37,55 @@ class RmcsBoardLite final { public: class Callback : public data::DataCallback { public: - virtual void can_receive_callback( - const librmcs::spec::rmcs_board_lite::CanDescriptor& can, - const librmcs::data::CanDataView& data) { + struct Spec { + using Can = spec::rmcs_board_lite::CanDescriptor; + static constexpr spec::rmcs_board_lite::internal::CanDescriptors kCans{}; + + using Uart = spec::rmcs_board_lite::UartDescriptor; + static constexpr spec::rmcs_board_lite::internal::UartDescriptors kUarts{}; + + using Gpio = spec::rmcs_board_lite::GpioDescriptor; + static constexpr spec::rmcs_board_lite::internal::GpioDescriptors kGpios{}; + }; + + struct View { + using Can = data::CanDataView; + + using Uart = data::UartDataView; + + using GpioDigital = data::GpioDigitalDataView; + + using ImuAccelerometer = librmcs::data::ImuAccelerometerDataView; + using ImuGyroscope = librmcs::data::ImuGyroscopeDataView; + using ImuTemperature = librmcs::data::ImuTemperatureDataView; + }; + + virtual void can_receive_callback(const Spec::Can& can, const View::Can& data) { (void)can; (void)data; } - virtual void uart_receive_callback( - const librmcs::spec::rmcs_board_lite::UartDescriptor& uart, - const librmcs::data::UartDataView& data) { + virtual void uart_receive_callback(const Spec::Uart& uart, const View::Uart& data) { (void)uart; (void)data; } virtual void gpio_digital_read_result_callback( - const librmcs::spec::rmcs_board_lite::GpioDescriptor& gpio, - const librmcs::data::GpioDigitalDataView& data) { + const Spec::Gpio& gpio, const View::GpioDigital& data) { (void)gpio; (void)data; } virtual void gpio_analog_read_result_callback( - const librmcs::spec::rmcs_board_lite::GpioDescriptor& gpio, - const librmcs::data::GpioAnalogDataView& data) { + const Spec::Gpio& gpio, const librmcs::data::GpioAnalogDataView& data) { (void)gpio; (void)data; } - void accelerometer_receive_callback( - const librmcs::data::AccelerometerDataView& data) override { - (void)data; - } - void gyroscope_receive_callback(const librmcs::data::GyroscopeDataView& data) override { - (void)data; - } - void temperature_receive_callback(const librmcs::data::TemperatureDataView& data) override { + void accelerometer_receive_callback(const View::ImuAccelerometer& data) override { (void)data; } + void gyroscope_receive_callback(const View::ImuGyroscope& data) override { (void)data; } + void temperature_receive_callback(const View::ImuTemperature& data) override { (void)data; } public: bool can_receive_callback(data::DataId id, const data::CanDataView& data) final { diff --git a/host/include/librmcs/board/rmcs_board_pro.hpp b/host/include/librmcs/board/rmcs_board_pro.hpp index 62e5f04..0556c0a 100644 --- a/host/include/librmcs/board/rmcs_board_pro.hpp +++ b/host/include/librmcs/board/rmcs_board_pro.hpp @@ -37,43 +37,55 @@ class RmcsBoardPro final { public: class Callback : public data::DataCallback { public: - virtual void can_receive_callback( - const librmcs::spec::rmcs_board_pro::CanDescriptor& can, - const librmcs::data::CanDataView& data) { + struct Spec { + using Can = spec::rmcs_board_pro::CanDescriptor; + static constexpr spec::rmcs_board_pro::internal::CanDescriptors kCans{}; + + using Uart = spec::rmcs_board_pro::UartDescriptor; + static constexpr spec::rmcs_board_pro::internal::UartDescriptors kUarts{}; + + using Gpio = spec::rmcs_board_pro::GpioDescriptor; + static constexpr spec::rmcs_board_pro::internal::GpioDescriptors kGpios{}; + }; + + struct View { + using Can = data::CanDataView; + + using Uart = data::UartDataView; + + using GpioDigital = data::GpioDigitalDataView; + + using ImuAccelerometer = librmcs::data::ImuAccelerometerDataView; + using ImuGyroscope = librmcs::data::ImuGyroscopeDataView; + using ImuTemperature = librmcs::data::ImuTemperatureDataView; + }; + + virtual void can_receive_callback(const Spec::Can& can, const View::Can& data) { (void)can; (void)data; } - virtual void uart_receive_callback( - const librmcs::spec::rmcs_board_pro::UartDescriptor& uart, - const librmcs::data::UartDataView& data) { + virtual void uart_receive_callback(const Spec::Uart& uart, const View::Uart& data) { (void)uart; (void)data; } virtual void gpio_digital_read_result_callback( - const librmcs::spec::rmcs_board_pro::GpioDescriptor& gpio, - const librmcs::data::GpioDigitalDataView& data) { + const Spec::Gpio& gpio, const View::GpioDigital& data) { (void)gpio; (void)data; } virtual void gpio_analog_read_result_callback( - const librmcs::spec::rmcs_board_pro::GpioDescriptor& gpio, - const librmcs::data::GpioAnalogDataView& data) { + const Spec::Gpio& gpio, const librmcs::data::GpioAnalogDataView& data) { (void)gpio; (void)data; } - void accelerometer_receive_callback( - const librmcs::data::AccelerometerDataView& data) override { - (void)data; - } - void gyroscope_receive_callback(const librmcs::data::GyroscopeDataView& data) override { - (void)data; - } - void temperature_receive_callback(const librmcs::data::TemperatureDataView& data) override { + void accelerometer_receive_callback(const View::ImuAccelerometer& data) override { (void)data; } + void gyroscope_receive_callback(const View::ImuGyroscope& data) override { (void)data; } + void temperature_receive_callback(const View::ImuTemperature& data) override { (void)data; } public: bool can_receive_callback(data::DataId id, const data::CanDataView& data) final { diff --git a/host/src/protocol/handler.cpp b/host/src/protocol/handler.cpp index 53f019c..3205243 100644 --- a/host/src/protocol/handler.cpp +++ b/host/src/protocol/handler.cpp @@ -137,19 +137,19 @@ class Handler::Impl : public core::protocol::DeserializeCallback { return false; } - void accelerometer_deserialized_callback(const data::AccelerometerDataView& data) override { + void accelerometer_deserialized_callback(const data::ImuAccelerometerDataView& data) override { if (!session_established()) return; callback_.accelerometer_receive_callback(data); } - void gyroscope_deserialized_callback(const data::GyroscopeDataView& data) override { + void gyroscope_deserialized_callback(const data::ImuGyroscopeDataView& data) override { if (!session_established()) return; callback_.gyroscope_receive_callback(data); } - void temperature_deserialized_callback(const data::TemperatureDataView& data) override { + void temperature_deserialized_callback(const data::ImuTemperatureDataView& data) override { if (!session_established()) return; callback_.temperature_receive_callback(data); @@ -343,11 +343,12 @@ struct PacketBuilderImpl { return process_result(serializer_.write_gpio_analog_value(channel_index, view)); } - [[nodiscard]] bool write_imu_accelerometer(const data::AccelerometerDataView& view) noexcept { + [[nodiscard]] bool + write_imu_accelerometer(const data::ImuAccelerometerDataView& view) noexcept { return process_result(serializer_.write_imu_accelerometer(view)); } - [[nodiscard]] bool write_imu_gyroscope(const data::GyroscopeDataView& view) noexcept { + [[nodiscard]] bool write_imu_gyroscope(const data::ImuGyroscopeDataView& view) noexcept { return process_result(serializer_.write_imu_gyroscope(view)); }