Commit cd176710 authored by Sergi Hernandez's avatar Sergi Hernandez
Browse files

Added functions to get the value of the parameters.

parent 585eafb4
......@@ -3,6 +3,7 @@
#include <dynamic_reconfigure/Reconfigure.h>
#include <iri_ros_tools/module_service.h>
#include <map>
typedef enum {DYN_RECONF_NO_SUCH_PARAM,
DYN_RECONF_NO_CHANGE,
......@@ -35,6 +36,11 @@ class CModuleDynReconf : protected CModuleService<dynamic_reconfigure::Reconfigu
* sure the value has been changed correctly.
*/
bool bool_value;
/**
* \brief
*
*/
std::map<std::string,bool> bool_params;
/**
* \brief Integer value to change
*
......@@ -43,6 +49,11 @@ class CModuleDynReconf : protected CModuleService<dynamic_reconfigure::Reconfigu
* sure the value has been changed correctly.
*/
int int_value;
/**
* \brief
*
*/
std::map<std::string,int> int_params;
/**
* \brief String value to change
*
......@@ -51,6 +62,11 @@ class CModuleDynReconf : protected CModuleService<dynamic_reconfigure::Reconfigu
* sure the value has been changed correctly.
*/
std::string string_value;
/**
* \brief
*
*/
std::map<std::string,std::string> string_params;
/**
* \brief Double value to change
*
......@@ -59,12 +75,22 @@ class CModuleDynReconf : protected CModuleService<dynamic_reconfigure::Reconfigu
* sure the value has been changed correctly.
*/
double double_value;
/**
* \brief
*
*/
std::map<std::string,double> double_params;
/**
* \brief Status of the last service call
*
*
*/
dyn_reconf_status_t dyn_reconf_status;
/**
* \brief
*
*/
bool read_done;
protected:
/**
* \brief Service data check callback
......@@ -80,6 +106,16 @@ class CModuleDynReconf : protected CModuleService<dynamic_reconfigure::Reconfigu
*
*/
bool check_dyn_reconf(dynamic_reconfigure::Reconfigure &msg);
/**
* \brief
*
*/
bool check_always_true(dynamic_reconfigure::Reconfigure &msg);
/**
* \brief
*
*/
void read_params(void);
public:
/**
* \brief Constructor
......@@ -104,6 +140,11 @@ class CModuleDynReconf : protected CModuleService<dynamic_reconfigure::Reconfigu
* changed (true) or not (false)
*/
bool set_parameter(const std::string &name,bool value);
/**
* \brief
*
*/
bool get_parameter(const std::string &name,bool &value);
/**
* \brief Sets a parameter of type integer
*
......@@ -123,6 +164,11 @@ class CModuleDynReconf : protected CModuleService<dynamic_reconfigure::Reconfigu
* changed (true) or not (false)
*/
bool set_parameter(const std::string &name,int value);
/**
* \brief
*
*/
bool get_parameter(const std::string &name,int &value);
/**
* \brief Sets a parameter of type string
*
......@@ -142,6 +188,11 @@ class CModuleDynReconf : protected CModuleService<dynamic_reconfigure::Reconfigu
* changed (true) or not (false)
*/
bool set_parameter(const std::string &name,std::string &value);
/**
* \brief
*
*/
bool get_parameter(const std::string &name,std::string &value);
/**
* \brief Sets a parameter of type double
*
......@@ -161,6 +212,11 @@ class CModuleDynReconf : protected CModuleService<dynamic_reconfigure::Reconfigu
* changed (true) or not (false)
*/
bool set_parameter(const std::string &name,double value);
/**
* \brief
*
*/
bool get_parameter(const std::string &name,double &value);
/**
* \brief returns the las call status
*
......@@ -183,6 +239,8 @@ CModuleDynReconf<dyn_reconf_config>::CModuleDynReconf(const std::string &name,co
this->dyn_reconf_status=DYN_RECONF_SUCCESSFULL;
this->set_max_num_retries(1);
this->set_call_check_function(boost::bind(&CModuleDynReconf::check_dyn_reconf,this,_1));
this->read_done=false;
this->read_params();
}
template<class dyn_reconf_config>
......@@ -259,6 +317,37 @@ bool CModuleDynReconf<dyn_reconf_config>::check_dyn_reconf(dynamic_reconfigure::
return false;
}
template<class dyn_reconf_config>
bool CModuleDynReconf<dyn_reconf_config>::check_always_true(dynamic_reconfigure::Reconfigure &msg)
{
return true;
}
template<class dyn_reconf_config>
void CModuleDynReconf<dyn_reconf_config>::read_params(void)
{
dynamic_reconfigure::Reconfigure set_params_srv;
unsigned int i=0;
this->set_call_check_function(boost::bind(&CModuleDynReconf::check_always_true,this,_1));
// make an empty service call to get the current values
if(this->call(set_params_srv)==ACT_SRV_SUCCESS)
{
for(i=0;i<set_params_srv.response.config.bools.size();i++)
this->bool_params[set_params_srv.response.config.bools[i].name]=set_params_srv.response.config.bools[i].value;
for(i=0;i<set_params_srv.response.config.ints.size();i++)
this->bool_params[set_params_srv.response.config.ints[i].name]=set_params_srv.response.config.ints[i].value;
for(i=0;i<set_params_srv.response.config.strs.size();i++)
this->bool_params[set_params_srv.response.config.strs[i].name]=set_params_srv.response.config.strs[i].value;
for(i=0;i<set_params_srv.response.config.doubles.size();i++)
this->bool_params[set_params_srv.response.config.doubles[i].name]=set_params_srv.response.config.doubles[i].value;
this->read_done=true;
}
else
this->read_done=false;
this->set_call_check_function(boost::bind(&CModuleDynReconf::check_dyn_reconf,this,_1));
}
template<class dyn_reconf_config>
bool CModuleDynReconf<dyn_reconf_config>::set_parameter(const std::string &name,bool value)
{
......@@ -267,6 +356,8 @@ bool CModuleDynReconf<dyn_reconf_config>::set_parameter(const std::string &name,
ROS_DEBUG_STREAM("CModuleDynReconf::set_parameter: Sending new request on service " << this->get_name());
ROS_DEBUG_STREAM("CModuleDynReconf::set boolean parameter " << name << " to " << value);
if(!this->read_done)
this->read_params();
set_params_srv.request.config.bools.resize(1);
set_params_srv.request.config.bools[0].name=name;
set_params_srv.request.config.bools[0].value=value;
......@@ -275,6 +366,7 @@ bool CModuleDynReconf<dyn_reconf_config>::set_parameter(const std::string &name,
switch(this->call(set_params_srv))
{
case ACT_SRV_SUCCESS: ROS_DEBUG_STREAM("CModule::set_parameters: Request successfull on server: " << this->get_name());
this->bool_params[name]=set_params_srv.response.config.bools[0].value;
return true;
break;
case ACT_SRV_PENDING:
......@@ -285,6 +377,18 @@ bool CModuleDynReconf<dyn_reconf_config>::set_parameter(const std::string &name,
}
}
template<class dyn_reconf_config>
bool CModuleDynReconf<dyn_reconf_config>::get_parameter(const std::string &name,bool &value)
{
if(this->bool_params.find(name)!=this->bool_params.end())
{
value=this->bool_params[name];
return true;
}
else
return false;
}
template<class dyn_reconf_config>
bool CModuleDynReconf<dyn_reconf_config>::set_parameter(const std::string &name,int value)
{
......@@ -293,6 +397,8 @@ bool CModuleDynReconf<dyn_reconf_config>::set_parameter(const std::string &name,
ROS_DEBUG_STREAM("CModuleDynReconf::set_parameter: Sending new request on service " << this->get_name());
ROS_DEBUG_STREAM("CModule::set integer parameter " << name << " to " << value);
if(!this->read_done)
this->read_params();
set_params_srv.request.config.ints.resize(1);
set_params_srv.request.config.ints[0].name=name;
set_params_srv.request.config.ints[0].value=value;
......@@ -301,6 +407,7 @@ bool CModuleDynReconf<dyn_reconf_config>::set_parameter(const std::string &name,
switch(this->call(set_params_srv))
{
case ACT_SRV_SUCCESS: ROS_DEBUG_STREAM("CModule::set_parameters: Request successfull on server: " << this->get_name());
this->int_params[name]=set_params_srv.response.config.ints[0].value;
return true;
break;
case ACT_SRV_PENDING:
......@@ -311,6 +418,18 @@ bool CModuleDynReconf<dyn_reconf_config>::set_parameter(const std::string &name,
}
}
template<class dyn_reconf_config>
bool CModuleDynReconf<dyn_reconf_config>::get_parameter(const std::string &name,int &value)
{
if(this->int_params.find(name)!=this->int_params.end())
{
value=this->int_params[name];
return true;
}
else
return false;
}
template<class dyn_reconf_config>
bool CModuleDynReconf<dyn_reconf_config>::set_parameter(const std::string &name,std::string &value)
{
......@@ -319,6 +438,8 @@ bool CModuleDynReconf<dyn_reconf_config>::set_parameter(const std::string &name,
ROS_DEBUG_STREAM("CModuleDynReconf::set_parameter: Sending new request on service " << this->get_name());
ROS_DEBUG_STREAM("CModuleDynReconf::set string parameter " << name << " to " << value);
if(!this->read_done)
this->read_params();
set_params_srv.request.config.strs.resize(1);
set_params_srv.request.config.strs[0].name=name;
set_params_srv.request.config.strs[0].value=value;
......@@ -327,6 +448,7 @@ bool CModuleDynReconf<dyn_reconf_config>::set_parameter(const std::string &name,
switch(this->call(set_params_srv))
{
case ACT_SRV_SUCCESS: ROS_DEBUG_STREAM("CModule::set_parameters: Request successfull on server: " << this->get_name());
this->string_params[name]=set_params_srv.response.config.strs[0].value;
return true;
break;
case ACT_SRV_PENDING:
......@@ -337,6 +459,18 @@ bool CModuleDynReconf<dyn_reconf_config>::set_parameter(const std::string &name,
}
}
template<class dyn_reconf_config>
bool CModuleDynReconf<dyn_reconf_config>::get_parameter(const std::string &name,std::string &value)
{
if(this->string_params.find(name)!=this->string_params.end())
{
value=this->string_params[name];
return true;
}
else
return false;
}
template<class dyn_reconf_config>
bool CModuleDynReconf<dyn_reconf_config>::set_parameter(const std::string &name,double value)
{
......@@ -345,6 +479,8 @@ bool CModuleDynReconf<dyn_reconf_config>::set_parameter(const std::string &name,
ROS_DEBUG_STREAM("CModule::set_parameter: Sending new request on service " << this->get_name());
ROS_DEBUG_STREAM("CModule::set double parameter " << name << " to " << value);
if(!this->read_done)
this->read_params();
set_params_srv.request.config.doubles.resize(1);
set_params_srv.request.config.doubles[0].name=name;
set_params_srv.request.config.doubles[0].value=value;
......@@ -353,6 +489,7 @@ bool CModuleDynReconf<dyn_reconf_config>::set_parameter(const std::string &name,
switch(this->call(set_params_srv))
{
case ACT_SRV_SUCCESS: ROS_DEBUG_STREAM("CModule::set_parameters: Request successfull on server: " << this->get_name());
this->double_params[name]=set_params_srv.response.config.doubles[0].value;
return true;
break;
case ACT_SRV_PENDING:
......@@ -363,6 +500,18 @@ bool CModuleDynReconf<dyn_reconf_config>::set_parameter(const std::string &name,
}
}
template<class dyn_reconf_config>
bool CModuleDynReconf<dyn_reconf_config>::get_parameter(const std::string &name,double &value)
{
if(this->double_params.find(name)!=this->double_params.end())
{
value=this->double_params[name];
return true;
}
else
return false;
}
template<class dyn_reconf_config>
dyn_reconf_status_t CModuleDynReconf<dyn_reconf_config>::get_status(void)
{
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment