sysstatemgmt/systemstatemgr/cmn/src/ssmstateawaresession.cpp
author hgs
Fri, 08 Oct 2010 14:33:25 +0300
changeset 76 cb32bcc88bad
parent 0 4e1aa6a622a0
permissions -rw-r--r--
201039
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
76
hgs
parents: 0
diff changeset
     1
// Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
0
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     2
// All rights reserved.
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     3
// This component and the accompanying materials are made available
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     5
// which accompanies this distribution, and is available
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     7
//
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     8
// Initial Contributors:
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    10
//
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    11
// Contributors:
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    12
//
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    13
// Description:
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    14
//
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    15
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    16
#include <e32base.h>
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    17
#include <domainmember.h>
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    18
#include <ssm/ssmstateawaresession.h>
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    19
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    20
#include "cmnpanic.h"
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    21
#include "ssmdebug.h"
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    22
#include "ssmstatemonitor.h"
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    23
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    24
/**
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    25
 @internalComponent
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    26
 @released 
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    27
 */
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    28
class RSsmStateAwareSession::RPrivateImpl : public RDmDomain
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    29
	{
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    30
	};
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    31
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    32
//
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    33
//---------------- class RSsmStateAwareSession ------------------
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    34
//
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    35
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    36
/**
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    37
 Default constructor
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    38
 */
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    39
EXPORT_C RSsmStateAwareSession::RSsmStateAwareSession()
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    40
	: iPimpl(NULL)
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    41
	{
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    42
	}
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    43
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    44
/**
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    45
 Connects to the domain identified by the specified domain Id.
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    46
 
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    47
 @param aId The identifier of the domain to be connected to.
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    48
 @return KErrNone, if successful; otherwise one of the other system-wide error codes. 
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    49
 */
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    50
EXPORT_C TInt RSsmStateAwareSession::Connect(TDmDomainId aId)
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    51
	{
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    52
	iPimpl = new RPrivateImpl;
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    53
	if(!iPimpl)
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    54
		{
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    55
		return KErrNoMemory;
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    56
		}
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    57
	TInt err = iPimpl->Connect(KDmHierarchyIdStartup, aId);
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    58
	if (KErrNone != err)
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    59
		{
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    60
		Close();
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    61
		}
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    62
	return err;
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    63
	}
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    64
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    65
/**
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    66
 Disconnect from the domain.  
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    67
 */
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    68
EXPORT_C void RSsmStateAwareSession::Close()
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    69
	{
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    70
	if(iPimpl)
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    71
		{
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    72
		iPimpl->Close();
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    73
		}
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    74
	delete iPimpl;
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    75
	iPimpl = NULL;
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    76
	}
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    77
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    78
/**
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    79
 Reads the System Wide State.
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    80
 @return The System Wide State
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    81
 @panic ECmnErrState if not connected to a domain
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    82
 */
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    83
EXPORT_C TSsmState RSsmStateAwareSession::State() const
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    84
	{
76
hgs
parents: 0
diff changeset
    85
	__ASSERT_ALWAYS(iPimpl, User::Panic(KPanicSsmCmn, ECmnErrState));
0
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    86
	
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    87
	TUint32 ds = 0;
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    88
	//returned TDmDomainState is currently only 8 bits
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    89
	ds = iPimpl->GetState(); //lint !e613 Possible use of NULL pointer - caught by ASSERT_ALWAYS
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    90
	TSsmState state;
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    91
	state.SetFromInt(ds);
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    92
	return state;
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    93
	}
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    94
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    95
/**
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    96
 Use to get a notification when the System State changes.
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    97
 @param aStatus The TRequestStatus to be completed when the System State gets changed.
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    98
 @panic ECmnErrRqstStateNotif if not connected to a domain
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    99
 */
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   100
EXPORT_C void RSsmStateAwareSession::RequestStateNotification(TRequestStatus& aStatus)
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   101
	{
76
hgs
parents: 0
diff changeset
   102
	__ASSERT_ALWAYS(iPimpl, User::Panic(KPanicSsmCmn, ECmnErrRqstStateNotif));
0
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   103
	iPimpl->RequestTransitionNotification(aStatus);  //lint !e613 Possible use of NULL pointer - caught by ASSERT_ALWAYS
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   104
	}
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   105
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   106
/**
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   107
 Cancel an outstanding @c RequestStateNotification operation.
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   108
 @panic ECmnErrRqstStateNotifCancel if not connected to a domain
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   109
 */
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   110
EXPORT_C void RSsmStateAwareSession::RequestStateNotificationCancel()
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   111
	{
76
hgs
parents: 0
diff changeset
   112
	__ASSERT_ALWAYS(iPimpl, User::Panic(KPanicSsmCmn, ECmnErrRqstStateNotifCancel));
0
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   113
	iPimpl->CancelTransitionNotification();  //lint !e613 Possible use of NULL pointer - caught by ASSERT_ALWAYS
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   114
		
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   115
	}
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   116
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   117
/**
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   118
 Acknowledges the state change.
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   119
 An application must acknowledge that it has performed all actions required by the last known state of the domain. 
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   120
 
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   121
 @panic ECmnErrAcknldgStateNotif if not connected to a domain
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   122
 */
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   123
EXPORT_C void RSsmStateAwareSession::AcknowledgeStateNotification(TInt aError)
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   124
	{
76
hgs
parents: 0
diff changeset
   125
	__ASSERT_ALWAYS(iPimpl, User::Panic(KPanicSsmCmn, ECmnErrAcknldgStateNotif));
0
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   126
	iPimpl->AcknowledgeLastState(aError);  //lint !e613 Possible use of NULL pointer - caught by ASSERT_ALWAYS
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   127
	}
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   128
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   129
/**
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   130
 Acknowledges the state change.
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   131
 An application must acknowledge that it has performed all actions required by the last known state of the domain. 
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   132
 This function appears like an atomic function and minimize the risk for missing a state notification.
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   133
 @panic ECmnErrAcknldgRqstStateNotif if not connected to a domain
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   134
 */
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   135
EXPORT_C void RSsmStateAwareSession::AcknowledgeAndRequestStateNotification(TInt aError, TRequestStatus& aStatus)
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   136
	{
76
hgs
parents: 0
diff changeset
   137
	__ASSERT_ALWAYS(iPimpl, User::Panic(KPanicSsmCmn, ECmnErrAcknldgRqstStateNotif));
0
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   138
	//Typical pattern of using P&S is to subscribe first then get current state
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   139
	iPimpl->RequestTransitionNotification(aStatus);  //lint !e613 Possible use of NULL pointer - caught by ASSERT_ALWAYS
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   140
	//Tell domain manager that we have processed the last state change.
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   141
	iPimpl->AcknowledgeLastState(aError);  //lint !e613 Possible use of NULL pointer - caught by ASSERT_ALWAYS
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   142
	}
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   143
76
hgs
parents: 0
diff changeset
   144
