--- a/sysstatemgmt/systemstatemgr/sus/inc/susemergencycallrfadaptation.h Tue Feb 02 00:53:00 2010 +0200
+++ b/sysstatemgmt/systemstatemgr/sus/inc/susemergencycallrfadaptation.h Sat Feb 20 00:05:00 2010 +0200
@@ -1,4 +1,4 @@
-// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2009-2010 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"
@@ -37,12 +37,11 @@
@internalComponent
*/
-
-
+class CEmergencyAdaptationMessage;
class CEmergencyCallRfAdaptation : public CActive
{
public:
- static CEmergencyCallRfAdaptation* NewL(MEmergencyCallRfAdaptation& aAdaptation);
+ static CEmergencyCallRfAdaptation* NewL(MEmergencyCallRfAdaptation* aAdaptation);
~CEmergencyCallRfAdaptation();
void Release();
@@ -52,38 +51,71 @@
void SetPriorityClientSession(CSsmAdaptationSession* aPriorityClientSession);
void RemovePriorityClientSession();
void ReserveMemoryL();
+ void DeleteAdaptationMessage();
+ void NotifyAndRemoveAll();
+ void Dequeue(CEmergencyAdaptationMessage *&aCurrentMessage);
protected:
void RunL();
TInt RunError( TInt aError );
void DoCancel();
+ void ConstructL(MEmergencyCallRfAdaptation* aAdaptation);
private:
- CEmergencyCallRfAdaptation(MEmergencyCallRfAdaptation& aAdaptation);
+ CEmergencyCallRfAdaptation();
void SubmitOrQueueL(const RMessage2 &aMessage);
- void Submit(CAdaptationMessage*& aMessage);
+ void Submit(CEmergencyAdaptationMessage*& aMessage);
private:
- CAdaptationMessage *iCurrentMessage;
- RSsmAdaptationRequestQueue iPendingRequestsQueue;
+ CEmergencyAdaptationMessage *iCurrentMessage;
+ RPointerArray<CEmergencyAdaptationMessage>iPendingEmergencyRequestsQueue;
- MEmergencyCallRfAdaptation& iEmergencyCallRfAdaptation;
- //Reserving Heap to create CAdaptationMessage in OOM condition for priority clients
- RHeap* iReservedHeap;
+ MEmergencyCallRfAdaptation* iEmergencyCallRfAdaptation;
//For storing PriorityClientsession
CSsmAdaptationSession* iPriorityClientSession;
+
+ //Count of unused reserved pointers.
+ TInt iReserveMsgCount;
+ //Pointer Array to store reserved adaptation message pointers
+ RPointerArray<CEmergencyAdaptationMessage> iAdaptationReservedMessageArray;
};
+enum TMessageStatus
+ {
+ EMsgStatusNULL = 0, //Default status of Message is 0
+ EMsgReserved = 1, //Flag to indicate the message is using Reserved memory.
+ EMsgInUse = 2 //Flag to indicate the Reserved message is Used.
+ };
/**
- * Used for pushing the CAdaptationMessage object in to cleanup stack. This is needed as
- * the message is created using the reserved heap should be freed back to reserved heap
- * instead of deleting.
- * @internalComponent
+ * Class to hold CAdaptationMessage pointer and the value to know whether the current message is from reserved pool
+ * or normal message.
*/
-struct TStoreAdaptationMessage
+class CEmergencyAdaptationMessage : public CBase
{
+public:
+ static CEmergencyAdaptationMessage* NewL(const RMessage2& aMessage);
+ static CEmergencyAdaptationMessage* NewL(const RMessage2& aMessage, const TInt8 aMessageStatus);
+
+ ~CEmergencyAdaptationMessage();
+
+ inline void UnsetMessageStatus(const TInt8 aMessageStatus);
+ inline void SetMessageStatus(const TInt8 aMessageStatus);
+ inline TBool IsMessageReserved() const;
+ inline TBool IsMessageInuse() const;
+ void SetMessage(const RMessage2& aMessage);
+ TInt Function() const;
+ CSession2 *Session() const;
+ void Complete(TInt aReason);
+
+protected:
+ void ConstructL(const RMessage2& aMessage);
+
+private:
+ CEmergencyAdaptationMessage(const TInt8 aMessageStatus);
+
+private:
CAdaptationMessage* iAdaptationMessage;
- RHeap* iReservedHeap;
+ // To know the Adaptation Message status.
+ TInt8 iMessageStatus;
};
-
#endif // __SUSEMERGENCYCALLRFADAPTATION_H__