Skip to content

Commit 117de35

Browse files
randhidlia-viam
andauthored
[RSDK-9624] Add discovery service (viamrobotics#372)
Co-authored-by: lia <[email protected]>
1 parent c5f1002 commit 117de35

File tree

19 files changed

+392
-2
lines changed

19 files changed

+392
-2
lines changed

bin/run-clang-format.sh

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,11 @@
1414
# See the License for the specific language governing permissions and
1515
# limitations under the License.
1616

17+
# Check if clang-format is installed
18+
if ! command -v clang-format >/dev/null 2>&1; then
19+
echo "Error: clang-format is not installed"
20+
echo "Please install it using: brew install clang-format"
21+
exit 1
22+
fi
23+
1724
find ./src -not -path "./src/viam/api" -type f \( -name \*.cpp -o -name \*.hpp \) | xargs clang-format -style=file -i -fallback-style=none "$@"

src/viam/api/CMakeLists.txt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,10 @@ if (VIAMCPPSDK_USE_DYNAMIC_PROTOS)
213213
${PROTO_GEN_DIR}/robot/v1/robot.grpc.pb.h
214214
${PROTO_GEN_DIR}/robot/v1/robot.pb.cc
215215
${PROTO_GEN_DIR}/robot/v1/robot.pb.h
216+
${PROTO_GEN_DIR}/service/discovery/v1/discovery.grpc.pb.cc
217+
${PROTO_GEN_DIR}/service/discovery/v1/discovery.grpc.pb.h
218+
${PROTO_GEN_DIR}/service/discovery/v1/discovery.pb.cc
219+
${PROTO_GEN_DIR}/service/discovery/v1/discovery.pb.h
216220
${PROTO_GEN_DIR}/service/generic/v1/generic.grpc.pb.cc
217221
${PROTO_GEN_DIR}/service/generic/v1/generic.grpc.pb.h
218222
${PROTO_GEN_DIR}/service/generic/v1/generic.pb.cc
@@ -326,6 +330,8 @@ target_sources(viamapi
326330
${PROTO_GEN_DIR}/module/v1/module.pb.cc
327331
${PROTO_GEN_DIR}/robot/v1/robot.grpc.pb.cc
328332
${PROTO_GEN_DIR}/robot/v1/robot.pb.cc
333+
${PROTO_GEN_DIR}/service/discovery/v1/discovery.grpc.pb.cc
334+
${PROTO_GEN_DIR}/service/discovery/v1/discovery.pb.cc
329335
${PROTO_GEN_DIR}/service/generic/v1/generic.grpc.pb.cc
330336
${PROTO_GEN_DIR}/service/generic/v1/generic.pb.cc
331337
${PROTO_GEN_DIR}/service/mlmodel/v1/mlmodel.grpc.pb.cc
@@ -385,6 +391,8 @@ target_sources(viamapi
385391
${PROTO_GEN_DIR}/../../viam/api/robot/v1/robot.grpc.pb.h
386392
${PROTO_GEN_DIR}/../../viam/api/robot/v1/robot.pb.h
387393
${PROTO_GEN_DIR}/../../viam/api/tagger/v1/tagger.grpc.pb.h
394+
${PROTO_GEN_DIR}/../../viam/api/service/discovery/v1/discovery.grpc.pb.h
395+
${PROTO_GEN_DIR}/../../viam/api/service/discovery/v1/discovery.pb.h
388396
${PROTO_GEN_DIR}/../../viam/api/service/generic/v1/generic.grpc.pb.h
389397
${PROTO_GEN_DIR}/../../viam/api/service/generic/v1/generic.pb.h
390398
${PROTO_GEN_DIR}/../../viam/api/service/mlmodel/v1/mlmodel.grpc.pb.h

src/viam/examples/modules/complex/proto/buf.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@ deps:
44
- remote: buf.build
55
owner: googleapis
66
repository: googleapis
7-
commit: e93e34f48be043dab55be31b4b47f458
8-
digest: shake256:93dbe51c27606999eef918360df509485a4d272e79aaed6d0016940379a9b06d316fc5228b7b50cca94bb310f34c5fc5955ce7474f655f0d0a224c4121dda3c1
7+
commit: 546238c53f7340c6a2a6099fb863bc1b
8+
digest: shake256:8d75c12f391e392b24c076d05117b47aeddb090add99c70247a8f4389b906a65f61a933c68e54ed8b73a050b967b6b712ba194348b67c3ab3ee26cc2cb25852c

src/viam/sdk/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,10 +118,13 @@ target_sources(viamsdk
118118
rpc/dial.cpp
119119
rpc/server.cpp
120120
rpc/private/viam_grpc_channel.cpp
121+
services/discovery.cpp
121122
services/generic.cpp
122123
services/mlmodel.cpp
123124
services/motion.cpp
124125
services/navigation.cpp
126+
services/private/discovery_client.cpp
127+
services/private/discovery_server.cpp
125128
services/private/generic_client.cpp
126129
services/private/generic_server.cpp
127130
services/private/mlmodel.cpp
@@ -181,6 +184,7 @@ target_sources(viamsdk
181184
../../viam/sdk/rpc/dial.hpp
182185
../../viam/sdk/rpc/message_sizes.hpp
183186
../../viam/sdk/rpc/server.hpp
187+
../../viam/sdk/services/discovery.hpp
184188
../../viam/sdk/services/generic.hpp
185189
../../viam/sdk/services/mlmodel.hpp
186190
../../viam/sdk/services/motion.hpp

src/viam/sdk/config/resource.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
#include <viam/api/app/v1/robot.pb.h>
1010
#include <viam/api/robot/v1/robot.pb.h>
11+
#include <viam/api/service/discovery/v1/discovery.pb.h>
1112

1213
#include <viam/sdk/common/exception.hpp>
1314
#include <viam/sdk/common/private/repeated_ptr_convert.hpp>
@@ -156,6 +157,12 @@ ResourceConfig from_proto_impl<app::v1::ComponentConfig>::operator()(
156157
proto->has_frame() ? from_proto(proto->frame()) : LinkConfig{});
157158
}
158159

160+
std::vector<ResourceConfig>
161+
from_proto_impl<service::discovery::v1::DiscoverResourcesResponse>::operator()(
162+
const service::discovery::v1::DiscoverResourcesResponse* proto) const {
163+
return impl::from_repeated_field(proto->discoveries());
164+
}
165+
159166
} // namespace proto_convert_details
160167
} // namespace sdk
161168
} // namespace viam

src/viam/sdk/config/resource.hpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,15 @@ class ResourceLevelServiceConfig;
1717

1818
} // namespace v1
1919
} // namespace app
20+
21+
namespace service {
22+
namespace discovery {
23+
namespace v1 {
24+
25+
class DiscoverResourcesResponse;
26+
}
27+
} // namespace discovery
28+
} // namespace service
2029
} // namespace viam
2130