#ifdef SYMBIAN_INCLUDE_APP_CENTRIC
hgs
parents: 0
diff changeset
   145
/**
hgs
parents: 0
diff changeset
   146
Defers the acknowledgement requesting more time.
hgs
parents: 0
diff changeset
   147
To be sure of deferring in time a client should call this immediately
hgs
parents: 0
diff changeset
   148
after receiving notification. This asynchronous call will complete once the original deadline
hgs
parents: 0
diff changeset
   149
is reached (ie. one period earlier than the final deadline), at which point the member must either
hgs
parents: 0
diff changeset
   150
defer again or acknowledge the transition. In the meantime, the member should perform
hgs
parents: 0
diff changeset
   151
its transition actions, whilst remaining responsive to new completion events.
hgs
parents: 0
diff changeset
   152
hgs
parents: 0
diff changeset
   153
@note Deferrals are not always possible,
hgs
parents: 0
diff changeset
   154
whether the member will actually be given more time depends on if
hgs
parents: 0
diff changeset
   155
   - The current transition allows deferrals at all.
hgs
parents: 0
diff changeset
   156
   - The member still has deferrals left - there may be a maximum number
hgs
parents: 0
diff changeset
   157
     allowed.
hgs
parents: 0
diff changeset
   158
   - The deferral request was received in time.
hgs
parents: 0
diff changeset
   159
hgs
parents: 0
diff changeset
   160
@param aStatus Status of request
hgs
parents: 0
diff changeset
   161
   - KErrNone Request has completed i.e. The member must either defer again or acknowledge.
hgs
parents: 0
diff changeset
   162
   - KErrCompletion The deferral was obsoleted by a subsequent call to AcknowledgeLastState.
hgs
parents: 0
diff changeset
   163
   - KErrNotSupported The current transition may not be deferred, or maximum deferral count reached.
hgs
parents: 0
diff changeset
   164
   - KErrCancel The deferral was cancelled.
hgs
parents: 0
diff changeset
   165
   - KErrNotReady Deferral attempted before a transition notification was received
hgs
parents: 0
diff changeset
   166
     or after the deadline for the previous one.
hgs
parents: 0
diff changeset
   167
   - KErrPermissionDenied The member lacked the necessary capabilities.
hgs
parents: 0
diff changeset
   168
   - KErrAlreadyExists A deferral was already outstanding.
hgs
parents: 0
diff changeset
   169
     Both new and existing calls will complete with this error.
hgs
parents: 0
diff changeset
   170
hgs
parents: 0
diff changeset
   171
This function is provided for members to inform the Domain Manager that they
hgs
parents: 0
diff changeset
   172
are still active and are responding to a transition notification.
hgs
parents: 0
diff changeset
   173
For example, a server may have to persist data using
hgs
parents: 0
diff changeset
   174
the file server before shut down. Since this task should be allowed to complete
hgs
parents: 0
diff changeset
   175
before shutdown continues, the member should defer the transition, and then persist
hgs
parents: 0
diff changeset
   176
the data, using asynchronous calls.
hgs
parents: 0
diff changeset
   177
hgs
parents: 0
diff changeset
   178
At least one of the below capabilities is required in order to defer a
hgs
parents: 0
diff changeset
   179
domain transition. Without them, the client will get KErrPermissionDenied.
hgs
parents: 0
diff changeset
   180
hgs
parents: 0
diff changeset
   181
@capability WriteDeviceData
hgs
parents: 0
diff changeset
   182
@capability ProtServ
hgs
parents: 0
diff changeset
   183
hgs
parents: 0
diff changeset
   184
@pre The member has been notified of a transition which it has not yet acknowledged.
hgs
parents: 0
diff changeset
   185
 */
