diff -r 89d6a7a84779 -r 25a17d01db0c Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/resourcemanager_8cpp-source.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/resourcemanager_8cpp-source.html Fri Jan 22 18:26:19 2010 +0000 @@ -0,0 +1,667 @@ + +
+00001 // Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +00002 // All rights reserved. +00003 // This component and the accompanying materials are made available +00004 // under the terms of "Eclipse Public License v1.0" +00005 // which accompanies this distribution, and is available +00006 // at the URL "http://www.eclipse.org/legal/epl-v10.html". +00007 // +00008 // Initial Contributors: +00009 // Nokia Corporation - initial contribution. +00010 // +00011 // Contributors: +00012 // +00013 // Description: +00014 // Demonstrates the Resource Manager's user side API, RBusDevResManUs +00015 +00016 #include <e32cons.h> +00017 #include <d32resmanus.h> +00018 +00019 _LIT(KTxtExampleCode,"PRM Example"); +00020 _LIT(KTxtFailed,"\nFailed with error : %d \n"); +00021 _LIT(KTxtPressAnyKey," \nPress any key to continue\n"); +00022 _LIT(KEnterResourceIdValue,"\nEnter the resource ID - any number other than zero: "); +00023 _LIT(KTxtStateChange,"\nState of the resource after the change: %d"); +00024 _LIT(KPrintNoOfClients,"\nNumber of clients is %d \n"); +00025 _LIT(KTxtOptionNotSupported,"\nThis option is not supported\n"); +00031 _LIT8(KClient,"resourcemanager"); +00032 TClientName gName(KClient); +00033 +00034 //Indicates whether kernel-side (as well as user-side) clients are included in the request. +00035 const TBool gIsKernelClient = EFalse; +00036 +00037 //Holds the resource ID selected by the user +00038 TUint gResourceId; +00039 +00044 RBusDevResManUs gChannel; +00045 +00046 CConsoleBase* gConsole; +00047 +00048 TUint gNumClients = 0; //The number of resource manager clients +00049 TUint gNumResources = 0; //The number of available resources +00050 +00056 TInt gReadValue = 0; +00057 +00061 TUint GetUserInput() +00062 { +00063 TBufC<50> buf; +00064 TPtr ptr(buf.Des()); +00065 TKeyCode ch = gConsole->Getch(); +00066 while(ch != EKeyEnter) +00067 { +00068 _LIT(KChar, "%c"); +00069 gConsole->Printf(KChar,ch); +00070 if(ch!= EKeyBackspace) +00071 { +00072 ptr.Append(ch); +00073 } +00074 ch=gConsole->Getch(); +00075 } +00076 TUint value; +00077 +00078 TUint err = TLex(ptr).Val(value, EDecimal); +00079 +00080 if(value == 0) +00081 { +00082 gConsole->Printf(KTxtOptionNotSupported); +00083 return (TUint)KErrNotSupported;; +00084 } +00085 else +00086 { +00087 if (err == (TUint)KErrNone) +00088 { +00089 return value; +00090 } +00091 else +00092 { +00093 return (TUint)KErrNotSupported;; // Error condition - could not parse input to number. +00094 } +00095 } +00096 } +00097 +00101 void GetNoOfResources() +00102 { +00103 _LIT(KTxtOption,"\nGet the number of resources \n"); +00104 gConsole->Printf(KTxtOption); +00105 TInt err=gChannel.GetNoOfResources(gNumResources); +00106 if(err != KErrNone) +00107 { +00108 gConsole->Printf(KTxtFailed,err); +00109 } +00110 else +00111 { +00112 _LIT(KPrintNoOfResources,"\nNumber of resources = %d \n"); +00113 gConsole->Printf(KPrintNoOfResources,gNumResources); +00114 } +00115 } +00116 +00121 void GetResourceInfo() +00122 { +00123 _LIT(KTxtOption,"\nGet information about a particular resource...\n"); +00124 gConsole->Printf(KTxtOption); +00125 //Request the user to select a resource +00126 gConsole->Printf(KEnterResourceIdValue); +00127 gResourceId = GetUserInput(); +00128 if(gResourceId != (TUint)KErrNotSupported) +00129 { +00130 /* +00131 The name of the resource is held in an 8 bit buffer. In order to print this value as a string, +00132 it must be converted to a 16 bit buffer. One character is left to hold the 'Null' character to mark the end of +00133 the string. +00134 */ +00135 TBuf16<MAX_RESOURCE_NAME_LENGTH+1>name; //maximum resource length defined in d32resmanus.h +00136 // retrieve information about the selected resource +00137 TResourceInfoBuf *info = new TResourceInfoBuf(); +00138 TInt err=gChannel.GetResourceInfo(gResourceId,info); +00139 if(err!= KErrNone) +00140 { +00141 gConsole->Printf(KTxtFailed,err); +00142 } +00143 else +00144 { +00145 name.Copy((*info)().iName); //Copy the name of the resource into the Unicode buffer. +00146 name.PtrZ(); //Append a zero terminator to the buffer. +00147 _LIT(KPrintResourceInfo,"\nResource id = %d \t Resource name = %S \n"); +00148 gConsole->Printf(KPrintResourceInfo,gResourceId ,&name); +00149 } +00150 delete info; +00151 } +00152 } +00153 +00157 void GetAllResourcesInfoL() +00158 { +00159 _LIT(KTxtOption,"\nGet information about all the resources...\n"); +00160 gConsole->Printf(KTxtOption); +00161 //Find the number of resources available +00162 GetNoOfResources(); +00163 /* +00164 Construct an array of TResourceInfoBuf objects. +00165 TResourceInfo holds all the information about a resource. +00166 */ +00167 TInt err; +00168 RSimplePointerArray<TResourceInfoBuf> resPtrs(gNumResources); +00169 for(TUint i=0;i<gNumResources;i++) +00170 { +00171 TResourceInfoBuf* info = new TResourceInfoBuf; +00172 if((err=resPtrs.Insert(info, i))!=KErrNone) +00173 { +00174 gConsole->Printf(KTxtFailed,err); +00175 } +00176 } +00177 //Retrieve information about all the available resources +00178 if((err=gChannel.GetAllResourcesInfo(&resPtrs,gNumResources))!=KErrNone) +00179 { +00180 gConsole->Printf(KTxtFailed,err); +00181 } +00182 /* +00183 The name of the resource is held in an 8 bit buffer. In order to print this value as a string, +00184 it must be converted to a 16 bit buffer. One character is left to hold the 'Null' character to mark the end of +00185 the string. +00186 */ +00187 TBuf16<MAX_RESOURCE_NAME_LENGTH+1>name; +00188 for(TUint i=0; i<gNumResources; i++) +00189 { +00190 TResourceInfoBuf* currentInfo = resPtrs[i]; +00191 name.Copy((*currentInfo)().iName);//Copy the name of the resource into the Unicode buffer. +00192 name.PtrZ();//Append a zero terminator to the buffer. +00193 _LIT(KPrintResourceInfo,"Resource id = %d, name = %S \n"); +00194 gConsole->Printf(KPrintResourceInfo,(*currentInfo)().iId,&name); +00195 if(i%5 == 0 && i!= 0) //Print 5 resources at a time. +00196 { +00197 gConsole->Printf(KTxtPressAnyKey); +00198 TChar tchar = gConsole->Getch(); +00199 } +00200 delete currentInfo; +00201 } +00202 resPtrs.Close(); //Close the R class +00203 } +00204 +00208 void GetResourceState() +00209 { +00210 _LIT(KTxtOption,"\nGet the state of a particular resource... \n"); +00211 gConsole->Printf(KTxtOption); +00212 //Enter a resource value. +00213 gConsole->Printf(KEnterResourceIdValue); +00214 gResourceId = GetUserInput(); +00215 if(gResourceId != (TUint)KErrNotSupported) +00216 { +00217 TRequestStatus getResourceStatus; +00231 TBool isCached = EFalse; +00232 TInt levelOwnerId = 0; +00233 gChannel.GetResourceState(getResourceStatus,gResourceId,isCached,&gReadValue,&levelOwnerId); +00234 User::WaitForRequest(getResourceStatus); +00235 if(getResourceStatus.Int() != KErrNone) +00236 { +00237 gConsole->Printf(KTxtFailed,getResourceStatus.Int()); +00238 } +00239 else +00240 { +00241 _LIT(KPrintResourceState,"\nResource state is %d\n"); +00242 gConsole->Printf(KPrintResourceState,gReadValue); +00243 _LIT(KTxtLevelOwnerId,"\nId of the client which owns this resource is %d"); +00244 gConsole->Printf(KTxtLevelOwnerId,levelOwnerId); +00245 } +00246 } +00247 } +00248 +00252 void GetNumClientsUsingResource() +00253 { +00254 _LIT(KTxtOption,"\nGet the number of clients using a particular resource... \n"); +00255 gConsole->Printf(KTxtOption); +00256 GetNoOfResources(); //Get the total number of resources available +00257 //Ask the user to select a resource. +00258 gConsole->Printf(KEnterResourceIdValue); +00259 gResourceId = GetUserInput(); +00260 if(gResourceId != (TUint)KErrNotSupported) +00261 { +00262 _LIT(KPrintNoOfClientsUsingResource,"\nNumber of clients using resource : %d\n"); +00263 gNumClients = 0; //This should be initialised to '0' otherwise the API returns KErrArgument +00264 TInt err=gChannel.GetNumClientsUsingResource(gResourceId, gNumClients, gIsKernelClient); +00265 if((err == KErrArgument && gNumClients == 0) || err == KErrNone) +00266 { +00267 gConsole->Printf(KPrintNoOfClientsUsingResource,gNumClients); +00268 } +00269 else +00270 { +00271 gConsole->Printf(KTxtFailed,err); +00272 } +00273 } +00274 } +00275 +00279 void GetNumResourcesInUseByClient() +00280 { +00281 _LIT(KTxtOption,"\nGet the number of resources in use by a particular client \n"); +00282 gConsole->Printf(KTxtOption); +00283 _LIT(KTxtClientName,"Name of the client used in this option is resourcemanager "); +00284 gConsole->Printf(KTxtClientName); +00285 //Gets the number of resources used by the client, by passing in the client's name. +00286 TInt err=gChannel.GetNumResourcesInUseByClient(gName, gNumResources, gIsKernelClient); +00287 if(err!=KErrNone) +00288 { +00289 gConsole->Printf(KTxtFailed,err); +00290 } +00291 else +00292 { +00293 _LIT(KPrintNumResourcesInUseByClient,"\nNumber of resources in use by client : %d\n"); +00294 gConsole->Printf(KPrintNumResourcesInUseByClient,gNumResources); +00295 } +00296 } +00297 +00301 void GetInfoOnResourcesInUseByClientL() +00302 { +00303 _LIT(KTxtOption,"\nGet information about all the resources in use by client... \n"); +00304 gConsole->Printf(KTxtOption); +00305 +00306 //Get number of resources in use by the client. +00307 GetNumResourcesInUseByClient(); +00308 +00309 if(gNumResources!= 0) +00310 { +00311 /* +00312 Construct an array of TResourceInfoBuf objects. +00313 TResourceInfo holds all the information about a resource. +00314 */ +00315 RSimplePointerArray<TResourceInfoBuf> resPtrs(gNumResources); +00316 +00317 for(TUint i=0;i<gNumResources;i++) +00318 { +00319 TResourceInfoBuf *info = new TResourceInfoBuf(); +00320 TInt err=resPtrs.Insert(info, i); +00321 if(err!= KErrNone) +00322 { +00323 gConsole->Printf(KTxtFailed,err); +00324 } +00325 } +00326 //Gets information about all the resources +00327 TInt err=gChannel.GetInfoOnResourcesInUseByClient(gName, gNumResources, &resPtrs); +00328 if(err!= KErrNone) +00329 { +00330 gConsole->Printf(KTxtFailed,err); +00331 } +00332 else +00333 { +00334 /* +00335 The name of the resource is held in an 8 bit buffer. In order to print this value as a string, +00336 it must be converted to a 16 bit buffer. One character is left to hold the 'Null' character to mark the end of +00337 the string. +00338 */ +00339 TBuf16<MAX_RESOURCE_NAME_LENGTH+1>name; +00340 _LIT(KPrintResourceInfo,"\nResource %d name = %S \n"); +00341 for(TUint i=0; i<gNumResources; i++) +00342 { +00343 TResourceInfoBuf* currRes = resPtrs[i]; +00344 name.Copy((*currRes)().iName);//Copy the name of the resource into the Unicode buffer. +00345 name.PtrZ();//Append a zero terminator to the buffer. +00346 gConsole->Printf(KPrintResourceInfo,i,&name); +00347 if(i%5 == 0) //Print 5 resources at a time. +00348 { +00349 gConsole->Printf(KTxtPressAnyKey); +00350 TChar tchar = gConsole->Getch(); +00351 } +00352 } +00353 } +00354 resPtrs.Close(); +00355 } +00356 } +00357 +00361 void GetInfoOnClientsUsingResourceL() +00362 { +00363 _LIT(KTxtOption,"\nGet information about all clients using a particular resource... \n"); +00364 gConsole->Printf(KTxtOption); +00365 +00366 //Get the number of clients using a particular resource +00367 GetNumClientsUsingResource(); +00368 +00369 if(gNumClients!= 0) +00370 { +00371 //Construct an array of TClientInfoBuf objects. TClientInfo consists of the client name and ID. +00372 RSimplePointerArray<TClientInfoBuf> resPtrs(gNumClients); +00373 for(TUint i=0;i<gNumClients;i++) +00374 { +00375 TClientInfoBuf *info = new TClientInfoBuf(); +00376 TInt err=resPtrs.Insert(info, i); +00377 if(err!= KErrNone) +00378 { +00379 gConsole->Printf(KTxtFailed,err); +00380 } +00381 } +00382 TInt err=gChannel.GetInfoOnClientsUsingResource(gResourceId, gNumClients, &resPtrs, gIsKernelClient); +00383 if(err!= KErrNone) +00384 { +00385 gConsole->Printf(KTxtFailed,err); +00386 } +00387 else +00388 { +00389 //Print information about all the clients using this resource. +00390 _LIT(KPrintClientName,"Client name %d = %S, ID=%d\n"); +00391 for(TUint i=0;i<gNumClients;i++) +00392 { +00393 TClientInfoBuf* currInfoBuf = resPtrs[i]; +00394 TClientInfo currInfo=(*currInfoBuf)(); +00395 TBuf16<sizeof(TClientName)> name; +00396 name.Copy(currInfo.iName); +00397 gConsole->Printf(KPrintClientName,i,&name,currInfo.iId); +00398 } +00399 } +00400 resPtrs.Close(); +00401 } +00402 } +00403 +00407 void GetNamesOfAllClientsL() +00408 { +00409 _LIT(KTxtOption,"\nGet the names of all clients... \n"); +00410 +00411 gConsole->Printf(KTxtOption); +00412 +00413 //Gets the number of clients +00414 TInt err=gChannel.GetNoOfClients(gNumClients, gIsKernelClient); +00415 +00416 //Creates an array of client names +00417 RSimplePointerArray<TClientName> resPtrs(gNumClients); +00418 if(err != KErrNone) +00419 { +00420 gConsole->Printf(KTxtFailed,err); +00421 } +00422 else +00423 { +00424 gConsole->Printf(KPrintNoOfClients,gNumClients); +00425 for(TUint i=0;i<gNumClients;i++) +00426 { +00427 TClientName *info = new TClientName(); +00428 if((err=resPtrs.Insert(info, i))!= KErrNone) +00429 { +00430 gConsole->Printf(KTxtFailed,err); +00431 } +00432 } +00433 } +00434 +00435 // Gets the names of all clients +00436 if((err=gChannel.GetNamesAllClients(&resPtrs, gNumClients, gIsKernelClient)) != KErrNone) +00437 { +00438 gConsole->Printf(KTxtFailed,err); +00439 } +00440 else +00441 { +00442 _LIT(KPrintNamesOfAllClients,"\nNames of all clients\n"); +00443 _LIT(KPrintClientName,"Client name : %S\n"); +00444 gConsole->Printf(KPrintNamesOfAllClients); +00445 for(TUint i=0;i<gNumClients;i++) +00446 { +00447 TClientName *currName = resPtrs[i]; +00448 TBuf16<sizeof(TClientName)> name; +00449 name.Copy(*currName); +00450 gConsole->Printf(KPrintClientName,&name); +00451 delete currName; +00452 } +00453 } +00454 resPtrs.Close(); +00455 } +00456 +00460 TInt ChangeStateOfResource() +00461 { +00462 _LIT(KTxtOption,"\nChange the state of a particular resource... \n"); +00463 gConsole->Printf(KTxtOption); +00464 +00465 //Gets the current state of the resource +00466 GetResourceState(); +00467 TInt newLevel = gReadValue + 2; //new (random) state value +00468 TRequestStatus changeResourceStatus; +00469 gChannel.ChangeResourceState(changeResourceStatus,gResourceId,newLevel); +00470 User::WaitForRequest(changeResourceStatus); +00471 if(changeResourceStatus.Int() != KErrNone) +00472 { +00473 _LIT(KTxtChangeOfStateFailed,"\nChange of state failed with return value %d\n"); +00474 gConsole->Printf(KTxtChangeOfStateFailed,changeResourceStatus.Int()); +00475 } +00476 else +00477 { +00478 gConsole->Printf(KTxtStateChange,newLevel); +00479 } +00480 return changeResourceStatus.Int(); +00481 } +00482 +00486 void RequestNotification() +00487 { +00488 _LIT(KTxtOption,"\nRequest resource manager to notify the client about changes to the state of a resource... \n"); +00489 gConsole->Printf(KTxtOption); +00490 +00491 //Verify whether ChangeResourceState() is supported. If not, then notification cannot be issued +00492 TInt ret = ChangeStateOfResource(); +00493 if(ret == KErrNone) +00494 { +00495 TRequestStatus notificationStatus; +00496 //Requests notification for any change in the resource state +00497 gChannel.RequestNotification(notificationStatus, gResourceId); +00498 TInt newLevel = gReadValue + 2; +00499 +00500 //Change the resource state. +00501 TRequestStatus changeResourceStatus; +00502 gChannel.ChangeResourceState(changeResourceStatus,gResourceId,newLevel); +00503 User::WaitForRequest(changeResourceStatus); +00504 gConsole->Printf(KTxtStateChange,newLevel); +00505 User::WaitForRequest(notificationStatus); +00506 if(notificationStatus.Int() != KErrNone) +00507 { +00508 _LIT(KTxtNotificationFailed,"\nRequest Notification for any change in the state of a resource failed with %d"); +00509 gConsole->Printf(KTxtNotificationFailed,notificationStatus.Int()); +00510 } +00511 else +00512 { +00513 +00514 _LIT(KTxtNotificationSuccess,"\nRequest Notification for any change in the state of a resource is successful"); +00515 gConsole->Printf(KTxtNotificationSuccess); +00516 } +00517 } +00518 else +00519 { +00520 _LIT(KTxtNotificationNotSupported,"User notification for this resource is not supported"); +00521 gConsole->Printf(KTxtNotificationNotSupported); +00522 } +00523 } +00524 +00525 void GetPowerResourceInfoL() +00526 { +00527 _LIT(KPrintSubMenu,"GetPowerResourceInfo was chosen\n"); +00528 _LIT(KPrintSubMenu1," \nDemonstrate the Get Power Resource APIs\n \ +00529 *****************************************************\n \ +00530 Option 1:GetNoOfResources\n \ +00531 Option 2:GetResourceInfo\n \ +00532 Option 3:GetAllResourcesInfo\n \ +00533 Option 4:GetResourceState\n "); +00534 _LIT(KPrintSubMenu2, "\t \tOption 5:GetNumClientsUsingResource \n \ +00535 Option 6:GetNumResourcesInUseByClient\n \ +00536 Option 7:GetInfoOnResourcesInUseByClient\n \ +00537 Option 8:GetInfoOnClientsUsingResource\n \ +00538 Option 9:GetNamesOfAllClients\n \ +00539 ******************************************************\n " ); +00540 gConsole->ClearScreen(); +00541 gConsole->Printf(KPrintSubMenu); +00542 _LIT(KTxtPressMainESC," \nPress 'ESC' key to go back to the Main Menu\n"); +00543 gConsole->Printf(KTxtPressMainESC); +00544 gConsole->Printf(KPrintSubMenu1); +00545 gConsole->Printf(KPrintSubMenu2); +00546 _LIT(KChooseSubMenuOption,"\nSelect an option 1 - 9 : "); +00547 gConsole->Printf(KChooseSubMenuOption); +00548 TChar tchar = gConsole->Getch(); +00549 while (tchar != EKeyEscape) +00550 { +00551 switch(tchar) +00552 { +00553 case '1': +00554 { +00555 GetNoOfResources(); +00556 break; +00557 } +00558 case '2': +00559 { +00560 GetResourceInfo(); +00561 break; +00562 } +00563 case '3': +00564 { +00565 GetAllResourcesInfoL(); +00566 break; +00567 } +00568 case '4': +00569 { +00570 GetResourceState(); +00571 break; +00572 } +00573 case '5': +00574 { +00575 GetNumClientsUsingResource(); +00576 break; +00577 } +00578 case '6': +00579 { +00580 GetNumResourcesInUseByClient(); +00581 break; +00582 } +00583 case '7': +00584 { +00585 GetInfoOnResourcesInUseByClientL(); +00586 break; +00587 } +00588 case '8': +00589 { +00590 GetInfoOnClientsUsingResourceL(); +00591 break; +00592 } +00593 case '9': +00594 { +00595 GetNamesOfAllClientsL(); +00596 break; +00597 } +00598 default: +00599 { +00600 if(tchar == EKeyEscape) +00601 { +00602 tchar = 'a'; //Any value can be assigned, so that it goes back to the main menu +00603 } +00604 else +00605 { +00606 gConsole->Printf(KTxtOptionNotSupported); +00607 } +00608 break; +00609 } +00610 } +00611 gConsole->Printf(KTxtPressAnyKey); +00612 tchar = gConsole->Getch(); +00613 gConsole->Printf(KTxtPressMainESC); +00614 gConsole->Printf(KPrintSubMenu1); +00615 gConsole->Printf(KPrintSubMenu2); +00616 gConsole->Printf(KChooseSubMenuOption); +00617 tchar = gConsole->Getch(); +00618 } +00619 } +00620 +00621 void DoStartL() +00622 { +00623 TInt err= gChannel.Open(gName); // 'gName' contains the name of client +00624 _LIT(KPrintEnterPRMExample,"Power Resource Manager example\n"); +00625 gConsole->Printf(KPrintEnterPRMExample); +00626 if (err!=KErrNone) +00627 { +00628 _LIT(KTxtCommonFailure,"\n Note: The application cannot demonstrate the features without a defined PSL \ +00629 (Platform Specific Layer) and the necessary ldd and pdd. \n"); +00630 gConsole->Printf(KTxtCommonFailure); +00631 gConsole->Printf(KTxtFailed, err); +00632 _LIT(KTxtPressAnyKeyToCloseApp,"Press any key to close the application "); +00633 gConsole->Printf(KTxtPressAnyKeyToCloseApp); +00634 gConsole->Getch(); +00635 } +00636 else +00637 { +00638 const TUint8 KNoOfGetStateRequests = 5; //The maximum number of get state asynchronous requests +00639 const TUint8 KNoOfSetStateRequests = 4; //The maximum number of set state asynchronous requests +00640 const TUint8 KNoOfNotifyRequests = 7; //The maximum number of notification requests +00649 err=gChannel.Initialise(KNoOfGetStateRequests,KNoOfSetStateRequests,KNoOfNotifyRequests); +00650 if (err!=KErrNone) +00651 { +00652 gConsole->Printf(KTxtFailed, err); +00653 } +00654 _LIT(KTxtPressAnyKey,"Press any key to continue"); +00655 gConsole->Printf(KTxtPressAnyKey); +00656 _LIT(KTxtPressESC," \nPress the 'ESC' key to exit\n"); +00657 gConsole->Printf(KTxtPressESC); +00658 _LIT(KPrintMainMenu,"\nOptions for various Power Resource Manager Features \n \ +00659 **************************************\n \ +00660 1:GetPowerResourceInfo \n \ +00661 2:ChangeStateOfResource \n \ +00662 3:RequestNotification \n \ +00663 **************************************\n \n"); +00664 TChar tchar = gConsole->Getch(); +00665 //make a choice +00666 while (tchar != EKeyEscape) +00667 { +00668 gConsole->Printf(KPrintMainMenu); +00669 _LIT(KChooseMainMenuOption,"Select option 1 - 3 : "); +00670 gConsole->Printf(KChooseMainMenuOption); +00671 tchar = gConsole->Getch(); +00672 switch(tchar) +00673 { +00674 case '1': +00675 { +00676 GetPowerResourceInfoL(); +00677 break; +00678 } +00679 case '2': +00680 { +00681 ChangeStateOfResource(); +00682 break; +00683 } +00684 case '3': +00685 { +00686 RequestNotification(); +00687 break; +00688 } +00689 default: +00690 { +00691 if(tchar == EKeyEscape) +00692 { +00693 _LIT(KPrintExitMenu,"\nExit the Menu\n"); +00694 gConsole->Printf(KPrintExitMenu); +00695 } +00696 else +00697 { +00698 gConsole->Printf(KTxtOptionNotSupported); +00699 } +00700 break; +00701 } +00702 } +00703 } +00704 gChannel.Close(); +00705 } +00706 } +00707 void callExampleL() // Initialise and call example code under cleanup stack. +00708 { +00709 gConsole=Console::NewL(KTxtExampleCode,TSize(KConsFullScreen,KConsFullScreen)); +00710 CleanupStack::PushL(gConsole); +00711 DoStartL(); // Perform example function. +00712 CleanupStack::PopAndDestroy(gConsole); // delete the gConsole. +00713 } +00714 +00715 extern TInt E32Main() +00716 { +00717 __UHEAP_MARK; +00718 CTrapCleanup* cleanup=CTrapCleanup::New(); // Create clean-up stack. +00719 if(cleanup!=NULL) +00720 { +00721 TRAPD (error,callExampleL()); +00722 __ASSERT_ALWAYS(!error,User::Panic(KTxtExampleCode,error)); +00723 } +00724 delete cleanup; // Delete clean-up stack. +00725 __UHEAP_MARKEND; +00726 return KErrNone; +00727 } +