From 4e3b40e9c6d01e2449657e921d457cba64c1850b Mon Sep 17 00:00:00 2001
From: wierenga <sdos@astron.nl>
Date: Wed, 24 May 2006 15:15:37 +0000
Subject: [PATCH] BugID: 646 Fix some minor bugs in the RegisterState class.
 Now the state of all registers is properly reported.

---
 MAC/APL/PIC/RSPDriver/src/RCUProtocolWrite.cc |  2 +-
 MAC/APL/PIC/RSPDriver/src/RCUResultRead.cc    | 12 +---------
 MAC/APL/PIC/RSPDriver/src/RCUResultRead.h     |  1 -
 MAC/APL/PIC/RSPDriver/src/TDSProtocolWrite.cc |  2 +-
 .../APL/RSP_Protocol/AllRegisterState.h       | 22 +++++++++----------
 .../include/APL/RTCCommon/RegisterState.h     |  3 ++-
 MAC/APL/RTCCommon/src/RegisterState.cc        |  6 +++--
 7 files changed, 20 insertions(+), 28 deletions(-)

diff --git a/MAC/APL/PIC/RSPDriver/src/RCUProtocolWrite.cc b/MAC/APL/PIC/RSPDriver/src/RCUProtocolWrite.cc
index d99a7aaa191..9b881fd6a7e 100644
--- a/MAC/APL/PIC/RSPDriver/src/RCUProtocolWrite.cc
+++ b/MAC/APL/PIC/RSPDriver/src/RCUProtocolWrite.cc
@@ -166,7 +166,7 @@ GCFEvent::TResult RCUProtocolWrite::handleack(GCFEvent& event, GCFPortInterface&
 
     // Mark modification as applied when write of RCU result register has completed
 
-    Cache::getInstance().getState().rcuprotocol().schedule_read(global_rcu);
+    Cache::getInstance().getState().rcuprotocol().read_schedule(global_rcu);
 
   }
   
diff --git a/MAC/APL/PIC/RSPDriver/src/RCUResultRead.cc b/MAC/APL/PIC/RSPDriver/src/RCUResultRead.cc
index 8b1b4fb40f7..370b4643077 100644
--- a/MAC/APL/PIC/RSPDriver/src/RCUResultRead.cc
+++ b/MAC/APL/PIC/RSPDriver/src/RCUResultRead.cc
@@ -38,11 +38,8 @@ using namespace LOFAR;
 using namespace RSP;
 using namespace EPA_Protocol;
 
-#define RCURESULTREAD_DELAY 2
-
 RCUResultRead::RCUResultRead(GCFPortInterface& board_port, int board_id)
-  : SyncAction(board_port, board_id, StationSettings::instance()->nrBlpsPerBoard() * MEPHeader::N_POL), // *N_POL for X and Y
-    m_delay(0)
+  : SyncAction(board_port, board_id, StationSettings::instance()->nrBlpsPerBoard() * MEPHeader::N_POL) // *N_POL for X and Y
 {
   memset(&m_hdr, 0, sizeof(MEPHeader));
 }
@@ -62,13 +59,6 @@ void RCUResultRead::sendrequest()
     return;
   }
 
-  // delay TDSRESULTREAD_DELAY periods
-  if (m_delay++ < RCURESULTREAD_DELAY) {
-    setContinue(true);
-    return;
-  }
-  m_delay = 0;
-
   // set appropriate header
   MEPHeader::FieldsType hdr;
   if (0 == global_rcu % MEPHeader::N_POL) {
diff --git a/MAC/APL/PIC/RSPDriver/src/RCUResultRead.h b/MAC/APL/PIC/RSPDriver/src/RCUResultRead.h
index 98cc3e888d5..52ed9ebf25f 100644
--- a/MAC/APL/PIC/RSPDriver/src/RCUResultRead.h
+++ b/MAC/APL/PIC/RSPDriver/src/RCUResultRead.h
@@ -60,7 +60,6 @@ namespace LOFAR {
 
     private:
       EPA_Protocol::MEPHeader m_hdr;
-      int m_delay; // used to delay reading back results
     };
   };
 };
