Skip to content

Commit 5c1e819

Browse files
authored
RSDK-6484 - add reconfigurable base class (#212)
1 parent 8891d79 commit 5c1e819

File tree

11 files changed

+70
-21
lines changed

11 files changed

+70
-21
lines changed

src/viam/examples/modules/complex/base/impl.hpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@
44
#include <viam/sdk/components/component.hpp>
55
#include <viam/sdk/components/motor/motor.hpp>
66
#include <viam/sdk/config/resource.hpp>
7+
#include <viam/sdk/resource/reconfigurable.hpp>
78
#include <viam/sdk/resource/resource.hpp>
89

910
using namespace viam::sdk;
1011

1112
// `MyBase` inherits from the `Base` class defined in the viam C++ SDK and
1213
// implements some of the relevant methods along with `reconfigure`. It also
1314
// specifies a static `validate` method that checks config validity.
14-
class MyBase : public Base {
15+
class MyBase : public Base, public Reconfigurable {
1516
public:
1617
MyBase(const Dependencies& deps, const ResourceConfig& cfg) : Base(cfg.name()) {
1718
this->reconfigure(deps, cfg);

src/viam/examples/modules/complex/gizmo/impl.hpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include <vector>
44

55
#include <viam/sdk/common/proto_type.hpp>
6+
#include <viam/sdk/resource/reconfigurable.hpp>
67

78
#include "api.hpp"
89

@@ -11,7 +12,7 @@ using namespace viam::sdk;
1112
// MyGizmo inherits from the `Gizmo` class defined in `api.hpp` and implements
1213
// all relevant methods along with `reconfigure`. It also specifies a static
1314
// `validate` method that checks config validity.
14-
class MyGizmo : public Gizmo {
15+
class MyGizmo : public Gizmo, public Reconfigurable {
1516
public:
1617
MyGizmo(std::string name, std::string arg1) : Gizmo(std::move(name)), arg1_(std::move(arg1)){};
1718
MyGizmo(const Dependencies& deps, const ResourceConfig& cfg) : Gizmo(cfg.name()) {

src/viam/examples/modules/complex/summation/impl.hpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@
22

33
#include <vector>
44

5+
#include <viam/sdk/resource/reconfigurable.hpp>
6+
57
#include "api.hpp"
68

79
using namespace viam::sdk;
810

911
// MySummation inherits from the `Summation` class defined in `api.hpp` and
1012
// implements all relevant methods along with `reconfigure`.
11-
class MySummation : public Summation {
13+
class MySummation : public Summation, public Reconfigurable {
1214
public:
1315
MySummation(std::string name, bool subtract)
1416
: Summation(std::move(name)), subtract_(subtract){};

src/viam/examples/modules/simple/main.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
#include <iostream>
22
#include <memory>
3-
#include <signal.h>
43
#include <sstream>
54

65
#include <boost/log/trivial.hpp>
@@ -15,6 +14,7 @@
1514
#include <viam/sdk/module/module.hpp>
1615
#include <viam/sdk/module/service.hpp>
1716
#include <viam/sdk/registry/registry.hpp>
17+
#include <viam/sdk/resource/reconfigurable.hpp>
1818
#include <viam/sdk/resource/resource.hpp>
1919
#include <viam/sdk/rpc/dial.hpp>
2020
#include <viam/sdk/rpc/server.hpp>
@@ -26,9 +26,9 @@ using namespace viam::sdk;
2626
// Printer is a modular resource that can print a to_print value to STDOUT when
2727
// a DoCommand request is received or when reconfiguring. The to_print value
2828
// must be provided as an attribute in the config.
29-
class Printer : public GenericService {
29+
class Printer : public GenericService, public Reconfigurable {
3030
public:
31-
void reconfigure(Dependencies deps, ResourceConfig cfg) {
31+
void reconfigure(const Dependencies& deps, const ResourceConfig& cfg) {
3232
std::cout << "Printer " << Resource::name() << " is reconfiguring" << std::endl;
3333
for (auto& dep : deps) {
3434
std::cout << "dependency: " << dep.first.to_string() << std::endl;

src/viam/examples/modules/tflite/main.cpp

+4-1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
#include <viam/sdk/config/resource.hpp>
3131
#include <viam/sdk/module/service.hpp>
3232
#include <viam/sdk/registry/registry.hpp>
33+
#include <viam/sdk/resource/reconfigurable.hpp>
3334
#include <viam/sdk/resource/stoppable.hpp>
3435
#include <viam/sdk/rpc/server.hpp>
3536
#include <viam/sdk/services/mlmodel/mlmodel.hpp>
@@ -58,7 +59,9 @@ constexpr char service_name[] = "example_mlmodelservice_tflite";
5859
// with the model.
5960
//
6061
// Any additional configuration fields are ignored.
61-
class MLModelServiceTFLite : public vsdk::MLModelService, public vsdk::Stoppable {
62+
class MLModelServiceTFLite : public vsdk::MLModelService,
63+
public vsdk::Stoppable,
64+
public vsdk::Reconfigurable {
6265
class write_to_tflite_tensor_visitor_;
6366

6467
public:

src/viam/sdk/CMakeLists.txt

+2
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ target_sources(viamsdk
8282
module/signal_manager.cpp
8383
referenceframe/frame.cpp
8484
registry/registry.cpp
85+
resource/reconfigurable.cpp
8586
resource/resource.cpp
8687
resource/resource_api.cpp
8788
resource/resource_manager.cpp
@@ -155,6 +156,7 @@ target_sources(viamsdk
155156
../../viam/sdk/module/signal_manager.hpp
156157
../../viam/sdk/referenceframe/frame.hpp
157158
../../viam/sdk/registry/registry.hpp
159+
../../viam/sdk/resource/reconfigurable.hpp
158160
../../viam/sdk/resource/resource.hpp
159161
../../viam/sdk/resource/resource_api.hpp
160162
../../viam/sdk/resource/resource_manager.hpp

src/viam/sdk/module/service.cpp

+2-4
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
11
#include <viam/sdk/module/service.hpp>
22

33
#include <exception>
4-
#include <fstream>
5-
#include <iostream>
64
#include <memory>
75
#include <sstream>
8-
#include <stdexcept>
96
#include <string>
107
#include <sys/socket.h>
118
#include <sys/stat.h>
@@ -33,6 +30,7 @@
3330
#include <viam/sdk/config/resource.hpp>
3431
#include <viam/sdk/module/handler_map.hpp>
3532
#include <viam/sdk/registry/registry.hpp>
33+
#include <viam/sdk/resource/reconfigurable.hpp>
3634
#include <viam/sdk/resource/resource.hpp>
3735
#include <viam/sdk/resource/resource_api.hpp>
3836
#include <viam/sdk/resource/resource_manager.hpp>
@@ -121,7 +119,7 @@ ::grpc::Status ModuleService::ReconfigureResource(
121119
" as it doesn't exist.");
122120
}
123121
try {
124-
res->reconfigure(deps, cfg);
122+
Reconfigurable::reconfigure_if_reconfigurable(res, deps, cfg);
125123
return grpc::Status();
126124
} catch (const std::exception& exc) {
127125
return grpc::Status(::grpc::INTERNAL, exc.what());
+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#include <viam/sdk/resource/reconfigurable.hpp>
2+
3+
#include <memory>
4+
5+
namespace viam {
6+
namespace sdk {
7+
8+
Reconfigurable::~Reconfigurable() = default;
9+
Reconfigurable::Reconfigurable() = default;
10+
11+
void Reconfigurable::reconfigure_if_reconfigurable(const std::shared_ptr<Resource>& resource,
12+
const Dependencies& deps,
13+
const ResourceConfig& cfg) {
14+
auto reconfigurable_res = std::dynamic_pointer_cast<Reconfigurable>(resource);
15+
if (reconfigurable_res) {
16+
reconfigurable_res->reconfigure(deps, cfg);
17+
}
18+
}
19+
20+
} // namespace sdk
21+
} // namespace viam
+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#pragma once
2+
3+
#include <viam/sdk/config/resource.hpp>
4+
#include <viam/sdk/resource/resource.hpp>
5+
6+
namespace viam {
7+
namespace sdk {
8+
9+
class Reconfigurable {
10+
public:
11+
virtual ~Reconfigurable();
12+
13+
/// @brief Reconfigures a resource.
14+
/// @param deps Dependencies of the resource.
15+
/// @param cfg The resource's config.
16+
virtual void reconfigure(const Dependencies& deps, const ResourceConfig& cfg) = 0;
17+
18+
/// @brief Reconfigures a resource if it is Reconfigurable.
19+
/// @param resource the Resource to reconfigure.
20+
/// @param deps Dependencies of the resource.
21+
/// @param cfg The resource's config.
22+
static void reconfigure_if_reconfigurable(const std::shared_ptr<Resource>& resource,
23+
const Dependencies& deps,
24+
const ResourceConfig& cfg);
25+
26+
protected:
27+
explicit Reconfigurable();
28+
};
29+
30+
} // namespace sdk
31+
} // namespace viam

src/viam/sdk/resource/resource.cpp

-5
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
#include <viam/sdk/resource/resource.hpp>
22

3-
#include <stdexcept>
4-
#include <unordered_map>
5-
63
#include <grpcpp/support/status.h>
74

85
#include <viam/sdk/common/proto_type.hpp>
@@ -21,8 +18,6 @@ std::string Resource::name() const {
2118
return name_;
2219
}
2320

24-
void Resource::reconfigure(const Dependencies& deps, const ResourceConfig& cfg){};
25-
2621
ResourceName Resource::get_resource_name(std::string name) const {
2722
ResourceName r;
2823
*r.mutable_namespace_() = kRDK;

src/viam/sdk/resource/resource.hpp

-5
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,6 @@ class Resource {
2525
/// @brief Returns a `ResourceName` for a particular resource name.
2626
virtual viam::common::v1::ResourceName get_resource_name(std::string name) const;
2727

28-
/// @brief Reconfigures a resource.
29-
/// @param deps Dependencies of the resource.
30-
/// @param cfg The resource's config.
31-
virtual void reconfigure(const Dependencies& deps, const ResourceConfig& cfg);
32-
3328
/// @brief Return the resource's name.
3429
virtual std::string name() const;
3530

0 commit comments

Comments
 (0)