sdkcreationmw/sdkexamples/cppexamples/S60Ex/IsvTelCallApp/doc/Mainpage.dox
author rajpuroh
Wed, 21 Apr 2010 09:56:53 +0530
changeset 1 ac50fd48361b
parent 0 b26acd06ea60
permissions -rw-r--r--
Second Contribution
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     1
/*! \mainpage IsvTelCallApp Example
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     2
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     3
 * \ref intro_sec
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     4
 * \n\ref Pre_sec
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     5
 * \n\ref Design_sec
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     6
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     7
 * <HR>
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     8
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     9
 * \section intro_sec 1. About this Example
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    10
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    11
 *  This tutorial explains the IsvTelCallApp application example, which is a simple application demonstrating the use of the ISV ETel APIs.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    12
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    13
 *The tutorial starts by listing the pre-requisites the user should know before starting this example, and describes how to build and run the example. The documentation goes on to discuss how to test an ISV ETel API, which is split into the following sections:
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    14
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    15
 * - The application GUI.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    16
 * - Engine.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    17
 * - ISV ETel APIs.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    18
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    19
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    20
 *	 <HR>
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    21
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    22
 * \section Pre_sec 2. Prerequisites
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    23
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    24
 * This example exists as a complete application, and has the standard Symbian OS application architecture employing the Application, Document, UI, and View classes. The example makes use of several other Symbian OS concepts that the reader should be aware of before attempting to understand this example. These are:
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    25
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    26
 * - Active Object.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    27
 * - ETel ISV APIs.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    28
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    29
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    30
 *	<HR>
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    31
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    32
 *  \section Design_sec 3. Design and Implementation
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    33
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    34
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    35
 *  \subsection Sub31 3.1 Capabilities
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    36
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    37
 * This application requires following capabilities defined in IsvTelCallApp.mmp:
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    38
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    39
 * NetworkServices ReadDeviceData WriteDeviceData ReadUserData WriteUserData
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    40
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    41
 * \note ACS Publisher ID is required to sign applications with ReadDeviceData and WriteDeviceData.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    42
 * However, a signed sis is provided in sis-folder so that this example application
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    43
 * can easily be tried on a device.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    44
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    45
 *  \subsection Sub32 3.2	Application Overview
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    46
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    47
 * CIsvTelCallAppTelephony class is an active object, derived from CActive class and provides the functionality of the engine.  Each option selected by User through GUI invokes wrapper function of CIsvTelCallAppTelephony class, which in turn calls corresponding ISV ETel API.  CTelephony class provides ISV ETel APIs.  Since, CIsvTelCallAppTelephony is an active object; it waits asynchronously for the operations to complete from ISV ETel API.  When engine is notified of completion of requested ISV ETel API, it sends back the response to GUI for User.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    48
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    49
 * This application uses the ISV ETel APIs related to Call functionality, e.g. CTelephony::DialNewCall(), CTelephony::GetCallStatus(), etc.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    50
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    51
 * When User wants to dial the number, edits Phone1/2 field of the application. On calling the number (either using Options menu or Green dial button), the Call1/2 Status field gets updated.  For example, before call establishment Call1/2 Status field will display the intermediate state namely connecting.  When the called party answers the call i.e. the Call is established, the status updates to connected state.  Similarly, other states of Call State Machine will be updated.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    52
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    53
 *  \subsection Sub33 3.3	GUI Implementation
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    54
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    55
 *  This sections gives the details about GUI implementation.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    56
 * -#	The Framework creates the GUI, resulting in a call to Class Construct, which in turn constructs CIsvTelCallAppView object.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    57
 * -#	CIsvTelCallAppView creates the CIsvTelCallAppContainer object from its second phase constructor.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    58
 * -#	When User launchs the application, HandleCommandL() gets executed, which in turn invokes DisplayFormL() of CIsvTelCallAppContainer object. DisplayFormL () then creates CIsvTelCallAppDlg object and executes it.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    59
 * -#	CIsvTelCallAppDlg creates multiple CIsvTelCallAppTelephony objects and assigns same CTelephony pointer to each object. Refer Class Constructor.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    60
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    61
 * When User closes the application, CTelephony object and all engine objects are closed and destroyed.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    62
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    63
 *  \subsection Sub34 3.4	ISV ETel API Engine
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    64
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    65
 *  The previous section shows how the GUI creates multiple CIsvTelCallAppTelephony objects and invokes corresponding ISV ETel API wrapper function.  This section describes how these objects function as an engine.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    66
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    67
 * First, CIsvTelCallAppTelephony object creates an object of CTelephony  class, and subsequently the same CTelephony pointer is assigned to other CIsvTelCallAppTelephony objects.   Based on the request from GUI, associated engine function gets invoked, which in turn calls corresponding ISV ETel API.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    68
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    69
 * CIsvTelCallAppTelephony class, an active object, waits asynchronously for the reponses from ISV ETel APIs.  Also, engine is registred for notification of change in voice line state events.  When command complete notification message from ISV ETel API or notification for change in voice line status reaches the engine, it then sends back response to GUI for display.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    70
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    71
 * The steps involved in MakeNewCall command is described as follows, the other commands also follow similar steps.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    72
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    73
 * -#	When User dials a call, CIsvTelCallAppDlg decodes the command and calls corresponding engine function, in this case TelApiWrapperMakeNewCall.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    74
 * -#	CIsvTelCallAppTelephony engine class then invokes corresponding ISV ETel API, DialNewCall().
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    75
 * -#	DialNewCall() is an asynchronous request, hence when API’s execution completes, RunL() of the IsvTelCallAppTelephony class is called, which in turn calls MakeNewCallCompleteL() function of IsvTelCallAppDlg class.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    76
 * -#	CIsvTelCallAppDlg class then converts the information in user friendly manner and displays on UI.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    77
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    78
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    79
 *  \subsection Sub35 3.5 ISV ETel APIs
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    80
 *  The previous two sections have shown how User selects the commands and how those commands are processed by Engine in accordance with ISV ETel APIs. This section gives the details of CTelephony class and ISV ETel APIs provided by it.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    81
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    82
 * The CTelephony class is meant for 3rd party developers.  This class provides a simple interface to the phone's telephony system. It provides two services:
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    83
 * -#	Information Service : This service provides support for retrieving Phone Settings, Line Information, Network Information and (basic) Supplementary Service Settings.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    84
 * -#	Call Service: This service provides dialling, answering and controlling of voice calls.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    85
 * This example has used APIs related to Line information and Call funtionality.  Answer incoming call option is set by default in application. APIs used in this example are:
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    86
 * -#	DialNewCall
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    87
 * -#	GetCallStatus
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    88
 * -#	Hangup
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    89
 * -#	Hold
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    90
 * -#	Resume
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    91
 * -#	Swap
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    92
 * -#	GetLineStatus
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    93
 * -#	SendDTMFTones
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    94
 * -#	AnswerIncomingCall
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    95
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    96
 * \note Although mentioned APIs are public for 3rd party developers, there have been cases that in certain situations 
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    97
 * application gets non-public error codes from Telephony. For example if a call is ended, before B-subscriber answers, 
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    98
 * the Hangup-operation completes with non-public error code. If this happens, the example application just shows "Error"-note.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    99
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   100
 *  \subsection Sub36 3.6 MMP File
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   101
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   102
 * Each Symbian OS application has an associated MMP file. The MMP file defines such things as which source files are to be compiled, which libraries to be linked, and so on. To create an IsvTelCallApp DLL, it is necessary to specify the target type and UID in the MMP. These should be set to the values shown below.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   103
 * - TARGETTYPE exe
1
ac50fd48361b Second Contribution
rajpuroh
parents: 0
diff changeset
   104
 * - UID 0xE00001EF
0
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   105
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   106
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   107
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   108
 * <HR>
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   109
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   110
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   111
 *  \section Summary_sec 4. SUMMARY
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   112
 * IsvTelCallApp Example application has demonstrated the use of ISV ETel APIs.  The application is split in two parts GUI and Engine.  User interacts with GUI and the GUI logic coverts those key presses to commands.  Engine handles the commands and invokes corresponding ISV ETel APIs.  Upon completion of the API, the engine sends back the responses to GUI for display.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   113
 *
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   114
 */