adaptationlayer/tsy/nokiatsy_dll/internal/test/nokiatsy_test_tool/cbs/src/cbsblocks.cpp
author Tom Pritchard <tomp@symbian.org>
Mon, 09 Nov 2009 10:31:01 +0000
changeset 3 1972d8c2e329
parent 0 63b37f68c1ce
permissions -rw-r--r--
Tidying up initial files

/*
* Copyright (c) 2002-2008 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the License "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:   Specific class for Cell Broadcast tests
*
*/




// INCLUDE FILES
#include <e32svr.h>
#include <stifparser.h>
#include <stiftestinterface.h>
#include "cbs.h"
#include <ctsy/serviceapi/cmmsmsutility.h>
#include <ctsy/rmmcustomapi.h>

// CONSTANTS

// ============================ MEMBER FUNCTIONS ===============================

// -----------------------------------------------------------------------------
// CCbs::Delete
// Delete here all resources allocated and opened from test methods.
// Called from destructor.
// -----------------------------------------------------------------------------
//
void CCbs::Delete()
    {
    }

// -----------------------------------------------------------------------------
// CCbs::RunMethodL
// Run specified method. Contains also table of test mothods and their names.
// -----------------------------------------------------------------------------
//
TInt CCbs::RunMethodL(
    CStifItemParser& aItem )
    {
    iCbsLog->Log(_L8("CCbs::RunMethodL"));

    static TStifFunctionInfo const KFunctions[] =
        {
        ENTRY( "RunIscTestCase",  CCore::RunIscTestCase),
        ENTRY( "SyncIscTestCase", CCore::SyncIscTestCase),
        ENTRY( "ActivateCbsReception", CCbs::ActivateCbsReceptionL ),
        ENTRY( "DeactivateCbsReception", CCbs::DeactivateCbsReceptionL ),
        ENTRY( "ReceiveCbs", CCbs::ReceiveCbsL ),
        ENTRY( "ReadCBSSimTopics", CCbs::ReadCBSSimTopicsL ),
        ENTRY( "DeleteCBSSimTopic", CCbs::DeleteCBSSimTopicL ),
        ENTRY( "HandleSpecifiedRequests", CCore::HandleSpecifiedRequests),
        ENTRY( "InitializeIPCRequestTable", CCore::InitializeIPCRequestTable),
        ENTRY( "SetExpectedCompleteIPC", CCore::SetExpectedCompleteIPC),
        };

    const TInt count = sizeof( KFunctions ) /
                        sizeof( TStifFunctionInfo );

    return RunInternalL( KFunctions, count, aItem );

    }    
    
// -----------------------------------------------------------------------------
// CCbs::ActivateCbsReceptionL
// -----------------------------------------------------------------------------
//
TInt CCbs::ActivateCbsReceptionL(CStifItemParser& /*aItem*/)
    {
    iCbsLog->Log(_L8("CBS::ActivateCbsReception"));

    TInt ret = KErrGeneral;

    TCbsCbmiAndLangAndFilter filter;
    filter.iSetting = RMobileBroadcastMessaging::EBroadcastAcceptAll;
    CMmDataPackage package;
    package.PackData(&filter);
    ret = HandleRequestL( EMobileBroadcastMessagingReceiveMessage, &package );
    if ( KErrNone != ret )
        {
        iCbsLog->Log(_L8("Error in activating CBS reception: %d"), ret );
        }
    else
        {
        iActivateCbsReceptionPending = ETrue;
        }
    return ret;
    }

// -----------------------------------------------------------------------------
// CCbs::CompleteActivateCbsReception
// -----------------------------------------------------------------------------
//
void CCbs::CompleteActivateCbsReception(TInt aErr)
    {
    iCbsLog->Log(_L8("CBS::CompleteActivateCbsReception, err=%d"),aErr);
    if (iActivateCbsReceptionPending)
        {
        iActivateCbsReceptionPending = EFalse;
        Signal( aErr );
        }
    }

// -----------------------------------------------------------------------------
// CCbs::DeactivateCbsReceptionL
// -----------------------------------------------------------------------------
//
TInt CCbs::DeactivateCbsReceptionL(CStifItemParser& /*aItem*/)
    {
    iCbsLog->Log(_L8("CBS::DeactivateCbsReception"));

    TInt ret = KErrGeneral;

    TCbsCbmiAndLangAndFilter filter;
    filter.iSetting = RMobileBroadcastMessaging::EBroadcastAcceptNone;
    CMmDataPackage package;
    package.PackData(&filter);
    ret = HandleRequestL( EMobileBroadcastMessagingReceiveMessageCancel, &package );
    if ( KErrNone != ret )
        {
        iCbsLog->Log(_L8("Error in deactivating CBS reception: %d"), ret );
        }
    else
        {
        iDeactivateCbsReceptionPending = ETrue;
        }

    return ret;
    }

