diff --git a/src/Alarm.cpp b/src/Alarm.cpp index bf63e20e4ae8e133f1cd0bc39a8209d41417f9e1..0910a215c705a75f0912f90928ed3d383d7aa1b5 100644 --- a/src/Alarm.cpp +++ b/src/Alarm.cpp @@ -331,7 +331,10 @@ void Alarm::init_device() { DEBUG_STREAM << "Alarm::init_device() create device " << device_name << endl; /*----- PROTECTED REGION ID(Alarm::init_device_before) ENABLED START -----*/ - + bool starting = Tango::Util::instance()->is_svr_starting(); + bool shutting_down = Tango::Util::instance()->is_svr_shutting_down(); + bool restarting = Tango::Util::instance()->is_device_restarting(device_name); + DEBUG_STREAM << __func__ << " starting="<<(int)starting << " shutting_down="<<(int)shutting_down<<" restarting="<<(int)restarting; // Initialization before get_device_property() call int dbPortint=0; abortflag = false; @@ -445,6 +448,7 @@ void Alarm::init_device() rule_names[formula_grammar::nonempty_exprID] = "NonEmptyE"; rule_names[formula_grammar::exprID] = "Expression"; rule_names[formula_grammar::val_qualityID] = "ValQuality"; + rule_names[formula_grammar::val_alarm_enum_stID] = "ValAlarmEnumStatus"; /* * get device attribute properties and initialize internal @@ -737,6 +741,7 @@ void Alarm::init_device() clock_gettime(CLOCK_MONOTONIC, &now); double dnow = (now.tv_sec) + ((double)(now.tv_nsec))/1000000000; last_statistics_reset_time = dnow; + INFO_STREAM << __func__ << ": exiting!"; /*----- PROTECTED REGION END -----*/ // Alarm::init_device } @@ -1909,7 +1914,7 @@ Tango::DevVarStringArray *Alarm::search_alarm(Tango::DevString argin) os.clear(); os << ai->second.ts.tv_sec << "\t" << ai->second.name << "\t" /*TODO<< KEY(FORMULA_KEY)*/ << ai->second.formula << "\t" << KEY(ONDELAY_KEY) << ai->second.on_delay << "\t" << KEY(OFFDELAY_KEY) << ai->second.off_delay << "\t" << KEY(LEVEL_KEY) << ai->second.lev << "\t" << KEY(SILENT_TIME_KEY) << ai->second.silent_time << "\t" << KEY(GROUP_KEY) << ai->second.grp2str() << "\t" << KEY(MESSAGE_KEY) << ai->second.msg << "\t" << - KEY(ON_COMMAND_KEY) << ai->second.cmd_name_a << "\t" << KEY(OFF_COMMAND_KEY) << ai->second.cmd_name_n << ends; + KEY(ON_COMMAND_KEY) << ai->second.cmd_name_a << "\t" << KEY(OFF_COMMAND_KEY) << ai->second.cmd_name_n << "\t" << KEY(ENABLED_KEY) << (ai->second.enabled ? "1" : "0") << ends; alarm_filtered.push_back(os.str()); } } /* for */ @@ -3923,6 +3928,20 @@ formula_res_t Alarm::eval_expression(iter_t const& i, string &attr_values, int e formula_res_t res; res.value = st; return res; + } + else if (i->value.id() == formula_grammar::val_alarm_enum_stID) + { + if(i->children.size() != 0) + { + err << "in node val_alarm_enum_stID(" << string(i->value.begin(), i->value.end()) << ") children=" << i->children.size() << ends; + throw err.str(); + } + string val_st(i->value.begin(), i->value.end()); + double st = i->value.value(); //get value directly from node saved with access_node_d + DEBUG_STREAM << " node value alarm enum state : " << val_st << "=" << st << endl; + formula_res_t res; + res.value = st; + return res; } else if (i->value.id() == formula_grammar::val_qualityID) { @@ -4250,7 +4269,7 @@ formula_res_t Alarm::eval_expression(iter_t const& i, string &attr_values, int e { if(!it->valid) { - err << "in node nameID(" << string(i2_1->value.begin(), i2_1->value.end()) << ") value not valid!" << ends; + err << "in node equality_exprID -> nameID(" << string(i2_1->value.begin(), i2_1->value.end()) << ") value not valid!" << ends; throw err.str(); } else if(it->type != Tango::DEV_STRING && it->value.empty()) diff --git a/src/alarm_table.cpp b/src/alarm_table.cpp index e60d520d106d6a01bd29c3a999fc1f15c781e7a2..0f2aad19dd53e09f25ab3d6f7a6875b795703544 100644 --- a/src/alarm_table.cpp +++ b/src/alarm_table.cpp @@ -22,17 +22,6 @@ static const char __FILE__rev[] = __FILE__ " $Revision: 1.5 $"; -//TODO: duplicated from alarm.h -enum _AlarmStateEnum { - _NORM, - _UNACK, - _ACKED, - _RTNUN, - _SHLVD, - _DSUPR, - _OOSRV, -} ; - /* * alarm_t class methods */ diff --git a/src/formula_grammar.h b/src/formula_grammar.h index dd52a538d5894e6dcb0486b2db51fd9d6a548274..89267dfa13a933ca2b594fe1d5c698ccce76f9dd 100644 --- a/src/formula_grammar.h +++ b/src/formula_grammar.h @@ -80,6 +80,17 @@ struct Assign_Stat } }; +//TODO: duplicated from alarm.h +enum _AlarmStateEnum { + _NORM, + _UNACK, + _ACKED, + _RTNUN, + _SHLVD, + _DSUPR, + _OOSRV, +} ; + struct formula_grammar : public grammar<formula_grammar> { @@ -116,10 +127,14 @@ struct formula_grammar : public grammar<formula_grammar> static const int exprID = 21; static const int nonempty_exprID = 22; static const int val_qualityID = 23; + static const int val_alarm_enum_stID = 24; + symbols<unsigned int> tango_states; symbols<unsigned int> attr_quality; + symbols<unsigned int> alarm_enum_states; + formula_grammar() { tango_states.add("ON", (unsigned int)Tango::ON); @@ -142,6 +157,14 @@ struct formula_grammar : public grammar<formula_grammar> attr_quality.add("ATTR_ALARM", (unsigned int)Tango::ATTR_ALARM); attr_quality.add("ATTR_CHANGING", (unsigned int)Tango::ATTR_CHANGING); attr_quality.add("ATTR_WARNING", (unsigned int)Tango::ATTR_WARNING); + + alarm_enum_states.add("NORM", (unsigned int)_NORM); + alarm_enum_states.add("UNACK", (unsigned int)_UNACK); + alarm_enum_states.add("ACKED", (unsigned int)_ACKED); + alarm_enum_states.add("RTNUN", (unsigned int)_RTNUN); + alarm_enum_states.add("SHLVD", (unsigned int)_SHLVD); + alarm_enum_states.add("DSUPR", (unsigned int)_DSUPR); + alarm_enum_states.add("OOSRV", (unsigned int)_OOSRV); } template <typename ScannerT> @@ -211,8 +234,13 @@ struct formula_grammar : public grammar<formula_grammar> ; val_quality = - //access_node_d[self.tango_states[&Save_Stat]][&Assign_Stat] //save Tango::state value in node + //access_node_d[self.attr_quality[&Save_Stat]][&Assign_Stat] //save Tango::state value in node access_node_d[self.attr_quality[Save_Stat()]][Assign_Stat()] //save Tango::state value in node + ; + val_alarm_enum_st + = + //access_node_d[self.alarm_enum_states[&Save_Stat]][&Assign_Stat] //save Tango::state value in node + access_node_d[self.alarm_enum_states[Save_Stat()]][Assign_Stat()] //save Tango::state value in node ; val_string #if BOOST_VERSION < 103600 @@ -336,7 +364,7 @@ struct formula_grammar : public grammar<formula_grammar> expr_atom = //val_h | val_r event_ - | val_h | val_r | val_st | val_quality | val_string + | val_h | val_r | val_st | val_quality | val_alarm_enum_st | val_string //| (inner_node_d[ch_p('(') >> non_empty_expression >> ')']) | (discard_node_d[ch_p('(')] >> non_empty_expression >> discard_node_d[ch_p(')')]) ; @@ -373,6 +401,8 @@ struct formula_grammar : public grammar<formula_grammar> rule<ScannerT, parser_context<>, parser_tag<nonempty_exprID> > non_empty_expression; rule<ScannerT, parser_context<>, parser_tag<exprID> > expression; rule<ScannerT, parser_context<>, parser_tag<val_qualityID> > val_quality; + rule<ScannerT, parser_context<>, parser_tag<val_alarm_enum_stID> > val_alarm_enum_st; + rule<ScannerT> const& start() const { return top; }