diff -r 000000000000 -r c6b0df440bee dbgagents/trkagent/engine/TrkEngineModel.cpp --- /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 + +#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; +}