hgs
parents: 0
diff changeset
   186
EXPORT_C void RSsmStateAwareSession::DeferAcknowledgement(TRequestStatus& aStatus)
hgs
parents: 0
diff changeset
   187
    {
hgs
parents: 0
diff changeset
   188
    __ASSERT_ALWAYS(iPimpl, User::Panic(KPanicSsmCmn, ECmnErrDeferAcknNotif));    
hgs
parents: 0
diff changeset
   189
    iPimpl->DeferAcknowledgement(aStatus); //lint !e613 Possible use of NULL pointer - caught by ASSERT_ALWAYS
hgs
parents: 0
diff changeset
   190
    
hgs
parents: 0
diff changeset
   191
    }
hgs
parents: 0
diff changeset
   192
hgs
parents: 0
diff changeset
   193
/**
hgs
parents: 0
diff changeset
   194
Cancels the deferred call.
hgs
parents: 0
diff changeset
   195
Will cancel a call of DeferAcknowledgement, if one was pending.
hgs
parents: 0
diff changeset
   196
If none was pending, it does nothing.
hgs
parents: 0
diff changeset
   197
*/
hgs
parents: 0
diff changeset
   198
EXPORT_C void RSsmStateAwareSession::CancelDeferral()
hgs
parents: 0
diff changeset
   199
    {
hgs
parents: 0
diff changeset
   200
    __ASSERT_ALWAYS(iPimpl, User::Panic(KPanicSsmCmn, ECmnErrCancelDeferNotif));    
hgs
parents: 0
diff changeset
   201
    iPimpl->CancelDeferral();  //lint !e613 Possible use of NULL pointer - caught by ASSERT_ALWAYS   
hgs
parents: 0
diff changeset
   202
    }