2231
namespace viam {
@@ -83,6 +92,12 @@ struct from_proto_impl<app::v1::ComponentConfig> {
8392
ResourceConfig operator()(const app::v1::ComponentConfig*) const;
8493
};
8594

95+
template <>
96+
struct from_proto_impl<service::discovery::v1::DiscoverResourcesResponse> {
97+
std::vector<ResourceConfig> operator()(
98+
const service::discovery::v1::DiscoverResourcesResponse*) const;
99+
};
100+
86101
} // namespace proto_convert_details
87102

88103
} // namespace sdk

src/viam/sdk/registry/registry.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@
4242
#include <viam/sdk/components/private/servo_server.hpp>
4343
#include <viam/sdk/resource/resource.hpp>
4444
#include <viam/sdk/resource/resource_api.hpp>
45+
#include <viam/sdk/services/private/discovery_client.hpp>
46+
#include <viam/sdk/services/private/discovery_server.hpp>
4547
#include <viam/sdk/services/private/generic_client.hpp>
4648
#include <viam/sdk/services/private/generic_server.hpp>
4749
#include <viam/sdk/services/private/mlmodel_client.hpp>
@@ -202,6 +204,7 @@ void register_resources() {
202204
Registry::register_resource<impl::ServoClient, impl::ServoServer>();
203205

204206
// Register all services
207+
Registry::register_resource<impl::DiscoveryClient, impl::DiscoveryServer>();
205208
Registry::register_resource<impl::GenericServiceClient, impl::GenericServiceServer>();
206209
Registry::register_resource<impl::MLModelServiceClient, impl::MLModelServiceServer>();
207210
Registry::register_resource<impl::MotionClient, impl::MotionServer>();
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#include <viam/sdk/services/discovery.hpp>
2+
3+
#include <viam/sdk/common/utils.hpp>
4+
5+
namespace viam {
6+
namespace sdk {
7+
8+
Discovery::Discovery(std::string name) : Service(std::move(name)) {}
9+
10+
API Discovery::api() const {
11+
return API::get<Discovery>();
12+
}
13+
14+
API API::traits<Discovery>::api() {
15+
return {kRDK, kService, "discovery"};
16+
}
17+
18+
} // namespace sdk
19+
} // namespace viam
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
/// @file services/discovery.hpp
2+
///
3+
/// @brief Defines a `Discovery` service.
4+
5+
#pragma once
6+
7+
#include <string>
8+
9+
#include <viam/sdk/common/utils.hpp>
10+
#include <viam/sdk/config/resource.hpp>
11+
#include <viam/sdk/services/service.hpp>
12+
13+
namespace viam {
14+
namespace sdk {
15+
16+
/// @defgroup Discovery Classes related to the Discovery service.
17+
18+
/// @class Discovery discovery.hpp "services/discovery.hpp"
19+
/// @brief A `Discovery` service is used to discover resources that are physically connected to
20+
/// your machine.
21+
/// @ingroup Discovery
22+
///
23+
/// This acts as an abstract parent class to be inherited from by any drivers representing
24+
/// specific discovery implementations. This class cannot be used on its own.
25+
class Discovery : public Service {
26+
public:
27+
/// @brief Discover valid viam configuration of resources that are physically
28+
/// connected to your machine.
29+
/// @return array of potential viam configurations for hardware physically
30+
/// connected to your viam server
31+
inline std::vector<ResourceConfig> discover_resources() {
32+
return discover_resources({});
33+
}
34+
35+
/// @brief Discover valid viam configuration of resources that are physically
36+
/// connected to your machine.
37+
/// @param extra Any additional arguments to the method.
38+
/// @return array of potential viam configurations for hardware physically
39+
// connected to your viam server
40+
virtual std::vector<ResourceConfig> discover_resources(const ProtoStruct& extra) = 0;
41+
42+
/// @brief Do an arbitrary command.
43+
/// @param command Freeform fields that are service-specific.
44+
/// @return Freeform result of the command.
45+
virtual ProtoStruct do_command(const ProtoStruct& command) = 0;
46+
47+
API api() const override;
48+
49+
protected:
50+
explicit Discovery(std::string name);
51+
};
52+
53+
template <>
54+
struct API::traits<Discovery> {
55+
static API api();
56+
};
57+
58+
} // namespace sdk
59+
} // namespace viam
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
#include <viam/sdk/services/private/discovery_client.hpp>
2+
3+
#include <viam/api/service/discovery/v1/discovery.grpc.pb.h>
4+
#include <viam/api/service/discovery/v1/discovery.pb.h>
5+
6+
#include <viam/sdk/common/client_helper.hpp>
7+
#include <viam/sdk/common/private/repeated_ptr_convert.hpp>
8+
#include <viam/sdk/common/proto_value.hpp>
9+
#include <viam/sdk/common/utils.hpp>
10+
#include <viam/sdk/services/discovery.hpp>
11+
12+
namespace viam {
13+
namespace sdk {
14+
namespace impl {
15+
16+
DiscoveryClient::DiscoveryClient(std::string name, std::shared_ptr<grpc::Channel> channel)
17+
: Discovery(std::move(name)),
18+
stub_(viam::service::discovery::v1::DiscoveryService::NewStub(channel)),
19+
channel_(std::move(channel)) {}
20+
21+
std::vector<ResourceConfig> DiscoveryClient::discover_resources(const ProtoStruct& extra) {
22+
return make_client_helper(this, *stub_, &StubType::DiscoverResources)
23+
.with(extra)
24+
.invoke([](auto& response) { return from_proto(response); });
25+
}
26+
27+
ProtoStruct DiscoveryClient::do_command(const ProtoStruct& command) {
28+
return make_client_helper(this, *stub_, &StubType::DoCommand)
29+
.with([&](auto& request) { *request.mutable_command() = to_proto(command); })
30+
.invoke([](auto& response) { return from_proto(response.result()); });
31+
}
32+
33+
} // namespace impl
34+
} // namespace sdk
35+
} // namespace viam

0 commit comments

Comments
 (0)