bluetoothengine/headsetsimulator/profiles/hspprofile/src/dataprocessing/hspcommand.cpp
author michal.sulewski
Wed, 15 Sep 2010 15:59:44 +0200
branchheadsetsimulator
changeset 60 90dbfc0435e3
permissions -rw-r--r--
source code commit

/* 
 *
 * Copyright (c) <2010> Comarch S.A. 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".
 *
 * Original Contributors:
 * Comarch S.A. - original contribution.
 *
 * Contributors:
 *
 * Description:
 *
 */

#include <badesca.h>

#include "hspcommand.h"
#include "debug.h"

TATParam::TATParam( const TDesC8& aValue )

    {
    iValue.Copy( aValue );
    }

const TDesC8& TATParam::Des() const
    {
    return iValue;
    }

TInt TATParam::IntL() const
    {
    TLex8 lex( iValue );
    TInt res = KErrNotFound;
    User::LeaveIfError( lex.Val( res ) );

    return res;

    }

CHsHSPCommand* CHsHSPCommand::NewL()
    {
    CHsHSPCommand *self = CHsHSPCommand::NewLC();
    CleanupStack::Pop( self );

    return self;
    }

CHsHSPCommand* CHsHSPCommand::NewLC()
    {

    CHsHSPCommand *self = new ( ELeave ) CHsHSPCommand();
    CleanupStack::PushL( self );
    self->ConstructL();
    return self;
    }

CHsHSPCommand::~CHsHSPCommand()
    {
    iParams.Close();
    iModeDes.Close();
    iParamsDes.Close();
    iTypeDes.Close();
    }

TInt CHsHSPCommand::SetType( const THsHSPCommandType aType )
    {
    iType = aType;

    switch ( iType )
        {
        case EHSPCmdRING:
            iTypeDes.Copy( KHsHSPRINGCommand );
            break;
        case EHSPCmdVGS:
            iTypeDes.Copy( KHsHSPVGSCommand );
            break;
        case EHSPCmdVGM:
            iTypeDes.Copy( KHsHSPVGMCommand );
            break;
        case EHSPCmdCKPD:
            iTypeDes.Copy( KHsHSPCKPDCommand );
            break;
        default:
            return KErrArgument;

        }
    return KErrNone;
    }

TInt CHsHSPCommand::SetMode( const THsHSPCommandMode aMode )
    {
    iMode = aMode;
    switch ( iMode )
        {
        case ECmdModeRead:
            iModeDes.Copy( KHsHSPATReadModeDes );
            break;
        case ECmdModeWrite:
            iModeDes.Copy( KHsHSPATWriteModeDes );
            break;
        case ECmdModeTest:
            iModeDes.Copy( KHsHSPATTestModeDes );
            break;
        case ECmdModeNormal:
            iModeDes.Copy( KNullDesC8 );
            break;
        case ECmdModeOther:
            iModeDes.Copy( KNullDesC8 );
            break;
        default:
            return KErrArgument;
        }

    return KErrNone;
    }

TInt CHsHSPCommand::SetParams( const RATParamArray& aParams )
    {
    TRACE_FUNC_ENTRY

    TInt res = KErrNone;
    if ( aParams.Count() > 0 )
        {
        iParams.Reset();
        iParams = aParams;

        for ( TInt i = 0; i < iParams.Count() - 1; i++ )
            {

            iParamsDes.Append( iParams[i].Des() );
            iParamsDes.Append( KHsHSPParamsSeparator );
            }

        iParamsDes.Append( iParams[iParams.Count() - 1].Des() );

        }
    else
        res = KErrArgument;

    TRACE_FUNC_EXIT
    return res;
    }

void CHsHSPCommand::SetSource( const TBool aFromAG )
    {
    iFromAG = aFromAG;
    }

void CHsHSPCommand::ToDes8( TDes8& aBuf ) const
    {

    if ( iMode == ECmdModeNormal )
        {
        aBuf.Copy( KHsHSPCommandPrefix );
        aBuf.Append( iTypeDes );
        aBuf.Append( KHsHSPCommandSuffix );
        }

    else if ( iType != EHSPCmdUnknown )
        {
        aBuf.Copy( KHsHSPCommandPrefix );
        aBuf.Append( iTypeDes );
        aBuf.Append( iModeDes );
        aBuf.Append( iParamsDes );
        aBuf.Append( KHsHSPCommandSuffix );
        }
    else
        {
        aBuf.Zero();
        }

    TRACE_INFO((_L8("COMMAND TO DES: %S"),&aBuf));
    }

THsHSPCommandType CHsHSPCommand::Type() const
    {
    return iType;
    }

THsHSPCommandMode CHsHSPCommand::Mode() const
    {
    return iMode;
    }

TBool CHsHSPCommand::FromAG() const
    {
    return iFromAG;
    }

const RATParamArray CHsHSPCommand::Params() const
    {
    return iParams;
    }

void CHsHSPCommand::CopyL( const CHsHSPCommand* aCmdFrom, CHsHSPCommand& aCmdTo )
    {
    aCmdTo.iMode = aCmdFrom->iMode;
    aCmdTo.iType = aCmdFrom->iType;

    aCmdTo.iParams.Reset();
    for ( TInt i = 0; i < aCmdFrom->iParams.Count(); i++ )
        {
        aCmdTo.iParams.AppendL( aCmdFrom->iParams[i] );
        }

    aCmdTo.iFromAG = aCmdFrom->iFromAG;

    aCmdTo.iModeDes.Copy( aCmdFrom->iModeDes );
    aCmdTo.iTypeDes.Copy( aCmdFrom->iTypeDes );
    aCmdTo.iParamsDes.Copy( aCmdFrom->iParamsDes );

    }

CHsHSPCommand::CHsHSPCommand() :
    iType( EHSPCmdUnknown ), iParams( KParamArrayGranularity )
    {

    }

void CHsHSPCommand::ConstructL()
    {
    iModeDes.CreateL( KModeDesMaxLength );
    iTypeDes.CreateL( KTypeDesMaxLength );
    iParamsDes.CreateL( KParamsDesMaxLength );

    }