bluetoothengine/headsetsimulator/profiles/hfpprofile/src/dataprocessing/hfpcommandparser.cpp
author michal.sulewski
Wed, 15 Sep 2010 15:59:44 +0200
branchheadsetsimulator
changeset 60 90dbfc0435e3
permissions -rw-r--r--
source code commit
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
60
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
     1
/* 
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
     2
 *
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
     3
 * Copyright (c) <2010> Comarch S.A. and/or its subsidiary(-ies).
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
     4
 * All rights reserved.
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
     5
 * This component and the accompanying materials are made available
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
     6
 * under the terms of the License "Eclipse Public License v1.0"
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
     7
 * which accompanies this distribution, and is available
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
     8
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
     9
 *
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    10
 * Original Contributors:
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    11
 * Comarch S.A. - original contribution.
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    12
 *
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    13
 * Contributors:
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    14
 *
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    15
 * Description:
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    16
 *
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    17
 */
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    18
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    19
#include "hfpcommandparser.h"
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    20
#include "badesca.h"
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    21
#include "debug.h"
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    22
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    23
CHsHFPParser* CHsHFPParser::NewL()
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    24
    {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    25
    CHsHFPParser *self = CHsHFPParser::NewLC();
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    26
    CleanupStack::Pop( self );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    27
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    28
    return self;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    29
    }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    30
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    31
CHsHFPParser* CHsHFPParser::NewLC()
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    32
    {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    33
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    34
    CHsHFPParser *self = new ( ELeave ) CHsHFPParser();
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    35
    CleanupStack::PushL( self );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    36
    self->ConstructL();
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    37
    return self;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    38
    }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    39
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    40
CHsHFPParser::~CHsHFPParser()
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    41
    {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    42
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    43
    }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    44
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    45
void CHsHFPParser::ParseL( const TDesC8& aBufCommand, const TBool aFromAG,
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    46
        CHsHFPCommand& aCommand )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    47
    {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    48
    TRACE_FUNC_ENTRY
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    49
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    50
    aCommand.SetSource( aFromAG );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    51
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    52
    THsHFPCommandType type = EHFPCmdUnknown;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    53
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    54
    type = RetrieveTypeL( aBufCommand );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    55
    User::LeaveIfError( aCommand.SetType( type ) );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    56
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    57
    if ( type == EHFPCmdOK || type == EHFPCmdERROR || type == EHFPCmdCHUP
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    58
            || type == EHFPCmdRING || type == EHFPCmdATA || type == EHFPCmdBLDN )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    59
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    60
        User::LeaveIfError( aCommand.SetMode( ECmdModeNormal ) );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    61
        RATParamArray params( 1 );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    62
        User::LeaveIfError( aCommand.SetParams( params ) );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    63
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    64
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    65
    else if ( type == EHFPCmdATD )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    66
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    67
        aCommand.SetMode( ECmdModeOther );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    68
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    69
        RBuf8 buf;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    70
        buf.CreateL( aBufCommand );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    71
        buf.CleanupClosePushL();
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    72
        buf.Delete( 0, KHsHFPATDCommand().Size() );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    73
        buf.Delete( buf.Size() - KHsHFPCommandSuffix().Size(), KHsHFPCommandSuffix().Size() );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    74
        RATParamArray params;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    75
        params.AppendL( TATParam( buf ) );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    76
        User::LeaveIfError( aCommand.SetParams( params ) );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    77
        CleanupStack::PopAndDestroy( &buf );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    78
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    79
    else
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    80
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    81
        THsHFPCommandMode mode = ECmdUnknownMode;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    82
        mode = RetrieveModeL( aBufCommand, aFromAG );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    83
        User::LeaveIfError( aCommand.SetMode( mode ) );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    84
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    85
        RATParamArray params( 4 );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    86
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    87
        RetrieveParamsL( aBufCommand, mode, params );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    88
        User::LeaveIfError( aCommand.SetParams( params ) );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    89
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    90
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    91
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    92
    TRACE_FUNC_EXIT
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    93
    }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    94
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    95
CHsHFPParser::CHsHFPParser()
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    96
    {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    97
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    98
    }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
    99
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   100
void CHsHFPParser::ConstructL()
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   101
    {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   102
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   103
    }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   104
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   105
THsHFPCommandMode CHsHFPParser::RetrieveModeL( const TDesC8 &aCommand,
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   106
        const TBool aFromAG )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   107
    {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   108
    TRACE_FUNC_ENTRY
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   109
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   110
    THsHFPCommandMode res = ECmdUnknownMode;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   111
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   112
    if ( aFromAG )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   113
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   114
        if ( aCommand.Find( KHsHFPATTestModeDesAG ) != KErrNotFound )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   115
            {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   116
            res = ECmdModeTest;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   117
            }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   118
        else if ( aCommand.Find( KHsHFPATReadModeDesAG ) != KErrNotFound )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   119
            {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   120
            res = ECmdModeRead;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   121
            }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   122
        else if ( aCommand.Find( KHsHFPATWriteModeDesAG ) != KErrNotFound )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   123
            {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   124
            res = ECmdModeWrite;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   125
            }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   126
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   127
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   128
    else
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   129
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   130
        if ( aCommand.Find( KHsHFPATTestModeDes ) != KErrNotFound )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   131
            {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   132
            res = ECmdModeTest;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   133
            }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   134
        else if ( aCommand.Find( KHsHFPATReadModeDes ) != KErrNotFound )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   135
            {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   136
            res = ECmdModeRead;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   137
            }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   138
        else if ( aCommand.Find( KHsHFPATWriteModeDes ) != KErrNotFound )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   139
            {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   140
            res = ECmdModeWrite;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   141
            }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   142
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   143
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   144
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   145
    if ( res == ECmdUnknownMode )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   146
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   147
        User::Leave( KErrArgument );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   148
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   149
    TRACE_FUNC_EXIT
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   150
    return res;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   151
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   152
    }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   153
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   154
THsHFPCommandType CHsHFPParser::RetrieveTypeL( const TDesC8 &aCommand )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   155
    {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   156
    TRACE_FUNC_ENTRY
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   157
    THsHFPCommandType res = EHFPCmdUnknown;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   158
    if ( aCommand.Find( KHsHFPBRSFCommand ) != KErrNotFound )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   159
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   160
        res = EHFPCmdBRSF;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   161
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   162
    else if ( aCommand.Find( KHsHFPCHUPCommand ) != KErrNotFound )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   163
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   164
        res = EHFPCmdCHUP;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   165
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   166
    else if ( aCommand.Find( KHsHFPCIEVCommand ) != KErrNotFound )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   167
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   168
        res = EHFPCmdCIEV;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   169
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   170
    else if ( aCommand.Find( KHsHFPOKCommand ) != KErrNotFound )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   171
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   172
        res = EHFPCmdOK;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   173
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   174
    else if ( aCommand.Find( KHsHFPERRORCommand ) != KErrNotFound )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   175
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   176
        res = EHFPCmdERROR;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   177
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   178
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   179
    else if ( aCommand.Find( KHsHFPCINDCommand ) != KErrNotFound )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   180
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   181
        res = EHFPCmdCIND;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   182
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   183
    else if ( aCommand.Find( KHsHFPCMERCommand ) != KErrNotFound )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   184
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   185
        res = EHFPCmdCMER;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   186
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   187
    else if ( aCommand.Find( KHsHFPCOPSCommand ) != KErrNotFound )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   188
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   189
        res = EHFPCmdCOPS;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   190
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   191
    else if ( aCommand.Find( KHsHFPRINGCommand ) != KErrNotFound )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   192
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   193
        res = EHFPCmdRING;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   194
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   195
    else if ( aCommand.Find( KHsHFPATACommand ) != KErrNotFound )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   196
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   197
        res = EHFPCmdATA;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   198
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   199
    else if ( aCommand.Find( KHsHFPVGSCommand ) != KErrNotFound )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   200
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   201
        res = EHFPCmdVGS;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   202
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   203
    else if ( aCommand.Find( KHsHFPVGMCommand ) != KErrNotFound )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   204
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   205
        res = EHFPCmdVGM;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   206
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   207
    else if ( aCommand.Find( KHsHFPBLDNCommand ) != KErrNotFound )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   208
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   209
        res = EHFPCmdBLDN;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   210
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   211
    else if ( aCommand.Find( KHsHFPATDCommand ) != KErrNotFound )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   212
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   213
        res = EHFPCmdATD;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   214
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   215
    else if ( aCommand.Find( KHsHFPCLIPCommand ) != KErrNotFound )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   216
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   217
        res = EHFPCmdCLIP;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   218
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   219
    if ( res == EHFPCmdUnknown )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   220
        User::Leave( KErrArgument );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   221
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   222
    TRACE_FUNC_EXIT
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   223
    return res;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   224
    }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   225
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   226
void CHsHFPParser::RetrieveParamsL( const TDesC8 &aCommand,
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   227
        const THsHFPCommandMode aCmdMode, RATParamArray& aParams )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   228
    {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   229
    TRACE_FUNC_ENTRY
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   230
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   231
    RBuf8 buf;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   232
    buf.CreateL( aCommand );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   233
    buf.CleanupClosePushL();
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   234
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   235
    TInt prefixLength = 0;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   236
    TInt suffixLength = 0;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   237
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   238
    TInt modeLength = 0;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   239
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   240
    TInt leftOffset = 0;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   241
    TInt rightOffset = 0;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   242
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   243
    TInt startPos = 0;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   244
    TBool indicatorsFound = EFalse;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   245
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   246
    if ( buf.Find( KHsHFPIndicatorParamsSeparator ) != KErrNotFound )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   247
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   248
        indicatorsFound = ETrue;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   249
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   250
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   251
    if ( indicatorsFound )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   252
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   253
        prefixLength = 9;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   254
        suffixLength = 2;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   255
        rightOffset = 2;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   256
        leftOffset = 1;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   257
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   258
    else
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   259
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   260
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   261
        rightOffset = 1;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   262
        suffixLength = 2;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   263
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   264
        switch ( aCmdMode )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   265
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   266
            {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   267
            case ECmdModeTest:
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   268
                {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   269
                startPos = buf.Find( KHsHFPATTestModeDes );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   270
                modeLength = 2;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   271
                }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   272
                break;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   273
            case ECmdModeRead:
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   274
                {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   275
                startPos = buf.Find( KHsHFPATReadModeDes );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   276
                modeLength = 1;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   277
                }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   278
                break;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   279
            case ECmdModeWrite:
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   280
                {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   281
                startPos = buf.Find( KHsHFPATWriteModeDes );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   282
                modeLength = 1;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   283
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   284
                if ( startPos == KErrNotFound )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   285
                    {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   286
                    startPos = buf.Find( KHsHFPATWriteModeDesAG );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   287
                    modeLength = 2;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   288
                    }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   289
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   290
                }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   291
                break;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   292
            default:
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   293
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   294
                User::Leave( KErrArgument );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   295
                break;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   296
            }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   297
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   298
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   299
    if ( startPos != KErrNotFound )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   300
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   301
        //strip command's prefix
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   302
        buf.Delete( 0, prefixLength + startPos + modeLength );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   303
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   304
        //strip command's suffix
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   305
        buf.Delete( buf.Length() - suffixLength, suffixLength );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   306
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   307
    else
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   308
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   309
        User::Leave( KErrArgument );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   310
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   311
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   312
    while ( buf.Size() > 0 )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   313
        {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   314
        TInt pos = 0;
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   315
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   316
        if ( indicatorsFound )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   317
            {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   318
            pos = buf.Find( KHsHFPIndicatorParamsSeparator );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   319
            }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   320
        else
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   321
            {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   322
            pos = buf.Find( KHsHFPParamsSeparator );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   323
            }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   324
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   325
        if ( pos == KErrNotFound )
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   326
            {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   327
            aParams.AppendL( buf );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   328
            buf.Zero();
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   329
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   330
            }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   331
        else
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   332
            {
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   333
            TPtrC8 ptr = buf.Left( pos + leftOffset );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   334
            aParams.AppendL( ptr );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   335
            buf.Delete( 0, pos + rightOffset );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   336
            }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   337
        }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   338
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   339
    CleanupStack::PopAndDestroy( &buf );
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   340
    TRACE_FUNC_EXIT
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   341
    }
90dbfc0435e3 source code commit
michal.sulewski
parents:
diff changeset
   342