hgs
parents: 0
diff changeset
   203
#else
hgs
parents: 0
diff changeset
   204
EXPORT_C void RSsmStateAwareSession::DeferAcknowledgement(TRequestStatus& aStatus)
hgs
parents: 0
diff changeset
   205
    {
hgs
parents: 0
diff changeset
   206
    TRequestStatus* pStatus = &aStatus;     
hgs
parents: 0
diff changeset
   207
    User::RequestComplete(pStatus, KErrNotSupported);
hgs
parents: 0
diff changeset
   208
    }
hgs
parents: 0
diff changeset
   209
hgs
parents: 0
diff changeset
   210
EXPORT_C void RSsmStateAwareSession::CancelDeferral()
hgs
parents: 0
diff changeset
   211
    {
hgs
parents: 0
diff changeset
   212
    }
hgs
parents: 0
diff changeset
   213
#endif
0
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   214
//
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   215
//---------------- class CSsmStateAwareSession ------------------
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   216
//
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   217
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   218
/**
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   219
 Factory method that returns an instance of this object, connected to the domain 
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   220
 identified by the specified domain Id and setup to subscribe on System State changes.
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   221
 @param aId The identifier of the domain to be connected to.
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   222
 @return A new instance of this class, connected to the domain @c aId.   
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   223
 */
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   224
EXPORT_C CSsmStateAwareSession* CSsmStateAwareSession::NewL(TDmDomainId aId)
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   225
	{
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   226
	CSsmStateAwareSession* self = CSsmStateAwareSession::NewLC(aId);
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   227
 	CleanupStack::Pop(self);
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   228
 	return self;
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   229
	}
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   230
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   231
/**
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   232
 Factory method that returns an instance of this object, connected to the domain 
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   233
 identified by the specified domain Id and setup to subscribe on System State changes.
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   234
 @param aId The identifier of the domain to be connected to.
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   235
 @return A new instance of this class, connected to the domain @c aId.   
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   236
 */
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   237
EXPORT_C CSsmStateAwareSession* CSsmStateAwareSession::NewLC(TDmDomainId aId)
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   238
	{
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   239
	CSsmStateAwareSession* self = new (ELeave) CSsmStateAwareSession;
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   240
	CleanupStack::PushL(self);
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   241
	self->ConstructL(aId);
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   242
	return self;
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   243
	}
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   244
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   245
/**
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   246
 @internalComponent 
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   247
 */
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   248
void CSsmStateAwareSession::ConstructL(TDmDomainId aId)
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   249
	{
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   250
	iMonitor = CSsmStateMonitor::NewL(*this, aId);
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   251
	}
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   252
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   253
/**
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   254
 Used to coordinate array granularity with Compress() operations.
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   255
 @internalComponent 
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   256
 */
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   257
const TInt KDefaultPtrArrayGranularity = 8;
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   258
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   259
/**
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   260
 @internalComponent 
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   261
 */
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   262
CSsmStateAwareSession::CSsmStateAwareSession() : iSubscribers(KDefaultPtrArrayGranularity)
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   263
	{
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   264
	}
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   265
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   266
/**
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   267
 Destructor
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   268
 */
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   269
EXPORT_C CSsmStateAwareSession::~CSsmStateAwareSession()
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   270
	{
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   271
	iSubscribers.Close();
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   272
	delete 	iMonitor;
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   273
	}
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   274
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   275
/**
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   276
 Reads the System State
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   277
 @panic ECmnErrStateMon if not connected to a domain
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   278
 @return The System State 
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   279
 */
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   280
EXPORT_C TSsmState CSsmStateAwareSession::State() const
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   281
	{
76
hgs
parents: 0
diff changeset
   282
	__ASSERT_ALWAYS(iMonitor, User::Panic(KPanicSsmCmn, ECmnErrStateMon));
0
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   283
	return iMonitor->State();
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   284
	}
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   285
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   286
/**
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   287
 Register for a callback when the System State changes.
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   288
 @param aSubscriber The object to receive the callback
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   289
 */
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   290
EXPORT_C void CSsmStateAwareSession::AddSubscriberL(MStateChangeNotificationSubscriber& aSubscriber)
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   291
	{
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   292
	iSubscribers.AppendL(&aSubscriber);
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   293
	}
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   294
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   295
/**
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   296
 Cancel callback subscription for System State Changes
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   297
 @param aSubscriber The object for which to cancel subsription.
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   298
 */
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   299
EXPORT_C void CSsmStateAwareSession::RemoveSubscriber(const MStateChangeNotificationSubscriber& aSubscriber)
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   300
	{
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   301
	const TInt index = iSubscribers.Find(&aSubscriber);
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   302
	if(index > KErrNotFound)
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   303
		{
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   304
		iSubscribers.Remove(index);
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   305
		
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   306
		const TInt count = iSubscribers.Count();
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   307
		if((count % KDefaultPtrArrayGranularity) == 0)
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   308
			{
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   309
			iSubscribers.Compress();
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   310
			}
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   311
		}
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   312
	}
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   313
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   314
/**
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   315
 Called from CSsmStateMonitor when the System State have changed.
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   316
 @internalComponent
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   317
 */
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   318
void CSsmStateAwareSession::NotifySubscribers(TSsmState aSsmState)
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   319
	{
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   320
	TInt count = iSubscribers.Count();
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   321
	while (count--)
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   322
		{
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   323
#ifdef _DEBUG
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   324
			TRAPD(err, iSubscribers[count]->StateChanged(aSsmState));
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   325
			if(KErrNone != err)
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   326
				{
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   327
				DEBUGPRINT2A("Illegal leave (leavecode: %d) detected. Will be ignored", err);
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   328
				}
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   329
#else
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   330
			TRAP_IGNORE(iSubscribers[count]->StateChanged(aSsmState));
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   331
#endif
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   332
		}
4e1aa6a622a0 Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   333
	} //lint !e1746 Suppress parameter 'aSsmState' could be made const reference
