Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • cs/ds/axisg2selector
1 result
Show changes
Commits on Source (8)
.gitignore
MYNOTES.txt
MSG.txt
README.txt
src.tgz
.nse_depinfo
bin/
obj/
......@@ -14,6 +14,7 @@ EXTRAFLAGS =
#CXXFLAGS += -D_DBG_UPDATER_STATE_INVALID
#CXXFLAGS += -D_DBG_WRITE_DYN_POSITION
#CXXFLAGS += -D_DBG_PARSE_TARGETS
CXXFLAGS += -D_DBG_PARSE_SEQ_TARGETS
#CXXFLAGS += -D_DBG_TARGET_UPDATE
#CXXFLAGS += -D_DBG_TARGET_GO_ALL
#CXXFLAGS += -D_DBG_TARGET_UPDATE_STATE
......@@ -28,6 +29,8 @@ EXTRAFLAGS =
#CXXFLAGS += -D_DBG_TFSM
#CXXFLAGS += -D_DBG_TFSM_ADDCMDS
CXXFLAGS += -D_DBG_THREAD
#CXXFLAGS += -D_DBG_GETTPOS
#CXXFLAGS += -D_DBG_BUG01_ON_T932
......
......@@ -927,7 +927,7 @@ void AxisG2Selector::write_Instrument(Tango::WAttribute &attr)
if ( (*tit).name().compare(w_val) == 0 ) {
if ( Selector_new_val != i ){
Selector_new_val = i;
fsm->fsm(FSMT_GOTO, (*trgs_in_use)[Selector_new_val], MODE_ALL);
fsm->fsm(FSMT_GOTO, (*trgs_in_use)[Selector_new_val]);
}
break;
}
......@@ -999,7 +999,7 @@ void AxisG2Selector::write_Selector(Tango::WAttribute &attr)
}
if ( *attr_Selector_read != (int) w_val ){
fsm->fsm(FSMT_GOTO, (*trgs_in_use)[w_val], MODE_ALL);
fsm->fsm(FSMT_GOTO, (*trgs_in_use)[w_val]);
}
......@@ -1356,7 +1356,8 @@ void AxisG2Selector::read_TrajectoryFSM(Tango::Attribute &attr)
Target fake;
fsm->fsm(FSMT_NOP, fake, MODE_NULL);
fake.mode(MODE_NULL);
fsm->fsm(FSMT_NOP, fake);
vector<source_state_dval_t>::iterator svit;
for (svit = sources_val.begin(); svit != sources_val.end(); ++svit){
......@@ -1369,7 +1370,8 @@ void AxisG2Selector::read_TrajectoryFSM(Tango::Attribute &attr)
((get_state() == Tango::ALARM) && ((fsm->state() != FSM_WAIT)&&(fsm->state() != FSM_START)))
){
Target fake;
fsm->fsm(FSMT_ABORT, fake, MODE_NULL);
fake.mode(MODE_NULL);
fsm->fsm(FSMT_ABORT, fake);
Selector_new_val = -1;
return;
}
......@@ -2075,7 +2077,8 @@ void AxisG2Selector::stop()
#endif
Target fake;
fsm->fsm(FSMT_ABORT, fake, MODE_NULL);
fake.mode(MODE_NULL);
fsm->fsm(FSMT_ABORT, fake);
Selector_new_val = -1;
if (attr_Instrument_Selector_quality == Tango::ATTR_INVALID) tfsm->clear();
......
......@@ -42,11 +42,11 @@
#include "Types.h"
#include "Targets.h"
#include <math.h>
#include "FSM.h"
#include "TFSM.h"
#include <math.h>
#include "CombineState.h"
#ifdef HAVE_SAFETYMANAGER
......@@ -57,6 +57,8 @@
#include "History.h"
#include "SeqMoveThreadErrors.h"
// MYCODE-END
......@@ -73,6 +75,7 @@ namespace AxisG2Selector_ns
/*----- PROTECTED REGION ID(AxisG2Selector::Additional Class Declarations) ENABLED START -----*/
// Additional Class Declarations
class SeqMoveThread;
/*----- PROTECTED REGION END -----*/ // AxisG2Selector::Additional Class Declarations
......@@ -111,6 +114,7 @@ friend class TFSM;
History_ns::history* hist;
// MYCODE-END
......
......@@ -15,7 +15,7 @@ TrajectoryFSM::~TrajectoryFSM(){
}
void TrajectoryFSM::fsm(TrajectoryFSMTransitions_t tr, Target trg, TrajectoryMode_t mode){ // proceed with FSM
void TrajectoryFSM::fsm(TrajectoryFSMTransitions_t tr, Target trg){ // proceed with FSM
bool retval = false;
......@@ -85,10 +85,14 @@ void TrajectoryFSM::fsm(TrajectoryFSMTransitions_t tr, Target trg, TrajectoryMo
case FSMT_GOTO:
switch (_state){
case FSM_WAIT:
if (mode == MODE_ALL) {
if (trg.mode() == MODE_ALL) {
_working_trg.go_all(_dev->sources, _dev->sources_val);
_state = FSM_START;
}
if (trg.mode() == MODE_SEQ) {
_working_trg.go_seq(_dev->sources, _dev->sources_val);
_state = FSM_START;
}
break;
case FSM_START:
_state = FSM_WAIT_TARGET;
......@@ -109,6 +113,7 @@ void TrajectoryFSM::fsm(TrajectoryFSMTransitions_t tr, Target trg, TrajectoryMo
_state = FSM_WAIT;
_tr = FSMT_NOP;
_cnt = 0;
_working_trg.stop();
break;
default:
break;
......
#ifndef __FSM_H__
#define __FSM_H__
namespace AxisG2Selector_ns
{
#include "Types.h"
#include "Targets.h"
//include "AxisG2Selector.h"
namespace AxisG2Selector_ns
{
class AxisG2Selector;
......@@ -52,11 +48,6 @@ const char * const TrajectoryFSMTransitions[] = {
"FSMT_AXISINIT: sources axis init"
};
typedef enum {
MODE_NULL,
MODE_ALL
} TrajectoryMode_t;
class TrajectoryFSM {
......@@ -72,7 +63,7 @@ public:
TrajectoryFSM(AxisG2Selector * dev);
~TrajectoryFSM();
void fsm(TrajectoryFSMTransitions_t tr, Target trg, TrajectoryMode_t mode); // proceed with FSM
void fsm(TrajectoryFSMTransitions_t tr, Target trg); // proceed with FSM
void init() { _state = FSM_WAIT; _tr = FSMT_NOP; };
TrajectoryFSM_t state() { return _state; };
string status() { switch(_state){
......@@ -101,5 +92,6 @@ public:
};
} //namespace
#endif /* __FSM_H__ */
......@@ -15,6 +15,10 @@ bool AxisG2Selector::parseTargets(vector<string>& targets, vector<Target>& trgs
// nickName non puo` essere ripetuto
// nickName deve essere presente in AxisDevices
// Con le sequenze:
// TargetName;TargetStatus;nickName:positionValue:positionDelta[;nickName:positionValue:positionDelta][{nickName:positionValue:positionDelta[;nickName:positionValue:positionDelta]}]
// vector<string> targets;
// typedef struct {
......@@ -32,8 +36,42 @@ bool AxisG2Selector::parseTargets(vector<string>& targets, vector<Target>& trgs
vector<string> a, sts;
Target trg;
target_source_t ts;
bool sequence_f = false;
string trg_conf("");
string seq_conf("");
for (size_t j=0; j<targets.size(); j++ ){
a = splitby(targets[j].c_str(), ';');
trg_conf = targets[j];
size_t found;
found = targets[j].find_first_of("{");
if (found != string::npos ) { // FOUND START SEQUENCE
#ifdef _DBG_PARSE_SEQ_TARGETS
std::cout << __func__ << "()@" << __FILE__ << ":" << __LINE__ << " :: FOUND START SEQUENCE" << std::endl;
#endif
trg_conf = targets[j].substr(0, found);
string reminder = targets[j].substr(found+1); // exclude "{"
found = reminder.find_last_of("}");
if (found != string::npos ) { // FOUND END SEQUENCE
seq_conf = reminder.substr(0, found); // exclude "}"
sequence_f = true;
trg.mode(MODE_SEQ);
#ifdef _DBG_PARSE_SEQ_TARGETS
std::cout << __func__ << "()@" << __FILE__ << ":" << __LINE__ << " :: FOUND END SEQUENCE" << std::endl;
std::cout << __func__ << "()@" << __FILE__ << ":" << __LINE__ << " :: SEQUENCE=|" << seq_conf << "|" << std::endl;
#endif
}
} else {
sequence_f = false;
//
// default: MODE_ALL
//
trg.mode(MODE_ALL);
trg_conf = targets[j];
}
//
// "usual" part of target...
//
a = splitby(trg_conf.c_str(), ';');
if (a.size() >= 1 ) trg.name(a[0]);
if (a.size() >= 2 ) trg.stateOnTarget(a[1]);
......@@ -74,9 +112,56 @@ bool AxisG2Selector::parseTargets(vector<string>& targets, vector<Target>& trgs
}
b += 1;
}
//
// "sequence" part of target...
//
if (sequence_f){
#ifdef _DBG_PARSE_SEQ_TARGETS
std::cout << __func__ << "()@" << __FILE__ << ":" << __LINE__ << " :: SEQUENCE=|" << seq_conf << "| at target: " << trg.name() << std::endl;
#endif
a = splitby(seq_conf.c_str(), ';');
for (b = 0; b < a.size(); b++){
#ifdef _DBG_PARSE_SEQ_TARGETS
std::cout << __func__ << "()@" << __FILE__ << ":" << __LINE__ << " :: SEQUENCE ... ";
cout << "Searching: ";
cout << a[b];
cout << endl;
#endif /* _DBG_PARSE_SEQ_TARGETS */
sts = splitby(a[b].c_str(), ':');
if ( sts.size()== 3 ){
mit = nick2idx.find(sts[0]);
if (mit != nick2idx.end()){
#ifdef _DBG_PARSE_SEQ_TARGETS
std::cout << __func__ << "()@" << __FILE__ << ":" << __LINE__ << " :: SEQUENCE ... ";
cout << "Found! " << sts[0] << endl;
#endif /* _DBG_PARSE_SEQ_TARGETS */
source_found = true;
ts.source_idx = nick2idx[sts[0]];
ts.positionValue = (double)atof(sts[1].c_str());
ts.positionDelta = (double)atof(sts[2].c_str());
trg.push_trg_src_seq(ts);
} else {
#ifdef _DBG_PARSE_SEQ_TARGETS
std::cout << __func__ << "()@" << __FILE__ << ":" << __LINE__ << " :: SEQUENCE ... ";
cout << "NOT Found! " << sts[0] << endl;
#endif /* _DBG_PARSE_SEQ_TARGETS */
source_found = false;
}
}
}
}
if (source_found) trgs.push_back(trg);
else return false;
trg.clear_trg_src();
trg.clear_trg_src_seq();
};
#ifdef _DBG_PARSE_TARGETS
......
#include <cmath>
#include "SeqMoveThread.h"
#undef _FUNC
namespace AxisG2Selector_ns {
void SeqMoveThread::run(void *) {
#ifdef _DBG_THREAD
cout << "SeqMoveThread::run()" << endl;
#endif
_trgp->th_err.th_err = TH_RUNNING;
Tango::DeviceAttribute da;
while (_go_on) {
#ifdef _DBG_THREAD
cout << "SeqMoveThread::while(" << (_go_on?"true":"false") << ")" << endl;
#endif
for (vector<target_source_t>::iterator tsit=_trgp->_trgSrcSeq.begin(); tsit != _trgp->_trgSrcSeq.end(); ++tsit){
if ( (_sources[(*tsit).source_idx].configured) ){
Tango::DeviceAttribute da;
double w_val = (*tsit).positionValue;
#ifdef _DBG_PARSE_SEQ_TARGETS
cout << "Target::go_seq(): SET " << _sources[(*tsit).source_idx].dev << " " << _sources[(*tsit).source_idx].attr << " = " << w_val << endl;
#endif /* _DBG_PARSE_SEQ_TARGETS */
// already on pos?
#ifdef _DBG_THREAD
cout << " ----------------------- " << endl;
cout << "source_idx: " << (*tsit).source_idx << endl;
cout << "positionValue: " << (*tsit).positionValue << endl;
cout << "positionDelta: " << (*tsit).positionDelta << endl;
cout << endl;
cout << "source_idx: " << _sources_val[(*tsit).source_idx].source_idx << endl;
cout << "val: " << _sources_val[(*tsit).source_idx].val << endl;
#endif /* _DBG_TARGET_UPDATE */
//if ( (*svit).quality == Tango::ATTR_INVALID ) ont=_on_target = false;
#if 1
if ( fabs((*tsit).positionValue - (_sources_val[(*tsit).source_idx].val)) > (*tsit).positionDelta ) {
try {
da.set_name(_sources[(*tsit).source_idx].attr);
switch (_sources[(*tsit).source_idx].data_type){
case Tango::DEV_FLOAT: break;
case Tango::DEV_DOUBLE: { double double_val = (double)w_val; da << double_val; }; break;
case Tango::DEV_LONG: { Tango::DevLong long_val = (Tango::DevLong)w_val; da << long_val; }; break;
case Tango::DEV_USHORT: { unsigned short us_val = (unsigned short)w_val; da << us_val; }; break;
case Tango::DEV_SHORT: { short short_val = (short)w_val; da << short_val; }; break;
default: cout << "Not implemented attr_type= "<< Tango::CmdArgTypeName[_sources[(*tsit).source_idx].data_type];
}
_sources[(*tsit).source_idx].dp->write_attribute(da);
} catch(...) {
string ss(ag2s_error_str(AG2S_E004));
ss.append(" : exception on Tango::DeviceProxy(" + _sources[(*tsit).source_idx].dev + ")!");
cout << ss << endl;
//append_status(ss, true);
}
// wait....
#if 0
#ifdef _DBG_PARSE_SEQ_TARGETS
cout << "Target::go_seq(): " << _sources[(*tsit).source_idx].dev << " ";
cout << _sources[(*tsit).source_idx].dp->status() << " ... before sleep...." << endl;
#endif
usleep(100*1000);
while (_sources[(*tsit).source_idx].dp->state() == Tango::MOVING) {
#if 1
#ifdef _DBG_PARSE_SEQ_TARGETS
cout << "Target::go_seq(): " << _sources[(*tsit).source_idx].dev << " ";
cout << _sources[(*tsit).source_idx].dp->status() << " ... sleep...." << endl;
#endif /* _DBG_PARSE_SEQ_TARGETS */
#endif
usleep(10*1000);
}
#else
do {
while ( fabs((*tsit).positionValue - (_sources_val[(*tsit).source_idx].val)) > (*tsit).positionDelta ) {
#ifdef _DBG_THREAD
cout << "Target::go_seq(): while pos: ";
cout << "fabs() =" << fabs((*tsit).positionValue - (_sources_val[(*tsit).source_idx].val)) << " ";
cout << "delta =" << (*tsit).positionDelta;
cout << endl;
#endif
usleep(100*1000);
update_pos((*tsit).source_idx);
}
#ifdef _DBG_THREAD
cout << "Target::go_seq(): while MOVING" << endl;
#endif
usleep(100*1000);
} while (_sources[(*tsit).source_idx].dp->state() == Tango::MOVING);
#endif
}
#else
cout << "NO SEQ MOVE !!!" << endl;
#endif
} // if ( configured )
} // for ( _trgSrcSeq )
_trgp->th_err.th_err = TH_EXIT_OK;
_go_on = false;
exit();
};
_trgp->th_err.th_err = TH_FORCEDEXIT;
_go_on = false;
}
void SeqMoveThread::update_pos(int tsit_source_idx){
Tango::DeviceAttribute attr = _sources[tsit_source_idx].dp->read_attribute(_sources[tsit_source_idx].attr);
switch (_sources[tsit_source_idx].data_type){
case Tango::DEV_FLOAT: float float_val; attr >> float_val; _sources_val[tsit_source_idx].val = (double)float_val ; break;
case Tango::DEV_DOUBLE: double double_val; attr >> double_val; _sources_val[tsit_source_idx].val = (double)double_val; break;
case Tango::DEV_LONG: long long_val; attr >> long_val; _sources_val[tsit_source_idx].val = (double)long_val; break;
case Tango::DEV_USHORT: unsigned short us_val; attr >> us_val; _sources_val[tsit_source_idx].val = (double)us_val; break;
case Tango::DEV_SHORT: short s_val; attr >> s_val; _sources_val[tsit_source_idx].val = (double)s_val; break;
case Tango::DATA_TYPE_UNKNOWN:
#if 0
cout << "Unknown attr_type!" << endl;
#endif
Tango::Except::throw_exception(
"Empty/UnknownDeviceAttribute",
"cannot extract, no data in DeviceAttribute object ",
"DeviceAttribute::is_empty"
);
break;
default:
{
if (_sources[tsit_source_idx].data_type <= Tango::DEVVAR_STATEARRAY)
cout << "Not implemented attr_type= "<< Tango::CmdArgTypeName[_sources[tsit_source_idx].data_type] << endl;
else
cout << "Unknown attr_type!" << endl;
throw;
};
break;
}
}
} //namespace
#ifndef SEQMOVETHREAD_H_
#define SEQMOVETHREAD_H_
#include <omnithread.h>
#include <tango.h>
#include <iostream>
#include "AxisG2Selector.h"
namespace AxisG2Selector_ns
{
class SeqMoveThread : public omni_thread {
public:
SeqMoveThread(Target* trgp, vector<sourceDev2_t> &sources, vector<source_state_dval_t> &sources_val) :
_trgp(trgp),
_go_on(true),
_sources(sources),
_sources_val(sources_val) {
#ifdef _DBG_THREAD
cout << "SeqMoveThread()"<< endl;
#endif
}
virtual ~SeqMoveThread() {
#ifdef _DBG_THREAD
cout << "~SeqMoveThread()" << endl;
#endif
}
void abort(void) { _go_on = false;}
protected:
void run(void *);
void update_pos(int tsit_source_idx);
private:
Target* _trgp;
bool _go_on;
vector<sourceDev2_t> _sources;
vector<source_state_dval_t> _sources_val;
};
}
#endif /* SEQMOVETHREAD_H_ */
#ifndef _SEQERRORS_H_
#define _SEQERRORS_H_
typedef enum {
TH_FORCEDEXIT = -5,
TH_ASKABORT = -4,
TH_NOTHREAD = -3,
TH_THREAD = -2,
TH_RUNNING = -1,
TH_EXIT_OK = 0
} th_err_value_t;
typedef struct {
th_err_value_t th_err;
string th_desc;
} th_err_t;
inline string th_error(th_err_t e){
switch (e.th_err){
case TH_FORCEDEXIT: return "Forced exit in thread"; break;
case TH_ASKABORT: return "Ask thread to abort"; break;
case TH_NOTHREAD: return "No thread"; break;
case TH_THREAD: return "Thread present"; break;
case TH_RUNNING: return "Thread running"; break;
case TH_EXIT_OK: return "Thread exit success"; break;
default: return "-?-"; break;
}
return "Undef!";
}
#endif /* _SEQERRORS_H_ */
#include <AxisG2Selector.h>
#include "AxisG2Selector.h"
#define STRINGSIZE 128
......
......@@ -118,35 +118,25 @@ bool Target::updateState(vector<sourceDev2_t> &sources){
cout << "______ ";
cout << sources[(*tsit).source_idx].nickName << " : " << Tango::DevStateName[ns] << endl;
#endif /* _DBG_TARGET_UPDATE_STATE */
#if 0
#if 0
s = combineState(s, ns);
#else
switch(ns){
case Tango::FAULT:
case Tango::ALARM:
case Tango::DISABLE:
case Tango::MOVING:
s = ns;
break;
case Tango::OFF:
case Tango::ON:
case Tango::CLOSE:
case Tango::OPEN:
case Tango::INSERT:
case Tango::EXTRACT:
case Tango::STANDBY:
case Tango::INIT:
case Tango::RUNNING:
case Tango::UNKNOWN:
break;
}
#endif
#else /* 0 primo */
s = table[ns][s];
#endif /* 0 primo */
}
}
if (moving_thread != NULL) {
switch (th_err.th_err){
default:
case TH_FORCEDEXIT:
case TH_ASKABORT:
case TH_NOTHREAD:
case TH_THREAD:
case TH_EXIT_OK:
break;
case TH_RUNNING:
s = Tango::MOVING;
break;
}
}
_state = s;
#ifdef _DBG_TARGET_UPDATE_STATE
......@@ -212,7 +202,95 @@ bool Target::stop(vector<sourceDev2_t> &sources){
return true;
}
bool Target::go_seq(vector<sourceDev2_t> &sources, vector<source_state_dval_t> &sources_val){
// anche nella go_all: sources_val NON sono usati!
#ifdef _DBG_PARSE_SEQ_TARGETS
std::cout << __func__ << "()@" << __FILE__ << ":" << __LINE__ << " :: begin" << std::endl;
#endif
#if 0
for (vector<target_source_t>::iterator tsit=_trgSrcSeq.begin(); tsit != _trgSrcSeq.end(); ++tsit){
Tango::DeviceAttribute da;
double w_val = (*tsit).positionValue;
if ( (sources[(*tsit).source_idx].configured) ){
#ifdef _DBG_PARSE_SEQ_TARGETS
cout << "Target::go_seq(): " << sources[(*tsit).source_idx].dev << " " << sources[(*tsit).source_idx].attr << " < " << w_val << endl;
#endif /* _DBG_PARSE_SEQ_TARGETS */
try {
da.set_name(sources[(*tsit).source_idx].attr);
switch (sources[(*tsit).source_idx].data_type){
case Tango::DEV_FLOAT: break;
case Tango::DEV_DOUBLE: { double double_val = (double)w_val; da << double_val; }; break;
case Tango::DEV_LONG: { Tango::DevLong long_val = (Tango::DevLong)w_val; da << long_val; }; break;
case Tango::DEV_USHORT: { unsigned short us_val = (unsigned short)w_val; da << us_val; }; break;
case Tango::DEV_SHORT: { short short_val = (short)w_val; da << short_val; }; break;
default: cout << "Not implemented attr_type= "<< Tango::CmdArgTypeName[sources[(*tsit).source_idx].data_type];
}
sources[(*tsit).source_idx].dp->write_attribute(da);
} catch(...) {
string ss(ag2s_error_str(AG2S_E004));
ss.append(" : exception on Tango::DeviceProxy(" + sources[(*tsit).source_idx].dev + ")!");
cout << ss << endl;
//append_status(ss, true);
}
}
}
#else
if (moving_thread != NULL) {
#ifdef _DBG_PARSE_SEQ_TARGETS
std::cout << __func__ << "()@" << __FILE__ << ":" << __LINE__ << " :: going to kill moving_thread " << std::endl;
#endif
moving_thread->abort();
}
th_err.th_err = TH_NOTHREAD;
th_err.th_desc.clear();
try {
moving_thread = new SeqMoveThread(this, sources, sources_val);
} catch (...) {
cout << "ERROR in new moving_thread! " << endl;
moving_thread = NULL;
}
th_err.th_err = TH_THREAD;
try {
if (moving_thread!=NULL) {
moving_thread->start();
status_msg = "Moving sequence in progress...";
#ifdef _DBG_PARSE_SEQ_TARGETS
std::cout << __func__ << "()@" << __FILE__ << ":" << __LINE__ << " :: " << status_msg << std::endl;
#endif
}
} catch (...) {
cout << "ERROR in moving_thread.start()! " << endl;
}
#endif
#ifdef _DBG_PARSE_SEQ_TARGETS
std::cout << __func__ << "()@" << __FILE__ << ":" << __LINE__ << " :: end" << std::endl;
#endif
return true;
}
/********************************************************
*
*
*
********************************************************/
bool Target::stop(){
if (_mode == MODE_SEQ){
if (moving_thread != NULL) {
moving_thread->abort();
}
th_err.th_err = TH_NOTHREAD;
th_err.th_desc.clear();
moving_thread = NULL;
};
return true;
}
/********************************************************
*
......
......@@ -2,6 +2,15 @@
#define __TARGETS_H__
#include "AxisG2Selector.h"
namespace AxisG2Selector_ns
{
class Target;
class SeqMoveThread;
}
#include "SeqMoveThreadErrors.h"
#include "SeqMoveThread.h"
namespace AxisG2Selector_ns
{
......@@ -48,7 +57,14 @@ private:
Tango::DevState _state_on_target;
Tango::DevState _state;
vector<target_source_t> _trgSrc;
vector<target_source_t> _trgSrcSeq;
bool _on_target;
TrajectoryMode_t _mode;
friend class SeqMoveThread;
SeqMoveThread* moving_thread;
th_err_t th_err;
string status_msg;
public:
string name() { return _name; };
......@@ -61,10 +77,15 @@ public:
Tango::DevState state() { return _state; };
void push_trg_src(target_source_t ts ) { _trgSrc.push_back(ts); };
void clear_trg_src() { _trgSrc.clear(); };
vector<target_source_t> trg_src() { return _trgSrc; };
void trg_src(vector<target_source_t> trg_src) { _trgSrc = trg_src; };
void push_trg_src(target_source_t ts ) { _trgSrc.push_back(ts); };
void clear_trg_src() { _trgSrc.clear(); };
vector<target_source_t> trg_src() { return _trgSrc; };
void trg_src(vector<target_source_t> trg_src) { _trgSrc = trg_src; };
void push_trg_src_seq(target_source_t ts ) { _trgSrcSeq.push_back(ts); };
void clear_trg_src_seq() { _trgSrcSeq.clear(); };
vector<target_source_t> trg_src_seq() { return _trgSrcSeq; };
void trg_src_seq(vector<target_source_t> trg_src) { _trgSrcSeq = trg_src; };
bool updateState(vector<sourceDev2_t> &sources);
bool update(vector<source_state_dval_t> &sources_val); // legge i valori e aggiorna il suo state, ritorna false se qualche problema per acquisire i dati
......@@ -72,6 +93,7 @@ public:
bool onTarget(); // true se le posizioni delle sources rimangono all'interno di positionValue +/-positionDelta
// aggiorna _state.
bool go_all(vector<sourceDev2_t> &sources, vector<source_state_dval_t> &sources_val);
bool go_seq(vector<sourceDev2_t> &sources, vector<source_state_dval_t> &sources_val);
bool stop(vector<sourceDev2_t> &sources);
#if 0
......@@ -79,6 +101,11 @@ public:
#endif
bool operator!= (Target &other);
TrajectoryMode_t mode() {return _mode;};
bool mode(TrajectoryMode_t m){ _mode = m; return true;};
bool stop();
};
......
......@@ -48,6 +48,11 @@ typedef enum {
INTERSECATO
} range_t;
typedef enum {
MODE_NULL,
MODE_ALL,
MODE_SEQ
} TrajectoryMode_t;
} // namespace
#endif /* __TYPES_H__ */