atext/client/src/atextcommon.cpp
changeset 0 29b1cd4cb562
child 1 b4a7eebaaebf
equal deleted inserted replaced
-1:000000000000 0:29b1cd4cb562
       
     1 /*
       
     2 * Copyright (c) 2008 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 "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:  Client side interface of ATEXT common functionality
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 #include <atextcommon.h>
       
    20 #include "atextclientsrvcommon.h"
       
    21 #include "atext_interfaceuid.h"
       
    22 #include "debug.h"
       
    23 
       
    24 _LIT( KATExtCommonSrvExe, "atextcommon.exe" );
       
    25 
       
    26 const TUid KATExtSrvUid3 = { 0x2001CBEC };
       
    27 
       
    28 static TInt StartServer();
       
    29 
       
    30 // ---------------------------------------------------------------------------
       
    31 // Connects to ATEXT server and creates a new session
       
    32 // ---------------------------------------------------------------------------
       
    33 //
       
    34 EXPORT_C TInt RATExtCommon::Connect( const TDesC8& aName )
       
    35     {
       
    36     TRACE_FUNC_ENTRY
       
    37     TVersion version( KCommonServerMajorVersionNumber,
       
    38                       KCommonServerMinorVersionNumber,
       
    39                       KCommonServerBuildVersionNumber );
       
    40     TInt retVal = CreateSession( KATExtSrvName, version );
       
    41     if ( retVal!=KErrNone && retVal!=KErrAlreadyExists )
       
    42         {
       
    43         retVal = StartServer();
       
    44         if ( retVal==KErrNone || retVal==KErrAlreadyExists )
       
    45             {
       
    46             retVal = CreateSession( KATExtSrvName, version );
       
    47             }
       
    48         }
       
    49     if ( retVal==KErrNone || retVal==KErrAlreadyExists )
       
    50         {
       
    51         retVal = SendReceive( EATExtSetCommonInterface, TIpcArgs(&aName) );
       
    52         }
       
    53     if ( retVal != KErrNone )
       
    54         {
       
    55         Close();
       
    56         }
       
    57     TRACE_FUNC_EXIT
       
    58     return KErrNone;
       
    59     }
       
    60 
       
    61 // ---------------------------------------------------------------------------
       
    62 // Synchronously closes the session
       
    63 // Optional: client can do either Close() or SynchronousClose()+Close()
       
    64 // ---------------------------------------------------------------------------
       
    65 //
       
    66 EXPORT_C TInt RATExtCommon::SynchronousClose()
       
    67     {
       
    68     TRACE_FUNC_ENTRY
       
    69     if ( !Handle() )
       
    70         {
       
    71         TRACE_FUNC_EXIT
       
    72         return KErrBadHandle;
       
    73         }
       
    74     TInt retVal = SendReceive( EATExtSynchronousClose );
       
    75     TRACE_FUNC_EXIT
       
    76     return retVal;
       
    77     }
       
    78 
       
    79 // ---------------------------------------------------------------------------
       
    80 // Gets current mode status
       
    81 // ---------------------------------------------------------------------------
       
    82 //
       
    83 EXPORT_C TInt RATExtCommon::GetMode( TUint& aMask, TUint& aMode )
       
    84     {
       
    85     TRACE_FUNC_ENTRY
       
    86     if ( !Handle() )
       
    87         {
       
    88         TRACE_FUNC_EXIT
       
    89         return KErrBadHandle;
       
    90         }
       
    91     TPckg<TUint> maskPckg( aMask );
       
    92     TPckg<TUint> modePckg( aMode );
       
    93     TInt retVal = SendReceive( EATExtGetMode, TIpcArgs(&maskPckg,&modePckg) );
       
    94     TRACE_FUNC_EXIT
       
    95     return retVal;
       
    96     }
       
    97 
       
    98 // ---------------------------------------------------------------------------
       
    99 // Receives mode status change
       
   100 // ---------------------------------------------------------------------------
       
   101 //
       
   102 EXPORT_C TInt RATExtCommon::ReceiveModeStatusChange( TRequestStatus& aStatus,
       
   103                                                      TPckg<TUint>& aMode )
       
   104     {
       
   105     TRACE_FUNC_ENTRY
       
   106     if ( !Handle() )
       
   107         {
       
   108         TRequestStatus* status = &aStatus;
       
   109         aStatus = KRequestPending;
       
   110         User::RequestComplete( status, KErrBadHandle );
       
   111         TRACE_FUNC_EXIT
       
   112         return KErrBadHandle;
       
   113         }
       
   114     SendReceive( EATExtReceiveModeStatusChange, TIpcArgs(&aMode), aStatus );
       
   115     TRACE_FUNC_EXIT
       
   116     return KErrNone;
       
   117     }
       
   118 
       
   119 // ---------------------------------------------------------------------------
       
   120 // Cancels a pending receiving request
       
   121 // ---------------------------------------------------------------------------
       
   122 //
       
   123 EXPORT_C TInt RATExtCommon::CancelReceiveModeStatusChange()
       
   124     {
       
   125     TRACE_FUNC_ENTRY
       
   126     if ( !Handle() )
       
   127         {
       
   128         TRACE_FUNC_EXIT
       
   129         return KErrBadHandle;
       
   130         }
       
   131     TInt retVal = SendReceive( EATExtCancelReceiveModeStatusChange );
       
   132     TRACE_FUNC_EXIT
       
   133     return retVal;
       
   134     }
       
   135 
       
   136 // ---------------------------------------------------------------------------
       
   137 // Gets current NVRAM status
       
   138 // ---------------------------------------------------------------------------
       
   139 //
       
   140 EXPORT_C TInt RATExtCommon::GetNvramStatus(
       
   141     TBuf8<KDefaultNvramBufLength>& aNvram )
       
   142     {
       
   143     TRACE_FUNC_ENTRY
       
   144     if ( !Handle() )
       
   145         {
       
   146         TRACE_FUNC_EXIT
       
   147         return KErrBadHandle;
       
   148         }
       
   149     TInt retVal = SendReceive( EATExtGetNvramStatus,
       
   150                                TIpcArgs(&aNvram) );
       
   151     TRACE_FUNC_EXIT
       
   152     return retVal;
       
   153     }
       
   154 
       
   155 // ---------------------------------------------------------------------------
       
   156 // Receives NVRAM status change
       
   157 // ---------------------------------------------------------------------------
       
   158 //
       
   159 EXPORT_C TInt RATExtCommon::ReceiveNvramStatusChange(
       
   160     TRequestStatus& aStatus,
       
   161     TBuf8<KDefaultNvramBufLength>& aNvram )
       
   162     {
       
   163     TRACE_FUNC_ENTRY
       
   164     if ( !Handle() )
       
   165         {
       
   166         TRequestStatus* status = &aStatus;
       
   167         aStatus = KRequestPending;
       
   168         User::RequestComplete( status, KErrBadHandle );
       
   169         TRACE_FUNC_EXIT
       
   170         return KErrBadHandle;
       
   171         }
       
   172     SendReceive( EATExtReceiveNvramStatusChange,
       
   173                  TIpcArgs(&aNvram),
       
   174                  aStatus );
       
   175     TRACE_FUNC_EXIT
       
   176     return KErrNone;
       
   177     }
       
   178 
       
   179 // ---------------------------------------------------------------------------
       
   180 // Cancels a pending NVRAM receive request
       
   181 // ---------------------------------------------------------------------------
       
   182 //
       
   183 EXPORT_C TInt RATExtCommon::CancelReceiveNvramStatusChange()
       
   184     {
       
   185     TRACE_FUNC_ENTRY
       
   186     if ( !Handle() )
       
   187         {
       
   188         TRACE_FUNC_EXIT
       
   189         return KErrBadHandle;
       
   190         }
       
   191     TInt retVal = SendReceive( EATExtCancelReceiveNvramStatusChange );
       
   192     TRACE_FUNC_EXIT
       
   193     return retVal;
       
   194     }
       
   195 
       
   196 // ---------------------------------------------------------------------------
       
   197 // Starts the server
       
   198 // ---------------------------------------------------------------------------
       
   199 //
       
   200 TInt StartServer()
       
   201     {
       
   202     TRACE_STATIC_FUNC
       
   203     const TUidType serverUid( KNullUid, KNullUid, KATExtSrvUid3 );
       
   204     RProcess server;
       
   205     TInt retTemp = server.Create( KATExtCommonSrvExe, KNullDesC, serverUid );
       
   206     server.SetPriority( EPriorityHigh );
       
   207     if ( retTemp != KErrNone )
       
   208         {
       
   209         return retTemp;
       
   210         }
       
   211     TRequestStatus status;
       
   212     server.Rendezvous( status );
       
   213     if ( status != KRequestPending )
       
   214         {
       
   215         server.Kill( 0 );
       
   216         }
       
   217     else
       
   218         {
       
   219         server.Resume();
       
   220         }
       
   221     User::WaitForRequest( status );
       
   222     TRACE_INFO((_L("Server started, code %d"), status.Int()))
       
   223     retTemp = ( server.ExitType() == EExitPanic ) ? KErrGeneral : status.Int();
       
   224     server.Close();
       
   225     return retTemp;
       
   226     }