76
hgs
parents: 0
diff changeset
   334
hgs
parents: 0
diff changeset
   335
//
hgs
parents: 0
diff changeset
   336
//---------------- class CExtendedSsmStateAwareSession ------------------
hgs
parents: 0
diff changeset
   337
//
hgs
parents: 0
diff changeset
   338
#ifdef SYMBIAN_INCLUDE_APP_CENTRIC
hgs
parents: 0
diff changeset
   339
/**
hgs
parents: 0
diff changeset
   340
Factory method that returns an instance of this object, connected to the domain 
hgs
parents: 0
diff changeset
   341
identified by the specified domain Id and setup to subscribe on System State changes.
hgs
parents: 0
diff changeset
   342
@param aDomainId    The Id of the domain to connect to.
hgs
parents: 0
diff changeset
   343
@param aSubscriber reference to MStateChangeNotificationSubscriber2 
hgs
parents: 0
diff changeset
   344
*/
hgs
parents: 0
diff changeset
   345
EXPORT_C CSsmStateAwareSession2* CSsmStateAwareSession2::NewL(TDmDomainId aDomainId, MStateChangeNotificationSubscriber2& aSubscriber)
hgs
parents: 0
diff changeset
   346
    {
hgs
parents: 0
diff changeset
   347
    CSsmStateAwareSession2* self = new (ELeave)CSsmStateAwareSession2(aSubscriber);
hgs
parents: 0
diff changeset
   348
    CleanupStack::PushL(self);
hgs
parents: 0
diff changeset
   349
    self->ConstructL(aDomainId);
hgs
parents: 0
diff changeset
   350
    CleanupStack::Pop(self);
hgs
parents: 0
diff changeset
   351
    return self;
hgs
parents: 0
diff changeset
   352
    }
hgs
parents: 0
diff changeset
   353
hgs
parents: 0
diff changeset
   354
CSsmStateAwareSession2::CSsmStateAwareSession2(MStateChangeNotificationSubscriber2& aSubscriber):
hgs
parents: 0
diff changeset
   355
