telephonyutils/etel3rdpartyapi/ExampleApps/Shared/CPhoneId.cpp
author Tom Pritchard <tomp@symbian.org>
Tue, 27 Jul 2010 16:01:31 +0100
branchAT_Test_LTSY
changeset 55 2a8729f72b74
parent 0 3553901f7fa8
child 24 6638e7f4bd8f
permissions -rw-r--r--
Adding pre-configured C-drive image for 9600 baud modem and other changes

// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
// All rights reserved.
// This component and the accompanying materials are made available
// under the terms of "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:
// Nokia Corporation - initial contribution.
//
// Contributors:
//
// Description:
// CPhoneApp.cpp
// 
//

#include "CPhoneId.h"

/**
TODO These Literals would be read from some file which the application would
check the result of GetPhoneId() against each time the App was run to make sure
it was registered.
*/
_LIT(KRegisteredManufacturer, "Generic");
_LIT(KRegisteredModel, "123");
_LIT(KRegisteredSerialNumber, "1234567890");

/**
Factory constructor.

@param  aController Pointer to MExecAsync object passed to constructor of 
                    CISVAPIBase
@return             Instance of CPhoneId class
*/
CPhoneId* CPhoneId::NewL(MExecAsync* aController)
	{
	CPhoneId* self = new(ELeave) CPhoneId(aController);
	CleanupStack::PushL(self);
	self->ConstructL();
	CleanupStack::Pop(self);
	return self;
	}

/**
Destructor.
Cancels outstanding requests.
*/
CPhoneId::~CPhoneId()
	{
	Cancel();
	}

/**
Gets the phone ID by calling 3rd party API function CTelephony::GetPhoneId().
*/
void CPhoneId::DoStartRequestL()
	{
	// Retrieves the model information and unique identification of the mobile device.
	iTelephony->GetPhoneId(iStatus, iPhoneIdV1Pckg);
	SetActive();
	}

/**
Constructor.

@param aController Pointer to MExecAsync object passed to constructor of 
CISVAPIBase
*/
CPhoneId::CPhoneId(MExecAsync* aController)
	: CISVAPIAsync(aController, KPhoneId),
	  iPhoneIdV1Pckg(iPhoneIdV1)
	{
	// Empty method
	}

/**
Second phase constructor.
*/
void CPhoneId::ConstructL()
	{
	// Empty method
	}

/**
Checks the status of the active object and whether the application is registered to
the mobile phone and displays output to the console.
*/
void CPhoneId::RunL()
	{
  	// Print Phone Info
	if(iStatus != KErrNone)
		{
		iConsole->Printf(KError);
		
		// Print the error status code
		iConsole->Printf(_L("%d\n"), iStatus.Int());
		}
	else
		{
		if (AppRegistered())
			{
			TBuf<CTelephony::KPhoneManufacturerIdSize> manufacturer = iPhoneIdV1.iManufacturer;
			TBuf<CTelephony::KPhoneModelIdSize> model = iPhoneIdV1.iModel;
			TBuf<CTelephony::KPhoneSerialNumberSize> serialNumber = iPhoneIdV1.iSerialNumber;
			iConsole->Printf(KPhoneIdMsg);
			
			// Print phone manufacturer
			iConsole->Printf(manufacturer);
			iConsole->Printf(KNewLine);
			
			// Print phone model
			iConsole->Printf(model);
			iConsole->Printf(KNewLine);
			
			// Print the IMEI or ESN serial number
			iConsole->Printf(serialNumber);
			iConsole->Printf(KNewLine);

			ExampleComplete();
			}
		else
			{
			// Application isn't registered!

			// Sim Tsy Config doesn't match Lits defined in CPhoneId
			// Could end Application here by calling Terminate().
			// Wait for 5 seconds then continue by calling ExampleComplete().
			iConsole->Printf(_L("Application not registered to phone!\n"));
			iConsole->Printf(_L("Recify this to remove this delay\n"));
			User::After(5000000);
			ExampleComplete();
			}
		}
	}

/**
Cancels asynchronous request to CTelephony::GetPhoneId().
*/
void CPhoneId::DoCancel()
	{
	// Cancels an outstanding asynchronous request.
	iTelephony->CancelAsync(CTelephony::EGetPhoneIdCancel);
	}

/**
Compares data retrieved from phone with registered values to check the application is 
registered.

@return Returns ETrue if phone data matches registered values otherwise EFalse.
*/
TBool CPhoneId::AppRegistered()
	{
	// Values on phone
	TBuf<CTelephony::KPhoneManufacturerIdSize> manufacturer = iPhoneIdV1.iManufacturer;
	TBuf<CTelephony::KPhoneModelIdSize> model = iPhoneIdV1.iModel;
	TBuf<CTelephony::KPhoneSerialNumberSize> serialNumber = iPhoneIdV1.iSerialNumber;

	// Registered values
	TBuf<CTelephony::KPhoneModelIdSize> registeredModel(KRegisteredModel);
	TBuf<CTelephony::KPhoneSerialNumberSize> registeredSerialNumber(KRegisteredSerialNumber);
	TBuf<CTelephony::KPhoneManufacturerIdSize> registeredManufacturer(KRegisteredManufacturer);

	return	registeredModel == model &&
			registeredManufacturer == manufacturer &&
			registeredSerialNumber == serialNumber ;
	}