dbgagents/trkagent/engine/TrkEngineModel.cpp
changeset 0 c6b0df440bee
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dbgagents/trkagent/engine/TrkEngineModel.cpp	Tue Mar 02 10:33:16 2010 +0530
@@ -0,0 +1,552 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include <f32file.h>
+
+#include "TrkEngineModel.h"
+
+
+//
+//
+// CTrkEngineModel implementation
+//
+//
+
+//
+// CTrkEngine::NewL
+//
+CTrkEngineModel* CTrkEngineModel::NewL()
+{
+	CTrkEngineModel* self = new(ELeave) CTrkEngineModel();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+
+}
+
+//
+// CTrkEngineModel::NewLC
+//
+CTrkEngineModel* CTrkEngineModel::NewLC()
+{
+	CTrkEngineModel* self = new(ELeave) CTrkEngineModel();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+}
+//
+// CTrkEngineModel::ConstructL()
+//
+// Second level constructor
+//
+void CTrkEngineModel::ConstructL()
+{ 
+ 
+    if (!iLoaded)
+    {
+        TRAP(iFileReadErr, LoadDataL());
+    
+        if (iFileReadErr != KErrNone)
+        {
+            //something went wrong in reading the ini file, just set the default values
+            iTrkConnData.iCommType = ESerialComm;
+            iTrkConnData.iConnType = ETrkSerial;
+            iTrkConnData.iPDD = KDefaultPDD;
+            iTrkConnData.iLDD = KDefaultLDD;
+            iTrkConnData.iCSY = KDefaultCSY;
+            iTrkConnData.iPortNumber = KDefaultPortNumber;
+            iTrkConnData.iRate = KDefaultRate;
+            iTrkConnData.iPlugPlay = ETrue;
+            
+            iTrkConnData.iDefault = ETrue;
+        }
+    }
+}
+
+//
+// CTrkEngineModel constructor
+//
+CTrkEngineModel::CTrkEngineModel()
+:iLineNumber(0),
+iLoaded(EFalse),
+iFileReadErr(0)
+{
+	iTrkConnData.iPortNumber = KDefaultUsbPortNumber;
+	iTrkConnData.iRate = KDefaultRate;
+}
+
+
+//
+// CTrkEngineModel destructor
+//
+CTrkEngineModel::~CTrkEngineModel()
+{
+
+}
+
+static TUint UintFromDecimalStringL(const TDesC8& aStr)
+{
+	TLex8 lexer(aStr);
+	TUint n;
+	if (lexer.Val(n, EDecimal) != KErrNone || !lexer.Eos())
+	{
+		User::Leave(KErrCorrupt);
+	}
+	return n;
+}
+
+//
+// CTrkEngineModel LoadDataL
+//
+void CTrkEngineModel::LoadDataL()
+{
+	RFs fs;
+	User::LeaveIfError(fs.Connect());
+	CleanupClosePushL(fs);
+
+	TFindFile findFile(fs);
+	
+	User::LeaveIfError(findFile.FindByDir(KInitFileName, KInitFilePath));
+
+	iInitFilePath = findFile.File();
+	
+	RFile file;
+	User::LeaveIfError(file.Open(fs, iInitFilePath, EFileStreamText|EFileRead));
+
+	iInitFilePath.ZeroTerminate();
+
+	CleanupClosePushL(file);
+
+	TInt size;
+	User::LeaveIfError(file.Size(size));
+	
+	HBufC8 *content = HBufC8::NewLC(size);
+	TPtr8 p(content->Des());
+	
+	User::LeaveIfError(file.Read(p));
+	
+	TLex8 lexer(*content);
+
+	iLineNumber = 1;
+	// skip any white space or blank lines
+	TChar ch = lexer.Peek();
+	while (!lexer.Eos() && (ch.IsSpace() || (ch == '\r') || (ch == '\n')))
+	{
+		lexer.Inc();
+		ch = lexer.Peek();
+	}
+	
+	if (lexer.Eos())
+	{
+		User::Leave(KErrCorrupt);
+	}
+	
+	// mark the token
+	lexer.Mark();
+	
+	lexer.Inc(KSerialComm().Length());
+
+	// the first thing in the init file has to be the comm type ([SERIALCOMM] or [SOCKETCOMM]) or [BTSOCKCOMM]
+	if (lexer.TokenLength() != KSerialComm().Length())
+	{
+		User::Leave(KErrCorrupt);
+	}
+
+	TPtrC8 commType = lexer.MarkedToken();
+
+	if (!commType.Compare(KSerialComm()))
+	{
+		iTrkConnData.iCommType = ESerialComm; //set to serial as the default comm type
+	}
+	else if (!commType.Compare(KDbgTrcComm()))
+	{
+		iTrkConnData.iCommType = EDbgTrcComm;
+		iTrkConnData.iConnType = ETrkUsbDbgTrc;	
+	}
+	else if (!commType.Compare(KBtSocketComm()))
+	{
+		iTrkConnData.iCommType = EBtSocket;
+		iTrkConnData.iConnType = ETrkBt;	
+	}
+	else if (!commType.Compare(KDCCComm()))
+	{
+		iTrkConnData.iCommType = EDcc;
+		iTrkConnData.iConnType = ETrkDcc;	
+	}
+	else if (!commType.Compare(KXTIComm()))
+	{
+		iTrkConnData.iCommType = EXti;
+		iTrkConnData.iConnType = ETrkXti;	
+	}	
+	else
+	{
+		User::Leave(KErrCorrupt);
+	}
+	
+	// skip white space and end of lines
+	ch = lexer.Peek();
+	while (!lexer.Eos() && (ch.IsSpace() || (ch == '\r') || (ch == '\n')))
+	{
+		if (ch == '\n')
+		{
+			iLineNumber++;
+		}
+
+		lexer.Inc();
+		ch = lexer.Peek();
+	}
+
+	// now read in the values
+	while (!lexer.Eos())
+	{
+		// mark the start of the token
+		lexer.Mark();
+
+		// read up to the next white space
+		ch = lexer.Peek();
+		while (!lexer.Eos() && !ch.IsSpace())
+		{
+			lexer.Inc();
+			ch = lexer.Peek();
+		}
+		
+		if (lexer.Eos())
+		{
+			User::Leave(KErrCorrupt);
+		}
+
+		// grab the token	
+		TPtrC8 token = lexer.MarkedToken();
+		
+		// mark the start of the value
+		lexer.SkipSpaceAndMark();
+
+		// read up to the next white space or end of line
+		ch = lexer.Peek();
+		while (!lexer.Eos() && !ch.IsSpace())
+		{			
+			if ((ch == '\r') || (ch == '\n'))
+			{
+				User::Leave(KErrCorrupt);
+			}
+			lexer.Inc();
+			ch = lexer.Peek();
+		}
+		
+		// grab the value
+		TPtrC8 value = lexer.MarkedToken();
+		
+		if (token == KPDD)
+		{
+			iTrkConnData.iPDD.Copy(value);
+		}
+		else if (token == KLDD)
+		{
+			iTrkConnData.iLDD.Copy(value);
+		}
+		else if (token == KCSY)
+		{
+			iTrkConnData.iCSY.Copy(value);
+		}
+		else if (token == KPort)
+		{
+			iTrkConnData.iPortNumber = UintFromDecimalStringL(value);
+		}
+		else if (token == KRate)
+		{
+			iTrkConnData.iRate = UintFromDecimalStringL(value);
+		}
+	    else if (token == KPlugPlay)
+	    {
+	    	iTrkConnData.iPlugPlay = UintFromDecimalStringL(value);
+		}
+		else
+		{
+			User::Leave(KErrCorrupt);
+		}
+
+		// skip white space and end of lines
+		ch = lexer.Peek();
+		while (!lexer.Eos() && (ch.IsSpace() || (ch == '\r') || (ch == '\n')))
+		{
+			if (ch == '\n')
+			{
+				iLineNumber++;
+			}
+
+			lexer.Inc();
+			ch = lexer.Peek();
+		}
+	}
+		
+	
+	//if the comm type is serial, the actual conn type could be USB or IR
+	if (iTrkConnData.iCommType == ESerialComm)
+	{		
+		TBuf8<32> csyModule;
+		csyModule.Copy(iTrkConnData.iCSY);
+		csyModule.UpperCase();
+		
+		if (csyModule == KDefaultUsbCSY)
+		{
+			iTrkConnData.iConnType = ETrkUsb;	
+		}
+		else if(csyModule == KDefaultIrCSY)
+		{
+			iTrkConnData.iConnType = ETrkIr;	
+		}
+		else
+		{
+			iTrkConnData.iConnType = ETrkSerial;	
+		}
+	}
+		
+	
+	iTrkConnData.iDefault = EFalse;
+	
+	iLoaded = ETrue; //read only once from the file system.
+	
+	CleanupStack::PopAndDestroy(content);
+	CleanupStack::PopAndDestroy(); // file
+	CleanupStack::PopAndDestroy(); // fs
+}
+
+//
+// CTrkEngineModel SaveDataL
+//
+void CTrkEngineModel::SaveDataL()
+{
+	RFs fs;
+	User::LeaveIfError(fs.Connect());
+	CleanupClosePushL(fs);
+
+//	RFile file;
+//	User::LeaveIfError(file.Open(fs, iInitFilePath, EFileStreamText|EFileRead|EFileWrite));
+//	CleanupClosePushL(file);
+	RFile file;
+	
+	if (!iInitFilePath.Size())
+	{
+		iInitFilePath = KInitFilePath;
+		iInitFilePath.Append(KInitFileName);
+	}
+	
+	//check to this if the file is in ROM, 
+	//If so, save it in C drive as Trk looks for the ini file in C drive first
+	if (iInitFilePath[0] == 'z' || iInitFilePath[0] == 'Z')
+	{
+		iInitFilePath[0] = 'C';
+	}
+
+	TInt err = file.Replace(fs, iInitFilePath, EFileStreamText|EFileWrite);
+	if (err != KErrNone)
+	{
+		User::LeaveIfError(file.Create(fs, iInitFilePath, EFileStreamText|EFileWrite));
+	}
+	CleanupClosePushL(file);
+
+	TBuf8<1024> fileBuf;
+	TBuf<25> buf;
+	if (iTrkConnData.iCommType == ESerialComm)
+	{	
+		fileBuf.Copy(KSerialComm);
+		fileBuf.Append(KNewLine);
+			
+		//write PDD info		
+		fileBuf.Append(KPDD);
+		fileBuf.Append(KSpace);
+		fileBuf.Append(iTrkConnData.iPDD);
+		fileBuf.Append(KNewLine);
+
+		//write LDD
+		fileBuf.Append(KLDD);
+		fileBuf.Append(KSpace);
+		fileBuf.Append(iTrkConnData.iLDD);
+		fileBuf.Append(KNewLine);
+				
+		//write CSY
+		fileBuf.Append(KCSY);
+		fileBuf.Append(KSpace);
+		fileBuf.Append(iTrkConnData.iCSY);
+		fileBuf.Append(KNewLine);
+
+		//write port number
+		_LIT(KPortSetting, "PORT %d\r\n");
+		buf.Format(KPortSetting, iTrkConnData.iPortNumber); 	
+		fileBuf.Append(buf);
+	
+		//write baud rate
+		_LIT(KRateSetting, "RATE %d");
+		buf.Format(KRateSetting, iTrkConnData.iRate); 	
+		fileBuf.Append(buf);
+		fileBuf.Append(KNewLine);
+		//fileData8.Copy(fileData16);
+	}
+	else if (iTrkConnData.iCommType == EDbgTrcComm)
+	{
+		fileBuf.Copy(KDbgTrcComm);
+		fileBuf.Append(KNewLine);
+
+		//write port number
+		_LIT(KPortSetting, "PORT %d\r\n");
+		buf.Format(KPortSetting, iTrkConnData.iPortNumber); 	
+		fileBuf.Append(buf);
+	
+		//write baud rate
+		_LIT(KRateSetting, "RATE %d");
+		buf.Format(KRateSetting, iTrkConnData.iRate); 	
+		fileBuf.Append(buf);
+		fileBuf.Append(KNewLine);
+	}
+	else if (iTrkConnData.iCommType == EBtSocket)
+	{
+		fileBuf.Copy(KBtSocketComm);
+		fileBuf.Append(KNewLine);
+
+		//write port number
+		_LIT(KPortSetting, "PORT %d\r\n");
+		buf.Format(KPortSetting, iTrkConnData.iPortNumber); 	
+		fileBuf.Append(buf);
+	
+		//write baud rate
+		_LIT(KRateSetting, "RATE %d");
+		buf.Format(KRateSetting, iTrkConnData.iRate); 	
+		fileBuf.Append(buf);
+		fileBuf.Append(KNewLine);		
+	}
+	else if(iTrkConnData.iCommType == EDcc)
+	{
+		fileBuf.Copy(KDCCComm);
+		fileBuf.Append(KNewLine);
+
+		//write LDD
+		fileBuf.Append(KLDD);
+		fileBuf.Append(KSpace);
+		fileBuf.Append(KTrkDCCLDD);	
+		fileBuf.Append(KNewLine);
+
+		//write port number
+		_LIT(KPortSetting, "PORT %d\r\n");
+		buf.Format(KPortSetting, KDefaultDCCPort); 	
+		fileBuf.Append(buf);
+		fileBuf.Append(KNewLine);		
+	}
+	else if(iTrkConnData.iCommType == EXti)
+	{
+		fileBuf.Copy(KXTIComm);
+		fileBuf.Append(KNewLine);
+
+		//write LDD
+		fileBuf.Append(KLDD);
+		fileBuf.Append(KSpace);
+		fileBuf.Append(KTrkXTILDD);	
+		fileBuf.Append(KNewLine);
+	}
+	else
+	{
+		User::Leave(KErrCorrupt);
+	}
+	
+    _LIT(KPlugPlaySetting, "PlugPlay %d");
+    buf.Format(KPlugPlaySetting, iTrkConnData.iPlugPlay);   
+    fileBuf.Append(buf);
+	
+	file.Write(fileBuf);
+	file.Flush();
+	
+	CleanupStack::PopAndDestroy(); // file
+	CleanupStack::PopAndDestroy(); // fs
+}
+
+//
+// CTrkEngineModel GetConnData
+//
+TInt CTrkEngineModel::GetConnData(TTrkConnData& aTrkConnData)
+{
+   
+	aTrkConnData = iTrkConnData;
+	return iFileReadErr;
+}
+
+//
+// CTrkEngineModel GetDefaultConnData
+//
+TInt CTrkEngineModel::GetDefaultConnData(TTrkConnType aConnType, TTrkConnData& aTrkConnData)
+{
+	switch (aConnType)
+	{
+		case ETrkUsbDbgTrc:
+		{		
+			aTrkConnData.iCommType = EDbgTrcComm;
+			aTrkConnData.iConnType = ETrkUsbDbgTrc;
+			aTrkConnData.iPDD.Copy(KDefaultUsbPDD);
+			aTrkConnData.iLDD.Copy(KDefaultUsbLDD);
+			aTrkConnData.iCSY.Copy(KDefaultUsbCSY);
+			aTrkConnData.iPortNumber = KDefaultUsbPortNumber;
+			aTrkConnData.iRate = KDefaultRate;		
+			aTrkConnData.iPlugPlay = iTrkConnData.iPlugPlay;
+			aTrkConnData.iDefault = ETrue;	
+		
+			return KErrNone;
+		}
+		case ETrkXti:
+		{
+            aTrkConnData.iCommType = EXti;
+            aTrkConnData.iConnType = ETrkXti;
+            aTrkConnData.iPDD.Copy(KNullDesC);
+	        aTrkConnData.iLDD.Copy(KTrkXTILDD);
+	        aTrkConnData.iCSY.Copy(KNullDesC);
+	       // aTrkConnData.iPortNumber = KDefaultUsbPortNumber;
+	       // aTrkConnData.iRate = KDefaultRate;      
+	        aTrkConnData.iPlugPlay = ETrue; 
+			aTrkConnData.iDefault = ETrue;	
+			aTrkConnData.iPlugPlay = iTrkConnData.iPlugPlay;
+		
+			return KErrNone;
+		}
+		default:
+		{
+			return KErrNotFound;	
+		}
+	}	
+}
+
+//
+// CTrkEngineModel SaveDataL
+//
+TInt CTrkEngineModel::SetConnData(TTrkConnData& aTrkConnData)
+{
+	iTrkConnData = aTrkConnData;
+	
+	TRAPD(err, SaveDataL());
+	
+	return err;
+}
+
+//
+// CTrkEngineModel::GetPlugPlaySettingValue()
+//
+
+TBool CTrkEngineModel::GetPlugPlaySettingValue()
+{
+    if(iTrkConnData.iPlugPlay)
+        return ETrue;
+    else
+        return EFalse;
+}