From 3b7669219e91cc9d19c5edcb12f0bcb17416e149 Mon Sep 17 00:00:00 2001 From: Pavel Kirienko Date: Thu, 19 Mar 2015 00:19:40 +0300 Subject: [PATCH] Basic support for string parameters --- libuavcan/include/uavcan/protocol/param_server.hpp | 2 +- libuavcan/src/protocol/uc_param_server.cpp | 7 +++++-- libuavcan/test/protocol/param_server.cpp | 10 +++++++++- libuavcan_drivers/linux/apps/uavcan_nodetool.cpp | 5 +++++ 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/libuavcan/include/uavcan/protocol/param_server.hpp b/libuavcan/include/uavcan/protocol/param_server.hpp index 847095f430..666db73b59 100644 --- a/libuavcan/include/uavcan/protocol/param_server.hpp +++ b/libuavcan/include/uavcan/protocol/param_server.hpp @@ -88,7 +88,7 @@ class UAVCAN_EXPORT ParamServer void handleGetSet(const protocol::param::GetSet::Request& request, protocol::param::GetSet::Response& response); void handleExecuteOpcode(const protocol::param::ExecuteOpcode::Request& request, - protocol::param::ExecuteOpcode::Response& response); + protocol::param::ExecuteOpcode::Response& response); public: explicit ParamServer(INode& node) diff --git a/libuavcan/src/protocol/uc_param_server.cpp b/libuavcan/src/protocol/uc_param_server.cpp index 164ac1316e..1062332d3b 100644 --- a/libuavcan/src/protocol/uc_param_server.cpp +++ b/libuavcan/src/protocol/uc_param_server.cpp @@ -12,7 +12,10 @@ namespace uavcan bool ParamServer::isValueNonEmpty(const protocol::param::Value& value) { - return !value.value_bool.empty() || !value.value_int.empty() || !value.value_float.empty(); + return !value.value_bool.empty() || + !value.value_int.empty() || + !value.value_float.empty() || + !value.value_string.empty(); } void ParamServer::handleGetSet(const protocol::param::GetSet::Request& in, protocol::param::GetSet::Response& out) @@ -50,7 +53,7 @@ void ParamServer::handleGetSet(const protocol::param::GetSet::Request& in, proto } void ParamServer::handleExecuteOpcode(const protocol::param::ExecuteOpcode::Request& in, - protocol::param::ExecuteOpcode::Response& out) + protocol::param::ExecuteOpcode::Response& out) { UAVCAN_ASSERT(manager_ != NULL); diff --git a/libuavcan/test/protocol/param_server.cpp b/libuavcan/test/protocol/param_server.cpp index c7a27a0f8e..861ca41cd3 100644 --- a/libuavcan/test/protocol/param_server.cpp +++ b/libuavcan/test/protocol/param_server.cpp @@ -43,6 +43,10 @@ struct ParamServerTestManager : public uavcan::IParamManager { it->second = double(value.value_float[0]); } + else if (!value.value_string.empty()) + { + it->second = std::atof(value.value_string[0].value.c_str()); + } else { assert(0); @@ -151,7 +155,11 @@ TEST(ParamServer, Basic) // Set by index get_set_rq = uavcan::protocol::param::GetSet::Request(); get_set_rq.index = 0; - get_set_rq.value.value_int.push_back(424242); + { + uavcan::protocol::param::ValueString str; + str.value = "424242"; + get_set_rq.value.value_string.push_back(str); + } doCall(get_set_cln, get_set_rq, nodes); ASSERT_STREQ("foobar", get_set_cln.collector.result->response.name.c_str()); ASSERT_FLOAT_EQ(424242, get_set_cln.collector.result->response.value.value_float[0]); diff --git a/libuavcan_drivers/linux/apps/uavcan_nodetool.cpp b/libuavcan_drivers/linux/apps/uavcan_nodetool.cpp index f580f39f6a..dd387591f2 100644 --- a/libuavcan_drivers/linux/apps/uavcan_nodetool.cpp +++ b/libuavcan_drivers/linux/apps/uavcan_nodetool.cpp @@ -88,6 +88,10 @@ std::string paramValueToString(const uavcan::protocol::param::Value& value) { return std::to_string(value.value_float[0]); } + else if (!value.value_string.empty()) + { + return std::string(value.value_string[0].value.c_str()); + } else { return "?"; @@ -176,6 +180,7 @@ const std::map