// -----------------------------------------------------------------------------
// CCbs::CompleteDeactivateCbsReception
// -----------------------------------------------------------------------------
//
void CCbs::CompleteDeactivateCbsReception(TInt aErr)
    {
    iCbsLog->Log(_L8("CBS::CompleteDeactivateCbsReception, err=%d"),aErr);
    if (iDeactivateCbsReceptionPending)
        {
        iDeactivateCbsReceptionPending = EFalse;
        Signal( aErr );
        }
    }

// -----------------------------------------------------------------------------
// CCbs::ReceiveCbsL
// -----------------------------------------------------------------------------
//
TInt CCbs::ReceiveCbsL(CStifItemParser& aItem)
    {
    iCbsLog->Log(_L8("CBS::ReceiveCbsL. Waiting for CBS message (be patient, please)."));

    // Set reference parameters for parameter checking
    TInt temp( 0 );
    aItem.GetNextInt( temp );
    iSbNumber = temp;

    aItem.GetNextInt( temp );
    iNumberOfPages = temp;

    aItem.GetNextInt( temp );
    iMessageType = temp;

    aItem.GetNextInt( temp );
    iMessageId = temp;

    aItem.GetNextInt( temp );
    iSerialNum = temp;

    aItem.GetNextInt( temp );
    iDCS = temp;

    aItem.GetNextInt( temp );
    iInfoLength = temp;

    // do nothing but waiting ...
    iReceiveCbsPending = ETrue;
    return KErrNone;
    }

// -----------------------------------------------------------------------------
// CCbs::CompleteReceiveCbs, GSM only
// -----------------------------------------------------------------------------
//
void CCbs::CompleteReceiveGsmCbs(TInt aErr, CMmDataPackage& aData)
    {
    iCbsLog->Log(_L8("CBS::CompleteReceiveGsmCbs, err=%d"),aErr);
    if (iReceiveCbsPending)
        {
        if ( KErrNone == aErr )
            {
            _LIT8( KReceiveCbsOk, "CBS receiving ok" );
            iCbsLog->Log((TDesC8)KReceiveCbsOk );

            TGsmCbsMsg cbsMsg;
            aData.UnPackData( cbsMsg );
            // CBS message starts with:
            //  - serial nr MSB
            //  - serial nr LSB
            //  - message id MSB
            //  - message id LSB
            //  - data coding scheme (DCS)
            iCbsLog->Log(_L8("Received msg has serial nr=%d, cbmi=%d, dcs=%d"),
                ((cbsMsg.iCbsMsg[0]<<8)+cbsMsg.iCbsMsg[1]),
                ((cbsMsg.iCbsMsg[2]<<8)+cbsMsg.iCbsMsg[3]),
                cbsMsg.iCbsMsg[4]);

            // Check received data
            if ( iHandleSpecifiedRequests )
                {
                if ( cbsMsg.iCbsMsg != iCbsMsgGSM )
                    {
                    aErr = KErrGeneral;
                    }
                }
            }
        else
            {
            _LIT8( KReceiveCbsFailed, "CBS receiving failed: %d" );
            iCbsLog->Log((TDesC8)KReceiveCbsFailed, aErr );
            }
        iReceiveCbsPending = EFalse;
        Signal( aErr );
        }
    }

