|
S60 3rd Edition SDK for Symbian OS Example Applications Guide |
00001 /* 00002 * ============================================================================= 00003 * Name : IsvTelCallAppTelephony.cpp 00004 * Part of : IsvTelCallApp 00005 * Interface : 00006 * Description : 00007 * Version : 00008 * 00009 * Copyright (c) 2005-2006 Nokia Corporation. 00010 * This material, including documentation and any related 00011 * computer programs, is protected by copyright controlled by 00012 * Nokia Corporation. 00013 * ============================================================================= 00014 */ 00015 00016 // INCLUDE FILES 00017 #include <e32std.h> 00018 #include <avkon.hrh> 00019 #include <aknnotewrappers.h> 00020 #include <f32fsys.h> 00021 #include <IsvTelCallApp.rsg> 00022 #include "IsvTelCallAppTelephonyNotify.h" 00023 #include "IsvTelCallAppTelephony.h" 00024 00025 // ================= MEMBER FUNCTIONS ========================================= 00026 00027 // ---------------------------------------------------------------------------- 00028 // CIsvTelCallAppTelephony* CIsvTelCallAppTelephony::NewL() 00029 // Two-phased constructor. 00030 // ---------------------------------------------------------------------------- 00031 // 00032 CIsvTelCallAppTelephony* CIsvTelCallAppTelephony::NewL 00033 ( MIsvTelCallAppTelephonyNotify& aNotify ) 00034 { 00035 CIsvTelCallAppTelephony* selfWrapperClass = 00036 new ( ELeave ) CIsvTelCallAppTelephony( aNotify ); 00037 CleanupStack::PushL( selfWrapperClass ); 00038 selfWrapperClass->ConstructL(); 00039 CleanupStack::Pop(); 00040 return selfWrapperClass; 00041 } 00042 00043 // ---------------------------------------------------------------------------- 00044 // CIsvTelCallAppTelephony::~CIsvTelCallAppTelephony() 00045 // Destructor. 00046 // ---------------------------------------------------------------------------- 00047 // 00048 CIsvTelCallAppTelephony::~CIsvTelCallAppTelephony() 00049 { 00050 Cancel(); 00051 } 00052 00053 // ---------------------------------------------------------------------------- 00054 // void CIsvTelCallAppTelephony::RunL() 00055 // Handles the active object’s request completion event. 00056 // ---------------------------------------------------------------------------- 00057 // 00058 void CIsvTelCallAppTelephony::RunL() 00059 { 00060 if ( (iTelApiCmd == EAsyncEvent ) || 00061 ( iTelApiCmd == EAnswerIncomingCall)) 00062 { 00063 } 00064 else 00065 { 00066 iWait.AsyncStop(); 00067 } 00068 00069 TBuf16<KMaxErrMsgSize> errMsgBuffer; 00070 00071 //Find the type of error message and store in errMsgBuffer. 00072 GeneralErrorMessage( iStatus.Int(), &errMsgBuffer ); 00073 00074 switch( iTelApiCmd ) 00075 { 00076 case EMakeNewCall : 00077 { 00078 iNotify.MakeNewCallApiCompleteL( iStatus.Int(), iCallId, 00079 iTelNum, errMsgBuffer ); 00080 } 00081 break; 00082 case EHangup : 00083 { 00084 iNotify.HangupCompleteL( iStatus.Int(), errMsgBuffer ); 00085 } 00086 break; 00087 case EHold : 00088 { 00089 iNotify.HoldCompleteL( iStatus.Int(), errMsgBuffer ); 00090 } 00091 break; 00092 00093 case EResume : 00094 { 00095 iNotify.ResumeCompleteL( iStatus.Int(), errMsgBuffer ); 00096 } 00097 break; 00098 00099 case ESwap : 00100 { 00101 iNotify.SwapCompleteL( iStatus.Int(), errMsgBuffer ); 00102 } 00103 break; 00104 00105 case ESendDTMF : 00106 { 00107 iNotify.SendDTMFApiCompleteL( iStatus.Int(), errMsgBuffer ); 00108 } 00109 break; 00110 00111 case EAnswerIncomingCall : 00112 { 00113 iNotify.AnswerIncomingCallApiCompleteL( iStatus.Int(), 00114 iCallId, 00115 errMsgBuffer ); 00116 00117 if ( iStatus.Int() != KErrNone ) 00118 { 00119 } 00120 else 00121 { 00122 iTelApiCmd = EAnswerIncomingCall; 00123 iTel->AnswerIncomingCall( iStatus, 00124 iCallId, 00125 CTelephony::EVoiceLine ); 00126 SetActive(); 00127 } 00128 } 00129 break; 00130 00131 case EAsyncEvent : 00132 { 00133 switch (iEvent) 00134 { 00135 case CTelephony::EOwnedCall1StatusChange : 00136 { 00137 iCallId = CTelephony::EISVCall1; 00138 iNotify.GetCallStatusCompleteL(iStatus.Int(), 00139 iCallId, 00140 iCallStatus, 00141 errMsgBuffer); 00142 00143 if ( iStatus.Int() != KErrNone) 00144 { 00145 } 00146 else 00147 { 00148 iEvent = CTelephony::EOwnedCall1StatusChange; 00149 iTel->NotifyChange(iStatus, iEvent, iCallStatusPckg); 00150 SetActive(); 00151 } 00152 } 00153 break; 00154 case CTelephony::EOwnedCall2StatusChange : 00155 { 00156 iCallId = CTelephony::EISVCall2; 00157 iNotify.GetCallStatusCompleteL( iStatus.Int(), iCallId, 00158 iCallStatus, 00159 errMsgBuffer ); 00160 if ( iStatus.Int() != KErrNone ) 00161 { 00162 } 00163 else 00164 { 00165 iEvent = CTelephony::EOwnedCall2StatusChange; 00166 iTel->NotifyChange(iStatus, iEvent, iCallStatusPckg); 00167 SetActive(); 00168 } 00169 } 00170 break; 00171 00172 case CTelephony::EVoiceLineStatusChange : 00173 { 00174 iNotify.GetVoiceLineStatusCompleteL( iStatus.Int(), 00175 errMsgBuffer, 00176 iCallStatus ); 00177 if ( iStatus.Int() != KErrNone ) 00178 { 00179 } 00180 else 00181 { 00182 iEvent = CTelephony::EVoiceLineStatusChange; 00183 iTel->NotifyChange(iStatus, iEvent, iCallStatusPckg); 00184 SetActive(); 00185 } 00186 } 00187 break; 00188 default: 00189 { 00190 _LIT(inforMsg, "Default Notify Complete"); 00191 CAknErrorNote* errorNote = new (ELeave) CAknErrorNote; 00192 errorNote->ExecuteLD(inforMsg); 00193 } 00194 break; 00195 } 00196 } 00197 break; 00198 00199 default : 00200 break; 00201 } 00202 return; 00203 } 00204 00205 // ---------------------------------------------------------------------------- 00206 // void CIsvTelCallAppTelephony::DoCancel() 00207 // Implements cancellation of an outstanding request. 00208 // ---------------------------------------------------------------------------- 00209 // 00210 void CIsvTelCallAppTelephony::DoCancel() 00211 { 00212 //Based on the command, invoke the appropriate CancelAsync APIs 00213 switch( iTelApiCmd ) 00214 { 00215 case EMakeNewCall : 00216 { 00217 iTel->CancelAsync( CTelephony::EDialNewCallCancel ); 00218 } 00219 break; 00220 00221 case EHangup : 00222 { 00223 iTel->CancelAsync( CTelephony::EHangupCancel ); 00224 } 00225 break; 00226 00227 case EHold : 00228 { 00229 iTel->CancelAsync( CTelephony::EHoldCancel ); 00230 } 00231 break; 00232 00233 case EResume : 00234 { 00235 iTel->CancelAsync( CTelephony::EResumeCancel ); 00236 } 00237 break; 00238 00239 case EAnswerIncomingCall : 00240 { 00241 iTel->CancelAsync( CTelephony::EAnswerIncomingCallCancel ); 00242 } 00243 break; 00244 00245 case EAsyncEvent: 00246 { 00247 switch( iEvent ) 00248 { 00249 case CTelephony::EOwnedCall1StatusChange : 00250 { 00251 iTel->CancelAsync( 00252 CTelephony::EOwnedCall1StatusChangeCancel ); 00253 } 00254 break; 00255 case CTelephony::EOwnedCall2StatusChange : 00256 { 00257 iTel->CancelAsync( 00258 CTelephony::EOwnedCall2StatusChangeCancel ); 00259 } 00260 break; 00261 00262 case CTelephony::EVoiceLineStatusChange : 00263 { 00264 iTel->CancelAsync( 00265 CTelephony::EVoiceLineStatusChangeCancel ); 00266 } 00267 break; 00268 default : 00269 break; 00270 } 00271 } 00272 default : 00273 break; 00274 } 00275 } 00276 00277 // ---------------------------------------------------------------------------- 00278 // CIsvTelCallAppTelephony::CIsvTelCallAppTelephony() 00279 // Default constructor. 00280 // ---------------------------------------------------------------------------- 00281 // 00282 CIsvTelCallAppTelephony::CIsvTelCallAppTelephony( 00283 MIsvTelCallAppTelephonyNotify& aNotify ) 00284 :CActive( EPriorityStandard ), 00285 iNotify( aNotify ), 00286 iCallStatusPckg( iCallStatus ) 00287 { 00288 CActiveScheduler::Add( this ); 00289 } 00290 00291 // ---------------------------------------------------------------------------- 00292 // void CIsvTelCallAppTelephony::ConstructL() 00293 // It creates a CTelephony object and initializes a locally 00294 // contained command table. 00295 // ---------------------------------------------------------------------------- 00296 // 00297 void CIsvTelCallAppTelephony::ConstructL() 00298 { 00299 00300 //---------------------------------------------------------------------- 00301 // Load Error strings from resource file 00302 //---------------------------------------------------------------------- 00303 LoadErrorStringsFromResource(); 00304 00305 //Load call id strings from resource 00306 TBuf16<KMaxCmdSize> callIdStr; 00307 CCoeEnv::Static()->ReadResource(callIdStr, 00308 R_ISVTELCALLAPP_TELSTR_CALLID1); 00309 iCallId1Str.Copy(callIdStr); 00310 00311 CCoeEnv::Static()->ReadResource(callIdStr, 00312 R_ISVTELCALLAPP_TELSTR_CALLID2); 00313 iCallId2Str.Copy(callIdStr); 00314 00315 } 00316 00317 // ---------------------------------------------------------------------------- 00318 // void CIsvTelCallAppTelephony::RegisterForAsyncNotification() 00319 // Wrapper function that register funtions to notify change. 00320 // ---------------------------------------------------------------------------- 00321 // 00322 void CIsvTelCallAppTelephony::RegisterForAsyncNotification( TInt aAsyncEvent ) 00323 { 00324 if (IsActive()) 00325 { 00326 return; 00327 } 00328 iTelApiCmd = EAsyncEvent; 00329 switch(aAsyncEvent) 00330 { 00331 case CTelephony::EOwnedCall1StatusChange : 00332 { 00333 iEvent = CTelephony::EOwnedCall1StatusChange; 00334 iCallStatus.iStatus = CTelephony::EStatusUnknown; 00335 } 00336 break; 00337 case CTelephony::EOwnedCall2StatusChange : 00338 { 00339 iEvent = CTelephony::EOwnedCall2StatusChange; 00340 iCallStatus.iStatus = CTelephony::EStatusUnknown; 00341 } 00342 break; 00343 case CTelephony::EVoiceLineStatusChange : 00344 { 00345 iEvent = CTelephony::EVoiceLineStatusChange; 00346 } 00347 break; 00348 default : 00349 break; 00350 } 00351 iTel->NotifyChange(iStatus, iEvent, iCallStatusPckg); 00352 SetActive(); 00353 } 00354 00355 // ---------------------------------------------------------------------------- 00356 // void CIsvTelCallAppTelephony::SetTelephonyPtr() 00357 // Called by other classes to set the iTel Ptr 00358 // ---------------------------------------------------------------------------- 00359 // 00360 void CIsvTelCallAppTelephony::SetTelephonyPtr(CTelephony* aTel) 00361 { 00362 iTel = aTel; 00363 } 00364 00365 // ---------------------------------------------------------------------------- 00366 // CTelephony* CIsvTelCallAppTelephony::GetTelephonyPtr() 00367 // Called by other classes to get the iTel Ptr 00368 // ---------------------------------------------------------------------------- 00369 // 00370 CTelephony* CIsvTelCallAppTelephony::GetTelephonyPtr() 00371 { 00372 return(iTel); 00373 } 00374 00375 // ---------------------------------------------------------------------------- 00376 // void CIsvTelCallAppTelephony::CreateTelephonyPtrL() 00377 // Called by other classes to get the iTel Ptr 00378 // ---------------------------------------------------------------------------- 00379 // 00380 void CIsvTelCallAppTelephony::CreateTelephonyPtrL() 00381 { 00382 //Creating Telephony object. 00383 iTel = CTelephony::NewL(); 00384 } 00385 00386 // ---------------------------------------------------------------------------- 00387 // void CIsvTelCallAppTelephony::TelApiWrapperMakeNewCallL( ) 00388 // Wrapper function that calls DialNewCall of CTelephony class. 00389 // ---------------------------------------------------------------------------- 00390 // 00391 void CIsvTelCallAppTelephony::TelApiWrapperMakeNewCallL( 00392 CTelephony::TCallId aCallId, 00393 TBuf<CTelephony::KMaxTelNumberSize> aTelNumber) 00394 { 00395 if ( IsActive() ) 00396 { 00397 return; 00398 } 00399 00400 iTelApiCmd = EMakeNewCall; 00401 CTelephony::TCallParamsV1 callParams; 00402 CTelephony::TCallParamsV1Pckg callParamPckg( callParams ); 00403 iCallId = aCallId; 00404 iTelNum = aTelNumber; 00405 00406 #ifdef __WINS__ 00407 CAknErrorNote* errorNoteMsg = new (ELeave) CAknErrorNote; 00408 errorNoteMsg->ExecuteLD(iEmuApiNotSupported); 00409 #else 00410 iTel->DialNewCall( iStatus, callParamPckg, iTelNum, 00411 iCallId, CTelephony::EVoiceLine ); 00412 SetActive(); 00413 StartWait(); 00414 #endif 00415 } 00416 00417 // ---------------------------------------------------------------------------- 00418 // void CIsvTelCallAppTelephony::TelApiWrapperGetCallStatusL( ) 00419 // Wrapper function that calls GetCallStatus of CTelephony class. 00420 // ---------------------------------------------------------------------------- 00421 // 00422 void CIsvTelCallAppTelephony::TelApiWrapperGetCallStatusL( 00423 CTelephony::TCallId aCallId ) 00424 { 00425 if ( IsActive() ) 00426 { 00427 return; 00428 } 00429 00430 if ( ( TInt )aCallId == KErrNotFound ) 00431 { 00432 return; 00433 } 00434 iCallId = aCallId; 00435 iTelApiCmd = EGetCallStatus; 00436 00437 #ifdef __WINS__ 00438 CAknErrorNote* errorNoteMsg = new (ELeave) CAknErrorNote; 00439 errorNoteMsg->ExecuteLD(iEmuApiNotSupported); 00440 #else 00441 TInt retCode; 00442 iCallStatus.iStatus = CTelephony::EStatusUnknown; 00443 retCode = iTel->GetCallStatus( iCallId, iCallStatusPckg ); 00444 00445 TBuf16<KMaxErrMsgSize> errMsgBuffer; 00446 00447 //Find the type of error message and store in errMsgBuffer. 00448 GeneralErrorMessage( retCode, &errMsgBuffer ); 00449 00450 iNotify.GetCallStatusCompleteL( retCode, iCallId, iCallStatus, 00451 errMsgBuffer); 00452 #endif 00453 } 00454 00455 // ---------------------------------------------------------------------------- 00456 // void CIsvTelCallAppTelephony::TelApiWrapperHangupL( ) 00457 // Wrapper function that calls Hangup of CTelephony class. 00458 // ---------------------------------------------------------------------------- 00459 // 00460 void CIsvTelCallAppTelephony::TelApiWrapperHangupL( CTelephony::TCallId aCallId ) 00461 { 00462 if ( IsActive() ) 00463 { 00464 return; 00465 } 00466 00467 if ( ( TInt )aCallId == KErrNotFound ) 00468 { 00469 return; 00470 } 00471 iCallId = aCallId; 00472 iTelApiCmd = EHangup; 00473 00474 #ifdef __WINS__ 00475 CAknErrorNote* errorNoteMsg = new (ELeave) CAknErrorNote; 00476 errorNoteMsg->ExecuteLD(iEmuApiNotSupported); 00477 #else 00478 iTel->Hangup( iStatus, iCallId ); 00479 SetActive(); 00480 StartWait(); 00481 #endif 00482 } 00483 00484 // ---------------------------------------------------------------------------- 00485 // void CIsvTelCallAppTelephony::TelApiWrapperHoldL( ) 00486 // Wrapper function that calls Hold of CTelephony class. 00487 // ---------------------------------------------------------------------------- 00488 // 00489 void CIsvTelCallAppTelephony::TelApiWrapperHoldL( CTelephony::TCallId aCallId ) 00490 { 00491 if ( IsActive() ) 00492 { 00493 return; 00494 } 00495 00496 if ( ( TInt )aCallId == KErrNotFound ) 00497 { 00498 return; 00499 } 00500 iCallId = aCallId; 00501 iTelApiCmd = EHold; 00502 00503 #ifdef __WINS__ 00504 CAknErrorNote* errorNoteMsg = new (ELeave) CAknErrorNote; 00505 errorNoteMsg->ExecuteLD(iEmuApiNotSupported); 00506 #else 00507 iTel->Hold( iStatus, iCallId ); 00508 SetActive(); 00509 StartWait(); 00510 #endif 00511 } 00512 00513 // ---------------------------------------------------------------------------- 00514 // void CIsvTelCallAppTelephony::TelApiWrapperResumeL( ) 00515 // Wrapper function that calls Resume of CTelephony class. 00516 // ---------------------------------------------------------------------------- 00517 // 00518 void CIsvTelCallAppTelephony::TelApiWrapperResumeL( CTelephony::TCallId aCallId ) 00519 { 00520 if ( IsActive() ) 00521 { 00522 return; 00523 } 00524 00525 if ( ( TInt )aCallId == KErrNotFound ) 00526 { 00527 return; 00528 } 00529 iCallId = aCallId; 00530 iTelApiCmd = EResume; 00531 00532 #ifdef __WINS__ 00533 CAknErrorNote* errorNoteMsg = new (ELeave) CAknErrorNote; 00534 errorNoteMsg->ExecuteLD(iEmuApiNotSupported); 00535 #else 00536 iTel->Resume( iStatus, iCallId ); 00537 SetActive(); 00538 StartWait(); 00539 #endif 00540 } 00541 00542 // ---------------------------------------------------------------------------- 00543 // void CIsvTelCallAppTelephony::TelApiWrapperSwapL( ) 00544 // Wrapper function that calls Swap of CTelephony class. 00545 // ---------------------------------------------------------------------------- 00546 // 00547 void CIsvTelCallAppTelephony::TelApiWrapperSwapL( ) 00548 { 00549 if ( IsActive() ) 00550 { 00551 return; 00552 } 00553 00554 //Set the call id 00555 iCallId = CTelephony::EISVCall1; 00556 CTelephony::TCallId swapCallId = CTelephony::EISVCall2; 00557 00558 iTelApiCmd = ESwap; 00559 00560 #ifdef __WINS__ 00561 CAknErrorNote* errorNoteMsg = new (ELeave) CAknErrorNote; 00562 errorNoteMsg->ExecuteLD(iEmuApiNotSupported); 00563 #else 00564 iTel->Swap( iStatus, iCallId, swapCallId ); 00565 SetActive(); 00566 StartWait(); 00567 #endif 00568 } 00569 00570 // ---------------------------------------------------------------------------- 00571 // void CIsvTelCallAppTelephony::TelApiWrapperGetVoiceLineStatusL( TPtr8,TInt ) 00572 // Wrapper function that calls GetLineStatus of CTelephony class. 00573 // ---------------------------------------------------------------------------- 00574 // 00575 void CIsvTelCallAppTelephony::TelApiWrapperGetVoiceLineStatusL( ) 00576 { 00577 if ( IsActive() ) 00578 { 00579 return; 00580 } 00581 00582 iTelApiCmd = EGetVoiceLineStatus; 00583 00584 #ifdef __WINS__ 00585 CAknErrorNote* errorNoteMsg = new (ELeave) CAknErrorNote; 00586 errorNoteMsg->ExecuteLD(iEmuApiNotSupported); 00587 #else 00588 //Call GetLineStatus with EVoiceLine to get the status of voice line. 00589 TInt aStatus = iTel->GetLineStatus(CTelephony::EVoiceLine, 00590 iCallStatusPckg); 00591 TBuf16<KMaxErrMsgSize> errMsgBuffer; 00592 GeneralErrorMessage( aStatus, &errMsgBuffer ); 00593 iNotify.GetVoiceLineStatusCompleteL( aStatus, errMsgBuffer, iCallStatus ); 00594 #endif 00595 } 00596 00597 // ---------------------------------------------------------------------------- 00598 // void CIsvTelCallAppTelephony::TelApiWrapperGetDataLineStatusL( ) 00599 // Wrapper function that calls GetLineStatus of CTelephony class. 00600 // ---------------------------------------------------------------------------- 00601 // 00602 void CIsvTelCallAppTelephony::TelApiWrapperGetDataLineStatusL( ) 00603 { 00604 if ( IsActive() ) 00605 { 00606 return; 00607 } 00608 00609 iTelApiCmd = EGetDataLineStatus; 00610 00611 #ifdef __WINS__ 00612 CAknErrorNote* errorNoteMsg = new (ELeave) CAknErrorNote; 00613 errorNoteMsg->ExecuteLD(iEmuApiNotSupported); 00614 #else 00615 //Call GetLineStatus with EDataLine to get the status of data line. 00616 TInt aStatus = iTel->GetLineStatus( 00617 CTelephony::EDataLine, iCallStatusPckg ); 00618 TBuf16<KMaxErrMsgSize> errMsgBuffer; 00619 GeneralErrorMessage( aStatus, &errMsgBuffer ); 00620 iNotify.GetDataLineStatusCompleteL( aStatus, errMsgBuffer, iCallStatus ); 00621 #endif 00622 } 00623 00624 // ---------------------------------------------------------------------------- 00625 // void CIsvTelCallAppTelephony::TelApiWrapperGetFaxLineStatusL( ) 00626 // Wrapper function that calls GetLineStatus of CTelephony class. 00627 // ---------------------------------------------------------------------------- 00628 // 00629 void CIsvTelCallAppTelephony::TelApiWrapperGetFaxLineStatusL( ) 00630 { 00631 if ( IsActive() ) 00632 { 00633 return; 00634 } 00635 00636 iTelApiCmd = EGetFaxLineStatus; 00637 00638 #ifdef __WINS__ 00639 CAknErrorNote* errorNoteMsg = new (ELeave) CAknErrorNote; 00640 errorNoteMsg->ExecuteLD(iEmuApiNotSupported); 00641 #else 00642 //Call GetLineStatus with EFaxLine to get the status of fax line. 00643 TInt aStatus = iTel->GetLineStatus( 00644 CTelephony::EFaxLine, iCallStatusPckg ); 00645 00646 TBuf16<KMaxErrMsgSize> errMsgBuffer; 00647 GeneralErrorMessage( aStatus, &errMsgBuffer ); 00648 iNotify.GetFaxLineStatusCompleteL( aStatus, errMsgBuffer, iCallStatus ); 00649 #endif 00650 } 00651 00652 // ---------------------------------------------------------------------------- 00653 // void CIsvTelCallAppTelephony::TelApiWrapperSendDTMFL( ) 00654 // Wrapper function that calls SendDTMFTones of CTelephony class. 00655 // ---------------------------------------------------------------------------- 00656 // 00657 void CIsvTelCallAppTelephony::TelApiWrapperSendDTMFL( 00658 CTelephony::TCallId aCallId, 00659 TBuf<KMaxDTMFLength> aDtmfSeq ) 00660 { 00661 if ( IsActive() ) 00662 { 00663 return; 00664 } 00665 00666 CTelephony::TCallId callId = aCallId; 00667 TBuf<KMaxDTMFLength> dtmfSeq = aDtmfSeq; 00668 00669 iTelApiCmd = ESendDTMF; 00670 00671 #ifdef __WINS__ 00672 CAknErrorNote* errorNoteMsg = new (ELeave) CAknErrorNote; 00673 errorNoteMsg->ExecuteLD(iEmuApiNotSupported); 00674 #else 00675 iTel->GetCallStatus( callId, iCallStatusPckg ); 00676 00677 //If the call status, for which DTMF tones is to be passed 00678 //is not active, then return error. 00679 if ( iCallStatus.iStatus != CTelephony::EStatusConnected ) 00680 { 00681 TBuf16<KMaxErrMsgSize> KError; 00682 CCoeEnv::Static()->ReadResource(KError, 00683 R_ISVTELCALLAPP_TELSTR_CALLNOTACTIVE); 00684 iNotify.SendDTMFApiCompleteL( ( TInt )KErrNotFound, KError ); 00685 return; 00686 } 00687 iTel->SendDTMFTones( iStatus, dtmfSeq ); 00688 SetActive(); 00689 StartWait(); 00690 #endif 00691 } 00692 00693 // ---------------------------------------------------------------------------- 00694 // void CIsvTelCallAppTelephony::TelApiWrapperAnswerInCall( ) 00695 // Wrapper function that calls AnswerIncomingCall of CTelephony class. 00696 // ---------------------------------------------------------------------------- 00697 // 00698 void CIsvTelCallAppTelephony::TelApiWrapperAnswerInCallL() 00699 { 00700 iTelApiCmd = EAnswerIncomingCall; 00701 #ifdef __WINS__ 00702 CAknErrorNote* errorNote = new (ELeave) CAknErrorNote; 00703 errorNote->ExecuteLD(iEmuApiNotSupported); 00704 #else 00705 iTel->AnswerIncomingCall( iStatus, iCallId, CTelephony::EVoiceLine ); 00706 SetActive(); 00707 #endif 00708 } 00709 00710 // ---------------------------------------------------------------------------- 00711 // void CIsvTelCallAppTelephony::StartWait() 00712 // Checks for the active scheduler wait class's start state 00713 // and then starts the wait 00714 // ---------------------------------------------------------------------------- 00715 // 00716 void CIsvTelCallAppTelephony::StartWait( ) 00717 { 00718 if ( iWait.IsStarted() == (TInt)ETrue ) 00719 { 00720 return; 00721 } 00722 else 00723 { 00724 iWait.Start(); 00725 } 00726 return; 00727 } 00728 00729 // ---------------------------------------------------------------------------- 00730 // void CIsvTelCallAppTelephony::LoadErrorStringsFromResource() 00731 // ---------------------------------------------------------------------------- 00732 // 00733 void CIsvTelCallAppTelephony::LoadErrorStringsFromResource() 00734 { 00735 CCoeEnv::Static()->ReadResource(iErrStrNotFound, 00736 R_ISVTELCALLAPP_TELSTR_ERRNOTFOUND); 00737 CCoeEnv::Static()->ReadResource(iErrStrGeneral, 00738 R_ISVTELCALLAPP_TELSTR_ERRGENERAL); 00739 CCoeEnv::Static()->ReadResource(iErrStrCancel, 00740 R_ISVTELCALLAPP_TELSTR_ERRCANCEL); 00741 CCoeEnv::Static()->ReadResource(iErrStrNoMemory, 00742 R_ISVTELCALLAPP_TELSTR_ERRNOMEMORY); 00743 CCoeEnv::Static()->ReadResource(iErrStrNotSupported, 00744 R_ISVTELCALLAPP_TELSTR_ERRNOTSUPPORTED); 00745 CCoeEnv::Static()->ReadResource(iErrStrArgument, 00746 R_ISVTELCALLAPP_TELSTR_ERRARGUMENT); 00747 CCoeEnv::Static()->ReadResource(iErrStrTotalLossOfPrecision, 00748 R_ISVTELCALLAPP_TELSTR_ERRTOTALLOSSOFPRECISION); 00749 CCoeEnv::Static()->ReadResource(iErrStrBadHandle, 00750 R_ISVTELCALLAPP_TELSTR_ERRBADHANDLE); 00751 CCoeEnv::Static()->ReadResource(iErrStrOverflow, 00752 R_ISVTELCALLAPP_TELSTR_ERROVERFLOW); 00753 CCoeEnv::Static()->ReadResource(iErrStrUnderflow, 00754 R_ISVTELCALLAPP_TELSTR_ERRUNDERFLOW); 00755 CCoeEnv::Static()->ReadResource(iErrStrAlreadyExists, 00756 R_ISVTELCALLAPP_TELSTR_ERRALREADYEXISTS); 00757 CCoeEnv::Static()->ReadResource(iErrStrInUse, 00758 R_ISVTELCALLAPP_TELSTR_ERRINUSE); 00759 CCoeEnv::Static()->ReadResource(iErrStrServerTerminated, 00760 R_ISVTELCALLAPP_TELSTR_ERRSERVERTERMINATED); 00761 CCoeEnv::Static()->ReadResource(iErrStrServerBusy, 00762 R_ISVTELCALLAPP_TELSTR_ERRSERVERBUSY); 00763 CCoeEnv::Static()->ReadResource(iErrStrUnknown, 00764 R_ISVTELCALLAPP_TELSTR_ERRUNKNOWN); 00765 CCoeEnv::Static()->ReadResource(iErrStrCorrupt, 00766 R_ISVTELCALLAPP_TELSTR_ERRCORRUPT); 00767 CCoeEnv::Static()->ReadResource(iErrStrAccessDenied, 00768 R_ISVTELCALLAPP_TELSTR_ERRACCESSDENIED); 00769 CCoeEnv::Static()->ReadResource(iErrStrCommsLineFail, 00770 R_ISVTELCALLAPP_TELSTR_ERRCOMMSLINEFAIL); 00771 CCoeEnv::Static()->ReadResource(iErrStrTimedOut, 00772 R_ISVTELCALLAPP_TELSTR_ERRTIMEDOUT); 00773 CCoeEnv::Static()->ReadResource(iErrStrCouldNotConnect, 00774 R_ISVTELCALLAPP_TELSTR_ERRCOULDNOTCONNECT); 00775 CCoeEnv::Static()->ReadResource(iErrStrCouldNotDisconnect, 00776 R_ISVTELCALLAPP_TELSTR_ERRCOULDNOTDISCONNECT); 00777 CCoeEnv::Static()->ReadResource(iErrStrHardwareNotAvailable, 00778 R_ISVTELCALLAPP_TELSTR_ERRHARDWARENOTAVAILABLE); 00779 CCoeEnv::Static()->ReadResource(iErrStrSessionClosed, 00780 R_ISVTELCALLAPP_TELSTR_ERRSESSIONCLOSED); 00781 CCoeEnv::Static()->ReadResource(iErrStrPermissionDenied, 00782 R_ISVTELCALLAPP_TELSTR_ERRPERMISSIONDENIED); 00783 CCoeEnv::Static()->ReadResource(iErrStrDefault, 00784 R_ISVTELCALLAPP_TELSTR_ERRORDEFAULT); 00785 CCoeEnv::Static()->ReadResource(iEmuApiNotSupported, 00786 R_ISVTELCALLAPP_ERR_EMUAPINOTSUPPORTED); 00787 } 00788 00789 // ---------------------------------------------------------------------------- 00790 // void CIsvTelCallAppTelephony::GeneralErrorMessage() 00791 // Finds the system wide error. On return aErrMsgBuffer contains the 00792 // error message. 00793 // ---------------------------------------------------------------------------- 00794 // 00795 void CIsvTelCallAppTelephony::GeneralErrorMessage( TInt aStatus, 00796 TBuf16<KMaxErrMsgSize> *aErrMsgBuffer ) 00797 { 00798 switch( aStatus ) 00799 { 00800 case KErrNotFound: 00801 { 00802 (*aErrMsgBuffer).Copy(iErrStrNotFound); 00803 } 00804 break; 00805 case KErrGeneral: 00806 { 00807 (*aErrMsgBuffer).Copy(iErrStrGeneral); 00808 } 00809 break; 00810 case KErrCancel: 00811 { 00812 (*aErrMsgBuffer).Copy(iErrStrCancel); 00813 } 00814 break; 00815 case KErrNoMemory: 00816 { 00817 (*aErrMsgBuffer).Copy(iErrStrNoMemory); 00818 } 00819 break; 00820 case KErrNotSupported: 00821 { 00822 (*aErrMsgBuffer).Copy(iErrStrNotSupported); 00823 } 00824 break; 00825 case KErrArgument: 00826 { 00827 (*aErrMsgBuffer).Copy(iErrStrArgument); 00828 } 00829 break; 00830 case KErrTotalLossOfPrecision: 00831 { 00832 (*aErrMsgBuffer).Copy(iErrStrTotalLossOfPrecision); 00833 } 00834 break; 00835 case KErrBadHandle: 00836 { 00837 (*aErrMsgBuffer).Copy(iErrStrBadHandle); 00838 } 00839 break; 00840 case KErrOverflow: 00841 { 00842 (*aErrMsgBuffer).Copy(iErrStrOverflow); 00843 } 00844 break; 00845 case KErrUnderflow: 00846 { 00847 (*aErrMsgBuffer).Copy(iErrStrUnderflow); 00848 } 00849 break; 00850 case KErrAlreadyExists: 00851 { 00852 (*aErrMsgBuffer).Copy(iErrStrAlreadyExists); 00853 } 00854 break; 00855 case KErrInUse: 00856 { 00857 (*aErrMsgBuffer).Copy(iErrStrInUse); 00858 } 00859 break; 00860 case KErrServerTerminated: 00861 { 00862 (*aErrMsgBuffer).Copy(iErrStrServerTerminated); 00863 } 00864 break; 00865 case KErrServerBusy: 00866 { 00867 (*aErrMsgBuffer).Copy(iErrStrServerBusy); 00868 } 00869 break; 00870 case KErrUnknown: 00871 { 00872 (*aErrMsgBuffer).Copy(iErrStrUnknown); 00873 } 00874 break; 00875 case KErrCorrupt: 00876 { 00877 (*aErrMsgBuffer).Copy(iErrStrCorrupt); 00878 } 00879 break; 00880 case KErrAccessDenied: 00881 { 00882 (*aErrMsgBuffer).Copy(iErrStrAccessDenied); 00883 } 00884 break; 00885 case KErrCommsLineFail: 00886 { 00887 (*aErrMsgBuffer).Copy(iErrStrCommsLineFail); 00888 } 00889 break; 00890 case KErrTimedOut: 00891 { 00892 (*aErrMsgBuffer).Copy(iErrStrTimedOut); 00893 } 00894 break; 00895 case KErrCouldNotConnect: 00896 { 00897 (*aErrMsgBuffer).Copy(iErrStrCouldNotConnect); 00898 } 00899 break; 00900 case KErrCouldNotDisconnect: 00901 { 00902 (*aErrMsgBuffer).Copy(iErrStrCouldNotDisconnect); 00903 } 00904 break; 00905 case KErrHardwareNotAvailable: 00906 { 00907 (*aErrMsgBuffer).Copy(iErrStrHardwareNotAvailable); 00908 } 00909 break; 00910 case KErrSessionClosed: 00911 { 00912 (*aErrMsgBuffer).Copy(iErrStrSessionClosed); 00913 } 00914 break; 00915 case KErrPermissionDenied: 00916 { 00917 (*aErrMsgBuffer).Copy(iErrStrPermissionDenied); 00918 } 00919 break; 00920 default: 00921 { 00922 (*aErrMsgBuffer).Copy(iErrStrDefault); 00923 } 00924 break; 00925 } 00926 } 00927 00928 // End of File 00929
|
© Nokia 2006 |