|
1 /* |
|
2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). |
|
3 * All rights reserved. |
|
4 * This component and the accompanying materials are made available |
|
5 * under the terms of "Eclipse Public License v1.0" |
|
6 * which accompanies this distribution, and is available |
|
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 * |
|
9 * Initial Contributors: |
|
10 * Nokia Corporation - initial contribution. |
|
11 * |
|
12 * Contributors: |
|
13 * |
|
14 * Description: ExtMemCtrl plug-in adapter for DCMO |
|
15 * |
|
16 */ |
|
17 |
|
18 |
|
19 #include <f32file.h> |
|
20 #include <driveinfo.h> |
|
21 #include <barsread.h> |
|
22 #include <barsc2.h> |
|
23 #include <f32file.h> |
|
24 #include <data_caging_path_literals.hrh> |
|
25 #include <DevManInternalCRKeys.h> |
|
26 #include <centralrepository.h> |
|
27 #include "extmemctrldcmoadapter.h" |
|
28 #include "hbtextresolversymbian.h" |
|
29 |
|
30 _LIT( KdcmoResourceFileName, "deviceupdates_" ); |
|
31 _LIT( KdcmoResourceFilePath, "z:/resource/qt/translations/" ); |
|
32 _LIT( KExtMemCtrlProperty, "ExternalMemory"); |
|
33 _LIT( KExtMemCtrlDescription, "Used to enable/disable the ExtMem"); |
|
34 |
|
35 |
|
36 // Construction and destruction functions |
|
37 |
|
38 // ---------------------------------------------------------------------------------------- |
|
39 // CExtMemCtrlDCMOAdapter::NewL |
|
40 // ---------------------------------------------------------------------------------------- |
|
41 CExtMemCtrlDCMOAdapter* CExtMemCtrlDCMOAdapter::NewL(TAny* aParams) |
|
42 { |
|
43 CExtMemCtrlDCMOAdapter* self=new(ELeave) CExtMemCtrlDCMOAdapter(aParams); |
|
44 CleanupStack::PushL(self); |
|
45 self->ConstructL(); |
|
46 CleanupStack::Pop(); |
|
47 return self; |
|
48 } |
|
49 |
|
50 // ---------------------------------------------------------------------------------------- |
|
51 // CExtMemCtrlDCMOAdapter::~CExtMemCtrlDCMOAdapter |
|
52 // ---------------------------------------------------------------------------------------- |
|
53 CExtMemCtrlDCMOAdapter::~CExtMemCtrlDCMOAdapter() |
|
54 { |
|
55 delete iProperty; |
|
56 iProperty = NULL; |
|
57 delete iDescription; |
|
58 iDescription = NULL; |
|
59 } |
|
60 |
|
61 // ---------------------------------------------------------------------------------------- |
|
62 // CExtMemCtrlDCMOAdapter::CExtMemCtrlDCMOAdapter |
|
63 // ---------------------------------------------------------------------------------------- |
|
64 CExtMemCtrlDCMOAdapter::CExtMemCtrlDCMOAdapter(TAny* aInitParams) |
|
65 : iInitParams((CDCMOInterface::TDCMOInterfaceInitParams*)aInitParams) |
|
66 { |
|
67 // See ConstructL() for initialisation completion. |
|
68 } |
|
69 |
|
70 // ---------------------------------------------------------------------------------------- |
|
71 // CExtMemCtrlDCMOAdapter::ConstructL |
|
72 // ---------------------------------------------------------------------------------------- |
|
73 void CExtMemCtrlDCMOAdapter::ConstructL() |
|
74 { |
|
75 // Safely complete the initialization of the constructed object |
|
76 if(iInitParams->descriptor) |
|
77 iProperty = (iInitParams->descriptor)->AllocL(); |
|
78 else |
|
79 iProperty = KExtMemCtrlProperty().AllocL(); |
|
80 iDescription = KExtMemCtrlDescription().AllocL(); |
|
81 } |
|
82 |
|
83 // Implementation of CDCMOInterface |
|
84 |
|
85 // ---------------------------------------------------------------------------------------- |
|
86 // CExtMemCtrlDCMOAdapter::GetDCMOPluginIntAttributeValueL |
|
87 // Gets the integer attribute value. |
|
88 // ---------------------------------------------------------------------------------------- |
|
89 TDCMOStatus CExtMemCtrlDCMOAdapter::GetDCMOPluginIntAttributeValueL(TDCMONode aId, TInt& aValue) |
|
90 { |
|
91 TDCMOStatus status(EDcmoSuccess); |
|
92 TInt err(KErrNone); |
|
93 |
|
94 switch(aId) |
|
95 { |
|
96 case EGroup: { |
|
97 aValue = EHardware; |
|
98 } |
|
99 break; |
|
100 case EAttached: { |
|
101 aValue = 0; |
|
102 RFs fsMemoryCard; |
|
103 err = fsMemoryCard.Connect(); |
|
104 if ( err != KErrNone ) |
|
105 { |
|
106 status = EDcmoFail; |
|
107 } |
|
108 TDriveInfo dInfo; |
|
109 TVolumeInfo vInfo; |
|
110 TInt error = fsMemoryCard.Drive( dInfo, EDriveF ); |
|
111 if( error == KErrNone ) |
|
112 { |
|
113 error = fsMemoryCard.Volume( vInfo, EDriveF ); |
|
114 if( error == KErrNone ) |
|
115 { |
|
116 aValue = 1; |
|
117 } |
|
118 } |
|
119 fsMemoryCard.Close(); |
|
120 } |
|
121 break; |
|
122 case EEnabled:{ |
|
123 RFs fsMemoryCard; |
|
124 err = fsMemoryCard.Connect(); |
|
125 if ( err != KErrNone ) |
|
126 { |
|
127 status = EDcmoFail; |
|
128 } |
|
129 |
|
130 TDriveInfo info; |
|
131 err=fsMemoryCard.Drive(info, EDriveF); |
|
132 // DBG_ARGS8( _S8("ExtMem err = %d info.iType = %d"), err, info.iType ); |
|
133 |
|
134 if (info.iType == EMediaNotPresent || err != KErrNone ||info.iType == EMediaUnknown ) |
|
135 { |
|
136 aValue = 0; |
|
137 } |
|
138 else |
|
139 { |
|
140 aValue = 1; |
|
141 } |
|
142 fsMemoryCard.Close(); |
|
143 } |
|
144 break; |
|
145 case EDenyUserEnable: { |
|
146 aValue = 1; |
|
147 } |
|
148 break; |
|
149 case ENotifyUser: { |
|
150 aValue = 1; |
|
151 } |
|
152 break; |
|
153 default : |
|
154 status = EDcmoNotFound; |
|
155 } |
|
156 return status; |
|
157 } |
|
158 |
|
159 // ---------------------------------------------------------------------------------------- |
|
160 // CExtMemCtrlDCMOAdapter::GetDCMOPluginStrAttributeValueL |
|
161 // Gets the string attribute value. |
|
162 // ---------------------------------------------------------------------------------------- |
|
163 TDCMOStatus CExtMemCtrlDCMOAdapter::GetDCMOPluginStrAttributeValueL(TDCMONode aId, TDes& aStrValue) |
|
164 { |
|
165 TDCMOStatus status(EDcmoSuccess); |
|
166 switch(aId) |
|
167 { |
|
168 case EProperty: aStrValue = *iProperty; |
|
169 break; |
|
170 case EDescription: aStrValue = *iDescription; |
|
171 break; |
|
172 default : |
|
173 status = EDcmoNotFound; |
|
174 } |
|
175 return status; |
|
176 } |
|
177 |
|
178 // ---------------------------------------------------------------------------------------- |
|
179 // CExtMemCtrlDCMOAdapter::SetDCMOPluginIntAttributeValueL |
|
180 // Sets the integer attribute value. |
|
181 // ---------------------------------------------------------------------------------------- |
|
182 TDCMOStatus CExtMemCtrlDCMOAdapter::SetDCMOPluginIntAttributeValueL(TDCMONode aId, TInt aValue) |
|
183 { |
|
184 TDCMOStatus status(EDcmoFail); |
|
185 TInt err(KErrNone); |
|
186 |
|
187 switch(aId) |
|
188 { |
|
189 case EDenyUserEnable: |
|
190 break; |
|
191 case ENotifyUser: |
|
192 break; |
|
193 case EEnable: { |
|
194 RFs fsMemoryCard; |
|
195 err = fsMemoryCard.Connect(); |
|
196 if ( err != KErrNone ) |
|
197 { |
|
198 return status ; |
|
199 } |
|
200 TBuf<255> fsysname; |
|
201 fsysname.Zero(); |
|
202 if (!aValue) |
|
203 { |
|
204 fsMemoryCard.FileSystemName(fsysname,EDriveF); |
|
205 TRequestStatus stat; |
|
206 fsMemoryCard.NotifyDismount(EDriveF, stat, EFsDismountForceDismount); |
|
207 User::WaitForRequest(stat); |
|
208 //err= fsMemoryCard.DismountFileSystem(fsysname, EDriveF); |
|
209 //if (err == KErrNone) |
|
210 status =EDcmoSuccess; |
|
211 } |
|
212 else |
|
213 { |
|
214 TInt err(fsMemoryCard.FileSystemName(fsysname,EDriveF)); |
|
215 if (err != KErrNone && !fsysname.Length()) |
|
216 { |
|
217 _LIT( KFmgrFatFSName, "Fat" ); |
|
218 err = fsMemoryCard.MountFileSystem( KFmgrFatFSName, EDriveF ); |
|
219 } |
|
220 status = EDcmoSuccess; |
|
221 } |
|
222 fsMemoryCard.Close(); |
|
223 CRepository *rep = NULL; |
|
224 TRAPD( err1, rep = CRepository::NewL( KCRUidDeviceManagementInternalKeys )) ; |
|
225 if(!err1) |
|
226 rep->Set( KDevManMemCardCtrl, aValue ); |
|
227 delete rep; |
|
228 rep = NULL; |
|
229 } |
|
230 break; |
|
231 default : |
|
232 status = EDcmoNotFound; |
|
233 } |
|
234 return status; |
|
235 } |
|
236 |
|
237 // ---------------------------------------------------------------------------------------- |
|
238 // CExtMemCtrlDCMOAdapter::SetDCMOPluginStrAttributeValueL |
|
239 // Sets the string attribute value. |
|
240 // ---------------------------------------------------------------------------------------- |
|
241 TDCMOStatus CExtMemCtrlDCMOAdapter::SetDCMOPluginStrAttributeValueL(TDCMONode /* aId */, const TDes& /* aStrValue */) |
|
242 { |
|
243 // Nothing to do |
|
244 TDCMOStatus status(EDcmoNotSupported); |
|
245 return status; |
|
246 } |
|
247 |
|
248 // ---------------------------------------------------------------------------------------- |
|
249 // CExtMemCtrlDCMOAdapter::GetLocalizedNameL |
|
250 // returns the localized plug-in name. |
|
251 // ---------------------------------------------------------------------------------------- |
|
252 void CExtMemCtrlDCMOAdapter::GetLocalizedNameL (HBufC*& aLocName) |
|
253 { |
|
254 TBool result = HbTextResolverSymbian::Init(KdcmoResourceFileName, KdcmoResourceFilePath ); |
|
255 _LIT(KTextExtMemory, "txt_device_update_info_external_memory_card"); |
|
256 aLocName = HbTextResolverSymbian::LoadL(KTextExtMemory); |
|
257 } |