From ad735fb1dc2500d14ced95b5c46e76f90c8e38e6 Mon Sep 17 00:00:00 2001
From: Pieter Donker <donker@astron.nl>
Date: Mon, 22 Dec 2008 09:40:49 +0000
Subject: [PATCH] Bug 335 :further development of TBBDriver

---
 MAC/APL/PIC/TBBDriver/src/AllocCmd.h         |    2 +-
 MAC/APL/PIC/TBBDriver/src/ArpCmd.cc          |    2 +-
 MAC/APL/PIC/TBBDriver/src/ArpModeCmd.cc      |    2 +-
 MAC/APL/PIC/TBBDriver/src/BoardCmdHandler.cc |    8 +-
 MAC/APL/PIC/TBBDriver/src/ClearCmd.cc        |    2 +-
 MAC/APL/PIC/TBBDriver/src/ConfigCmd.cc       |    8 +-
 MAC/APL/PIC/TBBDriver/src/DriverSettings.cc  |    8 +-
 MAC/APL/PIC/TBBDriver/src/DriverSettings.h   |   21 +-
 MAC/APL/PIC/TBBDriver/src/FreeCmd.cc         |    2 +-
 MAC/APL/PIC/TBBDriver/src/FreeCmd.h          |    2 +-
 MAC/APL/PIC/TBBDriver/src/ImageInfoCmd.cc    |    4 +-
 MAC/APL/PIC/TBBDriver/src/RecordCmd.cc       |    2 +-
 MAC/APL/PIC/TBBDriver/src/RecordCmd.h        |    2 +-
 MAC/APL/PIC/TBBDriver/src/ResetCmd.cc        |    6 +-
 MAC/APL/PIC/TBBDriver/src/SizeCmd.cc         |    2 +-
 MAC/APL/PIC/TBBDriver/src/StatusCmd.cc       |    2 +-
 MAC/APL/PIC/TBBDriver/src/StopCepCmd.cc      |    2 +-
 MAC/APL/PIC/TBBDriver/src/StopCmd.cc         |    2 +-
 MAC/APL/PIC/TBBDriver/src/StopCmd.h          |    2 +-
 MAC/APL/PIC/TBBDriver/src/TBBDriver.cc       | 2229 ++++----
 MAC/APL/PIC/TBBDriver/src/TempLimitCmd.cc    |    2 +-
 MAC/APL/PIC/TBBDriver/src/TrigCoefCmd.cc     |    2 +-
 MAC/APL/PIC/TBBDriver/src/TrigGenCmd.cc      |    2 +-
 MAC/APL/PIC/TBBDriver/src/TrigGenCmd.h       |    2 +-
 MAC/APL/PIC/TBBDriver/src/TrigReleaseCmd.h   |    4 +-
 MAC/APL/PIC/TBBDriver/src/TrigSetupCmd.cc    |    2 +-
 MAC/APL/PIC/TBBDriver/src/VersionCmd.cc      |    2 +-
 MAC/APL/PIC/TBBDriver/src/WritefCmd.cc       |   14 +-
 MAC/APL/PIC/TBBDriver/src/tbbctl.cc          | 4912 +++++++++---------
 MAC/APL/PIC/TBBDriver/src/tbbctl.h           |    6 +-
 MAC/APL/PIC/TBBDriver/test/TBBTest.cc        |   16 +-
 31 files changed, 3651 insertions(+), 3623 deletions(-)

diff --git a/MAC/APL/PIC/TBBDriver/src/AllocCmd.h b/MAC/APL/PIC/TBBDriver/src/AllocCmd.h
index 37c67f5a686..d2d0bf72668 100644
--- a/MAC/APL/PIC/TBBDriver/src/AllocCmd.h
+++ b/MAC/APL/PIC/TBBDriver/src/AllocCmd.h
@@ -65,7 +65,7 @@ namespace LOFAR {
 				int32		itsStage;
 				//uint32	itsBoardMask;  // mask indicates the boards to communicate with
 				uint32	itsRcuStatus;
-				uint32	itsChannelMask[MAX_N_TBBBOARDS];
+				uint32	itsChannelMask[MAX_N_TBBOARDS];
 								
 				TPAllocEvent			*itsTPE;
 				TPAllocAckEvent		*itsTPackE;
diff --git a/MAC/APL/PIC/TBBDriver/src/ArpCmd.cc b/MAC/APL/PIC/TBBDriver/src/ArpCmd.cc
index d998c0af47a..12efc1ff5e1 100644
--- a/MAC/APL/PIC/TBBDriver/src/ArpCmd.cc
+++ b/MAC/APL/PIC/TBBDriver/src/ArpCmd.cc
@@ -41,7 +41,7 @@ ArpCmd::ArpCmd()
 	itsTBBE 		= 0;
 	itsTBBackE 	= new TBBArpAckEvent();
 	
-	for(int boardnr = 0;boardnr < MAX_N_TBBBOARDS;boardnr++) { 
+	for(int boardnr = 0;boardnr < MAX_N_TBBOARDS;boardnr++) { 
 		itsTBBackE->status_mask[boardnr]	= 0;
 	}
 	
diff --git a/MAC/APL/PIC/TBBDriver/src/ArpModeCmd.cc b/MAC/APL/PIC/TBBDriver/src/ArpModeCmd.cc
index 529cc113687..611ec2a8796 100644
--- a/MAC/APL/PIC/TBBDriver/src/ArpModeCmd.cc
+++ b/MAC/APL/PIC/TBBDriver/src/ArpModeCmd.cc
@@ -41,7 +41,7 @@ ArpModeCmd::ArpModeCmd()
 	itsTBBE 		= 0;
 	itsTBBackE 	= new TBBArpModeAckEvent();
 	
-	for(int boardnr = 0;boardnr < MAX_N_TBBBOARDS;boardnr++) { 
+	for(int boardnr = 0;boardnr < MAX_N_TBBOARDS;boardnr++) { 
 		itsTBBackE->status_mask[boardnr]	= 0;
 	}
 	
diff --git a/MAC/APL/PIC/TBBDriver/src/BoardCmdHandler.cc b/MAC/APL/PIC/TBBDriver/src/BoardCmdHandler.cc
index 3d3c34538ee..7987d1c1059 100644
--- a/MAC/APL/PIC/TBBDriver/src/BoardCmdHandler.cc
+++ b/MAC/APL/PIC/TBBDriver/src/BoardCmdHandler.cc
@@ -155,8 +155,8 @@ GCFEvent::TResult BoardCmdHandler::waitack_state(GCFEvent& event, GCFPortInterfa
 					TS->setBoardState(itsCmd->getBoardNr(),boardError);
 				}
 				itsCmd->saveTpAckEvent(event); // max retries or done, save zero's
-				if (itsCmd->getSleepTime() > 0) {
-					itsSleepTimer->setTimer((long)itsCmd->getSleepTime());
+				if (itsCmd->getSleepTime() > 0.0) {
+					itsSleepTimer->setTimer(itsCmd->getSleepTime());
 					itsCmd->setSleepTime(0.0);
 				} else {
 					TRAN(BoardCmdHandler::send_state);
@@ -178,8 +178,8 @@ GCFEvent::TResult BoardCmdHandler::waitack_state(GCFEvent& event, GCFPortInterfa
 			if (itsCmd->isValid(event)) {
 				port.cancelAllTimers();
 				itsCmd->saveTpAckEvent(event);
-				if (itsCmd->getSleepTime()) {
-					itsSleepTimer->setTimer((long)itsCmd->getSleepTime());
+				if (itsCmd->getSleepTime() > 0.0) {
+					itsSleepTimer->setTimer(itsCmd->getSleepTime());
 					itsCmd->setSleepTime(0);
 				} else {
 					TRAN(BoardCmdHandler::send_state);
diff --git a/MAC/APL/PIC/TBBDriver/src/ClearCmd.cc b/MAC/APL/PIC/TBBDriver/src/ClearCmd.cc
index 5e6e612662e..b18eeab3758 100644
--- a/MAC/APL/PIC/TBBDriver/src/ClearCmd.cc
+++ b/MAC/APL/PIC/TBBDriver/src/ClearCmd.cc
@@ -41,7 +41,7 @@ ClearCmd::ClearCmd()
 	itsTBBE 		= 0;
 	itsTBBackE 	= new TBBClearAckEvent();
 	
-	for(int boardnr = 0;boardnr < MAX_N_TBBBOARDS;boardnr++) { 
+	for(int boardnr = 0;boardnr < MAX_N_TBBOARDS;boardnr++) { 
 		itsTBBackE->status_mask[boardnr]	= 0;
 	}
 	setWaitAck(true);		
diff --git a/MAC/APL/PIC/TBBDriver/src/ConfigCmd.cc b/MAC/APL/PIC/TBBDriver/src/ConfigCmd.cc
index 551fa2831a8..a99fc4a48b4 100644
--- a/MAC/APL/PIC/TBBDriver/src/ConfigCmd.cc
+++ b/MAC/APL/PIC/TBBDriver/src/ConfigCmd.cc
@@ -41,7 +41,7 @@ ConfigCmd::ConfigCmd()
 	itsTBBE 		= 0;
 	itsTBBackE 	= new TBBConfigAckEvent();
 	
-	for(int boardnr = 0;boardnr < MAX_N_TBBBOARDS;boardnr++) { 
+	for(int boardnr = 0;boardnr < MAX_N_TBBOARDS;boardnr++) { 
 		itsTBBackE->status_mask[boardnr]	= 0;
 	}
 	setWaitAck(true);		
@@ -104,7 +104,8 @@ void ConfigCmd::saveTpAckEvent(GCFEvent& event)
 		itsTBBackE->status_mask[getBoardNr()] |= TBB_COMM_ERROR;
 	}	else {
 		itsTPackE = new TPConfigAckEvent(event);
-		
+		TS->setImageNr(getBoardNr(), itsTPE->imagenr);
+		TS->setFreeToReset(getBoardNr(), false);
 		if ((itsTPackE->status >= 0xF0) && (itsTPackE->status <= 0xF6)) 
 			itsTBBackE->status_mask[getBoardNr()] |= (1 << (16 + (itsTPackE->status & 0x0F)));	
 		
@@ -112,6 +113,9 @@ void ConfigCmd::saveTpAckEvent(GCFEvent& event)
 		delete itsTPackE;
 	}
 	nextBoardNr();
+	if (isDone()) { 
+	   setSleepTime(15.0);
+	}
 }
 
 // ----------------------------------------------------------------------------
diff --git a/MAC/APL/PIC/TBBDriver/src/DriverSettings.cc b/MAC/APL/PIC/TBBDriver/src/DriverSettings.cc
index 084ef485fab..bbc1a45169a 100644
--- a/MAC/APL/PIC/TBBDriver/src/DriverSettings.cc
+++ b/MAC/APL/PIC/TBBDriver/src/DriverSettings.cc
@@ -100,7 +100,7 @@ void TbbSettings::getTbbSettings()
   }
   
   // setMaxBoards() must be set 2e
-  setMaxBoards(MAX_N_TBBBOARDS);
+  setMaxBoards(MAX_N_TBBOARDS);
   
   try { itsSaveTriggersToFile = globalParameterSet()->getInt32("TBBDriver.SAVE_TRIGGERS_TO_FILE"); }
   catch (...) { LOG_INFO_STR(formatString("TBBDriver.SAVE_TRIGGERS_TO_FILE not found")); }
@@ -219,9 +219,11 @@ void TbbSettings::setMaxBoards (int32 maxboards)
 	itsBoardInfo = new BoardInfo[itsMaxBoards];
 	
 	for (int nr = 0;nr < itsMaxBoards; nr++) {
-		itsBoardInfo[nr].boardState = boardReset;
+		itsBoardInfo[nr].boardState = setImage1;
 		itsBoardInfo[nr].memorySize = 0;
-		itsBoardInfo[nr].srcIp = "";
+		itsBoardInfo[nr].imageNr = 0;
+	   itsBoardInfo[nr].freeToReset = true;
+      itsBoardInfo[nr].srcIp = "";
 		itsBoardInfo[nr].dstIp = "";
 		itsBoardInfo[nr].srcMac = "";
 		itsBoardInfo[nr].dstMac = "";
diff --git a/MAC/APL/PIC/TBBDriver/src/DriverSettings.h b/MAC/APL/PIC/TBBDriver/src/DriverSettings.h
index 45f5e9d3809..4ae137dca77 100644
--- a/MAC/APL/PIC/TBBDriver/src/DriverSettings.h
+++ b/MAC/APL/PIC/TBBDriver/src/DriverSettings.h
@@ -26,8 +26,6 @@
 #include <APL/TBB_Protocol/TBB_Protocol.ph>
 #include "TP_Protocol.ph"
 #include <GCF/TM/GCF_Control.h>
-//#include <GCF/TM/GCF_ETHRawPort.h>
-//#include <GCF/TM/GCF_DevicePort.h>
 #include <Common/LofarTypes.h>
 
 
@@ -35,10 +33,10 @@
 namespace LOFAR {
   namespace TBB {
 
-static const int DRIVER_VERSION = 200; // 2.00 
+static const int DRIVER_VERSION = 201; // 2.00 
+
+enum BoardStateT {noBoard, setImage1, image1Set, clearBoard, boardCleared, freeBoard, boardFreed, boardReady, boardError};
 
-//enum BoardStateT {noBoard, newBoard, boardReset, boardCleared, boardFreed, boardReady, boardError};
-enum BoardStateT {noBoard, resetBoard, boardReset, clearBoard, boardCleared, freeBoard, boardFreed, boardReady, boardError};
 // info for all channels
 struct ChannelInfo
 {
@@ -68,6 +66,8 @@ struct BoardInfo
 	GCFPortInterface* port;
 	BoardStateT boardState; 
 	uint32	memorySize;
+	uint32   imageNr;
+	bool     freeToReset;
 	string	srcIp;
 	string	dstIp;
 	string	srcMac;
@@ -166,6 +166,11 @@ public:
 	uint32 getMemorySize(int32 boardnr);
 	void setMemorySize(int32 boardnr,uint32 pages);
 	
+	uint32 getImageNr(int32 boardnr);
+	void setImageNr(int32 boardnr,uint32 image);
+	bool getFreeToReset(int32 boardnr);
+	void setFreeToReset(int32 boardnr, bool reset);
+	
 friend class TBBDriver;
 
 protected:	// note TBBDriver must be able to set them
@@ -282,7 +287,11 @@ inline	void TbbSettings::setTriggerMode(int16 triggermode){ itsTriggerMode = tri
 //---- inline functions for board information ------------
 inline	uint32 TbbSettings::getMemorySize(int32 boardnr) { return (itsBoardInfo[boardnr].memorySize); }
 inline	void TbbSettings::setMemorySize(int32 boardnr,uint32 pages) { itsBoardInfo[boardnr].memorySize = pages; }
-
+inline	uint32 TbbSettings::getImageNr(int32 boardnr) { return (itsBoardInfo[boardnr].imageNr); }
+inline	void TbbSettings::setImageNr(int32 boardnr,uint32 image) { itsBoardInfo[boardnr].imageNr = image; }
+inline	bool TbbSettings::getFreeToReset(int32 boardnr) { return (itsBoardInfo[boardnr].freeToReset); }
+inline	void TbbSettings::setFreeToReset(int32 boardnr, bool reset) { itsBoardInfo[boardnr].freeToReset = reset; }
+  
   } // namespace TBB
 } // namespace LOFAR
 
diff --git a/MAC/APL/PIC/TBBDriver/src/FreeCmd.cc b/MAC/APL/PIC/TBBDriver/src/FreeCmd.cc
index fe4faa17005..8671c53f26a 100644
--- a/MAC/APL/PIC/TBBDriver/src/FreeCmd.cc
+++ b/MAC/APL/PIC/TBBDriver/src/FreeCmd.cc
@@ -41,7 +41,7 @@ FreeCmd::FreeCmd():
 	itsTBBE 		= 0;
 	itsTBBackE 	= new TBBFreeAckEvent();
 	
-	for(int boardnr = 0;boardnr < MAX_N_TBBBOARDS;boardnr++) { 
+	for(int boardnr = 0;boardnr < MAX_N_TBBOARDS;boardnr++) { 
 		itsTBBackE->status_mask[boardnr]	= 0;
 		itsChannelMask[boardnr]	= 0;
 	}
diff --git a/MAC/APL/PIC/TBBDriver/src/FreeCmd.h b/MAC/APL/PIC/TBBDriver/src/FreeCmd.h
index 97866072548..a19f3b32568 100644
--- a/MAC/APL/PIC/TBBDriver/src/FreeCmd.h
+++ b/MAC/APL/PIC/TBBDriver/src/FreeCmd.h
@@ -61,7 +61,7 @@ namespace LOFAR {
 				TbbSettings *TS;
 				
 				int32		itsBoardNr;
-				uint32	itsChannelMask[MAX_N_TBBBOARDS];
+				uint32	itsChannelMask[MAX_N_TBBOARDS];
 				bool		itsBoardFreeAll;
 				uint32	itsRcuStatus;
 				
diff --git a/MAC/APL/PIC/TBBDriver/src/ImageInfoCmd.cc b/MAC/APL/PIC/TBBDriver/src/ImageInfoCmd.cc
index 505e9d5debf..8eed62b7c4f 100644
--- a/MAC/APL/PIC/TBBDriver/src/ImageInfoCmd.cc
+++ b/MAC/APL/PIC/TBBDriver/src/ImageInfoCmd.cc
@@ -82,15 +82,15 @@ void ImageInfoCmd::saveTbbEvent(GCFEvent& event)
 	itsTBBE = new TBBImageInfoEvent(event);
 	
 	setBoardNr(itsTBBE->board);	
-	itsTBBackE->board = itsTBBE->board;	
+	itsTBBackE->board = getBoardNr();	
 	
 	itsTBBackE->status_mask = 0;
+	itsTBBackE->active_image = TS->getImageNr(getBoardNr());
 	itsImage = 0;
 		
 	// initialize TP send frame
 	itsTPE->opcode	= TPREADF;
 	itsTPE->status	=	0;
-	
 	delete itsTBBE;	
 }
 
diff --git a/MAC/APL/PIC/TBBDriver/src/RecordCmd.cc b/MAC/APL/PIC/TBBDriver/src/RecordCmd.cc
index 50302876dfa..86c12088e67 100644
--- a/MAC/APL/PIC/TBBDriver/src/RecordCmd.cc
+++ b/MAC/APL/PIC/TBBDriver/src/RecordCmd.cc
@@ -41,7 +41,7 @@ RecordCmd::RecordCmd():
 	itsTBBE 		= 0;
 	itsTBBackE 	= new TBBRecordAckEvent();
 	
-	for(int boardnr = 0;boardnr < MAX_N_TBBBOARDS;boardnr++) { 
+	for(int boardnr = 0;boardnr < MAX_N_TBBOARDS;boardnr++) { 
 		itsTBBackE->status_mask[boardnr]	= 0;
 		itsChannelMask[boardnr] = 0;
 	}
diff --git a/MAC/APL/PIC/TBBDriver/src/RecordCmd.h b/MAC/APL/PIC/TBBDriver/src/RecordCmd.h
index 9c01bbc2b9e..5d7a497a85e 100644
--- a/MAC/APL/PIC/TBBDriver/src/RecordCmd.h
+++ b/MAC/APL/PIC/TBBDriver/src/RecordCmd.h
@@ -60,7 +60,7 @@ namespace LOFAR {
 			private:
 				TbbSettings *TS;
 				
-				uint32	itsChannelMask[MAX_N_TBBBOARDS];
+				uint32	itsChannelMask[MAX_N_TBBOARDS];
 				uint32	itsRcuStatus;
 				
 				TPRecordEvent			*itsTPE;
diff --git a/MAC/APL/PIC/TBBDriver/src/ResetCmd.cc b/MAC/APL/PIC/TBBDriver/src/ResetCmd.cc
index ea57e45d08c..9852e3de246 100644
--- a/MAC/APL/PIC/TBBDriver/src/ResetCmd.cc
+++ b/MAC/APL/PIC/TBBDriver/src/ResetCmd.cc
@@ -42,7 +42,7 @@ ResetCmd::ResetCmd():
 	itsTBBE 		= 0;
 	itsTBBackE 	= new TBBResetAckEvent();
 	
-	for(int boardnr = 0; boardnr < MAX_N_TBBBOARDS; boardnr++) { 
+	for(int boardnr = 0; boardnr < MAX_N_TBBOARDS; boardnr++) { 
 		itsTBBackE->status_mask[boardnr]	= 0;
 	}
 	setWaitAck(true);	
@@ -115,7 +115,7 @@ void ResetCmd::saveTpAckEvent(GCFEvent& event)
 	}	else {
 		itsTPackE = new TPResetAckEvent(event);
 		if (itsTPackE->status == 0) {
-			TS->setBoardState(getBoardNr(),boardReset);
+			TS->setBoardState(getBoardNr(),setImage1);
 		} else {
 			TS->setBoardState(getBoardNr(),boardError);
 		}
@@ -134,7 +134,7 @@ void ResetCmd::saveTpAckEvent(GCFEvent& event)
 	if (itsBoardNr < TS->maxBoards()) {
 		setBoardNr(itsBoardNr);
 	} else {
-		setSleepTime(3.0);
+		setSleepTime(20.0);
 		setDone(true);
 	}
 }
diff --git a/MAC/APL/PIC/TBBDriver/src/SizeCmd.cc b/MAC/APL/PIC/TBBDriver/src/SizeCmd.cc
index 86d1a54b5ab..914fb4ff2e0 100644
--- a/MAC/APL/PIC/TBBDriver/src/SizeCmd.cc
+++ b/MAC/APL/PIC/TBBDriver/src/SizeCmd.cc
@@ -40,7 +40,7 @@ SizeCmd::SizeCmd()
 	itsTBBE 		= 0;
 	itsTBBackE 	= new TBBSizeAckEvent();
 	
-	for(int boardnr = 0;boardnr < MAX_N_TBBBOARDS;boardnr++) { 
+	for(int boardnr = 0;boardnr < MAX_N_TBBOARDS;boardnr++) { 
 		itsTBBackE->status_mask[boardnr]	= 0;
 		itsTBBackE->npages[boardnr] 			= 0;
 	}
diff --git a/MAC/APL/PIC/TBBDriver/src/StatusCmd.cc b/MAC/APL/PIC/TBBDriver/src/StatusCmd.cc
index cc9f2581492..13ae1b4c93c 100644
--- a/MAC/APL/PIC/TBBDriver/src/StatusCmd.cc
+++ b/MAC/APL/PIC/TBBDriver/src/StatusCmd.cc
@@ -39,7 +39,7 @@ StatusCmd::StatusCmd()
 	itsTBBE 		= 0;
 	itsTBBackE 	= new TBBStatusAckEvent();
 	
-	for(int boardnr = 0;boardnr < MAX_N_TBBBOARDS;boardnr++) { 
+	for(int boardnr = 0;boardnr < MAX_N_TBBOARDS;boardnr++) { 
 		itsTBBackE->status_mask[boardnr]	= 0;
 		itsTBBackE->V12[boardnr]	= 0;
 		itsTBBackE->V25[boardnr]	= 0;
diff --git a/MAC/APL/PIC/TBBDriver/src/StopCepCmd.cc b/MAC/APL/PIC/TBBDriver/src/StopCepCmd.cc
index bb26313267d..644d29054af 100644
--- a/MAC/APL/PIC/TBBDriver/src/StopCepCmd.cc
+++ b/MAC/APL/PIC/TBBDriver/src/StopCepCmd.cc
@@ -41,7 +41,7 @@ StopCepCmd::StopCepCmd()
 	itsTBBE 		= 0;
 	itsTBBackE 	= new TBBStopCepAckEvent();
 	
-	for(int boardnr = 0;boardnr < MAX_N_TBBBOARDS;boardnr++) { 
+	for(int boardnr = 0;boardnr < MAX_N_TBBOARDS;boardnr++) { 
 		itsTBBackE->status_mask[boardnr]	= 0;
 	}
 	
diff --git a/MAC/APL/PIC/TBBDriver/src/StopCmd.cc b/MAC/APL/PIC/TBBDriver/src/StopCmd.cc
index 516f49cb1f2..44e4b8f1daa 100644
--- a/MAC/APL/PIC/TBBDriver/src/StopCmd.cc
+++ b/MAC/APL/PIC/TBBDriver/src/StopCmd.cc
@@ -41,7 +41,7 @@ StopCmd::StopCmd():
 	itsTBBE 		= 0;
 	itsTBBackE 	= new TBBStopAckEvent();
 	
-	for(int boardnr = 0;boardnr < MAX_N_TBBBOARDS;boardnr++) { 
+	for(int boardnr = 0;boardnr < MAX_N_TBBOARDS;boardnr++) { 
 		itsTBBackE->status_mask[boardnr]	= 0;
 		itsChannelMask[boardnr]	= 0;
 	}
diff --git a/MAC/APL/PIC/TBBDriver/src/StopCmd.h b/MAC/APL/PIC/TBBDriver/src/StopCmd.h
index 157e0f8d298..154adada056 100644
--- a/MAC/APL/PIC/TBBDriver/src/StopCmd.h
+++ b/MAC/APL/PIC/TBBDriver/src/StopCmd.h
@@ -60,7 +60,7 @@ namespace LOFAR {
 			private:
 				TbbSettings *TS;
 				
-				uint32	itsChannelMask[MAX_N_TBBBOARDS];
+				uint32	itsChannelMask[MAX_N_TBBOARDS];
 				uint32	itsRcuStatus;
 				
 				TPStopEvent			*itsTPE;
diff --git a/MAC/APL/PIC/TBBDriver/src/TBBDriver.cc b/MAC/APL/PIC/TBBDriver/src/TBBDriver.cc
index 3ebf78e2210..b9cf8e05c0c 100644
--- a/MAC/APL/PIC/TBBDriver/src/TBBDriver.cc
+++ b/MAC/APL/PIC/TBBDriver/src/TBBDriver.cc
@@ -69,14 +69,14 @@
 #include "TempLimitCmd.h"
 
 
-#define ETHERTYPE_TP 0x7BB0			// letters of TBB
+#define ETHERTYPE_TP 0x7BB0     // letters of TBB
 
 using namespace LOFAR;
 using namespace ACC::APS;
 using namespace TBB;
 
 static bool   itsDaemonize  = false;
-static int32	itsInstancenr = -1;
+static int32  itsInstancenr = -1;
 
 static const double ALIVECHECKTIME = 60.0;
 
@@ -86,591 +86,596 @@ static const double ALIVECHECKTIME = 60.0;
 //
 void parseOptions(int argc, char** argv)
 {
-	static struct option long_options[] = {
-		{ "instance",   required_argument, 0, 'I' },
-		{ "daemon",     no_argument,       0, 'd' },
-		{ 0, 0, 0, 0 }
-	};
+  static struct option long_options[] = {
+    { "instance",   required_argument, 0, 'I' },
+    { "daemon",     no_argument,       0, 'd' },
+    { 0, 0, 0, 0 }
+  };
 
-	optind = 0; // reset option parsing
-	for(;;) {
-		int option_index = 0;
-		int c = getopt_long(argc, argv, "dI:", long_options, &option_index);
+  optind = 0; // reset option parsing
+  for(;;) {
+    int option_index = 0;
+    int c = getopt_long(argc, argv, "dI:", long_options, &option_index);
 
-		if (c == -1) {
-			break;
-		}
+    if (c == -1) {
+      break;
+    }
 
-		switch (c) {
-			case 'I': {   // --instance
-				itsInstancenr = atoi(optarg);
-			}	break;
-			
-			case 'd': {   // --daemon
-				itsDaemonize = true;
-			}	break;
-			
-			default: {
-				LOG_FATAL_STR("Unknown option " << c);
-				ASSERT(false);
-			}
-		}
-	}
+    switch (c) {
+      case 'I': {   // --instance
+        itsInstancenr = atoi(optarg);
+      } break;
+      
+      case 'd': {   // --daemon
+        itsDaemonize = true;
+      } break;
+      
+      default: {
+        LOG_FATAL_STR("Unknown option " << c);
+        ASSERT(false);
+      }
+    }
+  }
 }
 
-//-----------------------------------------------------------------------------		
+//-----------------------------------------------------------------------------   
 TBBDriver::TBBDriver(string name)
   : GCFTask((State)&TBBDriver::init_state, name)
 {
-	// use TS->getXXX() tot get settings of the driver
-	TS	= TbbSettings::instance();
-	
-	// get settings adopted from config file
+  // use TS->getXXX() tot get settings of the driver
+  TS  = TbbSettings::instance();
+  
+  // get settings adopted from config file
   TS->getTbbSettings();
   
-	cmd = 0;
-	//itsNewBoards = 0;
-	itsAliveCheck = false;
-	itsResetCount = 0;
+  cmd = 0;
+  //itsNewBoards = 0;
+  itsAliveCheck = false;
+  itsResetCount = 0;
   
   // tell broker we are here
   LOG_DEBUG_STR("Registering protocols");
 
-	registerProtocol (TBB_PROTOCOL,      TBB_PROTOCOL_STRINGS);
-	registerProtocol (TP_PROTOCOL,      TP_PROTOCOL_STRINGS);
-	
+  registerProtocol (TBB_PROTOCOL,      TBB_PROTOCOL_STRINGS);
+  registerProtocol (TP_PROTOCOL,      TP_PROTOCOL_STRINGS);
+  
   // open client port
   LOG_DEBUG_STR("Opening listener for clients");
-	
-	string  acceptorID;
+  
+  string  acceptorID;
   if (itsInstancenr >= 0) {
-	 acceptorID = formatString("(%d)", itsInstancenr);
+   acceptorID = formatString("(%d)", itsInstancenr);
   }
-	
+  
   itsAcceptor.init(*this, MAC_SVCMASK_TBBDRIVER + acceptorID, GCFPortInterface::MSPP, TBB_PROTOCOL);
 
   // open port with TBB board
   LOG_DEBUG_STR("Connecting to TBB boards");
-	itsBoard = new GCFETHRawPort[TS->maxBoards()];
+  itsBoard = new GCFETHRawPort[TS->maxBoards()];
   ASSERT(itsBoard);
-	
+  
   char boardname[64];
-	for (int boardnr = 0; boardnr < TS->maxBoards(); boardnr++) {
-		snprintf(boardname, 64, "board%d", boardnr);
+  for (int boardnr = 0; boardnr < TS->maxBoards(); boardnr++) {
+    snprintf(boardname, 64, "board%d", boardnr);
 
-		LOG_DEBUG_STR("initializing board " << boardname << ":" << TS->getSrcMac(boardnr).c_str());
-		itsBoard[boardnr].init(*this, boardname, GCFPortInterface::SAP, TP_PROTOCOL,true /*raw*/);
-		
-		LOG_DEBUG_STR("setAddr " << boardname << ":" << TS->getSrcMac(boardnr).c_str());
-		itsBoard[boardnr].setAddr(TS->getIfName().c_str(), TS->getSrcMac(boardnr).c_str());
-		
-		// set ethertype to 0x7BB0 so Ethereal can decode TBB messages
-		itsBoard[boardnr].setEtherType(ETHERTYPE_TP);
-	}
-	
-	for (int bn = 0; bn < TS->maxBoards();bn++) {
-		TS->setBoardPorts(bn,&itsBoard[bn]);	
-	}
-	
-	itsAliveTimer = new GCFTimerPort(*this, "AliveTimer");
-	itsSetupTimer = new GCFTimerPort(*this, "SetupTimer");
-	itsCmdTimer = new GCFTimerPort(*this, "CmdTimer");
-	itsSaveTimer = new GCFTimerPort(*this, "SaveTimer");
-	
-	  	// create cmd & msg handler
-	LOG_DEBUG_STR("initializing handlers");
-	cmdhandler = new BoardCmdHandler(itsCmdTimer);
-	msghandler = new MsgHandler();
-	
-	itsResetCount = new int32[TS->maxBoards()];
-	memset(itsResetCount,0,sizeof(int32)*TS->maxBoards());
-	 	 	 
-	// set Tbb queue
-	LOG_DEBUG_STR("initializing TbbQueue");
-	itsTbbQueue = new deque<TbbEvent*>(100);
-	itsTbbQueue->clear();
-	 
-	itsAlive					= new TPAliveEvent();
- 	itsAlive->opcode	= TPALIVE;
- 	itsAlive->status	= 0;
+    LOG_DEBUG_STR("initializing board " << boardname << ":" << TS->getSrcMac(boardnr).c_str());
+    itsBoard[boardnr].init(*this, boardname, GCFPortInterface::SAP, TP_PROTOCOL,true /*raw*/);
+    
+    LOG_DEBUG_STR("setAddr " << boardname << ":" << TS->getSrcMac(boardnr).c_str());
+    itsBoard[boardnr].setAddr(TS->getIfName().c_str(), TS->getSrcMac(boardnr).c_str());
+    
+    // set ethertype to 0x7BB0 so Ethereal can decode TBB messages
+    itsBoard[boardnr].setEtherType(ETHERTYPE_TP);
+  }
+  
+  for (int bn = 0; bn < TS->maxBoards();bn++) {
+    TS->setBoardPorts(bn,&itsBoard[bn]);  
+  }
+  
+  itsAliveTimer = new GCFTimerPort(*this, "AliveTimer");
+  itsSetupTimer = new GCFTimerPort(*this, "SetupTimer");
+  itsCmdTimer = new GCFTimerPort(*this, "CmdTimer");
+  itsSaveTimer = new GCFTimerPort(*this, "SaveTimer");
+  
+      // create cmd & msg handler
+  LOG_DEBUG_STR("initializing handlers");
+  cmdhandler = new BoardCmdHandler(itsCmdTimer);
+  msghandler = new MsgHandler();
+  
+  itsResetCount = new int32[TS->maxBoards()];
+  memset(itsResetCount,0,sizeof(int32)*TS->maxBoards());
+       
+  // set Tbb queue
+  LOG_DEBUG_STR("initializing TbbQueue");
+  itsTbbQueue = new deque<TbbEvent*>(100);
+  itsTbbQueue->clear();
+   
+  itsAlive          = new TPAliveEvent();
+  itsAlive->opcode  = TPALIVE;
+  itsAlive->status  = 0;
 }
 
 //-----------------------------------------------------------------------------
 TBBDriver::~TBBDriver()
 {
-	delete [] itsBoard;
-	delete itsAliveTimer;
-	delete itsSetupTimer;
-	delete cmdhandler;
-	delete msghandler;
-	delete [] itsResetCount;
-	delete itsTbbQueue;
-	delete itsAlive;
-	if (cmd) delete cmd;
+  delete [] itsBoard;
+  delete itsAliveTimer;
+  delete itsSetupTimer;
+  delete cmdhandler;
+  delete msghandler;
+  delete [] itsResetCount;
+  delete itsTbbQueue;
+  delete itsAlive;
+  if (cmd) delete cmd;
 }
 
 //-----------------------------------------------------------------------------
 GCFEvent::TResult TBBDriver::init_state(GCFEvent& event, GCFPortInterface& port)
 {
-	GCFEvent::TResult status = GCFEvent::HANDLED;
-	LOG_DEBUG_STR ("init_state:" << eventName(event) << "@" << port.getName());
-	
-	switch(event.signal) {
-		case F_INIT: {
-			if (itsAcceptor.isConnected())
-				itsAcceptor.close();
-		} break;
-		
-		case F_EXIT: {
-		} break;
+  GCFEvent::TResult status = GCFEvent::HANDLED;
+  LOG_DEBUG_STR ("init_state:" << eventName(event) << "@" << port.getName());
+  
+  switch(event.signal) {
+    case F_INIT: {
+      if (itsAcceptor.isConnected())
+        itsAcceptor.close();
+    } break;
+    
+    case F_EXIT: {
+    } break;
         
-		case F_ENTRY:	{
-			openBoards();
-		}	break;
-		
-		case F_CONNECTED: {
+    case F_ENTRY: {
+      openBoards();
+    } break;
+    
+    case F_CONNECTED: {
       LOG_DEBUG_STR("CONNECTED: port " << port.getName());
-			
-			if (isEnabled() && !itsAcceptor.isConnected()) {
- 				itsAcceptor.open();
-			}	      			
-			if (itsAcceptor.isConnected()) {
-				TRAN(TBBDriver::idle_state);
+      
+      if (isEnabled() && !itsAcceptor.isConnected()) {
+        itsAcceptor.open();
+      }             
+      if (itsAcceptor.isConnected()) {
+        TRAN(TBBDriver::idle_state);
       }
     } break;
-		
-		case F_TIMER: {
-    } break;
-		
-		case F_DATAIN: {
-		}	break;
-				 
-		default: {
-			status = GCFEvent::NOT_HANDLED;
-		}	break;
-	}
-	return(status);
+    
+    case F_TIMER: {
+    } break;
+    
+    case F_DATAIN: {
+    } break;
+         
+    default: {
+      status = GCFEvent::NOT_HANDLED;
+    } break;
+  }
+  return(status);
 }
 
 
 //-----------------------------------------------------------------------------
 GCFEvent::TResult TBBDriver::setup_state(GCFEvent& event, GCFPortInterface& port)
 {
-	GCFEvent::TResult status = GCFEvent::HANDLED;
-	LOG_DEBUG_STR ("setup_state:" << eventName(event) << "@" << port.getName());
-	
-	bool setupDone;
-	static int* retries;
-	static int* waitTimer;
-	
-	switch(event.signal) {
-		case F_INIT: {
-		} break;
-		
-		case F_EXIT: {
-			if (retries)   delete [] retries;
-			if (waitTimer) delete [] waitTimer;
-		} break;
+  GCFEvent::TResult status = GCFEvent::HANDLED;
+  LOG_DEBUG_STR ("setup_state:" << eventName(event) << "@" << port.getName());
+  
+  bool setupDone;
+  static int* retries;
+  static int* waitTimer;
+  
+  switch(event.signal) {
+    case F_INIT: {
+    } break;
+    
+    case F_EXIT: {
+      if (retries)   delete [] retries;
+      if (waitTimer) delete [] waitTimer;
+    } break;
         
-		case F_ENTRY:	{	
-			itsSaveTimer->cancelAllTimers();
-			itsAliveTimer->cancelAllTimers();
-			retries = new int[TS->maxBoards()];
-			waitTimer = new int[TS->maxBoards()];
+    case F_ENTRY: { 
+      itsSaveTimer->cancelAllTimers();
+      itsAliveTimer->cancelAllTimers();
+      retries = new int[TS->maxBoards()];
+      waitTimer = new int[TS->maxBoards()];
 
-			for (int board = 0; board < TS->maxBoards(); board++) {
-				waitTimer[board] = 0;
-				retries[board] = 0;
-			}
-			LOG_INFO_STR("setting up boards");	
-			itsSetupTimer->setTimer(0.0);
-		}	break;
-		
-		case F_CONNECTED: {
-    	} break;
-		
-		case F_DISCONNECTED: {
-			LOG_DEBUG_STR("DISCONNECTED: port ''" << port.getName() << "'");
-      	port.close();
-      		
-			if (&port == &itsAcceptor) {
-        		LOG_FATAL_STR("Failed to start listening for client connections.");
-        		exit(EXIT_FAILURE);
-      	} else {
-				itsClientList.remove(&port);
-				msghandler->removeTriggerClient(port);
-				msghandler->removeHardwareClient(port);
-      	}
-		} break;
-		
-		case F_ACCEPT_REQ: {
-			GCFTCPPort* client = new GCFTCPPort();
-			client->init(*this, "client", GCFPortInterface::SPP, TBB_PROTOCOL);
-      	itsAcceptor.accept(*client);
-      	itsClientList.push_back(client);
+      for (int board = 0; board < TS->maxBoards(); board++) {
+        waitTimer[board] = 0;
+        retries[board] = 0;
+      }
+      LOG_INFO_STR("setting up boards");  
+      itsSetupTimer->setTimer(0.0);
+    } break;
+    
+    case F_CONNECTED: {
+      } break;
+    
+    case F_DISCONNECTED: {
+      LOG_DEBUG_STR("DISCONNECTED: port ''" << port.getName() << "'");
+        port.close();
+          
+      if (&port == &itsAcceptor) {
+            LOG_FATAL_STR("Failed to start listening for client connections.");
+            exit(EXIT_FAILURE);
+        } else {
+        itsClientList.remove(&port);
+        msghandler->removeTriggerClient(port);
+        msghandler->removeHardwareClient(port);
+        }
+    } break;
+    
+    case F_ACCEPT_REQ: {
+      GCFTCPPort* client = new GCFTCPPort();
+      client->init(*this, "client", GCFPortInterface::SPP, TBB_PROTOCOL);
+        itsAcceptor.accept(*client);
+        itsClientList.push_back(client);
 
-			LOG_DEBUG_STR("NEW CLIENT CONNECTED: " << itsClientList.size() << " clients connected");
-		} break;
-		
-		case F_TIMER: {
-			if (&port == itsSetupTimer) {
-				setupDone = true;
-				for (int board = 0; board < TS->maxBoards(); board++) {
-			
-					if (waitTimer[board]) { waitTimer[board]--; }
-			 		if (waitTimer[board]) { 
-						setupDone = false;
-						continue; 
-					} // board still busy, next board
-					
-					if ((TS->getBoardState(board) == noBoard) 
-							|| (TS->getBoardState(board) == boardReady) 
-							|| (TS->getBoardState(board) == boardError)) {
-						continue;
-					}
-					
-					if (TS->getBoardState(board) == resetBoard) {
-						TPResetEvent reset;
-		 				reset.opcode = TPRESET;
-		 				reset.status = 0;
-						itsBoard[board].send(reset);
-						itsBoard[board].setTimer(5.0);	
-						LOG_INFO_STR("RESET is send to port '" << itsBoard[board].getName() << "'");
-						waitTimer[board] = 10;
-						setupDone = false;
-						continue;
-					}
-					
-					if ((TS->getBoardState(board) == clearBoard) || (TS->getBoardState(board) == boardReset)) {
-						TPClearEvent clear;
-		 				clear.opcode = TPCLEAR;
-		 				clear.status = 0;
-						itsBoard[board].send(clear);
-						itsBoard[board].setTimer(5.0);	
-						LOG_INFO_STR("CLEAR is send to port '" << itsBoard[board].getName() << "'");
-						waitTimer[board] = 10;
-						setupDone = false;
-						continue;
-					}
+      LOG_DEBUG_STR("NEW CLIENT CONNECTED: " << itsClientList.size() << " clients connected");
+    } break;
+    
+    case F_TIMER: {
+      if (&port == itsSetupTimer) {
+        setupDone = true;
+        for (int board = 0; board < TS->maxBoards(); board++) {
+      
+          if (waitTimer[board]) { waitTimer[board]--; }
+          if (waitTimer[board]) { 
+            setupDone = false;
+            continue; 
+          } // board still busy, next board
+          
+          if ((TS->getBoardState(board) == noBoard) 
+              || (TS->getBoardState(board) == boardReady) 
+              || (TS->getBoardState(board) == boardError)) {
+            continue;
+          }
+          
+          if (TS->getBoardState(board) == setImage1) {
+            TPConfigEvent config;
+            config.opcode = TPCONFIG;
+            config.status = 0;
+            config.imagenr = 1;
+            //config.imagenr = 0;
+            itsBoard[board].send(config);
+            itsBoard[board].setTimer(5.0);  
+            LOG_INFO_STR("CONFIG 1  is send to port '" << itsBoard[board].getName() << "'");
+            waitTimer[board] = 10;
+            setupDone = false;
+            continue;
+          }
+          
+          if (TS->getBoardState(board) == clearBoard) {
+            TPClearEvent clear;
+            clear.opcode = TPCLEAR;
+            clear.status = 0;
+            itsBoard[board].send(clear);
+            itsBoard[board].setTimer(5.0);  
+            LOG_INFO_STR("CLEAR is send to port '" << itsBoard[board].getName() << "'");
+            waitTimer[board] = 5;
+            setupDone = false;
+            continue;
+          }
 
-					if ((TS->getBoardState(board) == freeBoard) || (TS->getBoardState(board) == boardCleared)) {
-						TPFreeEvent free;
-		 				free.opcode = TPFREE;
-		 				free.status = 0;
-		 				free.channel = 0xFFFFFFFF;  // send channel = -1 to free all inputs
-						itsBoard[board].send(free);
-						itsBoard[board].setTimer(5.0);	
-						LOG_INFO_STR("FREE -1 is send to port '" << itsBoard[board].getName() << "'");
-						waitTimer[board] = 10;
-						setupDone = false;
-						continue;
-					}
-					
-					if (TS->getBoardState(board) == boardFreed) {
-						TPAliveEvent alive;
-		 				alive.opcode = TPALIVE;
-		 				alive.status = 0;
-						itsBoard[board].send(alive);
-						itsBoard[board].setTimer(5.0);	
-						LOG_INFO_STR("ALIVE is send to port '" << itsBoard[board].getName() << "'");
-						waitTimer[board] = 10;
-						setupDone = false;
-						continue;
-					}
-				}
-			
-				if (!setupDone) {
-					itsSetupTimer->setTimer(1.0); // run this every second
-				}
-				
-			}	else { // no setup-timer event, must be a board time-out
-				int board = TS->port2Board(&port); // get board nr
-				if (TS->getBoardState(board) == resetBoard) {
-					TS->resetActiveBoard(board);
-					TS->setBoardState(board,boardReset);	
-				} else {
-					waitTimer[board] = 0;
-					retries[board]++;
-					if (retries[board] >= TS->maxRetries()) { 
-			  			TS->resetActiveBoard(board);    			 
-			  			TS->setBoardState(board,boardError);
-					}
-				}
-			}
-			
-			if (setupDone) {
-				LOG_INFO_STR("setting up boards done");	
-				TS->clearBoardSetup();
-				if (TS->saveTriggersToFile()) { itsSaveTimer->setTimer(2.0, 2.0); }
-				itsAliveTimer->setTimer(ALIVECHECKTIME);	
-				TRAN(TBBDriver::idle_state);
-			} 
-   	} break;
-		
-		case F_DATAIN: {
-			status = RawEvent::dispatch(*this, port);	
-		}	break;
-		
-		case TP_RESET_ACK: {
-			int board = TS->port2Board(&port); // get board nr
-			itsBoard[board].cancelAllTimers();
-			TS->setBoardState(board,boardReset);
-			waitTimer[board] = 4;
-    } break;
-		
-		case TP_CLEAR_ACK: {
-			int board = TS->port2Board(&port); // get board nr
-			itsBoard[board].cancelAllTimers();
-			TS->setBoardState(board,boardCleared);
-			waitTimer[board] = 3;
-    } break;
-		
-		case TP_FREE_ACK: {
-			int board = TS->port2Board(&port); // get board nr
-			itsBoard[board].cancelAllTimers();
-    		TS->setBoardState(board,boardFreed);
-    		waitTimer[board] = 3;
+          if ((TS->getBoardState(board) == freeBoard) 
+            || (TS->getBoardState(board) == boardCleared)
+            || (TS->getBoardState(board) == image1Set)) {
+            TPFreeEvent free;
+            free.opcode = TPFREE;
+            free.status = 0;
+            free.channel = 0xFFFFFFFF;  // send channel = -1 to free all inputs
+            itsBoard[board].send(free);
+            itsBoard[board].setTimer(5.0);  
+            LOG_INFO_STR("FREE -1 is send to port '" << itsBoard[board].getName() << "'");
+            waitTimer[board] = 5;
+            setupDone = false;
+            continue;
+          }
+          
+          if (TS->getBoardState(board) == boardFreed) {
+            TPAliveEvent alive;
+            alive.opcode = TPALIVE;
+            alive.status = 0;
+            itsBoard[board].send(alive);
+            itsBoard[board].setTimer(1.0);  
+            LOG_INFO_STR("ALIVE is send to port '" << itsBoard[board].getName() << "'");
+            waitTimer[board] = 1;
+            setupDone = false;
+            continue;
+          }
+        }
+      
+        if (!setupDone) {
+          itsSetupTimer->setTimer(1.0); // run this every second
+        }
+        
+      } else { // no setup-timer event, must be a board time-out
+        int board = TS->port2Board(&port); // get board nr
+        if (TS->getBoardState(board) == setImage1) {
+          TS->resetActiveBoard(board);
+          //TS->setBoardState(board,image1Set); 
+        } else {
+          waitTimer[board] = 0;
+          retries[board]++;
+          if (retries[board] >= TS->maxRetries()) { 
+            TS->resetActiveBoard(board);           
+            TS->setBoardState(board,boardError);
+          }
+        }
+      }
+      
+      if (setupDone) {
+        LOG_INFO_STR("setting up boards done"); 
+        TS->clearBoardSetup();
+        if (TS->saveTriggersToFile()) { itsSaveTimer->setTimer(2.0, 2.0); }
+        itsAliveTimer->setTimer(ALIVECHECKTIME);  
+        TRAN(TBBDriver::idle_state);
+      } 
+    } break;
+    
+    case F_DATAIN: {
+      status = RawEvent::dispatch(*this, port); 
+    } break;
+    
+    case TP_CONFIG_ACK: {
+      int board = TS->port2Board(&port); // get board nr
+      itsBoard[board].cancelAllTimers();
+      TS->setBoardState(board,image1Set);
+      TS->setImageNr(board, 1);
+      waitTimer[board] = 15;
+    } break;
+    
+    case TP_CLEAR_ACK: {
+      int board = TS->port2Board(&port); // get board nr
+      itsBoard[board].cancelAllTimers();
+      TS->setBoardState(board,boardCleared);
+      waitTimer[board] = 2;
+    } break;
+    
+    case TP_FREE_ACK: {
+      int board = TS->port2Board(&port); // get board nr
+      itsBoard[board].cancelAllTimers();
+        TS->setBoardState(board,boardFreed);
+        waitTimer[board] = 2;
     } break;
     
     case TP_ALIVE_ACK: {
-			int board = TS->port2Board(&port); // get board nr
-			itsBoard[board].cancelAllTimers();
-    		TS->setBoardState(board,boardReady);
-    		LOG_INFO_STR("'" << itsBoard[board].getName() << "' is Ready");
-    		waitTimer[board] = 0;
-    } break;
-	
-		case TP_TRIGGER: {
-			for (int boardnr = 0; boardnr < TS->maxBoards(); boardnr++) {
-				if (&port == &TS->boardPort(boardnr)) {
-					msghandler->sendTrigger(event,boardnr);
-					break;
-				}
-			}
-		} break;							
-								
-		case TBB_GET_CONFIG:             
-		case TBB_RCU_INFO:               
-		case TBB_SUBSCRIBE:         
-		case TBB_UNSUBSCRIBE:            
-		case TBB_ALLOC:                  
-		case TBB_FREE:                   
-		case TBB_RECORD:                
-		case TBB_STOP:                   
-		case TBB_TRIG_RELEASE:         
-		case TBB_TRIG_GENERATE:          
-		case TBB_TRIG_SETUP:             
-		case TBB_TRIG_COEF:    		      
-		case TBB_TRIG_SETTINGS:          
-		case TBB_TRIG_INFO:              
-		case TBB_READ:                   
-		case TBB_MODE:                   
-		case TBB_PAGEPERIOD:             
-		case TBB_VERSION:                
-		case TBB_SIZE:                   
-		case TBB_STATUS:                 
-		case TBB_CLEAR:                  
-		case TBB_RESET:                  
-		case TBB_CONFIG:                 
-		case TBB_ERASE_IMAGE:            
-		case TBB_READ_IMAGE:             
-		case TBB_WRITE_IMAGE:            
-		case TBB_IMAGE_INFO:             
-		case TBB_READX:                  
-		case TBB_READW:        
-		case TBB_WRITEW:       
-		case TBB_READR:        
-		case TBB_WRITER:
-		case TBB_ARP:
-		case TBB_ARP_MODE:
-		case TBB_STOP_CEP:
-		case TBB_TEMP_LIMIT: {               
-			TBBDriverBusyAckEvent ack;    
-			port.send(ack);               
-		} break;                        
-							                      
-		default: {                      
-			status = GCFEvent::NOT_HANDLED;
-		}	break;                        
-	}                                 
-	                                  
-	return(status);                   
-}	                                  
+      int board = TS->port2Board(&port); // get board nr
+      itsBoard[board].cancelAllTimers();
+        TS->setBoardState(board,boardReady);
+        LOG_INFO_STR("'" << itsBoard[board].getName() << "' is Ready");
+        waitTimer[board] = 0;
+    } break;
+  
+    case TP_TRIGGER: {
+      for (int boardnr = 0; boardnr < TS->maxBoards(); boardnr++) {
+        if (&port == &TS->boardPort(boardnr)) {
+          msghandler->sendTrigger(event,boardnr);
+          break;
+        }
+      }
+    } break;              
+                
+    case TBB_GET_CONFIG:             
+    case TBB_RCU_INFO:               
+    case TBB_SUBSCRIBE:         
+    case TBB_UNSUBSCRIBE:            
+    case TBB_ALLOC:                  
+    case TBB_FREE:                   
+    case TBB_RECORD:                
+    case TBB_STOP:                   
+    case TBB_TRIG_RELEASE:         
+    case TBB_TRIG_GENERATE:          
+    case TBB_TRIG_SETUP:             
+    case TBB_TRIG_COEF:             
+    case TBB_TRIG_SETTINGS:          
+    case TBB_TRIG_INFO:              
+    case TBB_READ:                   
+    case TBB_MODE:                   
+    case TBB_PAGEPERIOD:             
+    case TBB_VERSION:                
+    case TBB_SIZE:                   
+    case TBB_STATUS:                 
+    case TBB_CLEAR:                  
+    case TBB_RESET:                  
+    case TBB_CONFIG:                 
+    case TBB_ERASE_IMAGE:            
+    case TBB_READ_IMAGE:             
+    case TBB_WRITE_IMAGE:            
+    case TBB_IMAGE_INFO:             
+    case TBB_READX:                  
+    case TBB_READW:        
+    case TBB_WRITEW:       
+    case TBB_READR:        
+    case TBB_WRITER:
+    case TBB_ARP:
+    case TBB_ARP_MODE:
+    case TBB_STOP_CEP:
+    case TBB_TEMP_LIMIT: {               
+      TBBDriverBusyAckEvent ack;    
+      port.send(ack);               
+    } break;                        
+                                    
+    default: {                      
+      status = GCFEvent::NOT_HANDLED;
+    } break;                        
+  }                                 
+                                    
+  return(status);                   
+}                                   
                                     
 //-----------------------------------------------------------------------------
 // idle(event, port)                
 //                                  
 GCFEvent::TResult TBBDriver::idle_state(GCFEvent& event, GCFPortInterface& port)
 {                                   
-	GCFEvent::TResult status = GCFEvent::HANDLED;
-	LOG_DEBUG_STR("idle:" << eventName(event) << "@" << port.getName());
-	                                  
-	switch(event.signal) {            
-		case F_INIT: {                  
-		} break;                        
+  GCFEvent::TResult status = GCFEvent::HANDLED;
+  LOG_DEBUG_STR("idle:" << eventName(event) << "@" << port.getName());
+                                    
+  switch(event.signal) {            
+    case F_INIT: {                  
+    } break;                        
                                     
     case F_EXIT: {                  
-		} break;                        
+    } break;                        
                                     
-		case F_ENTRY:	{                 
-			LOG_DEBUG_STR("Entering Idle State");
-			// if no tbb boards start check-alive
-			if (TS->activeBoardsMask() == 0) {
-				itsAliveTimer->setTimer(0.0);
-				break;                      
-			}                             
-						                        
-			// if board setup needed
-			if (TS->boardSetupNeeded()) {      
-				LOG_DEBUG_STR("need boards setup");
-				TRAN(TBBDriver::setup_state);
-				break;
-			}
-	
-			if (itsClientList.empty()) {
-				itsTbbQueue->clear();
-				LOG_DEBUG_STR("Client list is empty, the queue is cleared");
-			}
-			
-			// look if there is an Tbb command in queue	
-			if (!itsTbbQueue->empty()) {
-				LOG_DEBUG_STR("The queue is NOT empty");
-			
-				uint8* bufptr = new uint8[sizeof(GCFEvent) + itsTbbQueue->front()->length];
-				
-				GCFEvent* e = new (bufptr) GCFEvent;
-				memcpy(e, &(itsTbbQueue->front()->event), itsTbbQueue->front()->length);
-				
-				
-				LOG_DEBUG_STR("queue:" << eventName(*e));
-				
-				if (SetTbbCommand(e->signal)) {
-					status = cmdhandler->dispatch(*e,*itsTbbQueue->front()->port);
-					// delete e;
+    case F_ENTRY: {                 
+      LOG_DEBUG_STR("Entering Idle State");
+      // if no tbb boards start check-alive
+      if (TS->activeBoardsMask() == 0) {
+        itsAliveTimer->setTimer(0.0);
+        break;                      
+      }                             
+                                    
+      // if board setup needed
+      if (TS->boardSetupNeeded()) {      
+        LOG_DEBUG_STR("need boards setup");
+        TRAN(TBBDriver::setup_state);
+        break;
+      }
+  
+      if (itsClientList.empty()) {
+        itsTbbQueue->clear();
+        LOG_DEBUG_STR("Client list is empty, the queue is cleared");
+      }
+      
+      // look if there is an Tbb command in queue 
+      if (!itsTbbQueue->empty()) {
+        LOG_DEBUG_STR("The queue is NOT empty");
+      
+        uint8* bufptr = new uint8[sizeof(GCFEvent) + itsTbbQueue->front()->length];
+        
+        GCFEvent* e = new (bufptr) GCFEvent;
+        memcpy(e, &(itsTbbQueue->front()->event), itsTbbQueue->front()->length);
+        
+        
+        LOG_DEBUG_STR("queue:" << eventName(*e));
+        
+        if (SetTbbCommand(e->signal)) {
+          status = cmdhandler->dispatch(*e,*itsTbbQueue->front()->port);
+          // delete e;
 
-					TbbEvent* tmp = itsTbbQueue->front();
-					itsTbbQueue->pop_front();
-					delete tmp;
+          TbbEvent* tmp = itsTbbQueue->front();
+          itsTbbQueue->pop_front();
+          delete tmp;
 
-					TRAN(TBBDriver::busy_state);
-				} else {
-					sendInfo(*e, *itsTbbQueue->front()->port);
-					
-					TbbEvent* tmp = itsTbbQueue->front();
-					itsTbbQueue->pop_front();
-					delete tmp;
-				}
-			}
-		}	break;
+          TRAN(TBBDriver::busy_state);
+        } else {
+          sendInfo(*e, *itsTbbQueue->front()->port);
+          
+          TbbEvent* tmp = itsTbbQueue->front();
+          itsTbbQueue->pop_front();
+          delete tmp;
+        }
+      }
+    } break;
         
-		case F_CONNECTED:	{
-			LOG_DEBUG_STR("CONNECTED: port '" << port.getName() << "'");
-		}	break;
-		
-		case F_DISCONNECTED: {
-			LOG_DEBUG_STR("DISCONNECTED: port ''" << port.getName() << "'");
+    case F_CONNECTED: {
+      LOG_DEBUG_STR("CONNECTED: port '" << port.getName() << "'");
+    } break;
+    
+    case F_DISCONNECTED: {
+      LOG_DEBUG_STR("DISCONNECTED: port ''" << port.getName() << "'");
       port.close();
-      		
-			if (&port == &itsAcceptor) {
+          
+      if (&port == &itsAcceptor) {
         LOG_FATAL_STR("Failed to start listening for client connections.");
         exit(EXIT_FAILURE);
       } else {
-				itsClientList.remove(&port);
-				msghandler->removeTriggerClient(port);
-				msghandler->removeHardwareClient(port);
+        itsClientList.remove(&port);
+        msghandler->removeTriggerClient(port);
+        msghandler->removeHardwareClient(port);
       }
-		} break;
-		
-		case F_ACCEPT_REQ: {
-			GCFTCPPort* client = new GCFTCPPort();
-			client->init(*this, "client", GCFPortInterface::SPP, TBB_PROTOCOL);
+    } break;
+    
+    case F_ACCEPT_REQ: {
+      GCFTCPPort* client = new GCFTCPPort();
+      client->init(*this, "client", GCFPortInterface::SPP, TBB_PROTOCOL);
       itsAcceptor.accept(*client);
       itsClientList.push_back(client);
 
-			LOG_DEBUG_STR("NEW CLIENT CONNECTED: " << itsClientList.size() << " clients connected");
-		} break;
-		
-		case F_DATAIN: {
-			status = RawEvent::dispatch(*this, port);	
-		}	break;
-		
-		case F_TIMER: {
-			if (&port == itsSaveTimer) {
-				msghandler->saveTriggerMessage();
-				break;
-			}
-			
-			if (&port == itsAliveTimer) {
-				CheckAlive(event, port);
-			}
-			// if new boards detected set them up
-			if (itsAliveCheck == false && TS->boardSetupNeeded()) {
-				LOG_DEBUG_STR("need boards setup");
-				TRAN(TBBDriver::setup_state);
-			}
-		} break;
-		
-		case TP_ALIVE_ACK: {
-			LOG_DEBUG_STR("TP_ALIVE_ACK received");
-			if (itsAliveCheck) { CheckAlive(event, port); }
-		} break;
-				
-		case TBB_SUBSCRIBE: {
-			TBBSubscribeEvent subscribe(event);
-			if (subscribe.triggers) { msghandler->addTriggerClient(port); }
-			if (subscribe.hardware) { msghandler->addHardwareClient(port); }
-			
-			TBBSubscribeAckEvent subscribeack;
-			port.send(subscribeack);
-		} break;
-		
-		case TBB_UNSUBSCRIBE: {
-			msghandler->removeTriggerClient(port);
-			msghandler->removeHardwareClient(port);
-			TBBUnsubscribeAckEvent unsubscribeack;
-			port.send(unsubscribeack);
-		} break;
-						
-		case TP_TRIGGER: {
-			for (int boardnr = 0; boardnr < TS->maxBoards(); boardnr++) {
-				if (&port == &TS->boardPort(boardnr)) {
-					msghandler->sendTrigger(event,boardnr);
-					break;
-				}
-			}
-		} break;
+      LOG_DEBUG_STR("NEW CLIENT CONNECTED: " << itsClientList.size() << " clients connected");
+    } break;
+    
+    case F_DATAIN: {
+      status = RawEvent::dispatch(*this, port); 
+    } break;
+    
+    case F_TIMER: {
+      if (&port == itsSaveTimer) {
+        msghandler->saveTriggerMessage();
+        break;
+      }
+      
+      if (&port == itsAliveTimer) {
+        CheckAlive(event, port);
+      }
+      // if new boards detected set them up
+      if (itsAliveCheck == false && TS->boardSetupNeeded()) {
+        LOG_DEBUG_STR("need boards setup");
+        TRAN(TBBDriver::setup_state);
+      }
+    } break;
+    
+    case TP_ALIVE_ACK: {
+      LOG_DEBUG_STR("TP_ALIVE_ACK received");
+      if (itsAliveCheck) { CheckAlive(event, port); }
+    } break;
+        
+    case TBB_SUBSCRIBE: {
+      TBBSubscribeEvent subscribe(event);
+      if (subscribe.triggers) { msghandler->addTriggerClient(port); }
+      if (subscribe.hardware) { msghandler->addHardwareClient(port); }
+      
+      TBBSubscribeAckEvent subscribeack;
+      port.send(subscribeack);
+    } break;
+    
+    case TBB_UNSUBSCRIBE: {
+      msghandler->removeTriggerClient(port);
+      msghandler->removeHardwareClient(port);
+      TBBUnsubscribeAckEvent unsubscribeack;
+      port.send(unsubscribeack);
+    } break;
+            
+    case TP_TRIGGER: {
+      for (int boardnr = 0; boardnr < TS->maxBoards(); boardnr++) {
+        if (&port == &TS->boardPort(boardnr)) {
+          msghandler->sendTrigger(event,boardnr);
+          break;
+        }
+      }
+    } break;
 
-		case TP_ERROR: {
-			msghandler->sendError(event);
-		} break;					
-		
-		case TBB_GET_CONFIG:
-		case TBB_RCU_INFO:
-		case TBB_TRIG_SETTINGS: {
-			sendInfo(event, port);
-		} break;
-		
-		default: {
-			// look if the event is a Tbb event
-			if (SetTbbCommand(event.signal)) {
-				if (TS->activeBoardsMask() != 0) { 		
-					itsAliveTimer->cancelAllTimers();
-					itsAliveTimer->setTimer(ALIVECHECKTIME);
-					itsAliveCheck	= false;
-					status = cmdhandler->dispatch(event,port);
-					TRAN(TBBDriver::busy_state);
-				} else {
-					TBBDriverBusyAckEvent ack;    
-					port.send(ack); 
-				}
-			} else {
-				// if not a Tbb event, return not-handled 
-				status = GCFEvent::NOT_HANDLED;
-			}
-		}	break;
-	}
-	
-	return(status);
+    case TP_ERROR: {
+      msghandler->sendError(event);
+    } break;          
+    
+    case TBB_GET_CONFIG:
+    case TBB_RCU_INFO:
+    case TBB_TRIG_SETTINGS: {
+      sendInfo(event, port);
+    } break;
+    
+    default: {
+      // look if the event is a Tbb event
+      if (SetTbbCommand(event.signal)) {
+        if (TS->activeBoardsMask() != 0) {    
+          itsAliveTimer->cancelAllTimers();
+          itsAliveTimer->setTimer(ALIVECHECKTIME);
+          itsAliveCheck = false;
+          status = cmdhandler->dispatch(event,port);
+          TRAN(TBBDriver::busy_state);
+        } else {
+          TBBDriverBusyAckEvent ack;    
+          port.send(ack); 
+        }
+      } else {
+        // if not a Tbb event, return not-handled 
+        status = GCFEvent::NOT_HANDLED;
+      }
+    } break;
+  }
+  
+  return(status);
 }
 
 //-----------------------------------------------------------------------------
@@ -678,201 +683,206 @@ GCFEvent::TResult TBBDriver::idle_state(GCFEvent& event, GCFPortInterface& port)
 //
 GCFEvent::TResult TBBDriver::busy_state(GCFEvent& event, GCFPortInterface& port)
 {
-	GCFEvent::TResult status = GCFEvent::HANDLED;    
-	LOG_DEBUG_STR ("busy_state:" << eventName(event) << "@" << port.getName());
-	
-	switch(event.signal) {
-		case F_INIT: {
-		} break;
-		
-		case F_EXIT: {
-			if (cmd) delete cmd;
-			itsAliveTimer->setTimer(1.0);
-			itsAliveCheck = false;
-		} break;
-		
-		case F_ENTRY: {
-			if (cmdhandler->tpCmdDone()) {
-				TRAN(TBBDriver::idle_state);
-			}
-		}	break;
-				
-		case F_ACCEPT_REQ: {
-			GCFTCPPort* client = new GCFTCPPort();
-			client->init(*this, "client", GCFPortInterface::SPP, TBB_PROTOCOL);
-      	itsAcceptor.accept(*client);
-		}	break;
-		
-		case F_CONNECTED:	{
-			LOG_DEBUG_STR("CONNECTED: port '" << port.getName() << "'");
-		}	break;
-		
-		case F_DISCONNECTED: {
-			LOG_DEBUG_STR("DISCONNECTED: port '" << port.getName() << "'");
-      	port.close();
-      		
-			if (&port == &itsAcceptor) {
-        		LOG_FATAL_STR("Failed to start listening for client connections.");
-        		exit(EXIT_FAILURE);
-      	} else {
-				itsClientList.remove(&port);
-				msghandler->removeTriggerClient(port);
-				msghandler->removeHardwareClient(port);
-      	}
-			
-			TRAN(TBBDriver::idle_state);	
-		}	break;
-		
-		case F_TIMER: {
-			if (&port == itsSaveTimer) {
-				msghandler->saveTriggerMessage();
-				break;
-			}
-			
-			if (&port == itsAliveTimer) { 
-				if (itsAliveCheck) {
-					CheckAlive(event, port);// if true, then all boards are checked
-				} else {
-					itsAliveTimer->setTimer(ALIVECHECKTIME);
-				}
-			} else {
-				status = cmdhandler->dispatch(event,port); // dispatch time-out event	
-			}
-		} break;
-		
-		case F_DATAIN: {
-			status = RawEvent::dispatch(*this, port);
-		}	break;
-		
-		case TP_ALIVE_ACK: {
-			LOG_DEBUG_STR("TP_ALIVE_ACK received");
-			if (itsAliveCheck) { CheckAlive(event, port); }
-		} break;
-				
-		case TBB_SUBSCRIBE: {
-			TBBSubscribeEvent subscribe(event);
-			if (subscribe.triggers) { msghandler->addTriggerClient(port); }
-			if (subscribe.hardware) { msghandler->addHardwareClient(port); }
-			
-			TBBSubscribeAckEvent subscribeack;
-			port.send(subscribeack);
-		} break;
-		
-		case TBB_UNSUBSCRIBE: {
-			msghandler->removeTriggerClient(port);
-			msghandler->removeHardwareClient(port);
-			TRAN(TBBDriver::idle_state);
-		} break;
-		
-		case TP_TRIGGER: {
-			for (int boardnr = 0; boardnr < TS->maxBoards(); boardnr++) {
-				if (&port == &TS->boardPort(boardnr)) {
-					msghandler->sendTrigger(event,boardnr);
-					break;
-				}
-			}
-		} break;
+  GCFEvent::TResult status = GCFEvent::HANDLED;    
+  LOG_DEBUG_STR ("busy_state:" << eventName(event) << "@" << port.getName());
+  
+  switch(event.signal) {
+    case F_INIT: {
+    } break;
+    
+    case F_EXIT: {
+      if (cmd) delete cmd;
+      itsAliveTimer->setTimer(1.0);
+      itsAliveCheck = false;
+    } break;
+    
+    case F_ENTRY: {
+      if (cmdhandler->tpCmdDone()) {
+        TRAN(TBBDriver::idle_state);
+      }
+    } break;
+        
+    case F_ACCEPT_REQ: {
+      GCFTCPPort* client = new GCFTCPPort();
+      client->init(*this, "client", GCFPortInterface::SPP, TBB_PROTOCOL);
+        itsAcceptor.accept(*client);
+    } break;
+    
+    case F_CONNECTED: {
+      LOG_DEBUG_STR("CONNECTED: port '" << port.getName() << "'");
+    } break;
+    
+    case F_DISCONNECTED: {
+      LOG_DEBUG_STR("DISCONNECTED: port '" << port.getName() << "'");
+        port.close();
+          
+      if (&port == &itsAcceptor) {
+            LOG_FATAL_STR("Failed to start listening for client connections.");
+            exit(EXIT_FAILURE);
+        } else {
+        itsClientList.remove(&port);
+        msghandler->removeTriggerClient(port);
+        msghandler->removeHardwareClient(port);
+        }
+      
+      TRAN(TBBDriver::idle_state);  
+    } break;
+    
+    case F_TIMER: {
+      if (&port == itsSaveTimer) {
+        msghandler->saveTriggerMessage();
+        break;
+      }
+      
+      if (&port == itsAliveTimer) { 
+        if (itsAliveCheck) {
+          CheckAlive(event, port);// if true, then all boards are checked
+        } else {
+          itsAliveTimer->setTimer(ALIVECHECKTIME);
+        }
+      } else {
+        status = cmdhandler->dispatch(event,port); // dispatch time-out event 
+      }
+    } break;
+    
+    case F_DATAIN: {
+      status = RawEvent::dispatch(*this, port);
+    } break;
+    
+    case TP_ALIVE_ACK: {
+      LOG_DEBUG_STR("TP_ALIVE_ACK received");
+      if (itsAliveCheck) { CheckAlive(event, port); }
+    } break;
+        
+    case TBB_SUBSCRIBE: {
+      TBBSubscribeEvent subscribe(event);
+      if (subscribe.triggers) { msghandler->addTriggerClient(port); }
+      if (subscribe.hardware) { msghandler->addHardwareClient(port); }
+      
+      TBBSubscribeAckEvent subscribeack;
+      port.send(subscribeack);
+    } break;
+    
+    case TBB_UNSUBSCRIBE: {
+      msghandler->removeTriggerClient(port);
+      msghandler->removeHardwareClient(port);
+      if (cmdhandler->tpCmdDone()) {
+        TRAN(TBBDriver::idle_state);
+      }
+    } break;
+    
+    case TP_TRIGGER: {
+      for (int boardnr = 0; boardnr < TS->maxBoards(); boardnr++) {
+        if (&port == &TS->boardPort(boardnr)) {
+          msghandler->sendTrigger(event,boardnr);
+          break;
+        }
+      }
+    } break;
 
-		case TP_ERROR: {
-			msghandler->sendError(event);
-		} break;		
-		
-		case TP_ALLOC_ACK:	
-		case TP_FREE_ACK:
-		case TP_RECORD_ACK: 
-		case TP_STOP_ACK:
-		case TP_TRIG_RELEASE_ACK:
-		case TP_TRIG_GENERATE_ACK:
-		case TP_TRIG_SETUP_ACK:
-		case TP_TRIG_COEF_ACK:
-		case TP_TRIG_INFO_ACK:				
-		case TP_READ_ACK:
-		case TP_UDP_ACK:
-		case TP_PAGEPERIOD_ACK:	
-		case TP_VERSION_ACK:
-		case TP_STATUS_ACK:
-		case TP_CLEAR_ACK:
-		case TP_SIZE_ACK:	
-		case TP_RESET_ACK:
-		case TP_CONFIG_ACK:
-		case TP_ERASEF_ACK:
-		case TP_READF_ACK:
-		case TP_WRITEF_ACK:
-		case TP_READW_ACK:
-		case TP_WRITEW_ACK:
-		case TP_READR_ACK:
-		case TP_WRITER_ACK:
-		case TP_READX_ACK:
-		case TP_ARP_ACK:
-		case TP_ARP_MODE_ACK:
-		case TP_STOP_CEP_ACK:
-		case TP_TEMP_LIMIT_ACK:	
-		{
-			status = cmdhandler->dispatch(event,port); // dispatch ack from boards	
-			if (cmdhandler->tpCmdDone()) {
-				TRAN(TBBDriver::idle_state);
-			}
-		}	break;	
-		
-		case TBB_GET_CONFIG:             
-		case TBB_RCU_INFO:               
-		case TBB_ALLOC:                  
-		case TBB_FREE:                   
-		case TBB_RECORD:                
-		case TBB_STOP:                   
-		case TBB_TRIG_RELEASE:         
-		case TBB_TRIG_GENERATE:          
-		case TBB_TRIG_SETUP:             
-		case TBB_TRIG_COEF:    		      
-		case TBB_TRIG_SETTINGS:          
-		case TBB_TRIG_INFO:              
-		case TBB_READ:                   
-		case TBB_MODE:                   
-		case TBB_PAGEPERIOD:             
-		case TBB_VERSION:                
-		case TBB_SIZE:                   
-		case TBB_STATUS:                 
-		case TBB_CLEAR:                  
-		case TBB_RESET:                  
-		case TBB_CONFIG:                 
-		case TBB_ERASE_IMAGE:            
-		case TBB_READ_IMAGE:             
-		case TBB_WRITE_IMAGE:            
-		case TBB_IMAGE_INFO:             
-		case TBB_READX:                  
-		case TBB_READW:        
-		case TBB_WRITEW:       
-		case TBB_READR:        
-		case TBB_WRITER:
-		case TBB_ARP:
-		case TBB_ARP_MODE:
-		case TBB_STOP_CEP:
-		case TBB_TEMP_LIMIT: {
-			// put event on the queue
-			LOG_DEBUG_STR("Put event on queue");
-					
-			uint8* bufptr = new uint8[sizeof(GCFPortInterface*) 
-															+ sizeof(uint32)
-															+ sizeof(GCFEvent) 
-															+ event.length];
-			TbbEvent* tbbevent = new (bufptr) TbbEvent;
-			
-			memcpy(&(tbbevent->event), &event, (sizeof(GCFEvent) + event.length));			
-			tbbevent->length = sizeof(GCFEvent) + event.length;
-			tbbevent->port = &port;
-			
-			itsTbbQueue->push_back(tbbevent);	
-		} break;								
-		
-		default: {
-			LOG_DEBUG_STR("DEFAULT");
-			
-			status = GCFEvent::NOT_HANDLED;
-		}	break;
-	}
-	
-	
-	return(status);
+    case TP_ERROR: {
+      msghandler->sendError(event);
+    } break;    
+    
+    case TP_ALLOC_ACK:  
+    case TP_FREE_ACK:
+    case TP_RECORD_ACK: 
+    case TP_STOP_ACK:
+    case TP_TRIG_RELEASE_ACK:
+    case TP_TRIG_GENERATE_ACK:
+    case TP_TRIG_SETUP_ACK:
+    case TP_TRIG_COEF_ACK:
+    case TP_TRIG_INFO_ACK:        
+    case TP_READ_ACK:
+    case TP_UDP_ACK:
+    case TP_PAGEPERIOD_ACK: 
+    case TP_VERSION_ACK:
+    case TP_STATUS_ACK:
+    case TP_CLEAR_ACK:
+    case TP_SIZE_ACK: 
+    case TP_RESET_ACK:
+    case TP_CONFIG_ACK:
+    case TP_ERASEF_ACK:
+    case TP_READF_ACK:
+    case TP_WRITEF_ACK:
+    case TP_READW_ACK:
+    case TP_WRITEW_ACK:
+    case TP_READR_ACK:
+    case TP_WRITER_ACK:
+    case TP_READX_ACK:
+    case TP_ARP_ACK:
+    case TP_ARP_MODE_ACK:
+    case TP_STOP_CEP_ACK:
+    case TP_TEMP_LIMIT_ACK: 
+    {
+      status = cmdhandler->dispatch(event,port); // dispatch ack from boards  
+      if (cmdhandler->tpCmdDone()) {
+        TRAN(TBBDriver::idle_state);
+      }
+    } break;  
+    
+    case TBB_GET_CONFIG:             
+    case TBB_RCU_INFO:               
+    case TBB_ALLOC:                  
+    case TBB_FREE:                   
+    case TBB_RECORD:                
+    case TBB_STOP:                   
+    case TBB_TRIG_RELEASE:         
+    case TBB_TRIG_GENERATE:          
+    case TBB_TRIG_SETUP:             
+    case TBB_TRIG_COEF:             
+    case TBB_TRIG_SETTINGS:          
+    case TBB_TRIG_INFO:              
+    case TBB_READ:                   
+    case TBB_MODE:                   
+    case TBB_PAGEPERIOD:             
+    case TBB_VERSION:                
+    case TBB_SIZE:                   
+    case TBB_STATUS:                 
+    case TBB_CLEAR:                  
+    case TBB_RESET:                  
+    case TBB_CONFIG:                 
+    case TBB_ERASE_IMAGE:            
+    case TBB_READ_IMAGE:             
+    case TBB_WRITE_IMAGE:            
+    case TBB_IMAGE_INFO:             
+    case TBB_READX:                  
+    case TBB_READW:        
+    case TBB_WRITEW:       
+    case TBB_READR:        
+    case TBB_WRITER:
+    case TBB_ARP:
+    case TBB_ARP_MODE:
+    case TBB_STOP_CEP:
+    case TBB_TEMP_LIMIT: {
+      // put event on the queue
+      LOG_DEBUG_STR("Put event on queue");
+          
+      uint8* bufptr = new uint8[sizeof(GCFPortInterface*) 
+                              + sizeof(uint32)
+                              + sizeof(GCFEvent) 
+                              + event.length];
+      TbbEvent* tbbevent = new (bufptr) TbbEvent;
+      
+      memcpy(&(tbbevent->event), &event, (sizeof(GCFEvent) + event.length));      
+      tbbevent->length = sizeof(GCFEvent) + event.length;
+      tbbevent->port = &port;
+      
+      itsTbbQueue->push_back(tbbevent);
+      if (cmdhandler->tpCmdDone()) {
+        TRAN(TBBDriver::idle_state);
+      } 
+    } break;                
+    
+    default: {
+      LOG_DEBUG_STR("DEFAULT");
+      
+      status = GCFEvent::NOT_HANDLED;
+    } break;
+  }
+  
+  
+  return(status);
 }
 
 //-----------------------------------------------------------------------------
@@ -880,11 +890,11 @@ GCFEvent::TResult TBBDriver::busy_state(GCFEvent& event, GCFPortInterface& port)
 //
 void TBBDriver::openBoards()
 {
-	LOG_DEBUG_STR("opening boards");
-	for (int boardnr = 0; boardnr < TS->maxBoards(); boardnr++) {
-		if (itsBoard[boardnr].isConnected())
-			itsBoard[boardnr].close();
-		itsBoard[boardnr].open();
+  LOG_DEBUG_STR("opening boards");
+  for (int boardnr = 0; boardnr < TS->maxBoards(); boardnr++) {
+    if (itsBoard[boardnr].isConnected())
+      itsBoard[boardnr].close();
+    itsBoard[boardnr].open();
   }
 }
 
@@ -894,8 +904,8 @@ void TBBDriver::openBoards()
 bool TBBDriver::isEnabled()
 {
   bool enabled = true;
-	for (int boardnr = 0; boardnr < TS->maxBoards(); boardnr++)
-	{
+  for (int boardnr = 0; boardnr < TS->maxBoards(); boardnr++)
+  {
     if (!itsBoard[boardnr].isConnected())
     {
       enabled = false;
@@ -908,376 +918,387 @@ bool TBBDriver::isEnabled()
 //-----------------------------------------------------------------------------
 bool TBBDriver::CheckAlive(GCFEvent& event, GCFPortInterface& port)
 {
-	//bool done = false;
-	int32 boardnr;
-	static uint32 activeboards;
-	static uint32 sendmask;
-	
-	
-	//itsAliveTimer->cancelAllTimers();
-	if (!itsAliveCheck) {
-		itsAliveCheck	= true;
-		//itsNewBoards	= 0;
-		boardnr				= 0;
-		sendmask			= 0;
-		activeboards	= 0;
-		
-		itsAliveTimer->cancelAllTimers();
-		// mask all boards to check	
-		for(int nr = 0; nr < TS->maxBoards(); nr++) {
-			itsBoard[nr].send(*itsAlive);
-			sendmask |= (1 << nr);
-		}
-		// 1 timer for al events
-		itsAliveTimer->setTimer(2.0);
-	} else {
-		
-		if (event.signal == TP_ALIVE_ACK) {
-			boardnr = TS->port2Board(&port);
-			if (boardnr != -1) {
-				activeboards |= (1 << boardnr);
-		
-				TPAliveAckEvent ack(event);
-				
-				if (ack.resetflag == 0) {
-						//itsNewBoards |= (1 << boardnr);	// board is reset, setup is needed
-						itsResetCount[boardnr]++;
-						TS->clearRcuSettings(boardnr);
-						TS->setBoardState(boardnr,clearBoard);
-						LOG_INFO_STR("=BOARD-RESET=, TBB board " << boardnr << " has been reset " << itsResetCount[boardnr] << " times");
-				}
-						
-				if ((TS->activeBoardsMask() & (1 << boardnr)) == 0) {
-					//itsNewBoards |= (1 << boardnr); // new board, setup is needed	
-					TS->setBoardState(boardnr,resetBoard);
-					//TS->setBoardState(boardnr,clearBoard);
-					LOG_INFO_STR("=NEW_BOARD=, TBB board " << boardnr << " is new");
-				}
-			}
-		}
-		
-		if ((event.signal == F_TIMER) || (activeboards == sendmask )) {
-			if (activeboards == sendmask) {
-				itsAliveTimer->cancelAllTimers();
-			}
-			
-			for (int board = 0; board < TS->maxBoards(); board++) {
-				if (~activeboards & (1 << board)) {	// look for not active boards
-					TS->setBoardState(board, noBoard);		  
-				}
-			} 
-			
-			if (activeboards != TS->activeBoardsMask()) {
-				TS->setActiveBoardsMask(activeboards);
-				
-				//itsActiveBoardsChange = true;
-				char boardstr[40];
-				char instr[5];
-				strcpy(boardstr,"");
-				for (int i = 0; i < TS->maxBoards(); i++) {
-					if (activeboards & (1 << i)) {
-						sprintf(instr," %d",i);
-						strcat(boardstr,instr);
-					} else {
-						strcat(boardstr," .");
-					}
-				}
-				msghandler->sendBoardChange(TS->activeBoardsMask());
-				LOG_INFO_STR("Available TBB boards changed:" << boardstr);	
-			}
-	
-			LOG_DEBUG_STR("Active TBB boards check");
-			if (TS->activeBoardsMask() == 0) {
-				itsAliveTimer->setTimer(5.0);
-			} else {
-				itsAliveTimer->setTimer(ALIVECHECKTIME);
-			}
-			itsAliveCheck = false;
-			//done = true;
-		}
-	}
-	return(!itsAliveCheck);
+  //bool done = false;
+  int32 boardnr;
+  static uint32 activeboards;
+  static uint32 sendmask;
+  
+  
+  //itsAliveTimer->cancelAllTimers();
+  if (!itsAliveCheck) {
+    itsAliveCheck = true;
+    //itsNewBoards  = 0;
+    boardnr     = 0;
+    sendmask      = 0;
+    activeboards  = 0;
+    
+    itsAliveTimer->cancelAllTimers();
+    // mask all boards to check 
+    for(int nr = 0; nr < TS->maxBoards(); nr++) {
+      itsBoard[nr].send(*itsAlive);
+      sendmask |= (1 << nr);
+    }
+    // 1 timer for al events
+    itsAliveTimer->setTimer(2.0);
+  } else {
+    
+    if (event.signal == TP_ALIVE_ACK) {
+      boardnr = TS->port2Board(&port);
+      if (boardnr != -1) {
+        activeboards |= (1 << boardnr);
+          LOG_INFO_STR("TP_ALIVE_ACK " << activeboards << " <== activeboards mask");
+        
+        TPAliveAckEvent ack(event);
+        // board is reset
+        if (ack.resetflag == 0) {
+          TS->clearRcuSettings(boardnr);
+          if (TS->getFreeToReset(boardnr)) {
+            TS->setImageNr(boardnr, 0);
+            TS->setBoardState(boardnr,setImage1);
+          } else {
+            // new image loaded
+            TS->setFreeToReset(boardnr, true);
+            TS->setBoardState(boardnr,clearBoard);
+          }
+               itsResetCount[boardnr]++;
+               LOG_INFO_STR("=BOARD-RESET=, TBB board " << boardnr << " has been reset " << itsResetCount[boardnr] << " times");
+        } else if ((TS->activeBoardsMask() & (1 << boardnr)) == 0) { // new board
+          TS->clearRcuSettings(boardnr);
+          if (TS->getFreeToReset(boardnr)) {
+            TS->setImageNr(boardnr, 0);
+            TS->setBoardState(boardnr,setImage1);
+          } else {
+            // new image loaded
+            TS->setFreeToReset(boardnr, true);
+            TS->setBoardState(boardnr,clearBoard);
+          }
+              LOG_INFO_STR("=NEW_BOARD=, TBB board " << boardnr << " is new");
+            }
+      }
+    }
+    
+    if ((event.signal == F_TIMER) || (activeboards == sendmask )) {
+      if (activeboards == sendmask) {
+        itsAliveTimer->cancelAllTimers();
+      }
+      
+      for (int board = 0; board < TS->maxBoards(); board++) {
+        if (~activeboards & (1 << board)) { // look for not active boards
+          TS->setBoardState(board, noBoard);      
+        }
+      } 
+      
+      if (activeboards != TS->activeBoardsMask()) {
+        TS->setActiveBoardsMask(activeboards);
+        
+        //itsActiveBoardsChange = true;
+        char boardstr[40];
+        char instr[5];
+        strcpy(boardstr,"");
+        for (int i = 0; i < TS->maxBoards(); i++) {
+          if (activeboards & (1 << i)) {
+            sprintf(instr," %d",i);
+            strcat(boardstr,instr);
+          } else {
+            strcat(boardstr," .");
+          }
+        }
+        msghandler->sendBoardChange(TS->activeBoardsMask());
+        LOG_INFO_STR("Available TBB boards changed:" << boardstr);  
+      }
+  
+      LOG_DEBUG_STR("Active TBB boards check");
+      if (TS->activeBoardsMask() == 0) {
+        itsAliveTimer->setTimer(5.0);
+      } else {
+        itsAliveTimer->setTimer(ALIVECHECKTIME);
+      }
+      itsAliveCheck = false;
+      //done = true;
+    }
+  }
+  return(!itsAliveCheck);
 }
 
 //-----------------------------------------------------------------------------
 bool TBBDriver::sendInfo(GCFEvent& event, GCFPortInterface& port)
 {
-	bool valid = true;
-	
-	switch (event.signal) {		
+  bool valid = true;
+  
+  switch (event.signal) {   
 
-		case TBB_GET_CONFIG: {
-			if (TS->activeBoardsMask() != 0) {
-				TBBGetConfigAckEvent ack;
-				ack.max_boards = TS->maxBoards();
-				ack.active_boards_mask = TS->activeBoardsMask();
-				port.send(ack);
-			} else {
-				TBBDriverBusyAckEvent ack;    
-				port.send(ack); 
-			} 
-		} break;
-		
-		case TBB_RCU_INFO: {
-			if (TS->activeBoardsMask() != 0) {
-				TBBRcuInfoAckEvent ack;
-				int rcu;
-				for (int32 ch = 0; ch < TS->maxChannels(); ch++) {
-					rcu = TS->getChRcuNr(ch);
-					//LOG_INFO(formatString("info for ch %d rcu.%d", ch, rcu));
-					ack.rcu_status[rcu] = (uint16)TS->getChStatus(ch);
-					ack.rcu_state[rcu] = TS->getChState(ch);
-					ack.rcu_start_addr[rcu] = TS->getChStartAddr(ch);
-					ack.rcu_pages[rcu] = TS->getChPageSize(ch);
-					ack.rcu_on_board[rcu] = (uint8)TS->getChBoardNr(ch);
-					ack.rcu_on_input[rcu] = (uint8)TS->getChInputNr(ch);
-					
-					//LOG_DEBUG_STR(formatString("Channel %d ,Rcu %d = status[0x%04X] state[%c] addr[%u] pages[%u]"
-					//	,ch,TS->getChRcuNr(ch), TS->getChStatus(ch), TS->getChState(ch),TS->getChStartAddr(ch),TS->getChPageSize(ch)));
-				}
-				port.send(ack);
-			} else {
-				TBBDriverBusyAckEvent ack;    
-				port.send(ack); 
-			}  
-		} break;
-		
-		case TBB_TRIG_SETTINGS: {
-			if (TS->activeBoardsMask() != 0) {
-				TBBTrigSettingsAckEvent ack;
-				int rcu;
-				for (int32 ch = 0; ch < TS->maxChannels(); ch++) {
-					rcu = TS->getChRcuNr(ch);
-					
-					ack.setup[rcu].level = TS->getChTriggerLevel(ch);
-					ack.setup[rcu].start_mode = TS->getChTriggerStartMode(ch);
-					ack.setup[rcu].stop_mode = TS->getChTriggerStopMode(ch);
-					ack.setup[rcu].filter_select = TS->getChFilterSelect(ch);
-					ack.setup[rcu].window = TS->getChDetectWindow(ch);
-					ack.setup[rcu].operating_mode = TS->getChOperatingMode(ch);
-					ack.coefficients[rcu].c0 = TS->getChFilterCoefficient(ch,0);
-					ack.coefficients[rcu].c1 = TS->getChFilterCoefficient(ch,1);
-					ack.coefficients[rcu].c2 = TS->getChFilterCoefficient(ch,2);
-					ack.coefficients[rcu].c3 = TS->getChFilterCoefficient(ch,3);
-				}
-				port.send(ack);
-			} else {
-				TBBDriverBusyAckEvent ack;    
-				port.send(ack); 
-			}   
-		} break;
-		
-		default: {
-			valid = false;
-		} break;
-	}
-	return (valid);
+    case TBB_GET_CONFIG: {
+      if (TS->activeBoardsMask() != 0) {
+        TBBGetConfigAckEvent ack;
+        ack.max_boards = TS->maxBoards();
+        ack.active_boards_mask = TS->activeBoardsMask();
+            port.send(ack);
+      } else {
+        TBBDriverBusyAckEvent ack;    
+        port.send(ack); 
+      } 
+    } break;
+    
+    case TBB_RCU_INFO: {
+      if (TS->activeBoardsMask() != 0) {
+        TBBRcuInfoAckEvent ack;
+        int rcu;
+        for (int32 ch = 0; ch < TS->maxChannels(); ch++) {
+          rcu = TS->getChRcuNr(ch);
+          //LOG_INFO(formatString("info for ch %d rcu.%d", ch, rcu));
+          ack.rcu_status[rcu] = (uint16)TS->getChStatus(ch);
+          ack.rcu_state[rcu] = TS->getChState(ch);
+          ack.rcu_start_addr[rcu] = TS->getChStartAddr(ch);
+          ack.rcu_pages[rcu] = TS->getChPageSize(ch);
+          ack.rcu_on_board[rcu] = (uint8)TS->getChBoardNr(ch);
+          ack.rcu_on_input[rcu] = (uint8)TS->getChInputNr(ch);
+          
+          //LOG_DEBUG_STR(formatString("Channel %d ,Rcu %d = status[0x%04X] state[%c] addr[%u] pages[%u]"
+          //  ,ch,TS->getChRcuNr(ch), TS->getChStatus(ch), TS->getChState(ch),TS->getChStartAddr(ch),TS->getChPageSize(ch)));
+        }
+        port.send(ack);
+      } else {
+        TBBDriverBusyAckEvent ack;    
+        port.send(ack); 
+      }  
+    } break;
+    
+    case TBB_TRIG_SETTINGS: {
+      if (TS->activeBoardsMask() != 0) {
+        TBBTrigSettingsAckEvent ack;
+        int rcu;
+        for (int32 ch = 0; ch < TS->maxChannels(); ch++) {
+          rcu = TS->getChRcuNr(ch);
+          
+          ack.setup[rcu].level = TS->getChTriggerLevel(ch);
+          ack.setup[rcu].start_mode = TS->getChTriggerStartMode(ch);
+          ack.setup[rcu].stop_mode = TS->getChTriggerStopMode(ch);
+          ack.setup[rcu].filter_select = TS->getChFilterSelect(ch);
+          ack.setup[rcu].window = TS->getChDetectWindow(ch);
+          ack.setup[rcu].operating_mode = TS->getChOperatingMode(ch);
+          ack.coefficients[rcu].c0 = TS->getChFilterCoefficient(ch,0);
+          ack.coefficients[rcu].c1 = TS->getChFilterCoefficient(ch,1);
+          ack.coefficients[rcu].c2 = TS->getChFilterCoefficient(ch,2);
+          ack.coefficients[rcu].c3 = TS->getChFilterCoefficient(ch,3);
+        }
+        port.send(ack);
+      } else {
+        TBBDriverBusyAckEvent ack;    
+        port.send(ack); 
+      }   
+    } break;
+    
+    default: {
+      valid = false;
+    } break;
+  }
+  return (valid);
 }
 
 //-----------------------------------------------------------------------------
 bool TBBDriver::SetTbbCommand(unsigned short signal)
 {
-	if (cmd) {
-		//cmdhandler->setTpCmd(0);
-		delete cmd;
-	}
-	switch(signal)
-	{
-		case TBB_ALLOC:	{
-			AllocCmd *cmd;
-			cmd = new AllocCmd();
-			cmdhandler->setTpCmd(cmd);
-		} break;
-		
-		case TBB_FREE: {
-			FreeCmd *cmd;
-			cmd = new FreeCmd();
-			cmdhandler->setTpCmd(cmd);
-		} break;
-		
-		case TBB_RECORD: 	{
-			RecordCmd *cmd;
-			cmd = new RecordCmd();
-			cmdhandler->setTpCmd(cmd);
-		} break;
-		
-		case TBB_STOP:	{
-			StopCmd *cmd;
-			cmd = new StopCmd();
-			cmdhandler->setTpCmd(cmd);
-		} break;
-		
-		case TBB_TRIG_RELEASE:	{
-			TrigReleaseCmd *cmd;
-			cmd = new TrigReleaseCmd();
-			cmdhandler->setTpCmd(cmd);
-		} break;
-		
-		case TBB_TRIG_GENERATE:	{
-			TrigGenCmd *cmd;
-			cmd = new TrigGenCmd();
-			cmdhandler->setTpCmd(cmd);
-		} break;
-		
-		case TBB_TRIG_SETUP:	{
-			TrigSetupCmd *cmd;
-			cmd = new TrigSetupCmd();
-			cmdhandler->setTpCmd(cmd);
-		} break;
-		
-		case TBB_TRIG_COEF:	{
-			TrigCoefCmd *cmd;
-			cmd = new TrigCoefCmd();
-			cmdhandler->setTpCmd(cmd);
-		} break;
-		
-		case TBB_TRIG_INFO:	{
-			TrigInfoCmd *cmd;
-			cmd = new TrigInfoCmd();
-			cmdhandler->setTpCmd(cmd);
-		} break;
-		
-		case TBB_READ:	{
-			ReadCmd *cmd;
-			cmd = new ReadCmd();
-			cmdhandler->setTpCmd(cmd);
-		} break;
-		
-		case TBB_MODE: {
-			UdpCmd *cmd;
-			cmd = new UdpCmd();
-			cmdhandler->setTpCmd(cmd);
-		} break;
-		
-		case TBB_PAGEPERIOD: {
-			PageperiodCmd *cmd;
-			cmd = new PageperiodCmd();
-			cmdhandler->setTpCmd(cmd);
-		} break;
-		
-		case TBB_VERSION: {
-			VersionCmd *cmd;
-			cmd = new VersionCmd();
-			cmdhandler->setTpCmd(cmd);
-		} break;
-		
-		case TBB_SIZE:	{
-			SizeCmd *cmd;
-			cmd = new SizeCmd();
-			cmdhandler->setTpCmd(cmd);
-		} break;
-		
-		case TBB_STATUS:	{
-			StatusCmd *cmd;
-			cmd = new StatusCmd();
-			cmdhandler->setTpCmd(cmd);
-		} break;
-		
-		case TBB_CLEAR:	{
-			ClearCmd *cmd;
-			cmd = new ClearCmd();
-			cmdhandler->setTpCmd(cmd);
-		} break;
-		
-		case TBB_RESET:	{
-			ResetCmd *cmd;
-			cmd = new ResetCmd();
-			cmdhandler->setTpCmd(cmd);
-		} break;
-		
-		case TBB_CONFIG:	{
-			ConfigCmd *cmd;
-			cmd = new ConfigCmd();
-			cmdhandler->setTpCmd(cmd);
-		} break;
-		
-		case TBB_ERASE_IMAGE:	{
-			ErasefCmd *cmd;
-			cmd = new ErasefCmd();
-			cmdhandler->setTpCmd(cmd);
-		} break;
-		
-		case TBB_READ_IMAGE:	{
-			ReadfCmd *cmd;
-			cmd = new ReadfCmd();
-			cmdhandler->setTpCmd(cmd);
-		} break;
-		
-		case TBB_WRITE_IMAGE:
-		{
-			WritefCmd *cmd;
-			cmd = new WritefCmd();
-			cmdhandler->setTpCmd(cmd);
-		} break;
-		
-		case TBB_IMAGE_INFO:
-		{
-			ImageInfoCmd *cmd;
-			cmd = new ImageInfoCmd();
-			cmdhandler->setTpCmd(cmd);
-		} break;
-		
-		case TBB_READW: {
-			ReadwCmd *cmd;
-			cmd = new ReadwCmd();
-			cmdhandler->setTpCmd(cmd);
-		} break;
-		
-		case TBB_WRITEW:	{
-			WritewCmd *cmd;
-			cmd = new WritewCmd();
-			cmdhandler->setTpCmd(cmd);
-		} break;
-		
-		case TBB_READR:	{
-			ReadrCmd *cmd;
-			cmd = new ReadrCmd();
-			cmdhandler->setTpCmd(cmd);
-		} break;
-		
-		case TBB_WRITER:	{
-			WriterCmd *cmd;
-			cmd = new WriterCmd();
-			cmdhandler->setTpCmd(cmd);
-		} break;
-		
-		case TBB_READX:	{
-			ReadxCmd *cmd;
-			cmd = new ReadxCmd();
-			cmdhandler->setTpCmd(cmd);
-		} break;
-		
-		case TBB_ARP:	{
-			ArpCmd *cmd;
-			cmd = new ArpCmd();
-			cmdhandler->setTpCmd(cmd);
-		} break;
-		
-		case TBB_ARP_MODE:	{
-			ArpModeCmd *cmd;
-			cmd = new ArpModeCmd();
-			cmdhandler->setTpCmd(cmd);
-		} break;
-		
-		case TBB_STOP_CEP:	{
-			StopCepCmd *cmd;
-			cmd = new StopCepCmd();
-			cmdhandler->setTpCmd(cmd);
-		} break;
-		
-		case TBB_TEMP_LIMIT:	{
-			TempLimitCmd *cmd;
-			cmd = new TempLimitCmd();
-			cmdhandler->setTpCmd(cmd);
-		} break;
-		
-		default: {
-			return (false);		
-		} break;
-	}
-	
-	itsAcceptor.cancelAllTimers();
-	return (true);
+  if (cmd) {
+    //cmdhandler->setTpCmd(0);
+    delete cmd;
+  }
+  switch(signal)
+  {
+    case TBB_ALLOC: {
+      AllocCmd *cmd;
+      cmd = new AllocCmd();
+      cmdhandler->setTpCmd(cmd);
+    } break;
+    
+    case TBB_FREE: {
+      FreeCmd *cmd;
+      cmd = new FreeCmd();
+      cmdhandler->setTpCmd(cmd);
+    } break;
+    
+    case TBB_RECORD:  {
+      RecordCmd *cmd;
+      cmd = new RecordCmd();
+      cmdhandler->setTpCmd(cmd);
+    } break;
+    
+    case TBB_STOP:  {
+      StopCmd *cmd;
+      cmd = new StopCmd();
+      cmdhandler->setTpCmd(cmd);
+    } break;
+    
+    case TBB_TRIG_RELEASE:  {
+      TrigReleaseCmd *cmd;
+      cmd = new TrigReleaseCmd();
+      cmdhandler->setTpCmd(cmd);
+    } break;
+    
+    case TBB_TRIG_GENERATE: {
+      TrigGenCmd *cmd;
+      cmd = new TrigGenCmd();
+      cmdhandler->setTpCmd(cmd);
+    } break;
+    
+    case TBB_TRIG_SETUP:  {
+      TrigSetupCmd *cmd;
+      cmd = new TrigSetupCmd();
+      cmdhandler->setTpCmd(cmd);
+    } break;
+    
+    case TBB_TRIG_COEF: {
+      TrigCoefCmd *cmd;
+      cmd = new TrigCoefCmd();
+      cmdhandler->setTpCmd(cmd);
+    } break;
+    
+    case TBB_TRIG_INFO: {
+      TrigInfoCmd *cmd;
+      cmd = new TrigInfoCmd();
+      cmdhandler->setTpCmd(cmd);
+    } break;
+    
+    case TBB_READ:  {
+      ReadCmd *cmd;
+      cmd = new ReadCmd();
+      cmdhandler->setTpCmd(cmd);
+    } break;
+    
+    case TBB_MODE: {
+      UdpCmd *cmd;
+      cmd = new UdpCmd();
+      cmdhandler->setTpCmd(cmd);
+    } break;
+    
+    case TBB_PAGEPERIOD: {
+      PageperiodCmd *cmd;
+      cmd = new PageperiodCmd();
+      cmdhandler->setTpCmd(cmd);
+    } break;
+    
+    case TBB_VERSION: {
+      VersionCmd *cmd;
+      cmd = new VersionCmd();
+      cmdhandler->setTpCmd(cmd);
+    } break;
+    
+    case TBB_SIZE:  {
+      SizeCmd *cmd;
+      cmd = new SizeCmd();
+      cmdhandler->setTpCmd(cmd);
+    } break;
+    
+    case TBB_STATUS:  {
+      StatusCmd *cmd;
+      cmd = new StatusCmd();
+      cmdhandler->setTpCmd(cmd);
+    } break;
+    
+    case TBB_CLEAR: {
+      ClearCmd *cmd;
+      cmd = new ClearCmd();
+      cmdhandler->setTpCmd(cmd);
+    } break;
+    
+    case TBB_RESET: {
+      ResetCmd *cmd;
+      cmd = new ResetCmd();
+      cmdhandler->setTpCmd(cmd);
+    } break;
+    
+    case TBB_CONFIG:  {
+      ConfigCmd *cmd;
+      cmd = new ConfigCmd();
+      cmdhandler->setTpCmd(cmd);
+    } break;
+    
+    case TBB_ERASE_IMAGE: {
+      ErasefCmd *cmd;
+      cmd = new ErasefCmd();
+      cmdhandler->setTpCmd(cmd);
+    } break;
+    
+    case TBB_READ_IMAGE:  {
+      ReadfCmd *cmd;
+      cmd = new ReadfCmd();
+      cmdhandler->setTpCmd(cmd);
+    } break;
+    
+    case TBB_WRITE_IMAGE:
+    {
+      WritefCmd *cmd;
+      cmd = new WritefCmd();
+      cmdhandler->setTpCmd(cmd);
+    } break;
+    
+    case TBB_IMAGE_INFO:
+    {
+      ImageInfoCmd *cmd;
+      cmd = new ImageInfoCmd();
+      cmdhandler->setTpCmd(cmd);
+    } break;
+    
+    case TBB_READW: {
+      ReadwCmd *cmd;
+      cmd = new ReadwCmd();
+      cmdhandler->setTpCmd(cmd);
+    } break;
+    
+    case TBB_WRITEW:  {
+      WritewCmd *cmd;
+      cmd = new WritewCmd();
+      cmdhandler->setTpCmd(cmd);
+    } break;
+    
+    case TBB_READR: {
+      ReadrCmd *cmd;
+      cmd = new ReadrCmd();
+      cmdhandler->setTpCmd(cmd);
+    } break;
+    
+    case TBB_WRITER:  {
+      WriterCmd *cmd;
+      cmd = new WriterCmd();
+      cmdhandler->setTpCmd(cmd);
+    } break;
+    
+    case TBB_READX: {
+      ReadxCmd *cmd;
+      cmd = new ReadxCmd();
+      cmdhandler->setTpCmd(cmd);
+    } break;
+    
+    case TBB_ARP: {
+      ArpCmd *cmd;
+      cmd = new ArpCmd();
+      cmdhandler->setTpCmd(cmd);
+    } break;
+    
+    case TBB_ARP_MODE:  {
+      ArpModeCmd *cmd;
+      cmd = new ArpModeCmd();
+      cmdhandler->setTpCmd(cmd);
+    } break;
+    
+    case TBB_STOP_CEP:  {
+      StopCepCmd *cmd;
+      cmd = new StopCepCmd();
+      cmdhandler->setTpCmd(cmd);
+    } break;
+    
+    case TBB_TEMP_LIMIT:  {
+      TempLimitCmd *cmd;
+      cmd = new TempLimitCmd();
+      cmdhandler->setTpCmd(cmd);
+    } break;
+    
+    default: {
+      return (false);   
+    } break;
+  }
+  
+  itsAcceptor.cancelAllTimers();
+  return (true);
 }
 
   //} // end namespace TBB
@@ -1302,48 +1323,38 @@ int main(int argc, char** argv)
   
 	// daemonize if required 
 	if (itsDaemonize) {
-		LOG_DEBUG_STR("background this process");
-		if (daemonize(false) == 0) {
-			//cerr << "Failed to background this process: " << strerror(errno) << endl;
-			exit(EXIT_FAILURE);
-		}
-	}
-
-	LOG_DEBUG_STR("Reading configuration files");
-	try {
-		LOFAR::ConfigLocator cl;
-		LOFAR::ACC::APS::globalParameterSet()->adoptFile(cl.locate("TBBDriver.conf"));
-	}
-	catch (LOFAR::Exception e) {
-		LOG_ERROR_STR("Failed to load configuration files: " << e.text());
-		exit(EXIT_FAILURE);
-	}
+    LOG_DEBUG_STR("background this process");
+    if (daemonize(false) == 0) {
+      //cerr << "Failed to background this process: " << strerror(errno) << endl;
+      exit(EXIT_FAILURE);
+    }
+  }
+  
+  LOG_DEBUG_STR("Reading configuration files");
+  try {
+    LOFAR::ConfigLocator cl;
+    LOFAR::ACC::APS::globalParameterSet()->adoptFile(cl.locate("TBBDriver.conf"));
+    LOFAR::ACC::APS::globalParameterSet()->adoptFile(cl.locate("RemoteStation.conf"));  
+  }
+  catch (LOFAR::Exception e) {
+    LOG_ERROR_STR("Failed to load configuration files: " << e.text());
+    exit(EXIT_FAILURE);
+  }
 
-	LOFAR::TBB::TBBDriver tbb("TBBDriver");
+  LOFAR::TBB::TBBDriver tbb("TBBDriver");
   
-	tbb.start(); // make initialsition
+  tbb.start(); // make initialsition
   
 	try {
-		LOFAR::GCF::TM::GCFTask::run();
-	}
-	catch (LOFAR::Exception e) {
-		LOG_ERROR_STR("Exception: " << e.text());
-		exit(EXIT_FAILURE);
-	}
+    LOFAR::GCF::TM::GCFTask::run();
+  }
+  catch (LOFAR::Exception e) {
+    LOG_ERROR_STR("Exception: " << e.text());
+    exit(EXIT_FAILURE);
+  }
 
 	LOG_INFO("Normal termination of program");
 
 	return(0);
 }
 
-// Remove lines or remove comments for copy constructor and assignment.
-///TBBDriver::TBBDriver (const TBBDriver& that)
-///{}
-///TBBDriver& TBBDriver::operator= (const TBBDriver& that)
-///{
-///  if (this != &that) {
-///    ... copy members ...
-///  }
-///  return *this;
-///}
-
diff --git a/MAC/APL/PIC/TBBDriver/src/TempLimitCmd.cc b/MAC/APL/PIC/TBBDriver/src/TempLimitCmd.cc
index 002c44d2a3d..607033bce7e 100644
--- a/MAC/APL/PIC/TBBDriver/src/TempLimitCmd.cc
+++ b/MAC/APL/PIC/TBBDriver/src/TempLimitCmd.cc
@@ -41,7 +41,7 @@ TempLimitCmd::TempLimitCmd()
 	itsTBBE 		= 0;
 	itsTBBackE 	= new TBBTempLimitAckEvent();
 	
-	for(int boardnr = 0;boardnr < MAX_N_TBBBOARDS;boardnr++) { 
+	for(int boardnr = 0;boardnr < MAX_N_TBBOARDS;boardnr++) { 
 		itsTBBackE->status_mask[boardnr]	= 0;
 	}
 	
diff --git a/MAC/APL/PIC/TBBDriver/src/TrigCoefCmd.cc b/MAC/APL/PIC/TBBDriver/src/TrigCoefCmd.cc
index b7c6c619e2d..a8a3457b83c 100644
--- a/MAC/APL/PIC/TBBDriver/src/TrigCoefCmd.cc
+++ b/MAC/APL/PIC/TBBDriver/src/TrigCoefCmd.cc
@@ -41,7 +41,7 @@ TrigCoefCmd::TrigCoefCmd()
 	itsTBBE 		= 0;
 	itsTBBackE 	= new TBBTrigCoefAckEvent();
 	
-	for(int boardnr = 0;boardnr < MAX_N_TBBBOARDS;boardnr++) { 
+	for(int boardnr = 0;boardnr < MAX_N_TBBOARDS;boardnr++) { 
 		itsTBBackE->status_mask[boardnr]	= 0;
 	}
 	setWaitAck(true);		
diff --git a/MAC/APL/PIC/TBBDriver/src/TrigGenCmd.cc b/MAC/APL/PIC/TBBDriver/src/TrigGenCmd.cc
index dc57452c46b..da0599c9e45 100644
--- a/MAC/APL/PIC/TBBDriver/src/TrigGenCmd.cc
+++ b/MAC/APL/PIC/TBBDriver/src/TrigGenCmd.cc
@@ -42,7 +42,7 @@ TrigGenCmd::TrigGenCmd():
 	itsTBBE 		= 0;
 	itsTBBackE 	= new TBBTrigGenerateAckEvent();
 	
-	for(int boardnr = 0;boardnr < MAX_N_TBBBOARDS;boardnr++) { 
+	for(int boardnr = 0;boardnr < MAX_N_TBBOARDS;boardnr++) { 
 		itsTBBackE->status_mask[boardnr]	= 0;
 		itsChannelMask[boardnr]	= 0;
 	}
diff --git a/MAC/APL/PIC/TBBDriver/src/TrigGenCmd.h b/MAC/APL/PIC/TBBDriver/src/TrigGenCmd.h
index b51661207fb..6ff7fdde119 100644
--- a/MAC/APL/PIC/TBBDriver/src/TrigGenCmd.h
+++ b/MAC/APL/PIC/TBBDriver/src/TrigGenCmd.h
@@ -67,7 +67,7 @@ namespace LOFAR {
 				
 				int32 itsStage;
 				// variables holding data from tp cmd
-				uint32	itsChannelMask[MAX_N_TBBBOARDS];
+				uint32	itsChannelMask[MAX_N_TBBOARDS];
 		};
 	} // end TBB namespace
 } // end LOFAR namespace
diff --git a/MAC/APL/PIC/TBBDriver/src/TrigReleaseCmd.h b/MAC/APL/PIC/TBBDriver/src/TrigReleaseCmd.h
index 6d6a2121f5d..80455a4f11a 100644
--- a/MAC/APL/PIC/TBBDriver/src/TrigReleaseCmd.h
+++ b/MAC/APL/PIC/TBBDriver/src/TrigReleaseCmd.h
@@ -61,8 +61,8 @@ namespace LOFAR {
 				TbbSettings *TS;
 				
 				int32		itsStage;
-				uint32	itsChannelStopMask[MAX_N_TBBBOARDS];
-				uint32	itsChannelStartMask[MAX_N_TBBBOARDS];
+				uint32	itsChannelStopMask[MAX_N_TBBOARDS];
+				uint32	itsChannelStartMask[MAX_N_TBBOARDS];
 				
 				TPTrigReleaseEvent			*itsTPE;
 				TPTrigReleaseAckEvent		*itsTPackE;
diff --git a/MAC/APL/PIC/TBBDriver/src/TrigSetupCmd.cc b/MAC/APL/PIC/TBBDriver/src/TrigSetupCmd.cc
index 4432ecf6fb3..f479fc66030 100644
--- a/MAC/APL/PIC/TBBDriver/src/TrigSetupCmd.cc
+++ b/MAC/APL/PIC/TBBDriver/src/TrigSetupCmd.cc
@@ -41,7 +41,7 @@ TrigSetupCmd::TrigSetupCmd()
 	itsTBBE 		= 0;
 	itsTBBackE 	= new TBBTrigSetupAckEvent();
 	
-	for(int boardnr = 0;boardnr < MAX_N_TBBBOARDS;boardnr++) { 
+	for(int boardnr = 0;boardnr < MAX_N_TBBOARDS;boardnr++) { 
 		itsTBBackE->status_mask[boardnr]	= 0;
 	}
 	setWaitAck(true);		
diff --git a/MAC/APL/PIC/TBBDriver/src/VersionCmd.cc b/MAC/APL/PIC/TBBDriver/src/VersionCmd.cc
index 103e3cae6b6..42ea530000a 100644
--- a/MAC/APL/PIC/TBBDriver/src/VersionCmd.cc
+++ b/MAC/APL/PIC/TBBDriver/src/VersionCmd.cc
@@ -41,7 +41,7 @@ VersionCmd::VersionCmd()
 	itsTBBE 		= 0;
 	itsTBBackE 	= new TBBVersionAckEvent();
 	
-	for(int boardnr = 0;boardnr < MAX_N_TBBBOARDS;boardnr++) { 
+	for(int boardnr = 0;boardnr < MAX_N_TBBOARDS;boardnr++) { 
 		itsTBBackE->status_mask[boardnr]	= 0;
 		itsTBBackE->boardid[boardnr]			= 0;
 		itsTBBackE->swversion[boardnr]  	= 0;
diff --git a/MAC/APL/PIC/TBBDriver/src/WritefCmd.cc b/MAC/APL/PIC/TBBDriver/src/WritefCmd.cc
index df1a2a03a9b..7a22caa70de 100644
--- a/MAC/APL/PIC/TBBDriver/src/WritefCmd.cc
+++ b/MAC/APL/PIC/TBBDriver/src/WritefCmd.cc
@@ -136,7 +136,7 @@ void WritefCmd::sendTpEvent()
         erasefEvent->status = 0;
         erasefEvent->addr = static_cast<uint32>(itsSector * FL_SECTOR_SIZE);
         TS->boardPort(getBoardNr()).send(*erasefEvent);
-        TS->boardPort(getBoardNr()).setTimer((long)1); // erase time sector is 500 mSec
+        TS->boardPort(getBoardNr()).setTimer(1.0); // erase time sector is 500 mSec
         delete erasefEvent;
       } break;
       
@@ -152,9 +152,8 @@ void WritefCmd::sendTpEvent()
           itsTPE->data[tp_an] |= (itsImageData[itsDataPtr] << 16); itsDataPtr++; 
           itsTPE->data[tp_an] |= (itsImageData[itsDataPtr] << 24); itsDataPtr++;    
         }
-        
         TS->boardPort(getBoardNr()).send(*itsTPE);
-        TS->boardPort(getBoardNr()).setTimer((long)1);
+        TS->boardPort(getBoardNr()).setTimer(1.0);
       } break;
       
       // stage 3, verify flash
@@ -164,7 +163,7 @@ void WritefCmd::sendTpEvent()
         readfEvent->status  = 0;
         readfEvent->addr = static_cast<uint32>(itsBlock * FL_BLOCK_SIZE);
         TS->boardPort(getBoardNr()).send(*readfEvent);
-        TS->boardPort(getBoardNr()).setTimer(TS->timeout());
+        TS->boardPort(getBoardNr()).setTimer(1.0);
         delete readfEvent;
       } break;
       
@@ -204,7 +203,7 @@ void WritefCmd::sendTpEvent()
         memcpy(&itsTPE->data[2],info,sizeof(info)); 
         
         TS->boardPort(getBoardNr()).send(*itsTPE);
-        TS->boardPort(getBoardNr()).setTimer(TS->timeout());
+        TS->boardPort(getBoardNr()).setTimer(1.0);
         LOG_DEBUG_STR("Writing image info");
         LOG_DEBUG_STR(formatString("%u %u",itsTPE->data[0],itsTPE->data[1]));
       } break;
@@ -216,7 +215,7 @@ void WritefCmd::sendTpEvent()
         itsBlock = (itsImage * FL_BLOCKS_IN_IMAGE) + (FL_BLOCKS_IN_IMAGE - 1);
         readfEvent->addr = static_cast<uint32>(itsBlock * FL_BLOCK_SIZE);
         TS->boardPort(getBoardNr()).send(*readfEvent);
-        TS->boardPort(getBoardNr()).setTimer(TS->timeout());
+        TS->boardPort(getBoardNr()).setTimer(1.0);
         LOG_DEBUG_STR("Verifying image info");
         delete readfEvent;
       } break;
@@ -240,6 +239,7 @@ void WritefCmd::saveTpAckEvent(GCFEvent& event)
         TPErasefAckEvent *erasefAckEvent = new TPErasefAckEvent(event);
         
         if (erasefAckEvent->status == 0) {
+          setSleepTime(0.50);
           itsSector++;
           if (itsSector == ((itsImage + 1) * FL_SECTORS_IN_IMAGE)) {
             itsStage = write_flash;
@@ -256,6 +256,7 @@ void WritefCmd::saveTpAckEvent(GCFEvent& event)
         itsTPackE = new TPWritefAckEvent(event);
           
           if (itsTPackE->status == 0) {
+            setSleepTime(0.002);
             itsStage = verify_flash;    
           } else {
             itsTBBackE->status_mask |= TBB_FLASH_ERROR;
@@ -303,6 +304,7 @@ void WritefCmd::saveTpAckEvent(GCFEvent& event)
         itsTPackE = new TPWritefAckEvent(event);
           
         if (itsTPackE->status == 0) {
+          setSleepTime(0.002);
           itsStage = verify_info;   
         } else {
           itsTBBackE->status_mask |= TBB_FLASH_ERROR;
diff --git a/MAC/APL/PIC/TBBDriver/src/tbbctl.cc b/MAC/APL/PIC/TBBDriver/src/tbbctl.cc
index 6506b5dde3d..14bbc613ea6 100644
--- a/MAC/APL/PIC/TBBDriver/src/tbbctl.cc
+++ b/MAC/APL/PIC/TBBDriver/src/tbbctl.cc
@@ -61,760 +61,760 @@ static const long DELAY = 5;
 //---- ALLOC  ----------------------------------------------------------------
 AllocCmd::AllocCmd(GCFPortInterface& port) : Command(port)
 {
-	cout << endl;
-	cout << "== TBB ================================================== allocate memory ====" << endl;	
-	cout << endl;
+   cout << endl;
+   cout << "== TBB ================================================== allocate memory ====" << endl;  
+   cout << endl;
 }
 
 //-----------------------------------------------------------------------------
 void AllocCmd::send()
 {
-	TBBAllocEvent event;
-	
-	if (isSelectionDone()) event.rcu_mask = getRcuMask(); // if select cmd is used
-	
-	itsPort.send(event);
-	itsPort.setTimer(DELAY);
+   TBBAllocEvent event;
+   
+   if (isSelectionDone()) event.rcu_mask = getRcuMask(); // if select cmd is used
+   
+   itsPort.send(event);
+   itsPort.setTimer(DELAY);
 }
 
 //-----------------------------------------------------------------------------
 GCFEvent::TResult AllocCmd::ack(GCFEvent& e)
 {
-	TBBAllocAckEvent ack(e);
-	cout << "TBB  Info" << endl;
-	cout << "---  -------------------------------------------------------" << endl;
-	int32 bnr = 0;
-	int32 oldbnr = -1;
-	for (int cnr=0; cnr < getMaxSelections(); cnr++) {
-		bnr = static_cast<int32>(cnr / 16);
-		
-		if (bnr != oldbnr) {
-			if ((ack.status_mask[bnr] & TBB_SUCCESS) || (ack.status_mask[bnr] & TBB_RCU_COMM_ERROR)) {
-				cout << formatString(" %2d memory allocated for selected rcu's", bnr) << endl;
-			}	else {
-				cout << formatString(" %2d %s", bnr, getDriverErrorStr(ack.status_mask[bnr]).c_str()) << endl;
-			}
-		}
-		
-		if (isSelected(cnr) && !(ack.status_mask[bnr] & TBB_NO_BOARD) ) {
-			if (ack.rcu_mask.test(cnr)) {
-				if (ack.status_mask[bnr] & TBB_SUCCESS) {
-					cout << formatString("     ERROR, Rcu-%d NOT in correct state",cnr) << endl;
-				} else {
-					cout << formatString("     ERROR, Rcu-%d  %s",cnr,getDriverErrorStr(ack.status_mask[bnr] & 0xFFFF0000).c_str()) << endl;
-				}
-			}
-		}
-		oldbnr = bnr;
-	}
-	
-	setCmdDone(true);
-
-	return(GCFEvent::HANDLED);
+   TBBAllocAckEvent ack(e);
+   cout << "TBB  Info" << endl;
+   cout << "---  -------------------------------------------------------" << endl;
+   int32 bnr = 0;
+   int32 oldbnr = -1;
+   for (int cnr=0; cnr < getMaxSelections(); cnr++) {
+      bnr = static_cast<int32>(cnr / 16);
+      
+      if (bnr != oldbnr) {
+         if ((ack.status_mask[bnr] & TBB_SUCCESS) || (ack.status_mask[bnr] & TBB_RCU_COMM_ERROR)) {
+            cout << formatString(" %2d memory allocated for selected rcu's", bnr) << endl;
+         }  else {
+            cout << formatString(" %2d %s", bnr, getDriverErrorStr(ack.status_mask[bnr]).c_str()) << endl;
+         }
+      }
+      
+      if (isSelected(cnr) && !(ack.status_mask[bnr] & TBB_NO_BOARD) ) {
+         if (ack.rcu_mask.test(cnr)) {
+            if (ack.status_mask[bnr] & TBB_SUCCESS) {
+               cout << formatString("     ERROR, Rcu-%d NOT in correct state",cnr) << endl;
+            } else {
+               cout << formatString("     ERROR, Rcu-%d  %s",cnr,getDriverErrorStr(ack.status_mask[bnr] & 0xFFFF0000).c_str()) << endl;
+            }
+         }
+      }
+      oldbnr = bnr;
+   }
+   
+   setCmdDone(true);
+
+   return(GCFEvent::HANDLED);
 }
 
 //---- CHANNELINFO --------------------------------------------------------------
 ChannelInfoCmd::ChannelInfoCmd(GCFPortInterface& port) : Command(port)
 {
-	cout << endl;
-	cout << "== TBB ===================================================== rcu info =======" << endl;
-	cout << endl;
+   cout << endl;
+   cout << "== TBB ===================================================== rcu info =======" << endl;
+   cout << endl;
 }
 
 //-----------------------------------------------------------------------------
 void ChannelInfoCmd::send()
 {
-	TBBRcuInfoEvent event;
-	itsPort.send(event);
-	itsPort.setTimer(DELAY);
+   TBBRcuInfoEvent event;
+   itsPort.send(event);
+   itsPort.setTimer(DELAY);
 }
 
 //-----------------------------------------------------------------------------
 GCFEvent::TResult ChannelInfoCmd::ack(GCFEvent& e)
 {
-	TBBRcuInfoAckEvent ack(e);
-	
-	int32 bnr = 0;
-	int32 oldbnr = -1;
-	for (int rcu=0; rcu < getMaxSelections(); rcu++) {
-	 		bnr = static_cast<int32>(rcu / 16);
-			if (ack.rcu_state[rcu] != 'F') {
-				if (isSelected(rcu) ) {
-					if (bnr != oldbnr) {
-						cout << "Rcu  Board  Input  State  Start-address  Size[pages]" << endl;
-						cout << "---  -----  -----  -----  -------------  -----------" << endl;
-					}
-					cout << formatString(" %2d    %2d     %2d      %c     0x%08X  %11u %s",
-							rcu, ack.rcu_on_board[rcu], ack.rcu_on_input[rcu],
-							(char)ack.rcu_state[rcu],	ack.rcu_start_addr[rcu], ack.rcu_pages[rcu],
-							getBoardErrorStr(ack.rcu_status[rcu]).c_str()) << endl;
-				}
-			}
-			oldbnr = bnr;
-	}
-	cout << endl;
-	cout << " *State:  F = Free, A = Allocated, R = Recording, S = Stopped, E = Error" << endl;
-	cout << " *Only NOT Free rcu's are listed " << endl;
-	
-	setCmdDone(true);
-
-	return(GCFEvent::HANDLED);
+   TBBRcuInfoAckEvent ack(e);
+   
+   int32 bnr = 0;
+   int32 oldbnr = -1;
+   for (int rcu=0; rcu < getMaxSelections(); rcu++) {
+         bnr = static_cast<int32>(rcu / 16);
+         if (ack.rcu_state[rcu] != 'F') {
+            if (isSelected(rcu) ) {
+               if (bnr != oldbnr) {
+                  cout << "Rcu  Board  Input  State  Start-address  Size[pages]" << endl;
+                  cout << "---  -----  -----  -----  -------------  -----------" << endl;
+               }
+               cout << formatString(" %2d    %2d     %2d      %c     0x%08X  %11u %s",
+                     rcu, ack.rcu_on_board[rcu], ack.rcu_on_input[rcu],
+                     (char)ack.rcu_state[rcu],  ack.rcu_start_addr[rcu], ack.rcu_pages[rcu],
+                     getBoardErrorStr(ack.rcu_status[rcu]).c_str()) << endl;
+            }
+         }
+         oldbnr = bnr;
+   }
+   cout << endl;
+   cout << " *State:  F = Free, A = Allocated, R = Recording, S = Stopped, E = Error" << endl;
+   cout << " *Only NOT Free rcu's are listed " << endl;
+   
+   setCmdDone(true);
+
+   return(GCFEvent::HANDLED);
 }
 
 //---- FREE ----------------------------------------------------------------
 FreeCmd::FreeCmd(GCFPortInterface& port) : Command(port)
 {
-	cout << endl;
-	cout << "== TBB =================== discard buffer allocation and disable rcu's ====" << endl;
-	cout << endl;
+   cout << endl;
+   cout << "== TBB =================== discard buffer allocation and disable rcu's ====" << endl;
+   cout << endl;
 }
 
 //-----------------------------------------------------------------------------
 void FreeCmd::send()
 {
-	TBBFreeEvent event;
-	
-	if (isSelectionDone()) event.rcu_mask = getRcuMask(); // if select cmd is used
-	
-	itsPort.send(event);
-	itsPort.setTimer(DELAY);
+   TBBFreeEvent event;
+   
+   if (isSelectionDone()) event.rcu_mask = getRcuMask(); // if select cmd is used
+   
+   itsPort.send(event);
+   itsPort.setTimer(DELAY);
 }
 
 //-----------------------------------------------------------------------------
 GCFEvent::TResult FreeCmd::ack(GCFEvent& e)
 {
-	TBBFreeAckEvent ack(e);
-	cout << "TBB  Info" << endl;
-	cout << "---  -------------------------------------------------------" << endl;
-	int32 bnr = 0;
-	int32 oldbnr = -1;
-	for (int cnr=0; cnr < getMaxSelections(); cnr++) {
-		bnr = static_cast<int32>(cnr / 16);
-		
-		if (bnr != oldbnr) {
-			if (ack.status_mask[bnr] & TBB_SUCCESS) {
-				cout << formatString(" %2d  buffer dischard and channel disabled for selected rcu's", bnr) << endl;
-			} else {
-				cout << formatString(" %2d  %s", bnr, getDriverErrorStr(ack.status_mask[bnr]).c_str()) << endl;
-			}
-		}
-		if (isSelected(cnr) && !(ack.status_mask[bnr] & TBB_NO_BOARD) ) {
-			if (ack.rcu_mask.test(cnr)) {
-				if (ack.status_mask[bnr] & TBB_SUCCESS) {
-					cout << formatString("     ERROR, Rcu-%d NOT in correct state",cnr) << endl;
-				} else {
-					cout << formatString("     ERROR, Rcu-%d  %s",cnr,getDriverErrorStr(ack.status_mask[bnr]).c_str()) << endl;
-				}
-			}
-		}
-		oldbnr = bnr;
-	}
-	
-	setCmdDone(true);
-
-	return(GCFEvent::HANDLED);
+   TBBFreeAckEvent ack(e);
+   cout << "TBB  Info" << endl;
+   cout << "---  -------------------------------------------------------" << endl;
+   int32 bnr = 0;
+   int32 oldbnr = -1;
+   for (int cnr=0; cnr < getMaxSelections(); cnr++) {
+      bnr = static_cast<int32>(cnr / 16);
+      
+      if (bnr != oldbnr) {
+         if (ack.status_mask[bnr] & TBB_SUCCESS) {
+            cout << formatString(" %2d  buffer dischard and channel disabled for selected rcu's", bnr) << endl;
+         } else {
+            cout << formatString(" %2d  %s", bnr, getDriverErrorStr(ack.status_mask[bnr]).c_str()) << endl;
+         }
+      }
+      if (isSelected(cnr) && !(ack.status_mask[bnr] & TBB_NO_BOARD) ) {
+         if (ack.rcu_mask.test(cnr)) {
+            if (ack.status_mask[bnr] & TBB_SUCCESS) {
+               cout << formatString("     ERROR, Rcu-%d NOT in correct state",cnr) << endl;
+            } else {
+               cout << formatString("     ERROR, Rcu-%d  %s",cnr,getDriverErrorStr(ack.status_mask[bnr]).c_str()) << endl;
+            }
+         }
+      }
+      oldbnr = bnr;
+   }
+   
+   setCmdDone(true);
+
+   return(GCFEvent::HANDLED);
 }
 
 //---- RECORD ----------------------------------------------------------------
 RecordCmd::RecordCmd(GCFPortInterface& port) : Command(port)
 {
-	cout << endl;
-	cout << "== TBB ============================= start recording on selected rcu's ====" << endl;
-	cout << endl;
+   cout << endl;
+   cout << "== TBB ============================= start recording on selected rcu's ====" << endl;
+   cout << endl;
 }
 
 //-----------------------------------------------------------------------------
 void RecordCmd::send()
 {
-	TBBRecordEvent event;
-	
-	if (isSelectionDone()) event.rcu_mask = getRcuMask(); // if select cmd is used
-	
-	itsPort.send(event);
-	itsPort.setTimer(DELAY);
+   TBBRecordEvent event;
+   
+   if (isSelectionDone()) event.rcu_mask = getRcuMask(); // if select cmd is used
+   
+   itsPort.send(event);
+   itsPort.setTimer(DELAY);
 }
 
 //-----------------------------------------------------------------------------
 GCFEvent::TResult RecordCmd::ack(GCFEvent& e)
 {
-	TBBRecordAckEvent ack(e);
-	cout << "TBB  Info" << endl;
-	cout << "---  -------------------------------------------------------" << endl;
-	int32 bnr = 0;
-	int32 oldbnr = -1;
-	for (int cnr=0; cnr < getMaxSelections(); cnr++) {
-		bnr = static_cast<int32>(cnr / 16);
-		
-		if (bnr != oldbnr) {
-			if (ack.status_mask[bnr] & TBB_SUCCESS) {
-				cout << formatString(" %2d  recording started for selected rcu's", bnr) << endl;
-			} else {
-				cout << formatString(" %2d  %s", bnr, getDriverErrorStr(ack.status_mask[bnr]).c_str()) << endl;
-			}
-		}
-		
-		if (isSelected(cnr) && !(ack.status_mask[bnr] & TBB_NO_BOARD) ) {
-			if (ack.rcu_mask.test(cnr)) {
-				if (ack.status_mask[bnr] & TBB_SUCCESS) {
-					//cout << formatString("      ERROR, Rcu-%d NOT in correct state",cnr) << endl;
-					//cout  << endl;
-				} else {
-					cout << formatString("      ERROR, Rcu-%d  %s",cnr,getDriverErrorStr(ack.status_mask[bnr]).c_str()) << endl;
-				}
-			}
-		}
-		oldbnr = bnr;
-	}
-	
-	
-	setCmdDone(true);
-
-	return(GCFEvent::HANDLED);
+   TBBRecordAckEvent ack(e);
+   cout << "TBB  Info" << endl;
+   cout << "---  -------------------------------------------------------" << endl;
+   int32 bnr = 0;
+   int32 oldbnr = -1;
+   for (int cnr=0; cnr < getMaxSelections(); cnr++) {
+      bnr = static_cast<int32>(cnr / 16);
+      
+      if (bnr != oldbnr) {
+         if (ack.status_mask[bnr] & TBB_SUCCESS) {
+            cout << formatString(" %2d  recording started for selected rcu's", bnr) << endl;
+         } else {
+            cout << formatString(" %2d  %s", bnr, getDriverErrorStr(ack.status_mask[bnr]).c_str()) << endl;
+         }
+      }
+      
+      if (isSelected(cnr) && !(ack.status_mask[bnr] & TBB_NO_BOARD) ) {
+         if (ack.rcu_mask.test(cnr)) {
+            if (ack.status_mask[bnr] & TBB_SUCCESS) {
+               //cout << formatString("      ERROR, Rcu-%d NOT in correct state",cnr) << endl;
+               //cout  << endl;
+            } else {
+               cout << formatString("      ERROR, Rcu-%d  %s",cnr,getDriverErrorStr(ack.status_mask[bnr]).c_str()) << endl;
+            }
+         }
+      }
+      oldbnr = bnr;
+   }
+   
+   
+   setCmdDone(true);
+
+   return(GCFEvent::HANDLED);
 }
 
 //---- STOP -------------------------------------------------------------------
 StopCmd::StopCmd(GCFPortInterface& port) : Command(port)
 {
-	cout << endl;
-	cout << "== TBB ============================== stop recording on selected rcu's ====" << endl;	
-	cout << endl;
+   cout << endl;
+   cout << "== TBB ============================== stop recording on selected rcu's ====" << endl;  
+   cout << endl;
 }
 
 //-----------------------------------------------------------------------------
 void StopCmd::send()
 {
-	TBBStopEvent event;
-	if (isSelectionDone()) event.rcu_mask = getRcuMask(); // if select cmd is used
-	
-	itsPort.send(event);
-	itsPort.setTimer(DELAY);
+   TBBStopEvent event;
+   if (isSelectionDone()) event.rcu_mask = getRcuMask(); // if select cmd is used
+   
+   itsPort.send(event);
+   itsPort.setTimer(DELAY);
 }
 
 //-----------------------------------------------------------------------------
 GCFEvent::TResult StopCmd::ack(GCFEvent& e)
 {
-	TBBStopAckEvent ack(e);
-	cout << "TBB  Info" << endl;
-	cout << "---  -------------------------------------------------------" << endl;
-	int32 bnr = 0;
-	int32 oldbnr = -1;
-	for (int cnr=0; cnr < getMaxSelections(); cnr++) {
-		bnr = static_cast<int32>(cnr / 16);
-		
-		if (bnr != oldbnr) {
-			if (ack.status_mask[bnr] & TBB_SUCCESS) {
-				cout << formatString(" %2d  recording stopped for selected rcu's", bnr) << endl;
-			} else {
-				cout << formatString(" %2d  %s", bnr, getDriverErrorStr(ack.status_mask[bnr]).c_str()) << endl;
-			}
-		}
-		
-		if (isSelected(cnr) && !(ack.status_mask[bnr] & TBB_NO_BOARD) ) {
-			if (ack.rcu_mask.test(cnr)) {
-				if (!(ack.status_mask[bnr] & TBB_SUCCESS)) {
-					cout << formatString("      ERROR, Rcu-%d  %s",cnr,getDriverErrorStr(ack.status_mask[bnr]).c_str()) << endl;
-				}
-			}
-		}
-		oldbnr = bnr;
-	}
-	
-	
-	setCmdDone(true);
-
-	return(GCFEvent::HANDLED);
+   TBBStopAckEvent ack(e);
+   cout << "TBB  Info" << endl;
+   cout << "---  -------------------------------------------------------" << endl;
+   int32 bnr = 0;
+   int32 oldbnr = -1;
+   for (int cnr=0; cnr < getMaxSelections(); cnr++) {
+      bnr = static_cast<int32>(cnr / 16);
+      
+      if (bnr != oldbnr) {
+         if (ack.status_mask[bnr] & TBB_SUCCESS) {
+            cout << formatString(" %2d  recording stopped for selected rcu's", bnr) << endl;
+         } else {
+            cout << formatString(" %2d  %s", bnr, getDriverErrorStr(ack.status_mask[bnr]).c_str()) << endl;
+         }
+      }
+      
+      if (isSelected(cnr) && !(ack.status_mask[bnr] & TBB_NO_BOARD) ) {
+         if (ack.rcu_mask.test(cnr)) {
+            if (!(ack.status_mask[bnr] & TBB_SUCCESS)) {
+               cout << formatString("      ERROR, Rcu-%d  %s",cnr,getDriverErrorStr(ack.status_mask[bnr]).c_str()) << endl;
+            }
+         }
+      }
+      oldbnr = bnr;
+   }
+   
+   
+   setCmdDone(true);
+
+   return(GCFEvent::HANDLED);
 }
 
 //---- TRIGGERSETTINGS --------------------------------------------------------
 TriggerSettingsCmd::TriggerSettingsCmd(GCFPortInterface& port) : Command(port)
 {
-	cout << endl;
-	cout << "== TBB ===================================================== rcu info =======" << endl;
-	cout << endl;
+   cout << endl;
+   cout << "== TBB ===================================================== rcu info =======" << endl;
+   cout << endl;
 }
 
 //-----------------------------------------------------------------------------
 void TriggerSettingsCmd::send()
 {
-	TBBTrigSettingsEvent event;
-	itsPort.send(event);
-	itsPort.setTimer(DELAY);
+   TBBTrigSettingsEvent event;
+   itsPort.send(event);
+   itsPort.setTimer(DELAY);
 }
 
 //-----------------------------------------------------------------------------
 GCFEvent::TResult TriggerSettingsCmd::ack(GCFEvent& e)
 {
-	TBBTrigSettingsAckEvent ack(e);
-	
-	int32 bnr = 0;
-	int32 oldbnr = -1;
-	for (int rcu=0; rcu < getMaxSelections(); rcu++) {
- 		bnr = static_cast<int32>(rcu / 16);
-		if (isSelected(rcu) ) {
-			if (bnr != oldbnr) {
-				cout << "Rcu  Board  level   start   stop    filter  window  c0      c1      c2      c3" << endl;
-				cout << "---  -----  ------  ------  ------  ------  ------  ------  ------  ------  ------" << endl;
-			}
-			cout << formatString("%3d  %5d  %6d  %6d  %6d  %6d  %6d  %6d  %6d  %6d  %6d",
-					rcu, bnr, ack.setup[rcu].level, ack.setup[rcu].start_mode, ack.setup[rcu].stop_mode,
-					ack.setup[rcu].filter_select, ack.setup[rcu].window, ack.coefficients[rcu].c0, 
-					ack.coefficients[rcu].c1, ack.coefficients[rcu].c2, ack.coefficients[rcu].c3) << endl;
-		}
-		oldbnr = bnr;
-	}
-	cout << endl;
-	
-	setCmdDone(true);
-	return(GCFEvent::HANDLED);
+   TBBTrigSettingsAckEvent ack(e);
+   
+   int32 bnr = 0;
+   int32 oldbnr = -1;
+   for (int rcu=0; rcu < getMaxSelections(); rcu++) {
+      bnr = static_cast<int32>(rcu / 16);
+      if (isSelected(rcu) ) {
+         if (bnr != oldbnr) {
+            cout << "Rcu  Board  level   start   stop    filter  window  c0      c1      c2      c3" << endl;
+            cout << "---  -----  ------  ------  ------  ------  ------  ------  ------  ------  ------" << endl;
+         }
+         cout << formatString("%3d  %5d  %6d  %6d  %6d  %6d  %6d  %6d  %6d  %6d  %6d",
+               rcu, bnr, ack.setup[rcu].level, ack.setup[rcu].start_mode, ack.setup[rcu].stop_mode,
+               ack.setup[rcu].filter_select, ack.setup[rcu].window, ack.coefficients[rcu].c0, 
+               ack.coefficients[rcu].c1, ack.coefficients[rcu].c2, ack.coefficients[rcu].c3) << endl;
+      }
+      oldbnr = bnr;
+   }
+   cout << endl;
+   
+   setCmdDone(true);
+   return(GCFEvent::HANDLED);
 }
 
 //---- TRIGRELEASE ------------------------------------------------------------
 TrigReleaseCmd::TrigReleaseCmd(GCFPortInterface& port) : Command(port)
 {
-	cout << endl;
-	cout << "== TBB ============================ release trigger for selected rcu's ====" << endl;
-	cout << endl;
+   cout << endl;
+   cout << "== TBB ============================ release trigger for selected rcu's ====" << endl;
+   cout << endl;
 }
 
 //-----------------------------------------------------------------------------
 void TrigReleaseCmd::send()
 {
-	TBBTrigReleaseEvent event;
-	if (isSelectionDone()) {
-		event.rcu_stop_mask = getRcuMask();
-		event.rcu_start_mask = getRcuMask();
-	}
-	itsPort.send(event);
-	itsPort.setTimer(DELAY);
+   TBBTrigReleaseEvent event;
+   if (isSelectionDone()) {
+      event.rcu_stop_mask = getRcuMask();
+      event.rcu_start_mask = getRcuMask();
+   }
+   itsPort.send(event);
+   itsPort.setTimer(DELAY);
 }
 
 //-----------------------------------------------------------------------------
 GCFEvent::TResult TrigReleaseCmd::ack(GCFEvent& e)
 {
-	TBBTrigReleaseAckEvent ack(e);
-	cout << "TBB  Info" << endl;
-	cout << "---  -------------------------------------------------------" << endl;  
-	int32 bnr = 0;
-	int32 oldbnr = -1;  
-	for (int cnr=0; cnr < getMaxSelections(); cnr++) {
-		bnr = static_cast<int32>(cnr / 16);
-		
-		if (bnr != oldbnr) {
-			//cout << formatString("status[%d]%08x",bnr, ack.status_mask[bnr]);
-			if (ack.status_mask[bnr] & TBB_SUCCESS) {
-				cout << formatString(" %2d  trigger detection released for selected rcu's",bnr ) << endl;
-			}	else {	
-				cout << formatString(" %2d  %s",bnr, getDriverErrorStr(ack.status_mask[bnr]).c_str()) << endl;
-			}
-		}
-		oldbnr = bnr;
-	}
-	
-	setCmdDone(true);
-	return(GCFEvent::HANDLED);
+   TBBTrigReleaseAckEvent ack(e);
+   cout << "TBB  Info" << endl;
+   cout << "---  -------------------------------------------------------" << endl;  
+   int32 bnr = 0;
+   int32 oldbnr = -1;  
+   for (int cnr=0; cnr < getMaxSelections(); cnr++) {
+      bnr = static_cast<int32>(cnr / 16);
+      
+      if (bnr != oldbnr) {
+         //cout << formatString("status[%d]%08x",bnr, ack.status_mask[bnr]);
+         if (ack.status_mask[bnr] & TBB_SUCCESS) {
+            cout << formatString(" %2d  trigger detection released for selected rcu's",bnr ) << endl;
+         }  else {   
+            cout << formatString(" %2d  %s",bnr, getDriverErrorStr(ack.status_mask[bnr]).c_str()) << endl;
+         }
+      }
+      oldbnr = bnr;
+   }
+   
+   setCmdDone(true);
+   return(GCFEvent::HANDLED);
 }
 
 //---- TRIGGENERATE -----------------------------------------------------------
 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 << 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;  
 }
 
 //-----------------------------------------------------------------------------
 void TrigGenerateCmd::send()
 {
-	setCmdSendNext(false);
-	TBBSubscribeEvent subscribe;
-	subscribe.triggers = true;
-	subscribe.hardware = true;
+   setCmdSendNext(false);
+   TBBSubscribeEvent subscribe;
+   subscribe.triggers = true;
+   subscribe.hardware = true;
   itsPort.send(subscribe);
-	
-	TBBTrigGenerateEvent event;
-	if (isSelectionDone()) {
-		event.rcu_mask = getRcuMask();
-	}	
-	itsPort.send(event);
-	itsPort.setTimer(DELAY);
+   
+   TBBTrigGenerateEvent event;
+   if (isSelectionDone()) {
+      event.rcu_mask = getRcuMask();
+   }  
+   itsPort.send(event);
+   itsPort.setTimer(DELAY);
 }
 
 //-----------------------------------------------------------------------------
 GCFEvent::TResult TrigGenerateCmd::ack(GCFEvent& e)
 {
-	if (e.signal == TBB_TRIG_GENERATE_ACK) {
-		TBBTrigGenerateAckEvent ack(e);
-	}
-	if (e.signal == TBB_SUBSCRIBE_ACK) {
-	}
-	if (e.signal == TBB_TRIGGER) {
-		TBBTriggerEvent trig(e);
-		cout << formatString(" %2d   %9u   %9u   %10u   %10u   %9u   %9u   %9u   %9u",
-												 trig.rcu,
-												 trig.sequence_nr,
-												 trig.time,
-												 trig.sample_nr,
-												 trig.trigger_sum,
-												 trig.trigger_samples,
-												 trig.peak_value,
-												 trig.power_before,
-												 trig.power_after
-												) << endl;
-	}
-	//setCmdDone(true);
-	return(GCFEvent::HANDLED);
+   if (e.signal == TBB_TRIG_GENERATE_ACK) {
+      TBBTrigGenerateAckEvent ack(e);
+   }
+   if (e.signal == TBB_SUBSCRIBE_ACK) {
+   }
+   if (e.signal == TBB_TRIGGER) {
+      TBBTriggerEvent trig(e);
+      cout << formatString(" %2d   %9u   %9u   %10u   %10u   %9u   %9u   %9u   %9u",
+                                     trig.rcu,
+                                     trig.sequence_nr,
+                                     trig.time,
+                                     trig.sample_nr,
+                                     trig.trigger_sum,
+                                     trig.trigger_samples,
+                                     trig.peak_value,
+                                     trig.power_before,
+                                     trig.power_after
+                                    ) << endl;
+   }
+   //setCmdDone(true);
+   return(GCFEvent::HANDLED);
 }
 
 //---- TRIGSETUP --------------------------------------------------------------
 TrigSetupCmd::TrigSetupCmd(GCFPortInterface& port) : Command(port),
-	itsLevel(0), itsStartMode(0), itsStopMode(0),itsFilter(0), itsWindow(0), itsOperatingMode(0), itsTriggerMode(0)
+   itsLevel(0), itsStartMode(0), itsStopMode(0),itsFilter(0), itsWindow(0), itsOperatingMode(0), itsTriggerMode(0)
 {
-	cout << endl;
-	cout << "== TBB ============================ trigger system setup for selected rcu's ====" << endl;
-	cout << endl;
+   cout << endl;
+   cout << "== TBB ============================ trigger system setup for selected rcu's ====" << endl;
+   cout << endl;
 }
 
 //-----------------------------------------------------------------------------
 void TrigSetupCmd::send()
 {
-	TBBTrigSetupEvent event;
-	if (isSelectionDone()) {
-		for (int cnr=0; cnr < getMaxSelections(); cnr++) {	
-			event.setup[cnr].level = itsLevel;
-			event.setup[cnr].start_mode = itsStartMode;
-			event.setup[cnr].stop_mode = itsStopMode;
-			event.setup[cnr].filter_select = itsFilter;
-			event.setup[cnr].window = itsWindow;
-			event.setup[cnr].operating_mode = itsOperatingMode;
-			event.trigger_mode = itsTriggerMode;
-		}
-	}
-	itsPort.send(event);
-	itsPort.setTimer(DELAY);
+   TBBTrigSetupEvent event;
+   if (isSelectionDone()) {
+      for (int cnr=0; cnr < getMaxSelections(); cnr++) { 
+         event.setup[cnr].level = itsLevel;
+         event.setup[cnr].start_mode = itsStartMode;
+         event.setup[cnr].stop_mode = itsStopMode;
+         event.setup[cnr].filter_select = itsFilter;
+         event.setup[cnr].window = itsWindow;
+         event.setup[cnr].operating_mode = itsOperatingMode;
+         event.trigger_mode = itsTriggerMode;
+      }
+   }
+   itsPort.send(event);
+   itsPort.setTimer(DELAY);
 }
 
 //-----------------------------------------------------------------------------
 GCFEvent::TResult TrigSetupCmd::ack(GCFEvent& e)
 {
-	if (e.signal == TBB_TRIG_SETUP_ACK) {
-		TBBTrigSetupAckEvent ack(e);
-		cout << "TBB  Info" << endl;
-		cout << "---  -------------------------------------------------------" << endl;
-		int32 bnr = 0;
-		int32 oldbnr = -1;  
-		for (int cnr=0; cnr < getMaxSelections(); cnr++) {
-			bnr = static_cast<int32>(cnr / 16);
-			
-			if (bnr != oldbnr) {
-				if (ack.status_mask[bnr] & TBB_SUCCESS) {
-					cout << formatString(" %2d  setup trigger system for all rcu's",bnr ) << endl;
-				}	else {	
-					cout << formatString(" %2d  %s",bnr, getDriverErrorStr(ack.status_mask[bnr]).c_str()) << endl;
-				}
-			}
-			oldbnr = bnr;
-		}
-		setCmdDone(true);
-	}
-	return(GCFEvent::HANDLED);
+   if (e.signal == TBB_TRIG_SETUP_ACK) {
+      TBBTrigSetupAckEvent ack(e);
+      cout << "TBB  Info" << endl;
+      cout << "---  -------------------------------------------------------" << endl;
+      int32 bnr = 0;
+      int32 oldbnr = -1;  
+      for (int cnr=0; cnr < getMaxSelections(); cnr++) {
+         bnr = static_cast<int32>(cnr / 16);
+         
+         if (bnr != oldbnr) {
+            if (ack.status_mask[bnr] & TBB_SUCCESS) {
+               cout << formatString(" %2d  setup trigger system for all rcu's",bnr ) << endl;
+            }  else {   
+               cout << formatString(" %2d  %s",bnr, getDriverErrorStr(ack.status_mask[bnr]).c_str()) << endl;
+            }
+         }
+         oldbnr = bnr;
+      }
+      setCmdDone(true);
+   }
+   return(GCFEvent::HANDLED);
 }
 
 //---- TRIGCOEFFICIENTS -------------------------------------------------------
 TrigCoefficientCmd::TrigCoefficientCmd(GCFPortInterface& port) : Command(port),
-	itsC0(0), itsC1(0), itsC2(0), itsC3(0)
+   itsC0(0), itsC1(0), itsC2(0), itsC3(0)
 {
-	cout << endl;
-	cout << "== TBB ============================ setup trigger coeffients for selected rcu's ====" << endl;
-	cout << endl;
+   cout << endl;
+   cout << "== TBB ============================ setup trigger coeffients for selected rcu's ====" << endl;
+   cout << endl;
 }
 
 //-----------------------------------------------------------------------------
 void TrigCoefficientCmd::send()
 {
-	TBBTrigCoefEvent event;
-	if (isSelectionDone()) {
-		for (int cnr=0; cnr < getMaxSelections(); cnr++) {
-			event.coefficients[cnr].c0 = itsC0;
-			event.coefficients[cnr].c1 = itsC1;
-			event.coefficients[cnr].c2 = itsC2;
-			event.coefficients[cnr].c3 = itsC3;
-		}
-	}
-	itsPort.send(event);
-	itsPort.setTimer(DELAY);
+   TBBTrigCoefEvent event;
+   if (isSelectionDone()) {
+      for (int cnr=0; cnr < getMaxSelections(); cnr++) {
+         event.coefficients[cnr].c0 = itsC0;
+         event.coefficients[cnr].c1 = itsC1;
+         event.coefficients[cnr].c2 = itsC2;
+         event.coefficients[cnr].c3 = itsC3;
+      }
+   }
+   itsPort.send(event);
+   itsPort.setTimer(DELAY);
 }
 
 //-----------------------------------------------------------------------------
 GCFEvent::TResult TrigCoefficientCmd::ack(GCFEvent& e)
 {
-	TBBTrigCoefAckEvent ack(e);
-	cout << "TBB  Info" << endl;
-	cout << "---  -------------------------------------------------------" << endl;  
-	int32 bnr = 0;
-	int32 oldbnr = -1;  
-	for (int cnr=0; cnr < getMaxSelections(); cnr++) {
-		bnr = static_cast<int32>(cnr / 16);
-		
-		if (bnr != oldbnr) {
-			if (ack.status_mask[bnr] & TBB_SUCCESS) {
-				cout << formatString(" %2d  setup trigger system for all rcu's",bnr ) << endl;
-			}	else {	
-				cout << formatString(" %2d  %s",bnr, getDriverErrorStr(ack.status_mask[bnr]).c_str()) << endl;
-			}
-		}
-		oldbnr = bnr;
-	}
-	setCmdDone(true);
-	return(GCFEvent::HANDLED);
+   TBBTrigCoefAckEvent ack(e);
+   cout << "TBB  Info" << endl;
+   cout << "---  -------------------------------------------------------" << endl;  
+   int32 bnr = 0;
+   int32 oldbnr = -1;  
+   for (int cnr=0; cnr < getMaxSelections(); cnr++) {
+      bnr = static_cast<int32>(cnr / 16);
+      
+      if (bnr != oldbnr) {
+         if (ack.status_mask[bnr] & TBB_SUCCESS) {
+            cout << formatString(" %2d  setup trigger system for all rcu's",bnr ) << endl;
+         }  else {   
+            cout << formatString(" %2d  %s",bnr, getDriverErrorStr(ack.status_mask[bnr]).c_str()) << endl;
+         }
+      }
+      oldbnr = bnr;
+   }
+   setCmdDone(true);
+   return(GCFEvent::HANDLED);
 }
 
 //---- TRIGINFO ---------------------------------------------------------------
 TrigInfoCmd::TrigInfoCmd(GCFPortInterface& port) : Command(port)
 {
-	cout << endl;
-	cout << "== TBB ============================ trigger info for selected rcu's ====" << endl;
-	cout << endl;
+   cout << endl;
+   cout << "== TBB ============================ trigger info for selected rcu's ====" << endl;
+   cout << endl;
 }
 
 //-----------------------------------------------------------------------------
 void TrigInfoCmd::send()
 {
-	TBBTrigInfoEvent event;
-	if (isSelectionDone()) {
-		event.rcu = getRcu();
-	}
-	itsPort.send(event);
-	itsPort.setTimer(DELAY);
+   TBBTrigInfoEvent event;
+   if (isSelectionDone()) {
+      event.rcu = getRcu();
+   }
+   itsPort.send(event);
+   itsPort.setTimer(DELAY);
 }
 
 //-----------------------------------------------------------------------------
 GCFEvent::TResult TrigInfoCmd::ack(GCFEvent& e)
 {
-	TBBTrigInfoAckEvent ack(e);
-	cout << "RCU  Info" << endl;
-	cout << "---  -------------------------------------------------------" << endl;  
-	if (ack.status_mask & TBB_SUCCESS) {
-		cout << formatString(" %2d  sequence   : %lu",getRcu(),ack.sequence_nr) << endl;
-		cout << formatString("      time       : %lu",ack.time) << endl;
-		cout << formatString("      sample     : %lu",ack.sample_nr) << endl;
-		cout << formatString("      sum        : %lu",ack.trigger_sum) << endl;
-		cout << formatString("      samples    : %lu",ack.trigger_samples) << endl;
-		cout << formatString("      peak value : %lu",ack.peak_value) << endl;
-		cout << formatString("      pwr before : %u",ack.power_before) << endl;
-		cout << formatString("      pwr after  : %u",ack.power_after) << endl;
-	}	else {	
-		cout << formatString(" %2d  %s",getRcu(), getDriverErrorStr(ack.status_mask).c_str()) << endl;
-	}
-	setCmdDone(true);
-	return(GCFEvent::HANDLED);
+   TBBTrigInfoAckEvent ack(e);
+   cout << "RCU  Info" << endl;
+   cout << "---  -------------------------------------------------------" << endl;  
+   if (ack.status_mask & TBB_SUCCESS) {
+      cout << formatString(" %2d  sequence   : %lu",getRcu(),ack.sequence_nr) << endl;
+      cout << formatString("      time       : %lu",ack.time) << endl;
+      cout << formatString("      sample     : %lu",ack.sample_nr) << endl;
+      cout << formatString("      sum        : %lu",ack.trigger_sum) << endl;
+      cout << formatString("      samples    : %lu",ack.trigger_samples) << endl;
+      cout << formatString("      peak value : %lu",ack.peak_value) << endl;
+      cout << formatString("      pwr before : %u",ack.power_before) << endl;
+      cout << formatString("      pwr after  : %u",ack.power_after) << endl;
+   }  else {   
+      cout << formatString(" %2d  %s",getRcu(), getDriverErrorStr(ack.status_mask).c_str()) << endl;
+   }
+   setCmdDone(true);
+   return(GCFEvent::HANDLED);
 }
 
 //---- LISTEN ---------------------------------------------------------------
 ListenCmd::ListenCmd(GCFPortInterface& port) : Command(port),
-	itsCmdStage(0)
+   itsCmdStage(0)
 {
-	cout << endl;
-	cout << "== TBB ============================ listen for triggers on selected rcu's ====" << endl;
-	cout << endl;
-	 
+   cout << endl;
+   cout << "== TBB ============================ listen for triggers on selected rcu's ====" << endl;
+   cout << endl;
+    
 }
 
 //-----------------------------------------------------------------------------
 void ListenCmd::send()
 {
-	switch (itsCmdStage) {
-		case 0: {
-			cout << "-stop all trigger systems" << endl;
-			TBBTrigReleaseEvent release;
-			release.rcu_stop_mask.set();
-			release.rcu_start_mask.reset();
-			itsPort.send(release);
-		} break;
-		
-		case 1: {
-			cout << "-stopped recording on all allocated rcu's" << endl;
-			TBBStopEvent stop;
-			stop.rcu_mask = getRcuMask();
-			itsPort.send(stop);	
-		} break;
-
-		case 2: {
-			cout << "-restarted recording on all allocated rcu's" << endl;
-			TBBRecordEvent record;
-			record.rcu_mask = getRcuMask(); // if select cmd is used
-			itsPort.send(record);	
-		} break;
-
-		case 3: {
-			TBBSubscribeEvent subscribe;
-			subscribe.triggers = true;
-			subscribe.hardware = true;
+   switch (itsCmdStage) {
+      case 0: {
+         cout << "-stop all trigger systems" << endl;
+         TBBTrigReleaseEvent release;
+         release.rcu_stop_mask.set();
+         release.rcu_start_mask.reset();
+         itsPort.send(release);
+      } break;
+      
+      case 1: {
+         cout << "-stopped recording on all allocated rcu's" << endl;
+         TBBStopEvent stop;
+         stop.rcu_mask = getRcuMask();
+         itsPort.send(stop);  
+      } break;
+
+      case 2: {
+         cout << "-restarted recording on all allocated rcu's" << endl;
+         TBBRecordEvent record;
+         record.rcu_mask = getRcuMask(); // if select cmd is used
+         itsPort.send(record);   
+      } break;
+
+      case 3: {
+         TBBSubscribeEvent subscribe;
+         subscribe.triggers = true;
+         subscribe.hardware = true;
       itsPort.send(subscribe);
-		} break;
-		
-		case 4: {
-			cout << "-released all trigger systems, and waiting  (STOP WAITING WITH CTRL-C)" << endl;
-			setCmdSendNext(false);
-			TBBTrigReleaseEvent release;
-			release.rcu_stop_mask.reset();
-			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; 
-		} break;
-		
-		
-
-
-		default: {
-		} break;
-	}
-	itsPort.setTimer(DELAY);
+      } break;
+      
+      case 4: {
+         cout << "-released all trigger systems, and waiting  (STOP WAITING WITH CTRL-C)" << endl;
+         setCmdSendNext(false);
+         TBBTrigReleaseEvent release;
+         release.rcu_stop_mask.reset();
+         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; 
+      } break;
+      
+      
+
+
+      default: {
+      } break;
+   }
+   itsPort.setTimer(DELAY);
 }
 
 //-----------------------------------------------------------------------------
 GCFEvent::TResult ListenCmd::ack(GCFEvent& e)
 {
-	static int nummer;
-	if (e.signal == TBB_STOP_ACK) {
-		TBBTrigReleaseAckEvent ack(e);
-		if (itsCmdStage == 1) { itsCmdStage = 2; }
-	}
-	if (e.signal == TBB_RECORD_ACK) {
-		TBBTrigReleaseAckEvent ack(e);
-		itsCmdStage = 3;
-	}
-	if (e.signal == TBB_SUBSCRIBE_ACK) {
-		itsCmdStage = 4;
-		nummer = 0;
-	}
-	if (e.signal == TBB_TRIG_RELEASE_ACK) {
-		TBBTrigReleaseAckEvent ack(e);
-		if (itsCmdStage == 0) itsCmdStage = 1;
-		if (itsCmdStage == 4) itsCmdStage = 5;
-	}
-		
-	if (e.signal == TBB_TRIGGER) {
-		
-			TBBTriggerEvent trig(e);
-			nummer++;	
-			cout << formatString(" %2d   %9u   %9u   %10u   %10u   %9u   %9u   %9u   %9u   (stopped) %6d",
-												 trig.rcu,
-												 trig.sequence_nr,
-												 trig.time,
-												 trig.sample_nr,
-												 trig.trigger_sum,
-												 trig.trigger_samples,
-												 trig.peak_value,
-												 trig.power_before,
-												 trig.power_after,
-												 nummer
-												) << endl;
-												
-			if (itsListenMode == TBB_LISTEN_ONE_SHOT) {
-				TBBStopEvent event;
-				event.rcu_mask.set(trig.rcu);
-				itsPort.send(event);
-			} else {
-				TBBTrigReleaseEvent release;
-				release.rcu_stop_mask.set(trig.rcu);
-				release.rcu_start_mask.set(trig.rcu);
-				itsPort.send(release);
-			}									
-	}	
-	//setCmdDone(true);
-	return(GCFEvent::HANDLED);
+   static int nummer;
+   if (e.signal == TBB_STOP_ACK) {
+      TBBTrigReleaseAckEvent ack(e);
+      if (itsCmdStage == 1) { itsCmdStage = 2; }
+   }
+   if (e.signal == TBB_RECORD_ACK) {
+      TBBTrigReleaseAckEvent ack(e);
+      itsCmdStage = 3;
+   }
+   if (e.signal == TBB_SUBSCRIBE_ACK) {
+      itsCmdStage = 4;
+      nummer = 0;
+   }
+   if (e.signal == TBB_TRIG_RELEASE_ACK) {
+      TBBTrigReleaseAckEvent ack(e);
+      if (itsCmdStage == 0) itsCmdStage = 1;
+      if (itsCmdStage == 4) itsCmdStage = 5;
+   }
+      
+   if (e.signal == TBB_TRIGGER) {
+      
+         TBBTriggerEvent trig(e);
+         nummer++;   
+         cout << formatString(" %2d   %9u   %9u   %10u   %10u   %9u   %9u   %9u   %9u   (stopped) %6d",
+                                     trig.rcu,
+                                     trig.sequence_nr,
+                                     trig.time,
+                                     trig.sample_nr,
+                                     trig.trigger_sum,
+                                     trig.trigger_samples,
+                                     trig.peak_value,
+                                     trig.power_before,
+                                     trig.power_after,
+                                     nummer
+                                    ) << endl;
+                                    
+         if (itsListenMode == TBB_LISTEN_ONE_SHOT) {
+            TBBStopEvent event;
+            event.rcu_mask.set(trig.rcu);
+            itsPort.send(event);
+         } else {
+            TBBTrigReleaseEvent release;
+            release.rcu_stop_mask.set(trig.rcu);
+            release.rcu_start_mask.set(trig.rcu);
+            itsPort.send(release);
+         }                          
+   }  
+   //setCmdDone(true);
+   return(GCFEvent::HANDLED);
 }
 
 //---- READ -------------------------------------------------------------------
 ReadCmd::ReadCmd(GCFPortInterface& port) : Command(port),
-	itsSecondsTime(0),itsSampleTime(0),itsPrePages(0),itsPostPages(0)
+   itsSecondsTime(0),itsSampleTime(0),itsPrePages(0),itsPostPages(0)
 {
-	cout << endl;
-	cout << "== TBB ==============  transfer data to CEP for all selected rcu ====" << endl;	
-	cout << endl;
+   cout << endl;
+   cout << "== TBB ==============  transfer data to CEP for all selected rcu ====" << endl;  
+   cout << endl;
 }
 
 //-----------------------------------------------------------------------------
 void ReadCmd::send()
 {
-	TBBReadEvent event;
-	event.rcu = (uint32)getRcu();
-	event.secondstime = itsSecondsTime;
-	event.sampletime = itsSampleTime;
-	event.prepages = itsPrePages;
-	event.postpages = itsPostPages;
-	itsPort.send(event);
-	itsPort.setTimer(DELAY);
+   TBBReadEvent event;
+   event.rcu = (uint32)getRcu();
+   event.secondstime = itsSecondsTime;
+   event.sampletime = itsSampleTime;
+   event.prepages = itsPrePages;
+   event.postpages = itsPostPages;
+   itsPort.send(event);
+   itsPort.setTimer(DELAY);
 }
 
 //-----------------------------------------------------------------------------
 GCFEvent::TResult ReadCmd::ack(GCFEvent& e)
 {
-	TBBReadAckEvent ack(e);
-	cout << "RCU  Info" << endl;
-	cout << "---  -------------------------------------------------------" << endl;  
-	for (int cnr=0; cnr < getMaxSelections(); cnr++) {
-		if (isSelected(cnr) ) {
-			if (ack.status_mask & TBB_SUCCESS) {
-				cout << formatString(" %2d  tranfering data to CEP",cnr ) << endl;
-			}	else {			
-				cout << formatString(" %2d  %s",cnr, getDriverErrorStr(ack.status_mask).c_str()) << endl;
-			}
-		}
-	}
-	
-	setCmdDone(true);
+   TBBReadAckEvent ack(e);
+   cout << "RCU  Info" << endl;
+   cout << "---  -------------------------------------------------------" << endl;  
+   for (int cnr=0; cnr < getMaxSelections(); cnr++) {
+      if (isSelected(cnr) ) {
+         if (ack.status_mask & TBB_SUCCESS) {
+            cout << formatString(" %2d  tranfering data to CEP",cnr ) << endl;
+         }  else {         
+            cout << formatString(" %2d  %s",cnr, getDriverErrorStr(ack.status_mask).c_str()) << endl;
+         }
+      }
+   }
+   
+   setCmdDone(true);
 
-	return(GCFEvent::HANDLED);
+   return(GCFEvent::HANDLED);
 }
 
 //---- MODE --------------------------------------------------------------------
 ModeCmd::ModeCmd(GCFPortInterface& port) : Command(port)
-	,itsRecMode(0)
+   ,itsRecMode(0)
 {
-	cout << endl;
-	cout << "== TBB ===================================== set mode command ===============" << endl;
-	cout << endl;
+   cout << endl;
+   cout << "== TBB ===================================== set mode command ===============" << endl;
+   cout << endl;
 }
 
 //-----------------------------------------------------------------------------
 void ModeCmd::send()
 {
-	TBBModeEvent event;
-	event.rec_mode = itsRecMode;
-	itsPort.send(event);
-	itsPort.setTimer(DELAY);
+   TBBModeEvent event;
+   event.rec_mode = itsRecMode;
+   itsPort.send(event);
+   itsPort.setTimer(DELAY);
 }
 
 //-----------------------------------------------------------------------------
 GCFEvent::TResult ModeCmd::ack(GCFEvent& e)
 {
-	TBBModeAckEvent ack(e);
-	cout << "TBB  Info" << endl;
-	cout << "---  -------------------------------------------------------" << endl;  
-	for (int i = 0; i < MAX_N_TBBBOARDS; i++) {
-		if (ack.status_mask[i] & TBB_SUCCESS) {
-			cout << formatString(" %2d  mode set and UDP/IP configured", i) << endl;
-		}	else {			
-			cout << formatString(" %2d  %s",i, getDriverErrorStr(ack.status_mask[i]).c_str()) << endl;
-		}
-	}
-	
-	setCmdDone(true);
+   TBBModeAckEvent ack(e);
+   cout << "TBB  Info" << endl;
+   cout << "---  -------------------------------------------------------" << endl;  
+   for (int i = 0; i < MAX_N_TBBOARDS; i++) {
+      if (ack.status_mask[i] & TBB_SUCCESS) {
+         cout << formatString(" %2d  mode set and UDP/IP configured", i) << endl;
+      }  else {         
+         cout << formatString(" %2d  %s",i, getDriverErrorStr(ack.status_mask[i]).c_str()) << endl;
+      }
+   }
+   
+   setCmdDone(true);
 
-	return(GCFEvent::HANDLED);
+   return(GCFEvent::HANDLED);
 }
 
 //---- VERSION ----------------------------------------------------------------
 VersionCmd::VersionCmd(GCFPortInterface& port) : Command(port)
 {
-	cout << endl;
-	cout << "== TBB ====================================== ID and version information ====" << endl;
-	cout << endl;
+   cout << endl;
+   cout << "== TBB ====================================== ID and version information ====" << endl;
+   cout << endl;
 }
 
 //-----------------------------------------------------------------------------
@@ -830,30 +830,28 @@ void VersionCmd::send()
 GCFEvent::TResult VersionCmd::ack(GCFEvent& e)
 {
   TBBVersionAckEvent ack(e);
-	
-	cout << formatString("TBBDriver software version %3.2f",(ack.driverversion / 100.)) << endl;
-	cout << endl;
-	cout << "TBB  ID  Software   Board    TP0      MP0      MP1      MP2      MP3" << endl;
-	cout << "---  --  --------  -------  -------  -------  -------  -------  -------" << endl;
-	for (int bnr=0; bnr < getMaxSelections(); bnr++) {
-		if (isSelected(bnr) ) {
-			if (ack.status_mask[bnr] & TBB_SUCCESS) {
-				cout << formatString(" %2u  %2u   V%5.1f    V%4.1f    V%4.1f    V%4.1f    V%4.1f    V%4.1f    V%4.1f",
-	          bnr,
-	          ack.boardid[bnr],
-						(ack.swversion[bnr] / 10.),
-						(ack.boardversion[bnr] / 10.),
-						(ack.tpversion[bnr] / 10.),
-						(ack.mp0version[bnr] / 10.),
-						(ack.mp1version[bnr] / 10.),
-						(ack.mp2version[bnr] / 10.),
-						(ack.mp3version[bnr] / 10.)) << endl;
-			}	else {
-					cout << formatString(" %2u  %s",bnr, getDriverErrorStr(ack.status_mask[bnr]).c_str()) << endl;	
-      }
-  	}
-	}
-	
+   
+   cout << formatString("TBBDriver software version %3.2f",(ack.driverversion / 100.)) << endl;
+   cout << endl;
+   cout << "TBB  ID  Software   Board    TP     MP      " << endl;
+   cout << "---  --  --------  -------  ------  ------- " << endl;
+   for (int bnr=0; bnr < getMaxSelections(); bnr++) {
+      if (isSelected(bnr) ) {
+         if (ack.status_mask[bnr] & TBB_SUCCESS) {
+            cout << formatString(" %2u  %2u   V%5.1f    V%4.1f    V%4.1f    V%4.1f",
+             bnr,
+             ack.boardid[bnr],
+                  (ack.swversion[bnr] / 10.),
+                  (ack.boardversion[bnr] / 10.),
+                  (ack.tpversion[bnr] / 10.),
+                  (ack.mp0version[bnr] / 10.)) << endl;
+         } else {
+               cout << formatString(" %2u  %s",bnr, getDriverErrorStr(ack.status_mask[bnr]).c_str()) << endl;  
+         }
+         
+   }
+   }
+   
   setCmdDone(true);
 
   return(GCFEvent::HANDLED);
@@ -863,7 +861,7 @@ GCFEvent::TResult VersionCmd::ack(GCFEvent& e)
 SizeCmd::SizeCmd(GCFPortInterface& port) : Command(port)
 {
   cout << endl;
-  cout << "== TBB ==================================== installed memory information ====" << endl;	
+  cout << "== TBB ==================================== installed memory information ====" << endl; 
   cout << endl;
 }
 
@@ -880,21 +878,21 @@ void SizeCmd::send()
 GCFEvent::TResult SizeCmd::ack(GCFEvent& e)
 {
   TBBSizeAckEvent ack(e);
-	cout << "TBB  pages     Total memory " << endl;
-	cout << "---  --------  ------------" << endl; 
-	for (int bnr=0; bnr < getMaxSelections(); bnr++) {
-		if (isSelected(bnr) ) {
-			if (ack.status_mask[bnr] & TBB_SUCCESS) {
-				double gbyte = ((double)ack.npages[bnr] * 2048.) / (1024. * 1024. * 1024.); 
-				cout << formatString(" %2d  %8d  %6.3f GByte",bnr,ack.npages[bnr],gbyte) << endl;
-			}	else {	
-				cout << formatString(" %2d  %s",bnr, getDriverErrorStr(ack.status_mask[bnr]).c_str()) << endl;
+   cout << "TBB  pages     Total memory " << endl;
+   cout << "---  --------  ------------" << endl; 
+   for (int bnr=0; bnr < getMaxSelections(); bnr++) {
+      if (isSelected(bnr) ) {
+         if (ack.status_mask[bnr] & TBB_SUCCESS) {
+            double gbyte = ((double)ack.npages[bnr] * 2048.) / (1024. * 1024. * 1024.); 
+            cout << formatString(" %2d  %8d  %6.3f GByte",bnr,ack.npages[bnr],gbyte) << endl;
+         }  else {   
+            cout << formatString(" %2d  %s",bnr, getDriverErrorStr(ack.status_mask[bnr]).c_str()) << endl;
       }
-  	}
-	}
-	cout << endl;
-	cout << "1 page = 2048 Bytes" << endl;
-	
+   }
+   }
+   cout << endl;
+   cout << "1 page = 2048 Bytes" << endl;
+   
   setCmdDone(true);
 
   return(GCFEvent::HANDLED);
@@ -904,8 +902,8 @@ GCFEvent::TResult SizeCmd::ack(GCFEvent& e)
 StatusCmd::StatusCmd(GCFPortInterface& port) : Command(port)
 {
   cout << endl;
-  cout << "== TBB ============================= voltage and temperature information ====" << endl;	
-	cout << endl;
+  cout << "== TBB ============================= voltage and temperature information ====" << endl; 
+   cout << endl;
 }
 
 //-----------------------------------------------------------------------------
@@ -922,29 +920,29 @@ GCFEvent::TResult StatusCmd::ack(GCFEvent& e)
 {
   TBBStatusAckEvent ack(e);
     
-	cout << "TBB  Voltage 1.2  Voltage 2.5  Voltage 3.3  Temp PCB  Temp TP   Temp MP0  Temp MP1  Temp MP2  Temp MP3" << endl;
-	cout << "---  -----------  -----------  -----------  --------  --------  --------  --------  --------  --------" << endl;
-	for (int bnr=0; bnr < getMaxSelections(); bnr++) {
-		if (isSelected(bnr) ) {
-			if (ack.status_mask[bnr] & TBB_SUCCESS) {
-				
-				cout << formatString(" %2d     %4.2f V       %4.2f V       %4.2f V    %3u 'C    %3u 'C    %3u 'C    %3u 'C    %3u 'C    %3u 'C",
-						bnr,
-						((double)ack.V12[bnr] * (2.5 / 192.)),	// MAX6652 pin-2:  2.5 / 192	= 0.0130 / count
-						((double)ack.V25[bnr] * (3.3 / 192.)),	// MAX6652 pin-3:  3.3 / 192	= 0.0172 / count
-						((double)ack.V33[bnr] * (5.0 / 192.)),	// MAX6652 pin-1:  5.0 / 192	= 0.0625 / count
-						ack.Tpcb[bnr],
-						ack.Ttp[bnr],
-						ack.Tmp0[bnr],
-						ack.Tmp1[bnr],
-						ack.Tmp2[bnr],
-						ack.Tmp3[bnr] ) << endl;
-			}	else {	
-				cout << formatString(" %2d  %s",bnr, getDriverErrorStr(ack.status_mask[bnr]).c_str()) << endl;
+   cout << "TBB  Voltage 1.2  Voltage 2.5  Voltage 3.3  Temp PCB  Temp TP   Temp MP0  Temp MP1  Temp MP2  Temp MP3" << endl;
+   cout << "---  -----------  -----------  -----------  --------  --------  --------  --------  --------  --------" << endl;
+   for (int bnr=0; bnr < getMaxSelections(); bnr++) {
+      if (isSelected(bnr) ) {
+         if (ack.status_mask[bnr] & TBB_SUCCESS) {
+            
+            cout << formatString(" %2d     %4.2f V       %4.2f V       %4.2f V    %3u 'C    %3u 'C    %3u 'C    %3u 'C    %3u 'C    %3u 'C",
+                  bnr,
+                  ((double)ack.V12[bnr] * (2.5 / 192.)), // MAX6652 pin-2:  2.5 / 192  = 0.0130 / count
+                  ((double)ack.V25[bnr] * (3.3 / 192.)), // MAX6652 pin-3:  3.3 / 192  = 0.0172 / count
+                  ((double)ack.V33[bnr] * (5.0 / 192.)), // MAX6652 pin-1:  5.0 / 192  = 0.0625 / count
+                  ack.Tpcb[bnr],
+                  ack.Ttp[bnr],
+                  ack.Tmp0[bnr],
+                  ack.Tmp1[bnr],
+                  ack.Tmp2[bnr],
+                  ack.Tmp3[bnr] ) << endl;
+         }  else {   
+            cout << formatString(" %2d  %s",bnr, getDriverErrorStr(ack.status_mask[bnr]).c_str()) << endl;
       }
-  	}
-	}
-	
+   }
+   }
+   
   setCmdDone(true);
 
   return(GCFEvent::HANDLED);
@@ -953,463 +951,464 @@ GCFEvent::TResult StatusCmd::ack(GCFEvent& e)
 //---- CLEAR -------------------------------------------------------------------
 ClearCmd::ClearCmd(GCFPortInterface& port) : Command(port)
 {
-	cout << endl;
-	cout << "== TBB =============================================== clear in progress ====" << endl;
-	cout << " wait 5 seconds" << endl;
-	cout << endl;
+   cout << endl;
+   cout << "== TBB =============================================== clear in progress ====" << endl;
+   cout << " wait 5 seconds" << endl;
+   cout << endl;
 }
 
 //-----------------------------------------------------------------------------
 void ClearCmd::send()
 {
-	TBBClearEvent event;
-	event.boardmask = getBoardMask();
-	itsPort.send(event);
-	itsPort.setTimer((long)5);
+   TBBClearEvent event;
+   event.boardmask = getBoardMask();
+   itsPort.send(event);
+   itsPort.setTimer(5.0);
 }
 
 //-----------------------------------------------------------------------------
 GCFEvent::TResult ClearCmd::ack(GCFEvent& e)
 {
-	TBBClearAckEvent ack(e);
-	cout << "TBB  Info" << endl;
-	cout << "---  -------------------------------------------------------" << endl;    
-	for (int bnr=0; bnr < getMaxSelections(); bnr++) {
-		if (isSelected(bnr) ) {
-			if (ack.status_mask[bnr] & TBB_SUCCESS) {
-				cout << formatString(" %2d  board is cleared",bnr ) << endl;
-			}	else {	
-				cout << formatString(" %2d  %s",bnr, getDriverErrorStr(ack.status_mask[bnr]).c_str()) << endl;
-			}
-		}
-	}
-	
-	setCmdDone(true);
+   TBBClearAckEvent ack(e);
+   cout << "TBB  Info" << endl;
+   cout << "---  -------------------------------------------------------" << endl;    
+   for (int bnr=0; bnr < getMaxSelections(); bnr++) {
+      if (isSelected(bnr) ) {
+         if (ack.status_mask[bnr] & TBB_SUCCESS) {
+            cout << formatString(" %2d  board is cleared",bnr ) << endl;
+         }  else {   
+            cout << formatString(" %2d  %s",bnr, getDriverErrorStr(ack.status_mask[bnr]).c_str()) << endl;
+         }
+      }
+   }
+   
+   setCmdDone(true);
 
-	return(GCFEvent::HANDLED);
+   return(GCFEvent::HANDLED);
 }
 
 //---- RESET -------------------------------------------------------------------
 ResetCmd::ResetCmd(GCFPortInterface& port) : Command(port)
 {
-	cout << endl;
-	cout << "== TBB =============================================== reset in progress ====" << endl;
-	cout << " reset can take 20 seconds" << endl;
-	cout << endl;
+   cout << endl;
+   cout << "== TBB =============================================== reset in progress ====" << endl;
+   cout << " reset can take 20 seconds" << endl;
+   cout << endl;
 }
 
 //-----------------------------------------------------------------------------
 void ResetCmd::send()
 {
-	TBBResetEvent event;
-	event.boardmask = getBoardMask();
-	itsPort.send(event);
-	itsPort.setTimer(20.0);
+   TBBResetEvent event;
+   event.boardmask = getBoardMask();
+   itsPort.send(event);
+   itsPort.setTimer(60.0);
 }
 
 //-----------------------------------------------------------------------------
 GCFEvent::TResult ResetCmd::ack(GCFEvent& e)
 {
-	TBBResetAckEvent ack(e);
-	cout << "TBB  Info" << endl;
-	cout << "---  -------------------------------------------------------" << endl;    
-	for (int bnr=0; bnr < getMaxSelections(); bnr++) {
-		if (isSelected(bnr) ) {
-			if (ack.status_mask[bnr] & TBB_SUCCESS) {
-				cout << formatString(" %2d  board is reset",bnr ) << endl;
-			}	else {	
-				cout << formatString(" %2d  %s",bnr, getDriverErrorStr(ack.status_mask[bnr]).c_str()) << endl;
-			}
-		}
-	}
-	cout << " setting up the boards can take 10 seconds" << endl;
-	
-	setCmdDone(true);
-
-	return(GCFEvent::HANDLED);
+   TBBResetAckEvent ack(e);
+   cout << "TBB  Info" << endl;
+   cout << "---  -------------------------------------------------------" << endl;    
+   for (int bnr=0; bnr < getMaxSelections(); bnr++) {
+      if (isSelected(bnr) ) {
+         if (ack.status_mask[bnr] & TBB_SUCCESS) {
+            cout << formatString(" %2d  board is reset",bnr ) << endl;
+         }  else {   
+            cout << formatString(" %2d  %s",bnr, getDriverErrorStr(ack.status_mask[bnr]).c_str()) << endl;
+         }
+      }
+   }
+   cout << " setting up the boards can take 30 seconds" << endl;
+   
+   setCmdDone(true);
+
+   return(GCFEvent::HANDLED);
 }
 
 //---- CONFIG -------------------------------------------------------------------
 ConfigCmd::ConfigCmd(GCFPortInterface& port) : Command(port)
 {
-	cout << endl;
-	cout << "== TBB ========================================= reconfigure TP and MP's ====" << endl;
-	cout << " wait 5 seconds" << endl;
-	cout << endl;
+   cout << endl;
+   cout << "== TBB ========================================= reconfigure TP and MP's ====" << endl;
+   cout << " wait 10 seconds" << endl;
+   cout << endl;
 }
 
 //-----------------------------------------------------------------------------
 void ConfigCmd::send()
 {
-	TBBConfigEvent event;
-	event.boardmask = getBoardMask();
-	event.imagenr = itsImage;
-	itsPort.send(event);
-	itsPort.setTimer((long)5);
+   TBBConfigEvent event;
+   event.boardmask = getBoardMask();
+   event.imagenr = itsImage;
+   itsPort.send(event);
+   itsPort.setTimer(60.0);
 }
 
 //-----------------------------------------------------------------------------
 GCFEvent::TResult ConfigCmd::ack(GCFEvent& e)
 {
-	TBBConfigAckEvent ack(e);
-	cout << "TBB  Info" << endl;
-	cout << "---  -------------------------------------------------------" << endl;    
-	for (int bnr=0; bnr < getMaxSelections(); bnr++) {
-		if (isSelected(bnr) ) {
-			if (ack.status_mask[bnr] & TBB_SUCCESS) {
-				cout << formatString(" %2d  reconfigured TP and MP's",bnr ) << endl;
-			}	else {	
-				cout << formatString(" %2d  %s",bnr, getDriverErrorStr(ack.status_mask[bnr]).c_str()) << endl;
-			}
-		}
-	}
-	
-	setCmdDone(true);
+   TBBConfigAckEvent ack(e);
+   cout << "TBB  Info" << endl;
+   cout << "---  -------------------------------------------------------" << endl;    
+   for (int bnr=0; bnr < getMaxSelections(); bnr++) {
+      if (isSelected(bnr) ) {
+         if (ack.status_mask[bnr] & TBB_SUCCESS) {
+            cout << formatString(" %2d  reconfigured TP and MP's",bnr ) << endl;
+         }  else {   
+            cout << formatString(" %2d  %s",bnr, getDriverErrorStr(ack.status_mask[bnr]).c_str()) << endl;
+         }
+      }
+   }
+   
+   setCmdDone(true);
 
-	return(GCFEvent::HANDLED);
+   return(GCFEvent::HANDLED);
 }
 
 //---- ARP -------------------------------------------------------------------
 ArpCmd::ArpCmd(GCFPortInterface& port) : Command(port)
 {
-	cout << endl;
-	cout << "== TBB ========================================= sending ARP message to CEP ====" << endl;
-	cout << endl;
+   cout << endl;
+   cout << "== TBB ========================================= sending ARP message to CEP ====" << endl;
+   cout << endl;
 }
 
 //-----------------------------------------------------------------------------
 void ArpCmd::send()
 {
-	TBBArpEvent event;
-	event.boardmask = getBoardMask();
-	itsPort.send(event);
-	itsPort.setTimer(DELAY);
+   TBBArpEvent event;
+   event.boardmask = getBoardMask();
+   itsPort.send(event);
+   itsPort.setTimer(DELAY);
 }
 
 //-----------------------------------------------------------------------------
 GCFEvent::TResult ArpCmd::ack(GCFEvent& e)
 {
-	TBBArpAckEvent ack(e);
-	cout << "TBB  Info" << endl;
-	cout << "---  -------------------------------------------------------" << endl;    
-	for (int bnr=0; bnr < getMaxSelections(); bnr++) {
-		if (isSelected(bnr) ) {
-			if (ack.status_mask[bnr] & TBB_SUCCESS) {
-				cout << formatString(" %2d  send 1 arp message",bnr ) << endl;
-			}	else {	
-				cout << formatString(" %2d  %s",bnr, getDriverErrorStr(ack.status_mask[bnr]).c_str()) << endl;
-			}
-		}
-	}
-	
-	setCmdDone(true);
+   TBBArpAckEvent ack(e);
+   cout << "TBB  Info" << endl;
+   cout << "---  -------------------------------------------------------" << endl;    
+   for (int bnr=0; bnr < getMaxSelections(); bnr++) {
+      if (isSelected(bnr) ) {
+         if (ack.status_mask[bnr] & TBB_SUCCESS) {
+            cout << formatString(" %2d  send 1 arp message",bnr ) << endl;
+         }  else {   
+            cout << formatString(" %2d  %s",bnr, getDriverErrorStr(ack.status_mask[bnr]).c_str()) << endl;
+         }
+      }
+   }
+   
+   setCmdDone(true);
 
-	return(GCFEvent::HANDLED);
+   return(GCFEvent::HANDLED);
 }
 
 //---- ARPMODE -------------------------------------------------------------------
 ArpModeCmd::ArpModeCmd(GCFPortInterface& port) : Command(port)
   ,itsMode(0)
 {
-	cout << endl;
-	cout << "== TBB ========================================= set CEP ARP mode ====" << endl;
-	cout << endl;
+   cout << endl;
+   cout << "== TBB ========================================= set CEP ARP mode ====" << endl;
+   cout << endl;
 }
 
 //-----------------------------------------------------------------------------
 void ArpModeCmd::send()
 {
-	TBBArpModeEvent event;
-	event.boardmask = getBoardMask();
-	event.mode = itsMode;
-	itsPort.send(event);
-	itsPort.setTimer(DELAY);
+   TBBArpModeEvent event;
+   event.boardmask = getBoardMask();
+   event.mode = itsMode;
+   itsPort.send(event);
+   itsPort.setTimer(DELAY);
 }
 
 //-----------------------------------------------------------------------------
 GCFEvent::TResult ArpModeCmd::ack(GCFEvent& e)
 {
-	TBBArpModeAckEvent ack(e);
-	cout << "TBB  Info" << endl;
-	cout << "---  -------------------------------------------------------" << endl;    
-	for (int bnr=0; bnr < getMaxSelections(); bnr++) {
-		if (isSelected(bnr) ) {
-			if (ack.status_mask[bnr] & TBB_SUCCESS) {
-				cout << formatString(" %2d  arp mode set to %d",bnr, itsMode ) << endl;
-			}	else {	
-				cout << formatString(" %2d  %s",bnr, getDriverErrorStr(ack.status_mask[bnr]).c_str()) << endl;
-			}
-		}
-	}
-	
-	setCmdDone(true);
+   TBBArpModeAckEvent ack(e);
+   cout << "TBB  Info" << endl;
+   cout << "---  -------------------------------------------------------" << endl;    
+   for (int bnr=0; bnr < getMaxSelections(); bnr++) {
+      if (isSelected(bnr) ) {
+         if (ack.status_mask[bnr] & TBB_SUCCESS) {
+            cout << formatString(" %2d  arp mode set to %d",bnr, itsMode ) << endl;
+         }  else {   
+            cout << formatString(" %2d  %s",bnr, getDriverErrorStr(ack.status_mask[bnr]).c_str()) << endl;
+         }
+      }
+   }
+   
+   setCmdDone(true);
 
-	return(GCFEvent::HANDLED);
+   return(GCFEvent::HANDLED);
 }
 
 //---- STOPCEP -------------------------------------------------------------------
 StopCepCmd::StopCepCmd(GCFPortInterface& port) : Command(port)
 {
-	cout << endl;
-	cout << "== TBB ========================================= stop sending messages to CEP ====" << endl;
-	cout << endl;
+   cout << endl;
+   cout << "== TBB ========================================= stop sending messages to CEP ====" << endl;
+   cout << endl;
 }
 
 //-----------------------------------------------------------------------------
 void StopCepCmd::send()
 {
-	TBBStopCepEvent event;
-	event.boardmask = getBoardMask();
-	itsPort.send(event);
-	itsPort.setTimer(DELAY);
+   TBBStopCepEvent event;
+   event.boardmask = getBoardMask();
+   itsPort.send(event);
+   itsPort.setTimer(DELAY);
 }
 
 //-----------------------------------------------------------------------------
 GCFEvent::TResult StopCepCmd::ack(GCFEvent& e)
 {
-	TBBStopCepAckEvent ack(e);
-	cout << "TBB  Info" << endl;
-	cout << "---  -------------------------------------------------------" << endl;    
-	for (int bnr=0; bnr < getMaxSelections(); bnr++) {
-		if (isSelected(bnr) ) {
-			if (ack.status_mask[bnr] & TBB_SUCCESS) {
-				cout << formatString(" %2d  CEP messages stopped",bnr ) << endl;
-			}	else {	
-				cout << formatString(" %2d  %s",bnr, getDriverErrorStr(ack.status_mask[bnr]).c_str()) << endl;
-			}
-		}
-	}
-	
-	setCmdDone(true);
+   TBBStopCepAckEvent ack(e);
+   cout << "TBB  Info" << endl;
+   cout << "---  -------------------------------------------------------" << endl;    
+   for (int bnr=0; bnr < getMaxSelections(); bnr++) {
+      if (isSelected(bnr) ) {
+         if (ack.status_mask[bnr] & TBB_SUCCESS) {
+            cout << formatString(" %2d  CEP messages stopped",bnr ) << endl;
+         }  else {   
+            cout << formatString(" %2d  %s",bnr, getDriverErrorStr(ack.status_mask[bnr]).c_str()) << endl;
+         }
+      }
+   }
+   
+   setCmdDone(true);
 
-	return(GCFEvent::HANDLED);
+   return(GCFEvent::HANDLED);
 }
 
 //---- TEMPLIMIT -------------------------------------------------------------------
 TempLimitCmd::TempLimitCmd(GCFPortInterface& port) : Command(port)
   , itsLimitHigh(0),itsLimitLow(0)
 {
-	cout << endl;
-	cout << "== TBB ========================================= set temperature limits ====" << endl;
-	cout << endl;
+   cout << endl;
+   cout << "== TBB ========================================= set temperature limits ====" << endl;
+   cout << endl;
 }
 
 //-----------------------------------------------------------------------------
 void TempLimitCmd::send()
 {
-	TBBTempLimitEvent event;
-	event.boardmask = getBoardMask();
-	event.high = itsLimitHigh;
-	event.low = itsLimitLow;
-	itsPort.send(event);
-	itsPort.setTimer(DELAY);
+   TBBTempLimitEvent event;
+   event.boardmask = getBoardMask();
+   event.high = itsLimitHigh;
+   event.low = itsLimitLow;
+   itsPort.send(event);
+   itsPort.setTimer(DELAY);
 }
 
 //-----------------------------------------------------------------------------
 GCFEvent::TResult TempLimitCmd::ack(GCFEvent& e)
 {
-	TBBTempLimitAckEvent ack(e);
-	cout << "TBB  Info" << endl;
-	cout << "---  -------------------------------------------------------" << endl;    
-	for (int bnr=0; bnr < getMaxSelections(); bnr++) {
-		if (isSelected(bnr) ) {
-			if (ack.status_mask[bnr] & TBB_SUCCESS) {
-				cout << formatString(" %2d  Temp limit set %d .. %d ",bnr, itsLimitLow, itsLimitHigh ) << endl;
-			}	else {	
-				cout << formatString(" %2d  %s",bnr, getDriverErrorStr(ack.status_mask[bnr]).c_str()) << endl;
-			}
-		}
-	}
-	
-	setCmdDone(true);
+   TBBTempLimitAckEvent ack(e);
+   cout << "TBB  Info" << endl;
+   cout << "---  -------------------------------------------------------" << endl;    
+   for (int bnr=0; bnr < getMaxSelections(); bnr++) {
+      if (isSelected(bnr) ) {
+         if (ack.status_mask[bnr] & TBB_SUCCESS) {
+            cout << formatString(" %2d  Temp limit set %d .. %d ",bnr, itsLimitLow, itsLimitHigh ) << endl;
+         }  else {   
+            cout << formatString(" %2d  %s",bnr, getDriverErrorStr(ack.status_mask[bnr]).c_str()) << endl;
+         }
+      }
+   }
+   
+   setCmdDone(true);
 
-	return(GCFEvent::HANDLED);
+   return(GCFEvent::HANDLED);
 }
 
 //---- ERASE IMAGE --------------------------------------------------------------
 ErasefCmd::ErasefCmd(GCFPortInterface& port) : Command(port)
-	,itsPage(0)
+   ,itsPage(0)
 {
-	cout << endl;
-	cout << "== TBB ===================================================== erase flash ====" << endl;
-	cout << endl;
-	cout << "TBB  Info" << endl;
-	cout << "---  -------------------------------------------------------" << endl;  
+   cout << endl;
+   cout << "== TBB ===================================================== erase flash ====" << endl;
+   cout << endl;
+   cout << "TBB  Info" << endl;
+   cout << "---  -------------------------------------------------------" << endl;  
 
 }
 
 //-----------------------------------------------------------------------------
 void ErasefCmd::send()
 {
-	TBBEraseImageEvent event;
-	event.board = getBoard();
-	event.image = itsPage;
-	cout << formatString(" %2d  erasing flash memory of image %d", getBoard(), itsPage) << endl;
-	cout << endl;
-	cout << "     erasing will take about 8 seconds" << endl;	
-	itsPort.send(event);
-	itsPort.setTimer((long)16);
+   TBBEraseImageEvent event;
+   event.board = getBoard();
+   event.image = itsPage;
+   cout << formatString(" %2d  erasing flash memory of image %d", getBoard(), itsPage) << endl;
+   cout << endl;
+   cout << "     erasing will take about 8 seconds" << endl;   
+   itsPort.send(event);
+   itsPort.setTimer(16.0);
 }
 
 //-----------------------------------------------------------------------------
 GCFEvent::TResult ErasefCmd::ack(GCFEvent& e)
 {
-	TBBEraseImageAckEvent ack(e);
-	  
-	if (ack.status_mask & TBB_SUCCESS) {
-		cout << formatString(" %2d  image is erased",getBoard()) << endl;
-	}	else {	
-		cout << formatString(" %2d  %s",getBoard(), getDriverErrorStr(ack.status_mask).c_str()) << endl;
-	}
-	
-	setCmdDone(true);
+   TBBEraseImageAckEvent ack(e);
+     
+   if (ack.status_mask & TBB_SUCCESS) {
+      cout << formatString(" %2d  image is erased",getBoard()) << endl;
+   }  else {   
+      cout << formatString(" %2d  %s",getBoard(), getDriverErrorStr(ack.status_mask).c_str()) << endl;
+   }
+   
+   setCmdDone(true);
 
-	return(GCFEvent::HANDLED);
+   return(GCFEvent::HANDLED);
 }
 
 //---- READ IMAGE --------------------------------------------------------------
 ReadfCmd::ReadfCmd(GCFPortInterface& port) : Command(port)
-	,itsPage(0)
+   ,itsPage(0)
 {
-	//memset(itsFileName,'\0',sizeof(itsFileName));
-	//memset(itsPageData,0,sizeof(itsPageData));
-	cout << endl;
-	cout << "== TBB ====================================================== read flash ====" << endl;
-	cout << endl;
-	cout << "TBB  Info" << endl;
-	cout << "---  -------------------------------------------------------" << endl;  
+   //memset(itsFileName,'\0',sizeof(itsFileName));
+   //memset(itsPageData,0,sizeof(itsPageData));
+   cout << endl;
+   cout << "== TBB ====================================================== read flash ====" << endl;
+   cout << endl;
+   cout << "TBB  Info" << endl;
+   cout << "---  -------------------------------------------------------" << endl;  
 }
 
 //-----------------------------------------------------------------------------
 void ReadfCmd::send()
 {
-	TBBReadImageEvent event;
-	event.board = getBoard();
-	event.image = itsPage;
-	cout << formatString(" %2d  reading flash memory of image %d", getBoard(), itsPage) << endl;
-	cout << endl;
-	cout << "     reading will take about 12 seconds" << endl;	
-	itsPort.send(event);
-	itsPort.setTimer((long)24);
+   TBBReadImageEvent event;
+   event.board = getBoard();
+   event.image = itsPage;
+   cout << formatString(" %2d  reading flash memory of image %d", getBoard(), itsPage) << endl;
+   cout << endl;
+   cout << "     reading will take about 30 seconds" << endl;  
+   itsPort.send(event);
+   itsPort.setTimer(24.0);
 }
 
 //-----------------------------------------------------------------------------
 GCFEvent::TResult ReadfCmd::ack(GCFEvent& e)
 {
-	TBBReadImageAckEvent ack(e);
+   TBBReadImageAckEvent ack(e);
 
-		if (ack.status_mask & TBB_SUCCESS) {
-			cout << formatString(" %2d  image is read",getBoard()) << endl;
-		}	else {	
-			cout << formatString(" %2d  %s",getBoard(), getDriverErrorStr(ack.status_mask).c_str()) << endl;
-		}
+      if (ack.status_mask & TBB_SUCCESS) {
+         cout << formatString(" %2d  image is read",getBoard()) << endl;
+      }  else {   
+         cout << formatString(" %2d  %s",getBoard(), getDriverErrorStr(ack.status_mask).c_str()) << endl;
+      }
 
-		
-		setCmdDone(true);
-	
+      
+      setCmdDone(true);
+   
 
-	return(GCFEvent::HANDLED);
+   return(GCFEvent::HANDLED);
 }
 
 //---- WRITE IMAGE -----------------------------------------------------------
 WritefCmd::WritefCmd(GCFPortInterface& port) : Command(port)
-	,itsPage(0)
+   ,itsPage(0)
 {
-	memset(itsFileNameTp,'\0',sizeof(itsFileNameTp));
-	memset(itsFileNameMp,'\0',sizeof(itsFileNameMp));
-	cout << endl;
-	cout << "== TBB ===================================================== write flash ====" << endl;
-	cout << endl;
-	cout << "TBB  Info" << endl;
-	cout << "---  -------------------------------------------------------" << endl;  
+   memset(itsFileNameTp,'\0',sizeof(itsFileNameTp));
+   memset(itsFileNameMp,'\0',sizeof(itsFileNameMp));
+   cout << endl;
+   cout << "== TBB ===================================================== write flash ====" << endl;
+   cout << endl;
+   cout << "TBB  Info" << endl;
+   cout << "---  -------------------------------------------------------" << endl;  
 }
 
 //-----------------------------------------------------------------------------
 void WritefCmd::send()
 {
-	TBBWriteImageEvent event;
-	event.board = getBoard();
-	event.image = itsPage;
-	event.version = static_cast<int32>(round(itsVersion * 10.));
-	memcpy(event.filename_tp,itsFileNameTp,sizeof(itsFileNameTp));
-	memcpy(event.filename_mp,itsFileNameMp,sizeof(itsFileNameMp));
-	cout << formatString(" %2d  writing flash memory of image %d", getBoard(), itsPage) << endl;
-	cout << endl;
-	cout << "     writing will take about 25 seconds" << endl;	
-	itsPort.send(event);
-	itsPort.setTimer((long)60);
+   TBBWriteImageEvent event;
+   event.board = getBoard();
+   event.image = itsPage;
+   event.version = static_cast<int32>(round(itsVersion * 10.));
+   memcpy(event.filename_tp,itsFileNameTp,sizeof(itsFileNameTp));
+   memcpy(event.filename_mp,itsFileNameMp,sizeof(itsFileNameMp));
+   cout << formatString(" %2d  writing flash memory of image %d", getBoard(), itsPage) << endl;
+   cout << endl;
+   cout << "     writing will take at least 60 seconds" << endl;  
+   itsPort.send(event);
+   itsPort.setTimer(240.0);
 }
 
 //-----------------------------------------------------------------------------
 GCFEvent::TResult WritefCmd::ack(GCFEvent& e)
 {
-	TBBWriteImageAckEvent ack(e);
-	if (ack.status_mask & TBB_SUCCESS) {
-		cout << formatString(" %2d  image is written",getBoard()) << endl;
-	}	else {	
-		cout << formatString(" %2d  %s",getBoard(), getDriverErrorStr(ack.status_mask).c_str()) << endl;
-	}
-	
-	setCmdDone(true);
+   TBBWriteImageAckEvent ack(e);
+   if (ack.status_mask & TBB_SUCCESS) {
+      cout << formatString(" %2d  image is written",getBoard()) << endl;
+   }  else {   
+      cout << formatString(" %2d  %s",getBoard(), getDriverErrorStr(ack.status_mask).c_str()) << endl;
+   }
+   
+   setCmdDone(true);
 
-	return(GCFEvent::HANDLED);
+   return(GCFEvent::HANDLED);
 }
 
 //---- IMAGE INFO -------------------------------------------------------------
 ImageInfoCmd::ImageInfoCmd(GCFPortInterface& port) : Command(port)
 {
-	cout << endl;
-	cout << "== TBB ===================================================== image info ====" << endl;
-	cout << endl;
+   cout << endl;
+   cout << "== TBB ===================================================== image info ====" << endl;
+   cout << endl;
 }
 
 //-----------------------------------------------------------------------------
 void ImageInfoCmd::send()
 {
-	TBBImageInfoEvent event;
-	event.board = getBoard();
-	itsPort.send(event);
-	itsPort.setTimer(DELAY);
+   TBBImageInfoEvent event;
+   event.board = getBoard();
+   itsPort.send(event);
+   itsPort.setTimer(DELAY);
 }
 
 //-----------------------------------------------------------------------------
 GCFEvent::TResult ImageInfoCmd::ack(GCFEvent& e)
 {
-	TBBImageInfoAckEvent ack(e);
-	cout << formatString("Reading image information from TBB %d", getBoard()) << endl;
-	cout << endl;
-	cout << "IMAGE   SW       Flash date_time        TP file name       MP file name" << endl;
-	cout << "-----   ------   --------------------   ----------------   ----------------" << endl;  
-	if (ack.status_mask & TBB_SUCCESS) {
-		for (int image = 0; image < 16; image++) {	
-			if (ack.write_date[image] == 0xFFFFFFFF) {
-				//cout << formatString("  %2d   no information",image) << endl;
-				cout << formatString("  %2d     free",image) << endl;
-			} else {
-				time_t write_time;
-				struct tm t;
-				double version;
-				
-				write_time = static_cast<time_t>(ack.write_date[image]);
-				t = *gmtime(&write_time);
-				version = static_cast<double>(ack.image_version[image] / 10.);
-				cout << formatString("  %2d    V%5.1lf   %02d-%02d-%4d  %2d:%02d:%02d   %-16.16s   %-16.16s",
-									 	image,
-										version, 
-									 	t.tm_mday,t.tm_mon+1,t.tm_year+1900,
-										t.tm_hour,t.tm_min,t.tm_sec,
-										ack.tp_file_name[image],
-										ack.mp_file_name[image]) << endl;
-				//cout << "TP: " << ack.tp_file_name[image] <<  ",  MP: " << ack.mp_file_name[image] << endl;
-			}
-		}
-	}	else {	
-		cout << formatString("TBB %2d  %s",getBoard(), getDriverErrorStr(ack.status_mask).c_str()) << endl;
-	}
-	
-	setCmdDone(true);
-
-	return(GCFEvent::HANDLED);
+   TBBImageInfoAckEvent ack(e);
+   cout << formatString("Reading image information from TBB %d", getBoard()) << endl;
+   cout << endl;
+   cout << "IMAGE    SW       Flash date_time        TP file name       MP file name" << endl;
+   cout << "------   ------   --------------------   ----------------   ----------------" << endl;  
+   if (ack.status_mask & TBB_SUCCESS) {
+      for (int image = 0; image < 16; image++) {   
+         if (ack.write_date[image] == 0xFFFFFFFF) {
+            //cout << formatString("  %2d   no information",image) << endl;
+            cout << formatString("   %2d     free",image) << endl;
+         } else {
+            time_t write_time;
+            struct tm t;
+            double version;
+            
+            write_time = static_cast<time_t>(ack.write_date[image]);
+            t = *gmtime(&write_time);
+            version = static_cast<double>(ack.image_version[image] / 10.);
+            cout << formatString("%s %2d    V%5.1lf   %02d-%02d-%4d  %2d:%02d:%02d   %-16.16s   %-16.16s",
+                              (ack.active_image == image)?"->":"  ",
+                              image,
+                              version, 
+                              t.tm_mday,t.tm_mon+1,t.tm_year+1900,
+                              t.tm_hour,t.tm_min,t.tm_sec,
+                              ack.tp_file_name[image],
+                              ack.mp_file_name[image]) << endl;
+            //cout << "TP: " << ack.tp_file_name[image] <<  ",  MP: " << ack.mp_file_name[image] << endl;
+         }
+      }
+   }  else {   
+      cout << formatString("TBB %2d  %s",getBoard(), getDriverErrorStr(ack.status_mask).c_str()) << endl;
+   }
+   
+   setCmdDone(true);
+
+   return(GCFEvent::HANDLED);
 }
 
 
@@ -1417,768 +1416,768 @@ GCFEvent::TResult ImageInfoCmd::ack(GCFEvent& e)
 //---- READW -------------------------------------------------------------------
 ReadwCmd::ReadwCmd(GCFPortInterface& port) : Command(port)
 {
-	cout << endl;
-	cout << "== TBB ======================================================= read DDR2 ====" << endl;
-	cout << endl;
-	cout << "TBB  Info" << endl;
-	cout << "---  -------------------------------------------------------" << endl;  
+   cout << endl;
+   cout << "== TBB ======================================================= read DDR2 ====" << endl;
+   cout << endl;
+   cout << "TBB  Info" << endl;
+   cout << "---  -------------------------------------------------------" << endl;  
 }
 
 //-----------------------------------------------------------------------------
 void ReadwCmd::send()
 {
-	TBBReadwEvent event;
-	event.board = getBoard();
-	event.mp = itsMp;
-	event.addr = itsAddr;
-	itsPort.send(event);
-	itsPort.setTimer(DELAY);
+   TBBReadwEvent event;
+   event.board = getBoard();
+   event.mp = itsMp;
+   event.addr = itsAddr;
+   itsPort.send(event);
+   itsPort.setTimer(DELAY);
 }
 
 //-----------------------------------------------------------------------------
 GCFEvent::TResult ReadwCmd::ack(GCFEvent& e)
 {
-	TBBReadwAckEvent ack(e);
-	for (int bnr=0; bnr < getMaxSelections(); bnr++) {
-		if (isSelected(bnr) ) {
-			if (ack.status_mask & TBB_SUCCESS) {
-				cout << formatString(" %2d  MP[%u] Addr[0x%08X]  [0x%08X] [0x%08X]"
-						,bnr, itsMp, itsAddr, ack.wordlo, ack.wordhi ) << endl;
-			}	else {	
-				cout << formatString(" %2d  %s"
-						,bnr, getDriverErrorStr(ack.status_mask).c_str()) << endl;
-				itsAddr = itsStopAddr - 1;
-			}
-		}
-	}
-	//if (itsAddr == (itsStopAddr - 1))
-	
-	itsAddr++;
-	if (itsAddr >= itsStopAddr) { 
-		setCmdDone(true); 
-	}	else { 
-		//itsPort.setTimer((long)0);
-	}
-	return(GCFEvent::HANDLED);
+   TBBReadwAckEvent ack(e);
+   for (int bnr=0; bnr < getMaxSelections(); bnr++) {
+      if (isSelected(bnr) ) {
+         if (ack.status_mask & TBB_SUCCESS) {
+            cout << formatString(" %2d  MP[%u] Addr[0x%08X]  [0x%08X] [0x%08X]"
+                  ,bnr, itsMp, itsAddr, ack.wordlo, ack.wordhi ) << endl;
+         }  else {   
+            cout << formatString(" %2d  %s"
+                  ,bnr, getDriverErrorStr(ack.status_mask).c_str()) << endl;
+            itsAddr = itsStopAddr - 1;
+         }
+      }
+   }
+   //if (itsAddr == (itsStopAddr - 1))
+   
+   itsAddr++;
+   if (itsAddr >= itsStopAddr) { 
+      setCmdDone(true); 
+   }  else { 
+      //itsPort.setTimer(0.0);
+   }
+   return(GCFEvent::HANDLED);
 }
 
 //---- WRITEW -------------------------------------------------------------------
 WritewCmd::WritewCmd(GCFPortInterface& port) : Command(port)
 {
-	cout << endl;
-	cout << "== TBB ====================================================== write DDR2 ====" << endl;
-	cout << endl;
+   cout << endl;
+   cout << "== TBB ====================================================== write DDR2 ====" << endl;
+   cout << endl;
 }
 
 //-----------------------------------------------------------------------------
 void WritewCmd::send()
 {
-	TBBWritewEvent event;
-	event.board = getBoard();
-	event.mp = itsMp;
-	event.addr = itsAddr;
-	event.wordlo = itsWordLo;
-	event.wordhi = itsWordHi;
-	itsPort.send(event);
-	itsPort.setTimer(DELAY);
+   TBBWritewEvent event;
+   event.board = getBoard();
+   event.mp = itsMp;
+   event.addr = itsAddr;
+   event.wordlo = itsWordLo;
+   event.wordhi = itsWordHi;
+   itsPort.send(event);
+   itsPort.setTimer(DELAY);
 }
 
 //-----------------------------------------------------------------------------
 GCFEvent::TResult WritewCmd::ack(GCFEvent& e)
 {
-	TBBWritewAckEvent ack(e);
-	cout << "TBB  Info" << endl;
-	cout << "---  -------------------------------------------------------" << endl;    
-	for (int bnr=0; bnr < getMaxSelections(); bnr++) {
-		if (isSelected(bnr) ) {
-			if (ack.status_mask & TBB_SUCCESS) {
-				cout << formatString(" %2d  DDR2 write TBB_SUCCESS",bnr ) << endl;
-			}	else {	
-				cout << formatString(" %2d  %s",bnr, getDriverErrorStr(ack.status_mask).c_str()) << endl;
-			}
-		}
-	}
-	
-	
-	setCmdDone(true);
-
-	return(GCFEvent::HANDLED);
+   TBBWritewAckEvent ack(e);
+   cout << "TBB  Info" << endl;
+   cout << "---  -------------------------------------------------------" << endl;    
+   for (int bnr=0; bnr < getMaxSelections(); bnr++) {
+      if (isSelected(bnr) ) {
+         if (ack.status_mask & TBB_SUCCESS) {
+            cout << formatString(" %2d  DDR2 write TBB_SUCCESS",bnr ) << endl;
+         }  else {   
+            cout << formatString(" %2d  %s",bnr, getDriverErrorStr(ack.status_mask).c_str()) << endl;
+         }
+      }
+   }
+   
+   
+   setCmdDone(true);
+
+   return(GCFEvent::HANDLED);
 }
 
 //---- TESTDDR ----------------------------------------------------------------
 TestDdrCmd::TestDdrCmd(GCFPortInterface& port) : Command(port),
-	itsCmdStage(0),itsMp(0), itsAddr(0), itsAddrLine(0), itsTestPatern(1), itsWordLo(0), itsWordHi(0),
-	itsAddrLineErrors(0), itsDataLineErrors(0)
+   itsCmdStage(0),itsMp(0), itsAddr(0), itsAddrLine(0), itsTestPatern(1), itsWordLo(0), itsWordHi(0),
+   itsAddrLineErrors(0), itsDataLineErrors(0)
 {
-	cout << endl;
-	cout << "==== TBB-board, test ddr =================================================" << endl;	
-	cout << endl;
+   cout << endl;
+   cout << "==== TBB-board, test ddr =================================================" << endl;   
+   cout << endl;
 }
 
 //-----------------------------------------------------------------------------
 void TestDdrCmd::send()
 {
-	if ((itsCmdStage == 0)&&(itsMp == 0)&&(itsAddrLine == 0)) {
-		cout << formatString("Testing DDR memory address lines of board %d",getBoard()) << endl;
-		cout << endl;
-		cout << "Mp  Addr   Write  Read                                 " << endl;
-		cout << "Nr  Line   DDR    DDR     Info                         " << endl;
-		cout << "--  -----  -----  -----   -----------------------------" << endl;
-	}
-	
-	if ((itsCmdStage == 2)&&(itsMp == 0)&&(itsTestPatern == 1)) {
-		cout << endl;
-		cout << formatString("Testing DDR memory data lines of board %d",getBoard()) << endl;
-		cout << endl;
-		cout << "Mp  Write     Read      Write      Read                              " << endl;
-		cout << "Nr  WordLow   WordLow   WordHigh   WordHigh  Info                    " << endl;
-		cout << "--  --------  --------  --------   --------  ------------------------" << endl;
-	}
-	switch (itsCmdStage) {
-			
-		case 0: {
-			TBBWritewEvent event;
-			event.board = getBoard();
-			event.mp = itsMp;
-			event.addr = itsAddr;
-			event.wordlo = itsAddrLine;
-			event.wordhi = (itsMp << 8) + itsAddrLine;
-			itsPort.send(event);
-		} break;
-		
-		case 1: {
-			TBBReadwEvent event;
-			event.board = getBoard();
-			event.mp = itsMp;
-			event.addr = itsAddr;
-			itsPort.send(event);
-		} break;
-		
-		case 2: {
-			TBBWritewEvent event;
-			event.board = getBoard();
-			event.mp = itsMp;
-			event.addr = itsAddr;
-			event.wordlo = itsTestPatern;
-			event.wordhi = ~itsTestPatern;
-			itsPort.send(event);	
-		} break;
-		
-		case 3: {
-			TBBReadwEvent event;
-			event.board = getBoard();
-			event.mp = itsMp;
-			event.addr = itsAddr;
-			itsPort.send(event);
-		} break;
-		
-		default: break;
-	}
-	
-	itsPort.setTimer(DELAY);
+   if ((itsCmdStage == 0)&&(itsMp == 0)&&(itsAddrLine == 0)) {
+      cout << formatString("Testing DDR memory address lines of board %d",getBoard()) << endl;
+      cout << endl;
+      cout << "Mp  Addr   Write  Read                                 " << endl;
+      cout << "Nr  Line   DDR    DDR     Info                         " << endl;
+      cout << "--  -----  -----  -----   -----------------------------" << endl;
+   }
+   
+   if ((itsCmdStage == 2)&&(itsMp == 0)&&(itsTestPatern == 1)) {
+      cout << endl;
+      cout << formatString("Testing DDR memory data lines of board %d",getBoard()) << endl;
+      cout << endl;
+      cout << "Mp  Write     Read      Write      Read                              " << endl;
+      cout << "Nr  WordLow   WordLow   WordHigh   WordHigh  Info                    " << endl;
+      cout << "--  --------  --------  --------   --------  ------------------------" << endl;
+   }
+   switch (itsCmdStage) {
+         
+      case 0: {
+         TBBWritewEvent event;
+         event.board = getBoard();
+         event.mp = itsMp;
+         event.addr = itsAddr;
+         event.wordlo = itsAddrLine;
+         event.wordhi = (itsMp << 8) + itsAddrLine;
+         itsPort.send(event);
+      } break;
+      
+      case 1: {
+         TBBReadwEvent event;
+         event.board = getBoard();
+         event.mp = itsMp;
+         event.addr = itsAddr;
+         itsPort.send(event);
+      } break;
+      
+      case 2: {
+         TBBWritewEvent event;
+         event.board = getBoard();
+         event.mp = itsMp;
+         event.addr = itsAddr;
+         event.wordlo = itsTestPatern;
+         event.wordhi = ~itsTestPatern;
+         itsPort.send(event); 
+      } break;
+      
+      case 3: {
+         TBBReadwEvent event;
+         event.board = getBoard();
+         event.mp = itsMp;
+         event.addr = itsAddr;
+         itsPort.send(event);
+      } break;
+      
+      default: break;
+   }
+   
+   itsPort.setTimer(DELAY);
 }
 
 //-----------------------------------------------------------------------------
 GCFEvent::TResult TestDdrCmd::ack(GCFEvent& e)
 {
-	switch (itsCmdStage) {
-		case 0: {
-			TBBWritewAckEvent ack(e);
-			if (!(ack.status_mask & TBB_SUCCESS)) {
-				cout << formatString(" %2d  %s",getBoard(), getDriverErrorStr(ack.status_mask).c_str()) << endl;
-			}
-			itsAddr = (1 << itsAddrLine);
-			itsAddrLine++;
-			if (itsAddrLine == 28) {
-				itsAddr = 0;
-				itsAddrLine = 0;
-				itsCmdStage = 1;
-			}  		
-		}break;
-		
-		case 1: {
-			TBBReadwAckEvent ack(e);
-			if (ack.status_mask & TBB_SUCCESS) {
-				if (ack.wordlo == itsAddrLine) {
-					cout << formatString("%2d  %5d  %5d  %5d   SAME",
-						itsMp, itsAddrLine, itsAddrLine, ack.wordlo) << endl;
-				} else {
-					cout << formatString("%2d  %5d  %5d  %5d   FAULT",
-						itsMp, itsAddrLine, itsAddrLine, ack.wordlo ) << endl;
-					itsAddrLineErrors++;
-				}
-			} else {
-				cout << formatString(" %2d  %s",getBoard(), getDriverErrorStr(ack.status_mask).c_str()) << endl;
-			}
-			itsAddr = (1 << itsAddrLine);
-			itsAddrLine++;
-			if (itsAddrLine == 28) {
-				itsAddr = 0;
-				itsAddrLine = 0;
-				itsCmdStage = 0;
-				itsMp++;
-				if (itsMp == 4) {
-					itsMp = 0;
-					itsAddr = 0;
-					itsCmdStage = 2;
-					//setCmdDone(true);
-				}
-			}
-		} break;
-		
-		case 2: {
-			TBBWritewAckEvent ack(e);
-			if (!(ack.status_mask & TBB_SUCCESS)) {
-				cout << formatString(" %2d  %s",getBoard(), getDriverErrorStr(ack.status_mask).c_str()) << endl;
-			}
-			itsAddr++;
-			itsTestPatern <<= 1;
-			//if (itsTestPatern == 0) itsTestPatern == 1;
-				
-			if (itsTestPatern == 0x00000000) {
-				itsAddr = 0;
-				itsTestPatern = 1;
-				itsCmdStage = 3;
-			}  		
-		}break;
-		
-		case 3: {
-			TBBReadwAckEvent ack(e);
-			if (ack.status_mask & TBB_SUCCESS) {
-				if ((ack.wordlo == itsTestPatern)&&(ack.wordhi == ~itsTestPatern)) {
-					cout << formatString("%2d  %08X  %08X  %08X  %08X   SAME",
-						itsMp, itsTestPatern, ack.wordlo, ~itsTestPatern, ack.wordhi) << endl;
-				} else {
-					cout << formatString("%2d  %08X  %08X  %08X  %08X   FAULT",
-						itsMp, itsTestPatern, ack.wordlo, ~itsTestPatern, ack.wordhi) << endl;
-					itsDataLineErrors++;
-				}
-			} else {
-				cout << formatString(" %2d  %s",getBoard(), getDriverErrorStr(ack.status_mask).c_str()) << endl;
-			}
-			itsAddr++;
-			itsTestPatern <<= 1;
-			//if (itsTestPatern == 0) itsTestPatern == 1;
-				
-			if (itsTestPatern == 0x00000000) {
-				itsAddr = 0;
-				itsTestPatern = 1;
-				itsCmdStage = 2;
-				itsMp++;
-				if (itsMp == 4) {
-					cout << formatString("  == summary ==") << endl;
-					if (itsAddrLineErrors != 0) {
-						cout << formatString("  %d  Addressline ERRORS",itsAddrLineErrors) << endl;
-					} else {
-						cout << formatString("  All Addresslines OK") << endl;
-					}
-					if (itsDataLineErrors != 0) {
-						cout << formatString("  %d  Dataline ERRORS",itsDataLineErrors) << endl;
-					} else {
-						cout << formatString("  All Datalines OK") << endl;
-					}
-					setCmdDone(true);
-				}
-			}
-		} break;
-		
-		
-		default: break;
-	}
-	return(GCFEvent::HANDLED);
+   switch (itsCmdStage) {
+      case 0: {
+         TBBWritewAckEvent ack(e);
+         if (!(ack.status_mask & TBB_SUCCESS)) {
+            cout << formatString(" %2d  %s",getBoard(), getDriverErrorStr(ack.status_mask).c_str()) << endl;
+         }
+         itsAddr = (1 << itsAddrLine);
+         itsAddrLine++;
+         if (itsAddrLine == 28) {
+            itsAddr = 0;
+            itsAddrLine = 0;
+            itsCmdStage = 1;
+         }        
+      }break;
+      
+      case 1: {
+         TBBReadwAckEvent ack(e);
+         if (ack.status_mask & TBB_SUCCESS) {
+            if (ack.wordlo == itsAddrLine) {
+               cout << formatString("%2d  %5d  %5d  %5d   SAME",
+                  itsMp, itsAddrLine, itsAddrLine, ack.wordlo) << endl;
+            } else {
+               cout << formatString("%2d  %5d  %5d  %5d   FAULT",
+                  itsMp, itsAddrLine, itsAddrLine, ack.wordlo ) << endl;
+               itsAddrLineErrors++;
+            }
+         } else {
+            cout << formatString(" %2d  %s",getBoard(), getDriverErrorStr(ack.status_mask).c_str()) << endl;
+         }
+         itsAddr = (1 << itsAddrLine);
+         itsAddrLine++;
+         if (itsAddrLine == 28) {
+            itsAddr = 0;
+            itsAddrLine = 0;
+            itsCmdStage = 0;
+            itsMp++;
+            if (itsMp == 4) {
+               itsMp = 0;
+               itsAddr = 0;
+               itsCmdStage = 2;
+               //setCmdDone(true);
+            }
+         }
+      } break;
+      
+      case 2: {
+         TBBWritewAckEvent ack(e);
+         if (!(ack.status_mask & TBB_SUCCESS)) {
+            cout << formatString(" %2d  %s",getBoard(), getDriverErrorStr(ack.status_mask).c_str()) << endl;
+         }
+         itsAddr++;
+         itsTestPatern <<= 1;
+         //if (itsTestPatern == 0) itsTestPatern == 1;
+            
+         if (itsTestPatern == 0x00000000) {
+            itsAddr = 0;
+            itsTestPatern = 1;
+            itsCmdStage = 3;
+         }        
+      }break;
+      
+      case 3: {
+         TBBReadwAckEvent ack(e);
+         if (ack.status_mask & TBB_SUCCESS) {
+            if ((ack.wordlo == itsTestPatern)&&(ack.wordhi == ~itsTestPatern)) {
+               cout << formatString("%2d  %08X  %08X  %08X  %08X   SAME",
+                  itsMp, itsTestPatern, ack.wordlo, ~itsTestPatern, ack.wordhi) << endl;
+            } else {
+               cout << formatString("%2d  %08X  %08X  %08X  %08X   FAULT",
+                  itsMp, itsTestPatern, ack.wordlo, ~itsTestPatern, ack.wordhi) << endl;
+               itsDataLineErrors++;
+            }
+         } else {
+            cout << formatString(" %2d  %s",getBoard(), getDriverErrorStr(ack.status_mask).c_str()) << endl;
+         }
+         itsAddr++;
+         itsTestPatern <<= 1;
+         //if (itsTestPatern == 0) itsTestPatern == 1;
+            
+         if (itsTestPatern == 0x00000000) {
+            itsAddr = 0;
+            itsTestPatern = 1;
+            itsCmdStage = 2;
+            itsMp++;
+            if (itsMp == 4) {
+               cout << formatString("  == summary ==") << endl;
+               if (itsAddrLineErrors != 0) {
+                  cout << formatString("  %d  Addressline ERRORS",itsAddrLineErrors) << endl;
+               } else {
+                  cout << formatString("  All Addresslines OK") << endl;
+               }
+               if (itsDataLineErrors != 0) {
+                  cout << formatString("  %d  Dataline ERRORS",itsDataLineErrors) << endl;
+               } else {
+                  cout << formatString("  All Datalines OK") << endl;
+               }
+               setCmdDone(true);
+            }
+         }
+      } break;
+      
+      
+      default: break;
+   }
+   return(GCFEvent::HANDLED);
 }
 
 //---- READR -------------------------------------------------------------------
 ReadrCmd::ReadrCmd(GCFPortInterface& port) : Command(port),
-	itsMp(0), itsPid(0), itsRegId(0)
+   itsMp(0), itsPid(0), itsRegId(0)
 {
-	cout << endl;
-	cout << "==== TBB-board, read register ================================================" << endl;
+   cout << endl;
+   cout << "==== TBB-board, read register ================================================" << endl;
 }
 
 //-----------------------------------------------------------------------------
 void ReadrCmd::send()
 {
-	TBBReadrEvent event;
-	event.board = (int32)getBoard();
-	event.mp = itsMp;
-	event.pid = itsPid;
-	event.regid = itsRegId;
-	
-	itsPort.send(event);
-	itsPort.setTimer(DELAY);
+   TBBReadrEvent event;
+   event.board = (int32)getBoard();
+   event.mp = itsMp;
+   event.pid = itsPid;
+   event.regid = itsRegId;
+   
+   itsPort.send(event);
+   itsPort.setTimer(DELAY);
 }
 
 //-----------------------------------------------------------------------------
 GCFEvent::TResult ReadrCmd::ack(GCFEvent& e)
 {
-	TBBReadrAckEvent ack(e);
-	
-	cout <<   "Board : " <<  getBoard() << endl;
-	if (ack.status_mask & TBB_SUCCESS) {
-		cout << "MP    : " << itsMp << endl;
-		cout << "PID   : " << itsPid << endl;
-		cout << "REGID : " << itsRegId << endl;
-		cout << "Received data : "; 
-		        
-		for (int i = 0; i < (REG_SIZE[itsPid][itsRegId]); i++) {
-			if (i % 4 == 0) {
-				if (i != 0) cout << endl << "                ";
-				cout << formatString("0x%02x: ",(i * 4));
-			}
-			cout << formatString("%08x ",ack.data[i]);
-		}
-	} else {
-		cout << "ERROR : " << getDriverErrorStr(ack.status_mask).c_str();	
-	}
-	
-	setCmdDone(true);
-
-	return(GCFEvent::HANDLED);
+   TBBReadrAckEvent ack(e);
+   
+   cout <<   "Board : " <<  getBoard() << endl;
+   if (ack.status_mask & TBB_SUCCESS) {
+      cout << "MP    : " << itsMp << endl;
+      cout << "PID   : " << itsPid << endl;
+      cout << "REGID : " << itsRegId << endl;
+      cout << "Received data : "; 
+              
+      for (int i = 0; i < (REG_SIZE[itsPid][itsRegId]); i++) {
+         if (i % 4 == 0) {
+            if (i != 0) cout << endl << "                ";
+            cout << formatString("0x%02x: ",(i * 4));
+         }
+         cout << formatString("%08x ",ack.data[i]);
+      }
+   } else {
+      cout << "ERROR : " << getDriverErrorStr(ack.status_mask).c_str(); 
+   }
+   
+   setCmdDone(true);
+
+   return(GCFEvent::HANDLED);
 }
 
 //---- WRITER -------------------------------------------------------------------
 WriterCmd::WriterCmd(GCFPortInterface& port) : Command(port),
-	itsMp(0), itsPid(0), itsRegId(0)
+   itsMp(0), itsPid(0), itsRegId(0)
 {
-	for (int i = 0; i < 16; i++) {
-		itsData[i] = 0;
-	}
-	cout << endl;
-	cout << "==== TBB-board, write register ===============================================" << endl;	
-	cout << endl;
+   for (int i = 0; i < 16; i++) {
+      itsData[i] = 0;
+   }
+   cout << endl;
+   cout << "==== TBB-board, write register ===============================================" << endl;  
+   cout << endl;
 }
 
 //-----------------------------------------------------------------------------
 void WriterCmd::send()
 {
-	TBBWriterEvent event;
-	event.board = (int32)getBoard();
-	event.mp = itsMp;
-	event.pid = itsPid;
-	event.regid = itsRegId;
-	for (int i = 0; i < (REG_SIZE[itsPid][itsRegId]); i++) {
-		event.data[i] = itsData[i];
-	}
-	itsPort.send(event);
-	itsPort.setTimer(DELAY);
+   TBBWriterEvent event;
+   event.board = (int32)getBoard();
+   event.mp = itsMp;
+   event.pid = itsPid;
+   event.regid = itsRegId;
+   for (int i = 0; i < (REG_SIZE[itsPid][itsRegId]); i++) {
+      event.data[i] = itsData[i];
+   }
+   itsPort.send(event);
+   itsPort.setTimer(DELAY);
 }
 
 //-----------------------------------------------------------------------------
 GCFEvent::TResult WriterCmd::ack(GCFEvent& e)
 {
-	TBBWriterAckEvent ack(e);
-	
-	cout <<   "Board : " <<  getBoard() << endl;
-	if (ack.status_mask & TBB_SUCCESS) {
-		cout << "MP    : " << itsMp << endl;
-		cout << "PID   : " << itsPid << endl;
-		cout << "REGID : " << itsRegId << endl;
-		cout << "Transmitted data : "; 
-		for (int i = 0; i < (REG_SIZE[itsPid][itsRegId]); i++) {
-			if (i % 4 == 0) {
-				if (i != 0) cout << endl << "                ";
-				cout << formatString("0x%02x: ",(i * 4));
-			}
-			cout << formatString("%08x ",itsData[i]);
-		}
-	}	else {	
-		cout << getDriverErrorStr(ack.status_mask).c_str();
-	}
-	setCmdDone(true);
-
-	return(GCFEvent::HANDLED);
+   TBBWriterAckEvent ack(e);
+   
+   cout <<   "Board : " <<  getBoard() << endl;
+   if (ack.status_mask & TBB_SUCCESS) {
+      cout << "MP    : " << itsMp << endl;
+      cout << "PID   : " << itsPid << endl;
+      cout << "REGID : " << itsRegId << endl;
+      cout << "Transmitted data : "; 
+      for (int i = 0; i < (REG_SIZE[itsPid][itsRegId]); i++) {
+         if (i % 4 == 0) {
+            if (i != 0) cout << endl << "                ";
+            cout << formatString("0x%02x: ",(i * 4));
+         }
+         cout << formatString("%08x ",itsData[i]);
+      }
+   }  else {   
+      cout << getDriverErrorStr(ack.status_mask).c_str();
+   }
+   setCmdDone(true);
+
+   return(GCFEvent::HANDLED);
 }
 
 //---- EADPAGE ------------------------------------------------------------------
 ReadPageCmd::ReadPageCmd(GCFPortInterface& port) : Command(port),
-	itsRcu(0),itsStartPage(0),itsPages(1),itsCmdStage(0),itsPage(0),itsTotalSize(0),itsStartAddr(0),itsSize(0),itsBoard(0),itsMp(0),
-	itsStationId(0),itsRspId(0),itsRcuId(0),itsSampleFreq(0),itsTime(0),itsSampleNr(0),itsSamplesPerFrame(0),
-	itsFreqBands(0),itsTotalSamples(0),itsTotalBands(0), itsBandNr(0), itsSliceNr(0)
+   itsRcu(0),itsStartPage(0),itsPages(1),itsCmdStage(0),itsPage(0),itsTotalSize(0),itsStartAddr(0),itsSize(0),itsBoard(0),itsMp(0),
+   itsStationId(0),itsRspId(0),itsRcuId(0),itsSampleFreq(0),itsTime(0),itsSampleNr(0),itsSamplesPerFrame(0),
+   itsFreqBands(0),itsTotalSamples(0),itsTotalBands(0), itsBandNr(0), itsSliceNr(0)
 {
-	for (int i = 0; i < 512; i++) itsData[i] = 0;
-	cout << endl;
-	cout << "==== TBB-board, readx register ================================================" << endl;
-	cout << endl;
+   for (int i = 0; i < 512; i++) itsData[i] = 0;
+   cout << endl;
+   cout << "==== TBB-board, readx register ================================================" << endl;
+   cout << endl;
 }
 //-----------------------------------------------------------------------------
 void ReadPageCmd::send()
 {
-	
-	switch (itsCmdStage) {
-		
-		case 0: {	// get info about allocated RCU's
-			TBBRcuInfoEvent send;
-			itsPort.send(send);
-			itsPort.setTimer(DELAY);
-		} break;
-		
-		case 1: {	// get total memmory size
-  		TBBSizeEvent send;
-  		send.boardmask = (1 << itsBoard);
-  		itsPort.send(send);
-  		itsPort.setTimer(DELAY);
-		} break;
-		
-		case 2: {	// write page address to board
-			TBBWriterEvent send;
-			
-			itsMp = static_cast<int32>((itsStartPage + itsPage) / itsTotalSize);	// MP of requested addr
-			
-			send.board = itsBoard;
-			send.mp = itsMp;
-			send.pid = PID6;
-			send.regid = REGID1;
-			send.data[0] = (itsStartPage + itsPage);
-			send.data[1] = 0; 
-			send.data[2] = 0;
-			itsPort.send(send);
-			itsPort.setTimer(DELAY);
-			
-			LOG_DEBUG_STR(formatString("Writer[%x][%x][%x][%x]", 
-				send.mp,send.pid,send.regid,send.data[0]));
-		} break;
-		
-		case 3: { // write page-read-cmd to board
-			TBBWriterEvent send;
-			send.board = itsBoard;
-			send.mp = itsMp;
-			send.pid = PID6;
-			send.regid = REGID0;
-			send.data[0] = PAGEREAD;
-			send.data[1] = 0; 
-			send.data[2] = 0;
-			itsPort.send(send);
-			itsPort.setTimer(DELAY);
-			
-			LOG_DEBUG_STR(formatString("Writer[%x][%x][%x][%x]", 
-				send.mp,send.pid,send.regid,send.data[0]));
-		} break;
-		
-		case 4: { // read first part of frame
-			TBBReadxEvent send;
-			send.board = itsBoard;	
-			send.mp = itsMp;
-			send.pid = PID6;
-			send.regid = REGID2;
-			send.pagelength = 256;
-			send.pageaddr = 0;
-			itsPort.send(send);
-			itsPort.setTimer(DELAY);
-			
-			LOG_DEBUG_STR(formatString("Readx[%x][%x][%x][%x][%x]", 
-				send.mp,send.pid,send.regid,send.pagelength,send.pageaddr));
-		} break;
-		
-		case 5: {	// read second part of frame
-			TBBReadxEvent send;
-			send.board = itsBoard;	
-			send.mp = itsMp;
-			send.pid = PID6;
-			send.regid = REGID2;
-			send.pagelength = 256;
-			send.pageaddr = 256;
-			itsPort.send(send);
-			itsPort.setTimer(DELAY);
-			
-			LOG_DEBUG_STR(formatString("Readx[%x][%x][%x][%x][%x]", 
-				send.mp,send.pid,send.regid,send.pagelength,send.pageaddr));
-		} break;
-		
-		default:{
-		} break;
-	}
+   
+   switch (itsCmdStage) {
+      
+      case 0: {   // get info about allocated RCU's
+         TBBRcuInfoEvent send;
+         itsPort.send(send);
+         itsPort.setTimer(DELAY);
+      } break;
+      
+      case 1: {   // get total memmory size
+      TBBSizeEvent send;
+      send.boardmask = (1 << itsBoard);
+      itsPort.send(send);
+      itsPort.setTimer(DELAY);
+      } break;
+      
+      case 2: {   // write page address to board
+         TBBWriterEvent send;
+         
+         itsMp = static_cast<int32>((itsStartPage + itsPage) / itsTotalSize); // MP of requested addr
+         
+         send.board = itsBoard;
+         send.mp = itsMp;
+         send.pid = PID6;
+         send.regid = REGID1;
+         send.data[0] = (itsStartPage + itsPage);
+         send.data[1] = 0; 
+         send.data[2] = 0;
+         itsPort.send(send);
+         itsPort.setTimer(DELAY);
+         
+         LOG_DEBUG_STR(formatString("Writer[%x][%x][%x][%x]", 
+            send.mp,send.pid,send.regid,send.data[0]));
+      } break;
+      
+      case 3: { // write page-read-cmd to board
+         TBBWriterEvent send;
+         send.board = itsBoard;
+         send.mp = itsMp;
+         send.pid = PID6;
+         send.regid = REGID0;
+         send.data[0] = PAGEREAD;
+         send.data[1] = 0; 
+         send.data[2] = 0;
+         itsPort.send(send);
+         itsPort.setTimer(DELAY);
+         
+         LOG_DEBUG_STR(formatString("Writer[%x][%x][%x][%x]", 
+            send.mp,send.pid,send.regid,send.data[0]));
+      } break;
+      
+      case 4: { // read first part of frame
+         TBBReadxEvent send;
+         send.board = itsBoard;  
+         send.mp = itsMp;
+         send.pid = PID6;
+         send.regid = REGID2;
+         send.pagelength = 256;
+         send.pageaddr = 0;
+         itsPort.send(send);
+         itsPort.setTimer(DELAY);
+         
+         LOG_DEBUG_STR(formatString("Readx[%x][%x][%x][%x][%x]", 
+            send.mp,send.pid,send.regid,send.pagelength,send.pageaddr));
+      } break;
+      
+      case 5: {   // read second part of frame
+         TBBReadxEvent send;
+         send.board = itsBoard;  
+         send.mp = itsMp;
+         send.pid = PID6;
+         send.regid = REGID2;
+         send.pagelength = 256;
+         send.pageaddr = 256;
+         itsPort.send(send);
+         itsPort.setTimer(DELAY);
+         
+         LOG_DEBUG_STR(formatString("Readx[%x][%x][%x][%x][%x]", 
+            send.mp,send.pid,send.regid,send.pagelength,send.pageaddr));
+      } break;
+      
+      default:{
+      } break;
+   }
 }
 
 //-----------------------------------------------------------------------------
 GCFEvent::TResult ReadPageCmd::ack(GCFEvent& e)
 {
-	char basefilename[PATH_MAX];
-	char filename[PATH_MAX];
-	char timestring[256];
-
-	int16 val[1400];
-	
-	double 				bar_size = 50;
-	static double	bar_interval = 1;
-	static double	bar_buff = 0;
-		
-	switch (itsCmdStage) {
-		
-		case 0: {
-			TBBRcuInfoAckEvent ack(e);
-			itsRcu = getRcu();
-			itsState = ack.rcu_state[itsRcu];
-			itsStartAddr = ack.rcu_start_addr[itsRcu];
-			itsSize = ack.rcu_pages[itsRcu];
-			itsBoard = ack.rcu_on_board[itsRcu];
-			//itsMp = static_cast<int32>(ack.rcu_on_input[itsRcu] / 4);
-			//cout << formatString("Rcu-%d Board[%d] Mp[%d]",itsRcu,itsBoard,itsMp) << endl;
-			
-			itsStartPage += itsStartAddr;
-			
-			if (itsState == 'F') {
-				cout << "Rcu not allocated" << endl;
-				itsCmdStage = 10;
-			}
-		} break;
-				
-		case 1: {
-  		TBBSizeAckEvent ack(e);
-  		if (!(ack.status_mask[itsBoard] & TBB_SUCCESS)) {
-				cout << formatString("%s",getDriverErrorStr(ack.status_mask[itsBoard]).c_str()) << endl;
-				itsCmdStage = 10;
-			} else {
-				itsTotalSize = ack.npages[itsBoard] / 4;
-				
-				if ((itsStartPage < itsStartAddr) || ((itsStartPage + itsPages) > (itsStartAddr + itsSize))) {
-					cout << formatString("Requested Page belongs not to rcu %d", itsRcu) << endl;			 
-				} else {
-					//cout << formatString("StartPage = %u ",itsStartPage) << endl;			 
-				}
-			}
-		} break;
-		
-		case 2: {
-			TBBWriterAckEvent ack(e);
-			if (!(ack.status_mask & TBB_SUCCESS)) {
-				cout << formatString("%s",getDriverErrorStr(ack.status_mask).c_str()) << endl;
-				itsCmdStage = 10;
-			}
-		} break;
-		
-		case 3: {
-			TBBWriterAckEvent ack(e);
-			if (!(ack.status_mask & TBB_SUCCESS)) {
-				cout << formatString("%s",getDriverErrorStr(ack.status_mask).c_str()) << endl;
-				itsCmdStage = 10;
-			}
-		} break;
-		
-		case 4: {
-			TBBReadxAckEvent ack(e);
-			if (!(ack.status_mask & TBB_SUCCESS)) {
-				cout << formatString("%s", getDriverErrorStr(ack.status_mask).c_str()) << endl;
-				itsCmdStage = 10;
-		  }
-		  
-		  // memcpy(itsData, ack.pagedata, sizeof(ack.pagedata));
-			for (int32 dn = 0; dn < 256; dn++) { 
-				itsData[dn] = ack.pagedata[dn];
-			}
-		} break;
-		
-		case 5: {
-			TBBReadxAckEvent ack(e);
-			if (!(ack.status_mask & TBB_SUCCESS)) {
-				cout << formatString("%s", getDriverErrorStr(ack.status_mask).c_str()) << endl;
-				itsCmdStage = 10;
-		  }
-			for (int32 dn = 0; dn < 256; dn++) { 
-				itsData[256 + dn] = ack.pagedata[dn];
-			}
-		} break;
-	}
-	
-	// if error in communication stop
-	if (itsCmdStage == 10) {
-		setCmdDone(true);
-		return(GCFEvent::HANDLED);
-	}
-	
-	itsCmdStage++;
-	if (itsCmdStage > 5) { // if stage > 5, received 1 frame
-				
-		bar_buff += 1;
-		if (itsPage == 0) {
-						
-			itsStationId = static_cast<int>(itsData[0] & 0xFF);
-			itsRspId = static_cast<int>((itsData[0] >> 8) & 0xFF);
-			itsRcuId = static_cast<int>((itsData[0] >> 16) & 0xFF);
-			itsSampleFreq = static_cast<int>((itsData[0] >> 24) & 0xFF);
-			itsTime = static_cast<time_t>(itsData[2]);
-			itsFreqBands = static_cast<int>((itsData[4] >> 16) & 0xFFFF);
-			
-			if (itsFreqBands == 0) {
-				itsSampleNr = static_cast<uint32>(itsData[3]);
-			} else {
-				itsBandNr = static_cast<int>(itsData[3] & 0x03FF);
-				itsSliceNr = static_cast<int>(itsData[3] >> 10);
-			}
-			strftime(timestring, 255, "%Y%m%d_%H%M%S", gmtime(&itsTime));
-			
-			cout << "Station ID      : " << itsStationId << endl;
-			cout << "RSP ID          : " << itsRspId << endl;
-			cout << "RCU ID          : " << itsRcuId << endl;
-			cout << "Sample freq     : " << itsSampleFreq << " MHz" << endl;
-			if (itsTime < 0) {
-				cout << "Time            : invalid" << endl;
-			} else {
-				cout << "Time of 1e sample/slice    : " << timestring << " (" << (uint32)itsTime << ")" << endl ;
-			}
-			if (itsFreqBands > 0) {
-				cout << "Slice number of 1e slice   : " << itsSliceNr << endl;
-				cout << "Band number of 1e sample   : " << itsBandNr << endl;
-				cout << "Number of bands            : " << itsFreqBands << endl;
-				cout << "Data file format           : binary complex(int16 Re, int16 Im)" << endl;
-			}	else {
-				cout << "Sample number of 1e sample : " << itsSampleNr << endl;
-				cout << "Data file format           : binary  int16" << endl;
-			}
-			
-			// print size of progressbar on screen
-			bar_interval = itsPages / bar_size;
-			int recvtime = static_cast<int>((1043. / 262144.) * itsPages);  // measured 262144 pages in 1043 seconds
-			int hours = recvtime / (60 * 60);
-			int mins = (recvtime - (hours * 60 * 60)) / 60;
-			int secs = recvtime - (hours * 60 * 60) - (mins * 60) + 1; // 1 second for overhead
-			cout << endl;
-			cout << "          Estimated receive time " << formatString("%d:%02d:%02d",hours, mins, secs) << endl;
-			cout << "Progress |";
-			for (int i = 0; i < bar_size; i++) {
-				cout << "-";
-			}
-			cout << "|" << endl ;
-			cout <<   "         |" << flush;
-			
-			snprintf(basefilename, PATH_MAX, "%s_%s_%02d%02d",(itsFreqBands == 0)?"rw":"sb",timestring,itsStationId,itsRcuId);
-		}
-		itsSamplesPerFrame = static_cast<uint32>(itsData[4] & 0xFFFF);
-		
-		// print receive progress on screen
-		if (bar_interval < 1.) {
-			int count = static_cast<int>(ceil(bar_buff / bar_interval));
-			for (int i = 0; i < count; i++) {
-				cout << "x" << flush;
-			}
-			bar_buff -= (count * bar_interval); 
-		} else {
-			if (bar_buff >= bar_interval) {
-				cout << "x" << flush;
-				bar_buff -= bar_interval;
-			}
-		}
-								
-		int sample_cnt = 0;
-		int val_cnt = 0;
-		int data_cnt = 22; // 22 = startadress of data in frame
-		
-		// extract payload
-		if (itsFreqBands > 0) {	// if itsFreqBands > 0 then it's SPECTRAL data
-			itsTotalSamples += itsSamplesPerFrame;
-
-			// convert uint32 to complex int16
-			while (sample_cnt < itsSamplesPerFrame) {
-					val[val_cnt++] = static_cast<int16>(itsData[data_cnt] & 0xFFFF);	// re part
-					val[val_cnt++] = static_cast<int16>((itsData[data_cnt++] >> 16) & 0xFFFF);	// im part
-					sample_cnt++;
-			}
-		}	else {	// if itsFreqBands = 0, it's RAW data
-
-			uint32 data[3];
-			itsTotalSamples += itsSamplesPerFrame;
-
-			// 1e convert uint32 to int12
-			while (sample_cnt < itsSamplesPerFrame) {
-				// get 96 bits from received data
-				data[0] = itsData[data_cnt++];
-				data[1] = itsData[data_cnt++];
-				data[2] = itsData[data_cnt++];
-				
-				// extract 8 values of 12 bit
-				val[val_cnt++] = static_cast<int16>(  data[0] & 0x00000FFF);
-				val[val_cnt++] = static_cast<int16>(( data[0] & 0x00FFF000) >> 12);
-				val[val_cnt++] = static_cast<int16>(((data[0] & 0xFF000000) >> 24) | ((data[1] & 0x0000000F) << 8));
-				val[val_cnt++] = static_cast<int16>(( data[1] & 0x0000FFF0) >> 4 );
-				val[val_cnt++] = static_cast<int16>(( data[1] & 0x0FFF0000) >> 16);
-				val[val_cnt++] = static_cast<int16>(((data[1] & 0xF0000000) >> 28) | ((data[2] & 0x000000FF) << 4));
-				val[val_cnt++] = static_cast<int16>(( data[2] & 0x000FFF00) >> 8);
-				val[val_cnt++] = static_cast<int16>(( data[2] & 0xFFF00000) >> 20);
-				
-				sample_cnt += 8;
-			}
-			
-			// 2e convert all received samples from signed 12bit to signed 16bit
-			for (int cnt = 0; cnt < val_cnt; cnt++) {
-				if (val[cnt] & 0x0800) val[cnt] |= 0xF000;
-			}
-		}
-		
-		// write all data to file
-		FILE* file;
-				
-		if (val_cnt > 0) {
-			// save unpacked frame to file
-			snprintf(filename, PATH_MAX, "%s.dat",basefilename);
-			file = fopen(filename,"a");
-			fwrite(&itsData[0],sizeof(uint32),22,file);		// frame header 88 bytes (4 x 22)
-			fwrite(&val[0],sizeof(int16),val_cnt,file);		// payload
-			fwrite(&itsData[509],sizeof(uint32),1,file);	// payload CRC 4 bytes (4 x 1)
-			fclose(file);
-		}
-		
-		itsPage++;
-		if ((itsPage < itsPages) && (itsPage < itsSize)) { 
-				itsCmdStage = 2;
-		}	else {
-			// last page received, print last info on screen
-			cout << "|" << endl;
-			cout << endl;
-			cout << "Total received pages  : " << itsPage;
-			if (itsPage > 1) {
-				cout << " (page " << itsStartPage << " .. " << (itsStartPage + itsPage - 1) << ")" << endl;
-			} else {
-				cout << " (page " << itsStartPage << ")" << endl;
-			}
-			cout << "Total received samples: " << itsTotalSamples << endl;
-
-			if (val_cnt > 0) {
-				cout << "Filename        : " << basefilename << ".nfo" << endl;
-				cout << "                : " << basefilename << ".dat" << endl;
-				cout << endl;
-				cout << "Each frame exists of:" << endl;
-				cout << "  HEADER(88 bytes) + PAYLOAD(see header for size) + PAYLOAD_CRC(4 bytes)" << endl;
-			} else {
-				cout << "Filename        : NO DATA IN FRAME" << endl;
-			}
-			
-			
-			
-			// save page information to file
-			strftime(timestring, 255, "%Y-%m-%d  %H:%M:%S", gmtime(&itsTime));
-
-			snprintf(filename, PATH_MAX, "%s.nfo",basefilename);
-			file = fopen(filename,"w");		
-			
-			fprintf(file,  "Station ID      : %d",itsStationId);
-			fprintf(file,  "RSP ID          : %d",itsRspId);
-			fprintf(file,  "RCU ID          : %d",itsRcuId);
-			fprintf(file,  "Sample freq     : %d MHz",itsSampleFreq);
-			if (itsTime < 0) {
-				fprintf(file,"Time            : invalid");
-			} else {
-				fprintf(file,"Time of 1e sample/slice  : %s (%u)",timestring,(uint32)itsTime);
-			}
-			if (itsFreqBands > 0) {
-				fprintf(file,"Slice number of 1e slice : %d",itsSliceNr);
-				fprintf(file,"Band number of 1e sample : %d",itsBandNr);
-				fprintf(file,"Number of bands          : %d",itsFreqBands);
-				fprintf(file,"Data file format         : binary complex(int16 Re, int16 Im)");
-			}	else {
-				fprintf(file,"Sample number of 1e sample : %u",itsSampleNr);
-				fprintf(file,"Total number of samples    : %u",itsTotalSamples);
-				fprintf(file,"Data file format           : binary  int16");
-				fprintf(file," ");
-			}
-			fclose(file);
-		}
-	}
-
-	if (itsPage == itsPages) {
-		setCmdDone(true);
-	}
-
-	return(GCFEvent::HANDLED);
+   char basefilename[PATH_MAX];
+   char filename[PATH_MAX];
+   char timestring[256];
+
+   int16 val[1400];
+   
+   double            bar_size = 50;
+   static double  bar_interval = 1;
+   static double  bar_buff = 0;
+      
+   switch (itsCmdStage) {
+      
+      case 0: {
+         TBBRcuInfoAckEvent ack(e);
+         itsRcu = getRcu();
+         itsState = ack.rcu_state[itsRcu];
+         itsStartAddr = ack.rcu_start_addr[itsRcu];
+         itsSize = ack.rcu_pages[itsRcu];
+         itsBoard = ack.rcu_on_board[itsRcu];
+         //itsMp = static_cast<int32>(ack.rcu_on_input[itsRcu] / 4);
+         //cout << formatString("Rcu-%d Board[%d] Mp[%d]",itsRcu,itsBoard,itsMp) << endl;
+         
+         itsStartPage += itsStartAddr;
+         
+         if (itsState == 'F') {
+            cout << "Rcu not allocated" << endl;
+            itsCmdStage = 10;
+         }
+      } break;
+            
+      case 1: {
+      TBBSizeAckEvent ack(e);
+      if (!(ack.status_mask[itsBoard] & TBB_SUCCESS)) {
+            cout << formatString("%s",getDriverErrorStr(ack.status_mask[itsBoard]).c_str()) << endl;
+            itsCmdStage = 10;
+         } else {
+            itsTotalSize = ack.npages[itsBoard] / 4;
+            
+            if ((itsStartPage < itsStartAddr) || ((itsStartPage + itsPages) > (itsStartAddr + itsSize))) {
+               cout << formatString("Requested Page belongs not to rcu %d", itsRcu) << endl;        
+            } else {
+               //cout << formatString("StartPage = %u ",itsStartPage) << endl;          
+            }
+         }
+      } break;
+      
+      case 2: {
+         TBBWriterAckEvent ack(e);
+         if (!(ack.status_mask & TBB_SUCCESS)) {
+            cout << formatString("%s",getDriverErrorStr(ack.status_mask).c_str()) << endl;
+            itsCmdStage = 10;
+         }
+      } break;
+      
+      case 3: {
+         TBBWriterAckEvent ack(e);
+         if (!(ack.status_mask & TBB_SUCCESS)) {
+            cout << formatString("%s",getDriverErrorStr(ack.status_mask).c_str()) << endl;
+            itsCmdStage = 10;
+         }
+      } break;
+      
+      case 4: {
+         TBBReadxAckEvent ack(e);
+         if (!(ack.status_mask & TBB_SUCCESS)) {
+            cout << formatString("%s", getDriverErrorStr(ack.status_mask).c_str()) << endl;
+            itsCmdStage = 10;
+        }
+        
+        // memcpy(itsData, ack.pagedata, sizeof(ack.pagedata));
+         for (int32 dn = 0; dn < 256; dn++) { 
+            itsData[dn] = ack.pagedata[dn];
+         }
+      } break;
+      
+      case 5: {
+         TBBReadxAckEvent ack(e);
+         if (!(ack.status_mask & TBB_SUCCESS)) {
+            cout << formatString("%s", getDriverErrorStr(ack.status_mask).c_str()) << endl;
+            itsCmdStage = 10;
+        }
+         for (int32 dn = 0; dn < 256; dn++) { 
+            itsData[256 + dn] = ack.pagedata[dn];
+         }
+      } break;
+   }
+   
+   // if error in communication stop
+   if (itsCmdStage == 10) {
+      setCmdDone(true);
+      return(GCFEvent::HANDLED);
+   }
+   
+   itsCmdStage++;
+   if (itsCmdStage > 5) { // if stage > 5, received 1 frame
+            
+      bar_buff += 1;
+      if (itsPage == 0) {
+                  
+         itsStationId = static_cast<int>(itsData[0] & 0xFF);
+         itsRspId = static_cast<int>((itsData[0] >> 8) & 0xFF);
+         itsRcuId = static_cast<int>((itsData[0] >> 16) & 0xFF);
+         itsSampleFreq = static_cast<int>((itsData[0] >> 24) & 0xFF);
+         itsTime = static_cast<time_t>(itsData[2]);
+         itsFreqBands = static_cast<int>((itsData[4] >> 16) & 0xFFFF);
+         
+         if (itsFreqBands == 0) {
+            itsSampleNr = static_cast<uint32>(itsData[3]);
+         } else {
+            itsBandNr = static_cast<int>(itsData[3] & 0x03FF);
+            itsSliceNr = static_cast<int>(itsData[3] >> 10);
+         }
+         strftime(timestring, 255, "%Y%m%d_%H%M%S", gmtime(&itsTime));
+         
+         cout << "Station ID      : " << itsStationId << endl;
+         cout << "RSP ID          : " << itsRspId << endl;
+         cout << "RCU ID          : " << itsRcuId << endl;
+         cout << "Sample freq     : " << itsSampleFreq << " MHz" << endl;
+         if (itsTime < 0) {
+            cout << "Time            : invalid" << endl;
+         } else {
+            cout << "Time of 1e sample/slice    : " << timestring << " (" << (uint32)itsTime << ")" << endl ;
+         }
+         if (itsFreqBands > 0) {
+            cout << "Slice number of 1e slice   : " << itsSliceNr << endl;
+            cout << "Band number of 1e sample   : " << itsBandNr << endl;
+            cout << "Number of bands            : " << itsFreqBands << endl;
+            cout << "Data file format           : binary complex(int16 Re, int16 Im)" << endl;
+         }  else {
+            cout << "Sample number of 1e sample : " << itsSampleNr << endl;
+            cout << "Data file format           : binary  int16" << endl;
+         }
+         
+         // print size of progressbar on screen
+         bar_interval = itsPages / bar_size;
+         int recvtime = static_cast<int>((1043. / 262144.) * itsPages);  // measured 262144 pages in 1043 seconds
+         int hours = recvtime / (60 * 60);
+         int mins = (recvtime - (hours * 60 * 60)) / 60;
+         int secs = recvtime - (hours * 60 * 60) - (mins * 60) + 1; // 1 second for overhead
+         cout << endl;
+         cout << "          Estimated receive time " << formatString("%d:%02d:%02d",hours, mins, secs) << endl;
+         cout << "Progress |";
+         for (int i = 0; i < bar_size; i++) {
+            cout << "-";
+         }
+         cout << "|" << endl ;
+         cout <<   "         |" << flush;
+         
+         snprintf(basefilename, PATH_MAX, "%s_%s_%02d%02d",(itsFreqBands == 0)?"rw":"sb",timestring,itsStationId,itsRcuId);
+      }
+      itsSamplesPerFrame = static_cast<uint32>(itsData[4] & 0xFFFF);
+      
+      // print receive progress on screen
+      if (bar_interval < 1.) {
+         int count = static_cast<int>(ceil(bar_buff / bar_interval));
+         for (int i = 0; i < count; i++) {
+            cout << "x" << flush;
+         }
+         bar_buff -= (count * bar_interval); 
+      } else {
+         if (bar_buff >= bar_interval) {
+            cout << "x" << flush;
+            bar_buff -= bar_interval;
+         }
+      }
+                        
+      int sample_cnt = 0;
+      int val_cnt = 0;
+      int data_cnt = 22; // 22 = startadress of data in frame
+      
+      // extract payload
+      if (itsFreqBands > 0) { // if itsFreqBands > 0 then it's SPECTRAL data
+         itsTotalSamples += itsSamplesPerFrame;
+
+         // convert uint32 to complex int16
+         while (sample_cnt < itsSamplesPerFrame) {
+               val[val_cnt++] = static_cast<int16>(itsData[data_cnt] & 0xFFFF);  // re part
+               val[val_cnt++] = static_cast<int16>((itsData[data_cnt++] >> 16) & 0xFFFF); // im part
+               sample_cnt++;
+         }
+      }  else {   // if itsFreqBands = 0, it's RAW data
+
+         uint32 data[3];
+         itsTotalSamples += itsSamplesPerFrame;
+
+         // 1e convert uint32 to int12
+         while (sample_cnt < itsSamplesPerFrame) {
+            // get 96 bits from received data
+            data[0] = itsData[data_cnt++];
+            data[1] = itsData[data_cnt++];
+            data[2] = itsData[data_cnt++];
+            
+            // extract 8 values of 12 bit
+            val[val_cnt++] = static_cast<int16>(  data[0] & 0x00000FFF);
+            val[val_cnt++] = static_cast<int16>(( data[0] & 0x00FFF000) >> 12);
+            val[val_cnt++] = static_cast<int16>(((data[0] & 0xFF000000) >> 24) | ((data[1] & 0x0000000F) << 8));
+            val[val_cnt++] = static_cast<int16>(( data[1] & 0x0000FFF0) >> 4 );
+            val[val_cnt++] = static_cast<int16>(( data[1] & 0x0FFF0000) >> 16);
+            val[val_cnt++] = static_cast<int16>(((data[1] & 0xF0000000) >> 28) | ((data[2] & 0x000000FF) << 4));
+            val[val_cnt++] = static_cast<int16>(( data[2] & 0x000FFF00) >> 8);
+            val[val_cnt++] = static_cast<int16>(( data[2] & 0xFFF00000) >> 20);
+            
+            sample_cnt += 8;
+         }
+         
+         // 2e convert all received samples from signed 12bit to signed 16bit
+         for (int cnt = 0; cnt < val_cnt; cnt++) {
+            if (val[cnt] & 0x0800) val[cnt] |= 0xF000;
+         }
+      }
+      
+      // write all data to file
+      FILE* file;
+            
+      if (val_cnt > 0) {
+         // save unpacked frame to file
+         snprintf(filename, PATH_MAX, "%s.dat",basefilename);
+         file = fopen(filename,"a");
+         fwrite(&itsData[0],sizeof(uint32),22,file);     // frame header 88 bytes (4 x 22)
+         fwrite(&val[0],sizeof(int16),val_cnt,file);     // payload
+         fwrite(&itsData[509],sizeof(uint32),1,file); // payload CRC 4 bytes (4 x 1)
+         fclose(file);
+      }
+      
+      itsPage++;
+      if ((itsPage < itsPages) && (itsPage < itsSize)) { 
+            itsCmdStage = 2;
+      }  else {
+         // last page received, print last info on screen
+         cout << "|" << endl;
+         cout << endl;
+         cout << "Total received pages  : " << itsPage;
+         if (itsPage > 1) {
+            cout << " (page " << itsStartPage << " .. " << (itsStartPage + itsPage - 1) << ")" << endl;
+         } else {
+            cout << " (page " << itsStartPage << ")" << endl;
+         }
+         cout << "Total received samples: " << itsTotalSamples << endl;
+
+         if (val_cnt > 0) {
+            cout << "Filename        : " << basefilename << ".nfo" << endl;
+            cout << "                : " << basefilename << ".dat" << endl;
+            cout << endl;
+            cout << "Each frame exists of:" << endl;
+            cout << "  HEADER(88 bytes) + PAYLOAD(see header for size) + PAYLOAD_CRC(4 bytes)" << endl;
+         } else {
+            cout << "Filename        : NO DATA IN FRAME" << endl;
+         }
+         
+         
+         
+         // save page information to file
+         strftime(timestring, 255, "%Y-%m-%d  %H:%M:%S", gmtime(&itsTime));
+
+         snprintf(filename, PATH_MAX, "%s.nfo",basefilename);
+         file = fopen(filename,"w");      
+         
+         fprintf(file,  "Station ID      : %d",itsStationId);
+         fprintf(file,  "RSP ID          : %d",itsRspId);
+         fprintf(file,  "RCU ID          : %d",itsRcuId);
+         fprintf(file,  "Sample freq     : %d MHz",itsSampleFreq);
+         if (itsTime < 0) {
+            fprintf(file,"Time            : invalid");
+         } else {
+            fprintf(file,"Time of 1e sample/slice  : %s (%u)",timestring,(uint32)itsTime);
+         }
+         if (itsFreqBands > 0) {
+            fprintf(file,"Slice number of 1e slice : %d",itsSliceNr);
+            fprintf(file,"Band number of 1e sample : %d",itsBandNr);
+            fprintf(file,"Number of bands          : %d",itsFreqBands);
+            fprintf(file,"Data file format         : binary complex(int16 Re, int16 Im)");
+         }  else {
+            fprintf(file,"Sample number of 1e sample : %u",itsSampleNr);
+            fprintf(file,"Total number of samples    : %u",itsTotalSamples);
+            fprintf(file,"Data file format           : binary  int16");
+            fprintf(file," ");
+         }
+         fclose(file);
+      }
+   }
+
+   if (itsPage == itsPages) {
+      setCmdDone(true);
+   }
+
+   return(GCFEvent::HANDLED);
 }
 
 //====END OF TBB COMMANDS========================================================================== 
@@ -2187,95 +2186,95 @@ GCFEvent::TResult ReadPageCmd::ack(GCFEvent& e)
 //---- HELP --------------------------------------------------------------------
 void TBBCtl::commandHelp(int level)
 {
-	cout << endl;
-	cout << endl;
-	cout << "> > > > tbbctl COMMAND USAGE > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >" << endl;
-	cout << endl;
-	cout << " #  --command                : all boards or active rcu's are selected, and will be displayed" << endl;
-	cout << " #  --command --select=<set> : only information for all selected boards or rcu's is displayed"  << endl;
-	cout << " #    Example: --select=0,1,4  or  --select=0:6  or  --select=0,1,2,8:11" << endl;
-	cout << endl;
-	cout << "______| CHANNEL |_________________________________________________________________________________________________________" << endl;
-	cout << " tbbctl --rcuinfo [--select=<set>]                                  # list rcu info, only allocated rcu's are listed" << endl;
-	cout << " tbbctl --alloc [--select=<set>]                                    # allocate memmory locations for selected rcu's" << endl;
-	cout << " tbbctl --free [--select=<set>]                                     # free memmory locations for selected rcu's" << endl;
-	cout << " tbbctl --record [--select=<set>]                                   # start recording on selected rcu's" << endl;
-	cout << " tbbctl --stop [--select=<set>]                                     # stop recording on selected rcu's" << endl;
-	cout << " tbbctl --mode=[transient | subbands]                               # set mode to configure UDP/IP header for CEP tranport" << endl;
-	cout << "        # before using: --read, --arp or --arpmode," << endl;   
-	cout << "        # first use --mode to setup UDP/IP header" << endl;
-	cout << " tbbctl --read=rcunr,secondstime,sampletime,prepages,postpages      # transfer recorded data from rcunr to CEP, " << endl;
-	cout << " tbbctl --stopcep [--select=<set>]                                  # stop sending CEP messages" << endl; 
-	cout << " tbbctl --arp [--select=<set>]                                      # send 1 arp message" << endl; 
-	cout << " tbbctl --arpmode=mode [--select=<set>]                             # set arp mode, 0=manual, 1=auto" << endl; 
-	cout << endl;
-	cout << "______| TRIGGER |_________________________________________________________________________________________________________" << endl;
-	cout << " tbbctl --settings [--select=<set>]                                 # list trigger settings for selected rcu's" << endl;
-	cout << " tbbctl --release [--select=<set>]                                  # release trigger system for selected rcu's" << endl;
-	cout << " tbbctl --generate [--select=<set>]                                 # generate a trigger for selected rcu's" << endl;	
-	cout << " tbbctl --setup=level,start,stop,filter,window,mode [--select=<set>]# setup trigger system for selected rcu's, mode = 0/1" << endl;
-	cout << " tbbctl --coef=c0,c1,c2,c3 [--select=<set>]                         # set trigger coeffients for elected rcu's" << endl;
-	cout << " tbbctl --triginfo=rcu                                              # get trigger info for selected rcu" << endl;
-	cout << " tbbctl --listen                                                    # put in listen mode, all triggers will be listed" << endl;
-	cout << endl;
-	cout << "______| INFO |____________________________________________________________________________________________________________" << endl;
-	cout << " tbbctl --version [--select=<set>]                                  # get version information from selected boards" << endl;
-	cout << " tbbctl --status [--select=<set>]                                   # get status information from selected boards" << endl;	
-	cout << " tbbctl --size [--select=<set>]                                     # get installed memory size from selected boards" << endl;
-	cout << endl;
-	cout << "______| DDR |_____________________________________________________________________________________________________________" << endl;
-	cout << " tbbctl --readpage=rcunr,startpage,npages                           # ddr read npages from rcunr, starting on startpage" << endl;
-	if (level == 3) {
-		cout << " tbbctl --testddr=board                                             # ddr memory test, adress and data lines" << endl;
-		cout << " tbbctl --readddr=board,mp,addr,size                                # ddr read, (size x 2) words starting on addr" << endl;
-		cout << " tbbctl --writeddr=board,mp,addr,wordL,wordH                        # ddr write, 2 words to starting on addr" << endl;
-		cout << endl;
-		cout << "______| MP-REGISTER |_____________________________________________________________________________________________________" << endl;
-		cout << " tbbctl --readreg=board,mp,pid,regid                                # register read" << endl;
-		cout << " tbbctl --writereg=board,mp,pid,regid,data(hex input)               # register write" << endl;
-		cout << endl;
-		cout << "______| FLASH |___________________________________________________________________________________________________________" << endl;
-		cout << " tbbctl --eraseimage=board,image                                    # erase image from flash" << endl;
-		cout << " tbbctl --readimage=board,image                                     # read image from flash to file" << endl;
-		cout << " tbbctl --writeimage=boardnr,imagenr,version,tpfilename,mpfilename  # write tp and mp file to imagenr on boardnr" << endl;
-		cout << "                                                                    # version is the sw version of the image stored" << endl;
-	} 
-	if (level == 1) {
-		cout << endl;
-		cout << "______| FLASH |___________________________________________________________________________________________________________" << endl;
-	}
-	cout << " tbbctl --imageinfo=board                                           # read info from all images on board" << endl;
-	cout << " tbbctl --config=imagenr [--select=<set>]                           # reconfigure TP and MP's with imagenr [0..31] on " << endl;
-	cout << "                                                                    # selected boards" << endl;
-	cout << "__________________________________________________________________________________________________________________________" << endl;
-	cout << " tbbctl --templimits=high,low [--select=<set>]                      # set temp limts for fan control" << endl; 
-	cout << " tbbctl --clear [--select=<set>]                                    # clear selected board" << endl;
-	cout << " tbbctl --reset [--select=<set>]                                    # reset to factory images on selected boards" << endl;
-	cout << endl;
-	cout << " tbbctl --help                                                      # this help screen" << endl;
-	cout << "< < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < " << endl;
-	cout << endl;
+   cout << endl;
+   cout << endl;
+   cout << "> > > > tbbctl COMMAND USAGE > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >" << endl;
+   cout << endl;
+   cout << " #  --command                : all boards or active rcu's are selected, and will be displayed" << endl;
+   cout << " #  --command --select=<set> : only information for all selected boards or rcu's is displayed"  << endl;
+   cout << " #    Example: --select=0,1,4  or  --select=0:6  or  --select=0,1,2,8:11" << endl;
+   cout << endl;
+   cout << "______| CHANNEL |_________________________________________________________________________________________________________" << endl;
+   cout << " tbbctl --rcuinfo [--select=<set>]                                  # list rcu info, only allocated rcu's are listed" << endl;
+   cout << " tbbctl --alloc [--select=<set>]                                    # allocate memmory locations for selected rcu's" << endl;
+   cout << " tbbctl --free [--select=<set>]                                     # free memmory locations for selected rcu's" << endl;
+   cout << " tbbctl --record [--select=<set>]                                   # start recording on selected rcu's" << endl;
+   cout << " tbbctl --stop [--select=<set>]                                     # stop recording on selected rcu's" << endl;
+   cout << " tbbctl --mode=[transient | subbands]                               # set mode to configure UDP/IP header for CEP tranport" << endl;
+   cout << "        # before using: --read, --arp or --arpmode," << endl;   
+   cout << "        # first use --mode to setup UDP/IP header" << endl;
+   cout << " tbbctl --read=rcunr,secondstime,sampletime,prepages,postpages      # transfer recorded data from rcunr to CEP, " << endl;
+   cout << " tbbctl --stopcep [--select=<set>]                                  # stop sending CEP messages" << endl; 
+   cout << " tbbctl --arp [--select=<set>]                                      # send 1 arp message" << endl; 
+   cout << " tbbctl --arpmode=mode [--select=<set>]                             # set arp mode, 0=manual, 1=auto" << endl; 
+   cout << endl;
+   cout << "______| TRIGGER |_________________________________________________________________________________________________________" << endl;
+   cout << " tbbctl --settings [--select=<set>]                                 # list trigger settings for selected rcu's" << endl;
+   cout << " tbbctl --release [--select=<set>]                                  # release trigger system for selected rcu's" << endl;
+   cout << " tbbctl --generate [--select=<set>]                                 # generate a trigger for selected rcu's" << endl;   
+   cout << " tbbctl --setup=level,start,stop,filter,window,mode [--select=<set>]# setup trigger system for selected rcu's, mode = 0/1" << endl;
+   cout << " tbbctl --coef=c0,c1,c2,c3 [--select=<set>]                         # set trigger coeffients for elected rcu's" << endl;
+   cout << " tbbctl --triginfo=rcu                                              # get trigger info for selected rcu" << endl;
+   cout << " tbbctl --listen                                                    # put in listen mode, all triggers will be listed" << endl;
+   cout << endl;
+   cout << "______| INFO |____________________________________________________________________________________________________________" << endl;
+   cout << " tbbctl --version [--select=<set>]                                  # get version information from selected boards" << endl;
+   cout << " tbbctl --status [--select=<set>]                                   # get status information from selected boards" << endl;   
+   cout << " tbbctl --size [--select=<set>]                                     # get installed memory size from selected boards" << endl;
+   cout << endl;
+   cout << "______| DDR |_____________________________________________________________________________________________________________" << endl;
+   cout << " tbbctl --readpage=rcunr,startpage,npages                           # ddr read npages from rcunr, starting on startpage" << endl;
+   if (level == 3) {
+      cout << " tbbctl --testddr=board                                             # ddr memory test, adress and data lines" << endl;
+      cout << " tbbctl --readddr=board,mp,addr,size                                # ddr read, (size x 2) words starting on addr" << endl;
+      cout << " tbbctl --writeddr=board,mp,addr,wordL,wordH                        # ddr write, 2 words to starting on addr" << endl;
+      cout << endl;
+      cout << "______| MP-REGISTER |_____________________________________________________________________________________________________" << endl;
+      cout << " tbbctl --readreg=board,mp,pid,regid                                # register read" << endl;
+      cout << " tbbctl --writereg=board,mp,pid,regid,data(hex input)               # register write" << endl;
+      cout << endl;
+      cout << "______| FLASH |___________________________________________________________________________________________________________" << endl;
+      cout << " tbbctl --eraseimage=board,image                                    # erase image from flash" << endl;
+      cout << " tbbctl --readimage=board,image                                     # read image from flash to file" << endl;
+      cout << " tbbctl --writeimage=boardnr,imagenr,version,tpfilename,mpfilename  # write tp and mp file to imagenr on boardnr" << endl;
+      cout << "                                                                    # version is the sw version of the image stored" << endl;
+   } 
+   if (level == 1) {
+      cout << endl;
+      cout << "______| FLASH |___________________________________________________________________________________________________________" << endl;
+   }
+   cout << " tbbctl --imageinfo=board                                           # read info from all images on board" << endl;
+   cout << " tbbctl --config=imagenr [--select=<set>]                           # reconfigure TP and MP's with imagenr [0..31] on " << endl;
+   cout << "                                                                    # selected boards" << endl;
+   cout << "__________________________________________________________________________________________________________________________" << endl;
+   cout << " tbbctl --templimits=high,low [--select=<set>]                      # set temp limts for fan control" << endl; 
+   cout << " tbbctl --clear [--select=<set>]                                    # clear selected board" << endl;
+   cout << " tbbctl --reset [--select=<set>]                                    # reset to factory images on selected boards" << endl;
+   cout << endl;
+   cout << " tbbctl --help                                                      # this help screen" << endl;
+   cout << "< < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < " << endl;
+   cout << endl;
 }
 //-----------------------------------------------------------------------------
 
 //====END OF COMMANDS==========================================================================
 //-----------------------------------------------------------------------------
 TBBCtl::TBBCtl(string name, int argc, char** argv): GCFTask((State)&TBBCtl::initial, name),
-	itsCommand(0),itsActiveBoards(0),itsMaxBoards(0),itsMaxChannels(0),itsArgc(argc),itsArgv(argv)
+   itsCommand(0),itsActiveBoards(0),itsMaxBoards(0),itsMaxChannels(0),itsArgc(argc),itsArgv(argv)
 {
-	for(int boardnr = 0; boardnr < MAX_N_TBBBOARDS; boardnr++) {
-		itsMemory[boardnr] = 0;
-	}
+   for(int boardnr = 0; boardnr < MAX_N_TBBOARDS; boardnr++) {
+      itsMemory[boardnr] = 0;
+   }
   registerProtocol (TBB_PROTOCOL,      TBB_PROTOCOL_STRINGS);
-	itsServerPort.init(*this, MAC_SVCMASK_TBBDRIVER, GCFPortInterface::SAP, TBB_PROTOCOL);
-	itsCmdTimer = new GCFTimerPort(*this, "AliveTimer");
+   itsServerPort.init(*this, MAC_SVCMASK_TBBDRIVER, GCFPortInterface::SAP, TBB_PROTOCOL);
+   itsCmdTimer = new GCFTimerPort(*this, "AliveTimer");
 }
 
 //-----------------------------------------------------------------------------
 TBBCtl::~TBBCtl()
 {
-	if (itsCommand)		{ delete itsCommand; }
-  if (itsCmdTimer)	{ delete itsCmdTimer; }
+   if (itsCommand)      { delete itsCommand; }
+  if (itsCmdTimer)   { delete itsCmdTimer; }
 }
 
 //-----------------------------------------------------------------------------
@@ -2285,12 +2284,12 @@ GCFEvent::TResult TBBCtl::initial(GCFEvent& e, GCFPortInterface& port)
 
   switch (e.signal) {
     case F_INIT: {
-  	} break;
+   } break;
 
     case F_ENTRY: {
-    	if (!itsServerPort.isConnected()) {
-      	itsServerPort.open();
-      	itsServerPort.setTimer(DELAY);
+      if (!itsServerPort.isConnected()) {
+         itsServerPort.open();
+         itsServerPort.setTimer(DELAY);
       }
     } break;
 
@@ -2302,33 +2301,34 @@ GCFEvent::TResult TBBCtl::initial(GCFEvent& e, GCFPortInterface& port)
        }
     } break;
 
-		case TBB_DRIVER_BUSY_ACK: {
-    	cout << endl << "=x=x=   DRIVER BUSY, try again   =x=x=" << endl << flush;
-    	GCFTask::stop();    
+      case TBB_DRIVER_BUSY_ACK: {
+      cout << endl << "=x=x=   DRIVER BUSY, try again   =x=x=" << endl << flush;
+      GCFTask::stop();    
     }
 
     case TBB_GET_CONFIG_ACK: {
       TBBGetConfigAckEvent ack(e);
-      itsMaxBoards		= ack.max_boards;
-      itsActiveBoards	= ack.active_boards_mask;
-			itsMaxChannels = itsMaxBoards * 16;
+      itsMaxBoards      = ack.max_boards;
+      itsActiveBoards   = ack.active_boards_mask;
+      itsMaxChannels = itsMaxBoards * 16;
+      
       //cout << endl;
       //cout << formatString("Max nr of TBB boards = %d",itsMaxBoards) << endl;
-			//cout << formatString("Max nr of Channels   = %d",itsMaxChannels)//cout << endl;;
-			//cout << endl;
-			//cout << formatString("Active boards mask   = 0x%03X",itsActiveBoards)//cout << endl;;
-			
-			// send subscribe 
+         //cout << formatString("Max nr of Channels   = %d",itsMaxChannels)//cout << endl;;
+         //cout << endl;
+         //cout << formatString("Active boards mask   = 0x%03X",itsActiveBoards)//cout << endl;;
+         
+         // send subscribe 
       TBBSubscribeEvent subscribe;
-			subscribe.triggers = false;
-			subscribe.hardware = true;
+         subscribe.triggers = false;
+         subscribe.hardware = true;
       itsServerPort.send(subscribe);
     } break;
-		
-		case TBB_SUBSCRIBE_ACK: {
-			TRAN(TBBCtl::docommand);
-		} break;
-		
+      
+      case TBB_SUBSCRIBE_ACK: {
+         TRAN(TBBCtl::docommand);
+      } break;
+      
     case F_DISCONNECTED: {
       //port.setTimer(DELAY);
       port.close();
@@ -2338,7 +2338,7 @@ GCFEvent::TResult TBBCtl::initial(GCFEvent& e, GCFPortInterface& port)
       // try again
       cout << "   =x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=" << endl;
       cout << "   =x=         TBBDriver is NOT responding           =x=" << endl;
-		cout << "   =x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=" << endl;
+      cout << "   =x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=" << endl;
       //itsServerPort.open();
       exit(EXIT_FAILURE);
     } break;
@@ -2359,10 +2359,10 @@ GCFEvent::TResult TBBCtl::docommand(GCFEvent& e, GCFPortInterface& port)
 
   switch (e.signal) {
     case F_INIT: {
-  	} break;
-  	
+   } break;
+   
     case F_ENTRY: {
-	  	// reparse options
+      // reparse options
       itsCommand = parse_options(itsArgc, itsArgv);
       if (itsCommand == 0) {
         cout << "Warning: no command specified." << endl;
@@ -2379,35 +2379,35 @@ GCFEvent::TResult TBBCtl::docommand(GCFEvent& e, GCFPortInterface& port)
       cout << formatString("Error: port '%s' disconnected.",port.getName().c_str()) << endl;
       exit(EXIT_FAILURE);
     } break;
-		
-		case F_TIMER: {
-			if (&port == itsCmdTimer) {
-				itsCommand->send();
-			} else {
-				cout << "Timeout, tbbctl stopped" << endl;
-				cout << endl;
-				TBBUnsubscribeEvent unsubscribe;
-      	itsServerPort.send(unsubscribe);
-    		GCFTask::stop();
-    	}
-		} break;
+      
+      case F_TIMER: {
+         if (&port == itsCmdTimer) {
+            itsCommand->send();
+         } else {
+            cout << "Timeout, tbbctl stopped" << endl;
+            cout << endl;
+            TBBUnsubscribeEvent unsubscribe;
+         itsServerPort.send(unsubscribe);
+         GCFTask::stop();
+      }
+      } break;
     
     case TBB_BOARDCHANGE: {
     } break;
     
     case TBB_DRIVER_BUSY_ACK: {
-    	cout << "DRIVER BUSY, try again" << endl << flush;
-    	GCFTask::stop();    
+      cout << "DRIVER BUSY, try again" << endl << flush;
+      GCFTask::stop();    
     }
-    		
+         
     case TBB_ALLOC_ACK:
     case TBB_RCU_INFO_ACK:
     case TBB_FREE_ACK:
     case TBB_RECORD_ACK:
     case TBB_STOP_ACK:
-    case TBB_TRIG_SETTINGS_ACK:	
+    case TBB_TRIG_SETTINGS_ACK:  
     case TBB_TRIG_RELEASE_ACK:
-    case TBB_TRIG_SETUP_ACK:	
+    case TBB_TRIG_SETUP_ACK:  
     case TBB_TRIG_COEF_ACK:
     case TBB_TRIG_GENERATE_ACK:
     case TBB_TRIG_INFO_ACK:
@@ -2431,15 +2431,15 @@ GCFEvent::TResult TBBCtl::docommand(GCFEvent& e, GCFPortInterface& port)
     case TBB_READX_ACK:
     case TBB_SUBSCRIBE_ACK:
     case TBB_ARP_ACK:
-		case TBB_ARP_MODE_ACK:
-		case TBB_STOP_CEP_ACK:
-		case TBB_TEMP_LIMIT_ACK: {	
-    	itsServerPort.cancelAllTimers();
-    	status = itsCommand->ack(e); // handle the acknowledgement
-    	if (!itsCommand->isCmdDone() && itsCommand->isCmdSendNext()) {
-    		// not done send next command
-    		itsCmdTimer->setTimer((long)0);
-    	}
+      case TBB_ARP_MODE_ACK:
+      case TBB_STOP_CEP_ACK:
+      case TBB_TEMP_LIMIT_ACK: { 
+      itsServerPort.cancelAllTimers();
+      status = itsCommand->ack(e); // handle the acknowledgement
+      if (!itsCommand->isCmdDone() && itsCommand->isCmdSendNext()) {
+         // not done send next command
+         itsCmdTimer->setTimer(0.0);
+      }
     } break;
 
     default: {
@@ -2450,772 +2450,772 @@ GCFEvent::TResult TBBCtl::docommand(GCFEvent& e, GCFPortInterface& port)
       GCFTask::stop();
     } break;
   }
-	
-	if (itsCommand->isCmdDone()) {
-  	//TBBUnsubscribeEvent unsubscribe;
+   
+   if (itsCommand->isCmdDone()) {
+   //TBBUnsubscribeEvent unsubscribe;
     //itsServerPort.send(unsubscribe);
     cout << flush;
     GCFTask::stop();
   }
-	 	 
+       
   return(status);
 }
 
 //-----------------------------------------------------------------------------
 Command* TBBCtl::parse_options(int argc, char** argv)
 {
-  Command*	command = 0;
+  Command*  command = 0;
   std::list<int> select;
   
   optind = 0; // reset option parsing
   //opterr = 0; // no error reporting to stderr
   
   while(1) {
-  	static struct option long_options[] = {
-			{ "select",			required_argument,	0,	'l' }, 
-			{ "alloc",			no_argument,				0,	'a' }, 
-			{ "rcuinfo",		no_argument,				0,	'i' }, 
-			{ "free",				no_argument,				0,	'f' }, 
-		  { "record",			no_argument,				0,	'r' }, 
-		  { "stop",				no_argument,				0,	's' },
-		  { "settings",		no_argument,				0,	'b' }, 
-		  { "release",		no_argument,				0,	'e' }, 
-		  { "generate",		no_argument,				0,	'g' }, 
-		  { "setup",			required_argument,	0,	't' }, 
-		  { "coef",				required_argument,	0,	'c' }, 
-		  { "triginfo",		required_argument,	0,	'I' }, 
-		  { "listen",     optional_argument,	0,	'L' }, 
-			{ "read",				required_argument,	0,	'R' }, 
-			{ "mode",				required_argument,	0,	'm' }, 
-			{ "version",		no_argument,				0,	'v' }, 
-			{ "size",				no_argument,				0,	'z' }, 
-			{ "status",			no_argument,				0,	'A' }, 
-			{ "readpage",		required_argument,	0,	'p' }, 
-      { "arp",			  no_argument,				0,	'D' },
-      { "arpmode",		required_argument,	0,	'E' },
-      { "stopcep",		no_argument,				0,	'F' },
-      { "templimits",	required_argument,	0,	'G' },
-			{ "clear",			no_argument,				0,	'C' }, 
-			{ "reset",			no_argument,				0,	'Z' }, 
-			{ "config",			required_argument,	0,	'S' }, 
-		  { "eraseimage",	required_argument,	0,	'1' }, 
-		  { "readimage",	required_argument,	0,	'2' }, 
-		  { "writeimage",	required_argument,	0,	'3' }, 
-			{ "imageinfo",	required_argument,	0,	'8' }, 
-		  { "readddr",		required_argument,	0,	'4' }, 
-		  { "writeddr",		required_argument,	0,	'5' }, 
-		  { "testddr",		required_argument,	0,	'9' }, 
-		  { "readreg",		required_argument,	0,	'6' }, 
-		  { "writereg",		required_argument,	0,	'7' }, 
-			{ "help",				no_argument,				0,	'h' }, 
-			{ "expert",			no_argument,				0,	'X' },
-		  { 0, 					  0, 									0,	0 },
-		};
+   static struct option long_options[] = {
+         { "select",       required_argument,   0, 'l' }, 
+         { "alloc",        no_argument,            0, 'a' }, 
+         { "rcuinfo",      no_argument,            0, 'i' }, 
+         { "free",            no_argument,            0, 'f' }, 
+        { "record",        no_argument,            0, 'r' }, 
+        { "stop",          no_argument,            0, 's' },
+        { "settings",      no_argument,            0, 'b' }, 
+        { "release",    no_argument,            0, 'e' }, 
+        { "generate",      no_argument,            0, 'g' }, 
+        { "setup",         required_argument,   0, 't' }, 
+        { "coef",          required_argument,   0, 'c' }, 
+        { "triginfo",      required_argument,   0, 'I' }, 
+        { "listen",     optional_argument,   0, 'L' }, 
+         { "read",            required_argument,   0, 'R' }, 
+         { "mode",            required_argument,   0, 'm' }, 
+         { "version",      no_argument,            0, 'v' }, 
+         { "size",            no_argument,            0, 'z' }, 
+         { "status",       no_argument,            0, 'A' }, 
+         { "readpage",     required_argument,   0, 'p' }, 
+      { "arp",         no_argument,          0, 'D' },
+      { "arpmode",      required_argument,   0, 'E' },
+      { "stopcep",      no_argument,            0, 'F' },
+      { "templimits",   required_argument,   0, 'G' },
+         { "clear",        no_argument,            0, 'C' }, 
+         { "reset",        no_argument,            0, 'Z' }, 
+         { "config",       required_argument,   0, 'S' }, 
+        { "eraseimage", required_argument,   0, '1' }, 
+        { "readimage",  required_argument,   0, '2' }, 
+        { "writeimage", required_argument,   0, '3' }, 
+         { "imageinfo", required_argument,   0, '8' }, 
+        { "readddr",    required_argument,   0, '4' }, 
+        { "writeddr",      required_argument,   0, '5' }, 
+        { "testddr",    required_argument,   0, '9' }, 
+        { "readreg",    required_argument,   0, '6' }, 
+        { "writereg",      required_argument,   0, '7' }, 
+         { "help",            no_argument,            0, 'h' }, 
+         { "expert",       no_argument,            0, 'X' },
+        { 0,                 0,                          0, 0 },
+      };
 
     int option_index = 0;
     int c = getopt_long(argc, argv,
-												"l:afrsbegt:c:I:L::R:m:vzAp:DE:FG:CZS:1:2:3:8:4:5:9:6:7:hX",
-				long_options, &option_index);
-		
+                                    "l:afrsbegt:c:I:L::R:m:vzAp:DE:FG:CZS:1:2:3:8:4:5:9:6:7:hX",
+            long_options, &option_index);
+      
     if (c == -1) {
-			break;
-		}
-
-		switch (c) {
-			
-			case 'l': { 	// --select
-	  		if (!command->isSelectionDone()) {
-  	  		if (optarg) {
-  	      	if (!command) {
-  		  			cout << "Error: 'command' argument should come before --select argument" << endl;
-  		  			exit(EXIT_FAILURE);
-  					}
-  					select = strtolist(optarg, command->getMaxSelections());
-  											
-  	      	if (select.empty()) {
-  		  			cout << "Error: invalid or missing '--select' option" << endl;
-  		  			exit(EXIT_FAILURE);
-  					}	else {
-  						command->setSelected(true);
-  					}
-  	    	}	else {
-  	      	cout << "Error: option '--select' requires an argument" << endl;
-  	      	exit(EXIT_FAILURE);
-  	      }
-				} else {
-	      	cout << "Error: channels already selected" << endl;
-				}
-	    } break;
-	    
-	    case 'a': { 	// --alloc
-				if (command) delete command;
-				AllocCmd* alloccmd = new AllocCmd(itsServerPort);
-				command = alloccmd;
-				command->setCmdType(RCUCMD);
-			}	break;
-			
-			case 'i': { 	// --channelinfo
-				if (command) delete command;
-				ChannelInfoCmd* channelinfocmd = new ChannelInfoCmd(itsServerPort);
-				command = channelinfocmd;
-				command->setCmdType(RCUCMD);
-			}	break;
-			
-			case 'f': { 	// --free
-				if (command) delete command;
-				FreeCmd* freecmd = new FreeCmd(itsServerPort);
-				command = freecmd;
-				command->setCmdType(RCUCMD);
-			}	break;
-			
-			case 'r': { 	// --record
-				if (command) delete command;
-				RecordCmd* recordcmd = new RecordCmd(itsServerPort);
-				command = recordcmd;
-				command->setCmdType(RCUCMD);
-			}	break;
-			
-			case 's': { 	// --stop
-				if (command) delete command;
-				StopCmd* stopcmd = new StopCmd(itsServerPort);
-				command = stopcmd;
-				command->setCmdType(RCUCMD);
-			}	break;
-			
-			case 'b': {
-				if (command) delete command;
-				TriggerSettingsCmd* trigsettingscmd = new TriggerSettingsCmd(itsServerPort);
-				command = trigsettingscmd;
-				command->setCmdType(RCUCMD);	
-			} break;
-			
-			case 'e': { 	// --trigrelease
-				if (command) delete command;
-				TrigReleaseCmd* trigreleasecmd = new TrigReleaseCmd(itsServerPort);
-				command = trigreleasecmd;
-				if (optarg) {
-					int rcu = 0;
-					int numitems = sscanf(optarg, "%d",&rcu);
-					if (numitems == 0 || numitems == EOF || rcu < 0 || rcu >= MAX_N_RCUS) {
-						cout << "Error: invalid number of arguments. Should be of the format " << endl;
-						cout << "       '--trigclr=rcu' " << endl;  
-						exit(EXIT_FAILURE);
-					}
-					select.clear();
-		  		select.push_back(rcu);
-					command->setSelected(true);
-				}
-				
-				command->setCmdType(RCUCMD);
-			}	break;
-			
-			case 'g': { 	// --triggenerate
-				if (command) delete command;
-				TrigGenerateCmd* triggeneratecmd = new TrigGenerateCmd(itsServerPort);
-				command = triggeneratecmd;
-				command->setCmdType(RCUCMD);
-			}	break;
-			
-			case 't': { 	// --trigsetup
-				if (command) delete command;
-				TrigSetupCmd* trigsetupcmd = new TrigSetupCmd(itsServerPort);
-				command = trigsetupcmd;
-				
-				if (optarg) {
-					uint32 level = 0;
-					uint32 start = 0;
-					uint32 stop = 0;
-					uint32 filter = 0;
-					uint32 window = 0;
-					uint32 triggermode = 0;
-					
-					int numitems = sscanf(optarg, "%u,%u,%u,%u,%u,%u",&level, &start, &stop, &filter, &window, &triggermode);
-					// check if valid arguments
-					if (	numitems < 6 || numitems == EOF 
-							|| level < 1 || level > 255 
-							|| start < 1 || start > 15 
-							|| stop < 1 || stop > 15 
-							|| window > 6
-							|| triggermode > 1)
-					{
-						cout << "Error: invalid number of arguments. Should be of the format " << endl;
-						cout << "       '--trigsetup=level, start, stop, filter, window, mode' (use decimal values)" << endl;  
-						cout << "       level=1..255,  start=1..15,  stop=1..15,  filter=0(on) or 1(off)" << endl;
-						cout << "       window=0..6, mode=0(single shot) or 1(continues, don't use this mode)" << endl;
-						exit(EXIT_FAILURE);
-					}
-					
-					//================================================
-					// set triggermode to single shot, continues mode
-					// will give more than 6000 triggers per second per
-					// board, if level is chosen to low, the driver can't
-					// handle that amount of trigger per board.
-					if (triggermode == 1) {
-						cout << "mode=1 can generate to many triggers, auto corrected to mode=0(single-shot)" << endl;
-					}	
-					triggermode = 0;
-					//================================================
-					
-										
-					trigsetupcmd->setLevel(static_cast<uint16>(level));
-					trigsetupcmd->setStartMode(static_cast<uint8>(start));
-					trigsetupcmd->setStopMode(static_cast<uint8>(stop));
-					trigsetupcmd->setFilter(static_cast<uint8>(filter));
-					trigsetupcmd->setWindow(static_cast<uint8>(window));
-					trigsetupcmd->setOperatingMode(0);
-					trigsetupcmd->setTriggerMode(static_cast<uint16>(triggermode));
-				}
-							
-				command->setCmdType(RCUCMD);
-			}	break;
-			
-			case 'c': { 	// --trigcoef
-				if (command) delete command;
-				TrigCoefficientCmd* trigcoefficientcmd = new TrigCoefficientCmd(itsServerPort);
-				command = trigcoefficientcmd;
-				if (optarg) {
-					uint32 c0 = 0;
-					uint32 c1 = 0;
-					uint32 c2 = 0;
-					uint32 c3 = 0;
-					int numitems = sscanf(optarg, "%u,%u,%u,%u",&c0, &c1, &c2, &c3);
-					if (numitems < 4 || numitems == EOF) {
-						cout << "Error: invalid number of arguments. Should be of the format " << endl;
-						cout << "       '--trigcoef=c0, c1, c2, c3'   (use decimal values)" << endl;
-						cout << "       co, c1, c2, c3=16bit value"<< endl; 
-						exit(EXIT_FAILURE);
-					}
-					trigcoefficientcmd->setC0(static_cast<uint16>(c0));
-					trigcoefficientcmd->setC1(static_cast<uint16>(c1));
-					trigcoefficientcmd->setC2(static_cast<uint16>(c2));
-					trigcoefficientcmd->setC3(static_cast<uint16>(c3));
-				}
-				command->setCmdType(RCUCMD);
-			}	break;
-			
-			case 'I': { 	// --triginfo
-				if (command) delete command;
-				TrigInfoCmd* triginfocmd = new TrigInfoCmd(itsServerPort);
-				command = triginfocmd;
-				if (optarg) {
-					int rcu = 0;
-					int numitems = sscanf(optarg, "%d",&rcu);
-					if (numitems < 1 || numitems == EOF) {
-						cout << "Error: invalid number of arguments. Should be of the format " << endl;
-						cout << "       '--triginfo=rcu' " << endl; 
-						cout << "       rcu=0.." << (MAX_N_RCUS - 1) << endl;  
-						exit(EXIT_FAILURE);
-					}
-					select.clear();
-		  		select.push_back(rcu);
-					command->setSelected(true);
-				}
-				command->setCmdType(RCUCMD);
-			}	break;
-			
-			case 'L': { 	// --listen
-				if (command) delete command;
-				ListenCmd* listencmd = new ListenCmd(itsServerPort);
-				command = listencmd;
-				char listen_mode[64];
-				if (optarg) {
-					strcpy(listen_mode,"one_shot");
-					sscanf(optarg, "%s", listen_mode);
-					if ((strcmp(listen_mode,"one_shot") != 0 && strcmp(listen_mode,"continues") != 0)) {
-						cout << "Error: invalid argument. Should be of the format " << endl;
-						cout << "       '--listen=[one_shot | continues]'" << endl;
-						exit(EXIT_FAILURE);
-					}
-				}
-				if (strcmp(listen_mode,"one_shot") == 0) {
-					listencmd->setListenMode(TBB_LISTEN_ONE_SHOT);
-				}
-				if (strcmp(listen_mode,"continues") == 0) {
-					listencmd->setListenMode(TBB_LISTEN_CONTINUES);
-				}
-				command->setCmdType(RCUCMD);
-			}	break;
-			
-			case 'R': { 	// --read
-				if (command) delete command;
-				ReadCmd* readcmd = new ReadCmd(itsServerPort);
-				command = readcmd;
-				
-				if (optarg) {
-					int rcu = 0;
-					uint32 secondstime = 0;
-					uint32 sampletime = 0;
-					uint32 prepages = 0;
-					uint32 postpages = 0;
-					int numitems = sscanf(optarg, "%d,%u,%u,%u,%u",
-						&rcu, &secondstime, &sampletime, &prepages, &postpages);
-					if (numitems < 5 || numitems == EOF || rcu < 0 || rcu >= MAX_N_RCUS) {
-						cout << "Error: invalid number of arguments. Should be of the format " << endl;
-						cout << "       '--read=rcu,secondstime,sampletime,prepages,postpages' " << endl;
-						cout << "       rcu=0.." << (MAX_N_RCUS - 1) << ",  time = secondstime + (sampletime * sample-interval) "<< endl;  
-						exit(EXIT_FAILURE);
-					}
-					readcmd->setSecondsTime(secondstime);
-					readcmd->setSampleTime(sampletime);
-					readcmd->setPrePages(prepages);
-					readcmd->setPostPages(postpages);
-					
-					select.clear();
-		  		select.push_back(rcu);
-					command->setSelected(true);
-				} 
-				command->setCmdType(RCUCMD);
-			}	break;
-			
-			case 'm': { 	// --mode
-				if (command) delete command;
-				ModeCmd* modecmd = new ModeCmd(itsServerPort);
-				command = modecmd;
-				if (optarg) {
-					char rec_mode[64];
-					int numitems = sscanf(optarg, "%s",
-						rec_mode);
-					if (numitems < 1 || numitems == EOF ||(strcmp(rec_mode,"transient") != 0 && strcmp(rec_mode,"subbands") != 0)) {
-						cout << "Error: invalid number of arguments. Should be of the format " << endl;
-						cout << "       '--udp=rec_mode'" << endl;
-						cout << "       rec_mode=transient or subbands" << endl;  
-						exit(EXIT_FAILURE);
-					}
-					
-					if (strcmp(rec_mode,"transient") == 0)
-						modecmd->setRecMode(TBB_MODE_TRANSIENT);
-					if (strcmp(rec_mode,"subbands") == 0)
-						modecmd->setRecMode(TBB_MODE_SUBBANDS);
-				} 
-				command->setCmdType(BOARDCMD);
-			}	break;									
-						
-			case 'v': { 	// --version
-	  		if (command) delete command;
-	    	VersionCmd* versioncmd = new VersionCmd(itsServerPort);
-	  		command = versioncmd;
-				command->setCmdType(BOARDCMD);
-	  	}	break;	
-	  	
-	  	case 'z': { 	// --size
-	  		if (command) delete command;
-	    	SizeCmd* sizecmd = new SizeCmd(itsServerPort);
-	  		command = sizecmd;
-				command->setCmdType(BOARDCMD);
-	  	}	break;
-	  	
-	  	case 'A': { 	// --status
-	  		if (command) delete command;
-	    	StatusCmd* statuscmd = new StatusCmd(itsServerPort);
-	  		command = statuscmd;
-				command->setCmdType(BOARDCMD);
-	  	}	break;
-			
-			case 'C': { 	// --clear
-				if (command) delete command;
-				ClearCmd* clearcmd = new ClearCmd(itsServerPort);
-				command = clearcmd;
-				command->setCmdType(BOARDCMD);
-			}	break;
-			
-			case 'Z': { 	// --reset
-				if (command) delete command;
-				ResetCmd* resetcmd = new ResetCmd(itsServerPort);
-				command = resetcmd;
-				command->setCmdType(BOARDCMD);
-			}	break;
-		
-			case 'D': { 	// --arp
-				if (command) delete command;
-				ArpCmd* arpcmd = new ArpCmd(itsServerPort);
-				command = arpcmd;
-				command->setCmdType(BOARDCMD);
-			}	break;
-			
-			case 'E': { 	// --arpmode
-				if (command) delete command;
-				ArpModeCmd* arpmodecmd = new ArpModeCmd(itsServerPort);
-				command = arpmodecmd;
-				if (optarg) {
-					int32 mode = 0;
-					int numitems = sscanf(optarg, "%d", &mode);
-					if (numitems == 0 || numitems == EOF || mode < 0 || mode > 1) {
-						cout << "Error: invalid mode value. Should be of the format " << endl;
-						cout << "       '--arpmode=mode'" << endl;
-						cout << "       mode=0 or 1" << endl; 
-						exit(EXIT_FAILURE);
-					}
-					arpmodecmd->setMode((uint32)mode);
-				} 
-				command->setCmdType(BOARDCMD);
-			}	break;
-			
-			case 'F': { 	// --stopcep
-				if (command) delete command;
-				StopCepCmd* stopcepcmd = new StopCepCmd(itsServerPort);
-				command = stopcepcmd;
-				command->setCmdType(BOARDCMD);
-			}	break;
-			
-			case 'G': { 	// --templimits
-				if (command) delete command;
-				TempLimitCmd* templimitscmd = new TempLimitCmd(itsServerPort);
-				command = templimitscmd;
-				if (optarg) {
-					int32 high = 0;
-					int32 low = 0;
-					int numitems = sscanf(optarg, "%d,%d", &high, &low);
-					if (numitems == 0 || numitems == EOF) {
-						cout << "Error: invalid number of values. Should be of the format " << endl;
-						cout << "       '--templimits=high,low'" << endl;
-						exit(EXIT_FAILURE);
-					}
-					templimitscmd->setLimitHigh((uint32)high);
-					templimitscmd->setLimitLow((uint32)low);
-				} 
-				command->setCmdType(BOARDCMD);
-			}	break;
-			
-			
-			
-			case 'S': { 	// --config
-				if (command) delete command;
-				ConfigCmd* configcmd = new ConfigCmd(itsServerPort);
-				command = configcmd;
-				
-				if (optarg) {
-					int32 imagenr = 0;
-					int numitems = sscanf(optarg, "%d", &imagenr);
-					if (numitems == 0 || numitems == EOF || imagenr < 0 || imagenr >= FL_N_IMAGES) {
-						cout << "Error: invalid image value. Should be of the format " << endl;
-						cout << "       '--config=imagenr'" << endl;
-						cout << "       imagenr=0..15" << endl; 
-						exit(EXIT_FAILURE);
-					}
-					configcmd->setImage((uint32)imagenr);
-				} 
-				
-				command->setCmdType(BOARDCMD);
-			}	break;
-			
-			case 'p': { 	// --readpage
-				if (command) delete command;
-				ReadPageCmd* readddrcmd = new ReadPageCmd(itsServerPort);
-				command = readddrcmd;
-				
-				if (optarg) {
-					int32 rcu = 0;
-					uint32 startpage = 0;
-					uint32 pages = 0;
-					
-					int numitems = sscanf(optarg, "%d,%u,%u", &rcu,&startpage,&pages);
-					
-					if (numitems < 3 || numitems == EOF || rcu < 0 || rcu >= MAX_N_RCUS) {
-						cout << "Error: invalid readpage value's. Should be of the format " << endl;
-						cout << "       '--readpage=rcu, startpage, pages'" << endl;
-						cout << "       rcu=0.." << (MAX_N_RCUS - 1) << endl; 
-						exit(EXIT_FAILURE);
-					}
-					readddrcmd->setStartPage(startpage);
-					readddrcmd->setPages(pages);
-					select.clear();
-		  		select.push_back(rcu);
-		  		command->setSelected(true);
-				}	
-				command->setCmdType(BOARDCMD);
-			}	break;			
-						
-			case '1': { 	// --erasef
-				if (command) delete command;
-				ErasefCmd* erasefcmd = new ErasefCmd(itsServerPort);
-				command = erasefcmd;
-				if (optarg) {
-					int board = 0;
-					int page = 0;
-					int numitems = sscanf(optarg, "%d,%d", &board, &page);
-					
-					if (numitems < 2 || numitems == EOF || page < 0 || page >= FL_N_IMAGES	|| board < 0 || board >= MAX_N_TBBBOARDS) {
-						cout << "Error: invalid page value. Should be of the format " << endl;
-						cout <<	"       '--eraseimage=board, image'" << endl;
-						cout << "       board=0.." << (MAX_N_TBBBOARDS - 1) << ", image=0..15" << endl; 
-						exit(EXIT_FAILURE);
-					}
-					erasefcmd->setPage(page);
-					select.clear();
-					select.push_back(board);
-					command->setSelected(true);
-				} 
-				command->setCmdType(BOARDCMD);
-			}	break;
-			
-			case '2': { 	// --readf
-				if (command) delete command;
-				ReadfCmd* readfcmd = new ReadfCmd(itsServerPort);
-				command = readfcmd;
-				if (optarg) {
-					int board = 0;
-					int page = 0;
-					int numitems = sscanf(optarg, "%d,%d", &board, &page);
-					
-					if (numitems < 2 || numitems == EOF || page < 0 || page >= FL_N_IMAGES	|| board < 0 || board >= MAX_N_TBBBOARDS) {
-						cout << "Error: invalid image value. Should be of the format " << endl;
-						cout << "       '--readimage=board, image'"<< endl;
-						cout << "       board=0.." << (MAX_N_TBBBOARDS - 1) << ", image=0..31" << endl;  
-						exit(EXIT_FAILURE);
-					}
-					readfcmd->setPage(page);
-					select.clear();
-					select.push_back(board);
-					command->setSelected(true);
-				} 
-				command->setCmdType(BOARDCMD);
-			}	break;
-			
-			case '3': { 	// --writef
-				if (command) delete command;
-				WritefCmd* writefcmd = new WritefCmd(itsServerPort);
-				command = writefcmd;
-				if (optarg) {
-					int board = 0;
-					int page = 0;
-					double version = 0;
-					char filename_tp[64];
-					char filename_mp[64];
-					memset(filename_tp,0,64);
-					memset(filename_mp,0,64);
-					
-					int numitems = sscanf(optarg, "%d,%d,%lf,%63[^,],%63[^,]", &board, &page, &version, filename_tp, filename_mp);
-					if (numitems < 5 || numitems == EOF || page < 0 || page >= FL_N_IMAGES	|| board < 0 || board >= MAX_N_TBBBOARDS) {
-						cout << "Error: invalid values. Should be of the format " << endl;
-						cout << "       '--writeimage=board, image, file-tp, file-mp'"<< endl;
-						cout << "       board=0.." << (MAX_N_TBBBOARDS - 1) << ", image=0..31" << endl;  
-						exit(EXIT_FAILURE);
-					}
-					
-					writefcmd->setPage(page);
-					writefcmd->setVersion(version);
-					writefcmd->setFileNameTp(filename_tp);
-					writefcmd->setFileNameMp(filename_mp);
-
-					select.clear();
-					select.push_back(board);
-					command->setSelected(true);
-				} 
-				command->setCmdType(BOARDCMD);
-			}	break;
-			
-			case '8': { // --imageinfo
-				if (command) delete command;
-				ImageInfoCmd* imageinfocmd = new ImageInfoCmd(itsServerPort);
-				command = imageinfocmd;
-				if (optarg) {
-					int board = 0;
-					int numitems = sscanf(optarg, "%d", &board);
-					if (numitems < 1 || numitems == EOF || board < 0 || board >= MAX_N_TBBBOARDS) {
-						cout << "Error: invalid values. Should be of the format " << endl;
-						cout <<	"       '--imageinfo=board'"<< endl;
-						cout << "       board=0.." << (MAX_N_TBBBOARDS - 1) << endl;   
-						exit(EXIT_FAILURE);
-					}
-					select.clear();
-					select.push_back(board);
-					command->setSelected(true);
-				} 
-				command->setCmdType(BOARDCMD);
-			} break;
-			
-			case '4': { 	// --readw
-				if (command) delete command;
-				ReadwCmd* readwcmd = new ReadwCmd(itsServerPort);
-				command = readwcmd;
-				
-				if (optarg) {
-					int board = 0;
-					uint32 mp = 0;
-					uint32 startaddr = 0;
-					uint32 size = 0;
-					
-					int numitems = sscanf(optarg, "%d,%x,%x,%x", &board,&mp,&startaddr, &size);
-					
-					if (numitems < 3 || numitems == EOF || board < 0 || board >= MAX_N_TBBBOARDS || mp > 3) {
-						cout << "Error: invalid read ddr value. Should be of the format " << endl;
-						cout <<	"       '--readw=board, mp, addr'" << endl;
-						cout << "       board=0.." << (MAX_N_TBBBOARDS - 1) << ",  mp=0..3,  addr=0x.." << endl;  
-						exit(EXIT_FAILURE);
-					}
-					readwcmd->setMp(mp);
-					readwcmd->setStartAddr(startaddr);
-					readwcmd->setStopAddr(startaddr+size);
-					select.clear();
-		  		select.push_back(board);
-		  		command->setSelected(true);
-				} 
-				command->setCmdType(BOARDCMD);
-			}	break;
-			
-			case '5': { 	// --writew
-				if (command) delete command;
-				WritewCmd* writewcmd = new WritewCmd(itsServerPort);
-				command = writewcmd;
-				if (optarg) {
-					int32 board = 0;
-					int32 mp = 0;
-					uint32 addr = 0;
-					uint32 wordlo = 0;
-					uint32 wordhi = 0;
-					
-					int numitems = sscanf(optarg, "%d,%d,%x,%x,%x", &board,&mp,&addr,&wordlo,&wordhi);
-					if (numitems < 5 || numitems == EOF || board < 0 || board >= MAX_N_TBBBOARDS || mp > 3) {
-						cout << "Error: invalid write ddr value. Should be of the format " << endl;
-						cout <<	"       '--writew=board, mp, addr, wordlo, wordhi'"<< endl; 
-						cout << "       board=0.." << (MAX_N_TBBBOARDS - 1) << ",  mp=0..3,  addr=0x..,  wordlo=0x..,  wordhi=0x.." << endl;  
-						exit(EXIT_FAILURE);
-					}
-					writewcmd->setMp(mp);
-					writewcmd->setAddr(addr);
-					writewcmd->setWordLo(wordlo);
-					writewcmd->setWordHi(wordhi);
-					select.clear();
-		  		select.push_back(board);
-		  		command->setSelected(true);
-				}	
-				command->setCmdType(BOARDCMD);
-			}	break;
-			
-			case '9': { 	// --testddr
-				if (command) delete command;
-				TestDdrCmd* testddrcmd = new TestDdrCmd(itsServerPort);
-				command = testddrcmd;
-				if (optarg) {
-					int32 board = 0;
-										
-					int numitems = sscanf(optarg, "%d", &board);
-					if (numitems < 1 || numitems == EOF || board < 0 || board >= MAX_N_TBBBOARDS) {
-						cout << "Error: invalid write ddr value. Should be of the format " << endl;
-						cout << "       '--testddr=board' "<< endl;  
-						cout << "       board=0.." << (MAX_N_TBBBOARDS - 1) << endl;
-						exit(EXIT_FAILURE);
-					}
-					select.clear();
-		  		select.push_back(board);
-		  		command->setSelected(true);
-				}	
-				command->setCmdType(BOARDCMD);
-			}	break;
-						
-			case '6': { 	// --readr
-				if (command) delete command;
-				ReadrCmd* readrcmd = new ReadrCmd(itsServerPort);
-				command = readrcmd;
-				
-				if (optarg) {
-					int32 board = 0;
-					uint32 mp = 0;
-					uint32 pid = 0;
-					uint32 regid = 0;
-										
-					int numitems = sscanf(optarg, "%d,%u,%u,%u", &board, &mp, &pid, &regid);
-					
-					if (numitems < 4 || numitems == EOF || board < 0 || board >= MAX_N_TBBBOARDS || mp > 3 || pid > 7 || regid > 7) {
-						cout << "Error: invalid read register value. Should be of the format" << endl;
-						cout << "       '--readreg=board, mp, pid, regid'" << endl;
-						cout << "       board=0.." << (MAX_N_TBBBOARDS - 1) << ",  mp=0..3,  pid=0..7,  regid=0..7" << endl;  
-						exit(EXIT_FAILURE);
-					}
-					if ((REG_TABLE_3[pid][regid] == REG_WRITE_ONLY) || (REG_TABLE_3[pid][regid] == REG_NOT_USED)) {
-						cerr << "reading not posible on selected register" << endl;
-						exit(EXIT_FAILURE);
-					}
-					readrcmd->setMp(mp);
-					readrcmd->setPid(pid);
-					readrcmd->setRegId(regid);
-					
-					select.clear();
-					select.push_back(board);
-					command->setSelected(true);
-				}	
-				
-				command->setCmdType(BOARDCMD);
-			}	break;
-			
-			case '7': { 	// --writer
-				if (command) delete command;
-				WriterCmd* writercmd = new WriterCmd(itsServerPort);
-				command = writercmd;
-				
-				if (optarg) {
-					int32 board = 0;
-					uint32 mp = 0;
-					uint32 pid = 0;
-					uint32 regid = 0;
-					char datastr[256];
-					
-					int numitems = sscanf(optarg, "%d,%u,%u,%u,%s", &board, &mp, &pid, &regid, datastr);
-					if (numitems < 5 || numitems == EOF || board < 0 || board >= MAX_N_TBBBOARDS || mp > 3 || pid > 7 || regid > 7) {
-						cout << "Error: invalid write register value. Should be of the format " << endl;
-						cout <<	"       '--writereg=board, mp, pid, regid, data1, data2 etc.'" << endl;
-						cout << "       board=0.." << (MAX_N_TBBBOARDS - 1) << ",  mp=0..3,  pid=0..7,  regid=0..7" << endl;   
-						exit(EXIT_FAILURE);
-					}
-					if ((REG_TABLE_3[pid][regid] == REG_READ_ONLY) || (REG_TABLE_3[pid][regid] == REG_NOT_USED)) {
-						cerr << "writing not posible on selected register" << endl;
-						exit(EXIT_FAILURE);
-					}
-					writercmd->setMp(mp);
-					writercmd->setPid(pid);
-					writercmd->setRegId(regid);
-					
-					char* dstr;
-					uint32 val = 0;
-					int wordcnt = 0;
-
-  				dstr = strtok (datastr," ,");
-  				while (dstr != NULL)
-  				{
- 						val = strtol(dstr,NULL,16);
-   					//cout << formatString("%08x ",val);
-    				writercmd->setData(wordcnt,val);
-   					wordcnt++;
-    				dstr = strtok (NULL, " ,");
-  				}
-					cout << endl;
-					select.clear();
-					select.push_back(board);
-					command->setSelected(true);
-				}	
-				
-				command->setCmdType(BOARDCMD);
-			}	break;
-						
-			case 'h':
-			case '?': {
-				commandHelp(1);
-				exit(0);
-			} break;
-			
-			case 'X':	{
-				commandHelp(3);
-				exit(0);
-			} break;
-			
-			default:
-			{
-				commandHelp(1);
-				exit(EXIT_FAILURE);
-			} break;
-		}
-	}
-
-	if (command) {
-		if (!command->isSelectionDone()) {	// --select not used, select all
-			select.clear();
-			for (int i = 0; i < command->getMaxSelections(); i++) {
-				select.push_back(i);	
-			}
-			command->setSelected(true);
-		}
-	  command->setSelect(select);
-	}
+         break;
+      }
+
+      switch (c) {
+         
+         case 'l': {    // --select
+         if (!command->isSelectionDone()) {
+         if (optarg) {
+            if (!command) {
+               cout << "Error: 'command' argument should come before --select argument" << endl;
+               exit(EXIT_FAILURE);
+               }
+               select = strtolist(optarg, command->getMaxSelections());
+                                 
+            if (select.empty()) {
+               cout << "Error: invalid or missing '--select' option" << endl;
+               exit(EXIT_FAILURE);
+               }  else {
+                  command->setSelected(true);
+               }
+         }  else {
+            cout << "Error: option '--select' requires an argument" << endl;
+            exit(EXIT_FAILURE);
+         }
+            } else {
+            cout << "Error: channels already selected" << endl;
+            }
+       } break;
+       
+       case 'a': {   // --alloc
+            if (command) delete command;
+            AllocCmd* alloccmd = new AllocCmd(itsServerPort);
+            command = alloccmd;
+            command->setCmdType(RCUCMD);
+         }  break;
+         
+         case 'i': {    // --channelinfo
+            if (command) delete command;
+            ChannelInfoCmd* channelinfocmd = new ChannelInfoCmd(itsServerPort);
+            command = channelinfocmd;
+            command->setCmdType(RCUCMD);
+         }  break;
+         
+         case 'f': {    // --free
+            if (command) delete command;
+            FreeCmd* freecmd = new FreeCmd(itsServerPort);
+            command = freecmd;
+            command->setCmdType(RCUCMD);
+         }  break;
+         
+         case 'r': {    // --record
+            if (command) delete command;
+            RecordCmd* recordcmd = new RecordCmd(itsServerPort);
+            command = recordcmd;
+            command->setCmdType(RCUCMD);
+         }  break;
+         
+         case 's': {    // --stop
+            if (command) delete command;
+            StopCmd* stopcmd = new StopCmd(itsServerPort);
+            command = stopcmd;
+            command->setCmdType(RCUCMD);
+         }  break;
+         
+         case 'b': {
+            if (command) delete command;
+            TriggerSettingsCmd* trigsettingscmd = new TriggerSettingsCmd(itsServerPort);
+            command = trigsettingscmd;
+            command->setCmdType(RCUCMD);  
+         } break;
+         
+         case 'e': {    // --trigrelease
+            if (command) delete command;
+            TrigReleaseCmd* trigreleasecmd = new TrigReleaseCmd(itsServerPort);
+            command = trigreleasecmd;
+            if (optarg) {
+               int rcu = 0;
+               int numitems = sscanf(optarg, "%d",&rcu);
+               if (numitems == 0 || numitems == EOF || rcu < 0 || rcu >= MAX_N_RCUS) {
+                  cout << "Error: invalid number of arguments. Should be of the format " << endl;
+                  cout << "       '--trigclr=rcu' " << endl;  
+                  exit(EXIT_FAILURE);
+               }
+               select.clear();
+            select.push_back(rcu);
+               command->setSelected(true);
+            }
+            
+            command->setCmdType(RCUCMD);
+         }  break;
+         
+         case 'g': {    // --triggenerate
+            if (command) delete command;
+            TrigGenerateCmd* triggeneratecmd = new TrigGenerateCmd(itsServerPort);
+            command = triggeneratecmd;
+            command->setCmdType(RCUCMD);
+         }  break;
+         
+         case 't': {    // --trigsetup
+            if (command) delete command;
+            TrigSetupCmd* trigsetupcmd = new TrigSetupCmd(itsServerPort);
+            command = trigsetupcmd;
+            
+            if (optarg) {
+               uint32 level = 0;
+               uint32 start = 0;
+               uint32 stop = 0;
+               uint32 filter = 0;
+               uint32 window = 0;
+               uint32 triggermode = 0;
+               
+               int numitems = sscanf(optarg, "%u,%u,%u,%u,%u,%u",&level, &start, &stop, &filter, &window, &triggermode);
+               // check if valid arguments
+               if (  numitems < 6 || numitems == EOF 
+                     || level < 1 || level > 255 
+                     || start < 1 || start > 15 
+                     || stop < 1 || stop > 15 
+                     || window > 6
+                     || triggermode > 1)
+               {
+                  cout << "Error: invalid number of arguments. Should be of the format " << endl;
+                  cout << "       '--trigsetup=level, start, stop, filter, window, mode' (use decimal values)" << endl;  
+                  cout << "       level=1..255,  start=1..15,  stop=1..15,  filter=0(on) or 1(off)" << endl;
+                  cout << "       window=0..6, mode=0(single shot) or 1(continues, don't use this mode)" << endl;
+                  exit(EXIT_FAILURE);
+               }
+               
+               //================================================
+               // set triggermode to single shot, continues mode
+               // will give more than 6000 triggers per second per
+               // board, if level is chosen to low, the driver can't
+               // handle that amount of trigger per board.
+               if (triggermode == 1) {
+                  cout << "mode=1 can generate to many triggers, auto corrected to mode=0(single-shot)" << endl;
+               }  
+               triggermode = 0;
+               //================================================
+               
+                              
+               trigsetupcmd->setLevel(static_cast<uint16>(level));
+               trigsetupcmd->setStartMode(static_cast<uint8>(start));
+               trigsetupcmd->setStopMode(static_cast<uint8>(stop));
+               trigsetupcmd->setFilter(static_cast<uint8>(filter));
+               trigsetupcmd->setWindow(static_cast<uint8>(window));
+               trigsetupcmd->setOperatingMode(0);
+               trigsetupcmd->setTriggerMode(static_cast<uint16>(triggermode));
+            }
+                     
+            command->setCmdType(RCUCMD);
+         }  break;
+         
+         case 'c': {    // --trigcoef
+            if (command) delete command;
+            TrigCoefficientCmd* trigcoefficientcmd = new TrigCoefficientCmd(itsServerPort);
+            command = trigcoefficientcmd;
+            if (optarg) {
+               uint32 c0 = 0;
+               uint32 c1 = 0;
+               uint32 c2 = 0;
+               uint32 c3 = 0;
+               int numitems = sscanf(optarg, "%u,%u,%u,%u",&c0, &c1, &c2, &c3);
+               if (numitems < 4 || numitems == EOF) {
+                  cout << "Error: invalid number of arguments. Should be of the format " << endl;
+                  cout << "       '--trigcoef=c0, c1, c2, c3'   (use decimal values)" << endl;
+                  cout << "       co, c1, c2, c3=16bit value"<< endl; 
+                  exit(EXIT_FAILURE);
+               }
+               trigcoefficientcmd->setC0(static_cast<uint16>(c0));
+               trigcoefficientcmd->setC1(static_cast<uint16>(c1));
+               trigcoefficientcmd->setC2(static_cast<uint16>(c2));
+               trigcoefficientcmd->setC3(static_cast<uint16>(c3));
+            }
+            command->setCmdType(RCUCMD);
+         }  break;
+         
+         case 'I': {    // --triginfo
+            if (command) delete command;
+            TrigInfoCmd* triginfocmd = new TrigInfoCmd(itsServerPort);
+            command = triginfocmd;
+            if (optarg) {
+               int rcu = 0;
+               int numitems = sscanf(optarg, "%d",&rcu);
+               if (numitems < 1 || numitems == EOF) {
+                  cout << "Error: invalid number of arguments. Should be of the format " << endl;
+                  cout << "       '--triginfo=rcu' " << endl; 
+                  cout << "       rcu=0.." << (MAX_N_RCUS - 1) << endl;  
+                  exit(EXIT_FAILURE);
+               }
+               select.clear();
+            select.push_back(rcu);
+               command->setSelected(true);
+            }
+            command->setCmdType(RCUCMD);
+         }  break;
+         
+         case 'L': {    // --listen
+            if (command) delete command;
+            ListenCmd* listencmd = new ListenCmd(itsServerPort);
+            command = listencmd;
+            char listen_mode[64];
+            if (optarg) {
+               strcpy(listen_mode,"one_shot");
+               sscanf(optarg, "%s", listen_mode);
+               if ((strcmp(listen_mode,"one_shot") != 0 && strcmp(listen_mode,"continues") != 0)) {
+                  cout << "Error: invalid argument. Should be of the format " << endl;
+                  cout << "       '--listen=[one_shot | continues]'" << endl;
+                  exit(EXIT_FAILURE);
+               }
+            }
+            if (strcmp(listen_mode,"one_shot") == 0) {
+               listencmd->setListenMode(TBB_LISTEN_ONE_SHOT);
+            }
+            if (strcmp(listen_mode,"continues") == 0) {
+               listencmd->setListenMode(TBB_LISTEN_CONTINUES);
+            }
+            command->setCmdType(RCUCMD);
+         }  break;
+         
+         case 'R': {    // --read
+            if (command) delete command;
+            ReadCmd* readcmd = new ReadCmd(itsServerPort);
+            command = readcmd;
+            
+            if (optarg) {
+               int rcu = 0;
+               uint32 secondstime = 0;
+               uint32 sampletime = 0;
+               uint32 prepages = 0;
+               uint32 postpages = 0;
+               int numitems = sscanf(optarg, "%d,%u,%u,%u,%u",
+                  &rcu, &secondstime, &sampletime, &prepages, &postpages);
+               if (numitems < 5 || numitems == EOF || rcu < 0 || rcu >= MAX_N_RCUS) {
+                  cout << "Error: invalid number of arguments. Should be of the format " << endl;
+                  cout << "       '--read=rcu,secondstime,sampletime,prepages,postpages' " << endl;
+                  cout << "       rcu=0.." << (MAX_N_RCUS - 1) << ",  time = secondstime + (sampletime * sample-interval) "<< endl;  
+                  exit(EXIT_FAILURE);
+               }
+               readcmd->setSecondsTime(secondstime);
+               readcmd->setSampleTime(sampletime);
+               readcmd->setPrePages(prepages);
+               readcmd->setPostPages(postpages);
+               
+               select.clear();
+            select.push_back(rcu);
+               command->setSelected(true);
+            } 
+            command->setCmdType(RCUCMD);
+         }  break;
+         
+         case 'm': {    // --mode
+            if (command) delete command;
+            ModeCmd* modecmd = new ModeCmd(itsServerPort);
+            command = modecmd;
+            if (optarg) {
+               char rec_mode[64];
+               int numitems = sscanf(optarg, "%s",
+                  rec_mode);
+               if (numitems < 1 || numitems == EOF ||(strcmp(rec_mode,"transient") != 0 && strcmp(rec_mode,"subbands") != 0)) {
+                  cout << "Error: invalid number of arguments. Should be of the format " << endl;
+                  cout << "       '--udp=rec_mode'" << endl;
+                  cout << "       rec_mode=transient or subbands" << endl;  
+                  exit(EXIT_FAILURE);
+               }
+               
+               if (strcmp(rec_mode,"transient") == 0)
+                  modecmd->setRecMode(TBB_MODE_TRANSIENT);
+               if (strcmp(rec_mode,"subbands") == 0)
+                  modecmd->setRecMode(TBB_MODE_SUBBANDS);
+            } 
+            command->setCmdType(BOARDCMD);
+         }  break;                           
+                  
+         case 'v': {    // --version
+         if (command) delete command;
+         VersionCmd* versioncmd = new VersionCmd(itsServerPort);
+         command = versioncmd;
+            command->setCmdType(BOARDCMD);
+      }  break;   
+      
+      case 'z': {    // --size
+         if (command) delete command;
+         SizeCmd* sizecmd = new SizeCmd(itsServerPort);
+         command = sizecmd;
+            command->setCmdType(BOARDCMD);
+      }  break;
+      
+      case 'A': {    // --status
+         if (command) delete command;
+         StatusCmd* statuscmd = new StatusCmd(itsServerPort);
+         command = statuscmd;
+            command->setCmdType(BOARDCMD);
+      }  break;
+         
+         case 'C': {    // --clear
+            if (command) delete command;
+            ClearCmd* clearcmd = new ClearCmd(itsServerPort);
+            command = clearcmd;
+            command->setCmdType(BOARDCMD);
+         }  break;
+         
+         case 'Z': {    // --reset
+            if (command) delete command;
+            ResetCmd* resetcmd = new ResetCmd(itsServerPort);
+            command = resetcmd;
+            command->setCmdType(BOARDCMD);
+         }  break;
+      
+         case 'D': {    // --arp
+            if (command) delete command;
+            ArpCmd* arpcmd = new ArpCmd(itsServerPort);
+            command = arpcmd;
+            command->setCmdType(BOARDCMD);
+         }  break;
+         
+         case 'E': {    // --arpmode
+            if (command) delete command;
+            ArpModeCmd* arpmodecmd = new ArpModeCmd(itsServerPort);
+            command = arpmodecmd;
+            if (optarg) {
+               int32 mode = 0;
+               int numitems = sscanf(optarg, "%d", &mode);
+               if (numitems == 0 || numitems == EOF || mode < 0 || mode > 1) {
+                  cout << "Error: invalid mode value. Should be of the format " << endl;
+                  cout << "       '--arpmode=mode'" << endl;
+                  cout << "       mode=0 or 1" << endl; 
+                  exit(EXIT_FAILURE);
+               }
+               arpmodecmd->setMode((uint32)mode);
+            } 
+            command->setCmdType(BOARDCMD);
+         }  break;
+         
+         case 'F': {    // --stopcep
+            if (command) delete command;
+            StopCepCmd* stopcepcmd = new StopCepCmd(itsServerPort);
+            command = stopcepcmd;
+            command->setCmdType(BOARDCMD);
+         }  break;
+         
+         case 'G': {    // --templimits
+            if (command) delete command;
+            TempLimitCmd* templimitscmd = new TempLimitCmd(itsServerPort);
+            command = templimitscmd;
+            if (optarg) {
+               int32 high = 0;
+               int32 low = 0;
+               int numitems = sscanf(optarg, "%d,%d", &high, &low);
+               if (numitems == 0 || numitems == EOF) {
+                  cout << "Error: invalid number of values. Should be of the format " << endl;
+                  cout << "       '--templimits=high,low'" << endl;
+                  exit(EXIT_FAILURE);
+               }
+               templimitscmd->setLimitHigh((uint32)high);
+               templimitscmd->setLimitLow((uint32)low);
+            } 
+            command->setCmdType(BOARDCMD);
+         }  break;
+         
+         
+         
+         case 'S': {    // --config
+            if (command) delete command;
+            ConfigCmd* configcmd = new ConfigCmd(itsServerPort);
+            command = configcmd;
+            
+            if (optarg) {
+               int32 imagenr = 0;
+               int numitems = sscanf(optarg, "%d", &imagenr);
+               if (numitems == 0 || numitems == EOF || imagenr < 0 || imagenr >= FL_N_IMAGES) {
+                  cout << "Error: invalid image value. Should be of the format " << endl;
+                  cout << "       '--config=imagenr'" << endl;
+                  cout << "       imagenr=0..15" << endl; 
+                  exit(EXIT_FAILURE);
+               }
+               configcmd->setImage((uint32)imagenr);
+            } 
+            
+            command->setCmdType(BOARDCMD);
+         }  break;
+         
+         case 'p': {    // --readpage
+            if (command) delete command;
+            ReadPageCmd* readddrcmd = new ReadPageCmd(itsServerPort);
+            command = readddrcmd;
+            
+            if (optarg) {
+               int32 rcu = 0;
+               uint32 startpage = 0;
+               uint32 pages = 0;
+               
+               int numitems = sscanf(optarg, "%d,%u,%u", &rcu,&startpage,&pages);
+               
+               if (numitems < 3 || numitems == EOF || rcu < 0 || rcu >= MAX_N_RCUS) {
+                  cout << "Error: invalid readpage value's. Should be of the format " << endl;
+                  cout << "       '--readpage=rcu, startpage, pages'" << endl;
+                  cout << "       rcu=0.." << (MAX_N_RCUS - 1) << endl; 
+                  exit(EXIT_FAILURE);
+               }
+               readddrcmd->setStartPage(startpage);
+               readddrcmd->setPages(pages);
+               select.clear();
+            select.push_back(rcu);
+            command->setSelected(true);
+            }  
+            command->setCmdType(BOARDCMD);
+         }  break;         
+                  
+         case '1': {    // --erasef
+            if (command) delete command;
+            ErasefCmd* erasefcmd = new ErasefCmd(itsServerPort);
+            command = erasefcmd;
+            if (optarg) {
+               int board = 0;
+               int page = 0;
+               int numitems = sscanf(optarg, "%d,%d", &board, &page);
+               
+               if (numitems < 2 || numitems == EOF || page < 0 || page >= FL_N_IMAGES  || board < 0 || board >= MAX_N_TBBOARDS) {
+                  cout << "Error: invalid page value. Should be of the format " << endl;
+                  cout <<  "       '--eraseimage=board, image'" << endl;
+                  cout << "       board=0.." << (MAX_N_TBBOARDS - 1) << ", image=0..15" << endl; 
+                  exit(EXIT_FAILURE);
+               }
+               erasefcmd->setPage(page);
+               select.clear();
+               select.push_back(board);
+               command->setSelected(true);
+            } 
+            command->setCmdType(BOARDCMD);
+         }  break;
+         
+         case '2': {    // --readf
+            if (command) delete command;
+            ReadfCmd* readfcmd = new ReadfCmd(itsServerPort);
+            command = readfcmd;
+            if (optarg) {
+               int board = 0;
+               int page = 0;
+               int numitems = sscanf(optarg, "%d,%d", &board, &page);
+               
+               if (numitems < 2 || numitems == EOF || page < 0 || page >= FL_N_IMAGES  || board < 0 || board >= MAX_N_TBBOARDS) {
+                  cout << "Error: invalid image value. Should be of the format " << endl;
+                  cout << "       '--readimage=board, image'"<< endl;
+                  cout << "       board=0.." << (MAX_N_TBBOARDS - 1) << ", image=0..31" << endl;  
+                  exit(EXIT_FAILURE);
+               }
+               readfcmd->setPage(page);
+               select.clear();
+               select.push_back(board);
+               command->setSelected(true);
+            } 
+            command->setCmdType(BOARDCMD);
+         }  break;
+         
+         case '3': {    // --writef
+            if (command) delete command;
+            WritefCmd* writefcmd = new WritefCmd(itsServerPort);
+            command = writefcmd;
+            if (optarg) {
+               int board = 0;
+               int page = 0;
+               double version = 0;
+               char filename_tp[64];
+               char filename_mp[64];
+               memset(filename_tp,0,64);
+               memset(filename_mp,0,64);
+               
+               int numitems = sscanf(optarg, "%d,%d,%lf,%63[^,],%63[^,]", &board, &page, &version, filename_tp, filename_mp);
+               if (numitems < 5 || numitems == EOF || page < 0 || page >= FL_N_IMAGES  || board < 0 || board >= MAX_N_TBBOARDS) {
+                  cout << "Error: invalid values. Should be of the format " << endl;
+                  cout << "       '--writeimage=board, image, file-tp, file-mp'"<< endl;
+                  cout << "       board=0.." << (MAX_N_TBBOARDS - 1) << ", image=0..31" << endl;  
+                  exit(EXIT_FAILURE);
+               }
+               
+               writefcmd->setPage(page);
+               writefcmd->setVersion(version);
+               writefcmd->setFileNameTp(filename_tp);
+               writefcmd->setFileNameMp(filename_mp);
+
+               select.clear();
+               select.push_back(board);
+               command->setSelected(true);
+            } 
+            command->setCmdType(BOARDCMD);
+         }  break;
+         
+         case '8': { // --imageinfo
+            if (command) delete command;
+            ImageInfoCmd* imageinfocmd = new ImageInfoCmd(itsServerPort);
+            command = imageinfocmd;
+            if (optarg) {
+               int board = 0;
+               int numitems = sscanf(optarg, "%d", &board);
+               if (numitems < 1 || numitems == EOF || board < 0 || board >= MAX_N_TBBOARDS) {
+                  cout << "Error: invalid values. Should be of the format " << endl;
+                  cout <<  "       '--imageinfo=board'"<< endl;
+                  cout << "       board=0.." << (MAX_N_TBBOARDS - 1) << endl;   
+                  exit(EXIT_FAILURE);
+               }
+               select.clear();
+               select.push_back(board);
+               command->setSelected(true);
+            } 
+            command->setCmdType(BOARDCMD);
+         } break;
+         
+         case '4': {    // --readw
+            if (command) delete command;
+            ReadwCmd* readwcmd = new ReadwCmd(itsServerPort);
+            command = readwcmd;
+            
+            if (optarg) {
+               int board = 0;
+               uint32 mp = 0;
+               uint32 startaddr = 0;
+               uint32 size = 0;
+               
+               int numitems = sscanf(optarg, "%d,%x,%x,%x", &board,&mp,&startaddr, &size);
+               
+               if (numitems < 3 || numitems == EOF || board < 0 || board >= MAX_N_TBBOARDS || mp > 3) {
+                  cout << "Error: invalid read ddr value. Should be of the format " << endl;
+                  cout <<  "       '--readw=board, mp, addr'" << endl;
+                  cout << "       board=0.." << (MAX_N_TBBOARDS - 1) << ",  mp=0..3,  addr=0x.." << endl;  
+                  exit(EXIT_FAILURE);
+               }
+               readwcmd->setMp(mp);
+               readwcmd->setStartAddr(startaddr);
+               readwcmd->setStopAddr(startaddr+size);
+               select.clear();
+            select.push_back(board);
+            command->setSelected(true);
+            } 
+            command->setCmdType(BOARDCMD);
+         }  break;
+         
+         case '5': {    // --writew
+            if (command) delete command;
+            WritewCmd* writewcmd = new WritewCmd(itsServerPort);
+            command = writewcmd;
+            if (optarg) {
+               int32 board = 0;
+               int32 mp = 0;
+               uint32 addr = 0;
+               uint32 wordlo = 0;
+               uint32 wordhi = 0;
+               
+               int numitems = sscanf(optarg, "%d,%d,%x,%x,%x", &board,&mp,&addr,&wordlo,&wordhi);
+               if (numitems < 5 || numitems == EOF || board < 0 || board >= MAX_N_TBBOARDS || mp > 3) {
+                  cout << "Error: invalid write ddr value. Should be of the format " << endl;
+                  cout <<  "       '--writew=board, mp, addr, wordlo, wordhi'"<< endl; 
+                  cout << "       board=0.." << (MAX_N_TBBOARDS - 1) << ",  mp=0..3,  addr=0x..,  wordlo=0x..,  wordhi=0x.." << endl;  
+                  exit(EXIT_FAILURE);
+               }
+               writewcmd->setMp(mp);
+               writewcmd->setAddr(addr);
+               writewcmd->setWordLo(wordlo);
+               writewcmd->setWordHi(wordhi);
+               select.clear();
+            select.push_back(board);
+            command->setSelected(true);
+            }  
+            command->setCmdType(BOARDCMD);
+         }  break;
+         
+         case '9': {    // --testddr
+            if (command) delete command;
+            TestDdrCmd* testddrcmd = new TestDdrCmd(itsServerPort);
+            command = testddrcmd;
+            if (optarg) {
+               int32 board = 0;
+                              
+               int numitems = sscanf(optarg, "%d", &board);
+               if (numitems < 1 || numitems == EOF || board < 0 || board >= MAX_N_TBBOARDS) {
+                  cout << "Error: invalid write ddr value. Should be of the format " << endl;
+                  cout << "       '--testddr=board' "<< endl;  
+                  cout << "       board=0.." << (MAX_N_TBBOARDS - 1) << endl;
+                  exit(EXIT_FAILURE);
+               }
+               select.clear();
+            select.push_back(board);
+            command->setSelected(true);
+            }  
+            command->setCmdType(BOARDCMD);
+         }  break;
+                  
+         case '6': {    // --readr
+            if (command) delete command;
+            ReadrCmd* readrcmd = new ReadrCmd(itsServerPort);
+            command = readrcmd;
+            
+            if (optarg) {
+               int32 board = 0;
+               uint32 mp = 0;
+               uint32 pid = 0;
+               uint32 regid = 0;
+                              
+               int numitems = sscanf(optarg, "%d,%u,%u,%u", &board, &mp, &pid, &regid);
+               
+               if (numitems < 4 || numitems == EOF || board < 0 || board >= MAX_N_TBBOARDS || mp > 3 || pid > 7 || regid > 7) {
+                  cout << "Error: invalid read register value. Should be of the format" << endl;
+                  cout << "       '--readreg=board, mp, pid, regid'" << endl;
+                  cout << "       board=0.." << (MAX_N_TBBOARDS - 1) << ",  mp=0..3,  pid=0..7,  regid=0..7" << endl;  
+                  exit(EXIT_FAILURE);
+               }
+               if ((REG_TABLE_3[pid][regid] == REG_WRITE_ONLY) || (REG_TABLE_3[pid][regid] == REG_NOT_USED)) {
+                  cerr << "reading not posible on selected register" << endl;
+                  exit(EXIT_FAILURE);
+               }
+               readrcmd->setMp(mp);
+               readrcmd->setPid(pid);
+               readrcmd->setRegId(regid);
+               
+               select.clear();
+               select.push_back(board);
+               command->setSelected(true);
+            }  
+            
+            command->setCmdType(BOARDCMD);
+         }  break;
+         
+         case '7': {    // --writer
+            if (command) delete command;
+            WriterCmd* writercmd = new WriterCmd(itsServerPort);
+            command = writercmd;
+            
+            if (optarg) {
+               int32 board = 0;
+               uint32 mp = 0;
+               uint32 pid = 0;
+               uint32 regid = 0;
+               char datastr[256];
+               
+               int numitems = sscanf(optarg, "%d,%u,%u,%u,%s", &board, &mp, &pid, &regid, datastr);
+               if (numitems < 5 || numitems == EOF || board < 0 || board >= MAX_N_TBBOARDS || mp > 3 || pid > 7 || regid > 7) {
+                  cout << "Error: invalid write register value. Should be of the format " << endl;
+                  cout <<  "       '--writereg=board, mp, pid, regid, data1, data2 etc.'" << endl;
+                  cout << "       board=0.." << (MAX_N_TBBOARDS - 1) << ",  mp=0..3,  pid=0..7,  regid=0..7" << endl;   
+                  exit(EXIT_FAILURE);
+               }
+               if ((REG_TABLE_3[pid][regid] == REG_READ_ONLY) || (REG_TABLE_3[pid][regid] == REG_NOT_USED)) {
+                  cerr << "writing not posible on selected register" << endl;
+                  exit(EXIT_FAILURE);
+               }
+               writercmd->setMp(mp);
+               writercmd->setPid(pid);
+               writercmd->setRegId(regid);
+               
+               char* dstr;
+               uint32 val = 0;
+               int wordcnt = 0;
+
+            dstr = strtok (datastr," ,");
+            while (dstr != NULL)
+            {
+                  val = strtol(dstr,NULL,16);
+                  //cout << formatString("%08x ",val);
+               writercmd->setData(wordcnt,val);
+                  wordcnt++;
+               dstr = strtok (NULL, " ,");
+            }
+               cout << endl;
+               select.clear();
+               select.push_back(board);
+               command->setSelected(true);
+            }  
+            
+            command->setCmdType(BOARDCMD);
+         }  break;
+                  
+         case 'h':
+         case '?': {
+            commandHelp(1);
+            exit(0);
+         } break;
+         
+         case 'X':   {
+            commandHelp(3);
+            exit(0);
+         } break;
+         
+         default:
+         {
+            commandHelp(1);
+            exit(EXIT_FAILURE);
+         } break;
+      }
+   }
+
+   if (command) {
+      if (!command->isSelectionDone()) {  // --select not used, select all
+         select.clear();
+         for (int i = 0; i < command->getMaxSelections(); i++) {
+            select.push_back(i); 
+         }
+         command->setSelected(true);
+      }
+     command->setSelect(select);
+   }
   return(command);
 }
 
@@ -3227,16 +3227,16 @@ std::list<int> TBBCtl::strtolist(const char* str, int max)
   char* end   = 0;
   bool  range = false;
   long prevval = 0;
-	std::list<int> resultset;
-			
-	resultset.clear();
+   std::list<int> resultset;
+         
+   resultset.clear();
 
   while(start) {
     long val = strtol(start, &end, 10); // read decimal numbers
     start = (end ? (*end ? end + 1 : 0) : 0); // determine next start
     if (val >= max || val < 0) {
       cout << formatString("Error: value %ld out of range",val) << endl;
-			resultset.clear();
+         resultset.clear();
       return(resultset);
     }
 
@@ -3251,13 +3251,13 @@ std::list<int> TBBCtl::strtolist(const char* str, int max)
             }
             if (val < prevval) {
               cout << "Error: invalid range specification" << endl;
-							resultset.clear();
-							return(resultset);
-						}
+                     resultset.clear();
+                     return(resultset);
+                  }
             for(long i = prevval; i <= val; i++)
               resultset.push_back(i);
           } else {
-						resultset.push_back(val);
+                  resultset.push_back(val);
           }
           range = false;
         } break;
@@ -3268,9 +3268,9 @@ std::list<int> TBBCtl::strtolist(const char* str, int max)
 
         default: {
           cout << formatString("Error: invalid character %c",*end) << endl;
-					resultset.clear();
-					return(resultset);
-				} break;
+               resultset.clear();
+               return(resultset);
+            } break;
       }
     }
     prevval = val;
@@ -3284,9 +3284,9 @@ void TBBCtl::mainloop()
 {
   start(); // make initial transition
   GCFTask::run();
-	
-	TBBUnsubscribeEvent unsubscribe;
-	itsServerPort.send(unsubscribe);
+   
+   TBBUnsubscribeEvent unsubscribe;
+   itsServerPort.send(unsubscribe);
 }
 
 //-----------------------------------------------------------------------------
@@ -3303,12 +3303,12 @@ int main(int argc, char** argv)
   }
   catch (Exception e) {
     cout << "Exception: " << e.text() << endl;
-		cout << endl;
-		cout << "== abnormal termination of tbbctl ============================================" << endl;
+      cout << endl;
+      cout << "== abnormal termination of tbbctl ============================================" << endl;
     exit(EXIT_FAILURE);
   }
-	cout << endl;
-	cout << "== normal termination of tbbctl ==============================================" << endl;
+   cout << endl;
+   cout << "== normal termination of tbbctl ==============================================" << endl;
 
   return(0);
 }
diff --git a/MAC/APL/PIC/TBBDriver/src/tbbctl.h b/MAC/APL/PIC/TBBDriver/src/tbbctl.h
index abf48521a11..e012dc42e55 100644
--- a/MAC/APL/PIC/TBBDriver/src/tbbctl.h
+++ b/MAC/APL/PIC/TBBDriver/src/tbbctl.h
@@ -38,7 +38,7 @@
 namespace LOFAR {
   namespace TbbCtl {
   	
-// MAX_N_TBBBOARDS and MAX_N_RCUS come from TBB_protocol.ph
+// MAX_N_TBBOARDS and MAX_N_RCUS come from TBB_protocol.ph
 
 static const int BOARDCMD = 1;
 static const int RCUCMD = 2;
@@ -163,7 +163,7 @@ public:
 	int getMaxSelections(void) const
 	{
 		int maxbits = 0;
-		if (itsCmdType == BOARDCMD) maxbits = MAX_N_TBBBOARDS; 
+		if (itsCmdType == BOARDCMD) maxbits = MAX_N_TBBOARDS; 
 		if (itsCmdType == RCUCMD)   maxbits = MAX_N_RCUS;
 		return(maxbits);	
 	}
@@ -852,7 +852,7 @@ private:
 	
   // dimensions of the connected hardware
 	uint32	itsActiveBoards;	// mask b0 = board0, b1 = board1 ....
-	int			itsMemory[MAX_N_TBBBOARDS];
+	int			itsMemory[MAX_N_TBBOARDS];
 	int			itsMaxBoards;
 	int			itsMaxChannels;
 					
diff --git a/MAC/APL/PIC/TBBDriver/test/TBBTest.cc b/MAC/APL/PIC/TBBDriver/test/TBBTest.cc
index eb71e799a4a..48566b6f5d6 100644
--- a/MAC/APL/PIC/TBBDriver/test/TBBTest.cc
+++ b/MAC/APL/PIC/TBBDriver/test/TBBTest.cc
@@ -129,7 +129,7 @@ GCFEvent::TResult TBBTest::test001(GCFEvent& e, GCFPortInterface& port)
 			{
 				TBBAllocAckEvent ack(e);
 				LOG_INFO_STR(formatString	 ("Ack status = 0X%08X", ack.status_mask));
-				for (int boardnr = 0; boardnr < MAX_N_TBBBOARDS;boardnr++) {
+				for (int boardnr = 0; boardnr < MAX_N_TBBOARDS;boardnr++) {
 					TESTC_ABORT(ack.status_mask[boardnr] == TBB_SUCCESS, TBBTest::final);
 				}
 				LOG_INFO_STR("Alloc test OK");
@@ -183,7 +183,7 @@ GCFEvent::TResult TBBTest::test002(GCFEvent& e, GCFPortInterface& port)
 		{
 			TBBAllocAckEvent ack(e);
 			LOG_INFO_STR(formatString	 ("Ack status = 0X%08X", ack.status_mask));
-			for (int boardnr = 0; boardnr < MAX_N_TBBBOARDS;boardnr++) {
+			for (int boardnr = 0; boardnr < MAX_N_TBBOARDS;boardnr++) {
 					TESTC_ABORT(ack.status_mask[boardnr] == TBB_SUCCESS, TBBTest::final);
 				}
 			LOG_INFO_STR("Free test OK");
@@ -237,7 +237,7 @@ GCFEvent::TResult TBBTest::test003(GCFEvent& e, GCFPortInterface& port)
 		{
 			TBBRecordAckEvent ack(e);
 	
-			for (int boardnr = 0; boardnr < MAX_N_TBBBOARDS;boardnr++) {
+			for (int boardnr = 0; boardnr < MAX_N_TBBOARDS;boardnr++) {
 					TESTC_ABORT(ack.status_mask[boardnr] == TBB_SUCCESS, TBBTest::final);
 				}
 			LOG_INFO_STR("Record test OK");
@@ -291,7 +291,7 @@ GCFEvent::TResult TBBTest::test004(GCFEvent& e, GCFPortInterface& port)
 		{
 			TBBStopAckEvent ack(e);
 	
-			for (int boardnr = 0; boardnr < MAX_N_TBBBOARDS;boardnr++) {
+			for (int boardnr = 0; boardnr < MAX_N_TBBOARDS;boardnr++) {
 					TESTC_ABORT(ack.status_mask[boardnr] == TBB_SUCCESS, TBBTest::final);
 				}
 			LOG_INFO_STR("Stop test OK");
@@ -446,7 +446,7 @@ GCFEvent::TResult TBBTest::test007(GCFEvent& e, GCFPortInterface& port)
 		{
 			TBBModeAckEvent ack(e);
 
-			for (int boardnr = 0; boardnr < MAX_N_TBBBOARDS; boardnr++) {
+			for (int boardnr = 0; boardnr < MAX_N_TBBOARDS; boardnr++) {
 				TESTC_ABORT(ack.status_mask[boardnr] == TBB_SUCCESS, TBBTest::final);
 			}
 			LOG_INFO_STR("Udp test OK");
@@ -512,7 +512,7 @@ GCFEvent::TResult TBBTest::test008(GCFEvent& e, GCFPortInterface& port)
 				LOG_INFO_STR(formatString("mp3version   = 0X%08X", ack.mp3version[cnt]));
 			}
 			//LOG_INFO_STR(formatString	 ("Ack status = 0X%08X", ack.status_mask));
-			for (int boardnr = 0; boardnr < MAX_N_TBBBOARDS;boardnr++) {
+			for (int boardnr = 0; boardnr < MAX_N_TBBOARDS;boardnr++) {
 					TESTC_ABORT(ack.status_mask[boardnr] == TBB_SUCCESS, TBBTest::final);
 				}
 			LOG_INFO_STR("Version test OK");
@@ -568,7 +568,7 @@ GCFEvent::TResult TBBTest::test009(GCFEvent& e, GCFPortInterface& port)
 		{
 			TBBSizeAckEvent ack(e);
 
-			for (int boardnr = 0; boardnr < MAX_N_TBBBOARDS;boardnr++) {
+			for (int boardnr = 0; boardnr < MAX_N_TBBOARDS;boardnr++) {
 					TESTC_ABORT(ack.status_mask[boardnr] == TBB_SUCCESS, TBBTest::final);
 				}
 			LOG_INFO_STR("Size test OK");
@@ -622,7 +622,7 @@ GCFEvent::TResult TBBTest::test010(GCFEvent& e, GCFPortInterface& port)
 		{
 			TBBSizeAckEvent ack(e);
 
-			for (int boardnr = 0; boardnr < MAX_N_TBBBOARDS;boardnr++) {
+			for (int boardnr = 0; boardnr < MAX_N_TBBOARDS;boardnr++) {
 					TESTC_ABORT(ack.status_mask[boardnr] == TBB_SUCCESS, TBBTest::final);
 				}
 			LOG_INFO_STR("Size test OK");
-- 
GitLab