CActive(CActive::EPriorityStandard), iDeferNotification(NULL), iSubscriber(&aSubscriber)
hgs
parents: 0
diff changeset
   356
    {
hgs
parents: 0
diff changeset
   357
    CActiveScheduler::Add(this);
hgs
parents: 0
diff changeset
   358
    }
hgs
parents: 0
diff changeset
   359
hgs
parents: 0
diff changeset
   360
void CSsmStateAwareSession2::ConstructL(TDmDomainId aDomainId)
hgs
parents: 0
diff changeset
   361
    {
hgs
parents: 0
diff changeset
   362
    User::LeaveIfError(iSsmStateAwareSession.Connect(aDomainId));
hgs
parents: 0
diff changeset
   363
    iDeferNotification = new (ELeave) CSsmDeferralMonitor(iSsmStateAwareSession, *this);    
hgs
parents: 0
diff changeset
   364
 
hgs
parents: 0
diff changeset
   365
    }
hgs
parents: 0
diff changeset
   366
/**
hgs
parents: 0
diff changeset
   367
Destructor.
hgs
parents: 0
diff changeset
   368
Cleanup the internal CSsmDeferralMonitor active object.
hgs
parents: 0
diff changeset
   369
*/
hgs
parents: 0
diff changeset
   370
EXPORT_C  CSsmStateAwareSession2::~CSsmStateAwareSession2()        
hgs
parents: 0
diff changeset
   371
    {
hgs
parents: 0
diff changeset
   372
    Cancel();
hgs
parents: 0
diff changeset
   373
    delete iDeferNotification;
hgs
parents: 0
diff changeset
   374
    iSsmStateAwareSession.Close();
hgs
parents: 0
diff changeset
   375
    }
hgs
parents: 0
diff changeset
   376
hgs
parents: 0
diff changeset
   377
/**
hgs
parents: 0
diff changeset
   378
 Gets the TSsmState state.
hgs
parents: 0
diff changeset
   379
 */
hgs
parents: 0
diff changeset
   380
EXPORT_C TSsmState CSsmStateAwareSession2::GetState()
hgs
parents: 0
diff changeset
   381
    {
hgs
parents: 0
diff changeset
   382
    return iSsmStateAwareSession.State();
hgs
parents: 0
diff changeset
   383
    }
hgs
parents: 0
diff changeset
   384
hgs
parents: 0
diff changeset
   385
/**
hgs
parents: 0
diff changeset
   386
 Use to get a notification when the System State changes.
hgs
parents: 0
diff changeset
   387
 */
hgs
parents: 0
diff changeset
   388
EXPORT_C void CSsmStateAwareSession2::RequestStateNotification()
hgs
parents: 0
diff changeset
   389
    {
hgs
parents: 0
diff changeset
   390
    __ASSERT_ALWAYS(!IsActive(), User::Panic(KPanicSsmCmn, ECmnErrRqstStateNotif)); 
hgs
parents: 0
diff changeset
   391
    iSsmStateAwareSession.RequestStateNotification(iStatus);
hgs
parents: 0
diff changeset
   392
    SetActive();    
hgs
parents: 0
diff changeset
   393
    }
hgs
parents: 0
diff changeset
   394
hgs
parents: 0
diff changeset
   395
/**
hgs
parents: 0
diff changeset
   396
 Cancels an outstanding RequestStateNotification operation.
hgs
parents: 0
diff changeset
   397
 */
hgs
parents: 0
diff changeset
   398
EXPORT_C void CSsmStateAwareSession2::RequestStateNotificationCancel()
hgs
parents: 0
diff changeset
   399
    {
hgs
parents: 0
diff changeset
   400
	iDeferNotification->Cancel();
hgs
parents: 0
diff changeset
   401
    iSsmStateAwareSession.RequestStateNotificationCancel();
hgs
parents: 0
diff changeset
   402
    }
hgs
parents: 0
diff changeset
   403
hgs
parents: 0
diff changeset
   404
