adaptationlayer/dataport/dataport_csy/src/dpparityhandler.cpp
changeset 0 63b37f68c1ce
child 5 8ccc39f9d787
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/adaptationlayer/dataport/dataport_csy/src/dpparityhandler.cpp	Fri Nov 06 17:28:23 2009 +0000
@@ -0,0 +1,252 @@
+/*
+* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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    "dpdef.h"                   // dataport definitions
+#include    "dpparityhandler.h"         // parity bit handling (7-bit data mode)
+#include    "dplog.h"                   // dataport logging
+#include "osttracedefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "dpparityhandlertraces.h"
+#endif
+
+
+// EXTERNAL DATA STRUCTURES
+// none
+
+// EXTERNAL FUNCTION PROTOTYPES
+// none
+
+// CONSTANTS
+// none
+
+// MACROS
+// none
+
+// LOCAL CONSTANTS AND MACROS
+// none
+
+// MODULE DATA STRUCTURES
+// none
+
+// LOCAL FUNCTION PROTOTYPES
+// none
+
+// FORWARD DECLARATIONS
+// none
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+// none
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CDpParityHandler::CDpParityHandler
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CDpParityHandler::CDpParityHandler()
+    {
+    OstTrace0( TRACE_NORMAL, CDPPARITYHANDLER_CDPPARITYHANDLER, "CDpParityHandler::CDpParityHandler" );
+    LOGM("CDpParityHandler::CDpParityHandler");
+
+    // Generate lookuptable which is used to find out right parity
+    // (Even, Odd, Space, Mark)in 7-bit data mode
+    GenerateLookupTable();
+    }
+
+// -----------------------------------------------------------------------------
+// CDpParityHandler::~CDpParityHandler
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CDpParityHandler::~CDpParityHandler()
+    {
+    OstTrace0( TRACE_NORMAL, DUP1_CDPPARITYHANDLER_CDPPARITYHANDLER, "CDpParityHandler::~CDpParityHandler" );
+    LOGM("CDpParityHandler::~CDpParityHandler");
+    }
+
+// -----------------------------------------------------------------------------
+// CDpParityHandler::GenerateLookupTable
+// Generates lookup table to get different parity bits.
+// -----------------------------------------------------------------------------
+//
+void CDpParityHandler::GenerateLookupTable()
+    {
+    OstTrace0( TRACE_NORMAL, CDPPARITYHANDLER_GENERATELOOKUPTABLE, "CDpParityHandler::GenerateLookupTable" );
+    LOGM("CDpParityHandler::GenerateLookupTable");
+
+    TUint8 mask( 0x1 );
+    TInt count( 0 );
+
+    for ( TUint8 s( 0 ); s < KDpParityTableSize; s++ )
+        {
+        mask = 0x1;
+        count = 0;
+        for ( TInt i( 0 ); i < 8; i++ )
+            {
+            if ( 0 != ( s & mask ) )
+                {
+                count++;
+                }
+            //no else
+            mask = static_cast<TUint8>( mask << 1 );
+            }
+
+        if ( 0 == count%2 )
+            {
+            //even
+            iTable[s][0] = s;                                 //parity 0
+            //odd
+            iTable[s][1] = static_cast<TUint8>( s | 0x80 );   //parity 1
+            //space
+            iTable[s][2] = s;                                 //parity 0
+            //mark
+            iTable[s][3] = static_cast<TUint8>( s | 0x80 );   //parity 1
+            }
+        else
+            {
+            //even
+            iTable[s][0] = static_cast<TUint8>( s | 0x80 );   //parity 1
+            //odd
+            iTable[s][1] = s;                                 //parity 0
+            //space
+            iTable[s][2] = s;                                 //parity 0
+            //mark
+            iTable[s][3] = static_cast<TUint8>( s | 0x80 );   //parity 1
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CDpParityHandler::AddParityBits
+// Add paritybits to descriptor given as parameter.
+// -----------------------------------------------------------------------------
+//
+TInt CDpParityHandler::AddParityBits(
+    TPtr8& aDes,
+    const TParity aParity )
+    {
+    OstTrace0( TRACE_NORMAL, CDPPARITYHANDLER_ADDPARITYBITS, "CDpParityHandler::AddParityBits" );
+    LOGM("CDpParityHandler::AddParityBits");
+
+    TInt len( aDes.Length() );
+    TInt i( 0 );
+    TUint8 mask( 0x7F );
+    TInt ret( KErrNone );
+
+    // empty descriptor
+    if ( len == 0 )
+        {
+        ret = KErrNotFound;
+        }
+    else
+        {
+        switch ( aParity )
+            {
+            case EParityEven:
+                {
+                for( i = 0; i < len; i++ )
+                    {
+                    aDes[i] = Even( static_cast<TUint8>( aDes[i] & mask ) );
+                    }
+                break;
+                }
+            case EParityOdd:
+                {
+                for( i = 0; i < len; i++ )
+                    {
+                    aDes[i] = Odd( static_cast<TUint8>( aDes[i] & mask ) );
+                    }
+                break;
+                }
+            case EParityMark:
+                {
+                for( i = 0; i < len; i++ )
+                    {
+                    aDes[i] = Mark( static_cast<TUint8>( aDes[i] & mask ) );
+                    }
+                break;
+                }
+            case EParitySpace:
+                {
+                for( i = 0; i < len; i++ )
+                    {
+                    aDes[i] = Space( static_cast<TUint8>( aDes[i] & mask ) );
+                    }
+                break;
+                }
+            case EParityNone:
+                {
+                //none
+                break;
+                }
+            default:
+                {
+                //none
+                break;
+                }
+            }
+        }
+
+    return ret;
+    }
+
+// -----------------------------------------------------------------------------
+// CDpParityHandler::ExtractParityBits
+// Extract parity bits from descriptor given as parameter.
+// We do not check, whether parity is right or wrong.
+// GSM error correction is enough.
+// -----------------------------------------------------------------------------
+//
+TInt CDpParityHandler::ExtractParityBits(
+    TPtr8& aDes )
+    {
+    OstTrace0( TRACE_NORMAL, CDPPARITYHANDLER_EXTRACTPARITYBITS, "CDpParityHandler::ExtractParityBits" );
+    LOGM("CDpParityHandler::ExtractParityBits");
+
+    TInt len( aDes.Length() );
+    TUint8 mask( 0x7F );
+    TInt ret( KErrNone );
+
+    // empty descriptor
+    if ( 0 == len )
+        {
+        ret = KErrNotFound;
+        }
+    else
+        {
+        for ( TInt i( 0 ); i < len; i++ )
+            {
+            // extract parity bit
+            aDes[i] = static_cast<TUint8>( aDes[i] & mask );
+            }
+        }
+
+    return ret;
+    }
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+
+// none
+
+//  End of File