/*
============================================================================
Name : ImeiEngine.h
Author :
Version :
Copyright : Your copyright notice
Description : CImeiEngine declaration
============================================================================
*/
#ifndef IMEIENGINE_H
#define IMEIENGINE_H
#include <e32base.h>
#include <e32std.h>
#include <etel3rdparty.h>
class MImeiEngineObserver
{
public:
virtual void UpdatePhoneInfo( const TDesC& aText ) = 0;
} ;
class CImeiEngine : public CActive
{
public:
CImeiEngine();
void ConstructL();
~CImeiEngine();
public: // New functions
void GetImei();
void SetImeiEngineObserver( MImeiEngineObserver* aObserver );
private: // From CActive
void RunL();
void DoCancel();
private:
void StartWait( );
private:
CTelephony::TPhoneIdV1 iPhoneId;
CTelephony* iTelephony;
MImeiEngineObserver* iObserver;
CActiveSchedulerWait iWait;
};
#endif
/*
============================================================================
Name : ImeiEngine.cpp
Author :
Version :
Copyright : Your copyright notice
Description : CImeiEngine implementation
============================================================================
*/
#include "ImeiEngine.h"
CImeiEngine::CImeiEngine() : CActive(EPriorityStandard)
{
}
void CImeiEngine::ConstructL()
{
CActiveScheduler::Add(this);
iTelephony = CTelephony::NewL();
}
CImeiEngine::~CImeiEngine()
{
if ( IsActive() )
Cancel();
delete iTelephony;
}
void CImeiEngine::SetImeiEngineObserver( MImeiEngineObserver* aObserver )
{
iObserver = aObserver;
}
void CImeiEngine::DoCancel()
{
iTelephony->CancelAsync( CTelephony::EGetPhoneIdCancel );
}
void CImeiEngine::GetImei()
{
if ( IsActive() )
{
Cancel();
}
CTelephony::TPhoneIdV1Pckg phoneIdPckg( iPhoneId );
iTelephony->GetPhoneId( iStatus, phoneIdPckg );
SetActive();
StartWait();
}
void CImeiEngine::RunL()
{
iWait.AsyncStop();
if ( iStatus == KErrNone )
{
// The request is successful
TBuf<CTelephony::KPhoneManufacturerIdSize> manufacturer = iPhoneId.iManufacturer;
TBuf<CTelephony::KPhoneModelIdSize> model = iPhoneId.iModel;
TBuf<CTelephony::KPhoneSerialNumberSize> serialNumber = iPhoneId.iSerialNumber;
if ( iObserver )
{
CTelephony::TPhoneIdV1Pckg phoneIdPckg( iPhoneId );
iObserver->UpdatePhoneInfo( serialNumber );
}
}
}
void CImeiEngine::StartWait( )
{
if ( iWait.IsStarted() != (TInt)ETrue )
{
iWait.Start();
}
}