/**
hgs
parents: 0
diff changeset
   405
 Acknowledges the state change.
hgs
parents: 0
diff changeset
   406
 An application must acknowledge that it has performed all actions required by the last known state of the domain.
hgs
parents: 0
diff changeset
   407
 @param set aError while acknowledging.
hgs
parents: 0
diff changeset
   408
 */
hgs
parents: 0
diff changeset
   409
EXPORT_C void CSsmStateAwareSession2::AcknowledgeStateNotification(TInt aError)
hgs
parents: 0
diff changeset
   410
    {
hgs
parents: 0
diff changeset
   411
    iSsmStateAwareSession.AcknowledgeStateNotification(aError);
hgs
parents: 0
diff changeset
   412
    iDeferNotification->NotifyOfAcknowledgement();
hgs
parents: 0
diff changeset
   413
    }
hgs
parents: 0
diff changeset
   414
hgs
parents: 0
diff changeset
   415
/**
hgs
parents: 0
diff changeset
   416
 Acknowledges the state change.
hgs
parents: 0
diff changeset
   417
 An application must acknowledge that it has performed all actions required by the last known state of the domain. 
hgs
parents: 0
diff changeset
   418
 This function appears like an atomic function and minimize the risk for missing a state notification.
hgs
parents: 0
diff changeset
   419
 @param aError for aknowledging with error.
hgs
parents: 0
diff changeset
   420
 */
hgs
parents: 0
diff changeset
   421
EXPORT_C void CSsmStateAwareSession2::AcknowledgeAndRequestStateNotification(TInt aError)
hgs
parents: 0
diff changeset
   422
    {
hgs
parents: 0
diff changeset
   423
    __ASSERT_ALWAYS(!IsActive(), User::Panic(KPanicSsmCmn, ECmnErrAcknldgRqstStateNotif)); 
hgs
parents: 0
diff changeset
   424
    iSsmStateAwareSession.AcknowledgeAndRequestStateNotification(aError,iStatus);
hgs
parents: 0
diff changeset
   425
	iDeferNotification->NotifyOfAcknowledgement();
hgs
parents: 0
diff changeset
   426
    SetActive();
hgs
parents: 0
diff changeset
   427
    }
hgs
parents: 0
diff changeset
   428
hgs
parents: 0
diff changeset
   429
/**
hgs
parents: 0
diff changeset
   430
 Handles the client deferral error.
hgs
parents: 0
diff changeset
   431
 @param aError Error code to handle
hgs
parents: 0
diff changeset
   432
 */
hgs
parents: 0
diff changeset
   433
TInt CSsmStateAwareSession2::HandleDeferralError(TInt aError)
hgs
parents: 0
diff changeset
   434
    {
hgs
parents: 0
diff changeset
   435
    return (iSubscriber->HandleDeferralError(aError));
hgs
parents: 0
diff changeset
   436
    }
hgs
parents: 0
diff changeset
   437
hgs
parents: 0
diff changeset
   438
/**
hgs
parents: 0
diff changeset
   439
 Handle completion of request notifications, begins deferrals.
hgs
parents: 0
diff changeset
   440
@note Clients should not need to override this, they
hgs
parents: 0
diff changeset
   441
will be notified of events via interface HandleTransition().
hgs
parents: 0
diff changeset
   442
 */
hgs
parents: 0
diff changeset
   443
void CSsmStateAwareSession2::RunL()
hgs
parents: 0
diff changeset
   444
    {
hgs
parents: 0
diff changeset
   445
    iDeferNotification->DeferNotification();
hgs
parents: 0
diff changeset
   446
    iSubscriber->HandleTransition(iStatus.Int());    
hgs
parents: 0
diff changeset
   447
    }
hgs
parents: 0
diff changeset
   448
hgs
parents: 0
diff changeset
   449
/**
hgs
parents: 0
diff changeset
   450
Cancels an outstanding notification request.
hgs
parents: 0
diff changeset
   451
Any outstanding notification request completes with KErrCancel.
hgs
parents: 0
diff changeset
   452
*/
hgs
parents: 0
diff changeset
   453
