Commit 3bb178a2 authored by Pavel Vainerman's avatar Pavel Vainerman

(2.0): Исправил ошибку с инициализацией USensorInfo

parent c7609b05
......@@ -99,8 +99,8 @@ class IOController:
public:
// предварительное объявление, чтобы в структуре объявить итератор..
struct USensorIOInfo;
typedef std::map<UniSetTypes::KeyType, USensorIOInfo> IOStateList;
struct USensorInfo;
typedef std::map<UniSetTypes::KeyType, USensorInfo> IOStateList;
// ================== Достпуные сигналы =================
......@@ -125,25 +125,29 @@ class IOController:
// -----------------------------------------------------------------------------------------
struct USensorIOInfo:
struct USensorInfo:
public IOController_i::SensorIOInfo
{
USensorIOInfo():any(0),db_ignore(false),d_value(0),d_off_value(0)
USensorInfo():any(0),d_value(0),d_off_value(0)
{
undefined = false;
d_si.id = UniSetTypes::DefaultObjectId;
d_si.node = UniSetTypes::DefaultObjectId;
value = default_val;
real_value = default_val;
dbignore = false;
undefined = false;
blocked = false;
}
virtual ~USensorIOInfo(){}
virtual ~USensorInfo(){}
USensorIOInfo(IOController_i::SensorIOInfo& r);
USensorIOInfo(IOController_i::SensorIOInfo* r);
USensorIOInfo(const IOController_i::SensorIOInfo& r);
USensorInfo(IOController_i::SensorIOInfo& r);
USensorInfo(IOController_i::SensorIOInfo* r);
USensorInfo(const IOController_i::SensorIOInfo& r);
USensorIOInfo& operator=(IOController_i::SensorIOInfo& r);
const USensorIOInfo& operator=(const IOController_i::SensorIOInfo& r);
USensorIOInfo& operator=(IOController_i::SensorIOInfo* r);
USensorInfo& operator=(IOController_i::SensorIOInfo& r);
const USensorInfo& operator=(const IOController_i::SensorIOInfo& r);
USensorInfo& operator=(IOController_i::SensorIOInfo* r);
// Дополнительные (вспомогательные поля)
UniSetTypes::uniset_rwmutex val_lock; /*!< флаг блокирующий работу со значением */
......@@ -151,7 +155,6 @@ class IOController:
IOStateList::iterator it;
void* any; /*!< расширение для возможности хранения своей информации */
bool db_ignore; /*!< не писать изменения в БД */
// сигнал для реализации механизма зависимостией..
// (все зависимые датчики подключаются к нему (см. NCRestorer::init_depends_signals)
......@@ -198,7 +201,7 @@ class IOController:
/*! регистрация датчика
force=true - не проверять на дублирование (оптимизация)
*/
void ioRegistration( const USensorIOInfo&, bool force=false );
void ioRegistration( const USensorInfo&, bool force=false );
/*! разрегистрация датчика */
void ioUnRegistration( const IOController_i::SensorInfo& si );
......@@ -248,7 +251,7 @@ class IOController:
// --------------------------
// ФИЛЬТРОВАНИЕ
//
typedef sigc::slot<bool,const USensorIOInfo&, CORBA::Long, UniSetTypes::ObjectId> IOFilterSlot;
typedef sigc::slot<bool,const USensorInfo&, CORBA::Long, UniSetTypes::ObjectId> IOFilterSlot;
typedef std::list<IOFilterSlot> IOFilterSlotList;
/*
......@@ -263,7 +266,7 @@ class IOController:
void eraseIOFilter(IOFilterSlotList::iterator& it);
// функии проверки текущего значения
bool checkIOFilters( const USensorIOInfo& ai, CORBA::Long& newvalue, UniSetTypes::ObjectId sup_id );
bool checkIOFilters( const USensorInfo& ai, CORBA::Long& newvalue, UniSetTypes::ObjectId sup_id );
inline bool iofiltersEmpty(){ return iofilters.empty(); }
inline int iodiltersSize(){ return iofilters.size(); }
......
......@@ -239,7 +239,7 @@ class IONotifyController:
virtual bool activateObject();
// ФИЛЬТРЫ
bool myIOFilter(const USensorIOInfo& ai, CORBA::Long newvalue, UniSetTypes::ObjectId sup_id);
bool myIOFilter(const USensorInfo& ai, CORBA::Long newvalue, UniSetTypes::ObjectId sup_id);
//! посылка информации об изменении состояния датчика
virtual void send(ConsumerList& lst, UniSetTypes::SensorMessage& sm);
......
......@@ -43,7 +43,7 @@ class NCRestorer
virtual ~NCRestorer();
struct SInfo:
public IOController::USensorIOInfo
public IOController::USensorInfo
{
SInfo( IOController_i::SensorInfo& si, UniversalIO::IOType& t,
UniSetTypes::Message::Message::Priority& p, long& def )
......@@ -76,7 +76,7 @@ class NCRestorer
// добавление списка порогов и заказчиков
static void addthresholdlist( IONotifyController* ic, SInfo& inf, IONotifyController::ThresholdExtList& lst, bool force=false );
static inline void ioRegistration( IONotifyController* ic, IOController::USensorIOInfo& inf, bool force=false )
static inline void ioRegistration( IONotifyController* ic, IOController::USensorInfo& inf, bool force=false )
{
ic->ioRegistration(inf,force);
}
......
......@@ -111,7 +111,7 @@ void UniversalInterface::initBackId( UniSetTypes::ObjectId backid )
// ------------------------------------------------------------------------------------------------------------
/*!
* \param id - идентификатор датчика
*\return текущее значение датчика
* \return текущее значение датчика
* \exception IOBadParam - генерируется если указано неправильное имя датчика или секции
* \exception IOTimeOut - генерируется если в течение времени timeout небыл получен ответ
*/
......
......@@ -101,21 +101,21 @@ CORBA::Long IOController::getValue( const IOController_i::SensorInfo& si )
long IOController::localGetValue( IOController::IOStateList::iterator& li,
const IOController_i::SensorInfo& si )
{
if( li == ioList.end() )
li = ioList.find( key(si.id,si.node) );
if( li == ioList.end() )
li = ioList.find( key(si.id,si.node) );
if( li!=ioList.end() )
{
if( li->second.undefined )
throw IOController_i::Undefined();
if( li!=ioList.end() )
{
if( li->second.undefined )
throw IOController_i::Undefined();
uniset_rwmutex_rlock lock(li->second.val_lock);
return li->second.value;
}
uniset_rwmutex_rlock lock(li->second.val_lock);
return li->second.value;
}
// -------------
ostringstream err;
err << myname << "(localGetValue): Not found analog sensor (" << si.id << ":" << si.node << ") "
err << myname << "(localGetValue): Not found sensor (" << si.id << ":" << si.node << ") "
<< conf->oind->getNameById(si.id);
if( unideb.debugging(Debug::INFO) )
......@@ -212,7 +212,6 @@ void IOController::localSetValue( IOController::IOStateList::iterator& li,
sup_id = getId();
// сохранение текущего состояния
// IOStateList::iterator li( ioList.end() );
if( li == ioList.end() )
li = ioList.find(key(si.id, si.node));
......@@ -300,7 +299,7 @@ IOType IOController::getIOType( const IOController_i::SensorInfo& si )
throw IOController_i::NameNotFound(err.str().c_str());
}
// ---------------------------------------------------------------------------
void IOController::ioRegistration( const USensorIOInfo& ainf, bool force )
void IOController::ioRegistration( const USensorInfo& ainf, bool force )
{
// проверка задан ли контроллеру идентификатор
if( getId() == DefaultObjectId )
......@@ -435,8 +434,8 @@ void IOController::dumpToDB()
sm.sm_tv_sec = li->second.tv_sec;
sm.sm_tv_usec = li->second.tv_usec;
sm.ci = li->second.ci;
if ( !li->second.db_ignore )
logging(sm); // alogging( li->second.si,li->second.value,li->second.type );
if ( !li->second.dbignore )
logging(sm);
}
} // unlock
}
......@@ -448,17 +447,14 @@ IOController_i::SensorInfoSeq* IOController::getSensorsMap()
IOController_i::SensorInfoSeq* res = new IOController_i::SensorInfoSeq();
res->length( ioList.size());
// { // lock
// uniset_mutex_lock lock(ioMutex, 500);
int i=0;
for( IOStateList::iterator it=ioList.begin(); it!=ioList.end(); ++it)
{
uniset_rwmutex_rlock lock(it->second.val_lock);
(*res)[i] = it->second;
i++;
}
// }
int i=0;
for( IOStateList::iterator it=ioList.begin(); it!=ioList.end(); ++it)
{
uniset_rwmutex_rlock lock(it->second.val_lock);
(*res)[i] = it->second;
i++;
}
return res;
}
// --------------------------------------------------------------------------------------------------------------
......@@ -552,34 +548,34 @@ IOController_i::CalibrateInfo IOController::getCalibrateInfo(const IOController_
<< conf->oind->getNameById(si.id,si.node);
throw IOController_i::NameNotFound(err.str().c_str());
}
return it->second.ci;
return it->second.ci;
}
// --------------------------------------------------------------------------------------------------------------
IOController::USensorIOInfo::USensorIOInfo(IOController_i::SensorIOInfo& ai):
IOController::USensorInfo::USensorInfo(IOController_i::SensorIOInfo& ai):
IOController_i::SensorIOInfo(ai),
any(0)
{}
IOController::USensorIOInfo::USensorIOInfo(const IOController_i::SensorIOInfo& ai):
IOController::USensorInfo::USensorInfo(const IOController_i::SensorIOInfo& ai):
IOController_i::SensorIOInfo(ai),
any(0)
{}
IOController::USensorIOInfo::USensorIOInfo(IOController_i::SensorIOInfo* ai):
IOController::USensorInfo::USensorInfo(IOController_i::SensorIOInfo* ai):
IOController_i::SensorIOInfo(*ai),
any(0)
{}
IOController::USensorIOInfo&
IOController::USensorIOInfo::operator=(IOController_i::SensorIOInfo& r)
IOController::USensorInfo&
IOController::USensorInfo::operator=(IOController_i::SensorIOInfo& r)
{
(*this) = r;
// any=0;
return *this;
}
IOController::USensorIOInfo&
IOController::USensorIOInfo::operator=(IOController_i::SensorIOInfo* r)
IOController::USensorInfo&
IOController::USensorInfo::operator=(IOController_i::SensorIOInfo* r)
{
(*this) = (*r);
// any=0;
......@@ -587,8 +583,8 @@ IOController::USensorIOInfo&
return *this;
}
const IOController::USensorIOInfo&
IOController::USensorIOInfo::operator=(const IOController_i::SensorIOInfo& r)
const IOController::USensorInfo&
IOController::USensorInfo::operator=(const IOController_i::SensorIOInfo& r)
{
(*this) = r;
// any=0;
......@@ -596,7 +592,7 @@ const IOController::USensorIOInfo&
}
// ----------------------------------------------------------------------------------------
bool IOController::checkIOFilters( const USensorIOInfo& ai, CORBA::Long& newvalue,
bool IOController::checkIOFilters( const USensorInfo& ai, CORBA::Long& newvalue,
UniSetTypes::ObjectId sup_id )
{
for( IOFilterSlotList::iterator it=iofilters.begin(); it!=iofilters.end(); ++it )
......@@ -794,7 +790,7 @@ IOController::ChangeUndefinedStateSignal IOController::signal_change_undefined_s
return sigAnyUndefChange;
}
// -----------------------------------------------------------------------------
void IOController::USensorIOInfo::checkDepend( IOStateList::iterator& d_it, IOController* ic )
void IOController::USensorInfo::checkDepend( IOStateList::iterator& d_it, IOController* ic )
{
bool changed = false;
{
......
......@@ -309,7 +309,7 @@ void IONotifyController::ask(AskMap& askLst, const IOController_i::SensorInfo& s
}
}
// ------------------------------------------------------------------------------------------
bool IONotifyController::myIOFilter(const USensorIOInfo& ai,
bool IONotifyController::myIOFilter(const USensorInfo& ai,
CORBA::Long newvalue, UniSetTypes::ObjectId sup_id)
{
if( ai.value == newvalue )
......@@ -368,7 +368,7 @@ void IONotifyController::localSetValue( IOController::IOStateList::iterator& li,
try
{
if( !li->second.db_ignore )
if( !li->second.dbignore )
loggingInfo(sm);
}
catch(...){}
......@@ -923,7 +923,7 @@ IONotifyController_i::ThresholdsListSeq* IONotifyController::getThresholdsList()
// -----------------------------------------------------------------------------
void IONotifyController::onChangeUndefinedState( IOStateList::iterator& lit, IOController* ic )
{
USensorIOInfo& it(lit->second);
USensorInfo& it(lit->second);
SensorMessage sm;
......@@ -945,7 +945,7 @@ void IONotifyController::onChangeUndefinedState( IOStateList::iterator& lit, IOC
try
{
if( !it.db_ignore )
if( !it.dbignore )
loggingInfo(sm);
}
catch(...){}
......
......@@ -171,10 +171,14 @@ NCRestorer::SInfo& NCRestorer::SInfo::operator=(IOController_i::SensorIOInfo& in
this->default_val = inf.default_val;
this->real_value = inf.real_value;
this->ci = inf.ci;
this->undefined = false;
this->db_ignore = false;
this->undefined = inf.undefined;
this->blocked = inf.blocked;
this->dbignore = inf.dbignore;
this->any = 0;
return *this;
// CalibrateInfo ci;
// long tv_sec;
// long v_usec;
}
// ------------------------------------------------------------------------------------------
void NCRestorer::init_depends_signals( IONotifyController* ic )
......@@ -190,11 +194,11 @@ void NCRestorer::init_depends_signals( IONotifyController* ic )
if( unideb.debugging(Debug::INFO) )
unideb[Debug::INFO] << ic->getName() << "(NCRestorer::init_depends_signals): "
<< " init depend: '" << conf->oind->getMapName(it->second.si.id) << "'"
<< " dep_name='" << conf->oind->getMapName(it->second.d_si.id) << "'"
<< " dep_name=(" << it->second.d_si.id << ")'" << conf->oind->getMapName(it->second.d_si.id) << "'"
<< endl;
IOController::ChangeSignal s = ic->signal_change_value(it->second.d_si);
s.connect( sigc::mem_fun( &it->second, &IOController::USensorIOInfo::checkDepend) );
s.connect( sigc::mem_fun( &it->second, &IOController::USensorInfo::checkDepend) );
}
}
// -----------------------------------------------------------------------------
......@@ -303,7 +303,7 @@ bool NCRestorer_XML::getSensorInfo( UniXML& xml, xmlNode* it, SInfo& inf )
}
inf.default_val = xml.getIntProp(it,"default");
inf.db_ignore = xml.getIntProp(it,"dbignore");
inf.dbignore = xml.getIntProp(it,"dbignore");
inf.value = inf.default_val;
inf.undefined = false;
inf.real_value = inf.value;
......
......@@ -35,7 +35,6 @@ int main( int argc, const char **argv )
cerr << "unknown sensor ID. Use --sid " << endl;
return 1;
}
cout << "** check getChangedTime for ID=" << id << ":" << endl;
......
Markdown is supported
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