diff -r fa67e03b87df -r 6295dc2169f3 adaptationlayer/modematadaptation/modematcontroller_exe/src/cmodemathandler.cpp --- a/adaptationlayer/modematadaptation/modematcontroller_exe/src/cmodemathandler.cpp Wed Feb 17 13:58:55 2010 +0200 +++ b/adaptationlayer/modematadaptation/modematcontroller_exe/src/cmodemathandler.cpp Wed Apr 21 14:29:55 2010 +0300 @@ -23,9 +23,9 @@ #include #ifndef NCP_COMMON_BRIDGE_FAMILY #include -#endif #include #include +#endif #include #include #include "cmodemathandler.h" @@ -97,6 +97,7 @@ iReceivedMessage( NULL ), iPepObjId(0), iPipeController(NULL), + iLastTransactionId( 0 ), iDisconnected( EFalse ), iModemAtExistInCmt( EFalse ) { @@ -193,7 +194,7 @@ } //if( receiveMessageBuffer->Length() > ISI_HEADER_OFFSET_MESSAGEID ) else { - C_TRACE(_L("ISI essage is too short")); + C_TRACE(_L("ISI message is too short")); TRACE_ASSERT_ALWAYS; } @@ -217,14 +218,7 @@ iIscApi = new ( ELeave ) RIscApi; C_TRACE(_L("RIscApi created")); - - //used with intermediate data ind - //can be removed, when AT_MODEM_INTERMEDIATE_DATA_IND supports transactionid - for( TInt i = 0 ; i < KMaxDteIdCount ; i++) - { - iLastTransactionId[i]=0; - } - + #ifndef __WINSCW__ OpenChannelL(); #ifndef NCP_COMMON_BRIDGE_FAMILY @@ -245,12 +239,12 @@ TInt err = KErrNone; // aMessageType contains normal AT-cmd (0) or Nvram-query (1) - TUint transactionId= (aPluginType << KTransactionIdBitsShift) | aMessageType; - //used with intermediate data ind - //can be removed, when AT_MODEM_INTERMEDIATE_DATA_IND supports transactionid - iLastTransactionId[aDteId] = transactionId; //messages are routed to correct plugin by transaction id + TUint transactionId = ( aPluginType << KTransactionIdBitsShift ) | aMessageType; + // used with intermediate data ind + // can be removed, when AT_MODEM_INTERMEDIATE_DATA_IND supports transactionid + iLastTransactionId = transactionId; //messages are routed to correct plugin by transaction id C_TRACE((_L("transaction id %d, plugintype %d, aMessageType %d"), transactionId, aPluginType, aMessageType)); - C_TRACE((_L("iLastTransctionId[%d] = %d "),aDteId,iLastTransactionId[aDteId])); + C_TRACE((_L("iLastTransctionId = %d "), iLastTransactionId )); #ifdef __WINSCW__ iDteId = aDteId; @@ -348,8 +342,6 @@ events.Append( AT_MODEM_UNSOLICITED_DATA_IND ); events.Append( PN_AT_MODEM ); events.Append( AT_MODEM_DATA_REDIRECT_IND ); - events.Append( PN_PIPE ); - events.Append( PNS_PEP_STATUS_IND ); #ifndef NCP_COMMON_BRIDGE_FAMILY //name add ind @@ -357,11 +349,15 @@ events.Append( PNS_NAME_ADD_IND ); events.Append( PN_NAMESERVICE ); events.Append( PNS_NAME_REMOVE_IND ); + events.Append( PN_PIPE ); + events.Append( PNS_PEP_STATUS_IND ); #else events.Append( 0 ); events.Append( 0 ); events.Append( 0 ); events.Append( 0 ); + events.Append( 0 ); + events.Append( 0 ); #endif iIscApi->CustomFunction(EIscNokiaEventSubscribe,&events); @@ -380,7 +376,7 @@ { C_TRACE (( _T("CModemAtHandler::HandleATResponse()") )); - TInt dteId = aMessage.Get8bit( ISI_HEADER_SIZE+ AT_MODEM_CMD_RESP_OFFSET_DTEID ) ; + TUint8 dteId = aMessage.Get8bit( ISI_HEADER_SIZE + AT_MODEM_CMD_RESP_OFFSET_DTEID ) ; TUint transactionId = aMessage.Get8bit( ISI_HEADER_SIZE + AT_MODEM_CMD_RESP_OFFSET_TID ); TUint8 command = transactionId & KCommandBits; //normal AT-cmd or Nvram-query TInt length = aMessage.Get16bit( ISI_HEADER_SIZE+AT_MODEM_CMD_RESP_OFFSET_LENGTH ); @@ -415,7 +411,7 @@ #endif -TInt CModemAtHandler::Connect(const TUint8 aDteId) +TInt CModemAtHandler::Connect( const TUint8 aDteId ) { C_TRACE (( _T("CModemAtHandler::Connect()") )); @@ -425,37 +421,37 @@ TRACE_ASSERT_ALWAYS; return KErrNotFound; } + SetDisconnected( EFalse ); - C_TRACE((_L("Connecting with dteid:%d "), aDteId)); - SetDisconnected( EFalse ); - - #ifdef __WINSCW__ //emulate, modem is connected - iServer.BroadcastModemConnected( aDteId, KErrNone ); - iDteId = aDteId; +#ifdef __WINSCW__ return KErrNone; - #endif +#endif + + TInt err( KErrNone ); + TUint8 pipeHandle( KInvalidPipeHandle ); + #ifndef NCP_COMMON_BRIDGE_FAMILY - iPipeController->LinkDteIdToPipe( aDteId ); + pipeHandle = iPipeController->GetPipeHandle(); #endif - TInt size = ISI_HEADER_SIZE + SIZE_AT_MODEM_CONNECT_REQ; - - HBufC8* message = HBufC8::New( size ); - TRACE_ASSERT( message ); - TPtr8 messageptr = message->Des(); - TIsiSend isimessage( messageptr, size ); - isimessage.Set8bit(ISI_HEADER_OFFSET_RESOURCEID, PN_AT_MODEM); - isimessage.Set8bit(ISI_HEADER_SIZE + AT_MODEM_CONNECT_REQ_OFFSET_TID, KDefaultTId); - isimessage.Set8bit(ISI_HEADER_SIZE + AT_MODEM_CONNECT_REQ_OFFSET_MESSAGEID, AT_MODEM_CONNECT_REQ); - isimessage.Set8bit(ISI_HEADER_SIZE + AT_MODEM_CONNECT_REQ_OFFSET_DTEID, aDteId); - isimessage.Set8bit(ISI_HEADER_SIZE + AT_MODEM_CONNECT_REQ_OFFSET_FILLERBYTE1, KFiller); - isimessage.Complete(); - DUMP_MESSAGE( messageptr ); - TInt err = iIscApi->Send( messageptr ); - TRACE_ASSERT( err == KErrNone ); - delete message; - message = NULL; - return err; + if( pipeHandle == KInvalidPipeHandle ) + { + C_TRACE(( _L("Connecting with dteId %d. (RComm was not used before connecting the plug-ins)."), aDteId )); + err = SendAtModemConnectReq( aDteId ); + } + else + { + C_TRACE(( _L("Connecting with pipehandle %d."), pipeHandle )); + err = SendAtModemConnectReq( pipeHandle ); + } + + if( err != KErrNone ) + { + TRACE_ASSERT_ALWAYS; + return KErrNotFound; + } + + return KErrNone; } void CModemAtHandler::SetDisconnected( TBool aIsDisconnected ) @@ -518,35 +514,35 @@ void CModemAtHandler::HandleModemConnectResp( const TIsiReceiveC& aMessage ) { C_TRACE (( _T("CModemAtHandler::HandleModemConnectResp()") )); - TInt dteId= aMessage.Get8bit(ISI_HEADER_SIZE+ AT_MODEM_CONNECT_RESP_OFFSET_DTEID); - TInt status = aMessage.Get8bit(ISI_HEADER_SIZE+ AT_MODEM_CONNECT_RESP_OFFSET_RESULT); + TUint8 dteId = aMessage.Get8bit( ISI_HEADER_SIZE + AT_MODEM_CONNECT_RESP_OFFSET_DTEID ); + TInt status = aMessage.Get8bit( ISI_HEADER_SIZE + AT_MODEM_CONNECT_RESP_OFFSET_RESULT ); TInt err = KErrGeneral; if( status == AT_MODEM_RESULT_OK ) { C_TRACE(_L("Connected ok, AT_MODEM_RESULT_OK received")); err = KErrNone; - } - else + } + else { - C_TRACE((_L("Connection failed, AT_MODEM_RESULT_ERROR received (%d)"),status)); + C_TRACE((_L("Connection failed, AT_MODEM_RESULT_ERROR received (%d)"), status)); TRACE_ASSERT_ALWAYS; } - iServer.BroadcastModemConnected( dteId, err ); + iServer.SetDteIdAndConnect( dteId, err ); } void CModemAtHandler::HandleSignalInd( const TIsiReceiveC& aMessage ) { C_TRACE (( _T("CModemAtHandler::HandleSignalInd()") )); - TInt dteId = aMessage.Get8bit(ISI_HEADER_SIZE+ AT_MODEM_SIGNAL_IND_OFFSET_DTEID); + TUint8 dteId = aMessage.Get8bit( ISI_HEADER_SIZE + AT_MODEM_SIGNAL_IND_OFFSET_DTEID ); iServer.HandleSignalInd( dteId ); } void CModemAtHandler::HandleUnsolicitedData( const TIsiReceiveC& aMessage ) { C_TRACE (( _T("CModemAtHandler::HandleUnsolicitedData()") )); - TInt dteId = aMessage.Get8bit( ISI_HEADER_SIZE+ AT_MODEM_UNSOLICITED_DATA_IND_OFFSET_LENGTH ); + TUint8 dteId = aMessage.Get8bit( ISI_HEADER_SIZE+ AT_MODEM_UNSOLICITED_DATA_IND_OFFSET_LENGTH ); TInt length = aMessage.Get16bit( ISI_HEADER_SIZE+AT_MODEM_UNSOLICITED_DATA_IND_OFFSET_LENGTH ); iServer.HandleUnsolicitedData( dteId, @@ -558,14 +554,18 @@ void CModemAtHandler::HandleIntermediateDataInd( const TIsiReceiveC& aMessage ) { C_TRACE (( _T("CModemAtHandler::HandleIntermediateDataInd()") )); - TInt dteId = aMessage.Get8bit( ISI_HEADER_SIZE+ AT_MODEM_INTERMEDIATE_DATA_IND_OFFSET_DTEID ); - TInt length= aMessage.Get16bit( ISI_HEADER_SIZE+AT_MODEM_INTERMEDIATE_DATA_IND_OFFSET_LENGTH ); + TUint8 dteId = aMessage.Get8bit( ISI_HEADER_SIZE + AT_MODEM_INTERMEDIATE_DATA_IND_OFFSET_DTEID ); + TInt length = aMessage.Get16bit( ISI_HEADER_SIZE + AT_MODEM_INTERMEDIATE_DATA_IND_OFFSET_LENGTH ); - TUint transactionId = aMessage.Get8bit( ISI_HEADER_SIZE+ AT_MODEM_CMD_RESP_OFFSET_TID ); - transactionId = iLastTransactionId[ dteId ]; - TUint8 command = transactionId & KCommandBits; + TUint transactionId = aMessage.Get8bit( ISI_HEADER_SIZE + AT_MODEM_CMD_RESP_OFFSET_TID ); + + C_TRACE((_L("transactionId from %d"), transactionId)); + transactionId = iLastTransactionId; + C_TRACE((_L("transactionId after setting it to iLastTransactionId: %d"), transactionId)); + + TUint8 command = transactionId & KCommandBits; //normal AT-cmd or Nvram-query TUint8 pluginType = transactionId >> KTransactionIdBitsShift; - C_TRACE((_L("dteid %d iLastrid[dteid] = %d trid %d"), dteId, iLastTransactionId[dteId], transactionId)); + C_TRACE((_L("dteId %d, command %d (AT=0,NVRAM=1), pluginType = %d (atext=0,common=1)"), dteId, command, pluginType)); iServer.HandleIntermediateDataInd( dteId, (TATPluginInterface) pluginType, @@ -579,8 +579,8 @@ { C_TRACE (( _T("CModemAtHandler::HandleRedirectInd()") )); - TInt dteId = aMessage.Get8bit( ISI_HEADER_SIZE+ AT_MODEM_DATA_REDIRECT_IND_OFFSET_DTEID ); - TInt newSecondDevId = aMessage.Get8bit( ISI_HEADER_SIZE + AT_MODEM_DATA_REDIRECT_IND_OFFSET_DEVICEID ); + TUint8 dteId = aMessage.Get8bit( ISI_HEADER_SIZE + AT_MODEM_DATA_REDIRECT_IND_OFFSET_DTEID ); + TInt newSecondDevId = aMessage.Get8bit( ISI_HEADER_SIZE + AT_MODEM_DATA_REDIRECT_IND_OFFSET_DEVICEID ); TInt newSecondObjId = aMessage.Get16bit( ISI_HEADER_SIZE + AT_MODEM_DATA_REDIRECT_IND_OFFSET_SERVERID ); #ifndef NCP_COMMON_BRIDGE_FAMILY iPipeController->RedirectPipe( dteId, newSecondDevId, newSecondObjId ); @@ -619,7 +619,7 @@ void CModemAtHandler::HandleRedirectResultResp(const TIsiReceiveC& aMessage) { C_TRACE (( _T("CModemAtHandler::HandleRedirectResultResp()") )); - TInt dteId = aMessage.Get8bit( ISI_HEADER_SIZE + AT_MODEM_DATA_REDIRECT_RESULT_RESP_OFFSET_DTEID ); + TUint8 dteId = aMessage.Get8bit( ISI_HEADER_SIZE + AT_MODEM_DATA_REDIRECT_RESULT_RESP_OFFSET_DTEID ); TInt error = aMessage.Get8bit( ISI_HEADER_SIZE + AT_MODEM_DATA_REDIRECT_RESULT_RESP_OFFSET_RESULT ); C_TRACE((_L("CModemAtHandler::HandleRedirectResultResp() dte %d"), dteId)); @@ -634,19 +634,19 @@ } } -void CModemAtHandler::HandleCommandModeChange( TInt aDteId, TCommandMode aMode ) +void CModemAtHandler::HandleCommandModeChange( TCommandMode aMode ) { - C_TRACE(( _T("CModemAtHandler::HandleCommandModeChange() aDteId: %d aMode: %d"),aDteId, (TInt) aMode )); - iServer.HandleCommandModeChange( aDteId, aMode ); + C_TRACE(( _T("CModemAtHandler::HandleCommandModeChange() aMode: %d"), (TInt) aMode )); + iServer.HandleCommandModeChange( aMode ); } TInt CModemAtHandler::SendEscapeSignalDetection( const TUint8 aDteId ) { C_TRACE((_T("CModemAtHandler::SendEscapeSignalDetection(%d)"), aDteId)); - #ifdef __WINSCW__ +#ifdef __WINSCW__ iDteId = aDteId; return KErrNone; - #endif +#endif TInt error( KErrGeneral ); TUint msgSize( ISI_HEADER_SIZE + SIZE_AT_MODEM_SIGNAL_DETECTED_REQ ); @@ -671,7 +671,7 @@ isimessage.Set8bit( msgSize + AT_MODEM_SB_SIGNAL_DETECTED_OFFSET_FILLERBYTE1, 0x00 ); isimessage.Complete(); error = iIscApi->Send(messageptr); - C_TRACE((_L("escape send result %d"), error )); + C_TRACE((_L("escape send result %d"), error )); delete message; message = NULL; } @@ -687,8 +687,7 @@ void CModemAtHandler::HandleSignalDetectedResp( const TIsiReceiveC& aMessage ) { C_TRACE (( _T("CModemAtHandler::HandleSignalDetectedResp() escape sequence detect response received from cellmo") )); - TInt dteId( aMessage.Get8bit( ISI_HEADER_SIZE + AT_MODEM_SIGNAL_DETECTED_RESP_OFFSET_DTEID ) ); - TRACE_ASSERT( dteId < KMaxDteIdCount ); + TUint8 dteId( aMessage.Get8bit( ISI_HEADER_SIZE + AT_MODEM_SIGNAL_DETECTED_RESP_OFFSET_DTEID ) ); TInt result = aMessage.Get8bit( ISI_HEADER_SIZE + AT_MODEM_SIGNAL_DETECTED_RESP_OFFSET_RESULT ); C_TRACE((_L("CModemAtHandler::HandleSignalDetectedResp() dteId %d"), dteId)); TRACE_ASSERT( result == AT_MODEM_RESULT_OK ); @@ -700,3 +699,26 @@ iModemAtExistInCmt = aModemAtExistsInCmt; } +TInt CModemAtHandler::SendAtModemConnectReq( const TUint8 aDteId ) + { + C_TRACE (( _T("CModemAtHandler::SendAtModemConnectReq()") )); + TInt size = ISI_HEADER_SIZE + SIZE_AT_MODEM_CONNECT_REQ; + HBufC8* message = HBufC8::New( size ); + TRACE_ASSERT( message ); + TPtr8 messageptr = message->Des(); + TIsiSend isimessage( messageptr, size ); + isimessage.Set8bit(ISI_HEADER_OFFSET_RESOURCEID, PN_AT_MODEM); + isimessage.Set8bit(ISI_HEADER_SIZE + AT_MODEM_CONNECT_REQ_OFFSET_TID, KDefaultTId); + isimessage.Set8bit(ISI_HEADER_SIZE + AT_MODEM_CONNECT_REQ_OFFSET_MESSAGEID, AT_MODEM_CONNECT_REQ); + isimessage.Set8bit(ISI_HEADER_SIZE + AT_MODEM_CONNECT_REQ_OFFSET_DTEID, aDteId); + isimessage.Set8bit(ISI_HEADER_SIZE + AT_MODEM_CONNECT_REQ_OFFSET_FILLERBYTE1, KFiller); + isimessage.Complete(); + DUMP_MESSAGE( messageptr ); + TInt err = iIscApi->Send( messageptr ); + TRACE_ASSERT( err == KErrNone ); + delete message; + message = NULL; + C_TRACE (( _T("CModemAtHandler::SendAtModemConnectReq()<< returned: %d"), err )); + return err; + } +