From 8efd4f301e1102e84c62874814fdf14114224cd5 Mon Sep 17 00:00:00 2001
From: Pieter Donker <donker@astron.nl>
Date: Thu, 14 Jan 2010 18:48:33 +0000
Subject: [PATCH] Bug 335: add missed field to trigger msg

---
 MAC/APL/PIC/TBB_Driver/src/DriverSettings.h |  2 +-
 MAC/APL/PIC/TBB_Driver/src/MsgHandler.cc    |  6 ++++--
 MAC/APL/PIC/TBB_Driver/src/RawEvent.cc      |  4 ++--
 MAC/APL/PIC/TBB_Driver/src/TP_Protocol.prot |  2 +-
 MAC/APL/PIC/TBB_Driver/src/TrigInfoCmd.cc   |  5 ++++-
 MAC/APL/PIC/TBB_Driver/src/TrigInfoCmd.h    |  1 +
 MAC/APL/PIC/TBB_Driver/src/tbbctl.cc        | 16 +++++++++-------
 MAC/APL/PIC/TBB_Driver/src/tbbctl.h         |  2 +-
 8 files changed, 23 insertions(+), 15 deletions(-)

diff --git a/MAC/APL/PIC/TBB_Driver/src/DriverSettings.h b/MAC/APL/PIC/TBB_Driver/src/DriverSettings.h
index 512c659fc1c..6f3a626dfae 100644
--- a/MAC/APL/PIC/TBB_Driver/src/DriverSettings.h
+++ b/MAC/APL/PIC/TBB_Driver/src/DriverSettings.h
@@ -35,7 +35,7 @@ namespace LOFAR {
 	using GCF::TM::GCFPortInterface;
 	namespace TBB {
 
-static const int DRIVER_VERSION = 223; // TBBDriver V2.23
+static const int DRIVER_VERSION = 224;
 
 enum BoardStateT {noBoard,
 				  setImage1, image1Set,
diff --git a/MAC/APL/PIC/TBB_Driver/src/MsgHandler.cc b/MAC/APL/PIC/TBB_Driver/src/MsgHandler.cc
index 0a8ba18621d..9b7a3054119 100644
--- a/MAC/APL/PIC/TBB_Driver/src/MsgHandler.cc
+++ b/MAC/APL/PIC/TBB_Driver/src/MsgHandler.cc
@@ -107,6 +107,7 @@ void MsgHandler::sendTrigger(GCFEvent& event, int boardnr)
 	tbb_event.peak_value      = tp_event.trigger.peak;
 	tbb_event.power_before    = tp_event.trigger.pwr_bt_at & 0x0000FFFF;
 	tbb_event.power_after     = (tp_event.trigger.pwr_bt_at & 0xFFFF0000) >> 16;
+	tbb_event.missed          = tp_event.trigger.missed;
 				
 	sendTriggerMessage(tbb_event);
 	
@@ -128,7 +129,7 @@ void MsgHandler::sendTrigger(GCFEvent& event, int boardnr)
 				itsFile = fopen(itsFileName,"a");
 			}
 		
-			err = fprintf(itsFile,"%d %u %u %u %u %u %u %u %u\n",
+			err = fprintf(itsFile,"%d %u %u %u %u %u %u %u %u %u\n",
 					tbb_event.rcu,
 					tbb_event.sequence_nr,
 					tbb_event.time,
@@ -137,7 +138,8 @@ void MsgHandler::sendTrigger(GCFEvent& event, int boardnr)
 					tbb_event.trigger_samples,
 					tbb_event.peak_value,
 					tbb_event.power_before,
-					tbb_event.power_after);
+					tbb_event.power_after,
+					tbb_event.missed );
 			fflush(itsFile);
 		}
 	}
diff --git a/MAC/APL/PIC/TBB_Driver/src/RawEvent.cc b/MAC/APL/PIC/TBB_Driver/src/RawEvent.cc
index e77b36b4094..e8d106bcc45 100644
--- a/MAC/APL/PIC/TBB_Driver/src/RawEvent.cc
+++ b/MAC/APL/PIC/TBB_Driver/src/RawEvent.cc
@@ -84,7 +84,7 @@ GCFEvent::TResult RawEvent::dispatch(GCFTask& task, GCFPortInterface& port)
 			break;
 		case oc_TRIGGER:
 			buf.event.signal = TP_TRIGGER;
