35 The queueing mechanism is to handle multiple clients at a time not to handle multiple |
35 The queueing mechanism is to handle multiple clients at a time not to handle multiple |
36 requests from one particular clients session. |
36 requests from one particular clients session. |
37 |
37 |
38 @internalComponent |
38 @internalComponent |
39 */ |
39 */ |
40 |
40 class CEmergencyAdaptationMessage; |
41 |
|
42 class CEmergencyCallRfAdaptation : public CActive |
41 class CEmergencyCallRfAdaptation : public CActive |
43 { |
42 { |
44 public: |
43 public: |
45 static CEmergencyCallRfAdaptation* NewL(MEmergencyCallRfAdaptation& aAdaptation); |
44 static CEmergencyCallRfAdaptation* NewL(MEmergencyCallRfAdaptation* aAdaptation); |
46 ~CEmergencyCallRfAdaptation(); |
45 ~CEmergencyCallRfAdaptation(); |
47 |
46 |
48 void Release(); |
47 void Release(); |
49 void DoActivateRfForEmergencyCallL(const RMessage2& aMessage); |
48 void DoActivateRfForEmergencyCallL(const RMessage2& aMessage); |
50 void DoDeactivateRfForEmergencyCallL(const RMessage2& aMessage); |
49 void DoDeactivateRfForEmergencyCallL(const RMessage2& aMessage); |
51 void DoEmergencyCallRfAdaptationCancelL(const RMessage2& aMessage); |
50 void DoEmergencyCallRfAdaptationCancelL(const RMessage2& aMessage); |
52 void SetPriorityClientSession(CSsmAdaptationSession* aPriorityClientSession); |
51 void SetPriorityClientSession(CSsmAdaptationSession* aPriorityClientSession); |
53 void RemovePriorityClientSession(); |
52 void RemovePriorityClientSession(); |
54 void ReserveMemoryL(); |
53 void ReserveMemoryL(); |
|
54 void DeleteAdaptationMessage(); |
|
55 void NotifyAndRemoveAll(); |
|
56 void Dequeue(CEmergencyAdaptationMessage *&aCurrentMessage); |
55 protected: |
57 protected: |
56 void RunL(); |
58 void RunL(); |
57 TInt RunError( TInt aError ); |
59 TInt RunError( TInt aError ); |
58 void DoCancel(); |
60 void DoCancel(); |
|
61 void ConstructL(MEmergencyCallRfAdaptation* aAdaptation); |
59 |
62 |
60 private: |
63 private: |
61 |
64 |
62 CEmergencyCallRfAdaptation(MEmergencyCallRfAdaptation& aAdaptation); |
65 CEmergencyCallRfAdaptation(); |
63 void SubmitOrQueueL(const RMessage2 &aMessage); |
66 void SubmitOrQueueL(const RMessage2 &aMessage); |
64 void Submit(CAdaptationMessage*& aMessage); |
67 void Submit(CEmergencyAdaptationMessage*& aMessage); |
65 |
68 |
66 private: |
69 private: |
67 CAdaptationMessage *iCurrentMessage; |
70 CEmergencyAdaptationMessage *iCurrentMessage; |
68 RSsmAdaptationRequestQueue iPendingRequestsQueue; |
71 RPointerArray<CEmergencyAdaptationMessage>iPendingEmergencyRequestsQueue; |
69 |
72 |
70 MEmergencyCallRfAdaptation& iEmergencyCallRfAdaptation; |
73 MEmergencyCallRfAdaptation* iEmergencyCallRfAdaptation; |
71 //Reserving Heap to create CAdaptationMessage in OOM condition for priority clients |
|
72 RHeap* iReservedHeap; |
|
73 //For storing PriorityClientsession |
74 //For storing PriorityClientsession |
74 CSsmAdaptationSession* iPriorityClientSession; |
75 CSsmAdaptationSession* iPriorityClientSession; |
|
76 |
|
77 //Count of unused reserved pointers. |
|
78 TInt iReserveMsgCount; |
|
79 //Pointer Array to store reserved adaptation message pointers |
|
80 RPointerArray<CEmergencyAdaptationMessage> iAdaptationReservedMessageArray; |
75 }; |
81 }; |
76 |
82 |
|
83 enum TMessageStatus |
|
84 { |
|
85 EMsgStatusNULL = 0, //Default status of Message is 0 |
|
86 EMsgReserved = 1, //Flag to indicate the message is using Reserved memory. |
|
87 EMsgInUse = 2 //Flag to indicate the Reserved message is Used. |
|
88 }; |
77 /** |
89 /** |
78 * Used for pushing the CAdaptationMessage object in to cleanup stack. This is needed as |
90 * Class to hold CAdaptationMessage pointer and the value to know whether the current message is from reserved pool |
79 * the message is created using the reserved heap should be freed back to reserved heap |
91 * or normal message. |
80 * instead of deleting. |
|
81 * @internalComponent |
|
82 */ |
92 */ |
83 struct TStoreAdaptationMessage |
93 class CEmergencyAdaptationMessage : public CBase |
84 { |
94 { |
|
95 public: |
|
96 static CEmergencyAdaptationMessage* NewL(const RMessage2& aMessage); |
|
97 static CEmergencyAdaptationMessage* NewL(const RMessage2& aMessage, const TInt8 aMessageStatus); |
|
98 |
|
99 ~CEmergencyAdaptationMessage(); |
|
100 |
|
101 inline void UnsetMessageStatus(const TInt8 aMessageStatus); |
|
102 inline void SetMessageStatus(const TInt8 aMessageStatus); |
|
103 inline TBool IsMessageReserved() const; |
|
104 inline TBool IsMessageInuse() const; |
|
105 void SetMessage(const RMessage2& aMessage); |
|
106 TInt Function() const; |
|
107 CSession2 *Session() const; |
|
108 void Complete(TInt aReason); |
|
109 |
|
110 protected: |
|
111 void ConstructL(const RMessage2& aMessage); |
|
112 |
|
113 private: |
|
114 CEmergencyAdaptationMessage(const TInt8 aMessageStatus); |
|
115 |
|
116 private: |
85 CAdaptationMessage* iAdaptationMessage; |
117 CAdaptationMessage* iAdaptationMessage; |
86 RHeap* iReservedHeap; |
118 // To know the Adaptation Message status. |
|
119 TInt8 iMessageStatus; |
87 }; |
120 }; |
88 |
|
89 #endif // __SUSEMERGENCYCALLRFADAPTATION_H__ |
121 #endif // __SUSEMERGENCYCALLRFADAPTATION_H__ |