sysstatemgmt/systemstatereferenceplugins/custcmd/src/ssmuiproviderdlldefault.cpp
branchRCL_3
changeset 21 ccb4f6b3db21
parent 7 1fc153c72b60
child 22 8cb079868133
--- a/sysstatemgmt/systemstatereferenceplugins/custcmd/src/ssmuiproviderdlldefault.cpp	Thu Aug 19 11:09:10 2010 +0300
+++ b/sysstatemgmt/systemstatereferenceplugins/custcmd/src/ssmuiproviderdlldefault.cpp	Tue Aug 31 16:29:05 2010 +0300
@@ -22,8 +22,20 @@
 #include "ssmpanic.h"
 #include <e32property.h>
 #include "ssmdebug.h"
+#include <f32file.h>
+#include <ctsydomainpskeys.h>
+#include <mmtsy_names.h>
+#include <pathinfo.h>
+#include <securitynotification.h>
+#include <ssm/ssmstate.h>
+#include <startupdomainpskeys.h>
+#include "ssmmapperutilitystatic.h"
+#include "ssmmapperutilityinternalpskeys.h"
+#include "ssmsubstateext.hrh"
+#include "ssmswp.hrh"
+#include "trace.h"
 
-const TUid KPSStartupUid = {0x2000E65E};
+const TUid KPSStartupDefaultUid = {0x2000E65E};
 const TUid KSecurityPinNotifierUid = {0x2000E667};
 const TUid KScreenOutputChannel = {0x10009D48};
 const TUid KEmergencyCallPropertyCategory = {0x2001032C};
@@ -40,8 +52,17 @@
 //Number of clusterSize to be reserve for phone memory space 
 const TInt KNumberOfCluster = 2;
 
-_LIT(KTsyModuleName, "mm.tsy");
-_LIT(KTsyPhoneName, "GsmPhone1");
+//For test code
+/** Channel used to communicate with Security Notifier. */
+static const TUid KSecurityNotifierChannel = { 0x1000598F };
+
+// Type definitions for a buffer containing a drive id (drive letter + :).
+const TInt KDriveIdLength = 2;
+typedef TBuf<KDriveIdLength> TDriveId;
+
+const TUint32 KMiscPluginPropertyKey = 0x2000E658;
+const TUid KPropertyCategory={0x2000D75B};              // tcustomcmd_server SID = KSsmServerName SID (changed in tcustomcmd_server.mmp file)
+
 
 CSsmUiSpecific::CSsmUiSpecific()
 : iReferenceCount(1), iReservedPhoneMemory(0)
@@ -55,36 +76,85 @@
 
 EXPORT_C TUid CSsmUiSpecific::StartupPSUid()
 	{
-	return KPSStartupUid;
+	if (!IsTestPsKeyDefined())
+        {
+        DEBUGPRINT1A("StartupPSUid :: Calling S60 plugins functions ");
+        return KPSUidStartup;        
+        }
+    else
+        {
+        DEBUGPRINT1A("StartupPSUid :: Calling Symbian(dummy) plugins functions ");
+        return KPSStartupDefaultUid;
+        }	
 	}
 
 EXPORT_C TUid CSsmUiSpecific::SecurityPinNotifierUid()
 	{
-	return KSecurityPinNotifierUid;
+	if (!IsTestPsKeyDefined())
+        {
+        DEBUGPRINT1A("SecurityPinNotifierUid :: Calling S60 plugins functions ");
+        return KSecurityNotifierUid;  
+        }
+    else
+        {
+        DEBUGPRINT1A("SecurityPinNotifierUid :: Calling Symbian(dummy) plugins functions ");
+        return KSecurityPinNotifierUid;
+        }   
+
 	}
 
 EXPORT_C TUint CSsmUiSpecific::EmergencyCallPropertyKey()
 	{
-	return KEmergencyCallPropertyKey;
+	if (!IsTestPsKeyDefined())
+        {
+        DEBUGPRINT1A("EmergencyCallPropertyKey :: Calling S60 plugins functions ");
+        return KCTsyCallState;       
+        }
+    else
+        {
+        DEBUGPRINT1A("EmergencyCallPropertyKey :: Calling Symbian(dummy) plugins functions ");
+        return KEmergencyCallPropertyKey;
+        }   
+
 	}
 
 EXPORT_C TUid CSsmUiSpecific::EmergencyCallPropertyCategory()
 	{
-	return KEmergencyCallPropertyCategory;
+	if (!IsTestPsKeyDefined())
+        {
+        DEBUGPRINT1A("EmergencyCallPropertyCategory :: Calling S60 plugins functions ");
+        return KPSUidCtsyCallInformation;       
+        }
+    else
+        {
+        DEBUGPRINT1A("EmergencyCallPropertyCategory :: Calling Symbian(dummy) plugins functions ");
+        return KEmergencyCallPropertyCategory;
+        }   
+
 	}
 
 EXPORT_C TBool CSsmUiSpecific::IsSimSupported()
 	{
-	return ETrue;
+	if (!IsTestPsKeyDefined())
+        {
+        DEBUGPRINT1A("IsSimSupported :: Calling S60 plugins functions ");
+        return SsmMapperUtility::FeatureStatus( TUid::Uid( KFeatureIdSimCard ) );       
+        }
+    else
+        {
+        DEBUGPRINT1A("IsSimSupported :: Calling Symbian(dummy) plugins functions ");
+        return ETrue;
+        }   
+
 	}
 
 EXPORT_C void CSsmUiSpecific::SetSecurityStatus(const TStrtSecurityStatus& aSecurityStatus)
