diff -r 000000000000 -r f63038272f30 bluetoothengine/btmac/common/atcodec.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btmac/common/atcodec.h Mon Jan 18 20:28:57 2010 +0200 @@ -0,0 +1,333 @@ +/* +* Copyright (c) 2005 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: Parses/Encodes AT ccommands. +* +*/ + + +#ifndef AT_CODEC_H +#define AT_CODEC_H + +// INCLUDES +#include + +enum TATId + { + EUnknownAT,// 0 Not known AT command + EAT, // 1, AT test command + EATA, // 2, answer a call + EATBINP, // 3, Command used for requesting some specific data input from the AG + EATBLDN, // 4, Command used for calling the last phone number dialed + EATBRSF, // 5, Bluetooth Retrieve Supported Features + EATBVRA, // 6, Bluetooth Voice Recognition Activation + EATCCWA, // 7, call waiting notification + EATCHLD, // 8, multiparty handling AT command + EATCHUP, // 9, Hang-up AT command + EATCIND, // 10, standard indicator update AT command (read and test only) + EATCKPD, // 11, Command issued by HS to indicate that the button has been pressed + EATCLCC, // 12, list of current call + EATCLIP, // 13, standard Calling Line Identification notification activation AT command + EATCMEE, // 14, Advanced error code activation + EATCMER, // 15, Standard event reporting activation AT command + EATCNUM, // 16, Subscriber number + EATCOPS, // 17, Operator selection + EATD1, // 18, place a call + EATD2, // 19, speed dial + EATNREC, // 20, Noise Reduction and Echo Canceling + EATVGM, // 21, Microphone volume + EATVGS, // 22, Speaker volume + EATVTS, // 23, Standard DTMF generation AT command + EATCIEV, // 24, notify call status change + EATERROR, // 25, Response Error + EATOK, // 26, Response OK + EATRING, // 27, RING unsolicited response + EATBIA, // 28, Set indicator status + EATCREG, // 29, Network registration + EATCGSN, // 30, Serial Number + EATCSQ, // 31, Signal Strength in dBm + EATCIMI, // 32, Mobile subscriber ID + EATCGMI, // 33, Manufacturer information + EATCGMM, // 34, Model id + EATCGMR, // 35, Revision id + EATCOLP, // 36, Outgoin call number + EMinValidATIdRange = EAT, + EMaxValidATIdRange = EATCOLP, + }; + +enum TATType + { + EATUnkownType = 0, + EATReadCmd = 0x001, // 1, Read format "AT+xxxx?" + EATWriteCmd = 0x002, // 2, Write format "AT+xxxx=1" + EATActionCmd = 0x004, // 4, Action format "AT+xxxx" or "ATx" (e.g. "ATD") + EATTestCmd = 0x008, // 8, Test command "AT+xxxx=?" and "AT" + EATReadResult = 0x010, // 16, Response to read command + EATWriteResult = 0x020, // 32, Response to write command + EATActionResult = 0x040, // 64, Response to action command + EATTestResult = 0x080, // 128, Response to test command + EATUnsolicitedResult = 0x100, // 256, Unsolicited result code + EATErrorResult = 0x200 // 512, error result, OK or ERROR + }; + +enum TATParamType + { + EATNullParam, + EATStringParam, + EATDQStringParam, + EATIntParam + }; + +const TInt KMaxATSize = 512; +const TInt KMaxATParamSize = 256; + +class RReadStream; +class RWriteStream; + +// CLASS DECLARATION +/** +* TATParam represents one AT command parameter. +*/ +NONSHARABLE_CLASS(TATParam) + { +public: + IMPORT_C TATParam(); + + IMPORT_C TATParam(const TDesC8& aValue, TATParamType aType = EATStringParam); + + IMPORT_C TATParam(TInt aValue); + + /** + * Returns the parameter as integer. + * @since 3.0 + * @return error code. + */ + IMPORT_C TInt Int(TInt& aValue) const; + + /** + * Returns the parameter as text. + * @since 3.0 + * @return the non-modifiable pointer descriptor + */ + IMPORT_C const TDesC8& Des() const; + + /** + * Returns the parameter type. + * @since 3.0 + * @param None + * @return Parameter type. + */ + IMPORT_C TATParamType Type() const; + + /** + * Sets the parameter value. + * @since 3.0 + * @param aValue New value. + * @return error code + */ + IMPORT_C TInt SetValue(const TDesC8& aValue, TATParamType aType); + + /** + * Sets the parameter value. + * @since 3.0 + * @param aValue New value. + * @return None + */ + IMPORT_C void SetInt(TInt aValue); + + IMPORT_C void ExternalizeL(RWriteStream& aStream) const; + + IMPORT_C void InternalizeL(RReadStream& aStream); + +private: + void AddDQ(); + +private: + TBuf8 iValue; + TInt iValueInt; + TATParamType iType; + +private: + static const TInt32 KStreamVersion1 = 0x00000001; + }; + +typedef RArray RATParamArray; + +/** +* TATCommand is used for parsing Bluetooth AT commands. +*/ +NONSHARABLE_CLASS(CATBase) : public CBase + { +public: + IMPORT_C virtual ~CATBase(); + + /** + * Returns AT command identification. + * @since 3.0 + * @param None + * @return Id number. + */ + IMPORT_C TATId Id() const; + + /** + * Returns AT command type. + * @since 3.0 + * @param None + * @return Command type. + */ + IMPORT_C TATType Type() const; + + /** + * Returns the number of command parameters. + * @since 3.0 + * @param None + * @return Number of command paramteres. + */ + IMPORT_C TInt ParamNum() const; + + /** + * Returns parameter at given index. + * @since 3.0 + * @param aIndex Index. + * @return the parameter. + */ + IMPORT_C TInt Parameter(TInt aIndex, TATParam& aParam) const; + + /** + * Returns parameters in a string. + * @since 3.0 + * @return the parameter list. + */ + IMPORT_C const RATParamArray& Parameters() const; + + /** + * Gets the descriptor of this AT command or response. + */ + IMPORT_C const TDesC8& Des() const; + + IMPORT_C void ExternalizeL(RWriteStream& aStream) const; + + IMPORT_C void InternalizeL(RReadStream& aStream); + +protected: + CATBase(); + + void Reset(); + +protected: + RBuf8 iText; + TATId iId; + TATType iType; + RATParamArray iParamList; + +private: + static const TInt32 KStreamVersion1 = 0x00000001; + }; + +/** +* TATCommand is used for parsing Bluetooth AT commands. +*/ +NONSHARABLE_CLASS(CATCommand) : public CATBase + { +public: + /** + * Instantiates an uninitialized AT command. + */ + IMPORT_C static CATCommand* NewL(); + + /** + * Instantiates an uninitialized AT command and leaves it in cleanupstack. + */ + IMPORT_C static CATCommand* NewLC(); + + /** + * Instantiates an AT command. + * Function leaves if aCmd is not supported or not valid. + */ + IMPORT_C static CATCommand* NewL(const TDesC8& aCmd); + + /** + * Instantiates an AT command and leaves it in cleanupstack. + * Function leaves if aCmd is not supported or not valid. + */ + IMPORT_C static CATCommand* NewLC(const TDesC8& aCmd); + + /** + * + * @since 3.0 + * @param aText Command string + * @return + */ + IMPORT_C TInt Set(const TDesC8& aText); + +private: + CATCommand(); + + TInt Parse(const TDesC8& aText); + + void ParseCommandType(TPtrC8& aPtrC); + + TInt ParseParams(TPtrC8& aDes, TUint aParamIndex, TUint aTableIndex); + }; + +/** +* TATCommand is used for parsing Bluetooth AT commands. +*/ +NONSHARABLE_CLASS(CATResult) : public CATBase + { +public: + /** + * Instantiates an uninitialized AT command. + */ + IMPORT_C static CATResult* NewL(); + + /** + * Instantiates an uninitialized AT command and leaves it in cleanupstack. + */ + IMPORT_C static CATResult* NewLC(); + + IMPORT_C static CATResult* NewL(TATId aId, TATType aType = EATErrorResult, const RATParamArray* aParams = NULL); + + IMPORT_C static CATResult* NewLC(TATId aId, TATType aType = EATErrorResult, const RATParamArray* aParams = NULL); + + IMPORT_C static CATResult* NewL(TATId aId, TATType aType, const TATParam aParam); + + IMPORT_C static CATResult* NewLC(TATId aId, TATType aType, const TATParam aParam); + + /** + * + */ + IMPORT_C TInt Set(TATId aId, TATType aType = EATErrorResult, const RATParamArray* aParams = NULL); + +private: + CATResult(); + + TInt Parse(TATId aId, TATType aType, const RATParamArray* aParams); + + /** + * Adds carriage return and line feed characters at + * the beginning and the end of the string. + * @since 3.0 + * @param aText String to be modified. + * @return None + */ + static TInt AddCRLF(TDes8& aText); + }; + +typedef RPointerArray RATResultPtrArray; + +IMPORT_C void ATObjArrayCleanupResetAndDestroyPushL(RATResultPtrArray& aArray); + +#endif // AT_CODEC_H + +// End of File