cbsref/telephonyrefplugins/atltsy/atcommand/generic/src/tsyconfg.cpp
branchRCL_3
changeset 65 630d2f34d719
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cbsref/telephonyrefplugins/atltsy/atcommand/generic/src/tsyconfg.cpp	Tue Aug 31 16:23:08 2010 +0300
@@ -0,0 +1,487 @@
+// Copyright (c) 2009 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:
+// @file tsyconfig.cpp
+// This contains CTsyConfig which manage access to CommDB configuration.
+// 
+
+// system include
+#include <commsdattypesv1_1.h>
+#include <commsdat_partner.h>
+using namespace CommsDat;
+
+// user include
+#include "tsyconfg.h"
+#include "mslogger.h"
+
+#ifdef __LOGDEB__
+_LIT8(KLogEntry,"CTsyConfig::%S\t%S");
+#define LOCAL_LOGTEXT(function,text) {_LIT8(F,function);_LIT8(T,text);LOGTEXT3(KLogEntry,&F,&T);}
+#else
+#define LOCAL_LOGTEXT(function,text)
+#endif
+
+// const defination
+const TInt KDefaultLocationInternalPref = 0;
+const RCall::TMonitorSpeakerControl KDefaultModemSpeakerSetting = RCall::EMonitorSpeakerControlOnUntilCarrier;
+const RCall::TMonitorSpeakerVolume KDefaultMonitorSpeakerVolume = RCall::EMonitorSpeakerVolumeOff;
+const RCall::TWaitForDialTone KDefaultWaitForDialTone = RCall::EDialToneNoWait;
+
+// ---------------------------------------------------------------------------
+// CTsyConfig::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CTsyConfig* CTsyConfig::NewL() 
+	{
+	CTsyConfig* self = new(ELeave) CTsyConfig();
+	CleanupStack::PushL(self);
+	self->ConstructL(); 
+	CleanupStack::Pop();
+	return (self);
+	}
+
+// ---------------------------------------------------------------------------
+// CTsyConfig::CTsyConfig
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CTsyConfig::CTsyConfig()
+	{	
+	}
+
+// ---------------------------------------------------------------------------
+// CTsyConfig::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CTsyConfig::ConstructL()
+	{
+	iLocationId = 0;
+	iModemBearer = 0;
+	SetCurrentTableViewL();
+	GetLocationModemSettingsL();
+	}
+
+// ---------------------------------------------------------------------------
+// CTsyConfig::SetCurrentTableViewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CTsyConfig::SetCurrentTableViewL()
+	{
+	TInt r = KErrNone;
+
+	for (TInt i = 0; i < 10; i++)
+		{
+		TRAP(r, GetCurrentTableViewsL()); // Place a cursor on the default modem record in comms database server
+		if (r == KErrAccessDenied)        // if we get access denied from DBMS, which is a timing thing, just re-post
+			{
+			User::After(1000000);
+			continue;
+			}
+		else
+			{
+			break;
+			}
+		}
+	
+	if(r)
+		{
+		LOGTEXT(_L8("CommDB values seem to be corrupt"));
+		User::Leave(KErrEtelModemSettingsCorrupt);
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CTsyConfig::GetLocationModemSettingsL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CTsyConfig::GetLocationModemSettingsL()
+	{
+	ASSERT(iModemBearer != 0);
+	
+	iSpeakerSetting = KDefaultModemSpeakerSetting;
+	iSpeakerVolume = KDefaultMonitorSpeakerVolume;
+	
+	if(iLocationId == 0)
+		{
+		iInterval = KDefaultLocationInternalPref;
+		iWaitForDialTonePref = KDefaultWaitForDialTone;
+		}
+	else
+		{
+		TBool value(EFalse);
+		CMDBField<TUint32>* intervalField = new(ELeave) CMDBField<TUint32>(KCDTIdPauseAfterDialOut);
+		CleanupStack::PushL(intervalField);
+		intervalField->SetRecordId(iLocationId);
+		intervalField->LoadL(*iDbSession);
+		iInterval = *intervalField;
+		CleanupStack::PopAndDestroy(intervalField);
+		
+		CMDBField<TUint32>* valueField = new(ELeave) CMDBField<TUint32>(KCDTIdWaitForDialTone);		
+		CleanupStack::PushL(valueField);
+		valueField->SetRecordId(iLocationId);
+		valueField->LoadL(*iDbSession);
+		value = *valueField;
+		CleanupStack::PopAndDestroy(valueField);
+		
+		if (value)
+			{
+			iWaitForDialTonePref = RCall::EDialToneWait;
+			}
+		else
+			{
+			iWaitForDialTonePref = RCall::EDialToneNoWait;
+			}
+		}
+
+    // read speaker preferences
+	CMDBField<TUint32>* speakerPrefField = new(ELeave) CMDBField<TUint32>(KCDTIdSpeakerPref);
+	CleanupStack::PushL(speakerPrefField);
+	speakerPrefField->SetRecordId(iModemBearer);
+	speakerPrefField->LoadL(*iDbSession);
+	iSpeakerSetting = static_cast<RCall::TMonitorSpeakerControl>(static_cast<TUint32>(*speakerPrefField));
+	CleanupStack::PopAndDestroy(speakerPrefField);
+	
+	// read speaker volume preferences
+	CMDBField<TUint32>* speakerVolPrefField = new(ELeave) CMDBField<TUint32>(KCDTIdSpeakerVolPref);
+	CleanupStack::PushL(speakerVolPrefField);
+	speakerVolPrefField->SetRecordId(iModemBearer);
+	speakerVolPrefField->LoadL(*iDbSession);
+	iSpeakerVolume = static_cast<RCall::TMonitorSpeakerVolume>(static_cast<TUint32>(*speakerVolPrefField));			
+	CleanupStack::PopAndDestroy(speakerVolPrefField);
+
+    // read modem rate
+	CMDBField<TUint32>* rateField = new(ELeave) CMDBField<TUint32>(KCDTIdRate);
+	CleanupStack::PushL(rateField);
+	rateField->SetRecordId(iModemBearer);
+	rateField->LoadL(*iDbSession);
+	TUint32 rate;
+	rate = *rateField;
+	CleanupStack::PopAndDestroy(rateField);
+	
+	// read data bits for modem
+	CMDBField<TUint32>* dataBitsField = new(ELeave) CMDBField<TUint32>(KCDTIdDataBits);
+	CleanupStack::PushL(dataBitsField);
+	dataBitsField->SetRecordId(iModemBearer);
+	dataBitsField->LoadL(*iDbSession);
+	TUint32 dataBits;
+	dataBits = *dataBitsField;
+	CleanupStack::PopAndDestroy(dataBitsField);
+    
+	// read stop bits for modem
+	CMDBField<TUint32>* stopBitsField = new(ELeave) CMDBField<TUint32>(KCDTIdStopBits);
+	CleanupStack::PushL(stopBitsField);
+	stopBitsField->SetRecordId(iModemBearer);
+	stopBitsField->LoadL(*iDbSession);
+	TUint32 stopBits;
+	stopBits = *stopBitsField;
+	CleanupStack::PopAndDestroy(stopBitsField);
+	
+	// read parity for modem
+	CMDBField<TUint32>* parityField = new(ELeave) CMDBField<TUint32>(KCDTIdParity);
+	CleanupStack::PushL(parityField);
+	parityField->SetRecordId(iModemBearer);
+	parityField->LoadL(*iDbSession);
+	TUint32 parity;
+	parity = *parityField;
+	CleanupStack::PopAndDestroy(parityField);
+	
+	// read handshake for modem
+	CMDBField<TUint32>* handshakeField = new(ELeave) CMDBField<TUint32>(KCDTIdHandshaking);
+	CleanupStack::PushL(handshakeField);
+	handshakeField->SetRecordId(iModemBearer);
+	handshakeField->LoadL(*iDbSession);
+	TUint32 handshake;
+	handshake = *handshakeField;
+	CleanupStack::PopAndDestroy(handshakeField);
+    
+	// set the modem configuration
+	iConfig.iRate = (TBps)rate;
+	iConfig.iDataBits = (TDataBits)dataBits;
+	iConfig.iStopBits = (TStopBits)stopBits;
+	iConfig.iParity = (TParity)parity;
+	iConfig.iHandshake = handshake;
+	}
+
+// ---------------------------------------------------------------------------
+// CTsyConfig::~CTsyConfig
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CTsyConfig::~CTsyConfig()
+	{
+	delete iDbSession;
+	}
+
+// ---------------------------------------------------------------------------
+// CTsyConfig::ConfigModemStringL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TInt CTsyConfig::ConfigModemStringL(const TDesC& aStringTag, TDes8& aString)
+	{
+	ASSERT(iDbSession != 0);
+	CCDModemBearerRecord* modemRecord = static_cast<CCDModemBearerRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdModemBearerRecord));
+	CleanupStack::PushL(modemRecord);
+	modemRecord->SetRecordId(iModemBearer);
+	modemRecord->LoadL(*iDbSession);
+	
+	TInt ret;
+	TInt type(0);
+	CMDBElement* baseField = NULL;
+	TRAP(ret, baseField = modemRecord->GetFieldByNameL(aStringTag, type));
+	if (ret == KErrNone)
+		{
+		// check for type
+		switch(type)
+			{
+			case EMedText:
+			case EText:
+				{
+				CMDBField<TDesC>* field16 = static_cast<CMDBField<TDesC>*>(baseField);
+				const TDesC& refField = *field16;
+				aString.Copy(refField);
+				ret = KErrNone;
+				}
+				break;
+			case EDesC8:
+				{
+				CMDBField<TDesC8>* field = static_cast<CMDBField<TDesC8>*>(baseField);
+				aString = *field;
+				ret = KErrNone;
+				}
+				break;
+			default:
+				ret = KErrNotFound;
+			}
+    	}
+	CleanupStack::PopAndDestroy(modemRecord);
+
+	return ret;
+	}
+
+// ---------------------------------------------------------------------------
+// CTsyConfig::ConfigModemStringL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TInt CTsyConfig::ConfigModemStringL(const TDesC& aStringTag, TDes16& aString)
+	{
+	ASSERT(iDbSession != 0);
+	// get the table record
+	CCDModemBearerRecord* modemRecord = static_cast<CCDModemBearerRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdModemBearerRecord));
+	CleanupStack::PushL(modemRecord);
+	modemRecord->SetRecordId(iModemBearer);
+	modemRecord->LoadL(*iDbSession);
+	
+	TInt ret;
+	TInt type(0);
+	CMDBElement* baseField = NULL;
+	TRAP(ret, baseField = modemRecord->GetFieldByNameL(aStringTag, type));
+	if (ret == KErrNone)
+		{
+		// check for type
+		switch(type)
+			{
+			case EMedText:
+			case EText:
+				{
+				CMDBField<TDesC>* field = static_cast<CMDBField<TDesC>*>(baseField);
+				aString = *field;
+				ret = KErrNone;
+				}
+				break;
+			case EDesC8:
+				{
+				// des16 needs to be cast to des8
+				CMDBField<TDesC8>* field8 = static_cast<CMDBField<TDesC8>*>(baseField);
+				const TDesC8& refField = *field8;
+				aString.Copy(refField);
+				ret = KErrNone;
+				}
+				break;
+			default:
+				ret = KErrNotFound;
+			}
+		}
+	
+	CleanupStack::PopAndDestroy(modemRecord);
+
+	return ret;
+	}
+
+// ---------------------------------------------------------------------------
+// CTsyConfig::GetSpeakerSettingPref
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CTsyConfig::GetSpeakerSettingPref(RCall::TMonitorSpeakerControl& aSpeakerSetting)
+	{
+	aSpeakerSetting = iSpeakerSetting;
+	}
+
+// ---------------------------------------------------------------------------
+// CTsyConfig::GetSpeakerVolumePref
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CTsyConfig::GetSpeakerVolumePref(RCall::TMonitorSpeakerVolume& aSpeakerVolume)
+	{
+	aSpeakerVolume = iSpeakerVolume;
+	}
+
+// ---------------------------------------------------------------------------
+// CTsyConfig::GetWaitForDialTonePref
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CTsyConfig::GetWaitForDialTonePref(RCall::TWaitForDialTone& aWaitForDialTonePref)
+	{
+	aWaitForDialTonePref = iWaitForDialTonePref;
+	}
+
+// ---------------------------------------------------------------------------
+// CTsyConfig::PortConfig
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TInt CTsyConfig::PortConfig(TCommConfig& aConfigPckg, TConfigType aConfigType)
+	{
+	TCommConfig configDummyPckg;
+	TCommConfigV01& config = configDummyPckg();
+	config = iConfig;
+	
+	if (aConfigType==EConfigTypeHangUp ||
+		aConfigType==EConfigTypeQuickInit)
+		{
+		config.iHandshake = 0;//&= (~(KConfigFailDCD | KConfigObeyDCD | KConfigFailDSR));
+		}
+	else
+		{
+		switch (aConfigType)
+			{
+		case EConfigTypePreInit:
+			config.iHandshake &= (~(KConfigObeyCTS | KConfigFailCTS | KConfigObeyDCD | KConfigFailDCD | KConfigFailDSR));
+			break;
+		case EConfigTypeInit:
+			config.iHandshake &= (~(KConfigObeyCTS | KConfigFailCTS | KConfigObeyDCD | KConfigFailDCD));
+			break;
+		case EConfigTypeConnect:
+			config.iHandshake &= (~(KConfigFailCTS | KConfigFailDCD));	// fail DCD masked out, as should get NO CARRIER anyway
+			break;
+		case EConfigTypeFull:
+			break;
+		case EConfigTypeDDBugWorkAroundStart:
+			if (config.iRate!=EBps300)	// ensure that something other than handshaking has changed
+				config.iRate=EBps300;	// to work around the bug in the ARM device driver
+			else
+				config.iRate=EBps2400;
+			config.iHandshake=0;
+			break;
+		case EConfigTypeDDBugWorkAroundEnd:
+			config.iHandshake=0;
+			break;
+		default:
+			break;
+			}
+		}
+	
+	aConfigPckg=configDummyPckg;
+	return KErrNone;
+	}
+
+// ---------------------------------------------------------------------------
+// CTsyConfig::GetCurrentTableViewsL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CTsyConfig::GetCurrentTableViewsL() 
+	{
+	ResetCurrentTableViews();
+	
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+	iDbSession = CMDBSession::NewL(KCDVersion1_2);
+#else
+	iDbSession = CMDBSession::NewL(KCDVersion1_1);
+#endif
+
+	iModemBearer = 0;
+	iLocationId = 0;
+	// Search the bearer tables for records using the Phonetsy.TSY
+	GetModemBearerIdL(iModemBearer);
+
+	// Get the associated locationId
+	GetLocationIdL(iModemBearer,iLocationId);
+	
+	//Check if the selected bearer is an MMTSY bearer with a valid location
+	if(!iModemBearer || !iLocationId) 
+		{
+		//
+		// Selected bearer does not mention the MMTSY
+		LOCAL_LOGTEXT("GetCurrentSettingsL","PhoneTSY not mentioned in the selected bearer");
+		User::Leave(KErrNotFound);
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CTsyConfig::ResetCurrentTableViews
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CTsyConfig::ResetCurrentTableViews()
+	{
+	delete iDbSession;
+	iDbSession = NULL;		
+	}
+
+// ---------------------------------------------------------------------------
+// CTsyConfig::GetLocationIdL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CTsyConfig::GetLocationIdL(const TUint32& aBearerId, TUint32& aLocationId) 
+ 	{
+    CCDIAPRecord *iapRecord = static_cast<CCDIAPRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdIAPRecord));
+  	CleanupStack::PushL(iapRecord);
+  	
+  	iapRecord->iBearer = aBearerId;
+  	TBool err = iapRecord->FindL(*iDbSession);
+  	if (err)
+  		{
+  		aLocationId = iapRecord->iLocation;
+  		}
+  	else
+  		{
+  		aLocationId = static_cast<TUint32>(KErrNotFound);
+  		}
+  	
+    CleanupStack::PopAndDestroy(iapRecord);
+    
+	}
+
+// ---------------------------------------------------------------------------
+// CTsyConfig::GetModemBearerIdL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CTsyConfig::GetModemBearerIdL(TUint32& aBearerId)
+	{
+    CCDModemBearerRecord *modemRecord = static_cast<CCDModemBearerRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdModemBearerRecord));
+    CleanupStack::PushL(modemRecord);
+    
+    _LIT(KTsyName,"phonetsy"); // Note this is case sensitive and must match the name in commdb
+    modemRecord->iTsyName.SetMaxLengthL(KMaxTextLength);
+    modemRecord->iTsyName = KTsyName;
+    
+    TBool searchResult = modemRecord->FindL(*iDbSession);
+    
+    if (searchResult)
+	    {
+		aBearerId = modemRecord->RecordId();	
+	    }
+	else
+		{
+		aBearerId = static_cast<TUint32>(KErrNotFound);
+		}
+    
+    CleanupStack::PopAndDestroy(modemRecord);
+	}
+
+// End of file