From fa4b08bfc78cf4a682f9932095717f09ac1283ad Mon Sep 17 00:00:00 2001
From: Pieter Donker <donker@astron.nl>
Date: Fri, 9 Oct 2009 11:49:40 +0000
Subject: [PATCH] Bug 335: further development of TBBDriver

---
 MAC/APL/PIC/TBB_Driver/src/DriverSettings.h |  2 +-
 MAC/APL/PIC/TBB_Driver/src/StatusCmd.cc     |  2 +-
 MAC/APL/PIC/TBB_Driver/src/WritefCmd.cc     | 16 +++++++++++-----
 MAC/APL/PIC/TBB_Driver/src/WritefCmd.h      | 20 ++++++++++----------
 MAC/APL/PIC/TBB_Driver/src/tbbctl.h         |  8 +++++---
 5 files changed, 28 insertions(+), 20 deletions(-)

diff --git a/MAC/APL/PIC/TBB_Driver/src/DriverSettings.h b/MAC/APL/PIC/TBB_Driver/src/DriverSettings.h
index a1040920502..37a218a6644 100644
--- a/MAC/APL/PIC/TBB_Driver/src/DriverSettings.h
+++ b/MAC/APL/PIC/TBB_Driver/src/DriverSettings.h
@@ -35,7 +35,7 @@ namespace LOFAR {
 	using GCF::TM::GCFPortInterface;
 	namespace TBB {
 
-static const int DRIVER_VERSION = 218; // 2.18 
+static const int DRIVER_VERSION = 219; // TBBDriver V2.19
 
 enum BoardStateT {noBoard,
 				  setImage1, image1Set,
diff --git a/MAC/APL/PIC/TBB_Driver/src/StatusCmd.cc b/MAC/APL/PIC/TBB_Driver/src/StatusCmd.cc
index d89082bab41..dd1ac4f1053 100644
--- a/MAC/APL/PIC/TBB_Driver/src/StatusCmd.cc
+++ b/MAC/APL/PIC/TBB_Driver/src/StatusCmd.cc
@@ -112,7 +112,7 @@ void StatusCmd::saveTpAckEvent(GCFEvent& event)
 			itsWatchDogMode[getBoardNr()] = ((tp_ack.info[5] >> 16) & 0xf);
 			itsPgood[getBoardNr()] = tp_ack.info[0];
 				
-			LOG_INFO_STR(formatString("Status info = 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x",
+			LOG_DEBUG_STR(formatString("Status info = 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x",
 												tp_ack.info[0], tp_ack.info[5], tp_ack.info[6], 
 												tp_ack.info[7], tp_ack.info[8], tp_ack.info[9]));
 		}
diff --git a/MAC/APL/PIC/TBB_Driver/src/WritefCmd.cc b/MAC/APL/PIC/TBB_Driver/src/WritefCmd.cc
index f7f1651ad13..491599bb300 100644
--- a/MAC/APL/PIC/TBB_Driver/src/WritefCmd.cc
+++ b/MAC/APL/PIC/TBB_Driver/src/WritefCmd.cc
@@ -254,7 +254,7 @@ void WritefCmd::saveTpAckEvent(GCFEvent& event)
 				TPErasefAckEvent tp_ack(event);
 				LOG_DEBUG_STR(formatString("Received ErasefAck from boardnr[%d]", getBoardNr()));
 				if (tp_ack.status != 0) {
-					setStatus(0, (TBB_FLASH_ERROR | (tp_ack.status << 24)));
+					setStatus(0, (TBB_FLASH_ERASE_ERROR | (tp_ack.status << 24)));
 					setDone(true);
 				} else {
 					itsSector++;
@@ -268,7 +268,7 @@ void WritefCmd::saveTpAckEvent(GCFEvent& event)
 				TPWritefAckEvent tp_ack(event);
 				LOG_DEBUG_STR(formatString("Received WritefAck from boardnr[%d]", getBoardNr()));	
 				if (tp_ack.status != 0) {
-					setStatus(0, (TBB_FLASH_ERROR | (tp_ack.status << 24)));
+					setStatus(0, (TBB_FLASH_WRITE_ERROR | (tp_ack.status << 24)));
 					setDone(true);
 				} else {
 					itsBlock++;
@@ -287,7 +287,7 @@ void WritefCmd::saveTpAckEvent(GCFEvent& event)
 				TPReadfAckEvent tp_ack(event);
 				LOG_DEBUG_STR(formatString("Received ReadfAck from boardnr[%d]", getBoardNr()));	
 				if (tp_ack.status != 0) {
-					setStatus(0, (TBB_FLASH_ERROR | (tp_ack.status << 24)));
+					setStatus(0, (TBB_FLASH_VERIFY_ERROR | (tp_ack.status << 24)));
 					if (itsImage == 0) {
 						itsStage = protect;
 					} else {
@@ -295,15 +295,21 @@ void WritefCmd::saveTpAckEvent(GCFEvent& event)
 					}
 				} else {
 					for (int i = 0; i < (TS->flashBlockSize() / 4); i++) {
+						testdata = static_cast<uint32>(itsImageData[itsDataPtr])
+						         + (static_cast<uint32>(itsImageData[itsDataPtr+1]) << 8)
+						         + (static_cast<uint32>(itsImageData[itsDataPtr+2]) << 16)
+						         + (static_cast<uint32>(itsImageData[itsDataPtr+3]) << 24);
+						itsDataPtr += 4;
+						/*
 						testdata  = itsImageData[itsDataPtr]; itsDataPtr++;
 						testdata |= (itsImageData[itsDataPtr] << 8); itsDataPtr++; 
 						testdata |= (itsImageData[itsDataPtr] << 16); itsDataPtr++; 
 						testdata |= (itsImageData[itsDataPtr] << 24); itsDataPtr++;    
-		 
+						*/
 						if (tp_ack.data[i] != testdata) {
 							LOG_DEBUG_STR(formatString("block(%d) uint32(%d) NOT same 0x%08X 0x%08X (WritefCmd(verify_flash stage))",
 																			itsBlock,i,tp_ack.data[i],testdata));
-							setStatus(0, TBB_FLASH_ERROR);
+							setStatus(0, TBB_FLASH_VERIFY_ERROR);
 							if (itsImage == 0) {
 								itsStage = protect;
 							} else {
diff --git a/MAC/APL/PIC/TBB_Driver/src/WritefCmd.h b/MAC/APL/PIC/TBB_Driver/src/WritefCmd.h
index 7c1c1f57039..8d5afc102fc 100644
--- a/MAC/APL/PIC/TBB_Driver/src/WritefCmd.h
+++ b/MAC/APL/PIC/TBB_Driver/src/WritefCmd.h
@@ -66,16 +66,16 @@ public:
 private:
 	TbbSettings *TS;
 	
-	flashStage	itsStage;
-	int32		itsImage;
-	int32		itsSector;
-	int32		itsBlock;
-	int32		itsImageSize;
-	int32		itsDataPtr;
-	char		itsFileNameTp[64];
-	char		itsFileNameMp[64];
-	uint32	itsPassword;
-	uint8		*itsImageData; // data from hex files
+	flashStage itsStage;
+	int32      itsImage;
+	int32      itsSector;
+	int32      itsBlock;
+	int32      itsImageSize;
+	int32      itsDataPtr;
+	char       itsFileNameTp[64];
+	char       itsFileNameMp[64];
+	uint32     itsPassword;
+	uint8      *itsImageData; // data from hex files
 };
 
 	} // end TBB namespace
diff --git a/MAC/APL/PIC/TBB_Driver/src/tbbctl.h b/MAC/APL/PIC/TBB_Driver/src/tbbctl.h
index e2e378120ef..44b56395146 100644
--- a/MAC/APL/PIC/TBB_Driver/src/tbbctl.h
+++ b/MAC/APL/PIC/TBB_Driver/src/tbbctl.h
@@ -44,7 +44,7 @@ namespace LOFAR {
 
 GCFTimerPort* itsCmdTimer;
 
-static const int TBBCTL_VERSION = 215;
+static const int TBBCTL_VERSION = 219; // tbbctl V2.19
 
 // MAX_N_TBBOARDS and MAX_N_RCUS come from TBB_protocol.ph
 
@@ -142,8 +142,10 @@ public:
 			case TBB_TIME_OUT            : str = "time-out"; break;
 			case TBB_BUSY                : str = "driver busy"; break;
 			case TBB_FLASH_FILE_NOT_FIND : str = "hex files not found"; break;
-			case TBB_FLASH_ERROR         : str = "flash error"; break;
-			case TBB_FLASH_BAD_PASSWORD  : str = "bad password for image 0"; break;
+			case TBB_FLASH_BAD_PASSWORD  : str = "bad password for image 0"; break; 
+			case TBB_FLASH_ERASE_ERROR   : str = "flash erase error"; break;
+			case TBB_FLASH_WRITE_ERROR   : str = "flash write error"; break;
+			case TBB_FLASH_VERIFY_ERROR  : str = "flash verify error"; break;
 			case TBB_CH_NOT_FREE         : str = "channel not free"; break;
 			case TBB_CH_NOT_ALLOCATED    : str = "channel not allocated"; break;
 			case TBB_CH_NOT_STOPPED      : str = "channel not stopped"; break;
-- 
GitLab