fotaapplication/FotaScheduleHandler/src/fotaschedulehandler.cpp
author hgs
Tue, 13 Jul 2010 09:51:41 +0530
changeset 51 2e64dc50f295
permissions -rw-r--r--
201025_02
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
51
2e64dc50f295 201025_02
hgs
parents:
diff changeset
     1
/*
2e64dc50f295 201025_02
hgs
parents:
diff changeset
     2
* Copyright (c) 2005-2006 Nokia Corporation and/or its subsidiary(-ies). 
2e64dc50f295 201025_02
hgs
parents:
diff changeset
     3
* All rights reserved.
2e64dc50f295 201025_02
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
2e64dc50f295 201025_02
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
2e64dc50f295 201025_02
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
2e64dc50f295 201025_02
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
2e64dc50f295 201025_02
hgs
parents:
diff changeset
     8
*
2e64dc50f295 201025_02
hgs
parents:
diff changeset
     9
* Initial Contributors:
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    11
*
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    12
* Contributors:
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    13
*
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    14
* Description:   Handles scheduled update, starts fotaserver and request upd
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    15
*
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    16
*/
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    17
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    18
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    19
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    20
#include <schinfo.h>
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    21
#include <schtask.h>
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    22
#include <s32file.h>
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    23
#include <e32math.h>
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    24
#include <e32cons.h>
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    25
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    26
#include "FotaSchedDebug.h"
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    27
#include "fotaengine.h"
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    28
#include "../../inc/FotaIPCTypes.h"
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    29
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    30
// Constants
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    31
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    32
// -----------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    33
// UpdateFirmwareL
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    34
//
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    35
// -----------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    36
//
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    37
LOCAL_D void UpdateFirmwareL(RFile& aTaskFile)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    38
	{
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    39
    FLOG(_L("fotaschedulehandler UpdateFirmwareL(RFile& aTaskFile)"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    40
    TInt err;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    41
    CFileStore*         store;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    42
    RStoreReadStream    instream;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    43
    // Get tasks from scheduler's store
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    44
    store = CDirectFileStore::FromLC(aTaskFile);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    45
    instream.OpenLC(*store,store->Root());
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    46
    TInt count = instream.ReadInt32L();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    47
    FLOG(_L("fotaschedulehandler  task count  %d"),count );
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    48
	for (TInt i=0;i<count;i++)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    49
        {
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    50
		CScheduledTask* task = CScheduledTask::NewLC(instream);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    51
        HBufC* b = const_cast<HBufC*>(&(task->Data()));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    52
        TPtr ptr = b->Des();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    53
        HBufC8* b8 = HBufC8::NewLC( b->Length() );
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    54
        b8->Des().Copy(ptr);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    55
        TFotaScheduledUpdate fotareminder(-1,-1);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    56
        TPckg<TFotaScheduledUpdate>   fotareminderpkg(fotareminder);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    57
        fotareminderpkg.Copy(b8->Des());
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    58
        CleanupStack::PopAndDestroy( b8 );
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    59
        FLOG(_L("fotaschedulehandler packageid:%d  sched:%d"),fotareminder.iPkgId, fotareminder.iScheduleId);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    60
        RFotaEngineSession fota;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    61
        fota.OpenL();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    62
        CleanupClosePushL( fota );
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    63
        err = fota.ScheduledUpdateL (fotareminder);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    64
        if(err){} // to remove compiler warning
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    65
        FLOG(_L("fotaschedulehandler       2........ err %d"),err);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    66
        fota.Close();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    67
        FLOG(_L("fotaschedulehandler       3 "));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    68
        CleanupStack::PopAndDestroy( &fota); 
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    69
		CleanupStack::PopAndDestroy(task);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    70
        }
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    71
	CleanupStack::PopAndDestroy( &instream ); 
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    72
	CleanupStack::PopAndDestroy( store ); 
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    73
	}
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    74
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    75
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    76
// -----------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    77
// ExecuteL
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    78
//
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    79
// -----------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    80
//
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    81
LOCAL_D TInt ExecuteL()
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    82
	{
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    83
	TInt err = KErrNoMemory;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    84
		
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    85
	RFile file;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    86
		
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    87
	// Adopt the task file from the Task Scheduler
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    88
	err = file.AdoptFromCreator(TScheduledTaskFile::FsHandleIndex(),
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    89
									TScheduledTaskFile::FileHandleIndex());
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    90
    FLOG(_L("  err  %d"),err );
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    91
	User::LeaveIfError(err);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    92
	
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    93
	TRAP(err, UpdateFirmwareL(file));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    94
	
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    95
	file.Close();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    96
	
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    97
	User::LeaveIfError(err);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    98
	
2e64dc50f295 201025_02
hgs
parents:
diff changeset
    99
	return err;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   100
	}
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   101
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   102
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   103
// -----------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   104
// Execute
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   105
//
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   106
// -----------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   107
//
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   108
LOCAL_D TInt Execute()
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   109
	{
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   110
    FLOG(_L("fotaschedulehandler Execute()"));
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   111
	TInt err = KErrNoMemory;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   112
	
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   113
	// construct and install active scheduler
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   114
	CActiveScheduler* scheduler = new CActiveScheduler;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   115
	if (!scheduler)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   116
		{
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   117
		return err;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   118
		}
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   119
	CActiveScheduler::Install(scheduler);
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   120
	CTrapCleanup* cleanupStack = CTrapCleanup::New();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   121
	if (cleanupStack)
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   122
		{
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   123
        TRAP(err, ExecuteL());
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   124
		delete cleanupStack;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   125
		}
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   126
    delete scheduler;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   127
	return err;
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   128
	}
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   129
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   130
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   131
// -----------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   132
// E32Main
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   133
//
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   134
// -----------------------------------------------------------------------------
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   135
//
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   136
GLDEF_C TInt E32Main()
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   137
	{
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   138
	return Execute();
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   139
	}
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   140
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   141
2e64dc50f295 201025_02
hgs
parents:
diff changeset
   142