connectivitylayer/isimessage/isimessagekernel_dll/src/isikernel.cpp
changeset 0 63b37f68c1ce
child 5 8ccc39f9d787
equal deleted inserted replaced
-1:000000000000 0:63b37f68c1ce
       
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of the License "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 * 
       
    14 * Description: 
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 #include <pn_const.h>
       
    20 #include "isikernel.h"
       
    21 #include "kernelisimessage_trace.h"
       
    22 #include <phonetisi.h>
       
    23 #include "osttracedefinitions.h"
       
    24 #ifdef OST_TRACE_COMPILER_IN_USE
       
    25 #include "isikerneltraces.h"
       
    26 #endif
       
    27 
       
    28 
       
    29 
       
    30 //  LOCAL CONSTANTS AND MACROS  
       
    31 
       
    32 const TInt KMessageHeaderLength ( 6 );
       
    33 const TUint16 KSixteenBitZero ( 0x0000 );
       
    34 const TUint32 KThirtytwoBitZero ( 0x00000000 );
       
    35 const TInt KMinSbLength ( 4 );
       
    36 const TUint8 KPaddingByte ( 0x00 );
       
    37 
       
    38 #define IS_DEV_HOST( dev )            ( ( dev & 0xF0 ) == 0 )
       
    39 #define GET_RECEIVER_DEV( msg )       ( msg[ ISI_HEADER_OFFSET_RECEIVERDEVICE ] & 0xFC )
       
    40 #define GET_SENDER_DEV( msg )         ( msg[ ISI_HEADER_OFFSET_SENDERDEVICE ] & 0xFC )
       
    41 #define GET_RECEIVER_OBJ( msg )       IS_DEV_HOST( msg[ ISI_HEADER_OFFSET_RECEIVERDEVICE ] ) ? \
       
    42                                       ( ( TUint16 )msg[ ISI_HEADER_OFFSET_RECEIVEROBJECT ] + ( ( msg [ ISI_HEADER_OFFSET_RECEIVERDEVICE ] & 0x0F ) << 8 ) ) : \
       
    43                                       ( ( TUint16 )msg[ ISI_HEADER_OFFSET_RECEIVEROBJECT ] + ( ( msg [ ISI_HEADER_OFFSET_RECEIVERDEVICE ] & 0x03 ) << 8 ) )
       
    44 #define GET_SENDER_OBJ( msg )         IS_DEV_HOST( msg[ ISI_HEADER_OFFSET_SENDERDEVICE ] ) ? \
       
    45                                       ( ( TUint16 )msg[ ISI_HEADER_OFFSET_SENDEROBJECT ] + ( ( msg[ ISI_HEADER_OFFSET_SENDERDEVICE ] & 0x0F ) << 8 ) ) : \
       
    46                                       ( ( TUint16 )msg[ ISI_HEADER_OFFSET_SENDEROBJECT ] + ( ( msg[ ISI_HEADER_OFFSET_SENDERDEVICE ] & 0x03 ) << 8 ) )
       
    47 #define SET_RECEIVER_DEV( msg, dev )  ( msg[ ISI_HEADER_OFFSET_RECEIVERDEVICE] = ( ( msg[ ISI_HEADER_OFFSET_RECEIVERDEVICE ] & 0x03 ) | ( ( dev ) & 0xFC ) ) )
       
    48 #define SET_SENDER_DEV( msg, dev )    ( msg[ ISI_HEADER_OFFSET_SENDERDEVICE] = ( ( msg[ ISI_HEADER_OFFSET_SENDERDEVICE ] & 0x03 ) | ( ( dev ) & 0xFC ) ) )
       
    49 #define SET_RECEIVER_OBJ( msg, o )    msg[ ISI_HEADER_OFFSET_RECEIVERDEVICE ] = ( IS_DEV_HOST( msg[ ISI_HEADER_OFFSET_RECEIVERDEVICE ] ) ) ? \
       
    50                                       GET_RECEIVER_DEV( msg ) | ( ( ( o ) >> 8 ) & 0x0F ) : GET_RECEIVER_DEV( msg ) | ( ( ( o ) >> 8 ) & 0x03 ), \
       
    51                                       msg[ ISI_HEADER_OFFSET_RECEIVEROBJECT ] = ( TUint8 )( ( o ) & 0x00FF )
       
    52 #define SET_SENDER_OBJ( msg, o )      msg[ ISI_HEADER_OFFSET_SENDERDEVICE ] = ( IS_DEV_HOST( msg[ ISI_HEADER_OFFSET_SENDERDEVICE ] ) ) ? \
       
    53                                       GET_SENDER_DEV( msg ) | ( ( ( o ) >> 8 ) & 0x0F ) : GET_SENDER_DEV( msg ) | ( ( ( o ) >> 8 ) & 0x03 ), \
       
    54                                       msg[ ISI_HEADER_OFFSET_SENDEROBJECT ] = ( TUint8 )( ( o ) & 0x00FF )
       
    55 
       
    56 
       
    57 
       
    58 // -----------------------------------------------------------------------------
       
    59 // TIsiKernel::operator=
       
    60 // -----------------------------------------------------------------------------
       
    61  EXPORT_C TIsiKernel& TIsiKernel::operator=
       
    62         ( 
       
    63         const TIsiKernel&
       
    64         )
       
    65     {
       
    66         
       
    67     COMPONENT_TRACE( ( _T( "TIsiKernel::operator=" ) ) );
       
    68     OstTrace0( TRACE_NORMAL, TISIKERNEL_OPERATOR, "TIsiKernel::operator=" );
       
    69     return ( *this );
       
    70 
       
    71     }
       
    72  
       
    73 // -----------------------------------------------------------------------------
       
    74 // TIsiKernel::TIsiKernel
       
    75 // Constructor.
       
    76 // -----------------------------------------------------------------------------
       
    77 
       
    78 EXPORT_C TIsiKernel::TIsiKernel()
       
    79     {
       
    80         
       
    81     COMPONENT_TRACE( ( _T( "TIsiKernel::TIsiKernel()" ) ) );
       
    82     OstTrace0( TRACE_NORMAL, TISIKERNEL_TISIKERNEL, "TIsiKernel::TIsiKernel constructor" );
       
    83     
       
    84     }
       
    85   
       
    86 // -----------------------------------------------------------------------------
       
    87 // TIsiKernelReceiveC::FindSubBlockOffsetById
       
    88 // -----------------------------------------------------------------------------
       
    89 EXPORT_C TInt TIsiKernelReceiveC::FindSubBlockOffsetById 
       
    90         ( 
       
    91         const TUint aSbStartOffset,
       
    92         const TUint aSubblockId,
       
    93         const TSubBlockType aType,
       
    94         TUint &aSubBlockOffset
       
    95         ) const
       
    96     {
       
    97 
       
    98      COMPONENT_TRACE( ( _T ( "TIsiKernelReceiveC::FindSubblockOffsetById entering, (sbStart 0x%x, sbId 0x%x, aType %d  )" ), aSbStartOffset, aSubblockId, aType ) );  
       
    99      OstTraceExt3( TRACE_NORMAL, TISIKERNELRECEIVEC_FINDSUBBLOCKOFFSETBYID, "TIsiKernelReceiveC::FindSubBlockOffsetById - enter;sbStart=%u;sbId=%u;aType=%x;", aSbStartOffset, aSubblockId, ( TUint )&( aType ) );
       
   100      
       
   101     TInt finder_offset( aSbStartOffset );
       
   102     TInt length( iBuffer.Length() );
       
   103 
       
   104     // Message has to be divisible by four, when it has any subblocks
       
   105     TRACE_ASSERT ( length %  4 == 0 ); //Invalid length
       
   106     TRACE_ASSERT ( finder_offset % 4 == 0 ); //Invalid offset
       
   107 
       
   108     TUint subblock_id( 0 );
       
   109     TUint subblock_len( 0 );
       
   110     TBool found( EFalse );
       
   111     TInt retval( KErrNotFound );
       
   112 
       
   113     if( ( length - KMinSbLength ) < finder_offset )
       
   114         {
       
   115         COMPONENT_TRACE( ( _T ( "TIsiKernelReceiveC::FindSubblockOffsetById used with msg which doesn't contains any subblocks, (retval %d)" ), retval ) );
       
   116         OstTrace1( TRACE_NORMAL, DUP1_TISIKERNELRECEIVEC_FINDSUBBLOCKOFFSETBYID, "TIsiKernelReceiveC::FindSubBlockOffsetById used with msg which doesn't contains any subblocks;retval=%d", retval );       
       
   117         }
       
   118     else
       
   119         {        
       
   120         do
       
   121             {
       
   122             switch( aType )
       
   123                 {
       
   124                 case EIsiSubBlockTypeId8Len8:
       
   125                    {
       
   126                   subblock_id = this->Get8bit( finder_offset );
       
   127                   subblock_len = this->Get8bit( finder_offset + 1 );
       
   128                   break;
       
   129                   }
       
   130                 case EIsiSubBlockTypeId8Len16:
       
   131                     {
       
   132                     subblock_id = this->Get8bit( finder_offset );
       
   133                     subblock_len = this->Get16bit( finder_offset + 2 );
       
   134                     break;
       
   135                     }
       
   136                 case EIsiSubBlockTypeId16Len8:
       
   137                     {
       
   138                     subblock_id = this->Get16bit( finder_offset );
       
   139                     subblock_len = this->Get8bit( finder_offset + 2 );
       
   140                     break;
       
   141                     }
       
   142                 case EIsiSubBlockTypeId16Len16:
       
   143                     {
       
   144                     subblock_id = this->Get16bit( finder_offset );
       
   145                     subblock_len = this->Get16bit( finder_offset + 2 );
       
   146                     break;
       
   147                     }
       
   148                 case EIsiSubBlockTypeId8Len32:
       
   149                     {
       
   150                     subblock_id = this->Get8bit( finder_offset );
       
   151                     subblock_len = this->Get32bit( finder_offset + 4 );
       
   152                     break;
       
   153                     }
       
   154                 default:
       
   155                     {
       
   156                     ASSERT_RESET_ALWAYS( 0, "KernelIsiMessage: OFFSET Invalid", EKernelIsiMessageInvalidSubBlockType );
       
   157                     break;
       
   158                     }
       
   159                 }
       
   160 
       
   161             if ( subblock_len == 0 )
       
   162                 {
       
   163                 OstTrace0( TRACE_NORMAL, DUP2_TISIKERNELRECEIVEC_FINDSUBBLOCKOFFSETBYID, "TIsiKernelReceiveC::FindSubBlockOffsetById has found corrupted data, sb_len = 0 ->stop searching!" );
       
   164                 COMPONENT_TRACE( ( _T ( "TIsiKernelReceiveC::FindSubblockOffsetById has found corrupted data, sb_len = 0 ->stop searching!" ) ) );  
       
   165                 found = ETrue;
       
   166                 retval = KErrNotFound;
       
   167                 }
       
   168 
       
   169             if ( aSubblockId == subblock_id )
       
   170                 {
       
   171                 found = ETrue;
       
   172                 aSubBlockOffset = finder_offset;
       
   173                 retval = KErrNone;
       
   174                 }
       
   175             else
       
   176                 {
       
   177                 finder_offset+= subblock_len;
       
   178                 }
       
   179             } while ( !found && ( finder_offset + KMinSbLength <= length ) );
       
   180         }
       
   181 
       
   182     OstTrace0( TRACE_NORMAL, DUP3_TISIKERNELRECEIVEC_FINDSUBBLOCKOFFSETBYID, "TIsiKernelReceiveC::FindSubBlockOffsetById returning" );
       
   183     COMPONENT_TRACE( ( _T ( "TIsiKernelReceiveC::FindSubblockOffsetById - return, aSubBlockOffset = 0x%x" ), finder_offset ) );
       
   184 
       
   185     return retval;
       
   186    
       
   187     }
       
   188 
       
   189 // -----------------------------------------------------------------------------
       
   190 // TIsiKernelReceiveC::FindSubBlockOffsetByIndex
       
   191 // -----------------------------------------------------------------------------
       
   192 EXPORT_C TInt TIsiKernelReceiveC::FindSubBlockOffsetByIndex
       
   193         ( 
       
   194         const TUint aSbStartOffset,
       
   195         const TUint aSubblockIndex,
       
   196         const TSubBlockType aType,
       
   197         TUint &aSubBlockOffset
       
   198         ) const
       
   199     { 
       
   200 
       
   201     COMPONENT_TRACE( ( _T ( "TIsiKernelReceiveC::FindSubblockOffsetByIndex entering, (sbStart 0x%x, sbIndex 0x%x, aType %d  )" ), aSbStartOffset, aSubblockIndex, aType ) );
       
   202     OstTraceExt3( TRACE_NORMAL, TISIKERNELRECEIVEC_FINDSUBBLOCKOFFSETBYINDEX, "TIsiKernelReceiveC::FindSubBlockOffsetByIndex - enter;aSbStartOffset=%u;aSubblockIndex=%u;aType=%x;", aSbStartOffset, aSubblockIndex, ( TUint )&( aType ));
       
   203 
       
   204     TInt finder_offset( aSbStartOffset );
       
   205     TInt length( iBuffer.Length() );
       
   206     
       
   207     // Message has to be divisible by four, when it has any subblocks
       
   208     TRACE_ASSERT ( length % 4 == 0 ); //Invalid length
       
   209     TRACE_ASSERT ( finder_offset % 4 == 0 ); // Invalid offset
       
   210 
       
   211     TUint subblock_len ( 0 );
       
   212     TUint index ( 0 );
       
   213     TBool found ( EFalse );
       
   214     TInt retval( KErrNotFound );
       
   215 
       
   216     if( ( length - KMinSbLength ) < finder_offset )
       
   217         {
       
   218         OstTrace1( TRACE_NORMAL, DUP2_TISIKERNELRECEIVEC_FINDSUBBLOCKOFFSETBYINDEX, "TIsiKernelReceiveC::FindSubBlockOffsetByIndex used with msg which doesn't contains any subblocks;retval=%d", retval );      
       
   219         COMPONENT_TRACE( ( _T ( "TIsiKernelReceiveC::FindSubblockOffsetByIndex used with msg which doesn't contains any subblocks, (retval %d)" ), retval ) );            
       
   220         }
       
   221     else
       
   222         {        
       
   223         do
       
   224             {
       
   225             index++;
       
   226             switch( aType )
       
   227             {
       
   228             case EIsiSubBlockTypeId8Len8:
       
   229                 {
       
   230                 subblock_len = this->Get8bit( finder_offset + 1 );
       
   231                 break;
       
   232                 }
       
   233             case EIsiSubBlockTypeId8Len16:
       
   234                 {
       
   235                 subblock_len = this->Get16bit( finder_offset + 2 );
       
   236                 break;
       
   237                 }
       
   238             case EIsiSubBlockTypeId16Len8:
       
   239                 {
       
   240                 subblock_len = this->Get8bit( finder_offset + 2 );
       
   241                 break;
       
   242                 }
       
   243             case EIsiSubBlockTypeId16Len16:
       
   244                 {
       
   245                 subblock_len = this->Get16bit( finder_offset + 2 );
       
   246                 break;
       
   247                 }
       
   248             case EIsiSubBlockTypeId8Len32:
       
   249                 {
       
   250                 subblock_len = this->Get32bit( finder_offset + 4 );
       
   251                 break;
       
   252                 }
       
   253             default:
       
   254                 {
       
   255                 ASSERT_RESET_ALWAYS( 0, "KernelIsiMessage: OFFSET Invalid", EKernelIsiMessageInvalidSubBlockType );
       
   256                 break;
       
   257                 }
       
   258             }
       
   259 
       
   260         if ( subblock_len == 0 )
       
   261             {
       
   262             OstTrace0( TRACE_NORMAL, DUP1_TISIKERNELRECEIVEC_FINDSUBBLOCKOFFSETBYINDEX, "TIsiKernelReceiveC::FindSubBlockOffsetByIndex has found corrupted data, sb_len = 0 ->stop searching!" );
       
   263             COMPONENT_TRACE( ( _T ( "TIsiKernelReceiveC::FindSubblockOffsetByIndex has found corrupted data, sb_len = 0 ->stop searching" ) ) );           
       
   264             found = ETrue;
       
   265             retval = KErrNotFound;
       
   266             }
       
   267 
       
   268         if( index == aSubblockIndex )
       
   269             {
       
   270             found = ETrue;
       
   271             aSubBlockOffset = finder_offset;
       
   272             retval = KErrNone;
       
   273             }
       
   274         else
       
   275             {
       
   276             finder_offset+=subblock_len;
       
   277             }
       
   278         } while( !found && ( index <= aSubblockIndex ) && (finder_offset + KMinSbLength <= length ) );
       
   279     }
       
   280 
       
   281     COMPONENT_TRACE( ( _T ( "TIsiKernelReceiveC::FindSubblockOffsetByIndex - return, aSubBlockOffset = 0x%x" ), finder_offset ) );
       
   282     OstTrace1( TRACE_NORMAL, DUP3_TISIKERNELRECEIVEC_FINDSUBBLOCKOFFSETBYINDEX, "TIsiKernelReceiveC::FindSubBlockOffsetByIndex - return;finder_offset=%d", finder_offset );
       
   283 
       
   284     return retval;
       
   285     
       
   286     }
       
   287 
       
   288 // -----------------------------------------------------------------------------
       
   289 // TIsiKernelReceiveC::Get16bit
       
   290 // -----------------------------------------------------------------------------
       
   291 EXPORT_C TUint16 TIsiKernelReceiveC::Get16bit
       
   292         (
       
   293         const TUint aOffset 
       
   294         ) const
       
   295     {
       
   296 
       
   297     OstTrace1( TRACE_NORMAL, TISIKERNELRECEIVEC_GET16BIT, "TIsiKernelReceiveC::Get16bit - enter;aOffset=%u", aOffset );
       
   298     COMPONENT_TRACE( ( _T ( "TIsiKernelReceiveC::Get16bit entering, aOffset 0x%x" ), aOffset ) );
       
   299 
       
   300     ASSERT_RESET_ALWAYS( ((iBuffer.Length() - 1) > aOffset), "KernelIsiMessage: OFFSET Invalid", KErrOverflow );    
       
   301     TRACE_ASSERT ( aOffset % 2 == 0 ); //Invalid offset
       
   302 
       
   303     TUint16 retval( KSixteenBitZero );
       
   304     TUint16 byte1( KSixteenBitZero );
       
   305     TUint16 byte2( KSixteenBitZero );
       
   306 
       
   307     byte1 = iBuffer[ aOffset ];
       
   308     byte2 = iBuffer[ aOffset + 1 ];
       
   309     retval = TUint16( ( byte1 << 8 ) | byte2 );  
       
   310    
       
   311     COMPONENT_TRACE( ( _T ( "TIsiKernelReceiveC::Get16bit - return, Return 16bit value = 0x%x" ), retval ) );
       
   312     OstTraceExt1( TRACE_NORMAL, DUP1_TISIKERNELRECEIVEC_GET16BIT, "TIsiKernelReceiveC::Get16bit - return; retval=%hu", retval );
       
   313 
       
   314     return retval;
       
   315 
       
   316     }
       
   317 
       
   318 // -----------------------------------------------------------------------------
       
   319 // TIsiKernelReceiveC::Get32bit
       
   320 // -----------------------------------------------------------------------------
       
   321 EXPORT_C TUint32 TIsiKernelReceiveC::Get32bit
       
   322         (
       
   323         const TUint aOffset
       
   324         ) const
       
   325     {
       
   326 
       
   327     COMPONENT_TRACE( ( _T ( "TIsiKernelReceiveC::Get32bit entering, aOffset = 0x%x" ) , aOffset ) );
       
   328     OstTrace1( TRACE_NORMAL, TISIKERNELRECEIVEC_GET32BIT, "TIsiKernelReceiveC::Get32bit - enter;aOffset=%u", aOffset );
       
   329     
       
   330     ASSERT_RESET_ALWAYS( ( (iBuffer.Length() - 3) > aOffset ), "KernelIsiMessage: OFFSET Invalid", KErrOverflow );
       
   331     TRACE_ASSERT ( aOffset % 4 == 0 ); // Invalid offset
       
   332 
       
   333     TUint32 retval( KThirtytwoBitZero );
       
   334     TUint32 byte1( KThirtytwoBitZero );
       
   335     TUint32 byte2( KThirtytwoBitZero );
       
   336     TUint32 byte3( KThirtytwoBitZero );
       
   337     TUint32 byte4( KThirtytwoBitZero );
       
   338     
       
   339     byte1 = iBuffer[ aOffset ];
       
   340     byte2 = iBuffer[ aOffset + 1 ];
       
   341     byte3 = iBuffer[ aOffset + 2 ];
       
   342     byte4 = iBuffer[ aOffset + 3 ];
       
   343 
       
   344     retval = TUint32( byte1 << 24 );
       
   345     retval = TUint32( retval | ( byte2 << 16 ));
       
   346     retval = TUint32( retval | ( byte3 << 8 ));
       
   347     retval = TUint32( retval | byte4 );
       
   348 
       
   349     COMPONENT_TRACE( ( _T ( "TIsiKernelReceiveC::Get32bit - return, Return 32bit value = 0x%x" ), retval ) );
       
   350     OstTrace1( TRACE_NORMAL, DUP1_TISIKERNELRECEIVEC_GET32BIT, "TIsiKernelReceiveC::Get32bit - return;retval=%d", retval );
       
   351     
       
   352     return retval;
       
   353 
       
   354     }
       
   355 
       
   356 // -----------------------------------------------------------------------------
       
   357 // TIsiKernelReceiveC::Get8bit
       
   358 // -----------------------------------------------------------------------------
       
   359 EXPORT_C TUint8 TIsiKernelReceiveC::Get8bit
       
   360         (
       
   361         const TUint aOffset 
       
   362         ) const
       
   363     {
       
   364 
       
   365     COMPONENT_TRACE( ( _T ( "TIsiKernelReceiveC::Get8bit entering, aOffset = 0x%x" ) , aOffset ) );
       
   366     OstTrace1( TRACE_NORMAL, TISIKERNELRECEIVEC_GET8BIT, "TIsiKernelReceiveC::Get8bit - enter;aOffset=%u", aOffset );
       
   367     
       
   368     ASSERT_RESET_ALWAYS( ( iBuffer.Length() > aOffset ), "KernelIsiMessage: OFFSET Invalid", KErrOverflow );
       
   369 
       
   370     COMPONENT_TRACE( ( _T ( "TIsiKernelReceiveC::Get8bit - return, return value = 0x%x" ) , iBuffer[aOffset] ) );
       
   371     OstTraceExt1( TRACE_NORMAL, DUP1_TISIKERNELRECEIVEC_GET8BIT, "TIsiKernelReceiveC::Get8bit - return 8bit value=%hhu", iBuffer[aOffset] );
       
   372     
       
   373     return iBuffer[ aOffset ];
       
   374 
       
   375     }
       
   376 
       
   377 // -----------------------------------------------------------------------------
       
   378 // TIsiKernelReceiveC::GetData
       
   379 // -----------------------------------------------------------------------------
       
   380 EXPORT_C const TPtrC8 TIsiKernelReceiveC::GetData
       
   381         (
       
   382         const TUint aOffset,
       
   383         const TInt aLength
       
   384         ) const
       
   385     {
       
   386 
       
   387     COMPONENT_TRACE( ( _T ( "TIsiKernelReceiveC::GetData entering, aOffset = 0x%x" ), aOffset ) );
       
   388     OstTraceExt2( TRACE_NORMAL, TISIKERNELRECEIVEC_GETDATA, "TIsiKernelReceiveC::GetData - enter;aOffset=%u;aLength=%d", aOffset, aLength );
       
   389                     
       
   390     ASSERT_RESET_ALWAYS( ( ( iBuffer.Length() - aLength ) >= aOffset), "KernelIsiMessage: OFFSET Invalid", KErrOverflow );
       
   391     ASSERT_RESET_ALWAYS( ( iBuffer.Length() >= aLength ), "KernelIsiMessage: OFFSET Invalid", KErrOverflow );
       
   392 
       
   393     TRACE_ASSERT ( aLength > 0 ); // Invalid length, should be >0
       
   394 
       
   395     COMPONENT_TRACE( ( _T ( "TIsiKernelReceiveC::GetData - return, offset = 0x%x, length = 0x%x" ), aOffset, aLength ) );
       
   396     OstTraceExt2( TRACE_NORMAL, DUP1_TISIKERNELRECEIVEC_GETDATA, "TIsiKernelReceiveC::GetData - return;offset=%u;data length=%d", aOffset, aLength );
       
   397     
       
   398     return TPtrC8( iBuffer.Mid( aOffset, aLength ) );
       
   399 
       
   400     }
       
   401 
       
   402 // -----------------------------------------------------------------------------
       
   403 // TIsiKernelReceiveC::TIsiKernelReceiveC
       
   404 // -----------------------------------------------------------------------------
       
   405 EXPORT_C TIsiKernelReceiveC::TIsiKernelReceiveC
       
   406         (
       
   407         const TDesC8& aBuf
       
   408         )
       
   409         :TIsiKernel(),
       
   410         iBuffer( aBuf )
       
   411     {
       
   412     COMPONENT_TRACE( ( _T ( "TIsiKernelReceiveC::TIsiKernelReceiveC constructor" ) ) );
       
   413     OstTrace0( TRACE_NORMAL, TISIKERNELRECEIVEC_TISIKERNELRECEIVEC, "TIsiKernelReceiveC::TIsiKernelReceiveC constructor" );
       
   414     
       
   415     }
       
   416 
       
   417 // -----------------------------------------------------------------------------
       
   418 // TIsiKernelReceiveC::GetBuffer
       
   419 // -----------------------------------------------------------------------------
       
   420 EXPORT_C const TPtrC8 TIsiKernelReceiveC::GetBuffer
       
   421         () const
       
   422     {
       
   423     COMPONENT_TRACE( ( _T ( "TIsiKernelReceiveC::GetBuffer" ) ) );
       
   424     OstTrace0( TRACE_NORMAL, TISIKERNELRECEIVEC_GETBUFFER, "TIsiKernelReceiveC::GetBuffer" );
       
   425     
       
   426     return iBuffer;
       
   427 
       
   428     }
       
   429 
       
   430 // -----------------------------------------------------------------------------
       
   431 // TIsiKernelReceiveC::GetReceiverDevice
       
   432 // -----------------------------------------------------------------------------
       
   433 EXPORT_C TUint8 TIsiKernelReceiveC::GetReceiverDevice
       
   434         () const
       
   435     {
       
   436 
       
   437     COMPONENT_TRACE( ( _T ( "TIsiKernelReceiveC::GetReceiverDevice - entering" ) ) );
       
   438     OstTrace0( TRACE_NORMAL, TISIKERNELRECEIVEC_GETRECEIVERDEVICE, "TIsiKernelReceiveC::GetReceiverDevice - enter" );
       
   439     
       
   440     ASSERT_RESET_ALWAYS( (iBuffer.Length() > ISI_HEADER_OFFSET_MESSAGEID), "KernelIsiMessage: Invalid buffer length", EKernelIsiMessageInvalidOffset );
       
   441 
       
   442     TUint8 receiverDevice = GET_RECEIVER_DEV(iBuffer);
       
   443 
       
   444     COMPONENT_TRACE( ( _T ( "TIsiKernelReceiveC::GetReceiverDevice - return, receiverDevice = 0x%x" ), receiverDevice ) );
       
   445     OstTraceExt1( TRACE_NORMAL, DUP1_TISIKERNELRECEIVEC_GETRECEIVERDEVICE, "TIsiKernelReceiveC::GetReceiverDevice - return;receiverDevice=%hhu", receiverDevice );
       
   446     
       
   447     return receiverDevice;
       
   448 
       
   449     }
       
   450 
       
   451 // -----------------------------------------------------------------------------
       
   452 // TIsiKernelReceiveC::GetSenderDevice
       
   453 // -----------------------------------------------------------------------------
       
   454 EXPORT_C TUint8 TIsiKernelReceiveC::GetSenderDevice
       
   455         () const
       
   456     {
       
   457 
       
   458     COMPONENT_TRACE( ( _T ( "TIsiKernelReceiveC::GetSenderDevice - entering" ) ) );
       
   459     OstTrace0( TRACE_NORMAL, TISIKERNELRECEIVEC_GETSENDERDEVICE, "TIsiKernelReceiveC::GetSenderDevice - enter" );
       
   460     
       
   461 
       
   462     ASSERT_RESET_ALWAYS( (iBuffer.Length() > ISI_HEADER_OFFSET_MESSAGEID), "KernelIsiMessage: Invalid buffer length", EKernelIsiMessageInvalidOffset );
       
   463 
       
   464     TUint8 senderDevice = GET_SENDER_DEV(iBuffer);
       
   465                 
       
   466     COMPONENT_TRACE( ( _T ( "TIsiKernelReceiveC::GetSenderDevice - return, senderDevice = 0x%x" ), senderDevice ) );
       
   467     OstTraceExt1( TRACE_NORMAL, DUP1_TISIKERNELRECEIVEC_GETSENDERDEVICE, "TIsiKernelReceiveC::GetSenderDevice - return;senderDevice=%hhu", senderDevice );
       
   468 
       
   469     return senderDevice;
       
   470 
       
   471     }
       
   472 
       
   473 // -----------------------------------------------------------------------------
       
   474 // TIsiKernelReceiveC::GetReceiverObject
       
   475 // -----------------------------------------------------------------------------
       
   476 EXPORT_C TUint16 TIsiKernelReceiveC::GetReceiverObject
       
   477         () const
       
   478     {
       
   479 
       
   480     COMPONENT_TRACE( ( _T ( "TIsiKernelReceiveC::GetReceiverObject - entering" ) ) );
       
   481     OstTrace0( TRACE_NORMAL, TISIKERNELRECEIVEC_GETRECEIVEROBJECT, "TIsiKernelReceiveC::GetReceiverObject - enter" );
       
   482     
       
   483     ASSERT_RESET_ALWAYS( (iBuffer.Length() > ISI_HEADER_OFFSET_MESSAGEID), "KernelIsiMessage: Invalid buffer length", EKernelIsiMessageInvalidOffset );
       
   484 
       
   485     TUint16 receiverObject = static_cast<TUint16>GET_RECEIVER_OBJ(iBuffer);
       
   486                 
       
   487     COMPONENT_TRACE( ( _T ( "TIsiKernelReceiveC::GetReceiverObject - return, receiverObject = 0x%x" ), receiverObject ) );
       
   488     OstTraceExt1( TRACE_NORMAL, DUP1_TISIKERNELRECEIVEC_GETRECEIVEROBJECT, "TIsiKernelReceiveC::GetReceiverObject - return;receiverObject=%hu", receiverObject );
       
   489     
       
   490     return receiverObject;
       
   491 
       
   492     }
       
   493 
       
   494 
       
   495 // -----------------------------------------------------------------------------
       
   496 // TIsiKernelReceiveC::GetSenderObject
       
   497 // -----------------------------------------------------------------------------
       
   498 EXPORT_C TUint16 TIsiKernelReceiveC::GetSenderObject
       
   499         () const
       
   500     {
       
   501 
       
   502     COMPONENT_TRACE( ( _T ( "TIsiKernelReceiveC::GetSenderObject - entering" ) ) );
       
   503     OstTrace0( TRACE_NORMAL, TISIKERNELRECEIVEC_GETSENDEROBJECT, "TIsiKernelReceiveC::GetSenderObject - enter" );
       
   504     
       
   505     ASSERT_RESET_ALWAYS( (iBuffer.Length() > ISI_HEADER_OFFSET_MESSAGEID), "KernelIsiMessage: Invalid buffer length", EKernelIsiMessageInvalidOffset );
       
   506 
       
   507     TUint16 senderObject = static_cast<TUint16>GET_SENDER_OBJ( iBuffer );
       
   508 
       
   509     COMPONENT_TRACE( ( _T ( "TIsiKernelReceiveC::GetSenderObject - return, senderObject = 0x%x" ), senderObject ) );
       
   510     OstTraceExt1( TRACE_NORMAL, DUP1_TISIKERNELRECEIVEC_GETSENDEROBJECT, "TIsiKernelReceiveC::GetSenderObject - return;senderObject=%hhu", senderObject );
       
   511     
       
   512     return senderObject;
       
   513 
       
   514     }
       
   515 
       
   516 // -----------------------------------------------------------------------------
       
   517 // TIsiKernelReceiveC::GetExtendedResourceId
       
   518 // -----------------------------------------------------------------------------
       
   519 EXPORT_C TUint32 TIsiKernelReceiveC::GetExtendedResourceId
       
   520         () const
       
   521     {
       
   522 
       
   523     COMPONENT_TRACE( ( _T ( "TIsiKernelReceiveC::GetExtendedResourceId - entering" ) ) );
       
   524     OstTrace0( TRACE_NORMAL, TISIKERNELRECEIVEC_GETEXTENDEDRESOURCEID, "TIsiKernelReceiveC::GetExtendedResourceId - enter" );
       
   525     
       
   526     TUint32 extendedResourceId(0x00000000);
       
   527 
       
   528     //Check that extended resource id available and not reading over the buffer
       
   529     ASSERT_RESET_ALWAYS( (iBuffer[ISI_HEADER_OFFSET_RESOURCEID] == PN_PREFIX), "KernelIsiMessage: Invalid buffer", EKernelIsiMessageInvalidResourceId );
       
   530     ASSERT_RESET_ALWAYS( (iBuffer.Length() > ISI_HEADER_OFFSET_MESSAGEID), "KernelIsiMessage: Invalid buffer", EKernelIsiMessageInvalidResourceId );
       
   531 
       
   532     TUint8 temp(iBuffer[ ISI_HEADER_OFFSET_SUBTYPE ]);
       
   533     TUint32 subType = static_cast<TUint32>( temp << 16 );
       
   534     TUint32 type = static_cast<TUint32>( iBuffer[ ISI_HEADER_OFFSET_TYPE ] << 8 );
       
   535                                                                   
       
   536     extendedResourceId = static_cast<TUint32>(PN_PREFIX) | subType | type ;
       
   537 
       
   538     COMPONENT_TRACE( ( _T ( "TIsiKernelReceiveC::GetExtendedResourceId - return, extendedResourceId = 0x%x" ), extendedResourceId ) );
       
   539     OstTrace1( TRACE_NORMAL, DUP1_TISIKERNELRECEIVEC_GETEXTENDEDRESOURCEID, "TIsiKernelReceiveC::GetExtendedResourceId - return;extendedResourceId=%u", extendedResourceId );
       
   540     
       
   541     return extendedResourceId;
       
   542 
       
   543     }
       
   544 
       
   545 //-------------------------------------------------------------------------------
       
   546 // TIsiKernelSend::Complete 
       
   547 // -----------------------------------------------------------------------------
       
   548 EXPORT_C TDes8& TIsiKernelSend::Complete
       
   549         (
       
   550         // None
       
   551         )
       
   552     {
       
   553 
       
   554     COMPONENT_TRACE( ( _T ( "TIsiKernelSend::Complete entering" ) ) );
       
   555     OstTrace0( TRACE_NORMAL, TISIKERNELSEND_COMPLETE, "TIsiKernelSend::Complete - enter" );
       
   556     
       
   557     // Set msg length in hex.
       
   558     TUint16 length( TUint16( iBuffer.Length() - KMessageHeaderLength ) ); 
       
   559     TUint16 calcFinalLength( TUint16( iFinalLength - KMessageHeaderLength ) );
       
   560 
       
   561     COMPONENT_TRACE( ( _T ( "TIsiKernelSend::Complete, length: 0x%x, calcfinallength: 0x%x" ), length, calcFinalLength ) );
       
   562     OstTraceExt2( TRACE_NORMAL, DUP1_TISIKERNELSEND_COMPLETE, "TIsiKernelSend::Complete;length=%hu;calcFinalLength=%hu", length, calcFinalLength );
       
   563     
       
   564     #if defined( __WINS__ ) || defined( __WINSCW__ )
       
   565         {
       
   566         if( iFinalLength == 0 )    // TIsiKernelSend alternative constructor used
       
   567             {               
       
   568             iBuffer[ ISI_HEADER_OFFSET_LENGTH ] = static_cast<TUint8>( (length & 0xff00) >> 8);   //BE             
       
   569             iBuffer[ ISI_HEADER_OFFSET_LENGTH + 1 ] = static_cast<TUint8>(length & 0x00ff);    //BE
       
   570             }
       
   571         else
       
   572             {
       
   573             iBuffer[ ISI_HEADER_OFFSET_LENGTH ] = static_cast<TUint8>( (calcFinalLength & 0xff00 ) >> 8);   //BE             
       
   574             iBuffer[ ISI_HEADER_OFFSET_LENGTH + 1 ] = static_cast<TUint8>(calcFinalLength & 0x00ff);    //BE
       
   575             iBuffer.SetLength( iFinalLength );                
       
   576             }
       
   577         }        
       
   578         
       
   579     #else
       
   580         {
       
   581         if( iFinalLength == 0 )    // TIsiKernelSend alternative constructor used
       
   582             {
       
   583             iBuffer[ ISI_HEADER_OFFSET_LENGTH +1 ] = static_cast<TUint8>( (length & 0xff00) >> 8);   //LE             
       
   584             iBuffer[ ISI_HEADER_OFFSET_LENGTH ] = static_cast<TUint8>(length & 0x00ff);    //LE               
       
   585            }
       
   586         else
       
   587             {              
       
   588             iBuffer[ ISI_HEADER_OFFSET_LENGTH +1 ] = static_cast<TUint8>( (calcFinalLength & 0xff00) >> 8);   //LE             
       
   589             iBuffer[ ISI_HEADER_OFFSET_LENGTH ] = static_cast<TUint8>(calcFinalLength & 0x00ff);    //LE
       
   590             iBuffer.SetLength( iFinalLength );                                
       
   591              }
       
   592         OstTraceExt2( TRACE_NORMAL, DUP2_TISIKERNELSEND_COMPLETE, "TIsiKernelSend::Complete;byte2=%hhu;byte1=%hhu", iBuffer[5], iBuffer[4] );
       
   593         COMPONENT_TRACE( ( _T ( "TIsiKernelSend::Complete, byte2: 0x%x, byte1: 0x%x" ), iBuffer[5], iBuffer[4] ) );
       
   594         }
       
   595     #endif    
       
   596 
       
   597     COMPONENT_TRACE( ( _T ( "TIsiKernelSend::Complete - return, buffer length = 0x%x, iFinalLength = 0x%x" ), length, iFinalLength ) );
       
   598     OstTraceExt2( TRACE_NORMAL, DUP3_TISIKERNELSEND_COMPLETE, "TIsiKernelSend::Complete - return;buffer length=%hu;iFinalLength=%u", length, iFinalLength );
       
   599     
       
   600     return iBuffer;
       
   601 
       
   602     }
       
   603 
       
   604 // -----------------------------------------------------------------------------
       
   605 // TIsiKernelSend::CopyData
       
   606 // -----------------------------------------------------------------------------
       
   607 EXPORT_C void TIsiKernelSend::CopyData
       
   608         (
       
   609         const TUint aOffset,
       
   610         const TDesC8& aData
       
   611         )
       
   612     {
       
   613 
       
   614     COMPONENT_TRACE( ( _T ( "TIsiKernelSend::CopyData entering, offset = 0x%x" ), aOffset ) );
       
   615     OstTraceExt2( TRACE_NORMAL, TISIKERNELSEND_COPYDATA, "TIsiKernelSend::CopyData - enter;aOffset=%u;aData=%x", aOffset, ( TUint )&( aData ) );
       
   616     
       
   617     TInt length( aData.Length() );
       
   618        
       
   619     ASSERT_RESET_ALWAYS( ( iBuffer.MaxLength() >= aOffset + length ), "KernelIsiMessage: OFFSET Invalid", KErrOverflow );
       
   620     
       
   621     if( iBuffer.Length() <= aOffset ) iBuffer.SetLength( aOffset + length );     
       
   622   
       
   623     ASSERT_RESET_ALWAYS( ( ( iBuffer.Length() - length ) >= aOffset ), "KernelIsiMessage: OFFSET Invalid", KErrOverflow );
       
   624     ASSERT_RESET_ALWAYS( ( iBuffer.Length() >= length ), "KernelIsiMessage: OFFSET Invalid", KErrOverflow );
       
   625        
       
   626     TRACE_ASSERT ( length > 0); // Length should be > 0
       
   627     
       
   628     // Add byte by byte starting from offset place until the whole data is set.
       
   629     for( TInt i( 0 ); i < length; i++ )
       
   630         {
       
   631         iBuffer[aOffset + i] = aData.Ptr()[ i ];
       
   632         }            
       
   633         
       
   634     COMPONENT_TRACE( ( _T ( "TIsiKernelSend::CopyData - return, offset = 0x%x, data length = 0x%x " ), aOffset, length ) );
       
   635     OstTraceExt2( TRACE_NORMAL, DUP2_TISIKERNELSEND_COPYDATA, "TIsiKernelSend::CopyData - return;aOffset=%hhu;data length=%hhd", aOffset, length );
       
   636         
       
   637     }
       
   638 
       
   639 // -----------------------------------------------------------------------------
       
   640 // TIsiKernelSend::TIsiKernelSend
       
   641 // -----------------------------------------------------------------------------
       
   642 EXPORT_C TIsiKernelSend::TIsiKernelSend
       
   643         (
       
   644         TDes8& aBuf,
       
   645         const TUint aLength
       
   646         )
       
   647         :TIsiKernel(),
       
   648         iBuffer( aBuf ),
       
   649         iFinalLength( aLength ) // this should be same as msg length
       
   650     {
       
   651 
       
   652     COMPONENT_TRACE( ( _T ( "TIsiKernelSend::TIsiKernelSend entering, aLength = 0x%x " ), aLength ) ) ;
       
   653 	OstTrace1( TRACE_NORMAL, TISIKERNELSEND_TISIKERNELSEND, "TIsiKernelSend::TIsiKernelSend - enter;aLength=%u", aLength );
       
   654 	
       
   655     // Length check
       
   656 	ASSERT_RESET_ALWAYS( ( iBuffer.MaxLength() >= aLength ), "KernelIsiMessage: invalid offset in constructor", EKernelIsiMessageInvalidOffset);
       
   657 
       
   658     // Set the message to contain zeros to it's length.
       
   659     iBuffer.FillZ( aLength );
       
   660 
       
   661     // Set the length to zero.
       
   662     iBuffer.Zero();
       
   663     
       
   664     COMPONENT_TRACE( ( _T ( "TIsiKernelSend::TIsiKernelSend - return. iFinalLength = 0x%x" ), iFinalLength ) ) ;
       
   665     OstTrace1( TRACE_NORMAL, DUP1_TISIKERNELSEND_TISIKERNELSEND, "TIsiKernelSend::TIsiKernelSend - return;iFinalLength=%u", iFinalLength );
       
   666     
       
   667     }
       
   668 
       
   669 // -----------------------------------------------------------------------------
       
   670 // TIsiKernelSend::TIsiKernelSend alternative constructor
       
   671 // -----------------------------------------------------------------------------
       
   672 EXPORT_C TIsiKernelSend::TIsiKernelSend
       
   673         (
       
   674         TDes8& aBuf
       
   675         )
       
   676         :TIsiKernel(),
       
   677         iBuffer( aBuf ),
       
   678         iFinalLength( 0 )
       
   679     {
       
   680 
       
   681     OstTrace0( TRACE_NORMAL, DUP2_TISIKERNELSEND_TISIKERNELSEND, "TIsiKernelSend::TIsiKernelSend constructor without length - enter" );
       
   682     COMPONENT_TRACE( ( _T ( "TIsiKernelSend::TIsiKernelSend constructor without length, entering" ) ) );
       
   683     
       
   684     // Set the message to contain zeros to it's max length.
       
   685     iBuffer.FillZ( iBuffer.MaxLength() );
       
   686 
       
   687     // Set the length to zero.
       
   688     iBuffer.Zero();
       
   689     
       
   690     OstTrace1( TRACE_NORMAL, DUP3_TISIKERNELSEND_TISIKERNELSEND, "TIsiKernelSend::TIsiKernelSend constructor without length - return;iFinalLength=%u", iFinalLength );
       
   691     COMPONENT_TRACE( ( _T ( "TIsiKernelSend::TIsiKernelSend constructor without length - return. iFinalLength = 0x%x" ), iFinalLength ) ) ;
       
   692     
       
   693     }
       
   694 
       
   695 // -----------------------------------------------------------------------------
       
   696 // TIsiKernelSend::Set16bit
       
   697 // -----------------------------------------------------------------------------
       
   698 EXPORT_C void TIsiKernelSend::Set16bit
       
   699         (
       
   700         const TUint aOffset,
       
   701         const TUint16 aData
       
   702         )
       
   703     {
       
   704     COMPONENT_TRACE( ( _T ( "TIsiKernelSend::Set16bit entering - offset = 0x%x, aData = 0x%x" ), aOffset, aData ) );
       
   705     OstTraceExt2( TRACE_NORMAL, TISIKERNELSEND_SET16BIT, "TIsiKernelSend::Set16bit - enter;aOffset=%u;aData=%hu", aOffset, aData );
       
   706     
       
   707     ASSERT_RESET_ALWAYS( ( iBuffer.MaxLength() >= aOffset + 2 ), "KernelIsiMessage: OFFSET Invalid", KErrOverflow );
       
   708 
       
   709     if( iBuffer.Length() <= aOffset ) iBuffer.SetLength( aOffset + 2 ); 
       
   710     
       
   711     ASSERT_RESET_ALWAYS( ( iBuffer.Length() -1 >= aOffset ), "KernelIsiMessage: OFFSET Invalid", KErrOverflow );
       
   712     
       
   713     TRACE_ASSERT ( aOffset % 2 == 0 ); // Invalid offset
       
   714     
       
   715     iBuffer[ aOffset ] = static_cast<TUint8>( (aData & 0xff00) >> 8);
       
   716     iBuffer[ aOffset + 1 ] = static_cast<TUint8>(aData & 0x00ff);
       
   717 
       
   718     COMPONENT_TRACE( ( _T ( "TIsiKernelSend::Set16bit - return, offset = 0x%x, aData = 0x%x" ), aOffset, aData ) );
       
   719     OstTraceExt2( TRACE_NORMAL, DUP1_TISIKERNELSEND_SET16BIT, "TIsiKernelSend::Set16bit - return;aOffset=%u;aData=%hu", aOffset, aData );
       
   720     
       
   721     }
       
   722 
       
   723 // -----------------------------------------------------------------------------
       
   724 // TIsiKernelSend::Set32bit
       
   725 // -----------------------------------------------------------------------------
       
   726 EXPORT_C void TIsiKernelSend::Set32bit
       
   727         (
       
   728         const TUint aOffset,
       
   729         const TUint32 aData
       
   730         )
       
   731     {
       
   732 
       
   733     COMPONENT_TRACE( ( _T ( "TIsiKernelSend::Set32bit entering - offset = 0x%x, aData = 0x%x" ), aOffset, aData ) );
       
   734     OstTraceExt2( TRACE_NORMAL, TISIKERNELSEND_SET32BIT, "TIsiKernelSend::Set32bit - enter;aOffset=%u;aData=%u", aOffset, ( TUint )( aData ) );
       
   735     
       
   736     ASSERT_RESET_ALWAYS( ( iBuffer.MaxLength() >= aOffset + 4  ), "KernelIsiMessage: OFFSET Invalid", KErrOverflow );  
       
   737 
       
   738     if( iBuffer.Length() <= aOffset ) iBuffer.SetLength( aOffset + 4 ); 
       
   739    
       
   740     ASSERT_RESET_ALWAYS( ( iBuffer.Length() -3 >= aOffset ), "KernelIsiMessage: OFFSET Invalid", KErrOverflow );
       
   741 
       
   742     TRACE_ASSERT ( aOffset % 4 == 0 ); // Invalid offset
       
   743 
       
   744     iBuffer[ aOffset ]     = static_cast<TUint8>( (aData & 0xff000000) >> 24);
       
   745     iBuffer[ aOffset + 1 ] = static_cast<TUint8>( (aData & 0x00ff0000) >> 16);
       
   746     iBuffer[ aOffset + 2 ] = static_cast<TUint8>( (aData & 0x0000ff00) >> 8);
       
   747     iBuffer[ aOffset + 3 ] = static_cast<TUint8>(aData & 0x000000ff);
       
   748 
       
   749     COMPONENT_TRACE( ( _T ( "TIsiKernelSend::Set32bit - return, offset = 0x%x, aData = 0x%x" ), aOffset, aData ) );
       
   750     OstTraceExt2( TRACE_NORMAL, DUP1_TISIKERNELSEND_SET32BIT, "TIsiKernelSend::Set32bit - return;aOffset=%u;aData=%u", aOffset, ( TUint )( aData ) );    
       
   751     }
       
   752 
       
   753 // -----------------------------------------------------------------------------
       
   754 // TIsiKernelSend::Set8bit
       
   755 // -----------------------------------------------------------------------------
       
   756 EXPORT_C void TIsiKernelSend::Set8bit
       
   757         (
       
   758         const TUint aOffset,
       
   759         const TUint8 aData
       
   760         )
       
   761     {
       
   762 
       
   763     COMPONENT_TRACE( ( _T ( "TIsiKernelSend::Set8bit entering - offset = 0x%x, aData = 0x%x" ), aOffset, aData ) );
       
   764     OstTraceExt2( TRACE_NORMAL, TISIKERNELSEND_SET8BIT, "TIsiKernelSend::Set8bit - enter;aOffset=%u;aData=%hhu", aOffset, aData );
       
   765     
       
   766     ASSERT_RESET_ALWAYS( ( iBuffer.MaxLength() >= aOffset + 1 ), "KernelIsiMessage: OFFSET Invalid", KErrOverflow );
       
   767     
       
   768     if( iBuffer.Length() <= aOffset ) iBuffer.SetLength( aOffset + 1 );
       
   769     
       
   770     ASSERT_RESET_ALWAYS( ( iBuffer.Length() >= aOffset ), "KernelIsiMessage: OFFSET Invalid", KErrOverflow );
       
   771   
       
   772     iBuffer[ aOffset ] = aData;    
       
   773 
       
   774     COMPONENT_TRACE( ( _T ( "TIsiKernelSend::Set8bit - return, offset = 0x%x, aData = 0x%x" ), aOffset, aData ) );
       
   775     OstTraceExt2( TRACE_NORMAL, DUP1_TISIKERNELSEND_SET8BIT, "TIsiKernelSend::Set8bit - return;aOffset=%u;aData=%hhu", aOffset, aData );
       
   776     
       
   777     }
       
   778 
       
   779 // -----------------------------------------------------------------------------
       
   780 // TIsiKernelSend::SetReceiverDevice
       
   781 // -----------------------------------------------------------------------------
       
   782 EXPORT_C void TIsiKernelSend::SetReceiverDevice
       
   783         (
       
   784         const TUint8 aReceiverDevice
       
   785         )
       
   786     {
       
   787 
       
   788     COMPONENT_TRACE( ( _T ( "TIsiKernelSend::SetReceiverDevice entering - receiverDevice = 0x%x" ), aReceiverDevice ) );
       
   789     OstTraceExt1( TRACE_NORMAL, TISIKERNELSEND_SETRECEIVERDEVICE, "TIsiKernelSend::SetReceiverDevice - enter;aReceiverDevice=%hhu", aReceiverDevice );
       
   790     
       
   791     //Check buffer length and given value
       
   792     ASSERT_RESET_ALWAYS( ( iBuffer.MaxLength() >= ISI_HEADER_OFFSET_MESSAGEID ), "KernelIsiMessage: OFFSET Invalid", KErrOverflow );
       
   793 
       
   794     if( iBuffer.Length() <= ISI_HEADER_OFFSET_RECEIVERDEVICE ) iBuffer.SetLength( ISI_HEADER_OFFSET_RECEIVERDEVICE + 1 );
       
   795     
       
   796     ASSERT_RESET_ALWAYS( ( iBuffer.Length() >= ISI_HEADER_OFFSET_RECEIVERDEVICE ), "KernelIsiMessage: OFFSET Invalid", KErrOverflow );
       
   797 
       
   798     iBuffer[ISI_HEADER_OFFSET_RECEIVERDEVICE] = SET_RECEIVER_DEV(iBuffer, aReceiverDevice);
       
   799         
       
   800     COMPONENT_TRACE( ( _T ( "TIsiKernelSend::SetReceiverDevice return - set receiverDevice = 0x%x "), iBuffer[ISI_HEADER_OFFSET_RECEIVERDEVICE] ) );
       
   801     OstTraceExt1( TRACE_NORMAL, DUP1_TISIKERNELSEND_SETRECEIVERDEVICE, "TIsiKernelSend::SetReceiverDevice - return;aReceiverDevice=%hhu", iBuffer[ISI_HEADER_OFFSET_RECEIVERDEVICE] );
       
   802     
       
   803     }
       
   804 
       
   805 // -----------------------------------------------------------------------------
       
   806 // TIsiKernelSend::SetSenderDevice
       
   807 // -----------------------------------------------------------------------------
       
   808 EXPORT_C void TIsiKernelSend::SetSenderDevice
       
   809         (
       
   810         const TUint8 aSenderDevice
       
   811         )
       
   812     {
       
   813 
       
   814     COMPONENT_TRACE( ( _T ( "TIsiKernelSend::SetSenderDevice entering - senderDevice = 0x%x" ), aSenderDevice ) );
       
   815     OstTraceExt1( TRACE_NORMAL, TISIKERNELSEND_SETSENDERDEVICE, "TIsiKernelSend::SetSenderDevice - enter;aSenderDevice=%hhu", aSenderDevice );
       
   816     
       
   817     //Check buffer length and given value
       
   818     ASSERT_RESET_ALWAYS( ( iBuffer.MaxLength() >= ISI_HEADER_OFFSET_MESSAGEID ), "KernelIsiMessage: OFFSET Invalid", KErrOverflow );
       
   819 
       
   820     if( iBuffer.Length() <= ISI_HEADER_OFFSET_SENDERDEVICE ) iBuffer.SetLength( ISI_HEADER_OFFSET_SENDERDEVICE + 1 );
       
   821     
       
   822     ASSERT_RESET_ALWAYS( ( iBuffer.Length() >= ISI_HEADER_OFFSET_SENDERDEVICE ), "KernelIsiMessage: OFFSET Invalid", KErrOverflow );
       
   823     iBuffer[ISI_HEADER_OFFSET_SENDERDEVICE] = SET_SENDER_DEV( iBuffer, aSenderDevice );
       
   824         
       
   825     COMPONENT_TRACE( ( _T ( "TIsiKernelSend::SetSenderDevice return - senderDevice = 0x%x "),  iBuffer[ISI_HEADER_OFFSET_SENDERDEVICE] ) );        
       
   826     OstTraceExt1( TRACE_NORMAL, DUP1_TISIKERNELSEND_SETSENDERDEVICE, "TIsiKernelSend::SetSenderDevice - return;aSenderDevice=%hhu", iBuffer[ISI_HEADER_OFFSET_SENDERDEVICE] );
       
   827     
       
   828     }
       
   829 
       
   830 // -----------------------------------------------------------------------------
       
   831 // TIsiKernelSend::SetReceiverObject
       
   832 // -----------------------------------------------------------------------------
       
   833 EXPORT_C void TIsiKernelSend::SetReceiverObject
       
   834         ( 
       
   835         const TUint16 aReceiverObject
       
   836         )
       
   837     {
       
   838 
       
   839     COMPONENT_TRACE( ( _T ( "TIsiKernelSend::SetReceiverObject entering- receiverObject= 0x%x" ), aReceiverObject ) );
       
   840     OstTraceExt1( TRACE_NORMAL, TISIKERNELSEND_SETRECEIVEROBJECT, "TIsiKernelSend::SetReceiverObject - enter;aReceiverObject=%hu", aReceiverObject );
       
   841     
       
   842     // Check buffer length and given value
       
   843     ASSERT_RESET_ALWAYS( ( iBuffer.MaxLength() >= ISI_HEADER_OFFSET_MESSAGEID ), "KernelIsiMessage: OFFSET Invalid", KErrOverflow );
       
   844     ASSERT_RESET_ALWAYS( ( aReceiverObject < 0x3FF ), "KernelIsiMessage: Invalid Receiverobject", KErrOverflow );
       
   845 
       
   846     if( iBuffer.Length() <= ISI_HEADER_OFFSET_RECEIVEROBJECT ) iBuffer.SetLength( ISI_HEADER_OFFSET_RECEIVEROBJECT + 1 );
       
   847     
       
   848     ASSERT_RESET_ALWAYS( ( iBuffer.Length() >= ISI_HEADER_OFFSET_RECEIVEROBJECT ), "KernelIsiMessage: OFFSET Invalid", KErrOverflow );
       
   849 
       
   850     SET_RECEIVER_OBJ(iBuffer, aReceiverObject);
       
   851 
       
   852     COMPONENT_TRACE( ( _T ( "TIsiKernelSend::SetReceiverObject - set receiverDevice = 0x%x "), iBuffer[ISI_HEADER_OFFSET_RECEIVERDEVICE] ) );    
       
   853     OstTraceExt1( TRACE_NORMAL, DUP1_TISIKERNELSEND_SETRECEIVEROBJECT, "TIsiKernelSend::SetReceiverObject;receiverDevice=%hhu", iBuffer[ISI_HEADER_OFFSET_RECEIVERDEVICE] );
       
   854 
       
   855     COMPONENT_TRACE( ( _T ( "TIsiKernelSend::SetReceiverObject return - receiverObject = 0x%x "), iBuffer[ISI_HEADER_OFFSET_RECEIVEROBJECT] ) );
       
   856     OstTraceExt1( TRACE_NORMAL, DUP2_TISIKERNELSEND_SETRECEIVEROBJECT, "TIsiKernelSend::SetReceiverObject - return;receiverObject=%hhu", iBuffer[ISI_HEADER_OFFSET_RECEIVEROBJECT] );
       
   857     
       
   858     }
       
   859 
       
   860 // -----------------------------------------------------------------------------
       
   861 // TIsiKernelSend::SetSenderObject
       
   862 // -----------------------------------------------------------------------------
       
   863 EXPORT_C void TIsiKernelSend::SetSenderObject
       
   864         ( 
       
   865         const TUint16 aSenderObject
       
   866         )
       
   867     {
       
   868 
       
   869     COMPONENT_TRACE( ( _T ( "TIsiKernelSend::SetSenderObject entering- senderObject= 0x%x" ), aSenderObject ) );
       
   870     OstTraceExt1( TRACE_NORMAL, TISIKERNELSEND_SETSENDEROBJECT, "TIsiKernelSend::SetSenderObject - enter;aSenderObject=%hu", aSenderObject );
       
   871     
       
   872     // Check buffer length and given value
       
   873     ASSERT_RESET_ALWAYS( ( iBuffer.MaxLength() >= ISI_HEADER_OFFSET_MESSAGEID ), "KernelIsiMessage: OFFSET Invalid", KErrOverflow );
       
   874     ASSERT_RESET_ALWAYS( ( aSenderObject < 0x3FF ), "KernelIsiMessage: Invalid SenderObject ", KErrOverflow );
       
   875 
       
   876     if( iBuffer.Length() <= ISI_HEADER_OFFSET_SENDEROBJECT ) iBuffer.SetLength( ISI_HEADER_OFFSET_SENDEROBJECT + 1 );
       
   877     
       
   878     ASSERT_RESET_ALWAYS( ( iBuffer.Length() >= ISI_HEADER_OFFSET_SENDEROBJECT ), "KernelIsiMessage: OFFSET Invalid", KErrOverflow );
       
   879 
       
   880     SET_SENDER_OBJ(iBuffer, aSenderObject);
       
   881 
       
   882     COMPONENT_TRACE( ( _T ( "TIsiKernelSend::SetSenderObject -  senderDevice = 0x%x" ), iBuffer[ISI_HEADER_OFFSET_SENDERDEVICE] ) );
       
   883     OstTraceExt1( TRACE_NORMAL, DUP1_TISIKERNELSEND_SETSENDEROBJECT, "TIsiKernelSend::SetSenderObject;senderDevice=%hu", iBuffer[ISI_HEADER_OFFSET_SENDERDEVICE] );
       
   884 
       
   885     COMPONENT_TRACE( ( _T ( "TIsiKernelSend::SetSenderObject return - senderObject = 0x%x" ), iBuffer[ISI_HEADER_OFFSET_SENDEROBJECT] ) );        
       
   886     OstTraceExt1( TRACE_NORMAL, DUP2_TISIKERNELSEND_SETSENDEROBJECT, "TIsiKernelSend::SetSenderObject - return;senderObject=%hu", iBuffer[ISI_HEADER_OFFSET_SENDEROBJECT] );
       
   887     
       
   888     }
       
   889 
       
   890 // -----------------------------------------------------------------------------
       
   891 // TIsiKernelSend::SetExtendedResourceId
       
   892 // -----------------------------------------------------------------------------
       
   893 EXPORT_C void TIsiKernelSend::SetExtendedResourceId
       
   894         (
       
   895         const TUint32 aExtendedResourceId
       
   896         )
       
   897     {
       
   898 
       
   899     COMPONENT_TRACE( ( _T ( "TIsiKernelSend::SetExtendedResourceId entering - extendedResourceId = 0x%x" ), aExtendedResourceId ) );
       
   900     OstTrace1( TRACE_NORMAL, TISIKERNELSEND_SETEXTENDEDRESOURCEID, "TIsiKernelSend::SetExtendedResourceId - enter;aExtendedResourceId=%u", ( TUint )( aExtendedResourceId ) );
       
   901     
       
   902     TUint8 prefix( aExtendedResourceId & 0xFF );
       
   903                            
       
   904     //Check that extended resource id available and not reading over the buffer
       
   905     ASSERT_RESET_ALWAYS( ( iBuffer.MaxLength() >= ISI_HEADER_OFFSET_SUBTYPE + 1 ), "KernelIsiMessage: OFFSET Invalid", KErrOverflow );
       
   906     ASSERT_RESET_ALWAYS( ( aExtendedResourceId < 0xFFFFFF ), "KernelIsiMessage: Invalid ExtendedResourceId ", KErrOverflow );
       
   907     ASSERT_RESET_ALWAYS( ( prefix == PN_PREFIX ), "KernelIsiMessage: Invalid Pefix ", KErrOverflow );
       
   908 
       
   909     if( iBuffer.Length() <= ISI_HEADER_OFFSET_SUBTYPE ) iBuffer.SetLength( ISI_HEADER_OFFSET_SUBTYPE + 1 );
       
   910     
       
   911     ASSERT_RESET_ALWAYS( ( iBuffer.Length() >= ISI_HEADER_OFFSET_SUBTYPE ), "KernelIsiMessage: OFFSET Invalid", KErrOverflow );
       
   912             
       
   913     TUint8 type = (( aExtendedResourceId >> 8 ) & 0xFF );       
       
   914     TUint8 subType = (( aExtendedResourceId >> 16 ) & 0xFF );                                       
       
   915 
       
   916     iBuffer[ ISI_HEADER_OFFSET_TYPE ] = type;
       
   917     iBuffer[ ISI_HEADER_OFFSET_SUBTYPE ] = subType; 
       
   918     iBuffer[ ISI_HEADER_OFFSET_RESOURCEID ] = prefix;
       
   919                 
       
   920     COMPONENT_TRACE( ( _T ( "TIsiKernelSend::SetExtendedResourceId return- type = 0x%x, subtype = 0x%x, prefix = 0x%x" ), type, subType, prefix ) );        
       
   921     OstTraceExt3( TRACE_NORMAL, DUP1_TISIKERNELSEND_SETEXTENDEDRESOURCEID, "TIsiKernelSend::SetExtendedResourceId - return;type=%hhu;subType=%hhu;prefix=%hhu", type, subType, prefix );
       
   922     
       
   923     }
       
   924 
       
   925 // -----------------------------------------------------------------------------
       
   926 // TIsiSubBlock::TIsiSubBlock
       
   927 // -----------------------------------------------------------------------------
       
   928 EXPORT_C TIsiKernelSubBlock::TIsiKernelSubBlock
       
   929         (
       
   930         TDes8& aMsg, 
       
   931         TUint16 aSbId,
       
   932         const TSubBlockType aType
       
   933         ):  iSubBlockStart( aMsg.Length() ),
       
   934             iMsg(aMsg),
       
   935             iSubBlockType(aType)
       
   936     {
       
   937     COMPONENT_TRACE( ( _T ( "TIsiKernelSubBlock::TIsiKernelSubBlock entering - sbId = 0x%x, subBlockType = %d" ), aSbId, aType ) );       
       
   938     OstTraceExt2( TRACE_NORMAL, DUP1_TISIKERNELSUBBLOCK_TISIKERNELSUBBLOCK, "TIsiKernelSubBlock::TIsiKernelSubBlock - enter;aSbId=%hu;subblockType=%x", aSbId, ( TUint )&( aType ) );
       
   939     
       
   940     
       
   941     TUint8 byte1(0x00);
       
   942     TUint8 byte2(0x00);
       
   943      
       
   944     switch( iSubBlockType )
       
   945         {
       
   946         case EIsiSubBlockTypeId8Len8:
       
   947             {
       
   948             iMsg.Append( aSbId ); //sbId 8 bit
       
   949             iMsg.Append( 0x00); // length 8 bit
       
   950             break;
       
   951             }
       
   952         case EIsiSubBlockTypeId8Len16:
       
   953             {
       
   954             iMsg.Append( aSbId );
       
   955             iMsg.Append( 0x00 ); //filler
       
   956             iMsg.Append( 0x00 ); // length 16 bit
       
   957             iMsg.Append( 0x00 ); // length 16 bit
       
   958             break;
       
   959             }
       
   960         case EIsiSubBlockTypeId16Len8:
       
   961             {
       
   962             byte1 = TUint8( ( aSbId & 0xff00 ) >> 8 );
       
   963             byte2 = TUint8( aSbId & 0x00ff ); 
       
   964             iMsg.Append(byte1); // sbId 16 bit
       
   965             iMsg.Append(byte2); // sbId 16 bit
       
   966             iMsg.Append(0x00); // lenght 8 bit
       
   967             break;
       
   968             }
       
   969         case EIsiSubBlockTypeId16Len16:
       
   970             {
       
   971             byte1 = TUint8( ( aSbId & 0xff00 ) >> 8 );
       
   972             byte2 = TUint8( aSbId & 0x00ff );
       
   973             iMsg.Append(byte1); // sbId 16 bit
       
   974             iMsg.Append(byte2); // sbId 16 bit
       
   975             iMsg.Append(0x00); // lenght 16 bit
       
   976             iMsg.Append(0x00); // length 16 bit
       
   977             break;
       
   978             }
       
   979         case EIsiSubBlockTypeId8Len32:
       
   980             {
       
   981             iMsg.Append(aSbId); // sbId 8 bit
       
   982             iMsg.Append(0x00); // filler
       
   983             iMsg.Append(0x00); // filler 
       
   984             iMsg.Append(0x00); // filler 
       
   985             iMsg.Append(0x00); // length 32 bit 
       
   986             iMsg.Append(0x00); // length 32 bit 
       
   987             iMsg.Append(0x00); // length 32 bit 
       
   988             iMsg.Append(0x00); // length 32 bit 
       
   989             break;
       
   990             }
       
   991         default:
       
   992             {
       
   993             ASSERT_RESET_ALWAYS( 0, "KernelIsiMessage: Invalid subblock type", EKernelIsiMessageInvalidValue);
       
   994             break;
       
   995             }
       
   996         }
       
   997 
       
   998     COMPONENT_TRACE( ( _T ( "TIsiKernelSubBlock::TIsiKernelSubBlock - return" ) ) );       
       
   999     OstTrace0( TRACE_NORMAL, DUP2_TISIKERNELSUBBLOCK_TISIKERNELSUBBLOCK, "TIsiKernelSubBlock::TIsiKernelSubBlock - return" );
       
  1000     
       
  1001     }
       
  1002 
       
  1003 // -----------------------------------------------------------------------------
       
  1004 // TIsiKernelSubBlock::CompleteSubBlock
       
  1005 // -----------------------------------------------------------------------------
       
  1006 EXPORT_C TDes8& TIsiKernelSubBlock::CompleteSubBlock
       
  1007         (
       
  1008         ) 
       
  1009     {
       
  1010     COMPONENT_TRACE( ( _T ( "TIsiKernelSubBlock::CompleteSubBlock" ) ) );       
       
  1011     OstTrace0( TRACE_NORMAL, TISIKERNELSUBBLOCK_COMPLETESUBBLOCK, "TIsiKernelSubBlock::CompleteSubBlock - enter" );
       
  1012     
       
  1013     TUint8 byte1( 0x00 );
       
  1014     TUint8 byte2( 0x00 );
       
  1015     TUint8 byte3( 0x00 );
       
  1016     TUint8 byte4( 0x00 );
       
  1017     TUint16 length16(0x0000);
       
  1018     TUint32 length32(0x00000000);
       
  1019 
       
  1020     // Make sb length divisible by 4
       
  1021     while( (iMsg.Length() -iSubBlockStart ) % 4 )
       
  1022         {
       
  1023         iMsg.Append( KPaddingByte );
       
  1024         }
       
  1025 
       
  1026     // Update subblock length
       
  1027     switch( iSubBlockType )
       
  1028         {
       
  1029         case EIsiSubBlockTypeId8Len8:
       
  1030             {
       
  1031             iMsg[iSubBlockStart+1] = TUint8( iMsg.Length()-iSubBlockStart );
       
  1032             break;
       
  1033             }
       
  1034         case EIsiSubBlockTypeId8Len16:
       
  1035             {
       
  1036             length16 = TUint16( iMsg.Length()-iSubBlockStart );
       
  1037             byte1 = TUint8( ( length16 & 0xff00 ) >> 8 );
       
  1038             byte2 = TUint8( length16 & 0x00ff );
       
  1039             iMsg[iSubBlockStart+2] = byte1;
       
  1040             iMsg[iSubBlockStart+3] = byte2;
       
  1041             break;
       
  1042             }
       
  1043         case EIsiSubBlockTypeId16Len8:
       
  1044             {
       
  1045             iMsg[iSubBlockStart+2] = TUint8( iMsg.Length()-iSubBlockStart );
       
  1046             break;
       
  1047             }
       
  1048         case EIsiSubBlockTypeId16Len16:
       
  1049             {
       
  1050             length16 = TUint16( iMsg.Length()-iSubBlockStart );
       
  1051             byte1 = TUint8( ( length16 & 0xff00 ) >> 8 );
       
  1052             byte2 = TUint8( length16 & 0x00ff );
       
  1053             iMsg[iSubBlockStart+2] = byte1;
       
  1054             iMsg[iSubBlockStart+3] = byte2;
       
  1055             break;
       
  1056             }
       
  1057         case EIsiSubBlockTypeId8Len32:
       
  1058             {
       
  1059             length32 = TUint32( iMsg.Length()-iSubBlockStart );
       
  1060             byte1 = TUint8( ( length32 & 0xff000000 ) >> 24 );
       
  1061             byte2 = TUint8( ( length32 & 0x00ff0000 ) >> 16 );
       
  1062             byte3 = TUint8( ( length32 & 0x0000ff00 ) >> 8 );
       
  1063             byte4 = TUint8( length32 & 0x000000ff );
       
  1064             iMsg[iSubBlockStart+4] = byte1;
       
  1065             iMsg[iSubBlockStart+5] = byte2;
       
  1066             iMsg[iSubBlockStart+6] = byte3;
       
  1067             iMsg[iSubBlockStart+7] = byte4;
       
  1068             break;
       
  1069             }
       
  1070         default:
       
  1071             {
       
  1072             ASSERT_RESET_ALWAYS( 0, "KernelIsiMessage: Invalid subblock type", EKernelIsiMessageInvalidValue);
       
  1073             break;
       
  1074             }
       
  1075         }
       
  1076         
       
  1077     COMPONENT_TRACE( ( _T ( "TIsiKernelSubBlock::CompleteSubBlock - return" ) ) );       
       
  1078     OstTrace0( TRACE_NORMAL, DUP1_TISIKERNELSUBBLOCK_COMPLETESUBBLOCK, "TIsiKernelSubBlock::CompleteSubBlock - return" );
       
  1079     
       
  1080     return iMsg;
       
  1081 
       
  1082     }
       
  1083 
       
  1084 // ---------------------------------------------------------
       
  1085 // DECLARE_STANDARD_EXTENSION
       
  1086 //
       
  1087 // The entrypoint of KernelIsiMessage
       
  1088 //
       
  1089 // ---------------------------------------------------------
       
  1090 DECLARE_STANDARD_EXTENSION()
       
  1091     {
       
  1092     COMPONENT_TRACE( ( _T( "KERNELISIMESSAGE ENTERING" ) ) );
       
  1093     OstTrace0( TRACE_NORMAL, _DECLARE_STANDARD_EXTENSION, "KernelIsiMessage entering::DECLARE_STANDARD_EXTENSION" );
       
  1094     
       
  1095     COMPONENT_TRACE( ( _T( "KERNELISIMESSAGE RETURN" ) ) );
       
  1096     OstTrace0( TRACE_NORMAL, DUP1__DECLARE_STANDARD_EXTENSION, "KernelIsiMessage returning::DECLARE_STANDARD_EXTENSION" );
       
  1097     
       
  1098     return KErrNone;
       
  1099     }
       
  1100 
       
  1101 //end of file