plugins/consoles/vt100cons/src/serial/vtc_serial.cpp
changeset 27 17e35ffe449b
parent 0 7f656887cf89
--- a/plugins/consoles/vt100cons/src/serial/vtc_serial.cpp	Fri Aug 06 17:00:19 2010 +0100
+++ b/plugins/consoles/vt100cons/src/serial/vtc_serial.cpp	Tue Aug 10 12:33:46 2010 +0100
@@ -15,7 +15,7 @@
 
 const TInt KMaxWriteLength = 2 * 1024; // Some serial drivers fail with KErrNoMemory if writes are too big, so they have to be broken up.
 
-#define LEAVE_IF_ERROR_ALLOW_ALREADY_EXISTS(_x) { TInt _err = _x; if ((_err < 0) && (_err != KErrAlreadyExists)) { User::Leave(_err); } }
+#define ErrOrDebug(err) (((err) < 0  && (err) != KErrAlreadyExists) ? EError : EDebug)
 
 EXPORT_C CVtcSerialConsole::CVtcSerialConsole()
 	{
@@ -34,6 +34,7 @@
 	_LIT(KKeywordCsy, "csy");
 	_LIT(KKeywordPort, "port");
 	_LIT(KKeywordRate, "rate");
+	_LIT(KKeywordDebug, "debug");
 
 	TBool keywordFound(EFalse);
 	TLex lex(aConfigDes);
@@ -89,6 +90,11 @@
 				}
 			keywordFound = ETrue;
 			}
+		else if (keyword == KKeywordDebug)
+			{
+			aConfig.iDebug = ETrue;
+			keywordFound = ETrue;
+			}
 		}
 
 	if (!keywordFound)
@@ -103,18 +109,29 @@
 EXPORT_C void CVtcSerialConsole::ConstructL(const TDesC& aTitle)
 	{
 	TPortConfig portConfig;
-	User::LeaveIfError(ReadConfig(aTitle, portConfig));
+	TInt err = ReadConfig(aTitle, portConfig);
+	if (err)
+		{
+		Message(EError, _L("Error reading config: %d"), err);
+		User::LeaveIfError(err);
+		}
+
 	if (portConfig.iPort.Length() == 0)
 		{
 		User::Leave(KErrArgument);
 		}
+
+	if (portConfig.iDebug) SetDebug(ETrue);
+
 	if (portConfig.iPdd.Length())
 		{
-		LEAVE_IF_ERROR_ALLOW_ALREADY_EXISTS(User::LoadPhysicalDevice(portConfig.iPdd));
+		err = User::LoadPhysicalDevice(portConfig.iPdd);
+		Message(ErrOrDebug(err), _L("Loading PDD %S returned %d"), &portConfig.iPdd, err);
+		if (err != KErrAlreadyExists) User::LeaveIfError(err);
 		}
 	else
 		{
-		// If not specified, assume they probably intended the standard ones (but don't error if they fail, since the user might actually know what they're doing
+		// If not specified, assume they probably intended the standard ones (but don't error if they fail, since the user might actually know what they're doing)
 #ifdef __WINS__
 		User::LoadPhysicalDevice(_L("ecdrv"));
 #else
@@ -124,23 +141,31 @@
 
 	if (portConfig.iLdd.Length())
 		{
-		LEAVE_IF_ERROR_ALLOW_ALREADY_EXISTS(User::LoadLogicalDevice(portConfig.iLdd));
+		err = User::LoadLogicalDevice(portConfig.iLdd);
+		Message(ErrOrDebug(err), _L("Loading LDD %S returned %d"), &portConfig.iLdd, err);
+		if (err != KErrAlreadyExists) User::LeaveIfError(err);
 		}
 	else
 		{
 		User::LoadLogicalDevice(_L("ecomm"));
 		}
 
-	User::LeaveIfError(iCommServ.Connect());
+	err = iCommServ.Connect();
+	Message(ErrOrDebug(err), _L("Connecting to RCommServ returned %d"), err);
+	User::LeaveIfError(err);
 	if (portConfig.iCsy.Length())
 		{
-		LEAVE_IF_ERROR_ALLOW_ALREADY_EXISTS(iCommServ.LoadCommModule(portConfig.iCsy));
+		err = iCommServ.LoadCommModule(portConfig.iCsy);
+		Message(ErrOrDebug(err), _L("Loading CSY %S returned %d"), &portConfig.iCsy, err);
+		if (err != KErrAlreadyExists) User::LeaveIfError(err);
 		}
 	else
 		{
 		iCommServ.LoadCommModule(_L("ecuart"));
 		}
-	User::LeaveIfError(iCommPort.Open(iCommServ, portConfig.iPort, ECommExclusive));
+	err = iCommPort.Open(iCommServ, portConfig.iPort, ECommExclusive);
+	Message(ErrOrDebug(err), _L("Opening port %S returned %d"), &portConfig.iPort, err);
+	User::LeaveIfError(err);
 
 #ifdef __WINS__
 	// For BC reasons, we always set rate on WINS
@@ -160,7 +185,9 @@
 		cfg().iSpecialRate = 0;
 		cfg().iTerminatorCount = 0;
 		cfg().iSIREnable = ESIRDisable;
-		User::LeaveIfError(iCommPort.SetConfig(cfg));
+		err = iCommPort.SetConfig(cfg);
+		Message(ErrOrDebug(err), _L("Setting port config returned %d"), err);
+		User::LeaveIfError(err);
 		}
 	
 	User::LeaveIfError(iCommPort.ResetBuffers());