Skip to content

Commit

Permalink
New class for return values of interface methods.
Browse files Browse the repository at this point in the history
  • Loading branch information
randaz81 committed Nov 21, 2023
1 parent 1abe0a6 commit d60a482
Show file tree
Hide file tree
Showing 12 changed files with 129 additions and 24 deletions.
4 changes: 2 additions & 2 deletions src/devices/RemoteControlBoard/RemoteControlBoard.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1567,12 +1567,12 @@ bool RemoteControlBoard::getNumberOfMotors(int *num)
return get1V1I(VOCAB_MOTORS_NUMBER, *num);
}

bool RemoteControlBoard::getTemperature (int m, double* val)
yarp::os::yarp_ret_value RemoteControlBoard::getTemperature (int m, double* val)
{
return get1V1I1D(VOCAB_TEMPERATURE, m, val);
}

bool RemoteControlBoard::getTemperatures (double *vals)
yarp::os::yarp_ret_value RemoteControlBoard::getTemperatures (double *vals)
{
return get1VDA(VOCAB_TEMPERATURES, vals);
}
Expand Down
4 changes: 2 additions & 2 deletions src/devices/RemoteControlBoard/RemoteControlBoard.h
Original file line number Diff line number Diff line change
Expand Up @@ -329,8 +329,8 @@ class RemoteControlBoard :

// IMotor
bool getNumberOfMotors(int *num) override;
bool getTemperature(int m, double* val) override;
bool getTemperatures(double *vals) override;
yarp::os::yarp_ret_value getTemperature(int m, double* val) override;
yarp::os::yarp_ret_value getTemperatures(double *vals) override;
bool getTemperatureLimit (int m, double* val) override;
bool setTemperatureLimit (int m, const double val) override;
bool getGearboxRatio(int m, double* val) override;
Expand Down
4 changes: 2 additions & 2 deletions src/devices/controlBoardRemapper/ControlBoardRemapper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1986,7 +1986,7 @@ bool ControlBoardRemapper::getNumberOfMotors(int *num)
return true;
}

bool ControlBoardRemapper::getTemperature(int m, double* val)
yarp::os::yarp_ret_value ControlBoardRemapper::getTemperature(int m, double* val)
{
int off=(int)remappedControlBoards.lut[m].axisIndexInSubControlBoard;
size_t subIndex=remappedControlBoards.lut[m].subControlBoardIndex;
Expand All @@ -2006,7 +2006,7 @@ bool ControlBoardRemapper::getTemperature(int m, double* val)
return false;
}

bool ControlBoardRemapper::getTemperatures(double *vals)
yarp::os::yarp_ret_value ControlBoardRemapper::getTemperatures(double *vals)
{
bool ret=true;
for(int l=0;l<controlledJoints;l++)
Expand Down
4 changes: 2 additions & 2 deletions src/devices/controlBoardRemapper/ControlBoardRemapper.h
Original file line number Diff line number Diff line change
Expand Up @@ -451,9 +451,9 @@ class ControlBoardRemapper :
/* IMotor */
bool getNumberOfMotors(int *num) override;

bool getTemperature(int m, double *val) override;
yarp::os::yarp_ret_value getTemperature(int m, double *val) override;

bool getTemperatures(double *vals) override;
yarp::os::yarp_ret_value getTemperatures(double *vals) override;

bool getTemperatureLimit(int m, double *val) override;

Expand Down
8 changes: 4 additions & 4 deletions src/devices/fakeMotionControl/fakeMotionControl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3163,14 +3163,14 @@ bool FakeMotionControl::getNumberOfMotorsRaw(int* num)
return true;
}

bool FakeMotionControl::getTemperatureRaw(int m, double* val)
yarp::os::yarp_ret_value FakeMotionControl::getTemperatureRaw(int m, double* val)
{
return NOT_YET_IMPLEMENTED("getTemperatureRaw");
return yarp::os::yarp_ret_value(true);
}

