Skip to content

Commit 0d2725d

Browse files
committed
add get geometries
1 parent b773f7a commit 0d2725d

File tree

9 files changed

+68
-34
lines changed

9 files changed

+68
-34
lines changed

src/viam/examples/modules/audioin/client.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@ int main() {
1818
// any other C++ SDK objects and stays alive until all Viam C++ SDK objects are destroyed.
1919
Instance inst;
2020

21-
auto machine = RobotClient::at_address(host, options);
22-
2321
// Update these with your robot's connection details
2422
const char* uri = ""; // replace with your robot's URI
2523
DialOptions dial_options;
@@ -35,7 +33,7 @@ int main() {
3533
std::string address(uri);
3634
Options options(1, opts);
3735

38-
std::shared_ptr<RobotClient> robot = RobotClient::at_address(host, options);
36+
std::shared_ptr<RobotClient> robot = RobotClient::at_address(address, options);
3937

4038
// Print resources
4139
VIAM_SDK_LOG(info) << "Resources:";

src/viam/sdk/components/audio_in.hpp

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -98,23 +98,31 @@ class AudioIn : public Component {
9898
/// @return The result of the executed command.
9999
virtual ProtoStruct do_command(const ProtoStruct& command) = 0;
100100

101+
/// @brief Returns `GeometryConfig`s associated with the calling AudioIn.
102+
/// @return The requested `GeometryConfig`s associated with the component.
103+
inline std::vector<GeometryConfig> get_geometries() {
104+
return get_geometries({});
105+
}
106+
107+
/// @brief Returns `GeometryConfig`s associated with the calling AudioIn.
108+
/// @param extra Any additional arguments to the method.
109+
/// @return The requested `GeometryConfig`s associated with the component.
110+
virtual std::vector<GeometryConfig> get_geometries(const ProtoStruct& extra) = 0;
111+
101112
API api() const override;
102113

103114
protected:
104115
explicit AudioIn(std::string name);
105116

106117
};
107118

108-
109119
template <>
110120
struct API::traits<AudioIn> {
111121
static API api();
112122
};
113123

114124
bool operator==(const AudioIn::properties& lhs, const AudioIn::properties& rhs);
115125

116-
117-
118126
} // namespace sdk
119127
} // namespace viam
120128

