From d9595aa612654c031c7a75f4992ec9259349ddeb Mon Sep 17 00:00:00 2001 From: wierenga <sdos@astron.nl> Date: Fri, 12 May 2006 12:29:40 +0000 Subject: [PATCH] BugID: 646 Introducing new AllRegisterState register to keep track of the update status of all hardware registers. --- MAC/APL/PIC/RSPDriver/src/BSWrite.cc | 4 +- MAC/APL/PIC/RSPDriver/src/BWWrite.cc | 14 +- MAC/APL/PIC/RSPDriver/src/BstRead.cc | 6 +- MAC/APL/PIC/RSPDriver/src/CDOWrite.cc | 9 +- MAC/APL/PIC/RSPDriver/src/Cache.cc | 76 +------ MAC/APL/PIC/RSPDriver/src/Cache.h | 30 +-- MAC/APL/PIC/RSPDriver/src/RCUProtocolWrite.cc | 4 +- MAC/APL/PIC/RSPDriver/src/RCUResultRead.cc | 4 +- MAC/APL/PIC/RSPDriver/src/RCUWrite.cc | 8 +- MAC/APL/PIC/RSPDriver/src/RSUWrite.cc | 5 +- MAC/APL/PIC/RSPDriver/src/SSRead.cc | 6 +- MAC/APL/PIC/RSPDriver/src/SSWrite.cc | 6 +- MAC/APL/PIC/RSPDriver/src/SetClocksCmd.cc | 4 +- MAC/APL/PIC/RSPDriver/src/SetRCUCmd.cc | 6 +- MAC/APL/PIC/RSPDriver/src/SetRSUCmd.cc | 2 +- MAC/APL/PIC/RSPDriver/src/SetWGCmd.cc | 4 +- MAC/APL/PIC/RSPDriver/src/SetWeightsCmd.cc | 4 +- MAC/APL/PIC/RSPDriver/src/SstRead.cc | 8 +- MAC/APL/PIC/RSPDriver/src/StatusRead.cc | 6 +- MAC/APL/PIC/RSPDriver/src/TDSProtocolWrite.cc | 4 +- MAC/APL/PIC/RSPDriver/src/TDSResultRead.cc | 8 +- MAC/APL/PIC/RSPDriver/src/UpdClocksCmd.cc | 2 +- MAC/APL/PIC/RSPDriver/src/VersionsRead.cc | 2 +- MAC/APL/PIC/RSPDriver/src/WGWrite.cc | 4 +- MAC/APL/PIC/RSPDriver/src/XstRead.cc | 8 +- MAC/APL/PIC/RSPDriver/test/EPAStub.cc | 70 +------ .../APL/RSP_Protocol/AllRegisterState.h | 194 ++++++++++++++++++ .../include/APL/RSP_Protocol/MEPHeader.h | 2 +- .../include/APL/RSP_Protocol/Makefile.am | 1 + .../PIC/RSP_Protocol/src/AllRegisterState.cc | 94 +++++++++ MAC/APL/PIC/RSP_Protocol/src/Makefile.am | 1 + .../PIC/RSP_Protocol/src/RSP_Protocol.prot | 112 ++++++++++ .../include/APL/RTCCommon/Marshalling.h | 8 +- .../include/APL/RTCCommon/RegisterState.h | 47 ++++- 34 files changed, 529 insertions(+), 234 deletions(-) create mode 100644 MAC/APL/PIC/RSP_Protocol/include/APL/RSP_Protocol/AllRegisterState.h create mode 100644 MAC/APL/PIC/RSP_Protocol/src/AllRegisterState.cc diff --git a/MAC/APL/PIC/RSPDriver/src/BSWrite.cc b/MAC/APL/PIC/RSPDriver/src/BSWrite.cc index bd390456492..cafd856f287 100644 --- a/MAC/APL/PIC/RSPDriver/src/BSWrite.cc +++ b/MAC/APL/PIC/RSPDriver/src/BSWrite.cc @@ -49,7 +49,7 @@ BSWrite::~BSWrite() void BSWrite::sendrequest() { // skip update if the neither of the RCU's settings have been modified - if (RTC::RegisterState::MODIFIED != Cache::getInstance().getBSState().get((getBoardId() * StationSettings::instance()->nrBlps()) + m_blp)) + if (RTC::RegisterState::MODIFIED != Cache::getInstance().getState().bs().get((getBoardId() * StationSettings::instance()->nrBlps()) + m_blp)) { setContinue(true); return; @@ -91,7 +91,7 @@ GCFEvent::TResult BSWrite::handleack(GCFEvent& event, GCFPortInterface& /*port*/ } // change state to indicate that it has been applied in the hardware - Cache::getInstance().getBSState().confirmed((getBoardId() * StationSettings::instance()->nrBlps()) + m_blp); + Cache::getInstance().getState().bs().confirmed((getBoardId() * StationSettings::instance()->nrBlps()) + m_blp); return GCFEvent::HANDLED; } diff --git a/MAC/APL/PIC/RSPDriver/src/BWWrite.cc b/MAC/APL/PIC/RSPDriver/src/BWWrite.cc index f58790e6e77..6d8ef93b5e5 100644 --- a/MAC/APL/PIC/RSPDriver/src/BWWrite.cc +++ b/MAC/APL/PIC/RSPDriver/src/BWWrite.cc @@ -208,18 +208,22 @@ GCFEvent::TResult BWWrite::handleack(GCFEvent& event, GCFPortInterface& /*port*/ if (!ack.hdr.isValidAck(m_hdr)) { - Cache::getInstance().getBFState().modified(global_blp * MEPHeader::N_PHASEPOL + m_regid); + Cache::getInstance().getState().bf().modified(global_blp * MEPHeader::N_PHASEPOL + m_regid); LOG_ERROR("BWWrite::handleack: invalid ack"); return GCFEvent::NOT_HANDLED; } else { - // only mark confirmed when the last fragment has been received OK - if ((BF_N_FRAGMENTS - 1) == getCurrentIndex()) { - Cache::getInstance().getBFState().confirmed(global_blp * MEPHeader::N_PHASEPOL + m_regid); + // + // This code assumed that BF_N_FRAGMENTS == 2 + // First fragment transitions state to applied. + // Second (and last) fragment transitions state to confirmed. + // + if (0 == getCurrentIndex() % BF_N_FRAGMENTS) { + Cache::getInstance().getState().bf().applied(global_blp * MEPHeader::N_PHASEPOL + m_regid); } else { - Cache::getInstance().getBFState().applied(global_blp * MEPHeader::N_PHASEPOL + m_regid); + Cache::getInstance().getState().bf().confirmed(global_blp * MEPHeader::N_PHASEPOL + m_regid); } } diff --git a/MAC/APL/PIC/RSPDriver/src/BstRead.cc b/MAC/APL/PIC/RSPDriver/src/BstRead.cc index 9d60a75d504..0044e9920b0 100644 --- a/MAC/APL/PIC/RSPDriver/src/BstRead.cc +++ b/MAC/APL/PIC/RSPDriver/src/BstRead.cc @@ -51,7 +51,7 @@ void BstRead::sendrequest() { EPAReadEvent bstread; - Cache::getInstance().getBstState().modified(getBoardId()); + Cache::getInstance().getState().bst().modified(getBoardId()); bstread.hdr.set(MEPHeader::BST_POWER_HDR, MEPHeader::DST_RSP, MEPHeader::READ, MEPHeader::BST_POWER_SIZE); @@ -100,7 +100,7 @@ GCFEvent::TResult BstRead::handleack(GCFEvent& event, GCFPortInterface& /*port*/ if (!ack.hdr.isValidAck(m_hdr)) { - Cache::getInstance().getBstState().applied(getBoardId()); + Cache::getInstance().getState().bst().applied(getBoardId()); LOG_ERROR("BstRead::handleack: invalid ack"); return GCFEvent::NOT_HANDLED; } @@ -133,7 +133,7 @@ GCFEvent::TResult BstRead::handleack(GCFEvent& event, GCFPortInterface& /*port*/ cache(getBoardId() * 2 + 1, fragment_range) = convert_uint32_to_double(stats(Range::all(), 1)); - Cache::getInstance().getBstState().confirmed(getBoardId()); + Cache::getInstance().getState().bst().confirmed(getBoardId()); return GCFEvent::HANDLED; } diff --git a/MAC/APL/PIC/RSPDriver/src/CDOWrite.cc b/MAC/APL/PIC/RSPDriver/src/CDOWrite.cc index fd4ff668d04..8e92e341371 100644 --- a/MAC/APL/PIC/RSPDriver/src/CDOWrite.cc +++ b/MAC/APL/PIC/RSPDriver/src/CDOWrite.cc @@ -137,7 +137,7 @@ uint16 CDOWrite::compute_ip_checksum(void* addr, int count) void CDOWrite::sendrequest() { // skip update if the CDO settings have not been modified - if (RTC::RegisterState::MODIFIED != Cache::getInstance().getCDOState().get(getBoardId())) + if (RTC::RegisterState::MODIFIED != Cache::getInstance().getState().cdo().get(getBoardId())) { setContinue(true); return; @@ -198,8 +198,11 @@ GCFEvent::TResult CDOWrite::handleack(GCFEvent& event, GCFPortInterface& /*port* return GCFEvent::NOT_HANDLED; } - if ((N_CDO_REGISTERS-1) == getCurrentIndex()) { - Cache::getInstance().getCDOState().confirmed(getBoardId()); + if (0 == getCurrentIndex()) { + Cache::getInstance().getState().cdo().applied(getBoardId()); + } + if (1 == getCurrentIndex()) { + Cache::getInstance().getState().cdo().confirmed(getBoardId()); } return GCFEvent::HANDLED; diff --git a/MAC/APL/PIC/RSPDriver/src/Cache.cc b/MAC/APL/PIC/RSPDriver/src/Cache.cc index 922c77a8bba..97ab5d2ac03 100644 --- a/MAC/APL/PIC/RSPDriver/src/Cache.cc +++ b/MAC/APL/PIC/RSPDriver/src/Cache.cc @@ -258,47 +258,9 @@ Cache::Cache() : m_front(0), m_back(0) m_front = new CacheBuffer(this); ASSERT(m_front); m_back = new CacheBuffer(this); ASSERT(m_back); - // - // Make sure initial settings are sent - // - getSysState().resize(StationSettings::instance()->nrRspBoards()); - getSysState().modified(); - - getBFState().resize(StationSettings::instance()->nrRcus() * MEPHeader::N_PHASE); // XR, XI, YR, YI - getBFState().modified(); - - getSSState().resize(StationSettings::instance()->nrBlps()); - getSSState().modified(); - - getRCUSettingsState().resize(StationSettings::instance()->nrRcus()); - getRCUSettingsState().modified(); - - getRCUProtocolState().resize(StationSettings::instance()->nrRcus()); - getRCUProtocolState().modified(); - - getRSUClearState().resize(StationSettings::instance()->nrRspBoards()); - getRSUClearState().modified(); - - getDIAGWGSettingsState().resize(StationSettings::instance()->nrRcus()); - getDIAGWGSettingsState().modified(); - - getSstState().resize(StationSettings::instance()->nrBlps()); - getSstState().modified(); - - getBstState().resize(StationSettings::instance()->nrRspBoards()); - getBstState().modified(); - - getXstState().resize(StationSettings::instance()->nrRspBoards()); - getXstState().modified(); - - getCDOState().resize(StationSettings::instance()->nrRspBoards()); - getCDOState().modified(); - - getBSState().resize(StationSettings::instance()->nrBlps()); - getBSState().modified(); - - getTDSState().resize(StationSettings::instance()->nrRspBoards()); - getTDSState().modified(); + getState().init(StationSettings::instance()->nrRspBoards(), + StationSettings::instance()->nrBlps(), + StationSettings::instance()->nrRcus()); } Cache::~Cache() @@ -310,35 +272,9 @@ Cache::~Cache() void Cache::swapBuffers() { // clear modified flags on back buffer - getSysState().clear(); - getBFState().clear(); - getSSState().clear(); - getRCUSettingsState().clear(); - getRCUProtocolState().clear(); - getRSUClearState().clear(); - getDIAGWGSettingsState().clear(); - getSstState().clear(); - getBstState().clear(); - getXstState().clear(); - getCDOState().clear(); - getBSState().clear(); - getTDSState().clear(); - -#if 1 - cout << "System Status "; getSysState().print(cout); - cout << "BF "; getBFState().print(cout); - cout << "Subband Selection "; getSSState().print(cout); - cout << "RCUSettings "; getRCUSettingsState().print(cout); - cout << "RCUProtocol "; getRCUProtocolState().print(cout); - cout << "RSUClear "; getRSUClearState().print(cout); - cout << "DIAGWGSettings "; getDIAGWGSettingsState().print(cout); - cout << "SubbandStats "; getSstState().print(cout); - cout << "BeamletStats "; getBstState().print(cout); - cout << "XCorrelationStats "; getXstState().print(cout); - cout << "CDO "; getCDOState().print(cout); - cout << "BS "; getBSState().print(cout); - cout << "TDS "; getTDSState().print(cout); -#endif + getState().clear(); + + getState().print(cout); CacheBuffer *tmp = m_front; m_front = m_back; diff --git a/MAC/APL/PIC/RSPDriver/src/Cache.h b/MAC/APL/PIC/RSPDriver/src/Cache.h index 1aadacaf915..6af88ec9e89 100644 --- a/MAC/APL/PIC/RSPDriver/src/Cache.h +++ b/MAC/APL/PIC/RSPDriver/src/Cache.h @@ -25,7 +25,7 @@ #ifndef CACHE_H_ #define CACHE_H_ -#include <APL/RTCCommon/RegisterState.h> +#include <APL/RSP_Protocol/AllRegisterState.h> #include <APL/RSP_Protocol/RSP_Protocol.ph> #include <blitz/array.h> #include <Common/LofarTypes.h> @@ -122,19 +122,7 @@ namespace LOFAR { /** * Get register states. */ - RTC::RegisterState& getSysState() { return sys_state; } - RTC::RegisterState& getBFState() { return bf_state; } - RTC::RegisterState& getSSState() { return ss_state; } - RTC::RegisterState& getRCUSettingsState() { return rcusettings_state; } - RTC::RegisterState& getRCUProtocolState() { return rcuprotocol_state; } - RTC::RegisterState& getRSUClearState() { return rsuclear_state; } - RTC::RegisterState& getDIAGWGSettingsState() { return diagwgsettings_state; } - RTC::RegisterState& getSstState() { return sst_state; } - RTC::RegisterState& getBstState() { return bst_state; } - RTC::RegisterState& getXstState() { return xst_state; } - RTC::RegisterState& getCDOState() { return cdo_state; } - RTC::RegisterState& getBSState() { return bs_state; } - RTC::RegisterState& getTDSState() { return tds_state; } + AllRegisterState& getState() { return m_allstate; } private: @@ -146,19 +134,7 @@ namespace LOFAR { /** * Keep register update state. */ - RTC::RegisterState sys_state; // RSR state - RTC::RegisterState bf_state; // BF weights state - RTC::RegisterState ss_state; // SS state - RTC::RegisterState rcusettings_state; // RCU settings state - RTC::RegisterState rcuprotocol_state; // RCU protocol state - RTC::RegisterState rsuclear_state; // RSU clear state - RTC::RegisterState diagwgsettings_state; // DIAG WG settings state - RTC::RegisterState sst_state; // SST state - RTC::RegisterState bst_state; // BST state - RTC::RegisterState xst_state; // XST State - RTC::RegisterState cdo_state; // CDO state - RTC::RegisterState bs_state; // BS register state - RTC::RegisterState tds_state; // TDS register state (Clock board) + AllRegisterState m_allstate; // communication status of all register /*@{*/ /** diff --git a/MAC/APL/PIC/RSPDriver/src/RCUProtocolWrite.cc b/MAC/APL/PIC/RSPDriver/src/RCUProtocolWrite.cc index 77adbc03cc2..3f1ac6270d8 100644 --- a/MAC/APL/PIC/RSPDriver/src/RCUProtocolWrite.cc +++ b/MAC/APL/PIC/RSPDriver/src/RCUProtocolWrite.cc @@ -81,7 +81,7 @@ void RCUProtocolWrite::sendrequest() uint8 global_rcu = (getBoardId() * StationSettings::instance()->nrBlpsPerBoard() * MEPHeader::N_POL) + (getCurrentIndex() / N_WRITES); // skip update if the RCU settings have not been modified - if (RTC::RegisterState::MODIFIED != Cache::getInstance().getRCUProtocolState().get(global_rcu)) { + if (RTC::RegisterState::MODIFIED != Cache::getInstance().getState().rcuprotocol().get(global_rcu)) { setContinue(true); return; } @@ -163,7 +163,7 @@ GCFEvent::TResult RCUProtocolWrite::handleack(GCFEvent& event, GCFPortInterface& // Mark modification as applied when write of RCU result register has completed uint8 global_rcu = (getBoardId() * StationSettings::instance()->nrRcusPerBoard()) + (getCurrentIndex() / N_WRITES); - Cache::getInstance().getRCUProtocolState().applied(global_rcu); + Cache::getInstance().getState().rcuprotocol().applied(global_rcu); } diff --git a/MAC/APL/PIC/RSPDriver/src/RCUResultRead.cc b/MAC/APL/PIC/RSPDriver/src/RCUResultRead.cc index 18ab9454894..2da3d21ab7e 100644 --- a/MAC/APL/PIC/RSPDriver/src/RCUResultRead.cc +++ b/MAC/APL/PIC/RSPDriver/src/RCUResultRead.cc @@ -56,7 +56,7 @@ void RCUResultRead::sendrequest() uint8 global_rcu = (getBoardId() * StationSettings::instance()->nrBlpsPerBoard() * MEPHeader::N_POL) + getCurrentIndex(); // skip update if the RCU settings have not been applied yet - if (RTC::RegisterState::APPLIED != Cache::getInstance().getRCUProtocolState().get(global_rcu)) + if (RTC::RegisterState::APPLIED != Cache::getInstance().getState().rcuprotocol().get(global_rcu)) { setContinue(true); return; @@ -106,7 +106,7 @@ GCFEvent::TResult RCUResultRead::handleack(GCFEvent& event, GCFPortInterface& /* memcpy(RCUProtocolWrite::i2c_result + 1, &control, 3); if (0 == memcmp(RCUProtocolWrite::i2c_result, ack.result, sizeof(RCUProtocolWrite::i2c_result))) { - Cache::getInstance().getRCUProtocolState().confirmed(global_rcu); + Cache::getInstance().getState().rcuprotocol().confirmed(global_rcu); } else { LOG_ERROR("RCUResultRead::handleack: unexpected I2C result response"); } diff --git a/MAC/APL/PIC/RSPDriver/src/RCUWrite.cc b/MAC/APL/PIC/RSPDriver/src/RCUWrite.cc index 887dacf6902..f190ba21d03 100644 --- a/MAC/APL/PIC/RSPDriver/src/RCUWrite.cc +++ b/MAC/APL/PIC/RSPDriver/src/RCUWrite.cc @@ -51,8 +51,8 @@ void RCUWrite::sendrequest() uint8 global_blp = (getBoardId() * StationSettings::instance()->nrBlpsPerBoard()) + getCurrentIndex(); // skip update if the neither of the RCU's settings have been modified - if (RTC::RegisterState::MODIFIED != Cache::getInstance().getRCUSettingsState().get(global_blp * 2) - && RTC::RegisterState::MODIFIED != Cache::getInstance().getRCUSettingsState().get(global_blp * 2 + 1)) { + if (RTC::RegisterState::MODIFIED != Cache::getInstance().getState().rcusettings().get(global_blp * 2) + && RTC::RegisterState::MODIFIED != Cache::getInstance().getState().rcusettings().get(global_blp * 2 + 1)) { setContinue(true); return; } @@ -97,8 +97,8 @@ GCFEvent::TResult RCUWrite::handleack(GCFEvent& event, GCFPortInterface& /*port* uint8 global_blp = (getBoardId() * StationSettings::instance()->nrBlpsPerBoard()) + getCurrentIndex(); - Cache::getInstance().getRCUSettingsState().confirmed(global_blp * 2); - Cache::getInstance().getRCUSettingsState().confirmed(global_blp * 2 + 1); + Cache::getInstance().getState().rcusettings().confirmed(global_blp * 2); + Cache::getInstance().getState().rcusettings().confirmed(global_blp * 2 + 1); return GCFEvent::HANDLED; } diff --git a/MAC/APL/PIC/RSPDriver/src/RSUWrite.cc b/MAC/APL/PIC/RSPDriver/src/RSUWrite.cc index 726f7337abf..d4f7bf63f9d 100644 --- a/MAC/APL/PIC/RSPDriver/src/RSUWrite.cc +++ b/MAC/APL/PIC/RSPDriver/src/RSUWrite.cc @@ -62,7 +62,7 @@ void RSUWrite::sendrequest() reset.hdr.set(MEPHeader::RSU_RESET_HDR); // cache modified? - if (RTC::RegisterState::MODIFIED != Cache::getInstance().getRSUClearState().get(getBoardId())) { + if (RTC::RegisterState::MODIFIED != Cache::getInstance().getState().rsuclear().get(getBoardId())) { setContinue(true); return; } @@ -73,7 +73,6 @@ void RSUWrite::sendrequest() else if (s()(getBoardId()).getClear()) reset.reset = g_RSU_RESET_CLEAR; else if (s()(getBoardId()).getReset()) reset.reset = g_RSU_RESET_RESET; else { - Cache::getInstance().getRSUClearState().confirmed(getBoardId()); setContinue(true); return; } @@ -103,7 +102,7 @@ GCFEvent::TResult RSUWrite::handleack(GCFEvent& event, GCFPortInterface& /*port* return GCFEvent::NOT_HANDLED; } - Cache::getInstance().getRSUClearState().confirmed(getBoardId()); + Cache::getInstance().getState().rsuclear().confirmed(getBoardId()); return GCFEvent::HANDLED; } diff --git a/MAC/APL/PIC/RSPDriver/src/SSRead.cc b/MAC/APL/PIC/RSPDriver/src/SSRead.cc index 4fd90997641..9fcb60b969f 100644 --- a/MAC/APL/PIC/RSPDriver/src/SSRead.cc +++ b/MAC/APL/PIC/RSPDriver/src/SSRead.cc @@ -50,7 +50,7 @@ SSRead::~SSRead() void SSRead::sendrequest() { uint8 global_blp = (getBoardId() * StationSettings::instance()->nrBlpsPerBoard()) + getCurrentIndex(); - Cache::getInstance().getSSState().modified(global_blp); + Cache::getInstance().getState().ss().modified(global_blp); EPAReadEvent ssread; ssread.hdr.set(MEPHeader::SS_SELECT_HDR, 1 << getCurrentIndex(), @@ -79,7 +79,7 @@ GCFEvent::TResult SSRead::handleack(GCFEvent& event, GCFPortInterface& /*port*/) uint8 global_blp = (getBoardId() * StationSettings::instance()->nrBlpsPerBoard()) + getCurrentIndex(); if (!ss.hdr.isValidAck(m_hdr)) { - Cache::getInstance().getSSState().applied(global_blp); + Cache::getInstance().getState().ss().applied(global_blp); LOG_ERROR("SSRead::handleack: invalid ack"); return GCFEvent::NOT_HANDLED; } @@ -115,7 +115,7 @@ GCFEvent::TResult SSRead::handleack(GCFEvent& event, GCFPortInterface& /*port*/) = subbands(Range::all(), 1); // y } - Cache::getInstance().getSSState().confirmed(global_blp); + Cache::getInstance().getState().ss().confirmed(global_blp); return GCFEvent::HANDLED; } diff --git a/MAC/APL/PIC/RSPDriver/src/SSWrite.cc b/MAC/APL/PIC/RSPDriver/src/SSWrite.cc index df687651e3c..7ecdf28fbbf 100644 --- a/MAC/APL/PIC/RSPDriver/src/SSWrite.cc +++ b/MAC/APL/PIC/RSPDriver/src/SSWrite.cc @@ -58,7 +58,7 @@ void SSWrite::sendrequest() global_blp)); // mark modified - Cache::getInstance().getSSState().modified(global_blp); + Cache::getInstance().getState().ss().modified(global_blp); // send subband select message EPASsSelectEvent ss; @@ -96,13 +96,13 @@ GCFEvent::TResult SSWrite::handleack(GCFEvent& event, GCFPortInterface& /*port*/ if (!ack.hdr.isValidAck(m_hdr)) { - Cache::getInstance().getSSState().applied(global_blp); + Cache::getInstance().getState().ss().applied(global_blp); LOG_ERROR("SSWrite::handleack: invalid ack"); return GCFEvent::NOT_HANDLED; } - Cache::getInstance().getSSState().confirmed(global_blp); + Cache::getInstance().getState().ss().confirmed(global_blp); return GCFEvent::HANDLED; } diff --git a/MAC/APL/PIC/RSPDriver/src/SetClocksCmd.cc b/MAC/APL/PIC/RSPDriver/src/SetClocksCmd.cc index e5039100dc5..e77ae13a5ca 100644 --- a/MAC/APL/PIC/RSPDriver/src/SetClocksCmd.cc +++ b/MAC/APL/PIC/RSPDriver/src/SetClocksCmd.cc @@ -64,9 +64,9 @@ void SetClocksCmd::apply(CacheBuffer& cache, bool setModFlag) { cache.getClock() = m_event->clock; if (setModFlag) { - cache.getCache().getBSState().modified(); + cache.getCache().getState().bs().modified(); } - cache.getCache().getTDSState().modified(); + cache.getCache().getState().tds().modified(); } void SetClocksCmd::complete(CacheBuffer& /*cache*/) diff --git a/MAC/APL/PIC/RSPDriver/src/SetRCUCmd.cc b/MAC/APL/PIC/RSPDriver/src/SetRCUCmd.cc index 59c4c20e32d..82dc5b77f45 100644 --- a/MAC/APL/PIC/RSPDriver/src/SetRCUCmd.cc +++ b/MAC/APL/PIC/RSPDriver/src/SetRCUCmd.cc @@ -70,10 +70,10 @@ void SetRCUCmd::apply(CacheBuffer& cache, bool setModFlag) cache.getRCUSettings()()(cache_rcu) = m_event->settings()(0); if (setModFlag) { // reset BS if needed - cache.getCache().getBSState().modified(cache_rcu / MEPHeader::N_POL); + cache.getCache().getState().bs().modified(cache_rcu / MEPHeader::N_POL); - cache.getCache().getRCUSettingsState().modified(cache_rcu); - cache.getCache().getRCUProtocolState().modified(cache_rcu); + cache.getCache().getState().rcusettings().modified(cache_rcu); + cache.getCache().getState().rcuprotocol().modified(cache_rcu); } } } diff --git a/MAC/APL/PIC/RSPDriver/src/SetRSUCmd.cc b/MAC/APL/PIC/RSPDriver/src/SetRSUCmd.cc index bd9301157a7..3e9b52416af 100644 --- a/MAC/APL/PIC/RSPDriver/src/SetRSUCmd.cc +++ b/MAC/APL/PIC/RSPDriver/src/SetRSUCmd.cc @@ -70,7 +70,7 @@ void SetRSUCmd::apply(CacheBuffer& cache, bool setModFlag) cache.getRSUSettings()()(cache_rsp) = m_event->settings()(0); if (setModFlag) { - cache.getCache().getRSUClearState().modified(cache_rsp); + cache.getCache().getState().rsuclear().modified(cache_rsp); } } } diff --git a/MAC/APL/PIC/RSPDriver/src/SetWGCmd.cc b/MAC/APL/PIC/RSPDriver/src/SetWGCmd.cc index ad23c4b5c75..0ca8016eccc 100644 --- a/MAC/APL/PIC/RSPDriver/src/SetWGCmd.cc +++ b/MAC/APL/PIC/RSPDriver/src/SetWGCmd.cc @@ -69,9 +69,9 @@ void SetWGCmd::apply(CacheBuffer& cache, bool setModFlag) if (setModFlag) { // reset BS if needed - cache.getCache().getBSState().modified(cache_rcu / MEPHeader::N_POL); + cache.getCache().getState().bs().modified(cache_rcu / MEPHeader::N_POL); - cache.getCache().getDIAGWGSettingsState().modified(cache_rcu); + cache.getCache().getState().diagwgsettings().modified(cache_rcu); } } } diff --git a/MAC/APL/PIC/RSPDriver/src/SetWeightsCmd.cc b/MAC/APL/PIC/RSPDriver/src/SetWeightsCmd.cc index b81b5b05705..6525d0ac188 100644 --- a/MAC/APL/PIC/RSPDriver/src/SetWeightsCmd.cc +++ b/MAC/APL/PIC/RSPDriver/src/SetWeightsCmd.cc @@ -90,8 +90,8 @@ void SetWeightsCmd::apply(CacheBuffer& cache, bool setModFlag) m_event->weights()(0, input_rcu, Range::all()); if (setModFlag) { - cache.getCache().getBFState().modified(cache_rcu * MEPHeader::N_PHASE); - cache.getCache().getBFState().modified(cache_rcu * MEPHeader::N_PHASE + 1); + cache.getCache().getState().bf().modified(cache_rcu * MEPHeader::N_PHASE); + cache.getCache().getState().bf().modified(cache_rcu * MEPHeader::N_PHASE + 1); } input_rcu++; diff --git a/MAC/APL/PIC/RSPDriver/src/SstRead.cc b/MAC/APL/PIC/RSPDriver/src/SstRead.cc index d436b32e1bc..6b2483e71ec 100644 --- a/MAC/APL/PIC/RSPDriver/src/SstRead.cc +++ b/MAC/APL/PIC/RSPDriver/src/SstRead.cc @@ -54,7 +54,7 @@ void SstRead::sendrequest() EPAReadEvent sstread; uint8 global_blp = (getBoardId() * StationSettings::instance()->nrBlpsPerBoard()) + (getCurrentIndex() / SST_N_FRAGMENTS); - Cache::getInstance().getSstState().modified(global_blp); + Cache::getInstance().getState().sst().modified(global_blp); uint16 byteoffset = (getCurrentIndex() % SST_N_FRAGMENTS) * MEPHeader::FRAGMENT_SIZE; @@ -107,7 +107,7 @@ GCFEvent::TResult SstRead::handleack(GCFEvent& event, GCFPortInterface& /*port*/ if (!ack.hdr.isValidAck(m_hdr)) { - Cache::getInstance().getSstState().applied(global_blp); + Cache::getInstance().getState().sst().applied(global_blp); LOG_ERROR("SstRead::handleack: invalid ack"); return GCFEvent::NOT_HANDLED; } @@ -124,7 +124,7 @@ GCFEvent::TResult SstRead::handleack(GCFEvent& event, GCFPortInterface& /*port*/ if (MEPHeader::SST_POWER != ack.hdr.m_fields.addr.regid) { - Cache::getInstance().getSstState().applied(global_blp); + Cache::getInstance().getState().sst().applied(global_blp); LOG_ERROR("invalid sst ack"); return GCFEvent::HANDLED; } @@ -142,7 +142,7 @@ GCFEvent::TResult SstRead::handleack(GCFEvent& event, GCFPortInterface& /*port*/ // y-pol subband statistics: copy and convert to double cache(global_blp * 2 + 1, fragment_range) = convert_uint32_to_double(stats(Range::all(), 1)); - Cache::getInstance().getSstState().confirmed(global_blp); + Cache::getInstance().getState().sst().confirmed(global_blp); return GCFEvent::HANDLED; } diff --git a/MAC/APL/PIC/RSPDriver/src/StatusRead.cc b/MAC/APL/PIC/RSPDriver/src/StatusRead.cc index 61251c07212..4b7916443f6 100644 --- a/MAC/APL/PIC/RSPDriver/src/StatusRead.cc +++ b/MAC/APL/PIC/RSPDriver/src/StatusRead.cc @@ -51,7 +51,7 @@ StatusRead::~StatusRead() void StatusRead::sendrequest() { - Cache::getInstance().getXstState().modified(getBoardId()); + Cache::getInstance().getState().sys().modified(getBoardId()); // send read status request to check status of the write EPAReadEvent rspstatus; @@ -78,7 +78,7 @@ GCFEvent::TResult StatusRead::handleack(GCFEvent& event, GCFPortInterface& /*por if (!ack.hdr.isValidAck(m_hdr)) { - Cache::getInstance().getXstState().applied(getBoardId()); + Cache::getInstance().getState().sys().applied(getBoardId()); LOG_ERROR("StatusRead::handleack: invalid ack"); return GCFEvent::NOT_HANDLED; } @@ -110,7 +110,7 @@ GCFEvent::TResult StatusRead::handleack(GCFEvent& event, GCFPortInterface& /*por LOG_WARN(formatString("RSP[%02d]: slice_count mismatch", getBoardId())); } - Cache::getInstance().getXstState().confirmed(getBoardId()); + Cache::getInstance().getState().sys().confirmed(getBoardId()); return GCFEvent::HANDLED; } diff --git a/MAC/APL/PIC/RSPDriver/src/TDSProtocolWrite.cc b/MAC/APL/PIC/RSPDriver/src/TDSProtocolWrite.cc index 24965a8278e..c6ed5bd8928 100644 --- a/MAC/APL/PIC/RSPDriver/src/TDSProtocolWrite.cc +++ b/MAC/APL/PIC/RSPDriver/src/TDSProtocolWrite.cc @@ -145,7 +145,7 @@ void TDSProtocolWrite::sendrequest() void* buf = 0; // skip update if the Clocks settings have not been modified - if (RTC::RegisterState::MODIFIED != Cache::getInstance().getTDSState().get(getBoardId())) + if (RTC::RegisterState::MODIFIED != Cache::getInstance().getState().tds().get(getBoardId())) { setContinue(true); return; @@ -221,7 +221,7 @@ GCFEvent::TResult TDSProtocolWrite::handleack(GCFEvent& event, GCFPortInterface& // Mark register modification as applied // Still needs to be confirmed by TDSRegisterRead if (0 == m_remaining) { - Cache::getInstance().getTDSState().applied(getBoardId()); + Cache::getInstance().getState().tds().applied(getBoardId()); } return GCFEvent::HANDLED; diff --git a/MAC/APL/PIC/RSPDriver/src/TDSResultRead.cc b/MAC/APL/PIC/RSPDriver/src/TDSResultRead.cc index 51ae77352dc..316ed51caec 100644 --- a/MAC/APL/PIC/RSPDriver/src/TDSResultRead.cc +++ b/MAC/APL/PIC/RSPDriver/src/TDSResultRead.cc @@ -53,7 +53,7 @@ TDSResultRead::~TDSResultRead() void TDSResultRead::sendrequest() { // skip update if the Clocks settings have not been modified - if (RTC::RegisterState::APPLIED != Cache::getInstance().getTDSState().get(getBoardId())) + if (RTC::RegisterState::APPLIED != Cache::getInstance().getState().tds().get(getBoardId())) { setContinue(true); return; @@ -133,7 +133,7 @@ GCFEvent::TResult TDSResultRead::handleack(GCFEvent& event, GCFPortInterface& /* printbin(ack.result, sizeof(tds_160MHz_result)); idiff = imemcmp(tds_160MHz_result, ack.result, sizeof(tds_160MHz_result)); if (-1 == idiff) { - Cache::getInstance().getTDSState().confirmed(getBoardId()); + Cache::getInstance().getState().tds().confirmed(getBoardId()); } else { LOG_ERROR(formatString("TDSResultRead::handleack (160MHz): unexpected I2C result response, first mismatch @ %d", idiff)); } @@ -144,7 +144,7 @@ GCFEvent::TResult TDSResultRead::handleack(GCFEvent& event, GCFPortInterface& /* printbin(ack.result, sizeof(tds_200MHz_result)); idiff = imemcmp(tds_200MHz_result, ack.result, sizeof(tds_200MHz_result)); if (-1 == idiff) { - Cache::getInstance().getTDSState().confirmed(getBoardId()); + Cache::getInstance().getState().tds().confirmed(getBoardId()); } else { LOG_ERROR(formatString("TDSResultRead::handleack (200MHz): unexpected I2C result response, first mismatch @ %d", idiff)); } @@ -155,7 +155,7 @@ GCFEvent::TResult TDSResultRead::handleack(GCFEvent& event, GCFPortInterface& /* printbin(ack.result, sizeof(tds_off_result)); idiff = imemcmp(tds_off_result, ack.result, sizeof(tds_off_result)); if (-1 == idiff) { - Cache::getInstance().getTDSState().confirmed(getBoardId()); + Cache::getInstance().getState().tds().confirmed(getBoardId()); } else { LOG_ERROR(formatString("TDSResultRead::handleack (OFF): unexpected I2C result response, first mismatch @ %d", idiff)); } diff --git a/MAC/APL/PIC/RSPDriver/src/UpdClocksCmd.cc b/MAC/APL/PIC/RSPDriver/src/UpdClocksCmd.cc index 50b457b8a12..93f87ca31bd 100644 --- a/MAC/APL/PIC/RSPDriver/src/UpdClocksCmd.cc +++ b/MAC/APL/PIC/RSPDriver/src/UpdClocksCmd.cc @@ -73,7 +73,7 @@ void UpdClocksCmd::complete(CacheBuffer& cache) // only send ack if clock setting has been applied to all boards bool sendack = true; for (int cache_rsp = 0; cache_rsp < StationSettings::instance()->nrRspBoards(); cache_rsp++) { - if (RTC::RegisterState::APPLIED != cache.getCache().getTDSState().get(cache_rsp)) { + if (RTC::RegisterState::APPLIED != cache.getCache().getState().tds().get(cache_rsp)) { sendack = false; } } diff --git a/MAC/APL/PIC/RSPDriver/src/VersionsRead.cc b/MAC/APL/PIC/RSPDriver/src/VersionsRead.cc index d57f17063d0..13987a7edd3 100644 --- a/MAC/APL/PIC/RSPDriver/src/VersionsRead.cc +++ b/MAC/APL/PIC/RSPDriver/src/VersionsRead.cc @@ -60,7 +60,7 @@ void VersionsRead::sendrequest_status() // intentionally left empty } -GCFEvent::TResult VersionsRead::handleack(GCFEvent& event, GCFPortInterface& port) +GCFEvent::TResult VersionsRead::handleack(GCFEvent& event, GCFPortInterface& /*port*/) { if (EPA_RSR_VERSION != event.signal) { diff --git a/MAC/APL/PIC/RSPDriver/src/WGWrite.cc b/MAC/APL/PIC/RSPDriver/src/WGWrite.cc index c2787509b44..aeef57eada1 100644 --- a/MAC/APL/PIC/RSPDriver/src/WGWrite.cc +++ b/MAC/APL/PIC/RSPDriver/src/WGWrite.cc @@ -55,7 +55,7 @@ void WGWrite::sendrequest() { uint8 global_rcu = (getBoardId() * StationSettings::instance()->nrBlpsPerBoard() * MEPHeader::N_POL) + (getCurrentIndex() / N_REGISTERS); - if (RTC::RegisterState::MODIFIED != Cache::getInstance().getDIAGWGSettingsState().get(global_rcu)) { + if (RTC::RegisterState::MODIFIED != Cache::getInstance().getState().diagwgsettings().get(global_rcu)) { setContinue(true); return; } @@ -145,7 +145,7 @@ GCFEvent::TResult WGWrite::handleack(GCFEvent& event, GCFPortInterface& /*port*/ } // change state to indicate that it has been applied in the hardware - Cache::getInstance().getDIAGWGSettingsState().confirmed(getCurrentIndex() / N_REGISTERS); + Cache::getInstance().getState().diagwgsettings().confirmed(getCurrentIndex() / N_REGISTERS); return GCFEvent::HANDLED; } diff --git a/MAC/APL/PIC/RSPDriver/src/XstRead.cc b/MAC/APL/PIC/RSPDriver/src/XstRead.cc index a8fd89d61cf..35f28c74992 100644 --- a/MAC/APL/PIC/RSPDriver/src/XstRead.cc +++ b/MAC/APL/PIC/RSPDriver/src/XstRead.cc @@ -60,7 +60,7 @@ void XstRead::sendrequest() // uint16 offset = GET_CONFIG("RSPDriver.XST_FIRST_RSP_BOARD", i) * MEPHeader::XLET_SIZE; - Cache::getInstance().getXstState().modified(getBoardId()); + Cache::getInstance().getState().xst().modified(getBoardId()); if (m_regid < MEPHeader::XST_STATS || m_regid >= MEPHeader::XST_NR_STATS) { @@ -155,14 +155,14 @@ GCFEvent::TResult XstRead::handleack(GCFEvent& event, GCFPortInterface& /*port*/ if (!ack.hdr.isValidAck(m_hdr)) { - Cache::getInstance().getXstState().applied(getBoardId()); + Cache::getInstance().getState().xst().applied(getBoardId()); LOG_ERROR("XstRead::handleack: invalid ack"); return GCFEvent::NOT_HANDLED; } if (ack.hdr.m_fields.addr.regid >= MEPHeader::XST_NR_STATS) { - Cache::getInstance().getXstState().applied(getBoardId()); + Cache::getInstance().getState().xst().applied(getBoardId()); LOG_ERROR("invalid xst ack"); return GCFEvent::HANDLED; } @@ -193,7 +193,7 @@ GCFEvent::TResult XstRead::handleack(GCFEvent& event, GCFPortInterface& /*port*/ cache(rcu % MEPHeader::N_POL, 0, rcu / MEPHeader::N_POL, dst_range) = convert_cuint32_to_cdouble(xststats(Range::all(), 0)); cache(rcu % MEPHeader::N_POL, 1, rcu / MEPHeader::N_POL, dst_range) = convert_cuint32_to_cdouble(xststats(Range::all(), 1)); - Cache::getInstance().getXstState().confirmed(getBoardId()); + Cache::getInstance().getState().xst().confirmed(getBoardId()); return GCFEvent::HANDLED; } diff --git a/MAC/APL/PIC/RSPDriver/test/EPAStub.cc b/MAC/APL/PIC/RSPDriver/test/EPAStub.cc index 67a0f734e6b..c2d0bc3b2c7 100644 --- a/MAC/APL/PIC/RSPDriver/test/EPAStub.cc +++ b/MAC/APL/PIC/RSPDriver/test/EPAStub.cc @@ -133,71 +133,11 @@ EPAStub::EPAStub(string name) m_reg[MEPHeader::CDO][MEPHeader::CDO_SETTINGS].size = MEPHeader::CDO_SETTINGS_SIZE; m_reg[MEPHeader::CDO][MEPHeader::CDO_HEADER].addr = new char[MEPHeader::CDO_HEADER_SIZE]; m_reg[MEPHeader::CDO][MEPHeader::CDO_HEADER].size = MEPHeader::CDO_HEADER_SIZE; - - m_reg[MEPHeader::XST][MEPHeader::XST_0X0].addr = new char[MEPHeader::XST_STATS_SIZE]; - m_reg[MEPHeader::XST][MEPHeader::XST_0X0].size = MEPHeader::XST_STATS_SIZE; - m_reg[MEPHeader::XST][MEPHeader::XST_0Y0].addr = new char[MEPHeader::XST_STATS_SIZE]; - m_reg[MEPHeader::XST][MEPHeader::XST_0Y0].size = MEPHeader::XST_STATS_SIZE; - m_reg[MEPHeader::XST][MEPHeader::XST_1X0].addr = new char[MEPHeader::XST_STATS_SIZE]; - m_reg[MEPHeader::XST][MEPHeader::XST_1X0].size = MEPHeader::XST_STATS_SIZE; - m_reg[MEPHeader::XST][MEPHeader::XST_1Y0].addr = new char[MEPHeader::XST_STATS_SIZE]; - m_reg[MEPHeader::XST][MEPHeader::XST_1Y0].size = MEPHeader::XST_STATS_SIZE; - m_reg[MEPHeader::XST][MEPHeader::XST_2X0].addr = new char[MEPHeader::XST_STATS_SIZE]; - m_reg[MEPHeader::XST][MEPHeader::XST_2X0].size = MEPHeader::XST_STATS_SIZE; - m_reg[MEPHeader::XST][MEPHeader::XST_2Y0].addr = new char[MEPHeader::XST_STATS_SIZE]; - m_reg[MEPHeader::XST][MEPHeader::XST_2Y0].size = MEPHeader::XST_STATS_SIZE; - m_reg[MEPHeader::XST][MEPHeader::XST_3X0].addr = new char[MEPHeader::XST_STATS_SIZE]; - m_reg[MEPHeader::XST][MEPHeader::XST_3X0].size = MEPHeader::XST_STATS_SIZE; - m_reg[MEPHeader::XST][MEPHeader::XST_3Y0].addr = new char[MEPHeader::XST_STATS_SIZE]; - m_reg[MEPHeader::XST][MEPHeader::XST_3Y0].size = MEPHeader::XST_STATS_SIZE; - m_reg[MEPHeader::XST][MEPHeader::XST_0X1].addr = new char[MEPHeader::XST_STATS_SIZE]; - m_reg[MEPHeader::XST][MEPHeader::XST_0X1].size = MEPHeader::XST_STATS_SIZE; - m_reg[MEPHeader::XST][MEPHeader::XST_0Y1].addr = new char[MEPHeader::XST_STATS_SIZE]; - m_reg[MEPHeader::XST][MEPHeader::XST_0Y1].size = MEPHeader::XST_STATS_SIZE; - m_reg[MEPHeader::XST][MEPHeader::XST_1X1].addr = new char[MEPHeader::XST_STATS_SIZE]; - m_reg[MEPHeader::XST][MEPHeader::XST_1X1].size = MEPHeader::XST_STATS_SIZE; - m_reg[MEPHeader::XST][MEPHeader::XST_1Y1].addr = new char[MEPHeader::XST_STATS_SIZE]; - m_reg[MEPHeader::XST][MEPHeader::XST_1Y1].size = MEPHeader::XST_STATS_SIZE; - m_reg[MEPHeader::XST][MEPHeader::XST_2X1].addr = new char[MEPHeader::XST_STATS_SIZE]; - m_reg[MEPHeader::XST][MEPHeader::XST_2X1].size = MEPHeader::XST_STATS_SIZE; - m_reg[MEPHeader::XST][MEPHeader::XST_2Y1].addr = new char[MEPHeader::XST_STATS_SIZE]; - m_reg[MEPHeader::XST][MEPHeader::XST_2Y1].size = MEPHeader::XST_STATS_SIZE; - m_reg[MEPHeader::XST][MEPHeader::XST_3X1].addr = new char[MEPHeader::XST_STATS_SIZE]; - m_reg[MEPHeader::XST][MEPHeader::XST_3X1].size = MEPHeader::XST_STATS_SIZE; - m_reg[MEPHeader::XST][MEPHeader::XST_3Y1].addr = new char[MEPHeader::XST_STATS_SIZE]; - m_reg[MEPHeader::XST][MEPHeader::XST_3Y1].size = MEPHeader::XST_STATS_SIZE; - m_reg[MEPHeader::XST][MEPHeader::XST_0X2].addr = new char[MEPHeader::XST_STATS_SIZE]; - m_reg[MEPHeader::XST][MEPHeader::XST_0X2].size = MEPHeader::XST_STATS_SIZE; - m_reg[MEPHeader::XST][MEPHeader::XST_0Y2].addr = new char[MEPHeader::XST_STATS_SIZE]; - m_reg[MEPHeader::XST][MEPHeader::XST_0Y2].size = MEPHeader::XST_STATS_SIZE; - m_reg[MEPHeader::XST][MEPHeader::XST_1X2].addr = new char[MEPHeader::XST_STATS_SIZE]; - m_reg[MEPHeader::XST][MEPHeader::XST_1X2].size = MEPHeader::XST_STATS_SIZE; - m_reg[MEPHeader::XST][MEPHeader::XST_1Y2].addr = new char[MEPHeader::XST_STATS_SIZE]; - m_reg[MEPHeader::XST][MEPHeader::XST_1Y2].size = MEPHeader::XST_STATS_SIZE; - m_reg[MEPHeader::XST][MEPHeader::XST_2X2].addr = new char[MEPHeader::XST_STATS_SIZE]; - m_reg[MEPHeader::XST][MEPHeader::XST_2X2].size = MEPHeader::XST_STATS_SIZE; - m_reg[MEPHeader::XST][MEPHeader::XST_2Y2].addr = new char[MEPHeader::XST_STATS_SIZE]; - m_reg[MEPHeader::XST][MEPHeader::XST_2Y2].size = MEPHeader::XST_STATS_SIZE; - m_reg[MEPHeader::XST][MEPHeader::XST_3X2].addr = new char[MEPHeader::XST_STATS_SIZE]; - m_reg[MEPHeader::XST][MEPHeader::XST_3X2].size = MEPHeader::XST_STATS_SIZE; - m_reg[MEPHeader::XST][MEPHeader::XST_3Y2].addr = new char[MEPHeader::XST_STATS_SIZE]; - m_reg[MEPHeader::XST][MEPHeader::XST_3Y2].size = MEPHeader::XST_STATS_SIZE; - m_reg[MEPHeader::XST][MEPHeader::XST_0X3].addr = new char[MEPHeader::XST_STATS_SIZE]; - m_reg[MEPHeader::XST][MEPHeader::XST_0X3].size = MEPHeader::XST_STATS_SIZE; - m_reg[MEPHeader::XST][MEPHeader::XST_0Y3].addr = new char[MEPHeader::XST_STATS_SIZE]; - m_reg[MEPHeader::XST][MEPHeader::XST_0Y3].size = MEPHeader::XST_STATS_SIZE; - m_reg[MEPHeader::XST][MEPHeader::XST_1X3].addr = new char[MEPHeader::XST_STATS_SIZE]; - m_reg[MEPHeader::XST][MEPHeader::XST_1X3].size = MEPHeader::XST_STATS_SIZE; - m_reg[MEPHeader::XST][MEPHeader::XST_1Y3].addr = new char[MEPHeader::XST_STATS_SIZE]; - m_reg[MEPHeader::XST][MEPHeader::XST_1Y3].size = MEPHeader::XST_STATS_SIZE; - m_reg[MEPHeader::XST][MEPHeader::XST_2X3].addr = new char[MEPHeader::XST_STATS_SIZE]; - m_reg[MEPHeader::XST][MEPHeader::XST_2X3].size = MEPHeader::XST_STATS_SIZE; - m_reg[MEPHeader::XST][MEPHeader::XST_2Y3].addr = new char[MEPHeader::XST_STATS_SIZE]; - m_reg[MEPHeader::XST][MEPHeader::XST_2Y3].size = MEPHeader::XST_STATS_SIZE; - m_reg[MEPHeader::XST][MEPHeader::XST_3X3].addr = new char[MEPHeader::XST_STATS_SIZE]; - m_reg[MEPHeader::XST][MEPHeader::XST_3X3].size = MEPHeader::XST_STATS_SIZE; - m_reg[MEPHeader::XST][MEPHeader::XST_3Y3].addr = new char[MEPHeader::XST_STATS_SIZE]; - m_reg[MEPHeader::XST][MEPHeader::XST_3Y3].size = MEPHeader::XST_STATS_SIZE; + + for (int i = 0; i < MEPHeader::XST_NR_STATS; i++) { + m_reg[MEPHeader::XST][i].addr = new char[MEPHeader::XST_STATS_SIZE]; + m_reg[MEPHeader::XST][i].size = MEPHeader::XST_STATS_SIZE; + } m_reg[MEPHeader::BS][MEPHeader::BS_NOF_SAMPLES_PER_SYNC].addr = new char[MEPHeader::BS_NOF_SAMPLES_PER_SYNC_SIZE * GET_CONFIG("EPAStub.N_BLPS", i)]; m_reg[MEPHeader::BS][MEPHeader::BS_NOF_SAMPLES_PER_SYNC].size = MEPHeader::BS_NOF_SAMPLES_PER_SYNC_SIZE; diff --git a/MAC/APL/PIC/RSP_Protocol/include/APL/RSP_Protocol/AllRegisterState.h b/MAC/APL/PIC/RSP_Protocol/include/APL/RSP_Protocol/AllRegisterState.h new file mode 100644 index 00000000000..7ba63305830 --- /dev/null +++ b/MAC/APL/PIC/RSP_Protocol/include/APL/RSP_Protocol/AllRegisterState.h @@ -0,0 +1,194 @@ +//# -*- mode: c++ -*- +//# +//# AllRegisterState.h: class that can contain the communication/update status of all register. +//# +//# Copyright (C) 2002-2004 +//# ASTRON (Netherlands Foundation for Research in Astronomy) +//# P.O.Box 2, 7990 AA Dwingeloo, The Netherlands, seg@astron.nl +//# +//# This program is free software; you can redistribute it and/or modify +//# it under the terms of the GNU General Public License as published by +//# the Free Software Foundation; either version 2 of the License, or +//# (at your option) any later version. +//# +//# This program is distributed in the hope that it will be useful, +//# but WITHOUT ANY WARRANTY; without even the implied warranty of +//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +//# GNU General Public License for more details. +//# +//# You should have received a copy of the GNU General Public License +//# along with this program; if not, write to the Free Software +//# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +//# +//# $Id$ + +#ifndef ALLREGISTERSTATE_H_ +#define ALLREGISTERSTATE_H_ + +#include <blitz/array.h> +#include <Common/LofarTypes.h> +#include <APL/RSP_Protocol/MEPHeader.h> +#include <APL/RTCCommon/RegisterState.h> +#include <iostream> + +namespace LOFAR { + namespace RSP_Protocol { + + /** + * This class is used to contain the RegisterState of all registers. + * + * It is used in the following events: + * GETREGISTERSTATEACK + * UPDREGISTERSTATE + * + */ + class AllRegisterState + { + public: + + /** + * Constructors for a AllRegisterState object. + */ + AllRegisterState() : m_nrcus(0) {} + + /* Destructor for AllRegisterState. */ + virtual ~AllRegisterState() {} + + public: + + void init(int nrRspBoards, int nrBlps, int nrRcus) { + + m_nrcus = nrRcus; + + // + // resize to appropriate size and mark modified + // to force initial update + // + sys_state.resize(nrRspBoards); + sys_state.modified(); + + bf_state.resize(nrRcus * EPA_Protocol::MEPHeader::N_PHASE); // XR, XI, YR, YI + bf_state.modified(); + + ss_state.resize(nrBlps); + ss_state.modified(); + + rcusettings_state.resize(nrRcus); + rcusettings_state.modified(); + + rcuprotocol_state.resize(nrRcus); + rcuprotocol_state.modified(); + + rsuclear_state.resize(nrRspBoards); + rsuclear_state.clear(); + + diagwgsettings_state.resize(nrRcus); + diagwgsettings_state.modified(); + + sst_state.resize(nrBlps); + sst_state.modified(); + + bst_state.resize(nrRspBoards); + bst_state.modified(); + + xst_state.resize(nrRspBoards); + xst_state.modified(); + + cdo_state.resize(nrRspBoards); + cdo_state.modified(); + + bs_state.resize(nrBlps); + bs_state.modified(); + + tds_state.resize(nrRspBoards); + tds_state.modified(); + } + + void clear() { + sys_state.clear(); + bf_state.clear(); + ss_state.clear(); + rcusettings_state.clear(); + rcuprotocol_state.clear(); + rsuclear_state.clear(); + diagwgsettings_state.clear(); + sst_state.clear(); + bst_state.clear(); + xst_state.clear(); + cdo_state.clear(); + bs_state.clear(); + tds_state.clear(); + } + + void print(std::ostream& out) const { + out << " "; + for (int i = 0; i < m_nrcus * EPA_Protocol::MEPHeader::N_POL; i++) { + out << (i % 10); + } + out << endl; + out << "System Status "; sys_state.print(out); + out << "BF "; bf_state.print(out); + out << "Subband Selection "; ss_state.print(out); + out << "RCUSettings "; rcusettings_state.print(out); + out << "RCUProtocol "; rcuprotocol_state.print(out); + out << "RSUClear "; rsuclear_state.print(out); + out << "DIAGWGSettings "; diagwgsettings_state.print(out); + out << "SubbandStats "; sst_state.print(out); + out << "BeamletStats "; bst_state.print(out); + out << "XCorrelationStats "; xst_state.print(out); + out << "CDO "; cdo_state.print(out); + out << "BS "; bs_state.print(out); + out << "TDS "; tds_state.print(out); + out << endl; + } + + /*@{*/ + /** + * marshalling methods + */ + unsigned int getSize(); + unsigned int pack (void* buffer); + unsigned int unpack(void *buffer); + /*@}*/ + + public: + /*@{*/ + /** + * Accessor methods + */ + RTC::RegisterState& sys() { return sys_state; } + RTC::RegisterState& bf() { return bf_state; } + RTC::RegisterState& ss() { return ss_state; } + RTC::RegisterState& rcusettings() { return rcusettings_state; } + RTC::RegisterState& rcuprotocol() { return rcuprotocol_state; } + RTC::RegisterState& rsuclear() { return rsuclear_state; } + RTC::RegisterState& diagwgsettings() { return diagwgsettings_state; } + RTC::RegisterState& sst() { return sst_state; } + RTC::RegisterState& bst() { return bst_state; } + RTC::RegisterState& xst() { return xst_state; } + RTC::RegisterState& cdo() { return cdo_state; } + RTC::RegisterState& bs() { return bs_state; } + RTC::RegisterState& tds() { return tds_state; } + /*@}*/ + + private: + RTC::RegisterState sys_state; // RSR state + RTC::RegisterState bf_state; // BF weights state + RTC::RegisterState ss_state; // SS state + RTC::RegisterState rcusettings_state; // RCU settings state + RTC::RegisterState rcuprotocol_state; // RCU protocol state + RTC::RegisterState rsuclear_state; // RSU clear state + RTC::RegisterState diagwgsettings_state; // DIAG WG settings state + RTC::RegisterState sst_state; // SST state + RTC::RegisterState bst_state; // BST state + RTC::RegisterState xst_state; // XST State + RTC::RegisterState cdo_state; // CDO state + RTC::RegisterState bs_state; // BS register state + RTC::RegisterState tds_state; // TDS register state (Clock board) + + int m_nrcus; + }; + }; +}; // namespace LOFAR + +#endif /* ALLREGISTERSTATE_H_ */ diff --git a/MAC/APL/PIC/RSP_Protocol/include/APL/RSP_Protocol/MEPHeader.h b/MAC/APL/PIC/RSP_Protocol/include/APL/RSP_Protocol/MEPHeader.h index 02502f9d028..121d4f3ca2e 100644 --- a/MAC/APL/PIC/RSP_Protocol/include/APL/RSP_Protocol/MEPHeader.h +++ b/MAC/APL/PIC/RSP_Protocol/include/APL/RSP_Protocol/MEPHeader.h @@ -195,7 +195,7 @@ namespace LOFAR { */ static const uint8 TBB_CONTROL = 0x00; - static const int MAX_REGID = XST_3Y3; // XST_3Y3 + static const int MAX_REGID = XST_NR_STATS - 1; /*@}*/ diff --git a/MAC/APL/PIC/RSP_Protocol/include/APL/RSP_Protocol/Makefile.am b/MAC/APL/PIC/RSP_Protocol/include/APL/RSP_Protocol/Makefile.am index 0f3fbd3db1d..623f956af4d 100644 --- a/MAC/APL/PIC/RSP_Protocol/include/APL/RSP_Protocol/Makefile.am +++ b/MAC/APL/PIC/RSP_Protocol/include/APL/RSP_Protocol/Makefile.am @@ -10,6 +10,7 @@ INSTHDRS = \ Versions.h \ WGSettings.h \ XCStatistics.h \ + AllRegisterState.h \ MEPHeader.h \ MEPData.h diff --git a/MAC/APL/PIC/RSP_Protocol/src/AllRegisterState.cc b/MAC/APL/PIC/RSP_Protocol/src/AllRegisterState.cc new file mode 100644 index 00000000000..1d64bdacf86 --- /dev/null +++ b/MAC/APL/PIC/RSP_Protocol/src/AllRegisterState.cc @@ -0,0 +1,94 @@ +//# AllRegisterState.h: implementation of the AllRegisterState class +//# +//# Copyright (C) 2002-2004 +//# ASTRON (Netherlands Foundation for Research in Astronomy) +//# P.O.Box 2, 7990 AA Dwingeloo, The Netherlands, seg@astron.nl +//# +//# This program is free software; you can redistribute it and/or modify +//# it under the terms of the GNU General Public License as published by +//# the Free Software Foundation; either version 2 of the License, or +//# (at your option) any later version. +//# +//# This program is distributed in the hope that it will be useful, +//# but WITHOUT ANY WARRANTY; without even the implied warranty of +//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +//# GNU General Public License for more details. +//# +//# You should have received a copy of the GNU General Public License +//# along with this program; if not, write to the Free Software +//# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +//# +//# $Id$ + +#include <lofar_config.h> +#include <Common/LofarLogger.h> + +#include <APL/RSP_Protocol/AllRegisterState.h> +#include <APL/RTCCommon/Marshalling.h> + +using namespace std; +using namespace blitz; +using namespace LOFAR; +using namespace RSP_Protocol; + +unsigned int AllRegisterState::getSize() +{ + return + sys_state.getSize() + + bf_state.getSize() + + ss_state.getSize() + + rcusettings_state.getSize() + + rcuprotocol_state.getSize() + + rsuclear_state.getSize() + + diagwgsettings_state.getSize() + + sst_state.getSize() + + bst_state.getSize() + + xst_state.getSize() + + cdo_state.getSize() + + bs_state.getSize() + + tds_state.getSize(); +} + +unsigned int AllRegisterState::pack (void* buffer) +{ + unsigned int offset = 0; + + offset = + sys_state.pack(buffer) + + bf_state.pack(buffer) + + ss_state.pack(buffer) + + rcusettings_state.pack(buffer) + + rcuprotocol_state.pack(buffer) + + rsuclear_state.pack(buffer) + + diagwgsettings_state.pack(buffer) + + sst_state.pack(buffer) + + bst_state.pack(buffer) + + xst_state.pack(buffer) + + cdo_state.pack(buffer) + + bs_state.pack(buffer) + + tds_state.pack(buffer); + + return offset; +} + +unsigned int AllRegisterState::unpack(void *buffer) +{ + unsigned int offset = 0; + + offset = + sys_state.unpack(buffer) + + bf_state.unpack(buffer) + + ss_state.unpack(buffer) + + rcusettings_state.unpack(buffer) + + rcuprotocol_state.unpack(buffer) + + rsuclear_state.unpack(buffer) + + diagwgsettings_state.unpack(buffer) + + sst_state.unpack(buffer) + + bst_state.unpack(buffer) + + xst_state.unpack(buffer) + + cdo_state.unpack(buffer) + + bs_state.unpack(buffer) + + tds_state.unpack(buffer); + + return offset; +} diff --git a/MAC/APL/PIC/RSP_Protocol/src/Makefile.am b/MAC/APL/PIC/RSP_Protocol/src/Makefile.am index 3520eb6de9d..4151494b7b1 100644 --- a/MAC/APL/PIC/RSP_Protocol/src/Makefile.am +++ b/MAC/APL/PIC/RSP_Protocol/src/Makefile.am @@ -42,6 +42,7 @@ librsp_protocol_la_SOURCES = \ Versions.cc \ WGSettings.cc \ XCStatistics.cc \ + AllRegisterState.cc \ MEPHeader.cc \ MEPData.cc diff --git a/MAC/APL/PIC/RSP_Protocol/src/RSP_Protocol.prot b/MAC/APL/PIC/RSP_Protocol/src/RSP_Protocol.prot index ec9fcff1d1a..11f62f5c78a 100644 --- a/MAC/APL/PIC/RSP_Protocol/src/RSP_Protocol.prot +++ b/MAC/APL/PIC/RSP_Protocol/src/RSP_Protocol.prot @@ -24,6 +24,7 @@ include = '<APL/RSP_Protocol/SystemStatus.h>'; include = '<APL/RSP_Protocol/Statistics.h>'; include = '<APL/RSP_Protocol/XCStatistics.h>'; include = '<APL/RSP_Protocol/Versions.h>'; +include = '<APL/RSP_Protocol/AllRegisterState.h>'; include = '<APL/RSP_Protocol/MEPHeader.h>'; prelude = << PRELUDE_END @@ -1127,3 +1128,114 @@ event = { type = "uint32"; }; }; + +event = { + signal = GETREGISTERSTATE; + dir = IN; + param = { + name = "timestamp"; + type = "RTC::Timestamp"; + userdefined; + }; +}; + +event = { + signal = GETREGISTERSTATEACK; + dir = OUT; + param = { + name = "timestamp"; + type = "RTC::Timestamp"; + userdefined; + }; + param = { + name = "status"; + type = "int16"; + }; + param = { + name = "state"; + type = "AllRegisterState"; + userdefined; + }; +}; + +event = { + signal = SUBREGISTERSTATE; + dir = IN; + param = { + name = "timestamp"; + type = "RTC::Timestamp"; + userdefined; + }; + param = { + name = "period"; + type = "uint16"; + }; +}; + +event = { + signal = SUBREGISTERSTATEACK; + dir = OUT; + param = { + name = "timestamp"; + type = "RTC::Timestamp"; + userdefined; + }; + param = { + name = "status"; + type = "int16"; + }; + param = { + name = "handle"; + type = "uint32"; + }; +}; + +event = { + signal = UPDREGISTERSTATE; + dir = OUT; + param = { + name = "timestamp"; + type = "RTC::Timestamp"; + userdefined; + }; + param = { + name = "status"; + type = "int16"; + }; + param = { + name = "handle"; + type = "uint32"; + }; + param = { + name = "state"; + type = "AllRegisterState"; + userdefined; + }; +}; + +event = { + signal = UNSUBREGISTERSTATE; + dir = IN; + param = { + name = "handle"; + type = "uint32"; + }; +}; + +event = { + signal = UNSUBREGISTERSTATEACK; + dir = OUT; + param = { + name = "timestamp"; + type = "RTC::Timestamp"; + userdefined; + }; + param = { + name = "status"; + type = "int16"; + }; + param = { + name = "handle"; + type = "uint32"; + }; +}; diff --git a/MAC/APL/RTCCommon/include/APL/RTCCommon/Marshalling.h b/MAC/APL/RTCCommon/include/APL/RTCCommon/Marshalling.h index 0218ced3152..300e72eb3bf 100644 --- a/MAC/APL/RTCCommon/include/APL/RTCCommon/Marshalling.h +++ b/MAC/APL/RTCCommon/include/APL/RTCCommon/Marshalling.h @@ -35,7 +35,7 @@ #define MSH_PACK_ARRAY(bufptr, offset, array, datatype) \ do { \ - for (int dim = firstDim; dim < firstDim + (array).dimensions(); dim++) \ + for (int dim = blitz::firstDim; dim < blitz::firstDim + (array).dimensions(); dim++) \ { \ int32 extent = (array).extent(dim); \ memcpy(((char*)(bufptr)) + (offset), &extent, sizeof(int32)); \ @@ -56,14 +56,14 @@ do { \ #define MSH_UNPACK_ARRAY(bufptr, offset, array, datatype, dims) \ do { \ - TinyVector<int, (dims)> extent; \ + blitz::TinyVector<int, (dims)> extent; \ \ - for (int dim = firstDim; dim < firstDim + (dims); dim++) \ + for (int dim = blitz::firstDim; dim < blitz::firstDim + (dims); dim++) \ { \ int32 extenttmp = array.extent(dim); \ memcpy(&extenttmp, ((char*)(bufptr)) + (offset), sizeof(int32)); \ offset += sizeof(int32); \ - extent(dim - firstDim) = extenttmp; \ + extent(dim - blitz::firstDim) = extenttmp; \ } \ \ /* resize the array to the correct size */ \ diff --git a/MAC/APL/RTCCommon/include/APL/RTCCommon/RegisterState.h b/MAC/APL/RTCCommon/include/APL/RTCCommon/RegisterState.h index 5d77362ff32..705008b3f87 100644 --- a/MAC/APL/RTCCommon/include/APL/RTCCommon/RegisterState.h +++ b/MAC/APL/RTCCommon/include/APL/RTCCommon/RegisterState.h @@ -27,6 +27,7 @@ #include <blitz/array.h> #include <Common/LofarLogger.h> +#include <APL/RTCCommon/Marshalling.h> #include <iostream> namespace LOFAR { @@ -37,14 +38,14 @@ namespace LOFAR { public: typedef enum State { - INVALID = 0, + UNDEFINED = 0, NOT_MODIFIED = 1, MODIFIED = 2, APPLIED = 3, CONFIRMED = 4, }; - - explicit RegisterState(State state = NOT_MODIFIED) + + explicit RegisterState(State state = UNDEFINED) { m_state.resize(1); m_state = state; @@ -147,7 +148,7 @@ namespace LOFAR { { if (i < 0) { for (int j = 0; j < m_state.extent(blitz::firstDim); j++) { - if (CONFIRMED == m_state(j)) { + if (CONFIRMED == m_state(j) || UNDEFINED == m_state(j)) { m_state(j) = NOT_MODIFIED; } } @@ -164,8 +165,42 @@ namespace LOFAR { return m_state(i); } - void print(std::ostream& c) const { - c << m_state << endl; + void print(std::ostream& out) const { + for (int i = 0; i < m_state.extent(blitz::firstDim); i++) { + char c; + switch (m_state(i)) { + case UNDEFINED: c = '?'; break; + case NOT_MODIFIED: c = '.'; break; + case MODIFIED: c = 'M'; break; + case APPLIED: c = 'A'; break; + case CONFIRMED: c = 'C'; break; + default: c = 'X'; break; + } + out << c; + } + out << "$" << endl; + } + + public: + /* marshalling methods */ + unsigned int getSize() { + return MSH_ARRAY_SIZE(m_state, RegisterState); + } + + unsigned int pack(void* buffer) { + unsigned int offset = 0; + + MSH_PACK_ARRAY(buffer, offset, m_state, RegisterState); + + return offset; + } + + unsigned int unpack(void* buffer) { + unsigned int offset = 0; + + MSH_UNPACK_ARRAY(buffer, offset, m_state, RegisterState, 1); + + return offset; } private: -- GitLab