-			buf.event.length = 44;
+			buf.event.length = 48;
 			break;
 		case oc_TRIG_RELEASE:
 			buf.event.signal = TP_TRIG_RELEASE_ACK;
@@ -104,7 +104,7 @@ GCFEvent::TResult RawEvent::dispatch(GCFTask& task, GCFPortInterface& port)
 			break;
 		case oc_TRIG_INFO:
 			buf.event.signal = TP_TRIG_INFO_ACK;
-			buf.event.length = 40;
+			buf.event.length = 44;
 			break;	
 		case oc_READ:
 			buf.event.signal = TP_READ_ACK;
diff --git a/MAC/APL/PIC/TBB_Driver/src/TP_Protocol.prot b/MAC/APL/PIC/TBB_Driver/src/TP_Protocol.prot
index 1556f11950d..60793e41286 100644
--- a/MAC/APL/PIC/TBB_Driver/src/TP_Protocol.prot
+++ b/MAC/APL/PIC/TBB_Driver/src/TP_Protocol.prot
@@ -97,7 +97,7 @@ prelude = << PRELUDE_END
 		uint32 samples;
 		uint32 peak;
 		uint32 pwr_bt_at;
-		uint32 end_code;
+		uint32 missed;
 	};
 
 	typedef struct TpTriggerSetup // setup variables for 1 channel
diff --git a/MAC/APL/PIC/TBB_Driver/src/TrigInfoCmd.cc b/MAC/APL/PIC/TBB_Driver/src/TrigInfoCmd.cc
index 19c62c33b5d..2b75f62c842 100644
--- a/MAC/APL/PIC/TBB_Driver/src/TrigInfoCmd.cc
+++ b/MAC/APL/PIC/TBB_Driver/src/TrigInfoCmd.cc
@@ -36,7 +36,7 @@ using	namespace TBB;
 //--Constructors for a TrigInfoCmd object.----------------------------------------
 TrigInfoCmd::TrigInfoCmd():
 	itsRcu(0), itsSequenceNr(0), itsTime(0), itsSampleNr(0), itsTriggerSum(0),
-	itsTriggerSamples(0), itsPeakValue(0), itsPowerBefore(0), itsPowerAfter(0)
+	itsTriggerSamples(0), itsPeakValue(0), itsPowerBefore(0), itsPowerAfter(0), itsMissed(0)
 {
 	TS = TbbSettings::instance();
 	setWaitAck(true);
@@ -98,6 +98,7 @@ void TrigInfoCmd::saveTpAckEvent(GCFEvent& event)
 			itsPeakValue      = tp_ack.trigger.peak;
 			itsPowerBefore    = tp_ack.trigger.pwr_bt_at & 0x0000FFFF;
 			itsPowerAfter     = (tp_ack.trigger.pwr_bt_at & 0xFFFF0000) >> 16;
+			itsMissed         = tp_ack.trigger.missed;
 		} else {
 			setStatus(0, (tp_ack.status << 24));
 		}
@@ -120,6 +121,8 @@ void TrigInfoCmd::sendTbbAckEvent(GCFPortInterface* clientport)
 	tbb_ack.peak_value      = itsPeakValue;
 	tbb_ack.power_before    = itsPowerBefore;
 	tbb_ack.power_after     = itsPowerAfter;
+	tbb_ack.missed          = itsMissed;
+	
 	
 	if (clientport->isConnected()) { clientport->send(tbb_ack); }
 }
diff --git a/MAC/APL/PIC/TBB_Driver/src/TrigInfoCmd.h b/MAC/APL/PIC/TBB_Driver/src/TrigInfoCmd.h
index 872ced665e3..f8b500dfddb 100644
--- a/MAC/APL/PIC/TBB_Driver/src/TrigInfoCmd.h
+++ b/MAC/APL/PIC/TBB_Driver/src/TrigInfoCmd.h
@@ -68,6 +68,7 @@ private:
 	uint32 itsPeakValue;
 	uint32 itsPowerBefore;
 	uint32 itsPowerAfter;
+	uint32 itsMissed;
 };
 
 	} // end TBB namespace
