bluetoothengine/headsetsimulator/core/src/Server/hsaudioserver.cpp
branchheadsetsimulator
changeset 60 90dbfc0435e3
equal deleted inserted replaced
59:02103bf20ee5 60:90dbfc0435e3
       
     1 /*
       
     2  * Component Name: Headset Simulator
       
     3  * Author: Comarch S.A.
       
     4  * Version: 1.0
       
     5  * Copyright (c) 2010 Comarch S.A.
       
     6  *  
       
     7  * This Software is submitted by Comarch S.A. to Symbian Foundation Limited on 
       
     8  * the basis of the Member Contribution Agreement entered between Comarch S.A. 
       
     9  * and Symbian Foundation Limited on 5th June 2009 (“Agreement”) and may be 
       
    10  * used only in accordance with the terms and conditions of the Agreement. 
       
    11  * Any other usage, duplication or redistribution of this Software is not 
       
    12  * allowed without written permission of Comarch S.A.
       
    13  * 
       
    14  */
       
    15 
       
    16 #include "hsaudioserver.h"
       
    17 #include "debug.h"
       
    18 
       
    19 CHsAudioServer* CHsAudioServer::NewL( RSocketServ& aSocketServ,
       
    20         TBool aPullAudio )
       
    21     {
       
    22     CHsAudioServer* self = CHsAudioServer::NewLC( aSocketServ, aPullAudio );
       
    23     CleanupStack::Pop( self );
       
    24     return self;
       
    25     }
       
    26 
       
    27 CHsAudioServer* CHsAudioServer::NewLC( RSocketServ& aSocketServ,
       
    28         TBool aPullAudio )
       
    29     {
       
    30     CHsAudioServer* self = new ( ELeave ) CHsAudioServer( aSocketServ,
       
    31             aPullAudio );
       
    32     CleanupStack::PushL( self );
       
    33     self->ConstructL();
       
    34     return self;
       
    35     }
       
    36 
       
    37 CHsAudioServer::~CHsAudioServer()
       
    38     {
       
    39 
       
    40     if ( iSCOSocket )
       
    41         {
       
    42         delete iSCOSocket;
       
    43         }
       
    44     }
       
    45 
       
    46 void CHsAudioServer::ListenL()
       
    47     {
       
    48     TRACE_FUNC_ENTRY
       
    49 
       
    50     if ( iListening )
       
    51         {
       
    52         User::Leave( KErrInUse );
       
    53         }
       
    54     if ( iSCOSocket )
       
    55         {
       
    56         delete iSCOSocket;
       
    57         iSCOSocket = NULL;
       
    58         }
       
    59     iSCOSocket = CBluetoothSynchronousLink::NewL( *this, iSServ );
       
    60 
       
    61     User::LeaveIfNull( iSCOSocket );
       
    62 
       
    63     User::LeaveIfError( iSCOSocket->AcceptConnection( iAcceptedPackets ) );
       
    64 
       
    65     TRACE_FUNC_EXIT
       
    66     }
       
    67 
       
    68 void CHsAudioServer::ConnectL( const TBTDevAddr &aAddr )
       
    69     {
       
    70     TRACE_FUNC_ENTRY
       
    71 
       
    72     if ( iConnected )
       
    73         {
       
    74         User::Leave( KErrInUse );
       
    75         }
       
    76     if ( iSCOSocket )
       
    77         {
       
    78         delete iSCOSocket;
       
    79         iSCOSocket = NULL;
       
    80         }
       
    81     iSCOSocket = CBluetoothSynchronousLink::NewL( *this, iSServ );
       
    82 
       
    83     User::LeaveIfNull( iSCOSocket );
       
    84 
       
    85     iAddr = aAddr;
       
    86     iSCOSocket->SetupConnection( aAddr, iAcceptedPackets );
       
    87 
       
    88     TRACE_FUNC_EXIT
       
    89     }
       
    90 
       
    91 void CHsAudioServer::Disconnect()
       
    92     {
       
    93     TRACE_FUNC_ENTRY
       
    94 
       
    95     if ( iSCOSocket && iConnected )
       
    96         {
       
    97         iSCOSocket->CancelReceive();
       
    98         iSCOSocket->CancelSend();
       
    99         iSCOSocket->Disconnect();
       
   100         delete iSCOSocket;
       
   101         iSCOSocket = NULL;
       
   102         iConnected = EFalse;
       
   103         iListening = EFalse;
       
   104 
       
   105         ListenL();
       
   106         }
       
   107 
       
   108     TRACE_FUNC_EXIT
       
   109     }
       
   110 
       
   111 void CHsAudioServer::Shutdown()
       
   112     {
       
   113     TRACE_FUNC_ENTRY
       
   114 
       
   115     if ( iSCOSocket )
       
   116         {
       
   117         if ( iListening )
       
   118             {
       
   119             iSCOSocket->CancelAccept();
       
   120             }
       
   121         delete iSCOSocket;
       
   122         iSCOSocket = NULL;
       
   123         iListening = EFalse;
       
   124         iConnected = EFalse;
       
   125         }
       
   126 
       
   127     TRACE_FUNC_EXIT
       
   128     }
       
   129 
       
   130 void CHsAudioServer::SetPullAudio( TBool aPullAudio )
       
   131     {
       
   132     iPullAudio = aPullAudio;
       
   133     }
       
   134 
       
   135 TBool CHsAudioServer::IsConnected()
       
   136     {
       
   137     return iConnected;
       
   138     }
       
   139 
       
   140 TBool CHsAudioServer::IsListen()
       
   141     {
       
   142     return iListening;
       
   143     }
       
   144 
       
   145 CHsAudioServer::CHsAudioServer( RSocketServ& aSocketServ, TBool aPullAudio ) :
       
   146     iSServ( aSocketServ ), iAcceptedPackets( EAnySCOPacket ), iListening(
       
   147             EFalse ), iPullAudio( aPullAudio )
       
   148     {
       
   149 
       
   150     }
       
   151 
       
   152 void CHsAudioServer::ConstructL()
       
   153     {
       
   154 
       
   155     }
       
   156 
       
   157 void CHsAudioServer::HandleSetupConnectionCompleteL( TInt aErr )
       
   158     {
       
   159     TRACE_FUNC_ENTRY
       
   160     TRACE_INFO( ( _L("aErr = %d"), aErr) );
       
   161     iConnected = ETrue;
       
   162     iListening = EFalse;
       
   163     iSCOSocket->AcceptConnection( TBTSyncPackets( iAcceptedPackets ) );
       
   164 
       
   165     if ( aErr == KErrNone && iPullAudio )
       
   166         {
       
   167         User::LeaveIfError( iSCOSocket->Receive( iReceiveBuffer ) );
       
   168         }
       
   169 
       
   170     TRACE_FUNC_EXIT
       
   171 
       
   172     }
       
   173 
       
   174 void CHsAudioServer::HandleDisconnectionCompleteL( TInt aErr )
       
   175     {
       
   176     TRACE_FUNC_ENTRY
       
   177     TRACE_INFO( ( _L("aErr = %d"), aErr) );
       
   178     iConnected = EFalse;
       
   179     iListening = ETrue;
       
   180     iSCOSocket->AcceptConnection( TBTSyncPackets( iAcceptedPackets ) );
       
   181 
       
   182     TRACE_FUNC_EXIT
       
   183     }
       
   184 void CHsAudioServer::HandleAcceptConnectionCompleteL( TInt aErr )
       
   185     {
       
   186     TRACE_FUNC_ENTRY
       
   187     TRACE_INFO( ( _L("aErr = %d"), aErr) );
       
   188     iConnected = ETrue;
       
   189     iListening = EFalse;
       
   190 
       
   191     if ( aErr == KErrNone && iPullAudio && iSCOSocket )
       
   192         {
       
   193         User::LeaveIfError( iSCOSocket->Receive( iReceiveBuffer ) );
       
   194         }
       
   195 
       
   196     TRACE_FUNC_EXIT
       
   197     }
       
   198 
       
   199 void CHsAudioServer::HandleSendCompleteL( TInt aErr )
       
   200     {
       
   201     TRACE_FUNC_ENTRY
       
   202     TRACE_INFO( ( _L("aErr = %d"), aErr) );
       
   203 
       
   204     if ( iPullAudio )
       
   205         {
       
   206         User::LeaveIfError( iSCOSocket->Receive( iReceiveBuffer ) );
       
   207         }
       
   208 
       
   209     TRACE_FUNC_EXIT
       
   210     }
       
   211 void CHsAudioServer::HandleReceiveCompleteL( TInt aErr )
       
   212     {
       
   213     TRACE_FUNC_ENTRY
       
   214     TRACE_INFO( ( _L("aErr = %d"), aErr) );
       
   215 
       
   216     if ( iPullAudio && aErr != KErrNone )
       
   217         {
       
   218         User::LeaveIfError( iSCOSocket->Receive( iReceiveBuffer ) );
       
   219 
       
   220         }
       
   221     if ( aErr == KErrDisconnected )
       
   222         {
       
   223         Disconnect();
       
   224         }
       
   225 
       
   226     TRACE_FUNC_EXIT
       
   227     }