resourcemgmt/hwresourcesmgr/server/src/HWRMFmTxRdsTextConverter.cpp
changeset 0 4e1aa6a622a0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/resourcemgmt/hwresourcesmgr/server/src/HWRMFmTxRdsTextConverter.cpp	Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,176 @@
+// Copyright (c) 2006-2009 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:
+//
+
+
+
+// INCLUDE FILES
+#include "HWRMFmTxRdsTextConverter.h"
+#include "HWRMPolicy.h"
+#include "HWRMtrace.h"
+
+// CONSTANTS
+_LIT( KConvertFromUnicodeFileName, "ConvertFromUnicode.dat" );
+
+const TUint8 KUnmappedRdsChar = 0xFF;
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CHWRMFmTxRdsTextConverter::CHWRMFmTxRdsTextConverter
+// C++ constructor
+// -----------------------------------------------------------------------------
+//
+CHWRMFmTxRdsTextConverter::CHWRMFmTxRdsTextConverter()
+    {
+    COMPONENT_TRACE1( _L( "HWRM Server - CHWRMFmTxRdsTextConverter::CHWRMFmTxRdsTextConverter()" ) );
+    }
+
+// -----------------------------------------------------------------------------
+// CHWRMFmTxRdsTextConverter::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CHWRMFmTxRdsTextConverter::ConstructL()
+    {    
+    COMPONENT_TRACE1( _L( "HWRM Server - CHWRMFmTxRdsTextConverter::ConstructL()" ) );
+
+    // Open conversion table file
+    User::LeaveIfError( iFileServer.Connect() );    
+
+    TFileName conversionTableFilename;
+    User::LeaveIfError( iFileServer.PrivatePath( conversionTableFilename ) ); // Private-folder of HWRM
+    conversionTableFilename.Insert(0, KDrivename); // "Z:"
+    conversionTableFilename.Append( KConvertFromUnicodeFileName ); // Actual filename
+    
+    COMPONENT_TRACE2( _L( "HWRM Server - CHWRMFmTxRdsTextConverter::ConstructL(), RFile::Open(%S)" ), &conversionTableFilename );
+    User::LeaveIfError( iConvertFromUnicodeFile.Open( iFileServer, conversionTableFilename, EFileRead) );   
+
+    // Read from conversion table file
+    COMPONENT_TRACE1( _L( "HWRM Server - CHWRMFmTxRdsTextConverter::ConstructL() RFile::Read" ) );
+    User::LeaveIfError( iConvertFromUnicodeFile.Read(iConvertFromUnicodeTable) );
+
+    if ( iConvertFromUnicodeTable.Length() != KConvertFromTableLength )
+        {
+        COMPONENT_TRACE2( _L( "HWRM Server - CHWRMFmTxRdsTextConverter::ConstructL - invalid table length %d "), iConvertFromUnicodeTable.Length() );
+        User::Leave( KErrNotReady );
+        }
+
+    // Default value.  Should be overwritten with CenRep setting
+    SetUnsupportedCharReplacement( 0x3F /* Question Mark ? symbol */ );
+
+    COMPONENT_TRACE1( _L( "HWRM Server - CHWRMFmTxRdsTextConverter::ConstructL - return " ) );
+    }
+
+// -----------------------------------------------------------------------------
+// CHWRMFmTxRdsTextConverter::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CHWRMFmTxRdsTextConverter* CHWRMFmTxRdsTextConverter::NewL()
+    {
+    COMPONENT_TRACE1( _L( "HWRM Server - CHWRMFmTxRdsTextConverter::NewL()" ) );
+
+    CHWRMFmTxRdsTextConverter* self = new( ELeave ) CHWRMFmTxRdsTextConverter();
+    
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+
+    COMPONENT_TRACE2( _L( "HWRM Server - CHWRMFmTxRdsTextConverter::NewL - return 0x%x" ), self );
+    
+    return self;
+    }
+   
+// ---------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------
+//
+CHWRMFmTxRdsTextConverter::~CHWRMFmTxRdsTextConverter()
+    {
+    COMPONENT_TRACE1( _L( "HWRM Server - CHWRMFmTxRdsTextConverter::~CHWRMFmTxRdsTextConverter()" ) );
+
+    iFileServer.Close();
+
+    COMPONENT_TRACE1( _L( "HWRM Server - CHWRMFmTxRdsTextConverter::~CHWRMFmTxRdsTextConverter - return" ) );
+    }
+
+// ---------------------------------------------------------
+// CHWRMFmTxRdsTextConverter::ConvertFromUnicodeL
+// Converts a unicode descriptor into 8bit RDS format
+// All input characters must be within U+0000 -> U+024F range
+// ---------------------------------------------------------
+//
+void CHWRMFmTxRdsTextConverter::ConvertFromUnicodeL(const TDesC& aInput, TDes8& aOutput)
+    {
+    COMPONENT_TRACE2( _L( "HWRM Server - CHWRMFmTxRdsTextConverter::ConvertFromUnicodeL(%S)" ), &aInput );
+    
+    // empty output buffer
+    aOutput.Zero();
+
+    TInt inputLength = aInput.Length();
+    // convert each character from input buffer
+    for (TInt inputIndex=0; inputIndex < inputLength; inputIndex++)
+        {
+        // get input buffer values to index conversion table
+        TUint tableIndex = aInput[inputIndex];
+        COMPONENT_TRACE3( _L( "HWRM Server - CHWRMFmTxRdsTextConverter::ConvertFromUnicodeL aInput[%d] = 0x%x" ), inputIndex, tableIndex );
+        if ( tableIndex >= KConvertFromTableLength )
+            {
+            COMPONENT_TRACE1( _L( "HWRM Server - CHWRMFmTxRdsTextConverter::ConvertFromUnicodeL() aInput outside valid range" ) );
+            aOutput.Zero();
+            User::Leave(KErrArgument);
+            }
+
+        // convert into 8bit RDS value
+        TUint8 value = iConvertFromUnicodeTable[ tableIndex ];      
+        if ( SupportedCharacter(value) == EFalse )
+            {
+            COMPONENT_TRACE1( _L( "HWRM Server - CHWRMFmTxRdsTextConverter::ConvertFromUnicodeL() using replacement char" ) );
+            value = iUnsupportedCharReplacement;
+            }
+
+        COMPONENT_TRACE2( _L( "HWRM Server - CHWRMFmTxRdsTextConverter::ConvertFromUnicodeL() appending 0x%x" ), value );
+        aOutput.Append( (TChar)value );
+        }
+
+    COMPONENT_TRACE1( _L( "HWRM Server - CHWRMFmTxRdsTextConverter::ConvertFromUnicodeL - return" ) );
+    }
+
+// ---------------------------------------------------------
+// CHWRMFmTxRdsTextConverter::SetUnsupportedCharReplacement
+// Sets the character used, to replace unsupported characters
+// ---------------------------------------------------------
+//
+void CHWRMFmTxRdsTextConverter::SetUnsupportedCharReplacement(const TText8 aChar)
+    {
+    COMPONENT_TRACE2( _L( "HWRM Server - CHWRMFmTxRdsTextConverter::SetUnsupportedCharReplacement(0x%x)" ), aChar );
+
+    iUnsupportedCharReplacement = aChar;
+    }
+
+// ---------------------------------------------------------
+// CHWRMFmTxRdsTextConverter::SupportedCharacter
+// Returns whether a character returned by the conversion 
+// table is actually supported
+// ---------------------------------------------------------
+//  
+TBool CHWRMFmTxRdsTextConverter::SupportedCharacter( TUint8 aChar )
+    {
+    return (aChar < KUnmappedRdsChar);
+    }
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+
+//  End of File