adaptationlayer/tsy/nokiatsy_dll/src/cmmstaticutility.cpp
changeset 5 8ccc39f9d787
parent 0 63b37f68c1ce
child 7 fa67e03b87df
--- a/adaptationlayer/tsy/nokiatsy_dll/src/cmmstaticutility.cpp	Mon Nov 09 10:36:19 2009 +0000
+++ b/adaptationlayer/tsy/nokiatsy_dll/src/cmmstaticutility.cpp	Thu Jan 14 10:44:58 2010 +0200
@@ -39,9 +39,9 @@
 #include <in_sock.h>
 #include <f32file.h>
 
-#include "osttracedefinitions.h"
+#include "OstTraceDefinitions.h"
 #ifdef OST_TRACE_COMPILER_IN_USE
-#include "cmmstaticutilitytraces.h"
+#include "cmmstaticutilityTraces.h"
 #endif
 
 #include "cmmuiccmesshandler.h"
@@ -3352,6 +3352,807 @@
     return ret;
     }
 
+
+
+// -----------------------------------------------------------------------------
+// CMmStaticUtility::ConvertUcs2ToGsmUcs2Data
+// Convert data to UCS2 format. See ETSI TS 102.221 Annex A
+// -----------------------------------------------------------------------------
+//
+void CMmStaticUtility::ConvertUcs2ToGsmUcs2Data(
+    TDesC16& aInputString,
+    TDes8& aGsmDataString )
+    {
+TFLOGSTRING("TSY: CMmStaticUtility::ConvertUcs2ToGsmData");
+OstTrace0( TRACE_NORMAL, CMMSTATICUTILITY_CONVERTUCS2TOGSMDATA, "CMmStaticUtility::ConvertUcs2ToGsmData" );
+
+    if ( 0 < aInputString.Length() )
+        {
+        // Check if there is any GSM default alphabet
+        if( GetCodingScheme( aInputString ))
+            {
+            // Store as one of the UCS2 Coding scheme
+            // Append the GSM data with 0x80
+            aGsmDataString.Append( 0x80 );
+            for( TInt count = 0; count < aInputString.Length(); count++)
+                {
+                // get MSB Byte in the first place
+                aGsmDataString.Append( aInputString[count]>>8);
+                aGsmDataString.Append( aInputString[count] );
+                }
+            }  // End of check the encoding type
+        else
+            {
+            // Store string in GSM default coding scheme
+            for( TInt count = 0; count < aInputString.Length(); count++)
+                {
+                // get the GSM defalut Character for UCS character
+                TUint8 gsmChar = GetGsmForUnicode( aInputString[count] );
+                if( gsmChar > 0x7F )
+                    {
+                    aGsmDataString.Append( 0x1B );
+                    }
+                aGsmDataString.Append(gsmChar & 0x7F);
+                }
+            // Append 0xFF for End of the String
+            aGsmDataString.Append( 0xFF );
+            }
+        }   // End of if there is no Input String
+    } // End of function
+
+
+// -----------------------------------------------------------------------------
+// CMmStaticUtility::GetCodingScheme
+// GEt the Coding scheme GSM default or UCS2
+// -----------------------------------------------------------------------------
+//
+TBool CMmStaticUtility::GetCodingScheme( TDesC16& aInputString )
+    {
+    TFLOGSTRING("TSY: CMmStaticUtility::GetCodingScheme");
+    OstTrace0( TRACE_NORMAL, CMMSTATICUTILITY_GETCODINGSCHEME, "CMmStaticUtility::GetCodingScheme" );
+    TInt ret ( ETrue );
+    TInt count(0);
+    
+    while( count < aInputString.Length() )
+        {
+        TUint16 unicodeChar = aInputString[count];
+        TUint8 gsmCode = GetGsmForUnicode( unicodeChar );
+        if( gsmCode > 0x80 )
+            {
+            ret = EFalse;
+            }
+        count++;
+        }
+    return ret;
+    
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// CMmStaticUtility::GetGsmForUnicode
+// convert from Unicode character to GSM unicode character
+// -----------------------------------------------------------------------------
+//
+TUint8 CMmStaticUtility::GetGsmForUnicode( TUint16 aUniCode )
+    {
+    TUint8 ret ( 0 );
+    switch ( aUniCode )
+        {
+        case 0x0040:
+            {
+            ret = 0x00;
+            break;
+            }
+        case 0x00A3:
+            {
+            ret = 0x01;
+            break;
+            }
+        case 0x0024:
+            {
+            ret = 0x02;
+            break;
+            }
+        case 0x00A5:
+            {
+            ret = 0x03;
+            break;
+            }
+        case 0x00E8:
+            {
+            ret = 0x04;
+            break;
+            }
+        case 0x00E9:
+            {
+            ret = 0x05;
+            break;
+            }
+        case 0x00F9:
+            {
+            ret = 0x06;
+            break;
+            };
+        case 0x00EC:
+            {
+            ret = 0x07;
+            break;
+            }
+        case 0x00F2:
+            {
+            ret = 0x08;
+            break;
+            }
+        case 0x00C7:
+            {
+            ret = 0x09;
+            break;
+            }
+        case 0x000A:
+            {
+            ret = 0x0A;
+            break;
+            }
+        case 0x00D8:
+            {
+            ret = 0x0B;
+            break;
+            }
+        case 0x00F8:
+            {
+            ret = 0x0C;
+            break;
+            }
+        case 0x000D:
+            {
+            ret = 0x0D;
+            break;
+            }
+        case 0x00C5:
+            {
+            ret = 0x0E;
+            break;
+            }
+        case 0x00E5:
+            {
+            ret = 0x0F;
+            break;
+            }
+        case 0x0394:
+            {
+            ret = 0x10;
+            break;
+            }
+        case 0x005F:
+            {
+            ret = 0x11;
+            break;
+            }
+        case 0x03A6:
+            {
+            ret = 0x12;
+            break;
+            }
+        case 0x0393:
+            {
+            ret = 0x13;
+            break;
+            }
+        case 0x039B:
+            {
+            ret = 0x14;
+            break;
+            }
+        case 0x03A9:
+            {
+            ret = 0x15;
+            break;
+            }
+        case 0x03A0:
+            {
+            ret = 0x16;
+            break;
+            }
+        case 0x03A8:
+            {
+            ret = 0x17;
+            break;
+            }
+        case 0x03A3:
+            {
+            ret = 0x18;
+            break;
+            }
+        case 0x0398:
+            {
+            ret = 0x19;
+            break;
+            }
+        case 0x039E:
+            {
+            ret = 0x1A;
+            break;
+            }
+        case 0x00C6:
+            {
+            ret = 0x1C;
+            break;
+            }
+        case 0x00E6:
+            {
+            ret = 0x1D;
+            break;
+            }
+        case 0x00DF:
+            {
+            ret = 0x1E;
+            break;
+            }
+        case 0x00C9:
+            {
+            ret = 0x1F;
+            break;
+            }
+        case 0x0020:
+            {
+            ret = 0x20;
+            break;
+            }
+        case 0x0021:
+            {
+            ret = 0x21;
+            break;
+            }
+        case 0x0022:
+            {
+            ret = 0x22;
+            break;
+            }
+        case 0x0023:
+            {
+            ret = 0x23;
+            break;
+            }
+        case 0x00A4:
+            {
+            ret = 0x24;
+            break;
+            }
+        case 0x0025:
+            {
+            ret = 0x25;
+            break;
+            }
+        case 0x0026:
+            {
+            ret = 0x26;
+            break;
+            }
+        case 0x0027:
+            {
+            ret = 0x27;
+            break;
+            }
+        case 0x0028:
+            {
+            ret = 0x28;
+            break;
+            }
+        case 0x0029:
+            {
+            ret = 0x29;
+            break;
+            }
+        case 0x002A:
+            {
+            ret = 0x2A;
+            break;
+            }
+        case 0x002B:
+            {
+            ret = 0x2B;
+            break;
+            }
+        case 0x002C:
+            {
+            ret = 0x2C;
+            break;
+            }
+        case 0x002D:
+            {
+            ret = 0x2D;
+            break;
+            }
+        case 0x002E:
+            {
+            ret = 0x2E;
+            break;
+            }
+        case 0x002F:
+            {
+            ret = 0x2F;
+            break;
+            }
+        case 0x0030:
+            {
+            ret = 0x30;
+            break;
+            }
+        case 0x0031:
+            {
+            ret = 0x31;
+            break;
+            }
+        case 0x0032:
+            {
+            ret = 0x32;
+            break;
+            }
+        case 0x0033:
+            {
+            ret = 0x33;
+            break;
+            }
+        case 0x0034:
+            {
+            ret = 0x34;
+            break;
+            }
+        case 0x0035:
+            {
+            ret = 0x35;
+            break;
+            }
+        case 0x0036:
+            {
+            ret = 0x36;
+            break;
+            }
+        case 0x0037:
+            {
+            ret = 0x37;
+            break;
+            }
+        case 0x0038:
+            {
+            ret = 0x38;
+            break;
+            }
+        case 0x0039:
+            {
+            ret = 0x39;
+            break;
+            }
+        case 0x003A:
+            {
+            ret = 0x3A;
+            break;
+            }
+        case 0x003B:
+            {
+            ret = 0x3B;
+            break;
+            }
+        case 0x003C:
+            {
+            ret = 0x3C;
+            break;
+            }
+        case 0x003D:
+            {
+            ret = 0X3D;
+            break;
+            }
+        case 0x003E:
+            {
+            ret = 0X3E;
+            break;
+            }
+        case 0x003F:
+            {
+            ret = 0X3F;
+            break;
+            }
+        case 0x00A1:
+            {
+            ret = 0X40;
+            break;
+            }
+        case 0x0041:
+            {
+            ret = 0X41;
+            break;
+            }
+        case 0x0042:
+            {
+            ret = 0X42;
+            break;
+            }
+        case 0x0043:
+            {
+            ret = 0X43;
+            break;
+            }
+        case 0x0044:
+            {
+            ret = 0X44;
+            break;
+            }
+        case 0x0045:
+            {
+            ret = 0X45;
+            break;
+            }
+        case 0x0046:
+            {
+            ret = 0X46;
+            break;
+            }
+        case 0x0047:
+            {
+            ret = 0X47;
+            break;
+            }
+        case 0x0048:
+            {
+            ret = 0X48;
+            break;
+            }
+        case 0x0049:
+            {
+            ret = 0X49;
+            break;
+            }
+        case 0x004A:
+            {
+            ret = 0X4A;
+            break;
+            }
+        case 0x004B:
+            {
+            ret = 0X4B;
+            break;
+            }
+        case 0x004C:
+            {
+            ret = 0X4C;
+            break;
+            }
+        case 0x004D:
+            {
+            ret = 0X4D;
+            break;
+            }
+        case 0x004E:
+            {
+            ret = 0X4E;
+            break;
+            }
+        case 0x004F:
+            {
+            ret = 0X4F;
+            break;
+            }
+        case 0x0050:
+            {
+            ret = 0X50;
+            break;
+            }
+        case 0x0051:
+            {
+            ret = 0X51;
+            break;
+            }
+        case 0x0052:
+            {
+            ret = 0X52;
+            break;
+            }
+        case 0x0053:
+            {
+            ret = 0X53;
+            break;
+            }
+        case 0x0054:
+            {
+            ret = 0X54;
+            break;
+            }
+        case 0x0055:
+            {
+            ret = 0X55;
+            break;
+            }
+        case 0x0056:
+            {
+            ret = 0X56;
+            break;
+            }
+        case 0x0057:
+            {
+            ret = 0X57;
+            break;
+            }
+        case 0x0058:
+            {
+            ret = 0X58;
+            break;
+            }
+        case 0x0059:
+            {
+            ret = 0X59;
+            break;
+            }
+        case 0x005A:
+            {
+            ret = 0X5A;
+            break;
+            }
+        case 0x00C4:
+            {
+            ret = 0X5B;
+            break;
+            }
+        case 0x00D6:
+            {
+            ret = 0X5C;
+            break;
+            }
+        case 0x00D1:
+            {
+            ret = 0X5D;
+            break;
+            }
+        case 0x00DC:
+            {
+            ret = 0X5E;
+            break;
+            }
+        case 0x00A7:
+            {
+            ret = 0X5F;
+            break;
+            }
+        case 0x00BF:
+            {
+            ret = 0X60;
+            break;
+            }
+        case 0x0061:
+            {
+            ret = 0X61;
+            break;
+            }
+        case 0x0062:
+            {
+            ret = 0X62;
+            break;
+            }
+        case 0x0063:
+            {
+            ret = 0X63;
+            break;
+            }
+        case 0x0064:
+            {
+            ret = 0X64;
+            break;
+            }
+        case 0x0065:
+            {
+            ret = 0X65;
+            break;
+            }
+        case 0x0066:
+            {
+            ret = 0X66;
+            break;
+            }
+        case 0x0067:
+            {
+            ret = 0X67;
+            break;
+            }
+        case 0x0068:
+            {
+            ret = 0X68;
+            break;
+            }
+        case 0x0069:
+            {
+            ret = 0X69;
+            break;
+            }
+        case 0x006A:
+            {
+            ret = 0X6A;
+            break;
+            }
+        case 0x006B:
+            {
+            ret = 0X6B;
+            break;
+            }
+        case 0x006C:
+            {
+            ret = 0X6C;
+            break;
+            }
+        case 0x006D:
+            {
+            ret = 0X6D;
+            break;
+            }
+        case 0x006E:
+            {
+            ret = 0X6E;
+            break;
+            }
+        case 0x006F:
+            {
+            ret = 0X6F;
+            break;
+            }
+        case 0x0070:
+            {
+            ret = 0X70;
+            break;
+            }
+        case 0x0071:
+            {
+            ret = 0X71;
+            break;
+            }
+        case 0x0072:
+            {
+            ret = 0X72;
+            break;
+            }
+        case 0x0073:
+            {
+            ret = 0X73;
+            break;
+            }
+        case 0x0074:
+            {
+            ret = 0X74;
+            break;
+            }
+        case 0x0075:
+            {
+            ret = 0X75;
+            break;
+            }
+        case 0x0076:
+            {
+            ret = 0X76;
+            break;
+            }
+        case 0x0077:
+            {
+            ret = 0X77;
+            break;
+            }
+        case 0x0078:
+            {
+            ret = 0X78;
+            break;
+            }
+        case 0x0079:
+            {
+            ret = 0X79;
+            break;
+            }
+        case 0x007A:
+            {
+            ret = 0X7A;
+            break;
+            }
+        case 0x00E4:
+            {
+            ret = 0X7B;
+            break;
+            }
+        case 0x00F6:
+            {
+            ret = 0X7C;
+            break;
+            }
+        case 0x00F1:
+            {
+            ret = 0X7D;
+            break;
+            }
+        case 0x00FC:
+            {
+            ret = 0X7E;
+            break;
+            }
+        case 0x00E0:
+            {
+            ret = 0X7F;
+            break;
+            }
+        case 0x005E:
+            {
+            ret = 0X94;  /* ^ */
+            break;
+            }
+        case 0x007B:
+            {
+            ret = 0XA8; /* { */
+            break;
+            }
+        case 0x007D:
+            {
+            ret = 0XA9; /* } */
+            break;
+            }
+        case 0x005C:
+            {
+            ret = 0XAF; /* \ */
+            break;
+            }
+        case 0x007E:
+            {
+            ret = 0XBD; /* ~ */
+            break;
+            }
+        case 0x005B:
+            {
+            ret = 0XBC; /* [ */
+            break;
+            }
+        case 0x005D:
+            {
+            ret = 0XBE; /* ] */
+            break;
+            }
+        case 0x007C:
+            {
+            ret = 0XC0; /* | */
+            break;
+            }
+        case 0x20AC:
+            {
+            ret = 0XE5; /* The euro character */
+            break;
+            }
+        default:
+            {
+            ret = 0X9B; /* If illegal gsm char return space */
+            break;
+            }
+       }
+
+    return ret;
+    }
+// -----------------------------------------------------------------------------
+// CMmStaticUtility::Get16Bit
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CMmStaticUtility::Get16Bit
+    (
+    const TDesC8& aSource, //Source
+    TInt aIndex            //Index
+    )
+ {
+ TFLOGSTRING("TSY: CMmStaticUtility::Get16bit");
+ OstTrace0( TRACE_NORMAL, CMMSTATICUTILITY_GET16BIT, "CMmStaticUtility::Get16Bit" );
+
+ TInt target( 0 );
+
+ if ( aIndex + 1 < aSource.Length() )
+     {
+     target = TUint16( aSource[aIndex] ) << 8;
+     target = TUint16( target | aSource[aIndex + 1] );
+     }
+     
+ return target;
+ }
+
 // ==================== OTHER EXPORTED FUNCTIONS ===============================
     //None