-	{
+	{   
 	iStrtSecurityStatus = aSecurityStatus;
 	}
 
 EXPORT_C TStrtSecurityStatus CSsmUiSpecific::SecurityStatus() const
-	{
+	{   
 	return iStrtSecurityStatus;
 	}
 
@@ -127,83 +197,269 @@
 
 EXPORT_C TUid CSsmUiSpecific::ScreenOutputChannelUid()
 	{
-	return KScreenOutputChannel;
+	if (!IsTestPsKeyDefined())
+        {
+        DEBUGPRINT1A("ScreenOutputChannelUid :: Calling S60 plugins functions ");
+        return KSecurityNotifierChannel;       
+        }
+    else
+        {
+        DEBUGPRINT1A("ScreenOutputChannelUid :: Calling Symbian(dummy) plugins functions ");
+        return KScreenOutputChannel;
+        }   
+
 	}
 
 EXPORT_C TUint CSsmUiSpecific::SimStatusPropertyKey()
 	{
-	return KSimStatusPropertyKey;
+	if (!IsTestPsKeyDefined())
+        {
+        DEBUGPRINT1A("SimStatusPropertyKey :: Calling S60 plugins functions ");
+        return KPSSimStatus;        
+        }
+    else
+        {
+        DEBUGPRINT1A("SimStatusPropertyKey :: Calling Symbian(dummy) plugins functions ");
+        return KSimStatusPropertyKey;
+        }   
 	}
 
 EXPORT_C TBool CSsmUiSpecific::IsSimStateChangeAllowed()
 	{
-	return ETrue;
+	if (!IsTestPsKeyDefined())
+        {
+        DEBUGPRINT1A("IsSimStateChangeAllowed :: Calling S60 plugins functions ");
+        TSsmState state;
+        TInt err = SsmMapperUtility::GetCurrentState( state );
+        ERROR( err, "Failed to get current state" );
+        return ( err == KErrNone &&
+                 ( state.MainState() == ESsmStartup && state.SubState() == ESsmStateSecurityCheck ) ||
+                 ( state.MainState() == ESsmStartup && state.SubState() == ESsmStateNonCritical ) ||
+                   state.MainState() == ESsmNormal );        
+        }
+    else
+        {
+        DEBUGPRINT1A("IsSimStateChangeAllowed :: Calling Symbian(dummy) plugins functions ");
+        return ETrue;
+        }   
+
 	}
 
 EXPORT_C TBool CSsmUiSpecific::IsAmaStarterSupported()
 	{
-	return ETrue;
+	if (!IsTestPsKeyDefined())
+        {
+        DEBUGPRINT1A("IsAmaStarterSupported :: Calling S60 plugins functions ");
+        return SsmMapperUtility::FeatureStatus( TUid::Uid( KFeatureIdExtendedStartup ) );       
+        }
+    else
+        {
+        DEBUGPRINT1A("IsAmaStarterSupported :: Calling Symbian(dummy) plugins functions ");
+        return ETrue;
+        }   
+
 	}
 
 EXPORT_C HBufC* CSsmUiSpecific::GetTsyModuleNameL()
 	{
-	HBufC* tstModuleName = KTsyModuleName().AllocL();
-	return tstModuleName;
+    DEBUGPRINT1A("GetTsyModuleNameL :: Calling S60 plugins functions ");
+    /*****************************************************
+    *   Series 60 Customer / TSY
+    *   Needs customer TSY implementation
+    *****************************************************/
+
+    HBufC* name = KMmTsyModuleName().AllocL();
+    INFO_1( "TSY name: %S", name );
+    return name;      
 	}
 
 EXPORT_C TUid CSsmUiSpecific::StarterPSUid()
 	{
-	return KSecurityStatusPropertyCategory;
+	if (!IsTestPsKeyDefined())
+        {
+        DEBUGPRINT1A("StarterPSUid :: Calling S60 plugins functions ");
+        return KPSStarterUid;        
+        }
+    else
+        {
+        DEBUGPRINT1A("StartupPSUid :: Calling Symbian(dummy) plugins functions ");
+        return KSecurityStatusPropertyCategory;
+        }   
 	}
 
 EXPORT_C HBufC* CSsmUiSpecific::PhoneTsyNameL()
 	{
-	HBufC* tsyPhoneName = KTsyPhoneName().AllocL();
-	return tsyPhoneName;
+    DEBUGPRINT1A("PhoneTsyNameL :: Calling S60 plugins functions ");
+    /*****************************************************
+    *   Series 60 Customer / TSY
+    *   Needs customer TSY implementation
+    *****************************************************/
+
+    HBufC* name = KMmTsyPhoneName().AllocL();
+    INFO_1( "Phone name: %S", name );
+    return name;     
 	}
 
 EXPORT_C TBool CSsmUiSpecific::IsSimPresent()
 	{
-	return ETrue;
+	if (!IsTestPsKeyDefined())
+        {
+        DEBUGPRINT1A("IsSimPresent :: Calling S60 plugins functions ");
+        TInt value( 0 );
+        TInt err = RProperty::Get( SsmMapperUtility::PsUid( KPSUidStartup ), KPSSimStatus, value );
+        ERROR( err, "Failed to get value of KPSUidStartup::KPSSimStatus" );
+        return ( err == KErrNone &&
+                 ( value == ESimUsable ||
+                   value == ESimReadable ||
+                   value == ESimNotReady ) );       
+        }
+    else
+        {
+        DEBUGPRINT1A("IsSimPresent :: Calling Symbian(dummy) plugins functions ");
+        return ETrue;
+        }   
 	}
 
 EXPORT_C TBool CSsmUiSpecific::IsSimlessOfflineSupported()
 	{
-	return ETrue;
+	if (!IsTestPsKeyDefined())
+        {
+        DEBUGPRINT1A("IsSimlessOfflineSupported :: Calling S60 plugins functions ");
+        return SsmMapperUtility::FeatureStatus(
+            TUid::Uid( KFeatureIdFfSimlessOfflineSupport ) );      
+        }
+    else
+        {
+        DEBUGPRINT1A("IsSimlessOfflineSupported :: Calling Symbian(dummy) plugins functions ");
+        return ETrue;
+        }   
 	}
 
 EXPORT_C TBool CSsmUiSpecific::IsNormalBoot()
 	{
-	return ETrue;
+	if (!IsTestPsKeyDefined())
+        {
+        DEBUGPRINT1A("IsNormalBoot :: Calling S60 plugins functions ");
+        TInt value( 0 );
+        TInt errorCode = RProperty::Get( SsmMapperUtility::PsUid( KPSUidStartup ), KPSStartupReason, value );
+        ERROR( errorCode, "Failed to get value of KPSUidStartup::KPSStartupReason" );
+
+        TBool ret = ( errorCode == KErrNone && value == ENormalStartup );
+        INFO_1( "Is normal boot = %d", ret );
+        return ret;     
+        }
+    else
+        {
+        DEBUGPRINT1A("IsNormalBoot :: Calling Symbian(dummy) plugins functions ");
+        return ETrue;
+        }   
 	}
 
 EXPORT_C TBool CSsmUiSpecific::IsSimChangedReset()
 	{
-	return ETrue;
+	if (!IsTestPsKeyDefined())
+        {
+        DEBUGPRINT1A("IsSimChangedReset :: Calling S60 plugins functions ");
+        TUid startupPsUid( SsmMapperUtility::PsUid( KPSUidStartup ) );
+        TInt value( 0 );
+        TInt errorCode = RProperty::Get( startupPsUid, KPSStartupReason, value );
+        ERROR( errorCode, "Failed to get value of KPSUidStartup::KPSStartupReason" );
+
+        TBool ret( EFalse );
+        if ( errorCode == KErrNone && value == ESIMStatusChangeReset )
+            {
+            errorCode = RProperty::Get( startupPsUid, KPSSimChanged, value );
+            ret = ( errorCode == KErrNone && value == ESimChanged );
+            }
+
+        INFO_1( "Is SIM changed reset = %d", ret );
+        return ret;       
+        }
+    else
+        {
+        DEBUGPRINT1A("IsSimChangedReset :: Calling Symbian(dummy) plugins functions ");
+        return ETrue;
+        }   
 	}
 
 EXPORT_C TUint CSsmUiSpecific::RFStatusPropertyKey()
 	{
-	return KRFStatusPropertyKey;
+	if (!IsTestPsKeyDefined())
+        {
+        DEBUGPRINT1A("RFStatusPropertyKey :: Calling S60 plugins functions ");
+        return SWP_UID_SSM_RF_STATUS;        
+        }
+    else
+        {
+        DEBUGPRINT1A("RFStatusPropertyKey :: Calling Symbian(dummy) plugins functions ");
+        return KRFStatusPropertyKey;
+        }   
 	}
 
 EXPORT_C TUid CSsmUiSpecific::RFStatusPropertyCategory()
 	{
-	return KRFStatusPropertyCategory;
+	if (!IsTestPsKeyDefined())
+        {
+        DEBUGPRINT1A("RFStatusPropertyCategory :: Calling S60 plugins functions ");
+        return TUid::Uid( SWP_UID_SSM_RF_STATUS );       
+        }
+    else
+        {
+        DEBUGPRINT1A("RFStatusPropertyCategory :: Calling Symbian(dummy) plugins functions ");
+        return KRFStatusPropertyCategory;
+        }   
 	}
+
 EXPORT_C TUint CSsmUiSpecific::ValidateRTCPropertyKey()
     {
-    return KValidateRTCPropertyKey;
+    if (!IsTestPsKeyDefined())
+        {
+        DEBUGPRINT1A("ValidateRTCPropertyKey :: Calling S60 plugins functions ");
+        return KRTCPropertyKey;       
+        }
+    else
+        {
+        DEBUGPRINT1A("ValidateRTCPropertyKey :: Calling Symbian(dummy) plugins functions ");
+        return KValidateRTCPropertyKey;
+        }   
+
     }
 
 EXPORT_C TUid CSsmUiSpecific::ValidateRTCPropertyCategory()
     {
-    return KValidateRTCPropertyCategory;
+    if (!IsTestPsKeyDefined())
+        {
+        DEBUGPRINT1A("ValidateRTCPropertyCategory :: Calling S60 plugins functions ");
+        return KPSStarterUid;        
+        }
+    else
+        {
+        DEBUGPRINT1A("ValidateRTCPropertyCategory :: Calling Symbian(dummy) plugins functions ");
+        return KValidateRTCPropertyCategory;
+        }   
     }
 
 EXPORT_C TInt CSsmUiSpecific::PhoneMemoryRootDriveId()
 	{
-	return EDriveC;
+	if (!IsTestPsKeyDefined())
+        {
+        DEBUGPRINT1A("PhoneMemoryRootDriveId :: Calling S60 plugins functions ");
+        TInt driveId = EDriveC;
+        TDriveId driveIdBuf = PathInfo::PhoneMemoryRootPath().Left( KDriveIdLength );
+        if ( driveIdBuf.Length() > 0 )
+            {
+            TInt err = RFs::CharToDrive( driveIdBuf[0], driveId ) ;
+            INFO_1( "PhoneMemoryRootDriveId - CharToDrive returns: %d", err );            
+            }
+
+        INFO_1( "Phone memory root path ID: %d", driveId );
+        return driveId;      
+        }
+    else
+        {
+        DEBUGPRINT1A("PhoneMemoryRootDriveId :: Calling Symbian(dummy) plugins functions ");
+        return EDriveC;
+        }   
 	}
 
 /**
@@ -215,6 +471,21 @@
 	}
 
 /**
+    Helper function to check for P&S Key
+*/
+TBool CSsmUiSpecific::IsTestPsKeyDefined()
+    {
+    TBool testPsKeyDefined = EFalse;
+    TInt result = RProperty::Get(KPropertyCategory, KMiscPluginPropertyKey, testPsKeyDefined);
+    DEBUGPRINT3(_L("KMiscPluginPropertyKey %d Error %d"), testPsKeyDefined, result);
+    if ((KErrNone != result) && (KErrNotFound != result))
+        {
+        User::Leave(result);
+        }
+    return testPsKeyDefined;
+    }
+
+/**
 Reserve two ClusterSize in Phone Memory Space on H/W
 and 512 bytes for __WINS__
 @return KErrNone if successful or systemwide error