void CSsmStateAwareSession2::DoCancel()
hgs
parents: 0
diff changeset
   454
    {
hgs
parents: 0
diff changeset
   455
    iDeferNotification->Cancel();
hgs
parents: 0
diff changeset
   456
    iSsmStateAwareSession.RequestStateNotificationCancel();
hgs
parents: 0
diff changeset
   457
    }
hgs
parents: 0
diff changeset
   458
hgs
parents: 0
diff changeset
   459
#else
hgs
parents: 0
diff changeset
   460
EXPORT_C CSsmStateAwareSession2* CSsmStateAwareSession2::NewL(TDmDomainId /*aDomainId*/, MStateChangeNotificationSubscriber2& /*aSubscriber*/)
hgs
parents: 0
diff changeset
   461
    {
hgs
parents: 0
diff changeset
   462
    //This functionality is not supported , so returning NULL.
hgs
parents: 0
diff changeset
   463
    return NULL;
hgs
parents: 0
diff changeset
   464
    }
hgs
parents: 0
diff changeset
   465
hgs
parents: 0
diff changeset
   466
//All the below functionality will not be provided.
hgs
parents: 0
diff changeset
   467
hgs
parents: 0
diff changeset
   468
EXPORT_C  CSsmStateAwareSession2::~CSsmStateAwareSession2()        
hgs
parents: 0
diff changeset
   469
    {    
hgs
parents: 0
diff changeset
   470
    }
hgs
parents: 0
diff changeset
   471
hgs
parents: 0
diff changeset
   472
EXPORT_C TSsmState CSsmStateAwareSession2::GetState()
hgs
parents: 0
diff changeset
   473
    {
hgs
parents: 0
diff changeset
   474
    //returning dummyState to get rid of compiler warning. 
hgs
parents: 0
diff changeset
   475
    TSsmState dummyState;
hgs
parents: 0
diff changeset
   476
    return dummyState;
hgs
parents: 0
diff changeset
   477
    }
hgs
parents: 0
diff changeset
   478
hgs
parents: 0
diff changeset
   479
EXPORT_C void CSsmStateAwareSession2::RequestStateNotification()
hgs
parents: 0
diff changeset
   480
    {    
hgs
parents: 0
diff changeset
   481
    }
hgs
parents: 0
diff changeset
   482
hgs
parents: 0
diff changeset
   483
EXPORT_C void CSsmStateAwareSession2::RequestStateNotificationCancel()
hgs
parents: 0
diff changeset
   484
    {    
hgs
parents: 0
diff changeset
   485
    }
hgs
parents: 0
diff changeset
   486
hgs
parents: 0
diff changeset
   487
EXPORT_C void CSsmStateAwareSession2::AcknowledgeStateNotification(TInt /*aError*/)
hgs
parents: 0
diff changeset
   488
    {    
hgs
parents: 0
diff changeset
   489
    }
hgs
parents: 0
diff changeset
   490
hgs
parents: 0
diff changeset
   491
EXPORT_C void CSsmStateAwareSession2::AcknowledgeAndRequestStateNotification(TInt /*aError*/)
hgs
parents: 0
diff changeset
   492
    {    
hgs
parents: 0
diff changeset
   493
    }
hgs
parents: 0
diff changeset
   494
hgs
parents: 0
diff changeset
   495
void CSsmStateAwareSession2::RunL()
hgs
parents: 0
diff changeset
   496
    {        
hgs
parents: 0
diff changeset
   497
    }
hgs
parents: 0
diff changeset
   498
hgs
parents: 0
diff changeset
   499
void CSsmStateAwareSession2::DoCancel()
hgs
parents: 0
diff changeset
   500
    {    
hgs
parents: 0
diff changeset
   501
    }
hgs
parents: 0
diff changeset
   502
	
hgs
parents: 0
diff changeset
   503
TInt CSsmStateAwareSession2::HandleDeferralError(TInt aError)
hgs
parents: 0
diff changeset
   504
	{
hgs
parents: 0
diff changeset
   505
	return aError;
hgs
parents: 0
diff changeset
   506
	}
hgs
parents: 0
diff changeset
   507
hgs
parents: 0
diff changeset
   508
#endif