diff --git a/src/IPCMini.cpp b/src/IPCMini.cpp index 42c6244621f08deef982f277bbd1fa866b26c760..51109a7b8dbfa028978bff71fbab107cc9da81bd 100644 --- a/src/IPCMini.cpp +++ b/src/IPCMini.cpp @@ -276,26 +276,40 @@ void IPCMini::init_device() strncpy(attr_SerialNumber_read[0], serial.c_str(), MAX_DEVSTRING_LENGTH); /* Read all the device data */ - static const int nw[] = { 8, 11 /*, 108, 205 */, 206 + static const int lpw[] = { 8, 11 /*, 108, 205 */, 206 /*, 319, 323, 503, 504, 600 */, 601, 602, 603, 610, - 612, 613, 614, 615, 800, 801, 804, 810, 811 /*, 890 */ }; - vector<int> normal_windows(nw, nw + sizeof(nw) / sizeof(nw[0])); - for (size_t i=0; i<normal_windows.size(); ++i) { - read_window_into_cache(normal_windows[i]); + 612, 613, 614, 615, 800, 801, 804 /*, 890 */ }; + vector<int> lowprio_windows(lpw, lpw + sizeof(lpw) / sizeof(lpw[0])); + for (size_t i=0; i<lowprio_windows.size(); ++i) { + read_window_into_cache(lowprio_windows[i]); } - static const int iw[] = { 812 }; - vector<int> important_windows(iw, iw + sizeof(iw) / sizeof(iw[0])); - for (size_t i=0; i<important_windows.size(); ++i) { - read_window_into_cache(important_windows[i]); + + static const int mpw[] = { 810, 811 }; + vector<int> medprio_windows(mpw, mpw + sizeof(mpw) / sizeof(mpw[0])); + for (size_t i=0; i<medprio_windows.size(); ++i) { + read_window_into_cache(medprio_windows[i]); + } + + static const int hpw[] = { 812 }; + vector<int> highprio_windows(hpw, hpw + sizeof(hpw) / sizeof(hpw[0])); + for (size_t i=0; i<highprio_windows.size(); ++i) { + read_window_into_cache(highprio_windows[i]); } read_window_into_cache(205); // Contruct polled windows vector - for (size_t i=0; i<normal_windows.size(); ++i) { - polled_windows.push_back(normal_windows[i]); + unsigned int medidx = 0; + for (size_t i=0; i<lowprio_windows.size(); ++i) { + if (i % 2) { + if (medidx >= medprio_windows.size()) + medidx = 0; + polled_windows.push_back(medprio_windows[medidx++]); + } else { + polled_windows.push_back(lowprio_windows[i]); + } polled_windows.insert(polled_windows.end(), - important_windows.begin(), - important_windows.end()); + highprio_windows.begin(), + highprio_windows.end()); } polled_windows.push_back(205 /* it MUST be latest */); @@ -691,8 +705,25 @@ void IPCMini::write_VTargetX(Tango::WAttribute &attr) check_init(); int value = w_val; - write_window(613, value); - read_window_into_cache(613); + if (value > 0 && value < 3000) + Tango::Except::throw_exception( "", + "Out of range [3000-7000]", + "Agilent4uhv::write_VTargetX()"); + + string fs; + read_window_from_cache(603, fs); + fs[0] = '0'; + write_window(603, fs); + + if (value != 0) { + write_window(613, value); + read_window_into_cache(613); + + fs[0] = '1'; + write_window(603, fs); + } + read_window_into_cache(603); + /*----- PROTECTED REGION END -----*/ // IPCMini::write_VTargetX } @@ -1563,6 +1594,7 @@ void* IPCMiniWorker::run_undetached(void * /*ptr*/) while(cont) { DEBUG_STREAM << "Worker::run_undetached() - loop" << endl; try { + usleep(10); usleep(device->pollingSleep); device->read_window_into_cache(*it); if (++it == device->polled_windows.end()) { diff --git a/src/IPCMini.xmi b/src/IPCMini.xmi index a87c80fed3b5be9fea7103e42fbc6473f376a6fe..d56b4baa891d0807b9e87297afa56fe41df837cc 100644 --- a/src/IPCMini.xmi +++ b/src/IPCMini.xmi @@ -125,7 +125,7 @@ <archiveEvent fire="false" libCheckCriteria="false"/> <dataReadyEvent fire="false" libCheckCriteria="true"/> <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> - <properties description="" label="" unit="V" standardUnit="" displayUnit="" format="" maxValue="7000" minValue="3000" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/> + <properties description="" label="" unit="V" standardUnit="" displayUnit="" format="" maxValue="7000" minValue="0" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/> <readExcludedStates>UNKNOWN</readExcludedStates> <readExcludedStates>INIT</readExcludedStates> <writeExcludedStates>UNKNOWN</writeExcludedStates> diff --git a/src/IPCMiniDynAttrUtils.cpp b/src/IPCMiniDynAttrUtils.cpp index 3353bd5a97d7972ded0917ca58be4bde12482c98..940ebc3d687bb85e77af3cc72bc5d20736b24482 100644 --- a/src/IPCMiniDynAttrUtils.cpp +++ b/src/IPCMiniDynAttrUtils.cpp @@ -270,7 +270,7 @@ void IPCMini::add_VTargetX_dynamic_attribute(string attname) // display_unit not set for VTargetX // format not set for VTargetX vtargetx_prop.set_max_value("7000"); - vtargetx_prop.set_min_value("3000"); + vtargetx_prop.set_min_value("0"); // max_alarm not set for VTargetX // min_alarm not set for VTargetX // max_warning not set for VTargetX