From 697d5c828096267628e61e92ebf6378b8353821e Mon Sep 17 00:00:00 2001 From: viambot <79611529+viambot@users.noreply.github.com> Date: Wed, 19 Nov 2025 17:12:47 +0000 Subject: [PATCH] [WORKFLOW] AI update based on proto changes from commit 71399b6ae670ddcc718a3e83f69bf53826347727 --- src/viam/sdk/components/gantry.hpp | 11 ++++++++++- src/viam/sdk/components/private/gantry_client.cpp | 8 +++++++- src/viam/sdk/components/private/gantry_client.hpp | 4 +++- src/viam/sdk/components/private/gantry_server.cpp | 13 ++++++++++++- src/viam/sdk/components/private/gantry_server.hpp | 7 ++++++- src/viam/sdk/tests/mocks/mock_gantry.cpp | 12 +++++++++++- src/viam/sdk/tests/mocks/mock_gantry.hpp | 4 +++- src/viam/sdk/tests/test_gantry.cpp | 11 ++++++++++- 8 files changed, 62 insertions(+), 8 deletions(-) diff --git a/src/viam/sdk/components/gantry.hpp b/src/viam/sdk/components/gantry.hpp index b01522897..c27efa4fe 100644 --- a/src/viam/sdk/components/gantry.hpp +++ b/src/viam/sdk/components/gantry.hpp @@ -95,6 +95,15 @@ class Gantry : public Component, public Stoppable { /// @param extra Any additional arguments to the method virtual std::vector get_geometries(const ProtoStruct& extra) = 0; + /// @brief Returns the kinematics data of the component. + inline std::string get_kinematics() { + return get_kinematics({}); + } + + /// @brief Returns the kinematics data of the component. + /// @param extra Any additional arguments to the method + virtual std::string get_kinematics(const ProtoStruct& extra) = 0; + API api() const override; protected: @@ -107,4 +116,4 @@ struct API::traits { }; } // namespace sdk -} // namespace viam +} // namespace viam \ No newline at end of file diff --git a/src/viam/sdk/components/private/gantry_client.cpp b/src/viam/sdk/components/private/gantry_client.cpp index 7021dd5bc..907389f63 100644 --- a/src/viam/sdk/components/private/gantry_client.cpp +++ b/src/viam/sdk/components/private/gantry_client.cpp @@ -69,6 +69,12 @@ ProtoStruct GantryClient::do_command(const ProtoStruct& command) { .invoke([](auto& response) { return from_proto(response.result()); }); } +std::string GantryClient::get_kinematics(const ProtoStruct& extra) { + return make_client_helper(this, *stub_, &StubType::GetKinematics) + .with(extra) + .invoke([](auto& response) { return response.kinematics_data(); }); +} + std::vector GantryClient::get_geometries(const ProtoStruct& extra) { return make_client_helper(this, *stub_, &StubType::GetGeometries) .with(extra) @@ -77,4 +83,4 @@ std::vector GantryClient::get_geometries(const ProtoStruct& extr } // namespace impl } // namespace sdk -} // namespace viam +} // namespace viam \ No newline at end of file diff --git a/src/viam/sdk/components/private/gantry_client.hpp b/src/viam/sdk/components/private/gantry_client.hpp index b499baef4..333a642d7 100644 --- a/src/viam/sdk/components/private/gantry_client.hpp +++ b/src/viam/sdk/components/private/gantry_client.hpp @@ -30,8 +30,10 @@ class GantryClient : public Gantry { void stop(const ProtoStruct& extra) override; ProtoStruct do_command(const ProtoStruct& command) override; std::vector get_geometries(const ProtoStruct& extra) override; + std::string get_kinematics(const ProtoStruct& extra) override; using Gantry::get_geometries; + using Gantry::get_kinematics; using Gantry::get_lengths; using Gantry::get_position; using Gantry::home; @@ -46,4 +48,4 @@ class GantryClient : public Gantry { } // namespace impl } // namespace sdk -} // namespace viam +} // namespace viam \ No newline at end of file diff --git a/src/viam/sdk/components/private/gantry_server.cpp b/src/viam/sdk/components/private/gantry_server.cpp index a4c921c67..9dc16632d 100644 --- a/src/viam/sdk/components/private/gantry_server.cpp +++ b/src/viam/sdk/components/private/gantry_server.cpp @@ -80,6 +80,17 @@ ::grpc::Status GantryServer::DoCommand(::grpc::ServerContext*, }); } +::grpc::Status GantryServer::GetKinematics( + ::grpc::ServerContext*, + const ::viam::common::v1::GetKinematicsRequest* request, + ::viam::common::v1::GetKinematicsResponse* response) noexcept { + return make_service_helper( + "GantryServer::GetKinematics", this, request)([&](auto& helper, auto& gantry) { + const std::string kinematics_data = gantry->get_kinematics(helper.getExtra()); + response->set_kinematics_data(kinematics_data); + }); +} + ::grpc::Status GantryServer::GetGeometries( ::grpc::ServerContext*, const ::viam::common::v1::GetGeometriesRequest* request, @@ -95,4 +106,4 @@ ::grpc::Status GantryServer::GetGeometries( } // namespace impl } // namespace sdk -} // namespace viam +} // namespace viam \ No newline at end of file diff --git a/src/viam/sdk/components/private/gantry_server.hpp b/src/viam/sdk/components/private/gantry_server.hpp index fc922cc62..98f081bc7 100644 --- a/src/viam/sdk/components/private/gantry_server.hpp +++ b/src/viam/sdk/components/private/gantry_server.hpp @@ -57,6 +57,11 @@ class GantryServer : public ResourceServer, const ::viam::common::v1::DoCommandRequest* request, ::viam::common::v1::DoCommandResponse* response) noexcept; + virtual ::grpc::Status GetKinematics( + ::grpc::ServerContext* context, + const ::viam::common::v1::GetKinematicsRequest* request, + ::viam::common::v1::GetKinematicsResponse* response) noexcept; + virtual ::grpc::Status GetGeometries( ::grpc::ServerContext* context, const ::viam::common::v1::GetGeometriesRequest* request, @@ -65,4 +70,4 @@ class GantryServer : public ResourceServer, } // namespace impl } // namespace sdk -} // namespace viam +} // namespace viam \ No newline at end of file diff --git a/src/viam/sdk/tests/mocks/mock_gantry.cpp b/src/viam/sdk/tests/mocks/mock_gantry.cpp index 3d8075e47..d18b3b8de 100644 --- a/src/viam/sdk/tests/mocks/mock_gantry.cpp +++ b/src/viam/sdk/tests/mocks/mock_gantry.cpp @@ -6,18 +6,28 @@ namespace viam { namespace sdktests { namespace gantry { +std::string fake_kinematics_data() { + return "kinematics_data"; +} + std::vector fake_lengths() { return {1.0, 2.0, 3.0, 4.0}; } std::shared_ptr MockGantry::get_mock_gantry() { - return std::make_shared("mock_gantry"); + auto mock = std::make_shared("mock_gantry"); + mock->peek_kinematics_data = fake_kinematics_data(); + return mock; } std::vector MockGantry::get_position(const sdk::ProtoStruct&) { return peek_positions; } +std::string MockGantry::get_kinematics(const sdk::ProtoStruct&) { + return peek_kinematics_data; +} + void MockGantry::move_to_position(const std::vector& coordinates, const sdk::ProtoStruct&) { peek_positions = {}; diff --git a/src/viam/sdk/tests/mocks/mock_gantry.hpp b/src/viam/sdk/tests/mocks/mock_gantry.hpp index f68c724fa..58221fec4 100644 --- a/src/viam/sdk/tests/mocks/mock_gantry.hpp +++ b/src/viam/sdk/tests/mocks/mock_gantry.hpp @@ -23,12 +23,14 @@ class MockGantry : public sdk::Gantry { void stop(const sdk::ProtoStruct& extra) override; sdk::ProtoStruct do_command(const sdk::ProtoStruct& command) override; std::vector get_geometries(const sdk::ProtoStruct& extra) override; + std::string get_kinematics(const sdk::ProtoStruct& extra) override; std::vector peek_positions; bool peek_stop_called{false}; bool peek_home_called{false}; sdk::ProtoStruct peek_command; + std::string peek_kinematics_data; }; } // namespace gantry } // namespace sdktests -} // namespace viam +} // namespace viam \ No newline at end of file diff --git a/src/viam/sdk/tests/test_gantry.cpp b/src/viam/sdk/tests/test_gantry.cpp index 8ba834d71..a016ceba7 100644 --- a/src/viam/sdk/tests/test_gantry.cpp +++ b/src/viam/sdk/tests/test_gantry.cpp @@ -8,6 +8,7 @@ BOOST_TEST_DONT_PRINT_LOG_VALUE(std::vector) BOOST_TEST_DONT_PRINT_LOG_VALUE(std::vector) +BOOST_TEST_DONT_PRINT_LOG_VALUE(std::string) namespace viam { namespace sdktests { @@ -83,7 +84,15 @@ BOOST_AUTO_TEST_CASE(test_do_command) { }); } +BOOST_AUTO_TEST_CASE(test_get_kinematics) { + std::shared_ptr mock = MockGantry::get_mock_gantry(); + client_to_mock_pipeline(mock, [](Gantry& client) { + const auto& kinematics_data = client.get_kinematics(); + BOOST_CHECK_EQUAL(kinematics_data, fake_kinematics_data()); + }); +} + BOOST_AUTO_TEST_SUITE_END() } // namespace sdktests -} // namespace viam +} // namespace viam \ No newline at end of file