sapi_sysinfo/sysinfoservice/src/deviceinfo.cpp
changeset 0 14df0fbfcc4e
--- /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 <hal.h>
+#include <SysUtil.h>
+
+#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<KSysUtilVersionTextLength> 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.