diff --git a/src/DataVampire.cpp b/src/DataVampire.cpp index b33ef9795982395ca00ca162ecf8a789020ad71a..b06b77dd42a2181e9c1125719ef0006b746db051 100644 --- a/src/DataVampire.cpp +++ b/src/DataVampire.cpp @@ -89,6 +89,7 @@ // Height | Tango::DevLong Scalar // VerPosStd | Tango::DevDouble Scalar // EnablePolling | Tango::DevBoolean Scalar +// BackgroundSamples | Tango::DevLong Scalar // RoiParam | Tango::DevLong Spectrum ( max = 4) // Spectrum | Tango::DevDouble Spectrum ( max = 1000000) // HorBackground | Tango::DevDouble Spectrum ( max = 1000000) @@ -193,6 +194,7 @@ void DataVampire::delete_device() delete[] attr_Height_read; delete[] attr_VerPosStd_read; delete[] attr_EnablePolling_read; + delete[] attr_BackgroundSamples_read; delete[] attr_RoiParam_read; delete[] attr_Spectrum_read; delete[] attr_HorBackground_read; @@ -238,6 +240,7 @@ void DataVampire::init_device() attr_Height_read = new Tango::DevLong[1]; attr_VerPosStd_read = new Tango::DevDouble[1]; attr_EnablePolling_read = new Tango::DevBoolean[1]; + attr_BackgroundSamples_read = new Tango::DevLong[1]; attr_RoiParam_read = new Tango::DevLong[4]; attr_Spectrum_read = new Tango::DevDouble[1000000]; attr_HorBackground_read = new Tango::DevDouble[1000000]; @@ -259,6 +262,7 @@ void DataVampire::init_device() *attr_PollingSamples_read = 10; *attr_PollingPeriod_read = 500; *attr_EnablePolling_read = false; + *attr_BackgroundSamples_read = 0; num_rows_image = 0; num_cols_image = 0; @@ -1183,6 +1187,44 @@ void DataVampire::write_EnablePolling(Tango::WAttribute &attr) /*----- PROTECTED REGION END -----*/ // DataVampire::write_EnablePolling } //-------------------------------------------------------- +/** + * Read attribute BackgroundSamples related method + * Description: 0 to disable + * + * Data type: Tango::DevLong + * Attr type: Scalar + */ +//-------------------------------------------------------- +void DataVampire::read_BackgroundSamples(Tango::Attribute &attr) +{ + DEBUG_STREAM << "DataVampire::read_BackgroundSamples(Tango::Attribute &attr) entering... " << endl; + /*----- PROTECTED REGION ID(DataVampire::read_BackgroundSamples) ENABLED START -----*/ + // Set the attribute value + attr.set_value(attr_BackgroundSamples_read); + + /*----- PROTECTED REGION END -----*/ // DataVampire::read_BackgroundSamples +} +//-------------------------------------------------------- +/** + * Write attribute BackgroundSamples related method + * Description: 0 to disable + * + * Data type: Tango::DevLong + * Attr type: Scalar + */ +//-------------------------------------------------------- +void DataVampire::write_BackgroundSamples(Tango::WAttribute &attr) +{ + DEBUG_STREAM << "DataVampire::write_BackgroundSamples(Tango::WAttribute &attr) entering... " << endl; + // Retrieve write value + Tango::DevLong w_val; + attr.get_write_value(w_val); + /*----- PROTECTED REGION ID(DataVampire::write_BackgroundSamples) ENABLED START -----*/ + *attr_BackgroundSamples_read = w_val; + + /*----- PROTECTED REGION END -----*/ // DataVampire::write_BackgroundSamples +} +//-------------------------------------------------------- /** * Read attribute RoiParam related method * Description: @@ -2781,9 +2823,10 @@ void DataVampire::store_circ_data(int32_t mode, int32_t num_samples, int32_t bn_ std::vector<std::string> cmd_output_value_str; cmd_input_value.push_back(mode); + // get last mode - if (mode == 0) { - cmd_input_value.push_back(num_samples); + if (mode == 0) { + cmd_input_value.push_back((double)num_samples); // simulate the bunch number for store_array_2D function bn_start = last_bn + 1; bn_end = last_bn + num_samples; @@ -2794,8 +2837,8 @@ void DataVampire::store_circ_data(int32_t mode, int32_t num_samples, int32_t bn_ } // get data from bn_start to bn_end else if (mode == 1) { - cmd_input_value.push_back(bn_start); - cmd_input_value.push_back(bn_end); + cmd_input_value.push_back((double)bn_start); + cmd_input_value.push_back((double)bn_end); } else { INFO_STREAM << "Not supported mode " << mode << endl; @@ -2809,11 +2852,15 @@ void DataVampire::store_circ_data(int32_t mode, int32_t num_samples, int32_t bn_ if (bn_end < bn_start) { return; } + + if (*attr_BackgroundSamples_read > 0) { + cmd_input_value.push_back((double)*attr_BackgroundSamples_read); + } if ((*attr_PostAcqRoi_read) == false) { // add ROI info to params for (unsigned int i = 0; i < roi_dim; i++) { - cmd_input_value.push_back(attr_RoiParam_read[i]); + cmd_input_value.push_back((double)attr_RoiParam_read[i]); } } diff --git a/src/DataVampire.h b/src/DataVampire.h index 678fbb5097f417a3f0b483bffe6d09eb8847a44a..e17aad84e9a7aaa9d5a22867a170a60b14f4de55 100644 --- a/src/DataVampire.h +++ b/src/DataVampire.h @@ -141,6 +141,7 @@ public: Tango::DevLong *attr_Height_read; Tango::DevDouble *attr_VerPosStd_read; Tango::DevBoolean *attr_EnablePolling_read; + Tango::DevLong *attr_BackgroundSamples_read; Tango::DevLong *attr_RoiParam_read; Tango::DevDouble *attr_Spectrum_read; Tango::DevDouble *attr_HorBackground_read; @@ -397,6 +398,16 @@ public: virtual void read_EnablePolling(Tango::Attribute &attr); virtual void write_EnablePolling(Tango::WAttribute &attr); virtual bool is_EnablePolling_allowed(Tango::AttReqType type); +/** + * Attribute BackgroundSamples related methods + * Description: 0 to disable + * + * Data type: Tango::DevLong + * Attr type: Scalar + */ + virtual void read_BackgroundSamples(Tango::Attribute &attr); + virtual void write_BackgroundSamples(Tango::WAttribute &attr); + virtual bool is_BackgroundSamples_allowed(Tango::AttReqType type); /** * Attribute RoiParam related methods * Description: diff --git a/src/DataVampire.xmi b/src/DataVampire.xmi index e078e9766f5df538c6b695f0b96d8019f2a3aca3..a5acfdda16659d685c15a35ce8274d49ecece9fe 100644 --- a/src/DataVampire.xmi +++ b/src/DataVampire.xmi @@ -284,6 +284,14 @@ <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/> </attributes> + <attributes name="BackgroundSamples" attType="Scalar" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" memorized="true" memorizedAtInit="true" allocReadMember="true" isDynamic="false"> + <dataType xsi:type="pogoDsl:IntType"/> + <changeEvent fire="false" libCheckCriteria="false"/> + <archiveEvent fire="false" libCheckCriteria="false"/> + <dataReadyEvent fire="false" libCheckCriteria="true"/> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + <properties description="0 to disable" label="" unit="" standardUnit="" displayUnit="" format="%d" maxValue="9999" minValue="-1" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/> + </attributes> <attributes name="RoiParam" attType="Spectrum" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="4" maxY="" allocReadMember="true" isDynamic="false"> <dataType xsi:type="pogoDsl:IntType"/> <changeEvent fire="false" libCheckCriteria="false"/> diff --git a/src/DataVampireClass.cpp b/src/DataVampireClass.cpp index 380de52c757c9cc1558b748f34c38a0b1c2f4cdc..434227f81f018fa87952818029a182986a5ad3ce 100644 --- a/src/DataVampireClass.cpp +++ b/src/DataVampireClass.cpp @@ -1011,6 +1011,31 @@ void DataVampireClass::attribute_factory(vector<Tango::Attr *> &att_list) enablepolling->set_memorized_init(true); att_list.push_back(enablepolling); + // Attribute : BackgroundSamples + BackgroundSamplesAttrib *backgroundsamples = new BackgroundSamplesAttrib(); + Tango::UserDefaultAttrProp backgroundsamples_prop; + backgroundsamples_prop.set_description("0 to disable"); + // label not set for BackgroundSamples + // unit not set for BackgroundSamples + // standard_unit not set for BackgroundSamples + // display_unit not set for BackgroundSamples + backgroundsamples_prop.set_format("%d"); + backgroundsamples_prop.set_max_value("9999"); + backgroundsamples_prop.set_min_value("-1"); + // max_alarm not set for BackgroundSamples + // min_alarm not set for BackgroundSamples + // max_warning not set for BackgroundSamples + // min_warning not set for BackgroundSamples + // delta_t not set for BackgroundSamples + // delta_val not set for BackgroundSamples + + backgroundsamples->set_default_properties(backgroundsamples_prop); + // Not Polled + backgroundsamples->set_disp_level(Tango::OPERATOR); + backgroundsamples->set_memorized(); + backgroundsamples->set_memorized_init(true); + att_list.push_back(backgroundsamples); + // Attribute : RoiParam RoiParamAttrib *roiparam = new RoiParamAttrib(); Tango::UserDefaultAttrProp roiparam_prop; diff --git a/src/DataVampireClass.h b/src/DataVampireClass.h index b203327e5a38c84a73d1f7ddab295ee276c696cb..a2d80b514000f2fa16a7a92190597b8f4cda38aa 100644 --- a/src/DataVampireClass.h +++ b/src/DataVampireClass.h @@ -327,6 +327,21 @@ public: {return (static_cast<DataVampire *>(dev))->is_EnablePolling_allowed(ty);} }; +// Attribute BackgroundSamples class definition +class BackgroundSamplesAttrib: public Tango::Attr +{ +public: + BackgroundSamplesAttrib():Attr("BackgroundSamples", + Tango::DEV_LONG, Tango::READ_WRITE) {}; + ~BackgroundSamplesAttrib() {}; + virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att) + {(static_cast<DataVampire *>(dev))->read_BackgroundSamples(att);} + virtual void write(Tango::DeviceImpl *dev,Tango::WAttribute &att) + {(static_cast<DataVampire *>(dev))->write_BackgroundSamples(att);} + virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty) + {return (static_cast<DataVampire *>(dev))->is_BackgroundSamples_allowed(ty);} +}; + // Attribute RoiParam class definition class RoiParamAttrib: public Tango::SpectrumAttr { diff --git a/src/DataVampireStateMachine.cpp b/src/DataVampireStateMachine.cpp index 37bcec4bfc6e559549560bfc37f34ab769f26ba9..18d3bf7251b7c706847c7d38e79b4c1ff5c0621b 100644 --- a/src/DataVampireStateMachine.cpp +++ b/src/DataVampireStateMachine.cpp @@ -482,6 +482,26 @@ bool DataVampire::is_EnablePolling_allowed(TANGO_UNUSED(Tango::AttReqType type)) return true; } +//-------------------------------------------------------- +/** + * Method : DataVampire::is_BackgroundSamples_allowed() + * Description : Execution allowed for BackgroundSamples attribute + */ +//-------------------------------------------------------- +bool DataVampire::is_BackgroundSamples_allowed(TANGO_UNUSED(Tango::AttReqType type)) +{ + // Not any excluded states for BackgroundSamples attribute in Write access. + /*----- PROTECTED REGION ID(DataVampire::BackgroundSamplesStateAllowed_WRITE) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // DataVampire::BackgroundSamplesStateAllowed_WRITE + + // Not any excluded states for BackgroundSamples attribute in read access. + /*----- PROTECTED REGION ID(DataVampire::BackgroundSamplesStateAllowed_READ) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // DataVampire::BackgroundSamplesStateAllowed_READ + return true; +} + //-------------------------------------------------------- /** * Method : DataVampire::is_RoiParam_allowed() diff --git a/src/acqthread.cpp b/src/acqthread.cpp index 98e7637b3463a527865f7bfc745b53b21498546f..7ef6f4d233d7a44bdc826e4ad569c77bdee964ce 100644 --- a/src/acqthread.cpp +++ b/src/acqthread.cpp @@ -31,6 +31,7 @@ void *acqthread::run_undetached(void *) try { myobj->mutex->lock(); if (myobj->bn_device) { + myobj->bn_device->read_attribute(myobj->bn_attr_name) >> bunch_number; int32_t bn_start = myobj->last_bn + 1; int32_t bn_end = bunch_number - margin;