--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/commands/icc/icc.cpp Wed Jun 23 15:52:26 2010 +0100
@@ -0,0 +1,757 @@
+// icc.cpp
+//
+// Copyright (c) 2009 - 2010 Accenture. All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Accenture - Initial contribution
+//
+
+#include <fshell/ioutils.h>
+#include <etelmm.h>
+#include <commsdattypesv1_1.h>
+#include <fshell/ltkutils.h>
+#include <cdblen.h>
+
+
+#define SERVICE_ENTRY(XXX) { XXX, #XXX }
+
+struct SEnumFlag
+ {
+ TInt iValue;
+ const char* iIndentifer;
+ };
+
+SEnumFlag KSstServices1to8[] =
+ {
+ SERVICE_ENTRY(RMobilePhone::KSstPin1Disable),
+ SERVICE_ENTRY(RMobilePhone::KSstADN),
+ SERVICE_ENTRY(RMobilePhone::KSstFDN),
+ SERVICE_ENTRY(RMobilePhone::KSstSMS),
+ SERVICE_ENTRY(RMobilePhone::KSstAoC),
+ SERVICE_ENTRY(RMobilePhone::KSstCCP),
+ SERVICE_ENTRY(RMobilePhone::KSstPLMNSelector)
+ };
+
+SEnumFlag KSstServices9to16[] =
+ {
+ SERVICE_ENTRY(RMobilePhone::KSstMSISDN),
+ SERVICE_ENTRY(RMobilePhone::KSstExt1),
+ SERVICE_ENTRY(RMobilePhone::KSstExt2),
+ SERVICE_ENTRY(RMobilePhone::KSstSMSP),
+ SERVICE_ENTRY(RMobilePhone::KSstLND),
+ SERVICE_ENTRY(RMobilePhone::KSstCBMI),
+ SERVICE_ENTRY(RMobilePhone::KSstGID1),
+ SERVICE_ENTRY(RMobilePhone::KSstGID2)
+ };
+
+SEnumFlag KSstServices17to24[] =
+ {
+ SERVICE_ENTRY(RMobilePhone::KSstSPName),
+ SERVICE_ENTRY(RMobilePhone::KSstSDN),
+ SERVICE_ENTRY(RMobilePhone::KSstExt3),
+ SERVICE_ENTRY(RMobilePhone::KSstVGCSList),
+ SERVICE_ENTRY(RMobilePhone::KSstVBSList),
+ SERVICE_ENTRY(RMobilePhone::KSsteMLPP),
+ SERVICE_ENTRY(RMobilePhone::KSstAnswereMLPP)
+ };
+
+SEnumFlag KSstServices25to32[] =
+ {
+ SERVICE_ENTRY(RMobilePhone::KSstSmsCbDataDownload),
+ SERVICE_ENTRY(RMobilePhone::KSstSmsPpDataDownload),
+ SERVICE_ENTRY(RMobilePhone::KSstMenuSelection),
+ SERVICE_ENTRY(RMobilePhone::KSstCallControl),
+ SERVICE_ENTRY(RMobilePhone::KSstProactiveSim),
+ SERVICE_ENTRY(RMobilePhone::KSstCBMIRanges),
+ SERVICE_ENTRY(RMobilePhone::KSstBDN),
+ SERVICE_ENTRY(RMobilePhone::KSstExt4)
+ };
+
+SEnumFlag KSstServices33to40[] =
+ {
+ SERVICE_ENTRY(RMobilePhone::KSstDepersonalisationKeys),
+ SERVICE_ENTRY(RMobilePhone::KSstCooperativeNetworks),
+ SERVICE_ENTRY(RMobilePhone::KSstSMStatusReports),
+ SERVICE_ENTRY(RMobilePhone::KSstNetworkIndAlerting),
+ SERVICE_ENTRY(RMobilePhone::KSstMoSmControlBySim),
+ SERVICE_ENTRY(RMobilePhone::KSstGprs),
+ SERVICE_ENTRY(RMobilePhone::KSstImage),
+ SERVICE_ENTRY(RMobilePhone::KSstSoLSA)
+ };
+
+SEnumFlag KSstServices41to48[] =
+ {
+ SERVICE_ENTRY(RMobilePhone::KSstUssdStringInCallControl),
+ SERVICE_ENTRY(RMobilePhone::KSstRunATCommand),
+ SERVICE_ENTRY(RMobilePhone::KSstPlmnSelectorListWithAccessTechnology),
+ SERVICE_ENTRY(RMobilePhone::KSstOplmnSelectorListWithAccessTechnology),
+ SERVICE_ENTRY(RMobilePhone::KSstHplmnAccessTechnology),
+ SERVICE_ENTRY(RMobilePhone::KSstCpbcchInformation),
+ SERVICE_ENTRY(RMobilePhone::KSstInvestigationScan),
+ SERVICE_ENTRY(RMobilePhone::KSstExtendedCcp)
+ };
+
+SEnumFlag KSstServices49to56[] =
+ {
+ SERVICE_ENTRY(RMobilePhone::KSstMExE),
+ SERVICE_ENTRY(RMobilePhone::KSstRplmnLastUsedAccessTechnology)
+ };
+
+SEnumFlag KUstServices1to8[] =
+ {
+ SERVICE_ENTRY(RMobilePhone::KUstLocalPhBk),
+ SERVICE_ENTRY(RMobilePhone::KUstFDN),
+ SERVICE_ENTRY(RMobilePhone::KUstExt2),
+ SERVICE_ENTRY(RMobilePhone::KUstSDN),
+ SERVICE_ENTRY(RMobilePhone::KUstExt3),
+ SERVICE_ENTRY(RMobilePhone::KUstBDN),
+ SERVICE_ENTRY(RMobilePhone::KUstExt4),
+ SERVICE_ENTRY(RMobilePhone::KUstOugoingCallInfo)
+ };
+
+SEnumFlag KUstServices9to16[] =
+ {
+ SERVICE_ENTRY(RMobilePhone::KUstIncomingCallInfo),
+ SERVICE_ENTRY(RMobilePhone::KUstSMS),
+ SERVICE_ENTRY(RMobilePhone::KUstSMSR),
+ SERVICE_ENTRY(RMobilePhone::KUstSMSP),
+ SERVICE_ENTRY(RMobilePhone::KUstAoC),
+ SERVICE_ENTRY(RMobilePhone::KUstCCP),
+ SERVICE_ENTRY(RMobilePhone::KUstCBMI),
+ SERVICE_ENTRY(RMobilePhone::KUstCBMIRanges)
+ };
+
+SEnumFlag KUstServices17to24[] =
+ {
+ SERVICE_ENTRY(RMobilePhone::KUstGID1),
+ SERVICE_ENTRY(RMobilePhone::KUstGID2),
+ SERVICE_ENTRY(RMobilePhone::KUstSPN),
+ SERVICE_ENTRY(RMobilePhone::KUstPLMNSelAccessTech),
+ SERVICE_ENTRY(RMobilePhone::KUstMSISDN),
+ SERVICE_ENTRY(RMobilePhone::KUstIMG),
+ SERVICE_ENTRY(RMobilePhone::KUsteMLPP)
+ };
+
+SEnumFlag KUstServices25to32[] =
+ {
+ SERVICE_ENTRY(RMobilePhone::KUstAnswereMLPP),
+ SERVICE_ENTRY(RMobilePhone::KUstGSMAccess),
+ SERVICE_ENTRY(RMobilePhone::KUstSMSPpDataDownload),
+ SERVICE_ENTRY(RMobilePhone::KUstSMSCbDataDownload),
+ SERVICE_ENTRY(RMobilePhone::KUstCallControl),
+ SERVICE_ENTRY(RMobilePhone::KUstMoSmControl),
+ SERVICE_ENTRY(RMobilePhone::KUstPCmdRunAtCommand)
+ };
+
+SEnumFlag KUstServices33to40[] =
+ {
+ SERVICE_ENTRY(RMobilePhone::KUstAlways),
+ SERVICE_ENTRY(RMobilePhone::KUstEST),
+ SERVICE_ENTRY(RMobilePhone::KUstACL),
+ SERVICE_ENTRY(RMobilePhone::KIstDepersonalisationKeys),
+ SERVICE_ENTRY(RMobilePhone::KUstCooperativeNetwork),
+ SERVICE_ENTRY(RMobilePhone::KUstGSMSecurityContext),
+ SERVICE_ENTRY(RMobilePhone::KUstCPBCCHInfo),
+ SERVICE_ENTRY(RMobilePhone::KUstInvestigationScan)
+ };
+
+SEnumFlag KUstServices41to48[] =
+ {
+ SERVICE_ENTRY(RMobilePhone::KUstMExE),
+ SERVICE_ENTRY(RMobilePhone::KUstOperatorPLMNSelector),
+ SERVICE_ENTRY(RMobilePhone::KUstHPLMNSelAccessTech),
+ SERVICE_ENTRY(RMobilePhone::KUstExt5),
+ SERVICE_ENTRY(RMobilePhone::KUstPLMNNetworkName),
+ SERVICE_ENTRY(RMobilePhone::KUstOperatorPLMNList),
+ SERVICE_ENTRY(RMobilePhone::KUstMDN),
+ SERVICE_ENTRY(RMobilePhone::KUstMWISo)
+ };
+
+SEnumFlag KUstServices49to56[] =
+ {
+ SERVICE_ENTRY(RMobilePhone::KUstCFIS),
+ SERVICE_ENTRY(RMobilePhone::KUstRPLMN),
+ SERVICE_ENTRY(RMobilePhone::KUstSPDI),
+ SERVICE_ENTRY(RMobilePhone::KUstMMS),
+ SERVICE_ENTRY(RMobilePhone::KUstExt8),
+ SERVICE_ENTRY(RMobilePhone::KUstCConGPRS),
+ SERVICE_ENTRY(RMobilePhone::KUstMMSUCP)
+ };
+
+#if defined (FSHELL_PLATFORM_S60) && FSHELL_PLATFORM_S60 >= 5
+SEnumFlag KUstServices57to64[] =
+ {
+ SERVICE_ENTRY(RMobilePhone::KUstVGCSGroupIdList),
+ SERVICE_ENTRY(RMobilePhone::KUstVBSGroupIdList),
+ SERVICE_ENTRY(RMobilePhone::KUstPseudonym),
+ SERVICE_ENTRY(RMobilePhone::KUstUserPLMNSelectorWLAN),
+ SERVICE_ENTRY(RMobilePhone::KUstOperatorPLMNSelectorWLAN),
+ SERVICE_ENTRY(RMobilePhone::KUstUserWSIDList),
+ SERVICE_ENTRY(RMobilePhone::KUstOperatorWSIDList),
+ SERVICE_ENTRY(RMobilePhone::KUstVGCSSecurity)
+ };
+#endif
+
+SEnumFlag KEstServices1to8[] =
+ {
+ SERVICE_ENTRY(RMobilePhone::KEstFDN),
+ SERVICE_ENTRY(RMobilePhone::KEstBDN),
+ SERVICE_ENTRY(RMobilePhone::KEstACL)
+ };
+
+#if defined (FSHELL_PLATFORM_S60) && FSHELL_PLATFORM_S60 >= 5
+SEnumFlag KIstServices1to8[] =
+ {
+ SERVICE_ENTRY(RMobilePhone::KIstPCSCF),
+ SERVICE_ENTRY(RMobilePhone::KIstGBA),
+ SERVICE_ENTRY(RMobilePhone::KIstHTTPDigest)
+ };
+#endif
+
+
+using namespace IoUtils;
+
+class CCmdIcc : public CCommandBase
+ {
+public:
+ static CCommandBase* NewLC();
+ ~CCmdIcc();
+private:
+ CCmdIcc();
+ void OpenPhoneL();
+ void GetPhoneBookInfoL();
+ void ApiSupported(TInt aApi, TBool& aIsSupported);
+ void DisplayAccessCapsL();
+ void DisplayServiceTablesL();
+ void DisplayFdnStatusL();
+ void DisplayPhoneBookInfoL();
+ void DumpPhoneBookL();
+ void EditPhoneBookL();
+ void PrintServices(const TDesC& iTableName, TUint aServices, SEnumFlag aServiceTableDefinitions[], TInt aNumServiceTableDefinitions);
+private: // From CCommandBase.
+ virtual const TDesC& Name() const;
+ virtual void DoRunL();
+ virtual void ArgumentsL(RCommandArgumentList& aArguments);
+ virtual void OptionsL(RCommandOptionList& aOptions);
+private:
+ enum TOperation
+ {
+ EAccessCaps,
+ EServiceTables,
+ EFdnStatus,
+ EPhoneBookInfo,
+ EDumpPhoneBook,
+ EEditPhoneBook
+ };
+private:
+ RTelServer iEtelServer;
+ RMobilePhone iPhone;
+ RMobilePhoneBookStore iPhoneBookStore;
+ TBool iVerbose;
+ HBufC* iTsyName;
+ TUint iServiceTable;
+ HBufC* iStoreName;
+ HBufC* iMode;
+ TInt iSlot;
+ HBufC* iData;
+ TOperation iOperation;
+ TBool iV5Tsy;
+ TBool iV2Tsy;
+ TBool iUsimTsy;
+ RMobilePhoneBookStore::TMobilePhoneBookInfoV5 iStoreInfo;
+ };
+
+
+CCommandBase* CCmdIcc::NewLC()
+ {
+ CCmdIcc* self = new(ELeave) CCmdIcc();
+ CleanupStack::PushL(self);
+ self->BaseConstructL();
+ return self;
+ }
+
+CCmdIcc::~CCmdIcc()
+ {
+ iPhoneBookStore.Close();
+ iPhone.Close();
+ iEtelServer.Close();
+ delete iTsyName;
+ delete iStoreName;
+ delete iMode;
+ delete iData;
+ }
+
+CCmdIcc::CCmdIcc()
+ {
+ }
+
+const TDesC& CCmdIcc::Name() const
+ {
+ _LIT(KName, "icc");
+ return KName;
+ }
+
+void CCmdIcc::DoRunL()
+ {
+ OpenPhoneL();
+
+ switch (iOperation)
+ {
+ case EAccessCaps:
+ DisplayAccessCapsL();
+ break;
+ case EServiceTables:
+ DisplayServiceTablesL();
+ break;
+ case EFdnStatus:
+ DisplayFdnStatusL();
+ break;
+ case EPhoneBookInfo:
+ DisplayPhoneBookInfoL();
+ break;
+ case EDumpPhoneBook:
+ DumpPhoneBookL();
+ break;
+ case EEditPhoneBook:
+ EditPhoneBookL();
+ break;
+ default:
+ User::Leave(KErrArgument);
+ }
+ }
+
+void CCmdIcc::DisplayAccessCapsL()
+ {
+ TUint32 iccCaps;
+ LeaveIfErr(iPhone.GetIccAccessCaps(iccCaps), _L("Couldn't get ICC access capabilities"));
+
+ TBool first(ETrue);
+ if (iccCaps & RMobilePhone::KCapsSimAccessSupported)
+ {
+ if (first)
+ {
+ first = EFalse;
+ }
+ else
+ {
+ Write(_L(" | "));
+ }
+ Write(_L("KCapsSimAccessSupported"));
+ }
+ if (iccCaps & RMobilePhone::KCapsRUimAccessSupported)
+ {
+ if (first)
+ {
+ first = EFalse;
+ }
+ else
+ {
+ Write(_L(" | "));
+ }
+ Write(_L("KCapsRUimAccessSupported"));
+ }
+ if (iccCaps & RMobilePhone::KCapsUSimAccessSupported)
+ {
+ if (first)
+ {
+ first = EFalse;
+ }
+ else
+ {
+ Write(_L(" | "));
+ }
+ Write(_L("KCapsUSimAccessSupported"));
+ }
+ if (!first)
+ {
+ Write(_L("\r\n"));
+ }
+ }
+
+void CCmdIcc::PrintServices(const TDesC& iTableName, TUint aServices, SEnumFlag aServiceTableDefinitions[], TInt aNumServiceTableDefinitions)
+ {
+ Printf(_L("%S "), &iTableName);
+ TBool first(ETrue);
+ for (TInt i = 0; i < aNumServiceTableDefinitions; ++i)
+ {
+ if (aServices & aServiceTableDefinitions[i].iValue)
+ {
+ if (first)
+ {
+ first = EFalse;
+ }
+ else
+ {
+ Printf(_L(" | "));
+ }
+ TPtrC8 identifier((const TUint8*)aServiceTableDefinitions[i].iIndentifer);
+ identifier.Set(identifier.Mid(identifier.Find(_L8("::")) + 2));
+ Printf(identifier);
+ }
+ }
+ Write(_L("\r\n"));
+ }
+
+void CCmdIcc::DisplayServiceTablesL()
+ {
+ RMobilePhone::TMobilePhoneServiceTableV2 serviceTable;
+ TRequestStatus status;
+
+ if (iV2Tsy)
+ {
+ RMobilePhone::TMobilePhoneServiceTableV2Pckg serviceTablePckg(serviceTable);
+ iPhone.GetServiceTable(status, (RMobilePhone::TMobilePhoneServiceTable)iServiceTable, serviceTablePckg);
+ }
+ else
+ {
+ RMobilePhone::TMobilePhoneServiceTableV1Pckg serviceTablePckg(serviceTable);
+ iPhone.GetServiceTable(status, (RMobilePhone::TMobilePhoneServiceTable)iServiceTable, serviceTablePckg);
+ }
+
+ User::WaitForRequest(status);
+ LeaveIfErr(status.Int(), _L("Unable to get service table %d"), iServiceTable);
+
+ switch (iServiceTable)
+ {
+ case RMobilePhone::ESIMServiceTable:
+ PrintServices(_L("1 to 8: "), serviceTable.iServices1To8, KSstServices1to8, sizeof(KSstServices1to8) / sizeof(SEnumFlag));
+ PrintServices(_L("9 to 16: "), serviceTable.iServices9To16, KSstServices9to16, sizeof(KSstServices9to16) / sizeof(SEnumFlag));
+ PrintServices(_L("17 to 24:"), serviceTable.iServices17To24, KSstServices17to24, sizeof(KSstServices17to24) / sizeof(SEnumFlag));
+ PrintServices(_L("25 to 32:"), serviceTable.iServices25To32, KSstServices25to32, sizeof(KSstServices25to32) / sizeof(SEnumFlag));
+ PrintServices(_L("33 to 40:"), serviceTable.iServices33To40, KSstServices33to40, sizeof(KSstServices33to40) / sizeof(SEnumFlag));
+ PrintServices(_L("41 to 48:"), serviceTable.iServices41To48, KSstServices41to48, sizeof(KSstServices41to48) / sizeof(SEnumFlag));
+ PrintServices(_L("49 to 56:"), serviceTable.iServices49To56, KSstServices49to56, sizeof(KSstServices49to56) / sizeof(SEnumFlag));
+ break;
+ case RMobilePhone::EUSIMServiceTable:
+ PrintServices(_L("1 to 8: "), serviceTable.iServices1To8, KUstServices1to8, sizeof(KUstServices1to8) / sizeof(SEnumFlag));
+ PrintServices(_L("9 to 16: "), serviceTable.iServices9To16, KUstServices9to16, sizeof(KUstServices9to16) / sizeof(SEnumFlag));
+ PrintServices(_L("17 to 24:"), serviceTable.iServices17To24, KUstServices17to24, sizeof(KUstServices17to24) / sizeof(SEnumFlag));
+ PrintServices(_L("25 to 32:"), serviceTable.iServices25To32, KUstServices25to32, sizeof(KUstServices25to32) / sizeof(SEnumFlag));
+ PrintServices(_L("33 to 40:"), serviceTable.iServices33To40, KUstServices33to40, sizeof(KUstServices33to40) / sizeof(SEnumFlag));
+ PrintServices(_L("41 to 48:"), serviceTable.iServices41To48, KUstServices41to48, sizeof(KUstServices41to48) / sizeof(SEnumFlag));
+ PrintServices(_L("49 to 56:"), serviceTable.iServices49To56, KUstServices49to56, sizeof(KUstServices49to56) / sizeof(SEnumFlag));
+ break;
+ case RMobilePhone::ECDMAServiceTable:
+ break;
+ case RMobilePhone::EUSIMEnabledServiceTable:
+ PrintServices(_L("1 to 8: "), serviceTable.iServices1To8, KEstServices1to8, sizeof(KEstServices1to8) / sizeof(SEnumFlag));
+ break;
+#if defined (FSHELL_PLATFORM_S60) && FSHELL_PLATFORM_S60 >= 5
+ case RMobilePhone::EISIMServiceTable:
+ PrintServices(_L("1 to 8: "), serviceTable.iServices1To8, KIstServices1to8, sizeof(KIstServices1to8) / sizeof(SEnumFlag));
+ break;
+#endif
+ }
+
+ if (iV2Tsy)
+ {
+ Write(_L("AID:\r\n"));
+ LtkUtils::HexDumpToOutput(serviceTable.iAID, Stdout());
+ }
+ }
+
+void CCmdIcc::DisplayFdnStatusL()
+ {
+ RMobilePhone::TMobilePhoneFdnStatus fdnStatus;
+ LeaveIfErr(iPhone.GetFdnStatus(fdnStatus), _L("Unable to get FDN status"));
+ switch (fdnStatus)
+ {
+ case RMobilePhone::EFdnNotActive:
+ Write(_L("EFdnNotActive\r\n"));
+ break;
+ case RMobilePhone::EFdnActive:
+ Write(_L("EFdnActive\r\n"));
+ break;
+ case RMobilePhone::EFdnPermanentlyActive:
+ Write(_L("EFdnPermanentlyActive\r\n"));
+ break;
+ case RMobilePhone::EFdnNotSupported:
+ Write(_L("EFdnNotSupported\r\n"));
+ break;
+ case RMobilePhone::EFdnUnknown:
+ default:
+ Write(_L("EFdnUnknown\r\n"));
+ break;
+ }
+ }
+
+void CCmdIcc::DisplayPhoneBookInfoL()
+ {
+ if (iStoreName == NULL)
+ {
+ LeaveIfErr(KErrArgument, _L("The name of the phone store must be specified using -s"));
+ }
+
+ if (iVerbose)
+ {
+ Printf(_L("Getting phone store info for phone book \"%S\"...\r\n"), iStoreName);
+ }
+
+ GetPhoneBookInfoL();
+
+ Printf(_L("Total number of entries: %d\r\n"), iStoreInfo.iTotalEntries);
+ Printf(_L("Used number of entries: %d\r\n"), iStoreInfo.iUsedEntries);
+ Printf(_L("Capabilities: 0x%08x\r\n"), iStoreInfo.iCaps);
+ Printf(_L("Phone name: %S\r\n"), &iStoreInfo.iName);
+ Printf(_L("Maximum number length: %d\r\n"), iStoreInfo.iMaxNumLength);
+ Printf(_L("Maximum text length: %d\r\n"), iStoreInfo.iMaxTextLength);
+ Write( _L("Store location: "));
+ switch (iStoreInfo.iLocation)
+ {
+ default:
+ case RMobilePhoneBookStore::ELocationUnknown:
+ Write(_L("ELocationUnknown"));
+ break;
+ case RMobilePhoneBookStore::ELocationIccMemory:
+ Write(_L("ELocationIccMemory"));
+ break;
+ case RMobilePhoneBookStore::ELocationPhoneMemory:
+ Write(_L("ELocationPhoneMemory"));
+ break;
+ case RMobilePhoneBookStore::ELocationExternalMemory:
+ Write(_L("ELocationExternalMemory"));
+ break;
+ case RMobilePhoneBookStore::ELocationCombinedMemory:
+ Write(_L("ELocationCombinedMemory"));
+ break;
+ }
+ Write(_L("\r\n"));
+ Printf(_L("Change counter: %d\r\n"), iStoreInfo.iChangeCounter);
+ Printf(_L8("Phone book identity: %S\r\n"), &iStoreInfo.iIdentity);
+
+ if (iV2Tsy)
+ {
+ Printf(_L("Mode: %S\r\n"), &iStoreInfo.iPhBkMode);
+ }
+
+ if (iV5Tsy)
+ {
+ Printf(_L("Maximum second names: %d\r\n"), iStoreInfo.iMaxSecondNames);
+ Printf(_L("Maximum text length second names: %d\r\n"), iStoreInfo.iMaxTextLengthSecondName);
+ Printf(_L("Maximum additional numbers: %d\r\n"), iStoreInfo.iMaxAdditionalNumbers);
+ Printf(_L("Maximum number length additional number: %d\r\n"), iStoreInfo.iMaxNumLengthAdditionalNumber);
+ Printf(_L("Maximum text length additional number: %d\r\n"), iStoreInfo.iMaxTextLengthAdditionalNumber);
+ Printf(_L("Maximum group names: %d\r\n"), iStoreInfo.iMaxGroupNames);
+ Printf(_L("Maximum text length group name: %d\r\n"), iStoreInfo.iMaxTextLengthGroupName);
+ Printf(_L("Maximum email address: %d\r\n"), iStoreInfo.iMaxEmailAddr);
+ Printf(_L("Maximum text length email address: %d\r\n"), iStoreInfo.iMaxTextLengthEmailAddr);
+ }
+ }
+
+void CCmdIcc::DumpPhoneBookL()
+ {
+ if (iStoreName == NULL)
+ {
+ LeaveIfErr(KErrArgument, _L("The name of the phone store must be specified using -s"));
+ }
+
+ if (iVerbose)
+ {
+ Printf(_L("Dumping phone book store \"%S\"...\r\n"), iStoreName);
+ }
+
+ GetPhoneBookInfoL();
+
+ if (iVerbose)
+ {
+ Printf(_L("Phone book store has %d slots\r\n"), iStoreInfo.iTotalEntries);
+ }
+
+ for (TInt slotIndex = 0; slotIndex < iStoreInfo.iTotalEntries; ++slotIndex)
+ {
+ if (iVerbose)
+ {
+ Printf(_L("Reading slot %d...\r\n"), slotIndex);
+ }
+
+ TBuf8<1024> buf;
+ TRequestStatus status;
+ iPhoneBookStore.Read(status, slotIndex, 1, buf);
+ User::WaitForRequest(status);
+ if (status.Int() != KErrNone)
+ {
+ Printf(_L8("%d: %d\r\n"), slotIndex, status.Int());
+ }
+ else
+ {
+ Printf(_L8("%d:\r\n"), slotIndex);
+ LtkUtils::HexDumpToOutput(buf, Stdout());
+ Write(_L("\r\n"));
+ }
+ }
+ }
+
+void CCmdIcc::EditPhoneBookL()
+ {
+ if (iStoreName == NULL)
+ {
+ LeaveIfErr(KErrArgument, _L("The name of the phone store must be specified using -s"));
+ }
+
+ if (iData == NULL)
+ {
+ LeaveIfErr(KErrArgument, _L("The data to be entered must be specified using -d"));
+ }
+
+ if (!iOptions.IsPresent(&iSlot))
+ {
+ LeaveIfErr(KErrArgument, _L("The slot to be edited must be specified using -l"));
+ }
+
+ GetPhoneBookInfoL();
+ TRequestStatus status;
+ TPtrC8 data((const TUint8*)iData->Ptr(), iData->Size());
+
+ if (iVerbose)
+ {
+ Printf(_L("Writing the following to slot %d:\r\n"), iSlot);
+ LtkUtils::HexDumpToOutput(data, Stdout());
+ }
+
+ iPhoneBookStore.Write(status, data, iSlot);
+ User::WaitForRequest(status);
+ LeaveIfErr(status.Int(), _L("Unable to write to phone book store \"%S\""), iStoreName);
+ Printf(_L("Slot %d edited\r\n"), iSlot);
+ }
+
+void CCmdIcc::ApiSupported(TInt aApi, TBool& aIsSupported)
+ {
+ TInt err = iEtelServer.IsSupportedByModule(*iTsyName, aApi, aIsSupported);
+ if (err != KErrNone)
+ {
+ aIsSupported = EFalse;
+ }
+ }
+
+void CCmdIcc::GetPhoneBookInfoL()
+ {
+ if (iMode)
+ {
+ LeaveIfErr(iPhoneBookStore.Open(iPhone, *iStoreName, *iMode), _L("Unable to open phone book store \"%S\" in mode \"%S\""), iStoreName, iMode);
+ }
+ else
+ {
+ LeaveIfErr(iPhoneBookStore.Open(iPhone, *iStoreName), _L("Unable to open phone book store \"%S\""), iStoreName);
+ }
+
+ TRequestStatus status;
+ if (iV5Tsy)
+ {
+ TPckg<RMobilePhoneBookStore::TMobilePhoneBookInfoV5> pckg(iStoreInfo);
+ iPhoneBookStore.GetInfo(status, pckg);
+ }
+ else if (iV2Tsy)
+ {
+ TPckg<RMobilePhoneBookStore::TMobilePhoneBookInfoV2> pckg(iStoreInfo);
+ iPhoneBookStore.GetInfo(status, pckg);
+ }
+ else
+ {
+ TPckg<RMobilePhoneBookStore::TMobilePhoneBookInfoV1> pckg(iStoreInfo);
+ iPhoneBookStore.GetInfo(status, pckg);
+ }
+ User::WaitForRequest(status);
+ LeaveIfErr(status.Int(), _L("Couldn't get phone book store info"));
+ }
+
+void CCmdIcc::OpenPhoneL()
+ {
+ if (iTsyName == NULL)
+ {
+ CommsDat::CMDBSession* db = CommsDat::CMDBSession::NewLC(KCDLatestVersion);
+ CommsDat::CMDBField<TUint32>* globalSettingField = new(ELeave) CommsDat::CMDBField<TUint32>(CommsDat::KCDTIdModemPhoneServicesSMS);
+ CleanupStack::PushL(globalSettingField);
+ globalSettingField->SetRecordId(1);
+ globalSettingField->LoadL(*db);
+ TUint32 modemId = *globalSettingField;
+ CommsDat::CMDBField<TDesC>* tsyField = new(ELeave) CommsDat::CMDBField<TDesC>(CommsDat::KCDTIdTsyName);
+ CleanupStack::PushL(tsyField);
+ tsyField->SetRecordId(modemId);
+ TRAPL(tsyField->LoadL(*db), _L("Unable to read default TSY name"));
+ TBuf<KCommsDbSvrMaxFieldLength> tsyName;
+ tsyName = *tsyField;
+ iTsyName = tsyName.AllocL();
+ CleanupStack::PopAndDestroy(3, db); // db, tsyField & globalSettingField
+ }
+
+ LeaveIfErr(iEtelServer.Connect(), _L("Unable to connect to the ETel server"));
+ LeaveIfErr(iEtelServer.LoadPhoneModule(*iTsyName), _L("Unable to load TSY module \"%S\""), iTsyName);
+ TInt numPhones = 0;
+ LeaveIfErr(iEtelServer.EnumeratePhones(numPhones), _L("Couldn't enumerate phones"));
+ TBool matchFound(EFalse);
+ TInt phoneIndex;
+ for (phoneIndex = 0; phoneIndex < numPhones; ++phoneIndex)
+ {
+ TName thisTsyName;
+ if ((iEtelServer.GetTsyName(phoneIndex, thisTsyName) == KErrNone) && (iTsyName->CompareF(thisTsyName) == KErrNone))
+ {
+ matchFound = ETrue;
+ break;
+ }
+ }
+ if (!matchFound)
+ {
+ LeaveIfErr(KErrNotFound, _L("Couldn't find phone using TSY \"%S\""), iTsyName);
+ }
+ RTelServer::TPhoneInfo phoneInfo;
+ LeaveIfErr(iEtelServer.GetPhoneInfo(phoneIndex, phoneInfo), _L("Couldn't get phone info"));
+ LeaveIfErr(iPhone.Open(iEtelServer, phoneInfo.iName), _L("Couldn't open phone"));
+
+ ApiSupported(KEtelExtMultimodeV5, iV5Tsy);
+ ApiSupported(KETelExtMultimodeV2, iV2Tsy);
+ ApiSupported(KEtelFuncMobileUSIMApplications, iUsimTsy);
+
+ if (iVerbose)
+ {
+ if (iUsimTsy)
+ {
+ Write(_L("TSY supports USIM API\r\n"));
+ }
+ if (iV2Tsy)
+ {
+ Write(_L("TSY supports V2 API\r\n"));
+ }
+ if (iV5Tsy)
+ {
+ Write(_L("TSY supports V5 API\r\n"));
+ }
+ }
+ }
+
+void CCmdIcc::ArgumentsL(RCommandArgumentList& aArguments)
+ {
+ _LIT(KOperationName, "operation");
+ aArguments.AppendEnumL((TInt&)iOperation, KOperationName);
+ }
+
+void CCmdIcc::OptionsL(RCommandOptionList& aOptions)
+ {
+ _LIT(KOptVerbose, "verbose");
+ aOptions.AppendBoolL(iVerbose, KOptVerbose);
+
+ _LIT(KOptTsyName, "tsy-name");
+ aOptions.AppendStringL(iTsyName, KOptTsyName);
+
+ _LIT(KArgServiceTable, "service-table");
+ aOptions.AppendUintL(iServiceTable, KArgServiceTable);
+
+ _LIT(KArgStoreName, "store-name");
+ aOptions.AppendStringL(iStoreName, KArgStoreName);
+
+ _LIT(KArgMode, "mode");
+ aOptions.AppendStringL(iMode, KArgMode);
+
+ _LIT(KArgSlot, "slot");
+ aOptions.AppendIntL(iSlot, KArgSlot);
+
+ _LIT(KArgData, "data");
+ aOptions.AppendStringL(iData, KArgData);
+ }
+
+
+EXE_BOILER_PLATE(CCmdIcc)
+