// -----------------------------------------------------------------------------
// CCbs::CompleteReceiveWcdmaCbs, WCDMA only
// -----------------------------------------------------------------------------
//
void CCbs::CompleteReceiveWcdmaCbs( TInt aErr, CMmDataPackage& aData )
    {
    iCbsLog->Log(_L8("CBS::CompleteReceiveWcdmaCbs."));
    if ( iReceiveCbsPending )
        {
        if ( KErrNone == aErr )
            {
            _LIT8( KReceiveCbsOk, "CBS WCDMA receiving ok" );
            iCbsLog->Log((TDesC8)KReceiveCbsOk );
            CArrayPtrFlat<TWcdmaCbsMsg>* cbsMsg;
            TInt sbNumber;
            aData.UnPackData( cbsMsg, sbNumber );
            TWcdmaCbsMsg* wcdmaCbsMsg( cbsMsg->At( 0 ) );
            iCbsLog->Log(_L8("Received msg has serial nr=%d, cbmessage id=%d, dcs=%d"),
                wcdmaCbsMsg->iSerialNum, wcdmaCbsMsg->iMessageId,wcdmaCbsMsg->iDCS );

            // Check received data
            if ( iHandleSpecifiedRequests )
                {
                TBuf8<RMobileBroadcastMessaging::KBroadcastPageSize>
                    iWcdmaCbsDataTemp;
                iWcdmaCbsDataTemp.Append(
                    wcdmaCbsMsg->iWcdmaCbsData.Mid ( 0 , wcdmaCbsMsg->iInfoLength ) );

                if ( iWcdmaCbsDataTemp != iCbsMsgWCDMA )
                    {
                    aErr = KErrGeneral;
                    }
                if ( wcdmaCbsMsg->iSbNumber != iSbNumber )
                    {
                    aErr = KErrGeneral;
                    }
                if ( wcdmaCbsMsg->iNumberOfPages != iNumberOfPages )
                    {
                    aErr = KErrGeneral;
                    }
                if ( wcdmaCbsMsg->iMessageType != iMessageType )
                    {
                    aErr = KErrGeneral;
                    }
                if ( wcdmaCbsMsg->iMessageId != iMessageId )
                    {
                    aErr = KErrGeneral;
                    }
                if ( wcdmaCbsMsg->iSerialNum != iSerialNum )
                    {
                    aErr = KErrGeneral;
                    }
                if ( wcdmaCbsMsg->iDCS != iDCS )
                    {
                    aErr = KErrGeneral;
                    }
                if ( wcdmaCbsMsg->iInfoLength != iInfoLength )
                    {
                    aErr = KErrGeneral;
                    }
                }
            }
         else
            {
            _LIT8( KReceiveCbsFailed, "CBS WCDMA receiving failed: %d" );
            iCbsLog->Log((TDesC8)KReceiveCbsFailed, aErr );
            }
        iReceiveCbsPending = EFalse;
        Signal( aErr );
        }
    }


// -----------------------------------------------------------------------------
// CCbs::ReadCBSSimTopicsL
// -----------------------------------------------------------------------------
//
TInt CCbs::ReadCBSSimTopicsL(CStifItemParser& /*aItem*/)
    {
    iCbsLog->Log(_L8("CBS::ReadCBSSimTopicsL"));
    TInt ret = KErrGeneral;
    ret = HandleRequestL( ECustomStartSimCbTopicBrowsingIPC );
    if ( KErrNone != ret )
        {
        iCbsLog->Log(_L8("Error in reading CBS SIM topics: %d"), ret );
        }
    else
        {
        iReadCBSSimTopicsPending = ETrue;
        }
    return ret;
    }

// -----------------------------------------------------------------------------
// CCbs::CompleteReadCBSSimTopics
// -----------------------------------------------------------------------------
//
void CCbs::CompleteReadCBSSimTopics(TInt aErr, CMmDataPackage& aData)
    {
    iCbsLog->Log(_L8("CBS::CompleteReadCBSSimTopics, err=%d"),aErr);
    if (iReadCBSSimTopicsPending)
        {
        if ( KErrNone == aErr )
            {
            CArrayFixFlat<RMmCustomAPI::TSimCbTopic>* topics;
            aData.UnPackData( topics );
            TInt count = topics->Count();
            if ( 0 < count )
                {
                iCbsLog->Log(_L8("%d topics read."), count);
                for ( TInt i = 0; i < count; i++ )
                    {
                    iCbsLog->Log(_L8("  topic[%d]=%d."),i,topics->At( i ).iNumber);
                    }
                }
            }
        iReadCBSSimTopicsPending = EFalse;
        Signal(aErr);
        }
    }

// -----------------------------------------------------------------------------
// CCbs::DeleteCBSSimTopicL
// -----------------------------------------------------------------------------
//
TInt CCbs::DeleteCBSSimTopicL(CStifItemParser& aItem)
    {
    TInt nbr;
    aItem.GetNextInt(nbr);
    iCbsLog->Log(_L8("CBS::DeleteCBSSimTopicL, deleting topic %d."),nbr);

    TInt ret = KErrGeneral;
    TBool deleteTopic = ETrue;
    CMmDataPackage package;
    package.PackData(&nbr, &deleteTopic);
    ret = HandleRequestL( ECustomDeleteSimCbTopicIPC, &package );
    if ( KErrNone != ret )
        {
        iCbsLog->Log(_L8("Error in deleting CBS SIM topic: %d"), ret );
        }
    else
        {
        iDeleteCBSSimTopicPending = ETrue;
        }
    return ret;
    }

// -----------------------------------------------------------------------------
// CCbs::CompleteDeleteCBSSimTopic
// -----------------------------------------------------------------------------
//
void CCbs::CompleteDeleteCBSSimTopic(TInt aErr)
    {
    iCbsLog->Log(_L8("CBS::CompleteDeleteCBSSimTopic, err=%d"),aErr);
    if (iDeleteCBSSimTopicPending)
        {
        iDeleteCBSSimTopicPending = EFalse;
        Signal(aErr);
        }
    }


// ========================== OTHER EXPORTED FUNCTIONS =========================
// None

//  End of File