diff --git a/MAC/APL/PIC/RSPDriver/src/TDSProtocolWrite.cc b/MAC/APL/PIC/RSPDriver/src/TDSProtocolWrite.cc
index 97d4317ee90..be4d181b5ce 100644
--- a/MAC/APL/PIC/RSPDriver/src/TDSProtocolWrite.cc
+++ b/MAC/APL/PIC/RSPDriver/src/TDSProtocolWrite.cc
@@ -223,7 +223,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().getState().tds().schedule_read(getBoardId());
+    Cache::getInstance().getState().tds().read_schedule(getBoardId());
   }
 
   return GCFEvent::HANDLED;
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
index 66386960f47..c5f6720c9ec 100644
--- a/MAC/APL/PIC/RSP_Protocol/include/APL/RSP_Protocol/AllRegisterState.h
+++ b/MAC/APL/PIC/RSP_Protocol/include/APL/RSP_Protocol/AllRegisterState.h
@@ -83,24 +83,24 @@ namespace LOFAR {
 
 	void force() {
 	  sys_state.read();
-	  bf_state.write();
-	  ss_state.write();
-	  rcusettings_state.write();
-	  rcuprotocol_state.write();
-	  rsuclear_state.write();
-	  diagwgsettings_state.write();
+	  bf_state.write_force();
+	  ss_state.write_force();
+	  rcusettings_state.write_force();
+	  rcuprotocol_state.write_force();
+	  rsuclear_state.write_force();
+	  diagwgsettings_state.write_force();
 	  sst_state.read();
 	  bst_state.read();
 	  xst_state.read();
-	  cdo_state.write();
-	  bs_state.write();
-	  tds_state.write();
+	  cdo_state.write_force();
+	  bs_state.write_force();
+	  tds_state.write_force();
 	}
 
 	void schedule() {
 	  sys_state.read();
-	  bf_state.write();
-	  ss_state.write();
+	  bf_state.write_force();
+	  ss_state.write_force();
 	  rcusettings_state.check();
 	  rcuprotocol_state.check();
 	  rsuclear_state.check();
diff --git a/MAC/APL/RTCCommon/include/APL/RTCCommon/RegisterState.h b/MAC/APL/RTCCommon/include/APL/RTCCommon/RegisterState.h
index 6efd4db0194..c5c36ddfd44 100644
--- a/MAC/APL/RTCCommon/include/APL/RTCCommon/RegisterState.h
+++ b/MAC/APL/RTCCommon/include/APL/RTCCommon/RegisterState.h
@@ -99,9 +99,10 @@ namespace LOFAR {
 
 	void read         (int i = -1) { tran(IDLE,          READ,          i); }
 	void check        (int i = -1) { tran(IDLE,          CHECK,         i); }
+	void write_force  (int i = -1) { tran(IDLE,          WRITE,         i); }
 	void unmodified   (int i = -1) { tran(CHECK,         IDLE,          i); }
 	void write        (int i = -1) { tran(CHECK,         WRITE,         i); }
-	void schedule_read(int i = -1) { tran(WRITE,         READ,          i); }
+	void read_schedule(int i = -1) { tran(WRITE,         READ,          i); }
 	void read_ack     (int i = -1) { tran(READ,          DONE,          i); }
 	void write_ack    (int i = -1) { tran(WRITE,         DONE,          i); }
 	void read_error   (int i = -1) { tran(READ,          READ_ERROR,    i); }
diff --git a/MAC/APL/RTCCommon/src/RegisterState.cc b/MAC/APL/RTCCommon/src/RegisterState.cc
index e3ab1f3e9c7..0c953dbdc05 100644
--- a/MAC/APL/RTCCommon/src/RegisterState.cc
+++ b/MAC/APL/RTCCommon/src/RegisterState.cc
@@ -36,7 +36,8 @@ void RegisterState::tran(State source, State target, int i)
     ub = m_state.extent(blitz::firstDim);
   } else {
     ASSERT(i >= 0 && i < m_state.extent(blitz::firstDim));
-    lb = ub = i;
+    lb = i;
+    ub = i + 1;
   }
 
   for (int j = lb; j < ub; j++) {
@@ -59,7 +60,8 @@ void RegisterState::clear(int i)
     ub = m_state.extent(blitz::firstDim);
   } else {
     ASSERT(i >= 0 && i < m_state.extent(blitz::firstDim));
-    lb = ub = i;
+    lb = i;
+    ub = i + 1;
   }
    
   for (int j = lb; j < ub; j++) {
-- 
GitLab