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

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

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