diff -r 000000000000 -r 3ce708148e4d pnpmobileservices/pnpms/OnlineSupport/inc/VersionStrings.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pnpmobileservices/pnpms/OnlineSupport/inc/VersionStrings.h Thu Dec 17 08:40:12 2009 +0200 @@ -0,0 +1,197 @@ +/* +* Copyright (c) 2005-2006 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: A helper class for reading Series 60 and Symbian OS versions +* +*/ + + + +#ifndef VERSION_STRINGS_H +#define VERSION_STRINGS_H + +// INCLUDES +#include +#include + +#include "OnlineSupportLogger.h" + +// CONSTANTS +const TInt KMaxVersionBufLength(10); + +// MACROS +// None + +// DATA TYPES +typedef TBuf8 TVersionBuf; + +// FUNCTION PROTOTYPES +// None + +// FORWARD DECLARATIONS +// None + +// CLASS DECLARATION + +/** +* CMiniBrowser class +* +* @since 3.1? +*/ +class TVersionStrings + { +public: + /*! + Get the beging index and length of a token in the descriptor. + @param aDescriptor + @param aSeparator Token separator, for example 0xA for a line feed. + @param aToken The token number, zero is the index of the first token. + @param aMaxLength The maximum length of the token. If the token length is bigger + than aMaxLength the function leaves with KErrTooBig. Give KErrNotFound + to not to check the maximum length. + @param aBegin On return contains the begin index of the token. + The value is unspecified if the function leaves. + @param aLength On return contains the length of the token. + The value is unspecified if the function leaves. + */ + static void TokenLocationL( + const TDesC& aDescriptor, const TChar aSeparator, const TInt aToken, + const TInt aMaxLength, TInt& aBegin, TInt& aLength ) + { + LOGSTRING( "TokenLocationL" ); + + TInt locate = aDescriptor.Locate( aSeparator ); + if( locate == KErrNotFound ) + { + User::Leave( KErrNotFound ); + } + + if( aToken ) + { + // not the last row + TokenLocationL( aDescriptor.Right( aDescriptor.Length() - locate - 1 ), + aSeparator, aToken - 1, aMaxLength, aBegin, aLength ); + aBegin = aBegin + locate + 1; + } + else + { + if( aMaxLength != KErrNotFound && locate > aMaxLength ) + { + User::Leave( KErrTooBig ); + } + // the last row + aBegin = 0; + aLength = locate; + } + LOGSTRING( "TokenLocationL - done" ); + }; + + /*! + Gives Series 60 version and SymbianOS version based on product model. + Leaves with KErrCorrupt if the version strings could not be read. + @aS60Version On return contains Series 60 version, for example 2.6 + @aSymbianVersion On return contains Symbian OS version, for example 8.1 + */ + static void GetUserAgentVersionsL( TVersionBuf& aS60Version, TVersionBuf& aSymbianVersion ) + { + LOGSTRING( "GetUserAgentVersionsL" ); + + TBuf versions; + TInt err = SysUtil::GetSWVersion( versions ); + if( err != KErrNone ) + { + User::Leave( KErrCorrupt ); + } + LOGSTRING( "SW:" ); + LOGTEXT( versions ); + + + const TChar lineFeedChar( 0xA ); + TInt begin(0); + TInt len(0); + // Since the Series 60 3.0 the Series 60 version is assumed to be in the SW version string + TRAP( err, TVersionStrings::TokenLocationL( versions, lineFeedChar, 2, + aS60Version.MaxLength(), begin, len ) ); + if( err != KErrNone ) + { + User::Leave( KErrCorrupt ); + } + aS60Version.Copy( versions.Mid( begin, len ) ); + + GetSymbianOsVersionL( aS60Version, aSymbianVersion ); + LOGSTRING( "S60:" ); + LOGTEXT( aS60Version ); + LOGSTRING( "Symbian OS:" ); + LOGTEXT( aSymbianVersion ); + LOGSTRING( "GetUserAgentVersionsL - done" ); + } + + /*! + Gives Series 60 version and SymbianOS version based on product model. + @aProduct Product, for example RM-1. + @aS60Version Series 60 version, for example 2.6 + @aSymbianVersion On return contains Symbian OS version, for example 8.1 + */ + static void GetSymbianOsVersionL( const TDesC8& aS60Version, TVersionBuf& aSymbianVersion ) + { + _LIT8( KSeries6020, "2.0"); + _LIT8( KSeries6021, "2.1"); + _LIT8( KSeries6026, "2.6"); + _LIT8( KSeries6026m, "2.6m"); + _LIT8( KSeries6028, "2.8"); + _LIT8( KSeries6030, "S60-30"); + _LIT8( KSeries6031, "S60-31"); + _LIT8( KSeries6040, "S60-40"); + + _LIT8( KSymbianOS70s, "7.0s"); + _LIT8( KSymbianOS80a, "8.0a"); + _LIT8( KSymbianOS81a, "8.1a"); + _LIT8( KSymbianOS91, "9.1"); + _LIT8( KSymbianOS92, "9.2"); + _LIT8( KSymbianOS9x, "9.x"); + + if( aS60Version.Compare( KSeries6040 ) == 0 ) + { + aSymbianVersion.Copy( KSymbianOS9x ); + } + else if( aS60Version.Compare( KSeries6031 ) == 0 ) + { + aSymbianVersion.Copy( KSymbianOS92 ); + } + else if( aS60Version.Compare( KSeries6030 ) == 0 ) + { + aSymbianVersion.Copy( KSymbianOS91 ); + } + else if( aS60Version.Compare( KSeries6028 ) == 0 ) + { + aSymbianVersion.Copy( KSymbianOS81a ); + } + else if( aS60Version.Compare( KSeries6026 ) == 0 || aS60Version.Compare( KSeries6026m ) == 0 ) + { + aSymbianVersion.Copy( KSymbianOS80a ); + } + else if( aS60Version.Compare( KSeries6021 ) == 0 || aS60Version.Compare( KSeries6020 ) == 0 ) + { + aSymbianVersion.Copy( KSymbianOS70s ); + } + else + { + User::Leave( KErrNotFound ); + } + }; + + }; + +#endif // VERSION_STRINGS_H + +// End of File