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 22, 2023
1 parent 1abe0a6 commit a410446
Show file tree
Hide file tree
Showing 14 changed files with 269 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
94 changes: 94 additions & 0 deletions src/libYARP_os/src/yarp/os/ReturnValue.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
/*
* SPDX-FileCopyrightText: 2023-2023 Istituto Italiano di Tecnologia (IIT)
* SPDX-License-Identifier: BSD-3-Clause
*/

#include <yarp/os/ReturnValue.h>

using namespace yarp::os;

yarp_ret_value::yarp_ret_value()
{
}

yarp_ret_value::yarp_ret_value(const bool& val)
{
if (val)
{
value_b = return_code::return_value_ok;
}
else
{
value_b = return_code::return_value_error_generic;
}
}

/*/yarp_ret_value::yarp_ret_value(const yarp_ret_value& other)
{
this->value_b=other.value_b;
}*/

yarp_ret_value& yarp_ret_value::operator&=(const yarp_ret_value& other)
{
if (other.operator bool() == true)
{
return *this;
}
else
{
value_b = return_code::return_value_error_generic;
}
return *this;
}

yarp_ret_value& yarp_ret_value::operator=(const bool& bool_val)
{
if (bool_val)
{
value_b = return_code::return_value_ok;
}
else
{
value_b = return_code::return_value_error_generic;
}
return *this;
}

std::string yarp_ret_value::toString()
{
switch (value_b)
{
case return_code::return_value_ok:
return std::string("ok");
case return_code::return_value_unitialized:
return std::string("return_value_unitialized");
case return_code::return_value_error_deprecated:
return std::string("return_value_error_deprecated");
case return_code::return_value_error_generic:
return std::string("return_value_error_generic");
case return_code::return_value_error_method_failed:
return std::string("return_value_error_method_fail");
case return_code::return_value_error_not_implemented_by_device:
return std::string("return_value_error_not_implemented_by_device");
case return_code::return_value_error_nws_nwc_communication_error:
return std::string("return_value_error_nws_nwc_communication_error");
default:
return std::string("unknown");
}
}

yarp_ret_value::operator bool() const
{
return value_b == return_code::return_value_ok;
}

yarp_ret_value::yarp_ret_value(return_code code)
{
value_b = code;
}

bool yarp_ret_value::operator == (const return_code& code) const
{
if (code == this->value_b) return true;
return false;
}
46 changes: 46 additions & 0 deletions src/libYARP_os/src/yarp/os/ReturnValue.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
/*
* SPDX-FileCopyrightText: 2006-2021 Istituto Italiano di Tecnologia (IIT)
* SPDX-FileCopyrightText: 2006-2010 RobotCub Consortium
* SPDX-License-Identifier: BSD-3-Clause
*/

#ifndef YARP_RET_VALUE_H
#define YARP_RET_VALUE_H

#include <yarp/os/api.h>
#include <string>

namespace yarp::os {

class YARP_os_API yarp_ret_value
{
public:
enum class YARP_os_API return_code
{
return_value_ok = 0,
return_value_error_generic = 1,
return_value_error_not_implemented_by_device = 2,
return_value_error_nws_nwc_communication_error = 3,
return_value_error_deprecated = 4,
return_value_error_method_failed = 5,
return_value_unitialized = 100
};

private:
return_code value_b = return_code::return_value_unitialized;

public:
yarp_ret_value();
yarp_ret_value(const bool& val);
yarp_ret_value(return_code code);
yarp_ret_value(const yarp_ret_value& other) = default;
yarp_ret_value& operator&=(const yarp_ret_value& other);
yarp_ret_value& operator=(const bool& bool_val);
bool operator == (const return_code& code) const;
std::string toString();
operator bool() const;
};

}

#endif // YARP_RET_VALUE_H
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
Loading

0 comments on commit a410446

Please sign in to comment.