IP Dialer (PhoneApp) Component (Windows Embedded CE 6.0)
1/6/2010
The IP Dialer (PhoneApp) component is an executable that performs all phone operations including placing and receiving calls, along with call control functionality.
When other applications (IP Contacts, etc) want to make phone calls, they can call an API that will invoke IP Dialer.
IP Dialer uses the Real-time Communications (RTC) Client API for making and receiving calls.
Application writers can provision the device. Additionally, IP Dialer uses an XML and regular-expression based dial plan for formatting phone numbers to display and to send over the network.
For more information about the dial plan and provisioning see
VoIP Core Component Usage
The following diagram shows the VoIP Core Components that the IP Dialer application component uses.
Inter-Application Connections
None of the applications that make up the IP Phone Suite directly call each other. All inter-application communication is handled through calls to PhCommon or through the use of Registry settings. Even calls to the VAIL Database Store are handled via PhCommon database calls, including initialization and a pointer to the database for further API calls directly.
In the case of IP Dialer, the phoneapp.exe simply launches the dynamic link library, phonecore.dll. Phonecore handles all the call control and provisioning work for IP Dialer, including the user interface screens needed.
IP Dialer uses the following PhCommon API sets:
- PhCommon Controls APIs
- PhCommon Settings APIs
- PhCommon Command APIs
- PhCommon AddSpeedDial APIs
- PhCommon Database APIs
- PhCommon Authentication APIs
For example, IP Dialer would use PHGetSetting to determine if an incoming phone call needs to be blocked or not. Or it might use PHSetValue to change the phone status to active, even as it goes ahead and updates its menus as well. All of its UI was created with calls to PhCommon control functions.
IP Dialer would use PHGetAppWindow to determine if phoneapp.exe is still running. If it were not, it would indicate that it cannot make a phone call and would have to wait until IP Home Screen launched the application again.
In terms of using the features of other applications, IP Dialer would use PHAddSpeedDialEntry, a PhCommon API, to add a speed dial entry. This API would cause PhCommon to launch the IP Contacts application if it were not yet running. Then, PhCommon would send the information provided by IP Dialer, to IP Contacts with the instructions for IP Contacts to create the new entry. Along the way, PhCommon would have used PHLaunchProcess and PhGetAppWindow as well.
IP Dialer, in turn, is used by the other applications, via PhCommon, to handle phone requests and provisioning.
To do this, phonecore.dll exposes the following APIs for use by PhCommon:
- Run - which is used by phoneapp.exe to start up phonecore.dll with instructions
- ProcessProvisionXML
- ValidateProvisionXML
- MakePhoneCall
- OnHookDialing
The last four APIs all have equivalent calls via PhCommon.
IP Dialer does make direct calls to the Real-time Communications (RTC) Client API.
Power Settings Information
Different classes of VoIP devices have differing power requirements. For example, the power requirements of a wireless portable phone will differ from that of a wired desktop phone. The Dialer Component provides a simple way of handling power modes, using a registry value located under HKEY_LOCAL_MACHINE\System\VoIP.
Registry variable | Values |
---|---|
PowerOnMode |
0x00000000: The application takes no specific action to make the power stay on. 0x00000001: The power will stay on while there is a connected audio call. 0x00000002: The power will stay on while there is a connected video call. |
OS Design Information
For a table showing the operating design information for the IP Phone Suite, of which IP Dialer is just one part, please see IP Phone Suite OS Design Development.
Module
The following module implements the IP Dialer. The module is an executable.
Item | Module |
---|---|
IP Dialer |
phoneapp |
Source Code Location
The IP Phone Suite sample source code is located in %_WINCEROOT%\Public\VoIP\OAK\Phone\ and its subdirectories
For a complete source code location list, please see IP Phone Suite Source Code Directories.
The following table summarizes the contents of the directories and subdirectories of IP Dialer:
Directory or file name | Description |
---|---|
PHONEAPP |
IP Dialer source code. |
PHONEAPP\INC |
Common headers files for IP Dialer source. |
PHONEAPP\APP |
Thin wrapper that loads phonecore.dll to start up IP Dialer. |
PHONEAPP\PROVISION |
This is the provisioning engine code that handles provisioning requests and provisions the device. |
PHONEAPP\PHONECORE |
This is the main core of IP Dialer. This is the source code for phonecore.dll, which is a core component that handles all the calling functionality and UI behaviors. |
PHONEAPP\PHONECORE\RES |
Bitmaps for use by IP Dialer. |
Implementation Considerations
The following table shows the core Sysgen variable for IP Dialer. For a complete dependency list, showing all the Sysgens, please see the IP Phone Advanced Design Template and look at the advanced phone case.
Sysgen variable | Description |
---|---|
SYSGEN_VOIPPHONE_PHONEAPP |
IP Dialer Application |
See Also
Reference
VAIL Database Store Reference
PhCommon Reference
Concepts
IP Phone Suite Architecture
IP Phone Suite
Other Resources
Real-time Communications (RTC) Client API
Exchange Client
Pocket Outlook Object Model (POOM)
State and Notifications Broker
Developing a VoIP Phone