diff --git a/MAC/APL/PIC/TBB_Driver/src/tbbctl.cc b/MAC/APL/PIC/TBB_Driver/src/tbbctl.cc
index 5c63515e399..fc81b16ebc9 100644
--- a/MAC/APL/PIC/TBB_Driver/src/tbbctl.cc
+++ b/MAC/APL/PIC/TBB_Driver/src/tbbctl.cc
@@ -437,8 +437,8 @@ TrigGenerateCmd::TrigGenerateCmd(GCFPortInterface& port) : Command(port)
 	cout << endl;
 	cout << "== TBB ============================ generate trigger on selected rcu's ====" << endl;
 	cout << endl;
-	cout << "RCU  seq_nr     time       sample      sum         samples    peak       pwr_before  pwr_after" << endl;
-	cout << "---  ---------  ---------  ----------  ----------  ---------  ---------  ----------  ---------" << endl;
+	cout << "RCU  seq_nr     time       sample      sum         samples    peak       pwr_before  pwr_after  missed   " << endl;
+	cout << "---  ---------  ---------  ----------  ----------  ---------  ---------  ----------  ---------  ---------" << endl;
 }
 
 //-----------------------------------------------------------------------------
@@ -468,7 +468,7 @@ GCFEvent::TResult TrigGenerateCmd::ack(GCFEvent& e)
 	}
 	if (e.signal == TBB_TRIGGER) {
 		TBBTriggerEvent trig(e);
-		cout << formatString(" %2d  %9u  %9u  %10u  %10u  %9u  %9u  %9u  %9u",
+		cout << formatString(" %2d  %9u  %9u  %10u  %10u  %9u  %9u  %9u  %9u  %9u",
 									trig.rcu,
 									trig.sequence_nr,
 									trig.time,
@@ -477,7 +477,8 @@ GCFEvent::TResult TrigGenerateCmd::ack(GCFEvent& e)
 									trig.trigger_samples,
 									trig.peak_value,
 									trig.power_before,
-									trig.power_after ) << endl;
+									trig.power_after,
+									trig.missed ) << endl;
 		++itsTriggerNr;
 		if (itsTriggerNr == itsMaxChannels) {
 			setCmdDone(true);
@@ -680,8 +681,8 @@ void ListenCmd::send()
 			release.rcu_start_mask = getRcuMask();
 			itsPort.send(release);
 			cout << endl;
-			cout << "RCU  seq_nr     time        sample      sum         samples    peak       pwr_before  pwr_after" << endl;
-			cout << "---  ---------  ----------  ----------  ----------  ---------  ---------  ----------  ---------" << endl;
+			cout << "RCU  seq_nr     time        sample      sum         samples    peak       pwr_before  pwr_after  missed   " << endl;
+			cout << "---  ---------  ----------  ----------  ----------  ---------  ---------  ----------  ---------  ---------" << endl;
 		} break;
 
 		default: {
@@ -716,7 +717,7 @@ GCFEvent::TResult ListenCmd::ack(GCFEvent& e)
 
 			TBBTriggerEvent trig(e);
 			nummer++;
-			cout << formatString(" %2d  %9u  %9u  %10u  %10u  %9u  %9u  %9u  %9u  (stopped) %6d",
+			cout << formatString(" %2d  %9u  %9u  %10u  %10u  %9u  %9u  %9u  %9u  %9u  (stopped) %6d",
 										trig.rcu,
 										trig.sequence_nr,
 										trig.time,
@@ -726,6 +727,7 @@ GCFEvent::TResult ListenCmd::ack(GCFEvent& e)
 										trig.peak_value,
 										trig.power_before,
 										trig.power_after,
+										trig.missed,
 										nummer ) << endl;
 
 			if (itsListenMode == TBB_LISTEN_ONE_SHOT) {
diff --git a/MAC/APL/PIC/TBB_Driver/src/tbbctl.h b/MAC/APL/PIC/TBB_Driver/src/tbbctl.h
index 63f29f1c9d6..73d31703033 100644
--- a/MAC/APL/PIC/TBB_Driver/src/tbbctl.h
+++ b/MAC/APL/PIC/TBB_Driver/src/tbbctl.h
@@ -45,7 +45,7 @@ namespace LOFAR {
 
 GCFTimerPort* itsCmdTimer;
 
-static const int TBBCTL_VERSION = 223; // tbbctl V2.23
+static const int TBBCTL_VERSION = 224;
 
 // MAX_N_TBBOARDS and MAX_N_RCUS come from TBB_protocol.ph
 
-- 
GitLab