13 * |
13 * |
14 * Description: |
14 * Description: |
15 * |
15 * |
16 */ |
16 */ |
17 #include "irqnwkinfoobserver.h" |
17 #include "irqnwkinfoobserver.h" |
18 #include "irqnwkinfoobserverimpl.h" |
18 #include "irqnwkinfoobserver_p.h" |
|
19 |
|
20 IRQNwkInfoObserver * IRQNwkInfoObserver::mInstance = NULL; |
|
21 QMutex IRQNwkInfoObserver::mMutex; |
19 |
22 |
20 // --------------------------------------------------------------------------- |
23 // --------------------------------------------------------------------------- |
21 // IRQNwkInfoObserver::openInstance() |
24 // IRQNwkInfoObserver::openInstance() |
22 // Static function to get a singleton instance of IRQNwkInfoObserver |
25 // Static function to get a singleton instance of IRQNwkInfoObserver |
23 // --------------------------------------------------------------------------- |
26 // --------------------------------------------------------------------------- |
24 // |
27 // |
25 EXPORT_C IRQNwkInfoObserver* IRQNwkInfoObserver::openInstance() |
28 IRQNwkInfoObserver* IRQNwkInfoObserver::openInstance() |
26 { |
29 { |
27 // Get singleton instance |
30 mMutex.lock(); |
28 IRQNwkInfoObserver* nwkInfoObserver = |
|
29 reinterpret_cast<IRQNwkInfoObserver*>(Dll::Tls()); |
|
30 |
31 |
31 if(NULL == nwkInfoObserver) |
32 if (NULL == mInstance) |
32 { |
33 { |
33 TRAPD(error, nwkInfoObserver = createInstanceL()); |
34 mInstance = new IRQNwkInfoObserver(); |
34 if (KErrNone != error) |
35 |
|
36 if (!mInstance->mInitPrivateSuccess) |
35 { |
37 { |
36 delete nwkInfoObserver; |
38 delete mInstance; |
37 nwkInfoObserver = NULL; |
39 mInstance = NULL; |
38 Dll::SetTls(NULL); |
|
39 } |
40 } |
40 } |
41 } |
41 else |
42 else |
42 { |
43 { |
43 nwkInfoObserver->iSingletonInstances++; |
44 mInstance->mRefCount++; |
44 } |
45 } |
45 |
46 |
46 return nwkInfoObserver; |
47 mMutex.unlock(); |
|
48 |
|
49 return mInstance; |
47 } |
50 } |
48 |
51 |
49 // --------------------------------------------------------------------------- |
52 // --------------------------------------------------------------------------- |
50 // IRQNwkInfoObserver::closeInstance() |
53 // IRQNwkInfoObserver::closeInstance() |
51 // Close a singleton instance of IRQNwkInfoObserver |
54 // Close a singleton instance of IRQNwkInfoObserver |
52 // --------------------------------------------------------------------------- |
55 // --------------------------------------------------------------------------- |
53 // |
56 // |
54 EXPORT_C void IRQNwkInfoObserver::closeInstance() |
57 void IRQNwkInfoObserver::closeInstance() |
55 { |
58 { |
56 iSingletonInstances--; |
59 mMutex.lock(); |
57 |
60 if ((--mRefCount) == 0) |
58 if (0 == iSingletonInstances) |
|
59 { |
61 { |
60 Dll::SetTls(NULL); |
62 mInstance = NULL; |
61 delete this; |
63 delete this; |
62 } |
64 } |
|
65 mMutex.unlock(); |
63 } |
66 } |
64 |
67 |
65 |
68 |
66 // --------------------------------------------------------------------------- |
69 // --------------------------------------------------------------------------- |
67 // Constructor |
70 // Constructor |
68 // --------------------------------------------------------------------------- |
71 // --------------------------------------------------------------------------- |
69 // |
72 // |
70 IRQNwkInfoObserver::IRQNwkInfoObserver():iBody(NULL), |
73 IRQNwkInfoObserver::IRQNwkInfoObserver(): |
71 iSingletonInstances(0) |
74 mRefCount(1), d_ptr(new IRQNwkInfoObserverPrivate(this)), mInitPrivateSuccess(false) |
72 { |
75 { |
73 |
76 if (NULL != d_ptr) |
|
77 { |
|
78 mInitPrivateSuccess = d_ptr->Construct(); |
|
79 } |
74 } |
80 } |
75 |
81 |
76 // --------------------------------------------------------------------------- |
82 // --------------------------------------------------------------------------- |
77 // Destructor |
83 // Destructor |
78 // --------------------------------------------------------------------------- |
84 // --------------------------------------------------------------------------- |
79 // |
85 // |
80 IRQNwkInfoObserver::~IRQNwkInfoObserver() |
86 IRQNwkInfoObserver::~IRQNwkInfoObserver() |
81 { |
87 { |
82 stopMonitorNwkInfo(); |
88 stopMonitorNwkInfo(); |
83 |
89 |
84 delete iBody; |
90 delete d_ptr; |
85 iBody = NULL; |
|
86 } |
|
87 |
|
88 // --------------------------------------------------------------------------- |
|
89 // IRQNwkInfoObserver::createInstanceL() |
|
90 // Creates IRQNwkInfoObserver instance |
|
91 // @return IRQNwkInfoObserver* |
|
92 // --------------------------------------------------------------------------- |
|
93 // |
|
94 IRQNwkInfoObserver* IRQNwkInfoObserver::createInstanceL() |
|
95 { |
|
96 IRQNwkInfoObserver* nwkInfoObserver = new (ELeave) IRQNwkInfoObserver(); |
|
97 nwkInfoObserver->constructL(); |
|
98 User::LeaveIfError(Dll::SetTls(nwkInfoObserver)); |
|
99 nwkInfoObserver->iSingletonInstances = 1; |
|
100 |
|
101 return nwkInfoObserver; |
|
102 } |
|
103 |
|
104 // --------------------------------------------------------------------------- |
|
105 // IRQNwkInfoObserver::constructL() |
|
106 // Two-Phase Constructor. |
|
107 // --------------------------------------------------------------------------- |
|
108 // |
|
109 void IRQNwkInfoObserver::constructL() |
|
110 { |
|
111 iBody = IRQNwkInfoObserverImpl::NewL(this); |
|
112 } |
91 } |
113 |
92 |
114 // --------------------------------------------------------------------------- |
93 // --------------------------------------------------------------------------- |
115 // IRQNwkInfoObserver::startMonitorNwkInfo() |
94 // IRQNwkInfoObserver::startMonitorNwkInfo() |
116 // start monitoring network info change |
95 // start monitoring network info change |
117 // --------------------------------------------------------------------------- |
96 // --------------------------------------------------------------------------- |
118 // |
97 // |
119 EXPORT_C void IRQNwkInfoObserver::startMonitorNwkInfo() |
98 void IRQNwkInfoObserver::startMonitorNwkInfo() |
120 { |
99 { |
121 if(iBody) |
100 if(d_ptr) |
122 { |
101 { |
123 iBody->startNwkInfoMonitor(); |
102 d_ptr->startNwkInfoMonitor(); |
124 } |
103 } |
125 } |
104 } |
126 |
105 |
127 // --------------------------------------------------------------------------- |
106 // --------------------------------------------------------------------------- |
128 // IRQNwkInfoObserver::stopMonitorNwkInfo() |
107 // IRQNwkInfoObserver::stopMonitorNwkInfo() |
129 // stop monitoring network info change |
108 // stop monitoring network info change |
130 // --------------------------------------------------------------------------- |
109 // --------------------------------------------------------------------------- |
131 // |
110 // |
132 EXPORT_C void IRQNwkInfoObserver::stopMonitorNwkInfo() |
111 void IRQNwkInfoObserver::stopMonitorNwkInfo() |
133 { |
112 { |
134 if(iBody) |
113 if(d_ptr) |
135 { |
114 { |
136 iBody->Cancel(); |
115 d_ptr->Cancel(); |
137 } |
116 } |
138 } |
117 } |
139 |
|
140 // --------------------------------------------------------------------------- |
|
141 // From MIRQNwkInfoUpdate. |
|
142 // --------------------------------------------------------------------------- |
|
143 // |
|
144 void IRQNwkInfoObserver::updateCurrentNwkInfo(const QString &aCurrentNwkMCC, const QString &aCurrentNwkMNC) |
|
145 { |
|
146 emit currentNwkChanged(aCurrentNwkMCC,aCurrentNwkMNC); |
|
147 } |
|
148 |
|
149 |
|
150 // --------------------------------------------------------------------------- |
|
151 // From MIRQNwkInfoUpdate. |
|
152 // --------------------------------------------------------------------------- |
|
153 // |
|
154 void IRQNwkInfoObserver::updateHomeNwkInfo(const QString &aHomeNetworkMCC, const QString &aHomeNetworkMNC) |
|
155 { |
|
156 emit homeNwkChanged(aHomeNetworkMCC,aHomeNetworkMNC); |
|
157 } |
|