telephonyutils/etel3rdpartyapi/src/Telephony.cpp
changeset 0 3553901f7fa8
child 24 6638e7f4bd8f
equal deleted inserted replaced
-1:000000000000 0:3553901f7fa8
       
     1 /*
       
     2 * Copyright (c) 2009 Sony Ericsson Mobile Communications AB
       
     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 * Sony Ericsson Mobile Communications AB - initial contribution.
       
    11 * Nokia Corporation - additional changes.
       
    12 * 
       
    13 * Contributors:
       
    14 * 
       
    15 * Description:
       
    16 * Code for CTelephonyFunctions class, used by CTelephony class.
       
    17 *
       
    18 */
       
    19 
       
    20 
       
    21 /**
       
    22  @file
       
    23 */
       
    24 
       
    25 #include <e32def.h>
       
    26 #include <etel3rdparty.h>
       
    27 #include "TelephonyFunctions.h"
       
    28 
       
    29 
       
    30 // Constructors
       
    31 
       
    32 EXPORT_C CTelephony* CTelephony::NewLC()
       
    33 /**
       
    34 Constructs a CTelephony object.
       
    35 
       
    36 A pointer to this object is left on the CleanupStack.
       
    37 
       
    38 The returned pointer is typically assigned to a pointer-variable
       
    39 on the stack.
       
    40 
       
    41 @return	Pointer to a newly created CTelephony object.
       
    42 */
       
    43 	{
       
    44 	CTelephony* self=new (ELeave) CTelephony();
       
    45 	CleanupStack::PushL(self);
       
    46 	self->ConstructL();
       
    47 	return self;
       
    48 	}
       
    49 
       
    50 EXPORT_C CTelephony* CTelephony::NewL()
       
    51 /**
       
    52 Constructs a CTelephony object.
       
    53 
       
    54 No pointer to this object is left on the CleanupStack.
       
    55 
       
    56 The returned pointer is typically assigned to a pointer-variable
       
    57 stored in the Heap.
       
    58 
       
    59 @return	Pointer to a newly created CTelephony object.
       
    60 */
       
    61 	{
       
    62 	CTelephony* self=NewLC();
       
    63 	CleanupStack::Pop();
       
    64 	return self;
       
    65 	}
       
    66 
       
    67 // Destructors
       
    68 
       
    69 CTelephony::~CTelephony() // virtual, so no export
       
    70 /**
       
    71 Destructor
       
    72 
       
    73 Deletes the underlying CTelephonyFunctions object.
       
    74 */
       
    75 	{
       
    76 	delete iTelephonyFunctions;
       
    77 	}
       
    78 
       
    79 
       
    80 /**
       
    81 This method is no longer supported.
       
    82 
       
    83 @return KErrNotSupported
       
    84 @publishedAll
       
    85 @deprecated
       
    86 */
       
    87 EXPORT_C TInt CTelephony::FindDeviceStatus(TInt& /*aCallStatus*/)
       
    88 	{
       
    89 	return KErrNotSupported;
       
    90 	}
       
    91 
       
    92 
       
    93 /**
       
    94 This method is no longer supported. 
       
    95 
       
    96 It was used to establish a circuit-switched data call, but support was removed
       
    97 as functionality was no longer required by licensees. Developers should
       
    98 consider using GPRS via RConnection and RSocket for data functionality instead.
       
    99 
       
   100 @return KErrNotSupported
       
   101 @publishedAll
       
   102 @deprecated
       
   103 @see RConnection
       
   104 @see RSocket
       
   105 @see RMobilePhone
       
   106 */
       
   107 EXPORT_C TInt CTelephony::EstablishDataCall(TInt& /*aDataChannel*/, const TDesC& /*aDialNumber*/)
       
   108 	{
       
   109 	return KErrNotSupported;
       
   110 	}
       
   111 
       
   112 
       
   113 /**
       
   114 This method is no longer supported.
       
   115 
       
   116 It was used to establish a circuit-switched data call, but support was removed
       
   117 as functionality was no longer required by licensees. Developers should
       
   118 consider using GPRS via RConnection and RSocket for data functionality instead.
       
   119 
       
   120 @publishedAll
       
   121 @deprecated
       
   122 @see RConnection
       
   123 @see RSocket
       
   124 @see RMobilePhone
       
   125 */
       
   126 EXPORT_C void CTelephony::EstablishDataCall(TRequestStatus& aRequestStatus, TInt& /*aDataChannel*/,
       
   127                                             const TDesC& /*aDialNumber*/)
       
   128 	{
       
   129 	TRequestStatus* reqStatusPtr = &aRequestStatus;
       
   130 
       
   131 	User::RequestComplete(reqStatusPtr, KErrNotSupported);
       
   132 	}
       
   133 
       
   134 
       
   135 /**
       
   136 This method is no longer supported.
       
   137 
       
   138 It was used to terminate a circuit-switched data call, but support was removed
       
   139 as functionality was no longer required by licensees. Developers should
       
   140 consider using GPRS via RConnection and RSocket for data functionality instead.
       
   141 
       
   142 @return KErrNotSupported
       
   143 @publishedAll
       
   144 @deprecated
       
   145 @see RConnection
       
   146 @see RSocket
       
   147 @see RMobilePhone
       
   148 */
       
   149 EXPORT_C TInt CTelephony::TerminateDataCall()
       
   150 	{
       
   151 	return KErrNotSupported;
       
   152 	}
       
   153 
       
   154 
       
   155 /**
       
   156 This method is no longer supported.
       
   157 
       
   158 It was used to receive a circuit-switched data call, but support was removed
       
   159 as functionality was no longer required by licensees. Developers should
       
   160 consider using GPRS via RConnection and RSocket for data functionality instead.
       
   161 
       
   162 @return KErrNotSupported
       
   163 @publishedAll
       
   164 @deprecated
       
   165 @see RConnection
       
   166 @see RSocket
       
   167 @see RMobilePhone
       
   168 */
       
   169 EXPORT_C TInt CTelephony::ReceiveDataCall(TInt& /*aDataChannel*/)
       
   170 	{
       
   171 	return KErrNotSupported;
       
   172 	}
       
   173 
       
   174 
       
   175 /**
       
   176 This method is no longer supported.
       
   177 
       
   178 It was used to receive a circuit-switched data call, but support was removed
       
   179 as functionality was no longer required by licensees. Developers should
       
   180 consider using GPRS via RConnection and RSocket for data functionality instead.
       
   181 
       
   182 @publishedAll
       
   183 @deprecated
       
   184 @see RConnection
       
   185 @see RSocket
       
   186 @see RMobilePhone
       
   187 */
       
   188 EXPORT_C void CTelephony::ReceiveDataCall(TRequestStatus& aRequestStatus, TInt& /*aDataChannel*/)
       
   189 	{
       
   190 	TRequestStatus* reqStatusPtr = &aRequestStatus;
       
   191 
       
   192 	User::RequestComplete(reqStatusPtr, KErrNotSupported);
       
   193 	}
       
   194 
       
   195 
       
   196 /**
       
   197 This method is no longer supported.
       
   198 
       
   199 It was used to cancel an outstanding request to establish a circuit-switched
       
   200 data call, but support was removed as functionality was no longer required by
       
   201 licensees. Developers should consider using GPRS via RConnection and RSocket
       
   202 for data functionality instead.
       
   203 
       
   204 @publishedAll
       
   205 @deprecated
       
   206 @see RConnection
       
   207 @see RSocket
       
   208 @see RMobilePhone
       
   209 */
       
   210 EXPORT_C void CTelephony::CancelEstablishDataCall()
       
   211 	{
       
   212 	return;
       
   213 	}
       
   214 
       
   215 
       
   216 /**
       
   217 This method is no longer supported.
       
   218 
       
   219 It was used to cancel an outstanding request to receive a circuit-switched data
       
   220 call, but support was removed as functionality was no longer required by
       
   221 licensees. Developers should consider using GPRS via RConnection and RSocket
       
   222 for data functionality instead.
       
   223 
       
   224 @publishedAll
       
   225 @deprecated
       
   226 @see RConnection
       
   227 @see RSocket
       
   228 @see RMobilePhone
       
   229 */
       
   230 EXPORT_C void CTelephony::CancelReceiveDataCall()
       
   231 	{
       
   232 	return;
       
   233 	}
       
   234 
       
   235 
       
   236 // constructor support
       
   237 // Not exported, as used only by functions inside this DLL, eg NewLC()
       
   238 
       
   239 CTelephony::CTelephony()
       
   240 //
       
   241 //First-phase constructor
       
   242 //
       
   243 //Private function which cannot Leave().
       
   244 //
       
   245 	{
       
   246 	}
       
   247 
       
   248 
       
   249 // Class member functions
       
   250 
       
   251 void CTelephony::ConstructL()
       
   252 //
       
   253 //Second-phase constructor
       
   254 //
       
   255 //Allocates and initialises CTelephony object by constructing a
       
   256 //CTelephonyFunctions object where the real work is done.
       
   257 //
       
   258 	{
       
   259 	iTelephonyFunctions = CTelephonyFunctions::NewL();
       
   260 	}
       
   261 
       
   262 
       
   263 EXPORT_C TInt CTelephony::CancelAsync(TCancellationRequest aCancel) const
       
   264 /**
       
   265 Cancels an outstanding asynchronous request.  
       
   266 
       
   267 The result of the cancellation request will be reflected through the 
       
   268 request status of the pending request.  A status of KErrCancel denotes 
       
   269 that the request has been safely cancelled.
       
   270 
       
   271 @param aCancel Canncellation code of request to be cancelled.
       
   272 @capability None
       
   273 */
       
   274 	{
       
   275 	return iTelephonyFunctions->CancelAsync(aCancel);
       
   276 	}
       
   277 	
       
   278 /////////////////////////////////////////////////
       
   279 //Notifier related exports
       
   280 /////////////////////////////////////////////////
       
   281 
       
   282 EXPORT_C void CTelephony::NotifyChange(TRequestStatus& aReqStatus, const TNotificationEvent& aEvent, TDes8& aDes) const
       
   283 /**
       
   284 Registers interest in receiving change notifications for events.
       
   285 
       
   286 Specify the event that you are interested with the aEvent parameter. 
       
   287 
       
   288 Each event is associated with a packaged class.  Pass an instance of 
       
   289 this class to this method.  Then, when the event occurs, information 
       
   290 relating to the event is written into it.  The description
       
   291 of CTelephony::TNotificationEvent tells you the information class for 
       
   292 each event.
       
   293 
       
   294 This is an asynchronous method. Notification can be cancelled using the
       
   295 cancellation codes specified in CTelephony::TNotificationEvent. Pass the
       
   296 appropriate code to CTelephony::CancelAsync() to cancel the notification
       
   297 request.
       
   298 
       
   299 @param aReqStatus Returns the result code after the asynchronous call completes.
       
   300 @param aEvent Event on which change notification is requested. 
       
   301 @param aDes Packaged information class.  On completion, information 
       
   302 relating to the event is written into this class.  Until then, this 
       
   303 class's data is not valid.
       
   304 @capability Dependent This function depends on the TNotificationEvent value 
       
   305 passed to it.
       
   306 */
       
   307 	{
       
   308 	TRequestStatus* reqStatusPtr = &aReqStatus;
       
   309 
       
   310 	__ASSERT_ALWAYS(aReqStatus != KRequestPending,
       
   311 		User::Panic(KTelephonyCategory, KTelephonyPanicIllegalReuse) );
       
   312 
       
   313 	aReqStatus = KRequestPending;
       
   314 	TInt rc=KErrInUse;
       
   315 
       
   316 	TRAPD(leaveCode, rc=iTelephonyFunctions->NotifyChangeL(aReqStatus, aEvent, aDes););
       
   317 
       
   318 	if(leaveCode != KErrNone)
       
   319 		{
       
   320 		iTelephonyFunctions->ResetPendingNotifyRequest(aEvent);
       
   321 		User::RequestComplete(reqStatusPtr, leaveCode);
       
   322 		}
       
   323 	else if (rc != KErrNone)
       
   324 		{
       
   325 		if(rc != KErrInUse)	//this means request already pending, so do not reset
       
   326 			{
       
   327 			iTelephonyFunctions->ResetPendingNotifyRequest(aEvent);
       
   328 			}
       
   329 		User::RequestComplete(reqStatusPtr, rc);
       
   330 		}
       
   331 	}
       
   332 
       
   333 /////////////////////////////////////////////////
       
   334 //Call related exports
       
   335 /////////////////////////////////////////////////
       
   336 
       
   337 EXPORT_C CTelephony::TCallParamsV1::TCallParamsV1()
       
   338 /**
       
   339 Default constructor.
       
   340 */
       
   341 	{
       
   342 	iVersionId=KEtelISVV1;
       
   343 	}
       
   344 
       
   345 EXPORT_C void CTelephony::DialNewCall(TRequestStatus& aRequestStatus, TDes8& aCallParams, 
       
   346 							 const CTelephony::TTelNumber& aTelNumber, CTelephony::TCallId& aCallId, const CTelephony::TPhoneLine aLine) const 
       
   347 /**
       
   348 Initiates a new call.
       
   349 
       
   350 The client specifies the telephone number via the aTelNumber argument 
       
   351 and the desired call parameters via the aCallParams argument. 
       
   352 
       
   353 This is an asynchronous method. After successful completion of the dial request 
       
   354 a call identifier is returned back to the client via the aCallId argument.  
       
   355 The call identifier is needed to hold, resume, swap, and terminate the call.  
       
   356 It is also needed to monitor the status of the call.
       
   357 
       
   358 This functionality is not available when the phone is in "flight" mode.
       
   359 
       
   360 @param aRequestStatus Returns the result code after the asynchronous 
       
   361 call completes.  Pass CTelephony::CancelAsync() CTelephony::EDialNewCallCancel to cancel.
       
   362 
       
   363 @param aCallParams The call parameters used by the TSY.  Pass a CTelephony::TCallParamsV1Pckg, a 
       
   364 packaged CTelephony::TCallParamsV1.
       
   365 @param aTelNumber  Telephone number to dial.
       
   366 @param aCallId Upon completion, contains the call identifier. 
       
   367 @param aLine Line on which call can be made. Currently, only voice calls are supported.
       
   368 
       
   369 @see AnswerIncomingCall()
       
   370 @see Hold()
       
   371 @see Resume()
       
   372 @see Swap()
       
   373 @see Hangup()
       
   374 @see GetCallStatus()
       
   375 @see GetCallDynamicCaps()
       
   376 @capability NetworkServices
       
   377 */
       
   378 	{
       
   379 	TRequestStatus* reqStatusPtr = &aRequestStatus;
       
   380 	
       
   381 	__ASSERT_ALWAYS(aRequestStatus != KRequestPending,
       
   382 		User::Panic(KTelephonyCategory, KTelephonyPanicIllegalReuse) );
       
   383 
       
   384 	aRequestStatus = KRequestPending;
       
   385 	TInt rc=KErrInUse;	
       
   386 		
       
   387 	TRAPD(leaveCode, rc=iTelephonyFunctions->DialNewCallL(aRequestStatus, aCallParams, aTelNumber,aCallId,aLine));
       
   388 
       
   389 	if(leaveCode != KErrNone)
       
   390 		{	
       
   391 		iTelephonyFunctions->SetRequestPending(CTelephonyFunctions::EDialNewCall, EFalse);
       
   392 		User::RequestComplete(reqStatusPtr, leaveCode);
       
   393 		}
       
   394 	else if (rc != KErrNone)
       
   395 		{
       
   396 		if(rc != KErrInUse)	//this means request already pending, so do not reset
       
   397 			{
       
   398 			iTelephonyFunctions->SetRequestPending(CTelephonyFunctions::EDialNewCall, EFalse);
       
   399 			}
       
   400 		User::RequestComplete(reqStatusPtr, rc);
       
   401 		}
       
   402 	}
       
   403 	
       
   404 EXPORT_C void CTelephony::Hold(TRequestStatus& aRequestStatus, const CTelephony::TCallId& aCallId) const
       
   405 /**
       
   406 Places a call on hold. This is only for calls you dialled or answered with CTelephony. 
       
   407 
       
   408 The call's dynamic capabilities must allow the Hold operation for 
       
   409 this call to have successful completion of this request; see CTelephony::GetCallDynamicCaps().
       
   410 
       
   411 This is an asynchronous method. Upon successful completion of Hold, line and call status might be affected by this operation. 
       
   412 Hold is only available for the voice line.
       
   413 
       
   414 This functionality is not available when the phone is in "flight" mode.
       
   415 
       
   416 @param aRequestStatus Returns the result code after the asynchronous 
       
   417 call completes. Pass CTelephony::CancelAsync() CTelephony::EHoldCancel to cancel.
       
   418 
       
   419 @param aCallId Call ID, as returned by CTelephony::DialNewCall() or CTelephony::AnswerIncomingCall().
       
   420 
       
   421 @see AnswerIncomingCall()
       
   422 @see DialNewCall()
       
   423 @see Resume()
       
   424 @see Swap()
       
   425 @see Hangup()
       
   426 @see GetCallStatus()
       
   427 @see GetCallDynamicCaps()
       
   428 @capability NetworkServices
       
   429 */
       
   430 	{
       
   431 	TRequestStatus* reqStatusPtr = &aRequestStatus;
       
   432 	
       
   433 	__ASSERT_ALWAYS(aRequestStatus != KRequestPending,
       
   434 		User::Panic(KTelephonyCategory, KTelephonyPanicIllegalReuse) );
       
   435 
       
   436 	aRequestStatus = KRequestPending;
       
   437 	TInt rc=KErrInUse;	
       
   438 		
       
   439 	TRAPD(leaveCode, rc=iTelephonyFunctions->HoldL(aRequestStatus, aCallId));
       
   440 
       
   441 	if(leaveCode != KErrNone)
       
   442 		{
       
   443 		iTelephonyFunctions->SetRequestPending(CTelephonyFunctions::EHold, EFalse);	
       
   444 		User::RequestComplete(reqStatusPtr, leaveCode);
       
   445 		}
       
   446 	else if (rc != KErrNone)
       
   447 		{
       
   448 		if(rc != KErrInUse)	//this means request already pending, so do not reset
       
   449 			{
       
   450 			iTelephonyFunctions->SetRequestPending(CTelephonyFunctions::EHold, EFalse);
       
   451 			}
       
   452 		User::RequestComplete(reqStatusPtr, rc);
       
   453 		}
       
   454 	}
       
   455 	
       
   456 EXPORT_C void CTelephony::Resume(TRequestStatus& aRequestStatus, const CTelephony::TCallId& aCallId) const
       
   457 /**
       
   458 Resumes a held call. This is only for calls you dialled or answered with CTelephony.  
       
   459 The client specifies the call ID via the aCallId argument. 
       
   460 
       
   461 The call's dynamic capabilities must allow the Resume operation for this 
       
   462 call to have successful completion of this request; see CTelephony::GetCallDynamicCaps().
       
   463 
       
   464 This is an asynchronous method. Upon successful completion of Resume, line and 
       
   465 call status might be affected by this operation. 
       
   466 Resume is only available for the voice line.
       
   467 
       
   468 This functionality is not available when the phone is in "flight" mode.
       
   469 
       
   470 @param aRequestStatus Returns the result code after the asynchronous 
       
   471 call completes.  Pass CTelephony::CancelAsync() CTelephony::EResumeCancel to cancel.
       
   472 @param aCallId Call ID, as returned by CTelephony::DialNewCall() or CTelephony::AnswerIncomingCall().
       
   473 
       
   474 @see AnswerIncomingCall()
       
   475 @see DialNewCall()
       
   476 @see Hold()
       
   477 @see Swap()
       
   478 @see Hangup()
       
   479 @see GetCallStatus()
       
   480 @see GetCallDynamicCaps()
       
   481 @capability NetworkServices
       
   482 */
       
   483 	{
       
   484 	TRequestStatus* reqStatusPtr = &aRequestStatus;
       
   485 	
       
   486 	__ASSERT_ALWAYS(aRequestStatus != KRequestPending,
       
   487 		User::Panic(KTelephonyCategory, KTelephonyPanicIllegalReuse) );
       
   488 
       
   489 	aRequestStatus = KRequestPending;
       
   490 	TInt rc=KErrInUse;	
       
   491 		
       
   492 	TRAPD(leaveCode, rc=iTelephonyFunctions->ResumeL(aRequestStatus, aCallId));
       
   493 
       
   494 	if(leaveCode != KErrNone)
       
   495 		{	
       
   496 		iTelephonyFunctions->SetRequestPending(CTelephonyFunctions::EResume, EFalse);
       
   497 		User::RequestComplete(reqStatusPtr, leaveCode);
       
   498 		}
       
   499 	else if (rc != KErrNone)
       
   500 		{
       
   501 		if(rc != KErrInUse)	//this means request already pending, so do not reset
       
   502 			{
       
   503 			iTelephonyFunctions->SetRequestPending(CTelephonyFunctions::EResume, EFalse);
       
   504 			}
       
   505 		User::RequestComplete(reqStatusPtr, rc);
       
   506 		}
       
   507 	}
       
   508 	
       
   509 EXPORT_C void CTelephony::Swap(TRequestStatus& aRequestStatus, const CTelephony::TCallId& aCallId1, const 
       
   510 					  CTelephony::TCallId& aCallId2) const
       
   511 /**
       
   512 Swaps calls. This is only for calls you dialled or answered with CTelephony. 
       
   513 
       
   514 Swap is possible only if both calls are owned by this ISV application. 
       
   515 The client specifies the call ids via the aCallId1 and aCallId2 arguments. 
       
   516 
       
   517 This is an asynchronous method.
       
   518 
       
   519 The calls' dynamic capabilities must allow the Swap operation for this call to 
       
   520 have successful completion of this request; see CTelephony::GetCallDynamicCaps().
       
   521 
       
   522 Swap is only available for the voice line.
       
   523 
       
   524 This functionality is not available when the phone is in "flight" mode.
       
   525 
       
   526 @param aRequestStatus Returns the result code after the asynchronous 
       
   527 call completes. Pass CTelephony::CancelAsync() CTelephony::ESwapCancel to cancel.
       
   528 @param aCallId1 ID of a call, as returned by CTelephony::DialNewCall() or CTelephony::AnswerIncomingCall().
       
   529 @param aCallId2 ID of another call, as returned by CTelephony::DialNewCall() or CTelephony::AnswerIncomingCall().
       
   530 
       
   531 @see AnswerIncomingCall()
       
   532 @see DialNewCall()
       
   533 @see Hold()
       
   534 @see Resume()
       
   535 @see Hangup()
       
   536 @see GetCallStatus()
       
   537 @see GetCallDynamicCaps()
       
   538 @capability NetworkServices
       
   539 */
       
   540 	{
       
   541 	TRequestStatus* reqStatusPtr = &aRequestStatus;
       
   542 	
       
   543 	__ASSERT_ALWAYS(aRequestStatus != KRequestPending,
       
   544 		User::Panic(KTelephonyCategory, KTelephonyPanicIllegalReuse) );
       
   545 
       
   546 	aRequestStatus = KRequestPending;
       
   547 	TInt rc=KErrInUse;	
       
   548 		
       
   549 	TRAPD(leaveCode, rc=iTelephonyFunctions->SwapL(aRequestStatus, aCallId1, aCallId2));
       
   550 
       
   551 	if(leaveCode != KErrNone)
       
   552 		{	
       
   553 		iTelephonyFunctions->SetRequestPending(CTelephonyFunctions::ESwap, EFalse);
       
   554 		User::RequestComplete(reqStatusPtr, leaveCode);
       
   555 		}
       
   556 	else if (rc != KErrNone)
       
   557 		{
       
   558 		if(rc != KErrInUse)	//this means request already pending, so do not reset
       
   559 			{
       
   560 			iTelephonyFunctions->SetRequestPending(CTelephonyFunctions::ESwap, EFalse);
       
   561 			}
       
   562 		User::RequestComplete(reqStatusPtr, rc);
       
   563 		}
       
   564 	}
       
   565 	
       
   566 EXPORT_C void CTelephony::Hangup(TRequestStatus& aRequestStatus, const CTelephony::TCallId& aCallId) const
       
   567 /**
       
   568 Hangs up a call.  This is only for calls you dialled or answered with CTelephony. 
       
   569 
       
   570 The client specifies the call ID via the aCallId argument. 
       
   571 
       
   572 This is an asynchronous method. Upon successful completion of Hangup, the line 
       
   573 and call status might be affected.
       
   574 Hangup is available only for the voice line.
       
   575 
       
   576 This functionality is not available when the phone is in "flight" mode.
       
   577 
       
   578 @param aRequestStatus Returns the result code after the asynchronous 
       
   579 call completes. Pass CTelephony::CancelAsync() CTelephony::EHangupCancel to cancel.
       
   580 @param aCallId Call ID, as returned by CTelephony::DialNewCall() or CTelephony::AnswerIncomingCall().
       
   581 
       
   582 @see AnswerIncomingCall()
       
   583 @see DialNewCall()
       
   584 @see Hold()
       
   585 @see Resume()
       
   586 @see Swap()
       
   587 @see GetCallStatus()
       
   588 @see GetCallDynamicCaps()
       
   589 @capability NetworkServices
       
   590 */
       
   591 	{
       
   592 	TRequestStatus* reqStatusPtr = &aRequestStatus;
       
   593 	
       
   594 	__ASSERT_ALWAYS(aRequestStatus != KRequestPending,
       
   595 		User::Panic(KTelephonyCategory, KTelephonyPanicIllegalReuse) );
       
   596 
       
   597 	aRequestStatus = KRequestPending;
       
   598 	TInt rc=KErrInUse;	
       
   599 		
       
   600 	TRAPD(leaveCode, rc=iTelephonyFunctions->HangupL(aRequestStatus, aCallId));
       
   601 
       
   602 	if(leaveCode != KErrNone)
       
   603 		{	
       
   604 		iTelephonyFunctions->SetRequestPending(CTelephonyFunctions::EHangup, EFalse);
       
   605 		User::RequestComplete(reqStatusPtr, leaveCode);
       
   606 		}
       
   607 	else if (rc != KErrNone)
       
   608 		{
       
   609 		if(rc != KErrInUse)	//this means request already pending, so do not reset
       
   610 			{
       
   611 			iTelephonyFunctions->SetRequestPending(CTelephonyFunctions::EHangup, EFalse);
       
   612 			}
       
   613 		User::RequestComplete(reqStatusPtr, rc);
       
   614 		}
       
   615 	}
       
   616 	
       
   617 EXPORT_C void CTelephony::AnswerIncomingCall(TRequestStatus& aRequestStatus, CTelephony::TCallId& aCallId, 
       
   618 		const CTelephony::TPhoneLine aLine) const 
       
   619 /**
       
   620 Answers an incoming new voice call.  Fax and data calls cannot be answered.
       
   621 
       
   622 Answering an incoming call is possible only when the voice line status 
       
   623 is ringing (CTelephony::EStatusRinging) and RLine::NotifyIncomingCall
       
   624 has completed.
       
   625 
       
   626 This is an asynchronous method. Upon successful completion of 
       
   627 AnswerIncomingCall() a call ID is returned to the client via the aCallId 
       
   628 argument. The call identifier is needed to hold, resume, swap, and terminate 
       
   629 the call.  It is also needed to monitor the status of the call.
       
   630 
       
   631 This functionality is not available when the phone is in "flight" mode.
       
   632 
       
   633 @param aRequestStatus Returns the result code after the asynchronous 
       
   634 call completes. Pass CTelephony::CancelAsync() CTelephony::EAnswerIncomingCallCancel to cancel 
       
   635 @param aCallId On completion, contains the call ID.
       
   636 @param aLine Line from which the answer request will attempted.  Currently, only the voice line is supported.
       
   637 
       
   638 @see DialNewCall()
       
   639 @see Hold()
       
   640 @see Resume()
       
   641 @see Swap()
       
   642 @see Hangup()
       
   643 @see GetCallStatus()
       
   644 @see GetCallDynamicCaps()
       
   645 @capability NetworkServices
       
   646 */
       
   647 	{
       
   648 	TRequestStatus* reqStatusPtr = &aRequestStatus;
       
   649 	
       
   650 	__ASSERT_ALWAYS(aRequestStatus != KRequestPending,
       
   651 		User::Panic(KTelephonyCategory, KTelephonyPanicIllegalReuse) );
       
   652 
       
   653 	aRequestStatus = KRequestPending;
       
   654 	TInt rc=KErrInUse;	
       
   655 		
       
   656 	TRAPD(leaveCode, rc=iTelephonyFunctions->AnswerIncomingCallL(aRequestStatus,aCallId,aLine));
       
   657 
       
   658 	if(leaveCode != KErrNone)
       
   659 		{	
       
   660 		iTelephonyFunctions->SetRequestPending(CTelephonyFunctions::EAnswerIncomingCall, EFalse);
       
   661 		User::RequestComplete(reqStatusPtr, leaveCode);
       
   662 		}
       
   663 	else if (rc != KErrNone)
       
   664 		{
       
   665 		if(rc != KErrInUse)	//this means request already pending, so do not reset
       
   666 			{
       
   667 			iTelephonyFunctions->SetRequestPending(CTelephonyFunctions::EAnswerIncomingCall, EFalse);
       
   668 			}
       
   669 		User::RequestComplete(reqStatusPtr, rc);
       
   670 		}
       
   671 	}
       
   672 	
       
   673 EXPORT_C TInt CTelephony::GetCallStatus(const TCallId& aCallId, TDes8& aStatus) const
       
   674 /**
       
   675 Retrieves the status of the selected call specified by the aCallId argument. 
       
   676 
       
   677 The current status of the selected call is returned to the client via the 
       
   678 aStatus argument. 
       
   679 GetCallStatus is available only for the voice line.
       
   680 
       
   681 This functionality is not available when the phone is in "flight" mode.
       
   682 
       
   683 @param aCallId Call ID, as returned by CTelephony::DialNewCall() or CTelephony::AnswerIncomingCall().
       
   684 @param aStatus On completion contains a CTelephony::TCallStatusV1Pckg, 
       
   685 a packaged CTelephony::TCallStatusV1 containing the call status.
       
   686 @return KErrNone if successful, otherwise another of the system-wide error codes.
       
   687 
       
   688 @see AnswerIncomingCall()
       
   689 @see DialNewCall()
       
   690 @see Hold()
       
   691 @see Resume()
       
   692 @see Swap()
       
   693 @see Hangup()
       
   694 @see GetCallDynamicCaps()
       
   695 @capability None
       
   696 */
       
   697 	{
       
   698 	TInt rc=KErrAccessDenied;	
       
   699 	
       
   700 	TRAPD(leaveCode, rc=iTelephonyFunctions->GetCallStatusL(aCallId, aStatus));
       
   701 
       
   702 	if(leaveCode != KErrNone)
       
   703 		{	
       
   704 		return leaveCode;
       
   705 		}
       
   706 	else if (rc != KErrNone)
       
   707 		{
       
   708 		return rc;
       
   709 		}
       
   710 	return KErrNone;
       
   711 	}	
       
   712 
       
   713 EXPORT_C CTelephony::TCallCapsV1::TCallCapsV1()
       
   714 	{
       
   715 	iVersionId=KEtelISVV1;
       
   716 	}
       
   717 
       
   718 EXPORT_C TInt CTelephony::GetCallDynamicCaps(const TCallId& aCallId, TDes8& aCaps) const
       
   719 /**
       
   720 Retrieves the dynamic call capabilities for calls you dialled or answered with CTelephony. 
       
   721 
       
   722 The client specifies the call ID via the aCallId argument. 
       
   723 Upon successful retrieval the call control capabilities (Hold, Resume 
       
   724 and Swap) are returned via the aCaps argument.
       
   725 
       
   726 This functionality is not available when the phone is in "flight" mode.
       
   727 
       
   728 @param aCallId Call ID, as returned by CTelephony::DialNewCall() or CTelephony::AnswerIncomingCall().
       
   729 @param aCaps On completion contains a CTelephony::TCallCapsV1Pckg, 
       
   730 a packaged CTelephony::TCallCapsV1 containing the call's dynamic capabilities.
       
   731 @return KErrNone if successful, otherwise another of the system-wide error codes.
       
   732 
       
   733 @capability None
       
   734 */
       
   735 	{
       
   736 	TInt rc=KErrAccessDenied;	
       
   737 		
       
   738 	TRAPD(leaveCode, rc=iTelephonyFunctions->GetCallDynamicCaps(aCallId, aCaps));
       
   739 
       
   740 	if(leaveCode != KErrNone)
       
   741 		{	
       
   742 		return leaveCode;
       
   743 		}
       
   744 	else if (rc != KErrNone)
       
   745 		{
       
   746 		return KErrAccessDenied;
       
   747 		}
       
   748 	return KErrNone;
       
   749 	}
       
   750 	
       
   751 /////////////////////////////////////////////////
       
   752 //Phone related exports
       
   753 /////////////////////////////////////////////////
       
   754 	
       
   755 EXPORT_C TInt CTelephony::TEtelISVType::VersionId() const
       
   756 /**
       
   757 Default constructor.
       
   758 */
       
   759 	{
       
   760 	return iVersionId;
       
   761 	}
       
   762 
       
   763 EXPORT_C CTelephony::TPhoneIdV1::TPhoneIdV1()
       
   764 /**
       
   765 Default constructor.
       
   766 */
       
   767 	{
       
   768 	iVersionId=KEtelISVV1;
       
   769 	}
       
   770 
       
   771 EXPORT_C void CTelephony::GetPhoneId(TRequestStatus& aRequestStatus, TDes8& aDes) const
       
   772 /**
       
   773 Retrieves the model information and unique identification of the mobile device.
       
   774 
       
   775 This is an asynchronous method. Upon successful completion of the request the 
       
   776 manufacturer name, model and serial number (IMEI or ESN) are returned back to 
       
   777 the client via the aDes argument. 
       
   778 
       
   779 @param aRequestStatus Returns the result code after the asynchronous 
       
   780 call completes. Pass CTelephony::CancelAsync() CTelephony::EGetPhoneIdCancel to cancel.
       
   781 @param aDes Contains a CTelephony::TPhoneIdV1Pckg, a packaged version of the 
       
   782 CTelephony::TPhoneIdV1 class which is filled on completion.
       
   783 @capability None
       
   784 */
       
   785 	{
       
   786 	TRequestStatus* reqStatusPtr = &aRequestStatus;
       
   787 	
       
   788 	__ASSERT_ALWAYS(aRequestStatus != KRequestPending,
       
   789 		User::Panic(KTelephonyCategory, KTelephonyPanicIllegalReuse) );
       
   790 
       
   791 	aRequestStatus = KRequestPending;
       
   792 	TInt rc=KErrAccessDenied;	
       
   793 	
       
   794 	TRAPD(leaveCode, rc=iTelephonyFunctions->GetPhoneIdL(aRequestStatus, aDes));
       
   795 
       
   796 	if(leaveCode != KErrNone)
       
   797 		{	
       
   798 		iTelephonyFunctions->SetRequestPending(CTelephonyFunctions::EGetPhoneId, EFalse);
       
   799 		User::RequestComplete(reqStatusPtr, leaveCode);
       
   800 		}
       
   801 	else if (rc != KErrNone)
       
   802 		{
       
   803 		if(rc != KErrInUse)	//this means request already pending, so do not reset
       
   804 			{
       
   805 			iTelephonyFunctions->SetRequestPending(CTelephonyFunctions::EGetPhoneId, EFalse);
       
   806 			}
       
   807 		User::RequestComplete(reqStatusPtr, rc);
       
   808 		}
       
   809 	}
       
   810 	
       
   811 EXPORT_C CTelephony::TSubscriberIdV1::TSubscriberIdV1()
       
   812 	{
       
   813 	iVersionId=KEtelISVV1;
       
   814 	}
       
   815 
       
   816 EXPORT_C void CTelephony::GetSubscriberId(TRequestStatus& aRequestStatus, TDes8& aDes) const
       
   817 /**
       
   818 Retrieves information about the mobile device's current subscriber. 
       
   819 This will normally identify the SIM card on GSM and WCDMA networks or 
       
   820 the R-UIM card on CDMA networks.  It is independent of the phone.
       
   821 
       
   822 This is an asynchronous method. Upon successful completion of the request
       
   823 the serial number of the SIM or R-UIM card is returned back to the client
       
   824 via the aDes argument. 
       
   825 
       
   826 @param aRequestStatus Returns the result code after the asynchronous 
       
   827 call completes.  Pass CTelephony::CancelAsync() CTelephony::EGetSubscriberIdCancel to cancel.
       
   828 @param aDes Contains a CTelephony::TSubscriberIdV1Pckg, a packaged version of the 
       
   829 CTelephony::TSubscriberIdV1 class which is filled on completion.	
       
   830 @capability ReadDeviceData
       
   831 */
       
   832 	{
       
   833 	TRequestStatus* reqStatusPtr = &aRequestStatus;
       
   834 	
       
   835 	__ASSERT_ALWAYS(aRequestStatus != KRequestPending,
       
   836 		User::Panic(KTelephonyCategory, KTelephonyPanicIllegalReuse) );
       
   837 
       
   838 	aRequestStatus = KRequestPending;
       
   839 	TInt rc=KErrInUse;	
       
   840 
       
   841 	TRAPD(leaveCode, rc=iTelephonyFunctions->GetSubscriberIdL(aRequestStatus, aDes));
       
   842 
       
   843 	if(leaveCode != KErrNone)
       
   844 		{	
       
   845 		iTelephonyFunctions->SetRequestPending(CTelephonyFunctions::EGetSubscriberId, EFalse);
       
   846 		User::RequestComplete(reqStatusPtr, leaveCode);
       
   847 		}
       
   848 	else if (rc != KErrNone)
       
   849 		{
       
   850 		if(rc != KErrInUse)	//this means request already pending, so do not reset
       
   851 			{
       
   852 			iTelephonyFunctions->SetRequestPending(CTelephonyFunctions::EGetSubscriberId, EFalse);
       
   853 			}
       
   854 		User::RequestComplete(reqStatusPtr, rc);
       
   855 		}
       
   856 	}
       
   857 	
       
   858 EXPORT_C CTelephony::TIndicatorV1::TIndicatorV1()
       
   859 /**
       
   860 Default constructor.
       
   861 */
       
   862 	{
       
   863 	iVersionId=KEtelISVV1;
       
   864 	}
       
   865 
       
   866 EXPORT_C void CTelephony::GetIndicator(TRequestStatus& aRequestStatus, TDes8& aDes) const
       
   867 /**
       
   868 Retrieves the battery charging indicator, the network availability 
       
   869 indicator and call-in-progress indicator. 
       
   870 
       
   871 This is an asynchronous method. The method returns two flags for each
       
   872 indicator: the first is a capability flag; it says whether the indicator
       
   873 is valid.  The second flag is the indicator itself.
       
   874 
       
   875 For instance, two flags are returned for the battery charging 
       
   876 indicator.  The capability flag is only set if the phone can detect 
       
   877 when a charger is connected.  The indicator flag is only set when a 
       
   878 charger is actually connected.  The indicator flag is only valid when 
       
   879 the capability flag is set.
       
   880 
       
   881 Six flags, two for each indicator, are returned by this method in the 
       
   882 packaged aIndicator parameter.
       
   883 
       
   884 @param aRequestStatus Returns the result code after the asynchronous 
       
   885 call completes. Pass CTelephony::CancelAsync() CTelephony::EGetBatteryInfoCancel to cancel.
       
   886 
       
   887 @param aDes Contains a CTelephony::TIndicatorV1Pckg, a packaged version of the 
       
   888 CTelephony::TIndicatorV1 class which is filled on completion.	
       
   889 
       
   890 @see TPhoneIndicators
       
   891 @capability None
       
   892 */
       
   893 	{
       
   894 	TRequestStatus* reqStatusPtr = &aRequestStatus;
       
   895 	
       
   896 	__ASSERT_ALWAYS(aRequestStatus != KRequestPending,
       
   897 		User::Panic(KTelephonyCategory, KTelephonyPanicIllegalReuse) );
       
   898 
       
   899 	aRequestStatus = KRequestPending;
       
   900 	TInt rc=KErrInUse;	
       
   901 		
       
   902 	TRAPD(leaveCode, rc=iTelephonyFunctions->GetIndicatorL(aRequestStatus, aDes));
       
   903 
       
   904 	if(leaveCode != KErrNone)
       
   905 		{	
       
   906 		iTelephonyFunctions->SetRequestPending(CTelephonyFunctions::EGetIndicator, EFalse);
       
   907 		User::RequestComplete(reqStatusPtr, leaveCode);
       
   908 		}
       
   909 	else if (rc != KErrNone)
       
   910 		{
       
   911 		if(rc != KErrInUse)	//this means request already pending, so do not reset
       
   912 			{
       
   913 			iTelephonyFunctions->SetRequestPending(CTelephonyFunctions::EGetIndicator, EFalse);
       
   914 			}
       
   915 		User::RequestComplete(reqStatusPtr, rc);
       
   916 		}
       
   917 	}
       
   918 	
       
   919 EXPORT_C void CTelephony::GetBatteryInfo(TRequestStatus& aRequestStatus, TDes8& aDes) const
       
   920 /**
       
   921 Retrieves the status and charge level of the phone battery. 
       
   922 
       
   923 This is an asynchronous method. Upon successful completion of the request
       
   924 the battery information is returned via the packaged aDes argument. 
       
   925 
       
   926 @param aRequestStatus Returns the result code after the asynchronous 
       
   927 call completes. Pass CTelephony::CancelAsync() CTelephony::EGetBatteryInfoCancel to cancel.
       
   928 @param aDes Contains a CTelephony::TBatteryInfoV1Pckg, a packaged version of the 
       
   929 CTelephony::TBatteryInfoV1 class which is filled on completion.	
       
   930 @capability None
       
   931 */
       
   932 	{
       
   933 	TRequestStatus* reqStatusPtr = &aRequestStatus;
       
   934 	
       
   935 	__ASSERT_ALWAYS(aRequestStatus != KRequestPending,
       
   936 		User::Panic(KTelephonyCategory, KTelephonyPanicIllegalReuse) );
       
   937 
       
   938 	aRequestStatus = KRequestPending;
       
   939 	TInt rc=KErrInUse;	
       
   940 		
       
   941 	TRAPD(leaveCode, rc=iTelephonyFunctions->GetBatteryInfoL(aRequestStatus, aDes));
       
   942 
       
   943 	if(leaveCode != KErrNone)
       
   944 		{	
       
   945 		iTelephonyFunctions->SetRequestPending(CTelephonyFunctions::EGetBatteryInfo, EFalse);
       
   946 		User::RequestComplete(reqStatusPtr, leaveCode);
       
   947 		}
       
   948 	else if (rc != KErrNone)
       
   949 		{
       
   950 		if(rc != KErrInUse)	//this means request already pending, so do not reset
       
   951 			{
       
   952 			iTelephonyFunctions->SetRequestPending(CTelephonyFunctions::EGetBatteryInfo, EFalse);
       
   953 			}
       
   954 		User::RequestComplete(reqStatusPtr, rc);
       
   955 		}
       
   956 	}
       
   957 	
       
   958 EXPORT_C CTelephony::TSignalStrengthV1::TSignalStrengthV1()
       
   959 /**
       
   960 Default constructor.
       
   961 */
       
   962 	{
       
   963 	iVersionId=KEtelISVV1;
       
   964 	}
       
   965 
       
   966 EXPORT_C void CTelephony::GetSignalStrength(TRequestStatus& aRequestStatus, TDes8& aDes) const
       
   967 /**
       
   968 Retrieves the phone's current signal strength via the aDes argument. 
       
   969 
       
   970 This is an asynchronous method.
       
   971 
       
   972 If signal strength information is not supported by the phone the method will 
       
   973 return KErrNotSupported. If no signal strength information is currently 
       
   974 available the method will return KErrNotFound.
       
   975 
       
   976 This functionality is not available when the phone is in "flight" mode.
       
   977 
       
   978 @param aRequestStatus Returns the result code after the asynchronous 
       
   979 call completes. Pass CTelephony::CancelAsync() CTelephony::EGetSignalStrengthCancel to cancel. 
       
   980 
       
   981 @param aDes Contains a CTelephony::TSignalStrengthV1Pckg, a packaged version of 
       
   982 the CTelephony::TSignalStrengthV1 class which is filled on completion.
       
   983 
       
   984 @capability None
       
   985 */
       
   986 	{
       
   987 	TRequestStatus* reqStatusPtr = &aRequestStatus;
       
   988 	
       
   989 	__ASSERT_ALWAYS(aRequestStatus != KRequestPending,
       
   990 		User::Panic(KTelephonyCategory, KTelephonyPanicIllegalReuse) );
       
   991 
       
   992 	aRequestStatus = KRequestPending;
       
   993 	TInt rc=KErrInUse;	
       
   994 		
       
   995 	TRAPD(leaveCode, rc=iTelephonyFunctions->GetSignalStrengthL(aRequestStatus, aDes));
       
   996 
       
   997 	if(leaveCode != KErrNone)
       
   998 		{	
       
   999 		iTelephonyFunctions->SetRequestPending(CTelephonyFunctions::EGetSignalStrength, EFalse);
       
  1000 		User::RequestComplete(reqStatusPtr, leaveCode);
       
  1001 		}
       
  1002 	else if (rc != KErrNone)
       
  1003 		{
       
  1004 		if(rc != KErrInUse)	//this means request already pending, so do not reset
       
  1005 			{
       
  1006 			iTelephonyFunctions->SetRequestPending(CTelephonyFunctions::EGetSignalStrength, EFalse);
       
  1007 			}
       
  1008 		User::RequestComplete(reqStatusPtr, rc);
       
  1009 		}
       
  1010 	}
       
  1011 	
       
  1012 EXPORT_C CTelephony::TIccLockInfoV1::TIccLockInfoV1()
       
  1013 /**
       
  1014 Default constructor.
       
  1015 */
       
  1016 	{
       
  1017 	iVersionId=KEtelISVV1;
       
  1018 	}
       
  1019 
       
  1020 EXPORT_C void CTelephony::GetLockInfo(TRequestStatus& aRequestStatus, const TIccLock& aLock, TDes8& aDes) const
       
  1021 /**
       
  1022 Some phones allow users to lock them to prevent unauthorised use. 
       
  1023 Typically, a code must be entered to unlock the phone. 
       
  1024 
       
  1025 This method retrieves the state and status of ICC locks PIN1/2. 
       
  1026 The client selects the lock that it wishes to retrieve the status and 
       
  1027 state of. 
       
  1028 
       
  1029 This is an asynchronous method. Upon successful completion of the
       
  1030 request the PIN1/2 information is returned via the aDes argument. 
       
  1031 
       
  1032 Note that this member function does not concern the keypad locks.  
       
  1033 Nor does it concern the lock that the networks use to prevent a phone from 
       
  1034 being used on other networks.
       
  1035 
       
  1036 @param aRequestStatus Returns the result code after the asynchronous 
       
  1037 call completes. Pass CTelephony::CancelAsync() CTelephony::EGetLockInfoCancel to cancel.
       
  1038 
       
  1039 @param aLock Lock to interrogate. Either Pin1 or Pin2.
       
  1040 
       
  1041 @param aDes Contains a CTelephony::TIccLockInfoV1Pckg, a packaged version of the 
       
  1042 CTelephony::TIccLockInfoV1 class which is filled on completion.
       
  1043 
       
  1044 @capability ReadDeviceData
       
  1045 */
       
  1046 	{
       
  1047 	TRequestStatus* reqStatusPtr = &aRequestStatus;
       
  1048 	
       
  1049 	__ASSERT_ALWAYS(aRequestStatus != KRequestPending,
       
  1050 		User::Panic(KTelephonyCategory, KTelephonyPanicIllegalReuse) );
       
  1051 
       
  1052 	aRequestStatus = KRequestPending;
       
  1053 	TInt rc=KErrInUse;	
       
  1054 		
       
  1055 	TRAPD(leaveCode, rc=iTelephonyFunctions->GetLockInfoL(aRequestStatus, aLock, aDes));
       
  1056 
       
  1057 	if(leaveCode != KErrNone)
       
  1058 		{	
       
  1059 		iTelephonyFunctions->SetRequestPending(CTelephonyFunctions::EGetIccLockInfo, EFalse);
       
  1060 		User::RequestComplete(reqStatusPtr, leaveCode);
       
  1061 		}
       
  1062 	else if (rc != KErrNone)
       
  1063 		{
       
  1064 		if(rc != KErrInUse)	//this means request already pending, so do not reset
       
  1065 			{
       
  1066 			iTelephonyFunctions->SetRequestPending(CTelephonyFunctions::EGetIccLockInfo, EFalse);
       
  1067 			}
       
  1068 		User::RequestComplete(reqStatusPtr, rc);
       
  1069 		}
       
  1070 	}
       
  1071 	
       
  1072 EXPORT_C void CTelephony::SendDTMFTones(TRequestStatus& aRequestStatus,  const TDesC& aTones) const
       
  1073 /**
       
  1074 Transmits DTMF tones across all the current active voice calls. 
       
  1075 
       
  1076 This is an asynchronous method. The request completes when the tones
       
  1077 have been sent.
       
  1078 The string of DTMF characters is passed via the aTones parameter. 
       
  1079 The string of DTMF characters can contain one or more DTMF tone(s).
       
  1080 
       
  1081 This functionality is not available when the phone is in "flight" mode.
       
  1082 
       
  1083 @param aRequestStatus Returns the result code after the asynchronous 
       
  1084 call completes. use CTelephony::ESendDTMFTonesCancel to cancel.
       
  1085 
       
  1086 @param aTones String containing tones to transmit. It can contain one or more
       
  1087  occurance of the numbers 0 to 9, * and #.
       
  1088 @capability NetworkServices
       
  1089 */
       
  1090 	{
       
  1091 	TRequestStatus* reqStatusPtr = &aRequestStatus;
       
  1092 	
       
  1093 	__ASSERT_ALWAYS(aRequestStatus != KRequestPending,
       
  1094 		User::Panic(KTelephonyCategory, KTelephonyPanicIllegalReuse) );
       
  1095 
       
  1096 	aRequestStatus = KRequestPending;
       
  1097 	TInt rc=KErrInUse;	
       
  1098 		
       
  1099 	TRAPD(leaveCode, rc=iTelephonyFunctions->SendDTMFTonesL(aRequestStatus, aTones));
       
  1100 
       
  1101 	if(leaveCode != KErrNone)
       
  1102 		{	
       
  1103 		iTelephonyFunctions->SetRequestPending(CTelephonyFunctions::ESendDTMFTones, EFalse);
       
  1104 		User::RequestComplete(reqStatusPtr, leaveCode);
       
  1105 		}
       
  1106 	else if (rc != KErrNone)
       
  1107 		{
       
  1108 		if(rc != KErrInUse)	//this means request already pending, so do not reset
       
  1109 			{
       
  1110 			iTelephonyFunctions->SetRequestPending(CTelephonyFunctions::ESendDTMFTones, EFalse);
       
  1111 			}
       
  1112 		User::RequestComplete(reqStatusPtr, rc);
       
  1113 		}
       
  1114 	}
       
  1115 	
       
  1116 EXPORT_C CTelephony::TFlightModeV1::TFlightModeV1()
       
  1117 /**
       
  1118 Default constructor.
       
  1119 */
       
  1120 	{
       
  1121 	iVersionId=KEtelISVV1;
       
  1122 	}
       
  1123 
       
  1124 EXPORT_C void CTelephony::GetFlightMode(TRequestStatus& aRequestStatus, TDes8& aDes) const
       
  1125 /**
       
  1126 Retrieves the current flight mode status. The flight mode is returned 
       
  1127 via the aMode argument. 
       
  1128 
       
  1129 This is an asynchronous method.
       
  1130 
       
  1131 If the flight mode status is set to "off" then all network-related 
       
  1132 requests are disabled.
       
  1133 
       
  1134 If the phone’s software does not support this feature then this method 
       
  1135 returns KErrNotSupported.
       
  1136 
       
  1137 @param aRequestStatus Returns the result code after the asynchronous 
       
  1138 call completes.  Pass CTelephony::CancelAsync() CTelephony::EGetFlightModeCancel to cancel.
       
  1139 
       
  1140 @param aDes Contains a CTelephony::TFlightModeV1Pckg, a packaged version of the 
       
  1141 CTelephony::TFlightModeV1 class which is filled on completion.
       
  1142 
       
  1143 @capability None
       
  1144 */
       
  1145 	{
       
  1146 	TRequestStatus* reqStatusPtr = &aRequestStatus;
       
  1147 	
       
  1148 	__ASSERT_ALWAYS(aRequestStatus != KRequestPending,
       
  1149 		User::Panic(KTelephonyCategory, KTelephonyPanicIllegalReuse) );
       
  1150 
       
  1151 	aRequestStatus = KRequestPending;
       
  1152 	TInt rc=KErrInUse;	
       
  1153 		
       
  1154 	TRAPD(leaveCode, rc=iTelephonyFunctions->GetFlightMode(aRequestStatus, aDes));
       
  1155 
       
  1156 	if(leaveCode != KErrNone)
       
  1157 		{	
       
  1158 		iTelephonyFunctions->SetRequestPending(CTelephonyFunctions::EGetFlightMode, EFalse);
       
  1159 		User::RequestComplete(reqStatusPtr, leaveCode);
       
  1160 		}
       
  1161 	else if (rc != KErrNone)
       
  1162 		{
       
  1163 		if(rc != KErrInUse)	//this means request already pending, so do not reset
       
  1164 			{
       
  1165 			iTelephonyFunctions->SetRequestPending(CTelephonyFunctions::EGetFlightMode, EFalse);
       
  1166 			}
       
  1167 		User::RequestComplete(reqStatusPtr, rc);
       
  1168 		}
       
  1169 	}
       
  1170 	
       
  1171 EXPORT_C CTelephony::TBatteryInfoV1::TBatteryInfoV1()
       
  1172 /**
       
  1173 Default constructor.
       
  1174 */
       
  1175 	{
       
  1176 	iVersionId=KEtelISVV1;
       
  1177 	}
       
  1178 	
       
  1179 EXPORT_C CTelephony::TCallStatusV1::TCallStatusV1()
       
  1180 /**
       
  1181 Default constructor.
       
  1182 */
       
  1183 	{
       
  1184 	iVersionId=KEtelISVV1;
       
  1185 	}
       
  1186 	
       
  1187 /////////////////////////////////////////////////
       
  1188 //Line related exports
       
  1189 /////////////////////////////////////////////////
       
  1190 
       
  1191 EXPORT_C TInt CTelephony::GetLineStatus(const CTelephony::TPhoneLine& aLine, TDes8& aStatus) const
       
  1192 /**
       
  1193 Retrieves the status of the line selected by the aLine argument. The current 
       
  1194 status of the selected line is returned to the client via the aStatus argument. 
       
  1195 
       
  1196 When only one call is in progress, the line status is identical to the 
       
  1197 status of the call.
       
  1198 
       
  1199 When two calls are in progress (one active and one on hold) then the 
       
  1200 status of the most "active" (connected and active or in progress) call 
       
  1201 is returned.
       
  1202 
       
  1203 This functionality is not available when the phone is in "flight" mode.
       
  1204 
       
  1205 @param aLine Identifier to line from which status is to be retrieved.
       
  1206 @param aStatus On completion contains the current line status in a 
       
  1207 CTelephony::TCallStatusV1Pckg, a packaged version of CTelephony::TCallStatusV1.
       
  1208 @return KErrNone if successful, otherwise another of the system-wide error codes.
       
  1209 
       
  1210 @capability None
       
  1211 */
       
  1212 {
       
  1213 	TInt rc=KErrAccessDenied;	
       
  1214 		
       
  1215 	TRAPD(leaveCode, rc=iTelephonyFunctions->GetLineStatus(aLine, aStatus));
       
  1216 
       
  1217 	if(leaveCode != KErrNone)
       
  1218 		{	
       
  1219 		return leaveCode;
       
  1220 		}
       
  1221 	else if (rc != KErrNone)
       
  1222 		{
       
  1223 		return rc;
       
  1224 		}
       
  1225 	return KErrNone;
       
  1226 	}
       
  1227 	
       
  1228 EXPORT_C CTelephony::TCallInfoV1::TCallInfoV1()
       
  1229 /**
       
  1230 Default constructor.
       
  1231 */
       
  1232 	: iCallId(-1)
       
  1233 	{
       
  1234 	iVersionId=KEtelISVV1;
       
  1235 	}
       
  1236 
       
  1237 EXPORT_C CTelephony::TTelAddress::TTelAddress()
       
  1238 /**
       
  1239 Default constructor.
       
  1240 */
       
  1241 	:	iTypeOfNumber(EUnknownNumber),
       
  1242 		iNumberPlan(EUnknownNumberingPlan),
       
  1243 		iTelNumber(0)
       
  1244 	{
       
  1245 	}
       
  1246 	
       
  1247 EXPORT_C CTelephony::TRemotePartyInfoV1::TRemotePartyInfoV1()
       
  1248 /**
       
  1249 Default constructor.
       
  1250 */
       
  1251 	{
       
  1252 	iVersionId=KEtelISVV1;
       
  1253 	}
       
  1254 	
       
  1255 EXPORT_C CTelephony::TCallSelectionV1::TCallSelectionV1()
       
  1256 /**
       
  1257 Default constructor.
       
  1258 */
       
  1259 	{
       
  1260 	iVersionId=KEtelISVV1;
       
  1261 	}
       
  1262 
       
  1263 EXPORT_C TInt CTelephony::GetCallInfo(TDes8& aCallSelect, TDes8& aCallInfo, TDes8& aRemoteInfo) const
       
  1264 /**
       
  1265 Retrieves information about the call selected by the aCallSelect argument. 
       
  1266 
       
  1267 If a call with the appropriate status is not available, then 
       
  1268 KErrNotFound is returned. Upon successful completion the call 
       
  1269 information will be returned via the aCallInfo and aRemoteCallInfo 
       
  1270 arguments.
       
  1271 
       
  1272 This functionality should be used after a notification of an incoming 
       
  1273 call, notification of line status change to dialling, or notification 
       
  1274 of remote party info change. Notification is requested with 
       
  1275 CTelephony::NotifyChange(). After completion of the notification the 
       
  1276 client should immediately request information about the call.
       
  1277 
       
  1278 @param aCallSelect Identifies the call for which information is retrieved.
       
  1279 @param aCallInfo Contains CTelephony::TCallInfoV1Pckg, the packaged CTelephony::TCallInfoV1 
       
  1280 parameter class which is filled on completion.
       
  1281 @param aRemoteInfo Contains CTelephony::TRemotePartyInfoV1Pckg, the packaged 
       
  1282 CTelephony::TRemotePartyInfoV1 parameter class which is filled on completion.
       
  1283 @return KErrNone if successful, otherwise another of the system-wide error codes.
       
  1284 
       
  1285 @capability ReadUserData
       
  1286 */
       
  1287 	{
       
  1288 	TInt rc=KErrInUse;	
       
  1289 
       
  1290 	TRAPD(leaveCode, rc=iTelephonyFunctions->GetCallInfoL(aCallSelect, aCallInfo, aRemoteInfo));
       
  1291 
       
  1292 	if(leaveCode != KErrNone)
       
  1293 		{	
       
  1294 		return leaveCode;
       
  1295 		}
       
  1296 	else if (rc != KErrNone)
       
  1297 		{
       
  1298 		return rc;
       
  1299 		}
       
  1300 	return KErrNone;
       
  1301 	}
       
  1302 	
       
  1303 /////////////////////////////////////////////////
       
  1304 //Network related exports
       
  1305 /////////////////////////////////////////////////
       
  1306 	
       
  1307 EXPORT_C CTelephony::TNetworkRegistrationV1::TNetworkRegistrationV1()
       
  1308 /**
       
  1309 Default constructor.
       
  1310 */
       
  1311 	{
       
  1312 	iVersionId=KEtelISVV1;
       
  1313 	}
       
  1314 
       
  1315 EXPORT_C void CTelephony::GetNetworkRegistrationStatus(TRequestStatus& aRequestStatus, TDes8& aDes) const
       
  1316 /**
       
  1317 Retrieves the current network registration status. 
       
  1318 
       
  1319 This is an asynchronous method. Upon successful completion of this request
       
  1320 the registration status is returned via the aDes argument. 
       
  1321 
       
  1322 This functionality is not available when the phone is in "flight" mode.
       
  1323 
       
  1324 @param aRequestStatus Returns the result code after the asynchronous 
       
  1325 call completes. Pass CTelephony::CancelAsync() CTelephony::EGetNetworkRegistrationStatusCancel 
       
  1326 to cancel.
       
  1327 
       
  1328 @param aDes Contains a CTelephony::TNetworkRegistrationV1Pckg, a packaged version 
       
  1329 of the CTelephony::TNetworkRegistrationV1 class which is filled on completion.
       
  1330 
       
  1331 @capability None
       
  1332 */
       
  1333 	{
       
  1334 	TRequestStatus* reqStatusPtr = &aRequestStatus;
       
  1335 	
       
  1336 	__ASSERT_ALWAYS(aRequestStatus != KRequestPending,
       
  1337 		User::Panic(KTelephonyCategory, KTelephonyPanicIllegalReuse) );
       
  1338 
       
  1339 	aRequestStatus = KRequestPending;
       
  1340 	TInt rc=KErrInUse;	
       
  1341 		
       
  1342 	TRAPD(leaveCode, rc=iTelephonyFunctions->GetNetworkRegistrationStatusL(aRequestStatus, aDes));
       
  1343 
       
  1344 	if(leaveCode != KErrNone)
       
  1345 		{	
       
  1346 		iTelephonyFunctions->SetRequestPending(CTelephonyFunctions::EGetNetworkRegistrationStatus, EFalse);
       
  1347 		User::RequestComplete(reqStatusPtr, leaveCode);
       
  1348 		}
       
  1349 	else if (rc != KErrNone)
       
  1350 		{
       
  1351 		if(rc != KErrInUse)	//this means request already pending, so do not reset
       
  1352 			{
       
  1353 			iTelephonyFunctions->SetRequestPending(CTelephonyFunctions::EGetNetworkRegistrationStatus, EFalse);
       
  1354 			}
       
  1355 		User::RequestComplete(reqStatusPtr, rc);
       
  1356 		}
       
  1357 	}
       
  1358 	
       
  1359 EXPORT_C CTelephony::TNetworkInfoV1::TNetworkInfoV1()
       
  1360 /**
       
  1361 Default constructor. 
       
  1362 */
       
  1363 	{
       
  1364 	iVersionId=KEtelISVV1;
       
  1365 	}
       
  1366 
       
  1367 /**
       
  1368 Default constructor. 
       
  1369 */
       
  1370 EXPORT_C CTelephony::TNetworkInfoV2::TNetworkInfoV2()
       
  1371 	{
       
  1372 	iVersionId=KEtelISVV2;
       
  1373 	}
       
  1374 
       
  1375 /**
       
  1376 Retrieves over-the-air network information about the currently 
       
  1377 registered mobile network. 
       
  1378 
       
  1379 This is an asynchronous method. Upon successful completion the network 
       
  1380 information is returned via the aDes argument.
       
  1381 
       
  1382 This functionality is not available when the phone is in "flight" mode.
       
  1383 
       
  1384 @param aRequestStatus Returns the result code after the asynchronous 
       
  1385 call completes. Pass CTelephony::CancelAsync() CTelephony::EGetCurrentNetworkInfoCancel to 
       
  1386 cancel.  KErrAccessDenied is given to this request status if the device
       
  1387 is in flight mode.
       
  1388 
       
  1389 @param aDes Contains a CTelephony::TNetworkInfoV1Pckg, a packaged version of the 
       
  1390 CTelephony::TNetworkInfoV1 class which is filled on completion.	
       
  1391 
       
  1392 @capability ReadDeviceData because Cell ID is retrieved from the platform.
       
  1393 */
       
  1394 EXPORT_C void CTelephony::GetCurrentNetworkInfo(TRequestStatus& aRequestStatus, TDes8& aDes) const
       
  1395 	{
       
  1396 	TRequestStatus* reqStatusPtr = &aRequestStatus;
       
  1397 
       
  1398 	__ASSERT_ALWAYS(aRequestStatus != KRequestPending,
       
  1399 		User::Panic(KTelephonyCategory, KTelephonyPanicIllegalReuse) );
       
  1400 
       
  1401 	aRequestStatus = KRequestPending;
       
  1402 	TInt rc=KErrInUse;	
       
  1403 		
       
  1404 	TRAPD(leaveCode, rc=iTelephonyFunctions->GetCurrentNetworkInfoL(aRequestStatus, aDes));
       
  1405 
       
  1406 	if(leaveCode != KErrNone)
       
  1407 		{	
       
  1408 		iTelephonyFunctions->SetRequestPending(CTelephonyFunctions::EGetCurrentNetworkInfo, EFalse);
       
  1409 		User::RequestComplete(reqStatusPtr, leaveCode);
       
  1410 		}
       
  1411 	else if (rc != KErrNone)
       
  1412 		{
       
  1413 		if(rc != KErrInUse)	//this means request already pending, so do not reset
       
  1414 			{
       
  1415 			iTelephonyFunctions->SetRequestPending(CTelephonyFunctions::EGetCurrentNetworkInfo, EFalse);
       
  1416 			}
       
  1417 		User::RequestComplete(reqStatusPtr, rc);
       
  1418 		}
       
  1419 	}
       
  1420 	
       
  1421 EXPORT_C CTelephony::TNetworkNameV1::TNetworkNameV1()
       
  1422 /**
       
  1423 Default constructor.
       
  1424 */
       
  1425 	{
       
  1426 	iVersionId=KEtelISVV1;
       
  1427 	}
       
  1428 
       
  1429 /**
       
  1430 Default constructor.
       
  1431 */
       
  1432 EXPORT_C CTelephony::TNetworkNameV2::TNetworkNameV2()
       
  1433 	{
       
  1434 	iVersionId=KEtelISVV2;
       
  1435 	}
       
  1436 
       
  1437 /**
       
  1438 Retrieves ICC-stored information about the (preferred) name of the
       
  1439 currently registered mobile network.
       
  1440 
       
  1441 This is an asynchronous method. Upon successful completion the retrieved
       
  1442 network name(s) is returned via the aDes argument.
       
  1443 
       
  1444 This functionality is not available when the phone is in "flight" mode.
       
  1445 
       
  1446 Cancellation of the request can be achieved by passing
       
  1447 CTelephony::EGetCurrentNetworkNameCancel to the function CTelephony::CancelAsync().
       
  1448 
       
  1449 Note: This information is only available on GSM/WCDMA networks.
       
  1450 
       
  1451 @param aRequestStatus Returns the result code after the asynchronous call completes.
       
  1452                       KErrAccessDenied will be returned if the phone is in flight mode.
       
  1453 
       
  1454 @param aDes Contains a CTelephony::TNetworkNameV1Pckg, a packaged version of the
       
  1455             CTelephony::TNetworkNameV1 class which is filled on completion.
       
  1456 
       
  1457 @capability None
       
  1458 */
       
  1459 EXPORT_C void CTelephony::GetCurrentNetworkName(TRequestStatus& aRequestStatus, TDes8& aDes) const
       
  1460 	{
       
  1461 	TRequestStatus* reqStatusPtr = &aRequestStatus;
       
  1462 	
       
  1463 	__ASSERT_ALWAYS(aRequestStatus != KRequestPending,
       
  1464 		User::Panic(KTelephonyCategory, KTelephonyPanicIllegalReuse) );
       
  1465 
       
  1466 	aRequestStatus = KRequestPending;
       
  1467 	TInt rc=KErrInUse;	
       
  1468 		
       
  1469 	TRAPD(leaveCode, rc=iTelephonyFunctions->GetCurrentNetworkNameL(aRequestStatus, aDes));
       
  1470 
       
  1471 	if(leaveCode != KErrNone)
       
  1472 		{	
       
  1473 		iTelephonyFunctions->SetRequestPending(CTelephonyFunctions::EGetCurrentNetworkName, EFalse);
       
  1474 		User::RequestComplete(reqStatusPtr, leaveCode);
       
  1475 		}
       
  1476 	else if (rc != KErrNone)
       
  1477 		{
       
  1478 		if(rc != KErrInUse)	//this means request already pending, so do not reset
       
  1479 			{
       
  1480 			iTelephonyFunctions->SetRequestPending(CTelephonyFunctions::EGetCurrentNetworkName, EFalse);
       
  1481 			}
       
  1482 		User::RequestComplete(reqStatusPtr, rc);
       
  1483 		}
       
  1484 	}
       
  1485 	
       
  1486 /////////////////////////////////////////////////
       
  1487 //Supplementary Services related exports
       
  1488 /////////////////////////////////////////////////	
       
  1489 	
       
  1490 EXPORT_C CTelephony::TCallForwardingSupplServicesV1::TCallForwardingSupplServicesV1()
       
  1491 /**
       
  1492 Default constructor.
       
  1493 */
       
  1494 	{
       
  1495 	iVersionId=KEtelISVV1;
       
  1496 	}
       
  1497 	
       
  1498 EXPORT_C CTelephony::TCallBarringSupplServicesV1::TCallBarringSupplServicesV1()
       
  1499 /**
       
  1500 Default constructor.
       
  1501 */
       
  1502 	{
       
  1503 	iVersionId=KEtelISVV1;
       
  1504 	}
       
  1505 	
       
  1506 EXPORT_C CTelephony::TCallWaitingSupplServicesV1::TCallWaitingSupplServicesV1()
       
  1507 /**
       
  1508 Default constructor.
       
  1509 */
       
  1510 	{
       
  1511 	iVersionId=KEtelISVV1;
       
  1512 	}
       
  1513 	
       
  1514 EXPORT_C void CTelephony::GetCallForwardingStatus(TRequestStatus& aRequestStatus, const TCallForwardingCondition aCondition, TDes8& aDes, const TServiceGroup aServiceGroup) const
       
  1515 /**
       
  1516 Interrogates the current status of the call forwarding services. 
       
  1517 
       
  1518 Specify the condition for enquiry via the aCondition argument. 
       
  1519 
       
  1520 This is an asynchronous method. Upon successful completion the status
       
  1521 information is returned via the aSSInfo argument. Support is available
       
  1522 only for the voice line.
       
  1523 
       
  1524 This functionality is not available when the phone is in "flight" mode.
       
  1525 
       
  1526 Note: This information is only available on GSM/WCDMA networks.
       
  1527 
       
  1528 @param aRequestStatus Returns the result code after the asynchronous call completes.  
       
  1529 Pass CTelephony::CancelAsync() CTelephony::EGetCallForwardingStatusCancel to 
       
  1530 cancel.
       
  1531 @param aCondition Call forwarding condition to be interrogated.
       
  1532 
       
  1533 @param aDes  Contains a CTelephony::TCallForwardingSupplServicesV1Pckg, a packaged 
       
  1534 version of the CTelephony::TCallForwardingSupplServicesV1 class which is filled on 
       
  1535 completion.
       
  1536 
       
  1537 @param aServiceGroup Service group to be interrogated.
       
  1538 
       
  1539 @capability ReadDeviceData
       
  1540 @capability NetworkServices
       
  1541 */
       
  1542 	{
       
  1543 	TRequestStatus* reqStatusPtr = &aRequestStatus;
       
  1544 	
       
  1545 	__ASSERT_ALWAYS(aRequestStatus != KRequestPending,
       
  1546 		User::Panic(KTelephonyCategory, KTelephonyPanicIllegalReuse) );
       
  1547 
       
  1548 	aRequestStatus = KRequestPending;
       
  1549 	TInt rc=KErrInUse;	
       
  1550 		
       
  1551 	TRAPD(leaveCode, rc=iTelephonyFunctions->GetCFSupplementaryServiceStatusL(aRequestStatus, aCondition, aDes, aServiceGroup));
       
  1552 
       
  1553 	if(leaveCode != KErrNone)
       
  1554 		{	
       
  1555 		iTelephonyFunctions->SetRequestPending(CTelephonyFunctions::EGetCFSupplServicesStatus, EFalse);
       
  1556 		User::RequestComplete(reqStatusPtr, leaveCode);
       
  1557 		}
       
  1558 	else if (rc != KErrNone)
       
  1559 		{
       
  1560 		if(rc != KErrInUse)	//this means request already pending, so do not reset
       
  1561 			{
       
  1562 			iTelephonyFunctions->SetRequestPending(CTelephonyFunctions::EGetCFSupplServicesStatus, EFalse);
       
  1563 			}
       
  1564 		User::RequestComplete(reqStatusPtr, rc);
       
  1565 		}
       
  1566 	}