00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "CCallStatus.h"
00018
00027 CCallStatus* CCallStatus::NewL(MExecAsync* aController, CTelephony::TCallId aCallId)
00028 {
00029 CCallStatus* self = new(ELeave) CCallStatus(aController, aCallId);
00030 CleanupStack::PushL(self);
00031 self->ConstructL();
00032 CleanupStack::Pop(self);
00033 return self;
00034 }
00035
00039 CCallStatus::~CCallStatus()
00040 {
00041 Cancel();
00042 }
00043
00048 void CCallStatus::DoStartRequestL()
00049 {
00050 iTelephony->GetCallStatus(iCallId, iCallStatusV1Pckg);
00051 iConsole->Printf((_L("%d ")), iCallId);
00052 CTelephony::TCallStatus callStatus = iCallStatusV1.iStatus;
00053 switch(callStatus)
00054 {
00055 case CTelephony::EStatusRinging:
00056 iConsole->Printf(_L("RING RING RING\n"));
00057 break;
00058 case CTelephony::EStatusConnected:
00059 iConsole->Printf(_L("Call Status connected\n"));
00060 break;
00061 case CTelephony::EStatusConnecting:
00062 iConsole->Printf(_L("Call Status connecting\n"));
00063 break;
00064 case CTelephony::EStatusAnswering:
00065 iConsole->Printf(_L("Call Status Answering\n"));
00066 break;
00067 case CTelephony::EStatusIdle:
00068 iConsole->Printf(_L("Call Status Idle\n"));
00069 break;
00070 case CTelephony::EStatusDisconnecting:
00071 iConsole->Printf(_L("Call Status Disconnecting\n"));
00072 break;
00073 case CTelephony::EStatusHold:
00074 iConsole->Printf(_L("Call Status on Hold\n"));
00075 break;
00076 default:
00077 iConsole->Printf((_L("Call status changed is %d \n")), callStatus);
00078 break;
00079 }
00080
00081 if(callStatus == CTelephony::EStatusConnected)
00082 {
00083 ExampleComplete();
00084 }
00085 else
00086 {
00087 RequestNotificationL();
00088 }
00089 }
00090
00098 CCallStatus::CCallStatus(MExecAsync* aController, CTelephony::TCallId aCallId)
00099 : CISVAPIAsync(aController, KCallStatus),
00100 iCallId(aCallId),
00101 iCallStatusV1Pckg(iCallStatusV1)
00102 {
00103
00104 }
00105
00109 void CCallStatus::ConstructL()
00110 {
00111
00112 }
00113
00117 void CCallStatus::RunL()
00118 {
00119
00120 if(iStatus != KErrNone)
00121 {
00122
00123 iConsole->Printf(KError);
00124
00125
00126 iConsole->Printf(_L("%d\n"), iStatus.Int());
00127 }
00128 else
00129 {
00130
00131 iConsole->Printf((_L("%d ")), iCallId);
00132 CTelephony::TCallStatus CallStatus = iCallStatusV1.iStatus;
00133 switch(CallStatus)
00134 {
00135 case CTelephony::EStatusRinging:
00136 iConsole->Printf(_L("RING RING RING\n"));
00137 break;
00138 case CTelephony::EStatusConnected:
00139 iConsole->Printf(_L("Call Status connected\n"));
00140 break;
00141 case CTelephony::EStatusConnecting:
00142 iConsole->Printf(_L("Call Status connecting\n"));
00143 break;
00144 case CTelephony::EStatusAnswering:
00145 iConsole->Printf(_L("Call Status Answering\n"));
00146 break;
00147 case CTelephony::EStatusIdle:
00148 iConsole->Printf(_L("Call Status Idle\n"));
00149 break;
00150 case CTelephony::EStatusDisconnecting:
00151 iConsole->Printf(_L("Call Status Disconnecting\n"));
00152 break;
00153 case CTelephony::EStatusHold:
00154 iConsole->Printf(_L("Call Status on Hold\n"));
00155 break;
00156 default:
00157 iConsole->Printf((_L("Call status is %d \n")), CallStatus);
00158 break;
00159 }
00160 if (CallStatus == CTelephony::EStatusDisconnecting)
00161 {
00162 ExampleNotify();
00163 }
00164 else if(CallStatus == CTelephony::EStatusConnected)
00165 {
00166 ExampleComplete();
00167 }
00168 else
00169 {
00170 RequestNotificationL();
00171 }
00172 }
00173 }
00174
00179 void CCallStatus::DoRequestNotificationL()
00180 {
00181
00182
00183
00184 _LIT( KNotifyPanic, "CCallStatus Notify Method" );
00185 __ASSERT_ALWAYS( !IsActive(), User::Panic( KNotifyPanic, 1 ));
00186 iRequestNotify = ETrue;
00187 CTelephony::TNotificationEvent iEvent;
00188
00189 switch(iCallId)
00190 {
00191 case CTelephony::EISVCall1:
00192 iEvent = CTelephony::EOwnedCall1StatusChange;
00193 break;
00194 case CTelephony::EISVCall2:
00195 iEvent = CTelephony::EOwnedCall2StatusChange;
00196 break;
00197 default:
00198
00199 break;
00200 }
00201
00202
00203 iTelephony->NotifyChange(iStatus, iEvent, iCallStatusV1Pckg);
00204 SetActive();
00205 }
00206
00210 void CCallStatus::DoCancel()
00211 {
00212 switch(iCallId)
00213 {
00214 case CTelephony::EISVCall1:
00215 iTelephony->CancelAsync(CTelephony::EOwnedCall1StatusChangeCancel);
00216 break;
00217 case CTelephony::EISVCall2:
00218 iTelephony->CancelAsync(CTelephony::EOwnedCall2StatusChangeCancel);
00219 break;
00220 default:
00221
00222 break;
00223 }
00224 }