src/viam/sdk/components/private/audio_in_client.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@ namespace viam {
2121
namespace sdk {
2222
namespace impl {
2323

24-
25-
2624
AudioInClient::AudioInClient(std::string name, std::shared_ptr<grpc::Channel> channel)
2725
: AudioIn(std::move(name)),
2826
stub_(viam::component::audioin::v1::AudioInService::NewStub(channel)),
@@ -43,7 +41,7 @@ void AudioInClient::get_audio(std::string const& codec,
4341
})
4442
.invoke_stream([&](auto& response) {
4543

46-
// Create audio_chunk from response
44+
// Create audio_chunk struct from proto response
4745
audio_chunk chunk;
4846

4947
// Convert audio_data from string to std::vector<std::byte>
@@ -70,7 +68,7 @@ AudioIn::properties AudioInClient::get_properties(const ProtoStruct& extra) {
7068
return make_client_helper(this, *stub_, &StubType::GetProperties)
7169
.with(extra)
7270
.invoke([](auto& response) {
73-
// Convert repeated field to vector
71+
// Convert proto repeated field to vector
7472
std::vector<std::string> codecs;
7573
codecs.reserve(response.supported_codecs_size());
7674
for (const auto& codec : response.supported_codecs()) {
@@ -89,7 +87,11 @@ ProtoStruct AudioInClient::do_command(const ProtoStruct& command) {
8987
.invoke([](auto& response) { return from_proto(response.result()); });
9088
}
9189

92-
90+
std::vector<GeometryConfig> AudioInClient::get_geometries(const ProtoStruct& extra) {
91+
return make_client_helper(this, *stub_, &StubType::GetGeometries)
92+
.with(extra)
93+
.invoke([](auto& response) { return from_proto(response); });
94+
};
9395

9496
} // namespace impl
9597
} // namespace sdk

src/viam/sdk/components/private/audio_in_client.hpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
#include <viam/api/component/audioin/v1/audioin.grpc.pb.h>
99

1010
#include <viam/sdk/components/audio_in.hpp>
11-
1211
namespace viam {
1312
namespace sdk {
1413
namespace impl {
@@ -29,6 +28,7 @@ class AudioInClient : public AudioIn {
2928

3029
properties get_properties(const ProtoStruct& extra) override;
3130
ProtoStruct do_command(const ProtoStruct& command) override;
31+
std::vector<GeometryConfig> get_geometries(const ProtoStruct& extra) override;
3232

3333

3434
// the `extra` param is frequently unnecessary but needs to be supported. Ideally, we'd
@@ -40,8 +40,9 @@ class AudioInClient : public AudioIn {
4040
// that calls the virtual method and passes a `nullptr` by default in place of the `extra`
4141
// param. In order to access these versions of the methods within the client code, however,
4242
// we need to include these `using` lines.
43-
// using AudioIn::get_geometries;
43+
using AudioIn::get_geometries;
4444
using AudioIn::get_audio;
45+
using AudioIn::get_properties;
4546

4647
private:
4748

src/viam/sdk/components/private/audio_in_server.cpp

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,6 @@ AudioInServer::AudioInServer(std::shared_ptr<ResourceManager> manager)
5555
return ::grpc::Status();
5656
}
5757

58-
59-
6058
::grpc::Status AudioInServer::DoCommand(::grpc::ServerContext*,
6159
const ::viam::common::v1::DoCommandRequest* request,
6260
::viam::common::v1::DoCommandResponse* response) noexcept {
@@ -66,7 +64,6 @@ AudioInServer::AudioInServer(std::shared_ptr<ResourceManager> manager)
6664
});
6765
}
6866

69-
7067
::grpc::Status AudioInServer::GetProperties(
7168
grpc::ServerContext*,
7269
const viam::common::v1::GetPropertiesRequest* request,
@@ -83,7 +80,18 @@ AudioInServer::AudioInServer(std::shared_ptr<ResourceManager> manager)
8380
});
8481
}
8582

86-
83+
::grpc::Status AudioInServer::GetGeometries(
84+
::grpc::ServerContext*,
85+
const ::viam::common::v1::GetGeometriesRequest* request,
86+
::viam::common::v1::GetGeometriesResponse* response) noexcept {
87+
return make_service_helper<AudioIn>(
88+
"AudioInServer::GetGeometries", this, request)([&](auto& helper, auto& audio_in) {
89+
const std::vector<GeometryConfig> geometries = audio_in->get_geometries(helper.getExtra());
90+
for (const auto& geometry : geometries) {
91+
*response->mutable_geometries()->Add() = to_proto(geometry);
92+
}
93+
});
94+
}
8795

8896
} // namespace impl
8997
} // namespace sdk

src/viam/sdk/components/private/audio_in_server.hpp

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,19 +26,20 @@ class AudioInServer : public ResourceServer, public viam::component::audioin::v1
2626
explicit AudioInServer(std::shared_ptr<ResourceManager> manager);
2727

2828
::grpc::Status GetAudio(::grpc::ServerContext* context,
29-
const ::viam::component::audioin::v1::GetAudioRequest*,
30-
::grpc::ServerWriter<::viam::component::audioin::v1::GetAudioResponse>* writer
29+
const ::viam::component::audioin::v1::GetAudioRequest*,
30+
::grpc::ServerWriter<::viam::component::audioin::v1::GetAudioResponse>* writer
3131
) noexcept override;
32-
3332
::grpc::Status DoCommand(::grpc::ServerContext* context,
34-
const ::viam::common::v1::DoCommandRequest* request,
35-
::viam::common::v1::DoCommandResponse* response) noexcept override;
36-
37-
33+
const ::viam::common::v1::DoCommandRequest* request,
34+
::viam::common::v1::DoCommandResponse* response) noexcept override;
35+
::grpc::Status GetGeometries(
36+
::grpc::ServerContext* context,
37+
const ::viam::common::v1::GetGeometriesRequest* request,
38+
::viam::common::v1::GetGeometriesResponse* response) noexcept override;
3839
::grpc::Status GetProperties(
39-
::grpc::ServerContext* context,
40-
const ::viam::common::v1::GetPropertiesRequest* request,
41-
::viam::common::v1::GetPropertiesResponse* response) noexcept override;
40+
::grpc::ServerContext* context,
41+
const ::viam::common::v1::GetPropertiesRequest* request,
42+
::viam::common::v1::GetPropertiesResponse* response) noexcept override;
4243
};
4344

4445

src/viam/sdk/tests/mocks/mock_audio_in.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ void MockAudioIn::get_audio(std::string const& codec,
2222

2323
// Simulate streaming audio chunks
2424
int chunk_count = 0;
25-
int max_chunks = (duration_seconds == 0) ? 100 : static_cast<int>(duration_seconds * 100); // ~100 chunks per second
25+
int max_chunks = (duration_seconds == 0) ? 100 : static_cast<int>(duration_seconds * 100);
2626

2727
for (const auto& mock_chunk : mock_chunks_) {
2828
if (chunk_count >= max_chunks) {
@@ -32,16 +32,13 @@ void MockAudioIn::get_audio(std::string const& codec,
3232
// Create a copy of the chunk to pass to handler
3333
audio_chunk chunk = mock_chunk;
3434
chunk.sequence = chunk_count;
35-
chunk.request_id = "mock-request-123";
3635

37-
// Call the chunk handler
3836
if (!chunk_handler(std::move(chunk))) {
3937
break; // Handler requested to stop
4038
}
4139

4240
chunk_count++;
4341

44-
// Simulate chunk timing (~10ms per chunk)
4542
std::this_thread::sleep_for(std::chrono::milliseconds(10));
4643
}
4744
}
@@ -75,21 +72,24 @@ AudioIn::properties fake_properties() {
7572
std::vector<AudioIn::audio_chunk> fake_audio_chunks() {
7673
std::vector<AudioIn::audio_chunk> chunks;
7774

78-
// Create 5 mock chunks with fake audio data
7975
for (int i = 0; i < 5; ++i) {
8076
AudioIn::audio_chunk chunk;
81-
chunk.audio_data = std::vector<std::byte>(1024, static_cast<std::byte>(i + 1)); // 1KB of data
77+
chunk.audio_data = std::vector<std::byte>(1024, static_cast<std::byte>(i + 1));
8278
chunk.audio_info.codec = "pcm16";
8379
chunk.audio_info.sample_rate_hz = 48000;
8480
chunk.audio_info.num_channels = 1;
85-
chunk.start_timestamp_ns = i * 10000000; // 10ms intervals
81+
chunk.start_timestamp_ns = i * 10000000;
8682
chunk.end_timestamp_ns = (i + 1) * 10000000;
8783
chunks.push_back(chunk);
8884
}
8985

9086
return chunks;
9187
}
9288

89+
std::vector<GeometryConfig> MockAudioIn::get_geometries(const ProtoStruct&) {
90+
return geometries_;
91+
}
92+
9393
} // namespace audioin
9494
} // namespace sdktests
9595
} // namespace viam

src/viam/sdk/tests/mocks/mock_audio_in.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ namespace sdktests {
99
namespace audioin {
1010

1111
using viam::sdk::AudioIn;
12+
using namespace viam::sdk;
1213

1314
class MockAudioIn : public AudioIn {
1415
public:
@@ -22,6 +23,8 @@ class MockAudioIn : public AudioIn {
2223

2324
viam::sdk::ProtoStruct do_command(const viam::sdk::ProtoStruct& command) override;
2425

26+
std::vector<GeometryConfig> get_geometries(const sdk::ProtoStruct& extra) override;
27+
2528
static std::shared_ptr<MockAudioIn> get_mock_audio_in();
2629

2730
MockAudioIn(std::string name) : AudioIn(std::move(name)) {}
@@ -33,6 +36,7 @@ class MockAudioIn : public AudioIn {
3336
AudioIn::properties properties_;
3437
viam::sdk::ProtoStruct map_;
3538
std::vector<audio_chunk> mock_chunks_;
39+
std::vector<GeometryConfig> geometries_;
3640
};
3741

3842
AudioIn::properties fake_properties();

src/viam/sdk/tests/test_audio_in.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include <viam/sdk/tests/mocks/mock_audio_in.hpp>
44
#include <boost/optional/optional_io.hpp>
55
#include <boost/qvm/all.hpp>
6+
#include <viam/sdk/spatialmath/geometry.hpp>
67
#include <boost/test/included/unit_test.hpp>
78
#include <viam/sdk/tests/test_utils.hpp>
89

@@ -74,6 +75,17 @@ BOOST_AUTO_TEST_CASE(test_get_properties) {
7475
});
7576
}
7677

78+
BOOST_AUTO_TEST_CASE(test_get_geometries) {
79+
std::shared_ptr<MockAudioIn> mock = MockAudioIn::get_mock_audio_in();
80+
client_to_mock_pipeline<AudioIn>(mock, [](AudioIn& client) {
81+
std::vector<GeometryConfig> result_geometries = client.get_geometries();
82+
std::vector<GeometryConfig> expected_geometries = fake_geometries();
83+
84+
BOOST_CHECK(result_geometries == expected_geometries);
85+
});
86+
}
87+
88+
7789
BOOST_AUTO_TEST_SUITE_END()
7890

7991

0 commit comments

Comments
 (0)