diff -r 000000000000 -r 14df0fbfcc4e sapi_sysinfo/sysinfoservice/src/deviceinfo.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sapi_sysinfo/sysinfoservice/src/deviceinfo.cpp Mon Mar 30 12:51:10 2009 +0300 @@ -0,0 +1,277 @@ +/* +* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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: class implementation +* +*/ + +#include +#include + +#include "sysinfoservice.h" +#include "SysInfoUtils.h" +#include "entitykeys.h" +#include "deviceinfo.h" + +_LIT(KROMInstallDir,"\\system\\install\\"); +_LIT(KS60ProductIdFile,"Series60v*.sis"); +_LIT(KProductIdentifier,"RM"); +_LIT(KProductUnknown,"Unknown"); + +const TInt KPositionNine = 9; + +// -------------------------------------------------------------------- +// CDeviceInfo::CDeviceInfo() +// C++ default constructor. +// -------------------------------------------------------------------- +// +CDeviceInfo::CDeviceInfo(): + iPlatformMajorVersion(0), + iPlatformMinorVersion(0), + iOSMajorVersion(0), + iOSMinorVersion(0) + { + } + +// -------------------------------------------------------------------- +// CDeviceInfo::~CDeviceInfo() +// Destructor. +// -------------------------------------------------------------------- +// +CDeviceInfo::~CDeviceInfo() + { + delete iProductType; + } + +// -------------------------------------------------------------------- +// CDeviceInfo::NewL() +// Two-phased constructor, returns instance of this class. +// -------------------------------------------------------------------- +// +CDeviceInfo* CDeviceInfo::NewL() + { + CDeviceInfo* self; + self = new (ELeave) CDeviceInfo(); + + CleanupStack::PushL(self); + self->ConstructL (); + CleanupStack::Pop(self); + + return self; + } + +// -------------------------------------------------------------------- +// CDeviceInfo::NewL() +// 2nd Phase constructor to allocate required resources for this obj. +// -------------------------------------------------------------------- +// +void CDeviceInfo::ConstructL () + { + GetDeviceInfoL(); + } + +// -------------------------------------------------------------------- +// CDeviceInfo::GetDeviceInfoL() +// This function reads device information initializes member varialbes. +// -------------------------------------------------------------------- +// +void CDeviceInfo::GetDeviceInfoL() + { + //get firmware version + User::LeaveIfError(SysUtil::GetSWVersion(iFirmwareVersion)); + + //get platform version + RFs fs; + CDir* result; + + CleanupClosePushL(fs); + User::LeaveIfError(fs.Connect()); + + TFindFile ff(fs); + TInt err(KErrNone); + err = ff.FindWildByDir(KS60ProductIdFile,KROMInstallDir,result); + if(!err) + { + CleanupStack::PushL(result); + User::LeaveIfError(result->Sort(ESortByName|EDescending)); + + if(result->Count() >= 0) + { + TPtrC filename = (*result)[0].iName; + TLex parser((filename)); + parser.Inc(KPositionNine); + + // Get major version value + err = parser.Val(iPlatformMajorVersion); + + if( parser.Get() != '.' || err ) + { + iPlatformMajorVersion = 0; + } + else + { + // Get minor version value + err = parser.Val(iPlatformMinorVersion); + if( err ) + { + iPlatformMajorVersion = 0; + iPlatformMinorVersion = 0; + } + } + } + // clean up result + CleanupStack::PopAndDestroy(result); + } + // clean up file session fs. + CleanupStack::PopAndDestroy(&fs); + + //get machine id and symbian OS version + HAL::Get(HALData::EMachineUid, iMachineId); + + //get product type + ProcessProductTypeL(); + + // Session to the telephony server. + RTelServer telserver; + //RMobilePhone handle. + RMobilePhone mobilephone; + + CleanupClosePushL(telserver); + CleanupClosePushL(mobilephone); + + User::LeaveIfError(RPhoneInstance::Connect( telserver,mobilephone )); + + //get phone manufacturer,model,IMEI + TRequestStatus Status = KRequestPending; + mobilephone.GetPhoneId(Status,iPhoneIdentity); + User::WaitForRequest(Status); + + //Close Phone handle. + CleanupStack::PopAndDestroy(2,&telserver); + } + +// -------------------------------------------------------------------- +// CDeviceInfo::ProcessProductType() +// This function does lexical processing on Firmware version to read +// product type. +// -------------------------------------------------------------------- +// +void CDeviceInfo::ProcessProductTypeL() + { + TBuf versionString(KNullDesC); + TPtrC ProductType(KNullDesC); + const TChar KNewLine('\n'); + + versionString.Copy(iFirmwareVersion); + + TInt offset = versionString.FindF(KProductIdentifier); + if( KErrNotFound != offset) + { + TPtr productinfo = versionString.MidTPtr(offset); + //search new line charecter. + offset = productinfo.LocateF(KNewLine); + if( KErrNotFound != offset ) + { + ProductType.Set(productinfo.Left(offset)); + } + } + + iProductType = ProductType.AllocL(); + } + +// -------------------------------------------------------------------- +// CDeviceInfo::ProductType() +// returns product type. +// -------------------------------------------------------------------- +// +TPtrC CDeviceInfo::ProductType() const + { + if( iProductType->Des() == KNullDesC ) + return TPtrC(KProductUnknown); + else + return TPtrC(*iProductType); + } + +// -------------------------------------------------------------------- +// CDeviceInfo::FirmwareVersion() +// returns firmware version. +// -------------------------------------------------------------------- +// +TPtrC CDeviceInfo::FirmwareVersion() const + { + return TPtrC(iFirmwareVersion); + } + +// -------------------------------------------------------------------- +// CDeviceInfo::Manufaturer() +// returns Manufacture name. +// -------------------------------------------------------------------- +// +TPtrC CDeviceInfo::Manufaturer() const +{ + return TPtrC(iPhoneIdentity.iManufacturer); +} + +// -------------------------------------------------------------------- +// CDeviceInfo::Model() +// returns Phone Model. +// -------------------------------------------------------------------- +// +TPtrC CDeviceInfo::Model() const + { + return TPtrC(iPhoneIdentity.iModel); + } + +// -------------------------------------------------------------------- +// CDeviceInfo::IMEI() +// returns Serial number. +// -------------------------------------------------------------------- +// +TPtrC CDeviceInfo::IMEI() const + { + return TPtrC(iPhoneIdentity.iSerialNumber); + } + +// -------------------------------------------------------------------- +// CDeviceInfo::MachineId() +// returns Machine ID. +// -------------------------------------------------------------------- +// +TInt CDeviceInfo::MachineId() const + { + return iMachineId; + } + +// -------------------------------------------------------------------- +// CDeviceInfo::GetPlatformVersion() +// returns PLATFORM VERSION NUMBER. +// -------------------------------------------------------------------- +// +void CDeviceInfo::GetPlatformVersion(TInt& aMajor,TInt& aMinor) + { + aMajor = iPlatformMajorVersion; + aMinor = iPlatformMinorVersion; + } + +// -------------------------------------------------------------------- +// CDeviceInfo::GetOSVersion() +// returns OS VERSION NUMBER. +// -------------------------------------------------------------------- +// +void CDeviceInfo::GetOSVersion(TInt& aMajor,TInt& aMinor) + { + aMajor = iOSMajorVersion; + aMinor = iOSMinorVersion; + } + +//End of file.