Skip to content

Commit 45b83c2

Browse files
authored
Merge pull request #3326 from randaz81/get_available
getAvailable: added new interface methods
2 parents 9f257dc + db88a02 commit 45b83c2

84 files changed

Lines changed: 4338 additions & 1983 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

bindings/yarp.i

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1242,20 +1242,20 @@ MAKE_COMMS (Map2DPath, yarp::dev::Nav2D::Map2DPath)
12421242
return buffer;
12431243
}
12441244

1245-
bool getControlModes(std::vector<int>& data) {
1246-
return self->getControlModes(&data[0]);
1245+
bool getControlModes(std::vector<yarp::dev::ControlModeEnum>& data) {
1246+
return self->getControlModes(data);
12471247
}
12481248

1249-
bool getControlModes(int n_joint, std::vector<int>& joints, std::vector<int>& data) {
1250-
return self->getControlModes(n_joint, &joints[0], &data[0]);
1249+
bool getControlModes(std::vector<int>& joints, std::vector<yarp::dev::ControlModeEnum>& data) {
1250+
return self->getControlModes(joints, data);
12511251
}
12521252

1253-
bool setControlModes(std::vector<int>& data) {
1254-
return self->setControlModes(&data[0]);
1253+
bool setControlModes(std::vector<yarp::dev::SelectableControlModeEnum>& data) {
1254+
return self->setControlModes(data);
12551255
}
12561256

1257-
bool setControlModes(int n_joint, std::vector<int>& joints, std::vector<int>& data) {
1258-
return self->setControlModes(n_joint, &joints[0], &data[0]);
1257+
bool setControlModes(std::vector<int>& joints, std::vector<yarp::dev::SelectableControlModeEnum>& data) {
1258+
return self->setControlModes(joints, data);
12591259
}
12601260
}
12611261

src/devices/controlBoardRemapper/ControlBoardRemapper.cpp

Lines changed: 65 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -478,25 +478,36 @@ void ControlBoardRemapper::configureBuffers()
478478
}
479479

480480

481-
bool ControlBoardRemapper::setControlModeAllAxes(const int cm)
482-
{
483-
std::lock_guard<std::mutex> lock(buffers.mutex);
484-
485-
for(int j=0; j < controlledJoints; j++)
486-
{
487-
buffers.controlBoardModes[j] = cm;
488-
}
489-
490-
return this->setControlModes(buffers.controlBoardModes.data());
491-
}
492-
493481
//////////////////////////////////////////////////////////////////////////////
494482
/// ControlBoard methods
495483
//////////////////////////////////////////////////////////////////////////////
496484

497485
//
498486
// IPid Interface
499487
//
488+
489+
ReturnValue ControlBoardRemapper::getAvailablePids(int j, std::vector<yarp::dev::PidControlTypeEnum>& avail)
490+
{
491+
int off=(int)remappedControlBoards.lut[j].axisIndexInSubControlBoard;
492+
size_t subIndex=remappedControlBoards.lut[j].subControlBoardIndex;
493+
494+
RemappedSubControlBoard *p=remappedControlBoards.getSubControlBoard(subIndex);
495+
if (!p) {
496+
return ReturnValue::return_code::return_value_error_generic;
497+
}
498+
499+
ReturnValue ok = ReturnValue_ok;
500+
501+
if (p->pid) {
502+
ok = p->pid->getAvailablePids(off, avail);
503+
}
504+
else {
505+
ok = ReturnValue::return_code::return_value_error_generic;
506+
}
507+
508+
return ok;
509+
}
510+
500511
ReturnValue ControlBoardRemapper::setPid(const PidControlTypeEnum& pidtype, int j, const Pid &p)
501512
{
502513
int off=(int)remappedControlBoards.lut[j].axisIndexInSubControlBoard;
@@ -2737,7 +2748,7 @@ ReturnValue ControlBoardRemapper::enableAmp(int j)
27372748

27382749
ReturnValue ControlBoardRemapper::disableAmp(int j)
27392750
{
2740-
return this->setControlMode(j, VOCAB_CM_IDLE);
2751+
return this->setControlMode(j, yarp::dev::SelectableControlModeEnum::VOCAB_CM_IDLE);
27412752
}
27422753

27432754
ReturnValue ControlBoardRemapper::getAmpStatus(int *st)
@@ -3739,7 +3750,29 @@ ReturnValue ControlBoardRemapper::getCurrentImpedanceLimit(int j, double *min_st
37393750
return ReturnValue::return_code::return_value_error_generic;
37403751
}
37413752

3742-
ReturnValue ControlBoardRemapper::getControlMode(int j, int *mode)
3753+
ReturnValue ControlBoardRemapper::getAvailableControlModes(int j, std::vector<yarp::dev::SelectableControlModeEnum>& avail)
3754+
{
3755+
int off=(int)remappedControlBoards.lut[j].axisIndexInSubControlBoard;
3756+
size_t subIndex=remappedControlBoards.lut[j].subControlBoardIndex;
3757+
3758+
RemappedSubControlBoard *p=remappedControlBoards.getSubControlBoard(subIndex);
3759+
if (!p) {
3760+
return ReturnValue::return_code::return_value_error_generic;
3761+
}
3762+
3763+
ReturnValue ok = ReturnValue_ok;
3764+
3765+
if (p->iMode) {
3766+
ok = p->iMode->getAvailableControlModes(off, avail);
3767+
}
3768+
else {
3769+
ok = ReturnValue::return_code::return_value_error_generic;
3770+
}
3771+
3772+
return ok;
3773+
}
3774+
3775+
ReturnValue ControlBoardRemapper::getControlMode(int j, yarp::dev::ControlModeEnum& mode)
37433776
{
37443777
int off=(int)remappedControlBoards.lut[j].axisIndexInSubControlBoard;
37453778
size_t subIndex=remappedControlBoards.lut[j].subControlBoardIndex;
@@ -3762,7 +3795,7 @@ ReturnValue ControlBoardRemapper::getControlMode(int j, int *mode)
37623795

37633796
}
37643797

3765-
ReturnValue ControlBoardRemapper::getControlModes(int *modes)
3798+
ReturnValue ControlBoardRemapper::getControlModes(std::vector<yarp::dev::ControlModeEnum>& modes)
37663799
{
37673800
ReturnValue ret=ReturnValue_ok;
37683801
std::lock_guard<std::mutex> lock(allJointsBuffers.mutex);
@@ -3775,9 +3808,8 @@ ReturnValue ControlBoardRemapper::getControlModes(int *modes)
37753808

37763809
if( p->iMode )
37773810
{
3778-
ok = p->iMode->getControlModes(allJointsBuffers.m_nJointsInSubControlBoard[ctrlBrd],
3779-
allJointsBuffers.m_jointsInSubControlBoard[ctrlBrd].data(),
3780-
allJointsBuffers.m_bufferForSubControlBoardControlModes[ctrlBrd].data());
3811+
ok = p->iMode->getControlModes( allJointsBuffers.m_jointsInSubControlBoard[ctrlBrd],
3812+
allJointsBuffers.m_bufferForSubControlBoardControlModesEnum[ctrlBrd]);
37813813
}
37823814
else
37833815
{
@@ -3787,19 +3819,19 @@ ReturnValue ControlBoardRemapper::getControlModes(int *modes)
37873819
ret = ret && ok;
37883820
}
37893821

3790-
allJointsBuffers.fillCompleteJointVectorFromSubControlBoardBuffers(modes,remappedControlBoards);
3822+
allJointsBuffers.fillCompleteJointVectorFromSubControlBoardBuffers(modes.data(),remappedControlBoards);
37913823

37923824
return ret;
37933825
}
37943826

37953827
// IControlMode interface
3796-
ReturnValue ControlBoardRemapper::getControlModes(const int n_joints, const int *joints, int *modes)
3828+
ReturnValue ControlBoardRemapper::getControlModes(std::vector<int> joints, std::vector<yarp::dev::ControlModeEnum>& modes)
37973829
{
37983830
ReturnValue ret=ReturnValue_ok;
37993831
std::lock_guard<std::mutex> lock(selectedJointsBuffers.mutex);
38003832

38013833
// Resize the input buffers
3802-
selectedJointsBuffers.resizeSubControlBoardBuffers(n_joints,joints,remappedControlBoards);
3834+
selectedJointsBuffers.resizeSubControlBoardBuffers(joints.size(),joints.data(),remappedControlBoards);
38033835

38043836
for(size_t ctrlBrd=0; ctrlBrd < remappedControlBoards.getNrOfSubControlBoards(); ctrlBrd++)
38053837
{
@@ -3809,9 +3841,8 @@ ReturnValue ControlBoardRemapper::getControlModes(const int n_joints, const int
38093841

38103842
if( p->iMode )
38113843
{
3812-
ok = p->iMode->getControlModes(selectedJointsBuffers.m_nJointsInSubControlBoard[ctrlBrd],
3813-
selectedJointsBuffers.m_jointsInSubControlBoard[ctrlBrd].data(),
3814-
selectedJointsBuffers.m_bufferForSubControlBoardControlModes[ctrlBrd].data());
3844+
ok = p->iMode->getControlModes( selectedJointsBuffers.m_jointsInSubControlBoard[ctrlBrd],
3845+
selectedJointsBuffers.m_bufferForSubControlBoardControlModesEnum[ctrlBrd]);
38153846
}
38163847
else
38173848
{
@@ -3821,12 +3852,12 @@ ReturnValue ControlBoardRemapper::getControlModes(const int n_joints, const int
38213852
ret = ret && ok;
38223853
}
38233854

3824-
selectedJointsBuffers.fillArbitraryJointVectorFromSubControlBoardBuffers(modes,n_joints,joints,remappedControlBoards);
3855+
selectedJointsBuffers.fillArbitraryJointVectorFromSubControlBoardBuffers(modes.data(),joints.size(),joints.data(),remappedControlBoards);
38253856

38263857
return ret;
38273858
}
38283859

3829-
ReturnValue ControlBoardRemapper::setControlMode(const int j, const int mode)
3860+
ReturnValue ControlBoardRemapper::setControlMode(int j, yarp::dev::SelectableControlModeEnum mode)
38303861
{
38313862
ReturnValue ret = ReturnValue_ok;
38323863

@@ -3852,22 +3883,21 @@ ReturnValue ControlBoardRemapper::setControlMode(const int j, const int mode)
38523883
return ret;
38533884
}
38543885

3855-
ReturnValue ControlBoardRemapper::setControlModes(const int n_joints, const int *joints, int *modes)
3886+
ReturnValue ControlBoardRemapper::setControlModes(std::vector<int> joints, std::vector<yarp::dev::SelectableControlModeEnum> modes)
38563887
{
38573888
ReturnValue ret=ReturnValue_ok;
38583889
std::lock_guard<std::mutex> lock(selectedJointsBuffers.mutex);
38593890

3860-
selectedJointsBuffers.fillSubControlBoardBuffersFromArbitraryJointVector(modes,n_joints,joints,remappedControlBoards);
3891+
selectedJointsBuffers.fillSubControlBoardBuffersFromArbitraryJointVector(modes.data(),joints.size(),joints.data(),remappedControlBoards);
38613892

38623893
for(size_t ctrlBrd=0; ctrlBrd < remappedControlBoards.getNrOfSubControlBoards(); ctrlBrd++)
38633894
{
38643895
RemappedSubControlBoard *p=remappedControlBoards.getSubControlBoard(ctrlBrd);
38653896

38663897
ReturnValue ok = ReturnValue_ok;
38673898
if (p->iMode) {
3868-
ok = p->iMode->setControlModes(selectedJointsBuffers.m_nJointsInSubControlBoard[ctrlBrd],
3869-
selectedJointsBuffers.m_jointsInSubControlBoard[ctrlBrd].data(),
3870-
selectedJointsBuffers.m_bufferForSubControlBoardControlModes[ctrlBrd].data());
3899+
ok = p->iMode->setControlModes( selectedJointsBuffers.m_jointsInSubControlBoard[ctrlBrd],
3900+
selectedJointsBuffers.m_bufferForSubControlBoardSelectableControlModesEnum[ctrlBrd]);
38713901
}
38723902
else {
38733903
ok = ReturnValue::return_code::return_value_error_generic;
@@ -3878,22 +3908,21 @@ ReturnValue ControlBoardRemapper::setControlModes(const int n_joints, const int
38783908
return ret;
38793909
}
38803910

3881-
ReturnValue ControlBoardRemapper::setControlModes(int *modes)
3911+
ReturnValue ControlBoardRemapper::setControlModes(std::vector<yarp::dev::SelectableControlModeEnum> modes)
38823912
{
38833913
ReturnValue ret=ReturnValue_ok;
38843914
std::lock_guard<std::mutex> lock(allJointsBuffers.mutex);
38853915

3886-
allJointsBuffers.fillSubControlBoardBuffersFromCompleteJointVector(modes,remappedControlBoards);
3916+
allJointsBuffers.fillSubControlBoardBuffersFromCompleteJointVector(modes.data(),remappedControlBoards);
38873917

38883918
for(size_t ctrlBrd=0; ctrlBrd < remappedControlBoards.getNrOfSubControlBoards(); ctrlBrd++)
38893919
{
38903920
RemappedSubControlBoard *p=remappedControlBoards.getSubControlBoard(ctrlBrd);
38913921

38923922
ReturnValue ok = ReturnValue_ok;
38933923
if (p->iMode) {
3894-
ok = p->iMode->setControlModes(allJointsBuffers.m_nJointsInSubControlBoard[ctrlBrd],
3895-
allJointsBuffers.m_jointsInSubControlBoard[ctrlBrd].data(),
3896-
allJointsBuffers.m_bufferForSubControlBoardControlModes[ctrlBrd].data());
3924+
ok = p->iMode->setControlModes(allJointsBuffers.m_jointsInSubControlBoard[ctrlBrd],
3925+
allJointsBuffers.m_bufferForSubControlBoardSelectableControlModesEnum[ctrlBrd]);
38973926
}
38983927
else {
38993928
ok = ReturnValue::return_code::return_value_error_generic;

src/devices/controlBoardRemapper/ControlBoardRemapper.h

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -167,13 +167,6 @@ class ControlBoardRemapper :
167167
*/
168168
bool attachAllUsingAxesNames(const yarp::dev::PolyDriverList &l);
169169

170-
/**
171-
* Helper for setting the same control mode in all the axes
172-
* of the controlboard.
173-
*/
174-
bool setControlModeAllAxes(const int cm);
175-
176-
177170
public:
178171
ControlBoardRemapper() = default;
179172
ControlBoardRemapper(const ControlBoardRemapper&) = delete;
@@ -207,6 +200,7 @@ class ControlBoardRemapper :
207200
bool attachAll(const yarp::dev::PolyDriverList &l) override;
208201

209202
/* IPidControl */
203+
yarp::dev::ReturnValue getAvailablePids(int j, std::vector<yarp::dev::PidControlTypeEnum>& avail) override;
210204
yarp::dev::ReturnValue setPid(const yarp::dev::PidControlTypeEnum& pidtype,int j, const yarp::dev::Pid &p) override;
211205
yarp::dev::ReturnValue setPids(const yarp::dev::PidControlTypeEnum& pidtype,const yarp::dev::Pid *ps) override;
212206
yarp::dev::ReturnValue setPidReference(const yarp::dev::PidControlTypeEnum& pidtype,int j, double ref) override;
@@ -378,14 +372,17 @@ class ControlBoardRemapper :
378372
yarp::dev::ReturnValue getImpedance(int j, double *stiff, double *damp) override;
379373
yarp::dev::ReturnValue getImpedanceOffset(int j, double *offset) override;
380374
yarp::dev::ReturnValue getCurrentImpedanceLimit(int j, double *min_stiff, double *max_stiff, double *min_damp, double *max_damp) override;
381-
yarp::dev::ReturnValue getControlMode(int j, int *mode) override;
382-
yarp::dev::ReturnValue getControlModes(int *modes) override;
383375

384376
// IControlMode interface
385-
yarp::dev::ReturnValue getControlModes(const int n_joint, const int *joints, int *modes) override;
386-
yarp::dev::ReturnValue setControlMode(const int j, const int mode) override;
387-
yarp::dev::ReturnValue setControlModes(const int n_joints, const int *joints, int *modes) override;
388-
yarp::dev::ReturnValue setControlModes(int *modes) override;
377+
yarp::dev::ReturnValue getAvailableControlModes(int j, std::vector<yarp::dev::SelectableControlModeEnum>& avail) override;
378+
yarp::dev::ReturnValue getControlMode(int j, yarp::dev::ControlModeEnum& mode) override;
379+
yarp::dev::ReturnValue getControlModes(std::vector<int> joints, std::vector<yarp::dev::ControlModeEnum>& modes) override;
380+
yarp::dev::ReturnValue getControlModes(std::vector<yarp::dev::ControlModeEnum>& mode) override;
381+
yarp::dev::ReturnValue setControlMode(int j, yarp::dev::SelectableControlModeEnum mode) override;
382+
yarp::dev::ReturnValue setControlModes(std::vector<int> joints, std::vector<yarp::dev::SelectableControlModeEnum> modes) override;
383+
yarp::dev::ReturnValue setControlModes(std::vector<yarp::dev::SelectableControlModeEnum> mode) override;
384+
385+
// IPositionDirect interface
389386
yarp::dev::ReturnValue setPosition(int j, double ref) override;
390387
yarp::dev::ReturnValue setPositions(const int n_joints, const int *joints, const double *dpos) override;
391388
yarp::dev::ReturnValue setPositions(const double *refs) override;

0 commit comments

Comments
 (0)