bool FakeMotionControl::getTemperaturesRaw(double *vals)
yarp::os::yarp_ret_value FakeMotionControl::getTemperaturesRaw(double *vals)
{
bool ret = true;
yarp::os::yarp_ret_value ret = true;
for(int j=0; j< _njoints; j++)
{
ret &= getTemperatureRaw(j, &vals[j]);
Expand Down
4 changes: 2 additions & 2 deletions src/devices/fakeMotionControl/fakeMotionControl.h
Original file line number Diff line number Diff line change
Expand Up @@ -475,8 +475,8 @@ class FakeMotionControl :

// IMotor interface
bool getNumberOfMotorsRaw(int * num) override;
bool getTemperatureRaw(int m, double* val) override;
bool getTemperaturesRaw(double *vals) override;
yarp::os::yarp_ret_value getTemperatureRaw(int m, double* val) override;
yarp::os::yarp_ret_value getTemperaturesRaw(double *vals) override;
bool getTemperatureLimitRaw(int m, double *temp) override;
bool setTemperatureLimitRaw(int m, const double temp) override;
bool getGearboxRatioRaw(int m, double* gearbox) override;
Expand Down
9 changes: 5 additions & 4 deletions src/libYARP_dev/src/yarp/dev/IMotor.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include <yarp/os/Vocab.h>
#include <yarp/os/Log.h>
#include <yarp/dev/api.h>
#include <yarp/os/ReturnValue.h>

namespace yarp::dev {
class IMotorRaw;
Expand Down Expand Up @@ -41,14 +42,14 @@ class YARP_dev_API yarp::dev::IMotorRaw
* @param val retrieved motor temperature
* @return true/false
*/
virtual bool getTemperatureRaw(int m, double* val)=0;
virtual yarp::os::yarp_ret_value getTemperatureRaw(int m, double* val)=0;

/**
* Get temperature of all the motors.
* @param vals pointer to an array containing all motor temperatures
* @return true/false
*/
virtual bool getTemperaturesRaw(double *vals)=0;
virtual yarp::os::yarp_ret_value getTemperaturesRaw(double *vals)=0;

/**
* Retreives the current temperature limit for a specific motor.
Expand Down Expand Up @@ -111,14 +112,14 @@ class YARP_dev_API yarp::dev::IMotor
* @param val retrieved motor temperature
* @return true/false
*/
virtual bool getTemperature(int m, double *val)=0;
virtual yarp::os::yarp_ret_value getTemperature(int m, double *val)=0;

/**
* Get temperature of all the motors.
* @param vals pointer to an array containing all motor temperatures
* @return true/false
*/
virtual bool getTemperatures(double *vals)=0;
virtual yarp::os::yarp_ret_value getTemperatures(double *vals)=0;

/**
* Retreives the current temperature limit for a specific motor.
Expand Down
8 changes: 4 additions & 4 deletions src/libYARP_dev/src/yarp/dev/ImplementMotor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -67,10 +67,10 @@ bool ImplementMotor::getNumberOfMotors(int *num)
return true;
}

bool ImplementMotor::getTemperature(int m, double* value)
yarp::os::yarp_ret_value ImplementMotor::getTemperature(int m, double* value)
{
JOINTIDCHECK
bool ret;
yarp::os::yarp_ret_value ret;
int k=castToMapper(helper)->toHw(m);

ret=imotor->getTemperatureRaw(k, value);
Expand Down Expand Up @@ -122,11 +122,11 @@ bool ImplementMotor::setGearboxRatio(int m, const double value)
return ret;
}

bool ImplementMotor::getTemperatures(double *v)
yarp::os::yarp_ret_value ImplementMotor::getTemperatures(double *v)
{
yarp::dev::impl::Buffer<double> buffValues = doubleBuffManager->getBuffer();

bool ret = imotor->getTemperaturesRaw(buffValues.getData());
yarp::os::yarp_ret_value ret = imotor->getTemperaturesRaw(buffValues.getData());
for (size_t i=0; i< buffValues.getSize(); i++)
{
int k = castToMapper(helper)->toHw(i);
Expand Down
4 changes: 2 additions & 2 deletions src/libYARP_dev/src/yarp/dev/ImplementMotor.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,8 @@ class YARP_dev_API yarp::dev::ImplementMotor: public IMotor

bool getNumberOfMotors(int *num) override;

bool getTemperature (int m, double* val) override;
bool getTemperatures (double *vals) override;
yarp::os::yarp_ret_value getTemperature (int m, double* val) override;
yarp::os::yarp_ret_value getTemperatures (double *vals) override;
bool getTemperatureLimit (int m, double* val) override;
bool setTemperatureLimit (int m, const double val) override;
bool getGearboxRatio (int m, double* val) override;
Expand Down
2 changes: 2 additions & 0 deletions src/libYARP_os/src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@ set(YARP_os_HDRS
yarp/os/Random.h
yarp/os/ResourceFinder.h
yarp/os/ResourceFinderOptions.h
yarp/os/ReturnValue.h
yarp/os/RFModule.h
yarp/os/RFPlugin.h
yarp/os/RosNameSpace.h
Expand Down Expand Up @@ -210,6 +211,7 @@ set(YARP_os_SRCS
yarp/os/Random.cpp
yarp/os/ResourceFinder.cpp
yarp/os/ResourceFinderOptions.cpp
yarp/os/ReturnValue.cpp
yarp/os/RFModule.cpp
yarp/os/RFPlugin.cpp
yarp/os/RosNameSpace.cpp
Expand Down
1 change: 1 addition & 0 deletions src/libYARP_os/tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ target_sources(harness_os PRIVATE
PropertyTest.cpp
PublisherTest.cpp
ResourceFinderTest.cpp
ReturnValueTest.cpp
RFModuleTest.cpp
RouteTest.cpp
SemaphoreTest.cpp
Expand Down
101 changes: 101 additions & 0 deletions src/libYARP_os/tests/ReturnValueTest.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
/*
* SPDX-FileCopyrightText: 2023-2023 Istituto Italiano di Tecnologia (IIT)
* SPDX-License-Identifier: BSD-3-Clause
*/


#include <yarp/os/ReturnValue.h>

#include <catch2/catch_amalgamated.hpp>
#include <harness.h>

using namespace yarp::os;

TEST_CASE("os::ReturnValue", "[yarp::os]")
{
SECTION("test block 1")
{
yarp_ret_value val_f1(false);
yarp_ret_value val_f2(false);

yarp_ret_value val_t1(true);
yarp_ret_value val_t2(true);

CHECK(val_f1 == val_f2);
CHECK(val_t1 == val_t2);
CHECK(val_f1 != val_t1);
CHECK(val_t1);
CHECK(!val_f1);

std::string sf = val_f1.toString();
std::string st = val_t1.toString();
}

SECTION("test block 2")
{
yarp_ret_value val1;
CHECK(val1 == yarp_ret_value::return_code::return_value_unitialized);

std::string s;
val1 = yarp_ret_value::return_code::return_value_ok;
s = val1.toString();
CHECK(val1);
CHECK(s!="unknown");

val1 = yarp_ret_value::return_code::return_value_error_generic;
s = val1.toString();
CHECK(!val1);
CHECK(s != "unknown");

val1 = yarp_ret_value::return_code::return_value_error_method_failed;
s = val1.toString();
CHECK(!val1);
CHECK(s != "unknown");

val1 = yarp_ret_value::return_code::return_value_error_not_implemented_by_device;
s = val1.toString();
CHECK(!val1);
CHECK(s != "unknown");

val1 = yarp_ret_value::return_code::return_value_error_nws_nwc_communication_error;
s = val1.toString();
CHECK(!val1);
CHECK(s != "unknown");

val1 = yarp_ret_value::return_code::return_value_unitialized;
s = val1.toString();
CHECK(!val1);
CHECK(s != "unknown");
}

SECTION("test block 3")
{
yarp_ret_value val1;
val1 = yarp_ret_value::return_code::return_value_ok;
yarp_ret_value val2(val1);
CHECK(val2);
CHECK(val2 == yarp_ret_value::return_code::return_value_ok);

val1 = yarp_ret_value::return_code::return_value_error_method_failed;
yarp_ret_value val3 = val1;
CHECK(!val3);
CHECK(val3 == yarp_ret_value::return_code::return_value_error_method_failed);
}

SECTION("test block 4")
{
yarp_ret_value val_f1(false);
yarp_ret_value val_t1(true);
bool bool_f1 = val_f1;
bool bool_t1 = val_t1;
CHECK (bool_f1 == false);
CHECK (bool_t1 == true);

yarp_ret_value val_f2(yarp_ret_value::return_code::return_value_error_method_failed);
yarp_ret_value val_t2(yarp_ret_value::return_code::return_value_ok);
bool bool_f2 = val_f2;
bool bool_t2 = val_t2;
CHECK(bool_f2 == false);
CHECK(bool_t2 == true);
}
}

0 comments on commit d60a482

Please sign in to comment.