cbsatplugin/atmisccmdplugin/inc/atcommandparser.h
branchRCL_3
changeset 16 b23265fb36da
child 32 19bd632b5100
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cbsatplugin/atmisccmdplugin/inc/atcommandparser.h	Tue Apr 27 16:49:44 2010 +0300
@@ -0,0 +1,120 @@
+// Copyright (c) 2010 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:
+// This file contains the implementation of the AT command parser and common utilities
+// 
+//
+
+#ifndef ATCOMMANDPARSER_H
+#define ATCOMMANDPARSER_H
+
+#include <e32std.h>
+
+
+/**
+ *  This class parses a given AT command into command type, command handler type and parameters.
+ * 
+ */
+NONSHARABLE_CLASS(TAtCommandParser)
+    {
+public:
+    /**
+     * AT command handler type which determines how the command is interpreted.
+     */
+    enum TCommandHandlerType
+        {
+        ECmdHandlerTypeUndefined = KErrNotFound,
+        ECmdHandlerTypeBase      = 0x01,  // For command "AT+COMMAND"
+        ECmdHandlerTypeSet       = 0x02,  // For command "AT+COMMAND="
+        ECmdHandlerTypeRead      = 0x04,  // For command "AT+COMMAND?"
+        ECmdHandlerTypeTest      = 0x08,  // For command "AT+COMMAND=?"
+        };
+    
+    /**
+     * Extended AT commands supported by this parser.
+     */
+    enum TCommandType
+        {
+        EUnknown = KErrNotFound,
+        ECmdAtCfun = 0,
+        ECmdAtCbc,
+        ECmdAtClck,
+        ECmdAtCpwd,
+        ECmdAtCpin,
+        ECmdAtCusd,
+        ECmdAtCnum
+        };
+public:
+    TAtCommandParser();
+    
+    /**
+     * @param aCmd AT command to be parsed
+     */
+    TAtCommandParser(const TDesC8& aCmd);
+    
+    /**
+     * Parse a new AT command. Previously parsed AT command is lost.
+     * @param aCmd AT command to be parsed
+     */
+    void ParseAtCommand(const TDesC8& aCmd);
+    
+    /**
+     * @return AT command type @see CAtCommandParser::TCommandType 
+     */
+    TCommandType Command() const;
+    
+    /**
+     * @return AT Command handler type @see CAtCommandParser::TCommandHandlerType
+     */
+    TCommandHandlerType CommandHandlerType() const;
+    
+    /**
+     * @return Next available parameter. KNullDesC8 if no more parameters.
+     */
+    TPtrC8 NextParam();
+    
+    /**
+     * Gets the integer value of the next parameter.
+     * 
+     * @param aValue the integer value of the parameter
+     * @return Symbian system wide error codes
+     */
+    TInt NextIntParam(TInt& aValue);
+    
+    /**
+     * Get the next text string without quote.
+     * This function validate the parameter is a valid string.
+     * if the parameter is absent, it returns KErrNotFound.
+     * if the parameter is an invalid string such as not in a pair of double quotes, it returns KErrArgument
+     * @param aError return the error code. 
+     * @return Next text parameter when aError is not KErrNone; 
+     */
+    TPtrC8 NextTextParam(TInt& aError);
+
+    /**
+     * Get ISA hash code for security code
+     * Phone lock code is encoded by using ISA hash. This hash algorithm is implemented in remotemgmt component
+     * This function is copied and modified from CSCPServer::HashISACode()
+     * @param aPasscode passcode to be encoded
+     * @param aHashCode encoded output
+     * @return Symbian system wide error codes
+     */
+    TInt HashSecurityCode(const TDesC8& aPasscode, TDes8& aHashCode);
+    
+private:
+    TLex8 iCmd;
+    TCommandType iCmdType;
+    TCommandHandlerType iCmdHandlerType;
+    };
+
+#endif // ATCOMMANDPARSER_H