diff -r b183ec05bd8c -r 19bba8228ff0 fotaapplication/fmserver/src/fmsserver.cpp --- a/fotaapplication/fmserver/src/fmsserver.cpp Tue Aug 31 16:04:06 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,839 +0,0 @@ -/* -* Copyright (c) 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: Implementation of fotaserver component -* This is part of fotaapplication. -* -*/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "fotaserverPrivateCRKeys.h" -#include "fmsserver.h" -#include "fmsinterruptaob.h" -#include "fmsclientserver.h" -#include "fmsserversession.h" -#include -#include -#include "FotaIPCTypes.h" -// ---------------------------------------------------------------------------------------- -// Server startup code -// ---------------------------------------------------------------------------------------- -static void RunServerL() - { - // naming the server thread after the server helps to debug panics - User::LeaveIfError(User::RenameThread(KFMSServerName)); - - // create and install the active scheduler - CActiveScheduler* s=new(ELeave) CActiveScheduler; - CleanupStack::PushL(s); - CActiveScheduler::Install(s); - - // create the server (leave it on the cleanup stack) - CFMSServer::NewLC(); - - // Initialisation complete, now signal the client - RProcess::Rendezvous(KErrNone); - - // Ready to run - CActiveScheduler::Start(); - - // Cleanup the server and scheduler - CleanupStack::PopAndDestroy(2); - } - - -// ---------------------------------------------------------------------------------------- -// static method LogNwRequestL() called to submit async n/w request -// ---------------------------------------------------------------------------------------- -static TInt LogNwRequestL(TAny* aPtr) - { - CFMSServer* ptr = (CFMSServer*) aPtr; - FLOG(_L("static LogNwRequestL:-Begin")); - TRAPD(err, ptr->StartMonitoringL(EDLNetworkInterrupt)); - FLOG(_L("LogNwRequestL started monitoring")); - ptr->StopAsyncRequest(); - FLOG(_L("static LogNwRequestL:-end")); - return err; - } - - -// ---------------------------------------------------------------------------------------- -// static method LogCallEndMonitorRequestL() called to submit async call end monitor request -// ---------------------------------------------------------------------------------------- -static TInt LogCallEndMonitorRequestL(TAny* aPtr) - { - CFMSServer* ptr = (CFMSServer*) aPtr; - FLOG(_L("static LogCallEndMonitorRequestL:-Begin")); - TRAPD(err, ptr->StartUpdateInterruptMonitoringL(EUpdMonitorPhoneCallEnd)); - FLOG(_L("LogCallEndMonitorRequestL started monitoring")); - ptr->StopAsyncRequest(); - FLOG(_L("static LogCallEndMonitorRequestL:-end")); - return err; - } - -// ---------------------------------------------------------------------------------------- -// Server process entry-point -// ---------------------------------------------------------------------------------------- -TInt E32Main() - { - __UHEAP_MARK; - CTrapCleanup* cleanup=CTrapCleanup::New(); - TInt r=KErrNoMemory; - if (cleanup) - { - TRAP(r,RunServerL()); - delete cleanup; - } - __UHEAP_MARKEND; - return r; - } - -// ---------------------------------------------------------------------------------------- -// CFMSServer::NewLC -// ---------------------------------------------------------------------------------------- -CServer2* CFMSServer::NewLC() -{ -CFMSServer* self=new(ELeave) CFMSServer; -CleanupStack::PushL(self); -self->ConstructL(); -return self; -} - -// ---------------------------------------------------------------------------------------- -// CFMSServer::ConstructL -// ---------------------------------------------------------------------------------------- -void CFMSServer::ConstructL() - { - FLOG(_L("CFMSServer::ConstructL- begin")); - StartL(KFMSServerName); - User::LeaveIfError( iFs.Connect() ); - TInt err; - err = iFs.CreatePrivatePath(EDriveC); - if ( err != KErrNone && err != KErrAlreadyExists ) - { User::Leave (err); } - User::LeaveIfError( iFs.SetSessionToPrivate( EDriveC ) ); - err = iFile.Create(iFs,KFotaInterruptFileName,EFileWrite); - if(err == KErrNone)//means file created now and opened - { - FLOG(_L("CFMSServer::ConstructL- file closed")); - iFile.Close(); - } - else if( err != KErrAlreadyExists ) - { - FLOG(_L("CFMSServer::ConstructL- leaving with err as %d"),err); - User::Leave(err); - } - FindVariation(); - iFMSInterruptAob.ConstructL(); - iFMSInterruptAob.iServer = this; - FLOG(_L("CFMSServer::ConstructL- end")); - } - -// ---------------------------------------------------------------------------------------- -// CFMSServer::CFMSServer() -// ---------------------------------------------------------------------------------------- -CFMSServer::CFMSServer() :CServer2(EPriorityStandard, EUnsharableSessions) /*CServer2(0)*/ - { - iSessionCount = 0; - //iNetworkMon = ETrue; //Incase of cenrep key has problem - iNetworkMon = EFalse; - iChargerMon = EFalse; - iPhoneRestartMon = EFalse; - iMemoryMon = EFalse; - iDeleteFile = ETrue; - iLogAsyncRequest = NULL; - } - -// ---------------------------------------------------------------------------------------- -// CFMSServer::MemoryToMonitorL() -// ---------------------------------------------------------------------------------------- -void CFMSServer::MemoryToMonitorL(TInt aSize, TDriveNumber aDrive) - { - if( iSessionCount == 0 )// no pending request - { - iFMSInterruptAob.MemoryToMonitorL(aSize,aDrive); - } - } -// ---------------------------------------------------------------------------------------- -// CFMSServer::NetworkTypeL() -// ---------------------------------------------------------------------------------------- -void CFMSServer::NetworkTypeL(TInt aBearer) - { - if( iSessionCount == 0 )// no pending request - { - iFMSInterruptAob.NetworkTypeL(aBearer); - } - } - -//------------------------------------------------------------ -// Call from session class in fotastartup case -// CFMSServer::CheckNetworkL -//------------------------------------------------------------ -void CFMSServer::CheckNetworkL(TInt& aBearerId, TInt& aDrive, TInt& aSize, - TBool& aWcdma) - { - if(iNetworkMon)//n/w monitoring supports - { - FLOG(_L("CFMSServer::CheckNetworkL- n/w monitor supported")); - if(iFMSInterruptAob.CheckNetworkL()) //not n/w interrupt + WLAN or GPRS - { - FLOG(_L("CFMSServer::CheckNetworkL- n/w mon supported & launch fota")); - iFMSInterruptAob.LaunchFotaEngineL(); - DropSession(); // to close the session & server - return; - } - else //if network not up, monitor for that - { - //from session itself we set the bearer type - FLOG(_L("CFMSServer::CheckNetworkL- n/w not up beaerer 3G %d"),aWcdma); - WriteToFile(EDLNetworkInterrupt,aBearerId, - (TDriveNumber)aDrive, aSize, aWcdma ); - StartMonitoringL(EDLNetworkInterrupt); - } - } - else //user interrupt or general interrupt dont check n/w call fota - { - FLOG(_L("CFMSServer::CheckNetworkL- n/w monitor not supported & launch fota")); - iFMSInterruptAob.LaunchFotaEngineL(); - FLOG(_L("CFMSServer::CheckNetworkL- stop server")); - DropSession(); - } - } - -//------------------------------------------------------------ -// Call from session class in hard reboot only -// CFMSServer::TriggerFotaL -//------------------------------------------------------------ -void CFMSServer::TriggerFotaL() - { - FLOG(_L("CFMSServer::TriggerFotaL- begin")); - if(iNetworkMon)//n/w monitoring supports - { - FLOG(_L("CFMSServer::TriggerFotaL- n/w monitor supported")); -#if defined (__WINS__) - if(ETrue) -#else - if(iFMSInterruptAob.CheckNetworkL()) -#endif - { - FLOG(_L("CFMSServer::TriggerFotaL- n/w mon supported & launch fota")); - iFMSInterruptAob.LaunchFotaEngineL(); - } - else if(iFMSInterruptAob.CheckGlobalRFStateL()) - { - FLOG(_L("CFMSServer::TriggerFotaL- n/w check started")); - iFMSInterruptAob.StartNetworkRegistryCheckL(); - return; //dont call drop session as it closes server - } - else - { - FLOG(_L("CFMSServer::TriggerFotaL- phone is offline")); - } - } - else //user interrupt or general interrupt dont check n/w call fota - { - FLOG(_L("CFMSServer::TriggerFotaL- n/w monitor not supported & launch fota")); - iFMSInterruptAob.LaunchFotaEngineL(); - FLOG(_L("CFMSServer::TriggerFotaL- stop server")); - } - DropSession(); // to close the session & server in any case - FLOG(_L("CFMSServer::TriggerFotaL- End")); - } - -//------------------------------------------------------------ -// Called only in n/w interrupt+ WLAN case from session class -// CFMSServer::CheckWlanL -//------------------------------------------------------------ -TBool CFMSServer::CheckWlanL() - { - return iFMSInterruptAob.CheckNetworkL(); - } - -//------------------------------------------------------------ -// CFMSServer::SetWcdma -//------------------------------------------------------------ -void CFMSServer::SetWcdma() - { - iFMSInterruptAob.SetWcdma(); - } - -// ---------------------------------------------------------------------------------------- -// CFMSServer::LockSession() -// ---------------------------------------------------------------------------------------- -void CFMSServer::LockSession() - { - iSessionCount++; - } - -// ---------------------------------------------------------------------------------------- -// CFMSServer::WriteToFile() -// ---------------------------------------------------------------------------------------- -void CFMSServer::WriteToFile(TInt aReason, TInt aBearer,TDriveNumber aDrive, - TInt aSize, TBool aWcdmaBearer ) - { - if(iSessionCount == 0) - { - FLOG(_L("CFMSServer::WriteToFile- begin")); - TInt err=iFile.Open(iFs,KFotaInterruptFileName,EFileWrite); - if(err == KErrNone) - { - FLOG(_L("CFMSServer::WriteToFile--passed")); - TBuf8<30> data;//size 30 or 32--as args is 16 bytes - TBuf8<30> temp; - temp.Num(aReason); - data.Append(temp); - data.Append(','); - temp.Num(aBearer);// or use iFMSinterruptAob's iBearer - data.Append(temp); - data.Append(','); - temp.Num((TInt)aDrive); - data.Append(temp); - data.Append(','); - temp.Num(aSize); - data.Append(temp); - data.Append(','); - temp.Num(aWcdmaBearer); - data.Append(temp); - iFile.Write(data); - iFile.Close(); - } - else - FLOG(_L("CFMSServer::WriteToFile- Failed")); - } - else - FLOG(_L("CFMSServer::WriteToFile- not done as another request is there")); - } - -// ---------------------------------------------------------------------------------------- -// CFMSServer::ReadFromFile() -// ---------------------------------------------------------------------------------------- -TBool CFMSServer::ReadFromFile(TInt& aReason, TInt& aBearer, TInt& aDrive, TInt& aSize - , TInt& aWcdmaBearer ) - { - TInt err = iFile.Open(iFs,KFotaInterruptFileName,EFileRead); - FLOG(_L("CFMSServer::ReadFromFile() error as %d"),err); - if(err == KErrNone) - { - TInt size = KErrNone; - err = iFile.Size(size); - if(size == 0) //file empty - { - FLOG(_L("CFMSServer::ReadFromFile() file size is empty")); - iFile.Close(); - return EFalse; - } - TBuf8<30> data; - iFile.Read(data); - iFile.Close(); - TBuf8<30> data1; - if(data.Length()>0) - { - TInt len =0 ; - if((len=data.LocateF(',')) > 0) - { - TLex8 value( data.Left(len)); - value.Val(aReason); - FLOG(_L("CFMSServer::ReadFromFile() retrieving reason as %d"),aReason); - data1.Insert(0,data.Right(data.Length()-(len+1))); - data.Zero(); - // len=data1.LocateF(','); - if( data1.Length() > 0 && (len=data1.LocateF(',')) > 0) - { - value=data1.Left(len); - value.Val(aBearer); - FLOG(_L("CFMSServer::ReadFromFile() retrieving aBearer as %d"),aBearer); - data.Insert(0,data1.Right(data1.Length()-(len+1))); - data1.Zero(); - // len=data.LocateF(','); - if(data.Length() > 0 && ( len=data.LocateF(','))> 0) - { - value=data.Left(len); - value.Val(aDrive); - FLOG(_L("CFMSServer::ReadFromFile() retrieving aDrive as %d"),aDrive); - data1.Insert(0,data.Right(data.Length()-(len+1))); - data.Zero(); - if(data1.Length() > 0 && ( len=data1.LocateF(','))> 0 ) - { - value=data1.Left(len); - value.Val(aSize); - FLOG(_L("CFMSServer::ReadFromFile() retrieving aSize as %d"),aSize); - data.Insert(0,data1.Right(data1.Length()-len-1)); - data1.Zero(); - if(data.Length() > 0 ) - { - value=data; - value.Val(aWcdmaBearer); - FLOG(_L("CFMSServer::ReadFromFile() retrieving aWcdmaBearer as %d"),aWcdmaBearer); - } - } - } - } - } - } - } - else - { - return EFalse; - } - return ETrue; - } - -// ----------------------------------------------------------------------------- -// CFMSServer::DropSession() -// ----------------------------------------------------------------------------- - -void CFMSServer::DropSession() - { - // A session is being destroyed - iSessionCount = 0; - //Kill the server - CActiveScheduler::Stop(); - } - -// ---------------------------------------------------------------------------------------- -// CFMSServer::FindVariation() -// ---------------------------------------------------------------------------------------- -void CFMSServer::FindVariation() - { - FLOG(_L("CFMSServer::FindVariation()")); - CRepository* centrep = NULL; - TInt variation = 1; - TRAPD( err, centrep = CRepository::NewL( KCRUidFotaServer ) ); - if ( centrep ) - { - FLOG(_L("CFMSServer::FindVariation()::Inside cenrep if")); - TInt err = centrep->Get( KFotaMonitoryServiceEnabled, variation ); - if( err == KErrNone) - { - FLOG(_L("CFMSServer::FindVariation()::cenrep key found with %d"),variation); - } - delete centrep; - } - if ( err == KErrNone ) - { - TBuf<10> var; //32-bit has max of 10 chars in Decimal - var.Num(variation,EBinary); - TInt size = var.Length(), maxlen = 4; - if( size < maxlen) - { - TBuf<4> temp; - temp.AppendFill('0',maxlen-size); - temp.Append(var); - var.Zero(); - var.Append(temp); - } - var.AppendFill('0',6); - if( var[0] == '1' )//memory - { - FLOG(_L("CFMSServer::FindVariation():: memory monitor supported")); - iMemoryMon = ETrue; - } - if( var[1] == '1' ) //startup - { - FLOG(_L("CFMSServer::FindVariation()::Phone restart monitor supported")); - iPhoneRestartMon = ETrue; - } - if( var[2] == '1' )//user or charger - { - FLOG(_L("CFMSServer::FindVariation()::charger monitor supported")); - iChargerMon = ETrue; - } - if( var[3] == '1' )//newtwork - { - FLOG(_L("CFMSServer::FindVariation()::network monitor supported")); - iNetworkMon = ETrue; - } - } - } - -// ---------------------------------------------------------------------------------------- -// CFMSServer::ChargerTobeMonitered() -// ---------------------------------------------------------------------------------------- -TBool CFMSServer::ChargerTobeMonitered() - { - FLOG(_L("CFMSServer::ChargerTobeMonitered()::charger monitor check")); - return iChargerMon; - } - -// ---------------------------------------------------------------------------------------- -// CFMSServer::NetworkTobeMonitered() -// ---------------------------------------------------------------------------------------- -TBool CFMSServer::NetworkTobeMonitered() - { - FLOG(_L("CFMSServer::NetworkTobeMonitered()::network monitor check")); - return iNetworkMon; - } - -// ---------------------------------------------------------------------------------------- -// CFMSServer::MoniterAfterPhoneRestart() -// ---------------------------------------------------------------------------------------- -TBool CFMSServer::MoniterAfterPhoneRestart() - { - FLOG(_L("CFMSServer::MoniterAfterPhoneRestart()::phonerestart monitor check")); - return iPhoneRestartMon; - } - -// ---------------------------------------------------------------------------------------- -// CFMSServer::MemoryTobeMonitered() -// ---------------------------------------------------------------------------------------- -TBool CFMSServer::MemoryTobeMonitered() - { - FLOG(_L("CFMSServer::MemoryTobeMonitered()::memory monitor check")); - return iMemoryMon; - } - -// ----------------------------------------------------------------------------- -// CFMSServer::StartMonitoring() -// ----------------------------------------------------------------------------- -void CFMSServer::StartMonitoringL(TFmsIpcCommands aType) - { - // A new session is being created - FLOG(_L("CFMSServer::StartMonitoringL>>")); - if( iSessionCount == 0 ) - { - ++iSessionCount; - iFMSInterruptAob.StartL(aType); - } - FLOG(_L("CFMSServer::StartMonitoringL<<")); - } - -// ----------------------------------------------------------------------------- -// CFMSServer::DeleteFile() -// ----------------------------------------------------------------------------- -void CFMSServer::DeleteFile(TBool aValue) - { - iDeleteFile = aValue; - } -// ---------------------------------------------------------------------------------------- -// CFMSServer::~CFMSServer() -// ---------------------------------------------------------------------------------------- -CFMSServer::~CFMSServer() -{ -FLOG(_L("CFMSServer::~CFMSServer())")); -//iFMSInterruptAob.Cancel(); -if(iDeleteFile) - { - TInt err = iFs.Delete(KFotaInterruptFileName); - FLOG(_L("CFMSServer::~CFMSServer() File Deleted with error as %d"),err); - } -if(iLogAsyncRequest) - { - FLOG(_L("CFMSServer::~CFMSServer():-iLogAsyncRequest cancel)")); - iLogAsyncRequest->Cancel(); - delete iLogAsyncRequest; - iLogAsyncRequest = NULL; - } -iFs.Close(); -} - -// ---------------------------------------------------------------------------------------- -// CFMSServer::NewSessionL() -// ---------------------------------------------------------------------------------------- -CSession2* CFMSServer::NewSessionL(const TVersion&,const RMessage2&) const -{ -return new (ELeave) CFMSSession(); -} - -// ---------------------------------------------------------------------------------------- -// CFMSServer::RequestPending() -// Any request pending -// ---------------------------------------------------------------------------------------- -TBool CFMSServer::RequestPending() - { - if( iSessionCount > 0 ) - { - return ETrue; - } - return EFalse; - } - -// ---------------------------------------------------------------------------- -// CFMSServer::AsyncSessionRequestL() -// Asynchronous request logging -// ---------------------------------------------------------------------------- -void CFMSServer::AsyncSessionRequestL() - { - if(iLogAsyncRequest) - { - FLOG(_L("CFMSServer::AsyncSessionRequestL():-iLogAsyncRequest cancel)")); - iLogAsyncRequest->Cancel(); - delete iLogAsyncRequest; - iLogAsyncRequest = NULL; - } - iLogAsyncRequest = CPeriodic::NewL (EPriorityNormal) ; - FLOG(_L("CFMSServer::AsyncSessionRequestL():-iLogAsyncRequest created)")); - iLogAsyncRequest->Start( - TTimeIntervalMicroSeconds32(KRequestTriggerWaitTime*4) - , TTimeIntervalMicroSeconds32(KRequestTriggerWaitTime*4) - , TCallBack(LogNwRequestL,this) ) ; - FLOG(_L("CFMSServer::AsyncSessionRequestL():-Request logged)")); - } - -// ----------------------------------------------------------------------------- -// CFMSServer::AsyncSessionRequestL() -// Asynchronous request logging -// ----------------------------------------------------------------------------- -void CFMSServer::StopAsyncRequest() - { - FLOG(_L("CFMSServer::StopAsyncRequest():-Begin)")); - if(iLogAsyncRequest) - { - FLOG(_L("CFMSServer::StopAsyncRequest():-cancelling the request)")); - iLogAsyncRequest->Cancel(); - delete iLogAsyncRequest; - iLogAsyncRequest = NULL; - } - FLOG(_L("CFMSServer::StopAsyncRequest():-End)")); - } - -// ----------------------------------------------------------------------------- -// CFMSServer::StartBatteryMonitoringL() -// Monitors for the battery -// ----------------------------------------------------------------------------- -void CFMSServer::StartBatteryMonitoringL(TFmsIpcCommands aType, TUint aLevel) - { - // A new session is being created - FLOG(_L("CFMSServer::StartMonitoringL, level = %d>>"), aLevel); - if( iSessionCount == 0 ) - { - ++iSessionCount; - iFMSInterruptAob.StartBatteryMonitoringL(aType, aLevel); - } - FLOG(_L("CFMSServer::StartMonitoringL<<")); - } -// ----------------------------------------------------------------------------- -// CFMSServer::StartUpdateInterruptMonitoringL() -// Monitors for the update interrupt type -// ----------------------------------------------------------------------------- -void CFMSServer::StartUpdateInterruptMonitoringL(TFmsIpcCommands aType) - { - // A new session is being created - FLOG(_L("CFMSServer::StartUpdateInterruptMonitoringL>>")); - if(EUpdMonitorPhoneCallEnd == aType) - { - iFMSInterruptAob.StartCallEndMonitoringL(aType); - } - else - { - FLOG(_L("reason unknown")); - } - FLOG(_L("CFMSServer::StartUpdateInterruptMonitoringL<<")); - } - -// ----------------------------------------------------------------------------- -// CFMSServer::CheckPhoneCallActiveL() -// checks any phone call is there or not at this moment -// ----------------------------------------------------------------------------- -void CFMSServer::CheckPhoneCallActiveL(TInt& aStatus) - { - FLOG(_L("CFMSServer::CheckPhoneCallActiveL>>")); - TInt callstatus(KErrNotFound); - RProperty::Get(KPSUidCtsyCallInformation, KCTsyCallState, callstatus); - //check ctsydomainpskeys.h for different combinations, below OR condition holds good - if(EPSCTsyCallStateUninitialized == callstatus || - EPSCTsyCallStateNone == callstatus ) // call not active - { - aStatus = EFalse; - } - else // call active - { - aStatus = ETrue; - } - FLOG(_L("CFMSServer::CheckPhoneCallActiveL status is %d<<"),aStatus); - } - -// ----------------------------------------------------------------------------- -// CFMSServer::MonitorPhoneCallEndL() -// Monitors for active phone call end -// ----------------------------------------------------------------------------- -TBool CFMSServer::MonitorPhoneCallEndL() - { - TInt CallState = KErrNotFound; - - CheckPhoneCallActiveL(CallState); - if(CallState) - { - //go for call end montioring - LogAsyncCallMonitorL(); - return EFalse; - } - else //trigger fota to show install query - { - return ETrue; - } - } - -// ----------------------------------------------------------------------------- -// CFMSServer::LogAsyncCallMonitorL() -// Async request to monitor active phone call end -// ----------------------------------------------------------------------------- -void CFMSServer::LogAsyncCallMonitorL() - { - if(iLogAsyncRequest) - { - FLOG(_L("CFMSServer::LogAsyncCallMonitorL():- cancel)")); - iLogAsyncRequest->Cancel(); - delete iLogAsyncRequest; - iLogAsyncRequest = NULL; - } - iLogAsyncRequest = CPeriodic::NewL (EPriorityNormal) ; - FLOG(_L("CFMSServer::LogAsyncCallMonitorL(): created)")); - iLogAsyncRequest->Start( - TTimeIntervalMicroSeconds32(KRequestTriggerWaitTime*1) - , TTimeIntervalMicroSeconds32(KRequestTriggerWaitTime*4) - , TCallBack(LogCallEndMonitorRequestL,this) ) ; - FLOG(_L("CFMSServer::LogAsyncCallMonitorL():-Request logged)")); - } - - -void CFMSServer::CreateScheduledReminderL() - { - FLOG(_L("CFMSServer::CreateScheduledReminderL ()")); - _LIT(KFotaScheduleExe, "Z:\\sys\\bin\\fotaschedulehandler.exe"); - - RScheduler scheduler; - TTsTime startTime; - TTime time; - time.HomeTime(); - time = time + (TTimeIntervalHours(1)); - startTime.SetLocalTime(time); - - User::LeaveIfError(scheduler.Connect()); - CleanupClosePushL(scheduler); - //Creating a persistent daily schedule - - TSchedulerItemRef persistentScheduleItem; - CArrayFixFlat* entries = new CArrayFixFlat (1); - CleanupStack::PushL(entries); - persistentScheduleItem.iName = TUid::Uid(KFMSServerUid).Name(); - - //TScheduleEntryInfo2 scentry1(startTime, EDaily, 1, 1); - TScheduleEntryInfo2 scentry1; - scentry1.SetStartTime(startTime); - scentry1.SetInterval(1); - scentry1.SetIntervalType(TIntervalType(EHourly)); - scentry1.SetValidityPeriod((TTimeIntervalMinutes) 1440); //1440 min = 24 hrs or 1 day - - entries->AppendL(scentry1); - - scheduler.Register(TFileName( KFotaScheduleExe ), 0 ); - TInt ret = scheduler.CreatePersistentSchedule(persistentScheduleItem, *entries); - - FLOG(_L("created schedule %d %d:%d"), persistentScheduleItem.iHandle, - time.DateTime().Hour(), time.DateTime().Minute()); - - if (ret == KErrNone) - { - TTaskInfo taskInfo; - taskInfo.iName = TUid::Uid(KFMSServerUid).Name(); - taskInfo.iRepeat = 1; //Repeat once - taskInfo.iPriority = 1; - - TFotaScheduledUpdate fotareminder(-1, -1); - TPckg fotareminderpkg(fotareminder); - - HBufC* data = HBufC::NewLC(fotareminderpkg.Length()); - data->Des().Copy(fotareminderpkg); - - TInt err = scheduler.ScheduleTask(taskInfo, *data, persistentScheduleItem.iHandle); - - FLOG(_L("Schedule creation error %d"), err); - - CleanupStack::PopAndDestroy(data); - } - CleanupStack::PopAndDestroy(entries); - CleanupStack::PopAndDestroy(&scheduler); // xx - } - - -void CFMSServer::DeleteScheduledRemindersL() - { - FLOG(_L("CFMSServer::DeleteScheduledRemindersL >>")); - - TScheduleEntryInfo2 ret; - TInt err; - RScheduler sc; - TTime t; - TTsTime time; - TSchedulerItemRef scitem; - CArrayFixFlat* aSchRefArray = new CArrayFixFlat (5); - TScheduleFilter aFilter(EAllSchedules); - User::LeaveIfError( sc.Connect() ); - CleanupClosePushL( sc ); - CleanupStack::PushL(aSchRefArray); - - User::LeaveIfError( sc.GetScheduleRefsL( *aSchRefArray,aFilter) ); - FLOG(_L("Schedule items: ")); - for ( TInt i=0; iCount(); ++i ) - { - TSchedulerItemRef it = (*aSchRefArray)[i]; - if ( it.iName == TUid::Uid(KFMSServerUid).Name() ) - { - TScheduleState2 sc_state; - CArrayFixFlat* sc_entries = new CArrayFixFlat (5); - CArrayFixFlat* sc_tasks = new CArrayFixFlat (5); - TTsTime sc_duetime; - CleanupStack::PushL( sc_entries ); - CleanupStack::PushL( sc_tasks ); - FLOG (_L("%d. schedule handle: %d name:'%S'"),i,it.iHandle, &(it.iName) ); - - err = sc.GetScheduleL ( it.iHandle , sc_state, *sc_entries,*sc_tasks,sc_duetime ); // xx - - TDateTime dtm = sc_duetime.GetLocalTime().DateTime(); - FLOG(_L(" schedule duetime:%d:%d"), dtm.Hour(), dtm.Minute()); - - if ( err ) FLOG(_L(" schedule sc get err %d"),err); - else - { - for ( TInt k=0; kCount();++k) - { - TScheduleEntryInfo2 sc_entry = (*sc_entries)[k]; - ret = sc_entry; - TTime sctime = sc_entry.StartTime().GetLocalTime(); - FLOG(_L(" schedule entry %d int-type:%d int:%d start: %d:%d"),k,sc_entry.IntervalType(),sc_entry.Interval(),sctime.DateTime().Hour(),sctime.DateTime().Minute()); - } - - for ( TInt j=0; jCount();++j) - { - TTaskInfo sc_task = (*sc_tasks)[j]; - FLOG(_L(" schedule task %d '%S'"),sc_task.iTaskId,&(sc_task.iName) ); - if ( sc_task.iName==TUid::Uid(KFMSServerUid).Name() ) - { - FLOG(_L(" schedule DeleteTask %d"),sc_task.iTaskId); - User::LeaveIfError( sc.DeleteTask(sc_task.iTaskId) ); - } - } - } - - FLOG(_L(" DeleteSchedule %d"),it.iHandle); - err = sc.DeleteSchedule(it.iHandle ); - FLOG(_L("Delete status of tasks = %d"), err); - - CleanupStack::PopAndDestroy( sc_tasks ); - CleanupStack::PopAndDestroy( sc_entries ); - } - } - CleanupStack::PopAndDestroy( aSchRefArray ); - CleanupStack::PopAndDestroy(&sc); - - FLOG(_L("CFMSServer::DeleteScheduledRemindersL <<")); - } -//End of file