CentreVu™ Agent McFone Low-Level Design Document subject: Issue 1.0 COMPAS ID 58373 date: December 4, 1997 from: Keith R. McFarlane Org. 13F5C0000 DR 30L45 (303) 538-1642 [email protected] Svetoslav Sinapov Org. 13F5C0000 DR 30K99 (303) 538-4537 ABSTRACT This document contains the low-level design for release one of the CVA “McFone” application, a TAPIbased telephony application for call centers. This product is the first release of the product, with enhancements planned for subsequent releases. Lucent Technologies - Proprietary Use pursuant to Company instructions. -2- Copy To: Amardeep Singh (Development) Bill Jolicoeur (Market Management) Cara Spengler (Product Introduction) Carla Boroff (Integration) Carla McNearny (System Engineering) Cindy Jones (Project Management) Dana Cline (Development) Darryl Maxwell (System Engineering) Dave Breggin (Development) Dave Felder (System Verification) Deborah Price (System Verification) Eileen Hillis (System Engineering) Helena Fowler (System Verification) Jeff Anderson (Project Introduction) Jeff Bogart (System Engineering) Jose Velez (Development) Michelle Allaire (Documentation) Mike Soll (System Verification) Mohan Amasa (Development) Nandu Sankaran (Development) Paul Richman (Development Management) Randy Applegate (Development) Richard Cunday (Development) Steve Coury (Integration) Svet Sinapov (Development) Tim Larison (Development) Tom Turnmire (Development Management) Zhen Chen (Setup) Lucent Technologies - Proprietary Use pursuant to Company instructions. -3CentreVu™ Agent McFone Low-Level Design Document subject: Issue 1.0 COMPAS ID 58373 date: December 4, 1997 from: Keith McFarlane Org. 13F5C0000 DR 30L45 (303) 538-1642 [email protected] Svetoslav Sinapov Org. 13F5C0000 DR 30K99 (303) 538-4537 DESIGN DOCUMENT 1. INTRODUCTION 1.1 General This document contains the low-level design for the McFone telephony core. The design elements within this document cover the requirements and architecture for the telephony components of the McFone application, a simplified replacement for the former CentreVu Agent application; other components related to this application are defined within other documents as delineated in “Related Documents” (section 1.1.6). 1.1.1 Purpose This document’s purpose is to clearly define the design elements which will cover all requirements in [1]. To ensure that this need is met, the document includes references to all requirements in the sections related to the fulfillment of those requirements. 1.1.2 Module Definition The telephony core of McFone functions as the McFone main application. It displays callbars, allows the user to perform telephony functions, and presents user interface elements for administration of the application. 1.1.3 Document Scope This document covers only the low-level design elements of the telephony core; the designs of the PASTER and Event Log components are detailed in [2] and [3], respectively. 1.1.4 Document History Issue .1 - Initial Version Issue 1.0 - Incorporated review changes 1.1.5 Document Change Control Changes to this document will be initiated through COMPAS MRs. 1.1.6 Related Documents Lucent Technologies - Proprietary Use pursuant to Company instructions. -4CentreVu Agent McFone Requirements and Visual Feature Specification by F.J. Bogart (COMPAS ID 57503) [1] CentreVu Agent Design Document for Paster by Nandakumar Sankaran (COMPAS ID 54096) [2] CVA Design Specification for Event Log by Richard Cunday (COMPAS ID 54241) [3] CentreVu Agent McFone Technical Prospectus by F.J. Bogart (COMPAS ID 57398) [4] CentreVu™ Agent McFone High-Level Design Document by Keith R. McFarlane and Svetoslav Sinapov (COMPAS ID 58015) [5] 1.2 Terminology and Acronyms Basic Callbar Objects (Basic Objects) - the subset of Callbar Objects which are not also containers (that do not inherit from the CCallbarObjectContainer class). Call Information Panel (CIP) - a callbar object which represents the status of a particular call. CIPs show lamp and display states for the call and allow actions upon the call through a button (Answer, Reconnect, Release). These are usually displayed within CIP Frames. Callbar - a logical collection of CCallbarObject and CCallbarObjectContainer objects. The objects are organized in a tree, with the root object always an instance of CCallbarObjectContainer. Callbar Object - an entity which performs a particular function on a callbar (button, combo, text label, etc.) CIP Frame - a container which manages only CIPs. CIP Frames stretch to fit the current number of CIPs within them. CIP Frames are also callbar objects. Container - an entity capable of managing and displaying callbar objects. Container Callbar Objects (Container Objects) - the subset of Callbar Objects which are also containers (that inherit from the CCallbarObjectContainer class). Event Log - the McFone application which manages the recording of software information and error events to the log. PASTE - PC Applications Software Translation Exchange. Allows applications to download telephone translation information through the 2nd-line display of the telephone. 1.3 Customer Documentation Concerns 2. EXTERNAL INTERFACES 2.1 Event Log Function Calls 2.2 PASTER Function Calls 3. EXPOSED INTERFACES All interfaces provided to other components or external applications are detailed in a separate, referenced document (for large, complex interfaces) and reviewed by affected parties. 4. LOW LEVEL DESIGN 4.1 Application Performance Lucent Technologies - Proprietary Use pursuant to Company instructions. -5All telephony core code will be written using C++ and the Microsoft Foundation Classes (MFC). This, along with direct communication to TAPI, will allow for the following performance conditions: • The running RAM footprint of the McFone application will not exceed 10 Mb (<57503-212>). • The maximum percentage of GDI resources consumed by the McFone application will not exceed 10% (<57503-213>). • The maximum percentage of USER resources consumed by the McFone application will not exceed 10% (<57503-214>). • The McFone splash screen will appear after no more than three seconds (<57503-210>). • The McFone application will allow the user to make and receive calls within 15 seconds of application launch (<57503-211>). • The McFone application will handle calls no more than 25% at the 90th percentile and 37.5% at the 99th percentile slower than a standalone telephone (<57503-199>). • The McFone application will handle lamp updates within 500ms at the 90th percentile and 750ms at the 99th percentile after the same lamp is updated on the telephone (<57503-200>). 4.2 CMcFoneApp 4.2.1 Description The CMcFoneApp class represents the application as a whole. This class is derived from MFC’s CWinApp class, and it overrides several of the CWinApp members in order to provide for the special needs of McFone initialization. Also, this class contains pointers to all top-level application objects. The application may be started using any standard windows start method (<57503-189>). 4.2.2 Interfacing FUs/Classes CMcFoneApp creates instances of all main application objects, and then destroys them all when the application exits; this interaction, however simplistic, is fundamental to the system, and if it fails then system initialization cannot continue. CMcFoneApp is specifically dependent upon the CCallbarManager and CCallbarWindow classes. When CCallbarManager is created, it instantiates the main callbar; this has the effect of creating the main application window. The CCallbarManager object sets CMcFoneApp’s m_pMainWnd member variable to point to this window. 4.2.3 Data Structures and Variables m_pCallbarManager - pointer to an instance of th CCallbarManager class m_pVICE - pointer to and instance of the CVICE class m_pConfigSettings - pointer to an instance of the CConfigSettings class m_pEvtLog - pointer to an instance of the CEvtLog class. 4.2.4 Functions/Methods CMcPhoneApp(); Constructor of the app object. This procedure sets the app object member variable m_pMainWnd to NULL so that code that tries to use this variable can determine if the variable has not yet been set. virtual BOOL InitInstance(); Lucent Technologies - Proprietary Use pursuant to Company instructions. -6This method, an override of the CWinApp class, is called at startup, shortly after the application object is constructed; it is in this routine that application initialization happens. InitInstance performs the following actions: 1. Determine if this is the first instance of the CVA application; if not, find the first instance, activate it, and exit (<57503-190>). 2. Display the CVA splash screen (<57503-191>, <57503-210>). 3. Create an instance of the CEvtLog class and assign it to m_pEvtLog (<57503-192>). 4. Log the version of the McFone executable (<57503-192>). 5. Create an instance of the CConfigSettings class and assign it to m_pConfigSettings. Call CConfigSettings::LoadSettings (<57503-195>). 6. Create an instance of the CVICE class and assign it to m_pVICE. If this allocation fails, report the error to the user and exit. 7. Call the VICE InitTAPI member function. If this initialization fails, report the error to the user and exit. 8. Create an instance of the CCallbarManager class and assign it to m_pCallbarManager. 9. Instruct VICE to gather and distribute the states of current calls using the CVICE::RefreshCalls method. (<57503-1>) 10. Destroy the CVA splash screen (<57503-191>). 11. Attempt to read PASTE data using PasterReadPASTEData. If the data is incomplete, ask the user if a PASTE download should be executed. If the answer is yes, perform the PASTE download as specified in the steps of CCallbarManager::OnOptionsDownload; if the answer is no, display a warning message indicating that some features will not be available, and that a download should be requested at a later time (<57503-195>). virtual int ExitInstance(); 1. Call the CVICE ClearTAPI member to uninitialize TAPI. 2. Record all open callbar windows and their rectangles in the CConfigSettings class, then call CConfigSettings::SaveSettings (<57503-197>). 3. Delete all top-level class instances. 4.2.5 Startup See section 4.2.4. 4.2.6 Shutdown See section 4.2.4. 4.2.7 Error Messages The following is a list of error messages which might be displayed during the execution of the members of this class. NOTE: The headings of this section are indicative of message content, not message appearance; the final wordings of these messages will be obtained from documentation writers. 4.2.7.1 Failed to initialize TAPI In the event that TAPI does not initialize correctly, the software will display this message and exit. This message is displayed with an OK button. Lucent Technologies - Proprietary Use pursuant to Company instructions. -74.2.7.2 Memory allocation failed If an instance of a particular class cannot be allocated, the software will display this message and exit. This message is displayed with an OK button. 4.2.8 Events for Event Log All errors which occur during startup of the application will be logged (<57503-16>). Specific categories of startup errors are detailed in this section. 4.2.8.1 Memory Errors All memory allocation errors which occur after the CEvtLog class has been instantiated will be logged. 4.2.8.2 TAPI Initialization Error If TAPI fails initialization, this problem will be logged. 4.2.8.3 TAPI Initialization/Shutdown Errors If a call to InitTAPI or ClearTAPI fails, this event will be logged. 4.3 CCallbarManager 4.3.1 Description The CCallbarManager class controls all callbar display functionality and provides the interface between callbars and VICE. The application creates one instance of this class and uses it to create the main callbar; after this point, all user interactions are under the control of the callbar manager. CCallbarManager maintains a list of the currently active top-level containers in its g_parContainerList member variable; each top-level container is the root node of a callbar tree. Callbar objects are stored within the various containers in each tree, and the Callbar Manager maintains an insertion-sorted (by Windows control ID) list of pointers to all callbar objects (m_pCBObjList) for ease of access. 4.3.2 Interfacing FUs/Classes CCallbarObjectContainer As explained above, the Callbar Manager maintains a list of these, each of which represents the root of a callbar tree. 4.3.3 Data Structures and Variables m_pPhoneSettingsDlg - pointer to a modeless dialog box which allows manipulation of phone settings (if this dialog currently exists). m_pRecorderDlg - pointer to a modeless dialog box which allows manipulation of the agent’s personalized announcements (if this dialog is currently open). 4.3.4 Functions/Methods CCallbarManager(); 1. Set up the McFone system tray icon. Its initial state is connected. ~CCallbarManager(); 1. Destroy the McFone system tray icon. BOOL BuildMainCallbar(); Lucent Technologies - Proprietary Use pursuant to Company instructions. -8The App Object calls this method shortly after application startup to create the main application callbar. This method goes through the following steps: 1. Get the main callbar’s rectangle from the CConfigSettings object (<57503-194>). 2. Using the obtained rectangle, create the CCallbarWindow to which this callbar will be attached. Create and attach the McFone main menu (<57503-49>). Load and apply previous window coordinates if they exist in the INI file. 3. Assign the CCallbarWindow pointer to the App Object’s m_pMainWnd member. This sets up the new callbar window as the main application window. 4. Create the initial CIP Frame (<57503-206>). 5. Create 2nd line display area (<57503-32>). 6. Create the dial area, including the dial strings combo box, the Send button, and the dialpad (<57503-25>). Set the width of the combo box such that it may display the string “99-1-888-5550000” fully on-screen (use GetTextExtent) (<57503-33>). Fill the combo box with the 15 mostrecently-dialed strings (<57503-33>, <57503-35>). 7. Create the “Big Four” buttons (<57503-40>). 8. Create the main window call center buttons (Login, Logout, Auto-In, Manual-In, AUX, ACW, Assist). 9. Create the Mute button (<57503-41>). 10. Create the Release button. 11. Create the announcements area, including the multi-state announcements button and the announcement combo. Fill the announcement combo with all appropriate strings. 12. Create the message waiting indicator (<57503-37>). 13. Create the callbar features area, including the following buttons: Phone, Call Ctr, Abbrv Dial, Misc, Stroke, AUX RC, Logout RC (<57503-42>). For every button it creates, BuildMainCallbar checks to see if the feature assigned to that button actually exists by calling CVICE::GetButtonByFeature; if the feature does not exist, the button is disabled (<57503-38>). Also, every feature button string is filtered using CConfigSettings:: MapPasteName. (<57503-91>) NOTE: The order of object creation implies the tab order of callbar objects (<57503-53>). BOOL BuildAbbrevDialCallbar(); 1. Get the abbreviated dial callbar’s rectangle from the CConfigSettings object (<57503-194>). 2. Using the obtained rectangle, create the CCallbarWindow to which this callbar will be attached. Load and apply previous window coordinates if they exist in the INI file. 3. For all PASTE identifiers, call CVICE::GetFeatureButtonByPASTEID. 4. If the feature for an ID is Abbreviated Dial, add an abbreviated dial button to the callbar and set the button’s caption to the abbreviated dial extension (<57502-54>). 5. Position buttons alternately in two columns on the window. For every button it creates, BuildAbbrevDialCallbar checks to see if the feature assigned to that button actually exists by calling CVICE::GetButtonByFeature; if the feature does not exist, the button is disabled (<57503-38>). Also, every feature button string is filtered using CConfigSettings:: MapPasteName. (<57503-91>) BOOL BuildMiscFeatCallbar(); Lucent Technologies - Proprietary Use pursuant to Company instructions. -91. Get the miscellaneous feature callbar’s rectangle from the CConfigSettings object (<57503194>). 2. Using the obtained rectangle, create the CCallbarWindow to which this callbar will be attached. Load and apply previous window coordinates if they exist in the INI file. 3. For all PASTE identifiers between 57 and 74 (page 5 of the Definity 606A1 admin screen), call CVICE::GetFeatureButtonByPASTEID. 4. If the feature for an ID exists, add the feature to the callbar as a button. Set the button’s feature name and feature index properties appropriately. NOTE: Bridged appearance buttons will ONLY be available on this palette; in order to originate a call on a bridged appearance, the user must click one of these buttons (<57503-19>, <57503-24>, <57503-55>). 5. Position buttons alternately in two columns on the window. For every button it creates, BuildMiscFeatCallbar checks to see if the feature assigned to that button actually exists by calling CVICE::GetButtonByFeature; if the feature does not exist, the button is disabled (<57503-38>). Also, every feature button string is filtered using CConfigSettings:: MapPasteName. (<57503-91>) BOOL BuildCCFeatCallbar(); 1. Get the call center feature callbar’s rectangle from the CConfigSettings object (<57503-194>). 2. Using the obtained rectangle, create the CCallbarWindow to which this callbar will be attached. Load and apply previous window coordinates if they exist in the INI file. 3. For all PASTE identifiers between 35 and 56 (page 6 of the Definity 606A1 admin screen), call CVICE::GetFeatureButtonByPASTEID. 4. If the feature for an ID exists, add the feature to the callbar as a button. Set the button’s feature name and feature index properties appropriately (<57503-56>). 5. Position buttons alternately in two columns on the window. For every button it creates, BuildCCFeatCallbar checks to see if the feature assigned to that button actually exists by calling CVICE::GetButtonByFeature; if the feature does not exist, the button is disabled (<57503-38>). Also, every feature button string is filtered using CConfigSettings:: MapPasteName. (<57503-91>) BOOL BuildAUXReasonCodeCallbar(); 1. Get the AUX reason code callbar’s rectangle from the CConfigSettings object (<57503-194>). 2. Using the obtained rectangle, create the CCallbarWindow to which this callbar will be attached. Load and apply previous window coordinates if they exist in the INI file. 3. For all PASTE identifiers, call CVICE::GetFeatureButtonByPASTEID. 4. If the feature for an ID is AUX Reason Code, add the AUX Reason Code button to the callbar. Set the button’s feature name and feature index properties appropriately (<57503-57>). 5. Position buttons alternately in two columns on the window. For every button it creates, BuildAUXReasonCodeCallbar checks to see if the feature assigned to that button actually exists by calling CVICE::GetButtonByFeature; if the feature does not exist, the button is disabled (<57503-38>). Also, every feature button string is filtered using CConfigSettings:: MapPasteName. (<57503-91>) BOOL BuildStrokeCountCallbar(); 1. Get the stroke count callbar’s rectangle from the CConfigSettings object (<57503-194>). Lucent Technologies - Proprietary Use pursuant to Company instructions. -102. Using the obtained rectangle, create the CCallbarWindow to which this callbar will be attached. Load and apply previous window coordinates if they exist in the INI file. 3. For all PASTE identifiers, call CVICE::GetFeatureButtonByPASTEID. 4. If the feature for an ID is Stroke Count, add the Stroke Count button to the callbar. Set the button’s feature name and feature index properties appropriately (<57503-60>). 5. Position buttons alternately in two columns on the window. For every button it creates, BuildStrokeCountCallbar checks to see if the feature assigned to that button actually exists by calling CVICE::GetButtonByFeature; if the feature does not exist, the button is disabled (<57503-38>). Also, every feature button string is filtered using CConfigSettings:: MapPasteName. (<57503-91>) void EndPhoneSettings(); Set the m_pPhoneSettingsDlg member to NULL. void OnCallbarButton(UINT nID); This function receives all user button clicks through the application’s message map. In response to these clicks, it performs a number of functions depending on the button’s type: CBAR_BTNTYPE_SPEEDDIAL Although this button type exists, speed dial buttons are not supported in the first release. CBAR_BTNTYPE_MAKECALL 1. If the button’s AssociatedObject property is not blank, get the associated object, assuming it’s a dial string combo. Get the dial string from the combo. 2. If the dial string is blank and no current call exists, generate a call using CVICE::MakeCall; if the dial string is blank and a call exists, do nothing (<57503-18>). 3. If the dial string is not blank and no current call exists, call the VICE MakeCall method with the dial string; if a current call exists, call the VICE DialString method (<57503-25>). 4. If the dial string was not blank, add the dial string to the combo’s drop-down list. If the number of items in the list is now 16, remove the last item from the list. (<57503-35>) 5. If MakeCall returns a value indicating failure, the callbar manager displays the error message detailed in section 4.3.7.1 (<57503-20>). CBAR_BTNTYPE_DIALPAD 1. Get the value of the button’s FeatureString property (the digit this button represents) and pass this on to the VICE DialString method (<57503-25>). The buttons will always be dialed using DTMF tones (<57503-15>). S-channel dialing will not be performed through explicit calls; s-channel state will be handled through phone/switch interactions. CBAR_BTNTYPE_CIP A CIP button may be in one of three states depending on which state changes have taken place for the call associated with the button’s CIP. Based on the current state of the CIP button, perform the following steps: CBAR_CURRCIPFUNC_RELEASE 1. Get the name of the CIP associated with this button using the button’s AssociatedObject property. 2. Get a pointer to the CIP using FindObjectByName. Lucent Technologies - Proprietary Use pursuant to Company instructions. -113. Get the value of the CIP’s CallHandle property and send it to the VICE ReleaseCall function (<57503-22>). CBAR_CURRCIPFUNC_ANSWER 1. Get the name of the CIP associated with this button using the button’s AssociatedObject property. 2. Get a pointer to the CIP using FindObjectByName. 3. Get the value of the CIP’s CallHandle property and send it to the VICE AnswerCall function. (<57503-6>) CBAR_CURRCIPFUNC_UNHOLD 1. Get the name of the CIP associated with this button using the button’s AssociatedObject property. 2. Get a pointer to the CIP using FindObjectByName. 3. Get the value of the CIP’s CallHandle property and send it to the VICE UnholdCall function (<57503-21>). CBAR_BTNTYPE_FEATURE Get the value of the button’s FeatureString property (the PASTE feature name this button represents) and pass this on to the VICE ActivateFeature method (<57503-42>). CBAR_BTNTYPE_FAC Get the value of the button’s FeatureString property (the PASTE FAC name this button represents) and pass this on to the VICE ActivateFAC method. CBAR_BTNTYPE_ANNOUNCE 1. Check the current state of the recorder using the VICE GetRecorderState method. 2. Depending on recorder state, do the following: PLAYING If the device is currently playing, call the VICE StopGreeting method. RECORDING If the device is currently recording, the button should be disabled, so this situation should never occur. STOPPED If the device is currently stopped, get the button’s AssociatedObject property, which should be a list box. Determine the currently selected announcement by querying the list and call the VICE Play greeting method with the greeting number. CBAR_BTNTYPE_POPCB 1. Get the value of the button’s AssociatedObject property. 2. Search for a top-level window with this title in the root container list. 3. If the window is found in the list, set the focus to the window; if it is not found, call the appropriate callbar creation routine for the name specified by AssociatedObject (see Table 1). Callbar Type Name MainCB Construction Method BuildMainCallbar Lucent Technologies - Proprietary Use pursuant to Company instructions. -12AbbrevCB BuildAbbrevDialCallbar SWFeatCB BuildSwitchFeatCallbar CCFeatCB BuildCCFeatCallbar AUXReasonCB BuildAUXReasonCodeCallbar StrokeCB BuildStrokeCountCallbar Table 1. Callbar Types and Construction Methods void OnConnectionStateChange(DWORD dwConnState); LineCallback calls this method whenever the current connection status changes. For all connection state changes, the callbar manager updates the McFone system tray icon to reflect the state change. (<57503-5>) If this message indicates either a switch or COM link failure, the callbar manager zeros out all lamp and call state displays. If, on the other hand, the message indicates the return of service, the callbar manager performs several operations (<57503-4>): 1. Resets the state of every lamp to corresponding phone lamp’s state. 2. Determines the current 2nd line display contents (if possible) and updates 2nd-line display objects. void OnControlKeyPress(UINT nID, UINT nChar); 1. Determine which control sent this message using FindObjectByID. 2. If the object is a combo box, ignore the key press. 3. For all other objects, if the key pressed was a dialpad key and no calls exist, initiate a call and dial the digit (<57503-16>). Otherwise, if the key pressed was a dialpad key and calls exist, simply dial the digit (<57503-17>) and append the dialed digit to the current call’s truncated display (<57503-205>). void OnDispLine2Change(CString& sLine); LineCallback calls this method whenever the 2nd line of the 606 logical display changes (<5750332>). Upon receipt of the message, CCallbarManager finds all instances of the CBAR_OBTYPE_DISPLAY object type in its m_parCallbarObjects list, calling SetDispText with sLine for each one. void OnWindowPhoneSettings(); (<57503-49>) 1. Create an instance of the CPhoneSettingsDlg class and assign its pointer to m_pPhoneSettingsDlg. 2. Use the CPhoneSettingsDlg::Create member function to create a modeless dialog box. 3. Show and update the modeless dialog. void OnOptionsDownload(); (<57503-88>, <57503-49>) 1. Confirm the user’s request by displaying a message box. If the user cancels, exit. 2. Display an instance of the CPasteProgressDlg dialog box modally (<57503-89>). 3. Call PasterGetPasteData. 4. If PasterGetPasteData returns success, reload PASTE data and display a message to the user confirming a successful PASTE download (<57503-90>). 5. If PasterGetPasteData fails, display an error message stating the reason for failure (<57503-92). Lucent Technologies - Proprietary Use pursuant to Company instructions. -13void OnWindowCallCenter(); (<57503-49>) Call BuildCCFeatCallbar. void OnWindowAbbrevDial(); (<57503-49>) Call BuildAbbrevDialCallbar. void OnWindowSwitchFeat(); (<57503-49>) Call BuildMiscFeatCallbar. void OnWindowStrokeCounts(); (<57503-49>) Call BuildStrokeCountCallbar. void OnAnnouncementState(int nState, void *pData, int nModule); Called from CVoiceRecorder object to notify about change of state for a single announcement void OnRecorderState(int nState, void *pData, int nModule); Called from CVoiceRecorder object to notify about change of state for the entire object. int AutoPlayAnnouncement(void); Initiates playback of the announcement which is administered to be played automatically. int PlayAnnouncement(int nIndex); Initiates playback of the announcements selected in the combo-box on the callbar. int StopAnnouncement(void); Stops playback if such one is in progress. 4.3.5 Startup See the constructor for CCallbarManager in section 0. 4.3.6 Shutdown See the destructor for CCallbarManager in section 0. 4.3.7 Error Messages 4.3.7.1 Could not make call This message indicates failure in originating a call. The message will be displayed with an OK button. 4.3.8 Events for Event Log This class logs all TAPI call errors and memory allocation errors. 4.4 CCallbarWindow 4.4.1 Description This class represents the root display window of a callbar; it is created by and bound to a root callbar object container during the container’s constructor. The callbar manager builds callbars by creating a root container (and, thus, creating an instance of CCallbarWindow) and adding callbar objects and child containers to that root container; while so doing, the callbar manager also assigns an appropriate parent window to the objects (in most cases, the top-level window). 4.4.2 Interfacing FUs/Classes Lucent Technologies - Proprietary Use pursuant to Company instructions. -14CCallbarManager This class interacts directly with the CCallbarManager class. CCallbarWindow must receive a pointer to a callbar manager in its constructor so that it may forward menu and control messages through to CCallbarManager message handlers; it does this by overriding the OnCmdMsg member of the CWnd class and calling the callbar manager’s OnCmdMsg member. This technique allows the application as a whole to take advantage of the MFC message routing scheme while using dynamically created and configured callbar windows. CCallbarObjectContainer CCallbarWindow passes paint messages to its container, which then passes the paint messages to all objects of which this window is the parent; this operation results in a call to each object’s DrawControl method. 4.4.3 Data Structures and Variables m_pCont - a pointer to this window’s container. m_pMgr - a pointer to the callbar manager object. 4.4.4 Functions/Methods CCallbarWindow(CCallbarManager* pMgr, CCallbarObjectContainer* pCont, CRect& rcInitPos, LPCTSTR lpszMenuName); The constructor of the CCallbarWindow class performs the following actions: 1. Set the m_pCont and m_pMgr members to the supplied values. 2. Create the callbar window. 4.4.5 Startup See the class constructor in section 4.4.4. 4.4.6 Shutdown This class performs no actions at shutdown. 4.4.7 Error Messages This class does not display any user error messages. 4.4.8 Events for Event Log This class logs failure to create its window. 4.5 Callbar Object Containers 4.5.1 CCallbarObjectContainer Class 4.5.1.1 Description The CCallbarObjectContainer class manages a list of callbar objects within a callbar tree structure. The root node of a callbar tree is always a container, and each container may house an arbitrary number of callbar objects and containers. A container is responsible for framing callbar objects and other containers, and so must always be associated with a window. A root container is always associated with an instance of the CallbarWindow Lucent Technologies - Proprietary Use pursuant to Company instructions. -15class that is created within its constructor. When this window receives messages, it passes its container a subset of these which the container must process (i.e., containers must pass the OnPaint message to all callbar objects which do not possess their own windows, like CCallbarIndicators). 4.5.1.2 Interfacing FUs/Classes 4.5.1.3 Data Structures and Variables m_parCallbarObjects - array of callbar objects within this container. m_parChildContainers - array of callbar objects containers within this container. m_pCBWnd - pointer to the instance of the CCallbarWindow class associated with this callbar. Data storage for the Wnd property. m_pMgr - pointer to the callbar manager object. 4.5.1.4 Functions/Methods 4.5.1.4.1 Actions void AddCallbarObject(CObject* pObj); Call the Add method of the m_parCallbarObjects member with the pObj parameter. void AddChildContainer(VOID* pCont); Call the Add method of the m_parChildContainers member with the pCont parameter. CCallbarObjectContainer(CCallbarManager* pMgr); 1. Set m_pMgr to the value of pMgr. 2. Create an instance of the CCallbarWindow class and assign it to m_pCBWnd. 3. Show and update the callbar window. ~CCallbarObjectContainer(); 1. Clear the callbar object list using ClearCallbarObjects. 2. Clear the container list using ClearChildContainers. 3. If this container represented the main application callbar window, null out the app object’s m_pMainWnd pointer so that messages to the app will be properly discarded. void ClearCallbarObjects(); 1. For all objects in m_parCallbarObjects, delete the object. 2. Remove all object pointers from the list. void ClearChildContainers(); 1. For all objects in m_parChildContainers, delete the object. 2. Remove all object pointers from the list. CCallbarObject* FindObjectByID(UINT nID); This method looks up a callbar object by its assigned Windows control ID. It linearly searches m_parCallbarObjects for an object with the supplied control ID and then returns a pointer to that object. CCallbarObject* FindObjectByName(CString& sName); Lucent Technologies - Proprietary Use pursuant to Company instructions. -16This method looks up a callbar object by its name. It linearly searches m_parCallbarObjects for an object of the supplied name and then returns a pointer to that object. void OnControlKeyPress(UINT nID, UINT nChar); Every windowed callbar object of which this window is the parent forwards keystrokes to this window through calls to this method. this method simply forwards these calls on to the callbar manager’s OnControlKeyPress method. void OnPaintCallbarObjects(CDC* pDC); For every object in the m_parCallbarObjects list, this method calls DrawControl. void RemoveCallbarObject(CObject* pObj); This method searches m_parCallbarObjects for the supplied pointer. If the pointer is found, the object is removed from the list and deleted. void RemoveChildContainer(VOID* pObj); This method searches m_parChildContainers for the supplied pointer. If the pointer is found, the container is removed from the list. void ShiftObjectsDown(LONG lAmount, VOID* pExclude); This method, used by CIP frames to move all controls down when resizing, performs the following steps: 1. For all objects in the m_parCallbarObjects array, get the object’s rectangle using the BoundingRect property, adjust the rectangle vertically by lAmount, and set the object’s new rectangle using the Move method. 2. For all containers in the m_parCholdContainers array save the object denoted by the pExclude parameter, get the container’s rectangle using the BoundingRect property, adjust the rectangle vertically by lAmount, and set the object’s new rectangle using the Move method. 4.5.1.4.2 Properties Wnd Property This property allows access to the window associated with this container. It is a read-only property which may be retrieved using the following access method: CWnd* GetWnd(); 4.5.1.5 Startup See constructor in section 0 4.5.1.6 Shutdown See destructor in section 0 4.5.1.7 Error Messages The CCallbarObjectContainer displays no user error messages. 4.5.1.8 Events for Event Log CCallbarObjectContainer logs the following events: • Memory allocation errors • Items for which a member function searches and cannot find Lucent Technologies - Proprietary Use pursuant to Company instructions. -174.5.2 CCallbarFrame 4.5.2.1 Description The CCallbarFrame class inherits from CCallbarObjectContainer, and thus is capable of containing callbar objects and containers. To these capabilities the CCallbarFrame class adds the ability to contain objects and containers in a group box, displaying around them a 3D frame with optional text in its upperleft corner. 4.5.2.2 Interfacing FUs/Classes CCallbarObjectContainer CCallbarFrame inherits all of its containment capabilities from CCallbarObjectContainer. 4.5.2.3 Data Structures and Variables m_pGroupBox - pointer to the group box frame window associated with this object. 4.5.2.4 Functions/Methods 4.5.2.4.1 Actions CCallbarFrame(CWnd* pWnd, CCallbarObjectContainer* pCont, CRect& rcBounds, CString& sName, Cstring& sCaption); The constructor of the CCallbarFrame class performs the following functions: 1. Store pWnd, pCont, rcBounds, and sName in respective member variables. 2. Set the object type to CBAR_OBTYPE_FRAME. 3. Create the group box using the caption specified in sCaption and assign it to the m_pGroupBox member variable. 4. Add self to the callbar manager’s global list by calling the CCallbarManager::AddGlobalObject method. ~CCallbarFrame(); The destructor simply removes the frame object from the callbar manager’s global list using CCallbarManager::RemoveGlobalObject, destroys the window represented by m_pGroupBox, and deletes m_pGroupBox. void Move(CRect& rcNew); This method moves the frame object to the new coordinates specified by rcNew. In order to do this, it calls the MoveWindow member of m_pGroupBox. 4.5.2.4.2 Properties Wnd Property The Wnd property represents the group box window allocated by the frame. It is a read-only property and may be retrieved using the following method: CWnd* GetWnd(); 4.5.2.5 Startup See the constructor for CCallbarFrame in section 4.5.2.4. Lucent Technologies - Proprietary Use pursuant to Company instructions. -184.5.2.6 Shutdown See the destructor for CCallbarFrame in section 4.5.2.4. 4.5.2.7 Error Messages This class displays no user error messages. 4.5.2.8 Events for Event Log This class logs failures to allocate memory. 4.5.3 CCallbarCIPFrame 4.5.3.1 Description The CCallbarCIPFrame class inherits from CCallbarFrame, which allows it to act as a callbar object container and to use the CCallbarFrame’s group box. However, CCallbarCIPFrame adds special call handling features such as ordered CIP display and automatic window resizing. 4.5.3.2 Interfacing FUs/Classes CCallbarFrame CCallbarCIPFrame inherits all of its containment capabilities from CCallbarFrame. CCallbarCIP The CCallbarCIPFrame class creates CIPs when a new call must be displayed, and destroys them when a call becomes idle. In order to accomodate these additions and subtractions, it stretches itself and moves all surrounding objects (<57503-23>). CIPs are created for both normal and bridged appearances (<57503-24>). 4.5.3.3 Data Structures and Variables This class adds no member variables. 4.5.3.4 Functions/Methods 4.5.3.4.1 Actions CCallbarCIP* AddCIP(HCALL hCall); (<57503-23>) 1. Calculate the rectangle for our new CIP. 2. Calculate a delta value for resizing of the frame window and movement of objects. 3. Resize the main callbar to accommodate the height of the added CIP. 4. Adjust the height of the frame using the delta. 5. Adjust the positions of objects and the callbar window height using the delta with the ShiftObjectsDown call. 6. Create a new CIP, set its call handle, and add the object to our list using AddCallbarObject. 7. Set the CIP button’s indicator to the button ID associated with this HCALL. 8. Return the new CIP pointer. CCallbarCIPFrame(CWnd* pWnd, CCallbarObjectContainer* pCont, CRect& rcBounds, CString& sName, Cstring& sCaption); Lucent Technologies - Proprietary Use pursuant to Company instructions. -19The constructor of the CCallbarFrame class performs the following functions: 1. Store pWnd, pCont, rcBounds, and sName in respective member variables. 2. Set the object type to CBAR_OBTYPE_CIPFRAME. 3. Adjust the height of the specified rectangle such that the CIP frame will be displayed in its “no calls” size. 4. Create the group box using the caption specified in sCaption and assign it to the m_pGroupBox member variable. 5. Add self to the callbar manager’s global list by calling the CCallbarManager::AddGlobalObject method. ~CCallbarCIPFrame(); The destructor simply removes the frame object from the callbar manager’s global list using CCallbarManager::RemoveGlobalObject, destroys the window represented by m_pGroupBox, and deletes m_pGroupBox. void DrawControl(CRect& rcNew); This event is simply passed on to all objects owned by this CIP frame. void GetHCallCIP(HCALL hCall); Loop through the m_parCallbarObjects array looking for a CIP whose HCALL is set to that specified. If found, return the CIP pointer. void GetIndexCIP(HCALL hCall); Loop through the m_parCallbarObjects array looking for a CIP whose HCALL is set to that specified. If found, return the index of the CIP in the m_parCallbarObjects array. void Move(CRect& rcNew); This method moves the frame object to the new top, left, and right coordinates specified by rcNew, and modifies the bottom coordinate such that the height of the frame doesn’t change. void OnCallStateChange(HCALL hCall, DWORD dwCallState); 1. Look up the CIP associated with this HCALL using GetHCallCIP. If there is no CIP associated with this HCALL, add a new CIP using AddCIP. 2. If the call state is LINECALLSTATE_IDLE or LINECALLSTATE_CONFERENCED, remove the CIP associated with the call (if any). 3. If the call state transitions from LINECALLSTATE_OFFERING to LINECALLSTATE_CONNECTED for a given CIP, call the callbar manager’s AutoPlayAnnouncement method. 4. If the call state transitions from LINECALLSTATE_CONNECTED to any other state for a given CIP, call the callbar manager’s StopAnnouncement method to stop any currently-playing announcement. 5. For any other call state, if there is not currently a CIP allocated for this HCALL, create one. 6. Reset the CIP’s call state. void RemoveCIP(HCALL hCall); 1. Retrieve a pointer to the CIP associated with this HCALL and get the CIP’s index in the m_parCallbarObjects array. 2. Remove this CIP from our object array. Lucent Technologies - Proprietary Use pursuant to Company instructions. -203. Calculate the vertical size change necessary. 4. Move CIPs to adjusted locations. 5. Adjust height of the CIP frame. 6. Move callbar object up by passing the negative size change to ShiftObjectsDown. 7. Resize the callbar window. 4.5.3.4.2 Properties NumCIPs Property The NumCIPs property represents the number of CIPs currently maintained by this CIP frame. It is a read-only property and may be retrieved using the following method: int GetNumCIPs(); This method loops through the m_parCallbarObjects array and counts all of the CIP objects. Wnd Property The Wnd property represents the group box window allocated by the frame. It is a read-only property and may be retrieved using the following method: CWnd* GetWnd(); 4.5.3.5 Startup See the constructor for CCallbarCIPFrame in section 4.5.3.4. 4.5.3.6 Shutdown See the destructor for CCallbarCIPFrame in section 4.5.3.4. 4.5.3.7 Error Messages This class displays no user error messages. 4.5.3.8 Events for Event Log This class logs failures to allocate memory and out-of-bounds requests to its member functions. 4.6 Callbar Objects 4.6.1 CCallbarObject 4.6.1.1 Description CCallbarObject is the root class of all callbar object classes. It provides all common properties of callbar objects, and also inherits from CObject and the IControlDraw interface. 4.6.1.2 Interfacing FUs/Classes CObject Although callbar loading and saving are not supported in this release of the product, the CCallbarObject class is derived from CObject, allowing for standardized serialization in the future. IControlDraw Lucent Technologies - Proprietary Use pursuant to Company instructions. -21CCallbarObject inherits this interface to provide a generic means through which a container may ask a callbar object to paint itself. This is useful for windowless objects such as indicators, or for objects which combine windowed and windowless objects, such as CIPs. 4.6.1.3 Data Structures and Variables m_pCont - a pointer to this object’s callbar object container. Data storage for the Container property. m_pOwner - a pointer to this object’s parent window. Data storage for the ParentWindow property. m_rcBounds - the current bounding rectangle of this object within its parent window. Data storage for the BoundingRect property. m_sName - the name of this object. Data storage for the Name property. m_dwObType - the type of this object. Data storage for the ObjectType property. m_nControlID - the Windows control ID of this object. Data storage for the ControlID property. m_sAssociatedObject - the value of the sName property for an object associated with this object. Used by MakeCall buttons to determine their associated CCallbarCombo, and by CIP buttons to find their CIP owner. Data storage for the AssociatedObject property. 4.6.1.4 Functions/Methods 4.6.1.4.1 Actions void DrawControl(CDC* pDC); This method performs no actions; it is simply a default implementation. void Move(CRect& rcNew); This method sets m_rcBounds to the new rectangle. void Serialize(CArchive& ar); This method is a placeholder for future functionality. 4.6.1.4.2 Properties The following properties are common to all callbar objects. AssociatedObject Property The AssociatedObject property is a string containing the name assigned to an object associated with this object. This association can come in several forms: • For CIP buttons, the associated object is the owning CIP; therefor, this property would be set to the name of the CIP. • For MakeCall buttons, this property is set to the name of a combo box from which to obtain a string to dial. The AssociatedObject property may be set or retrieved using these methods: CString GetAssociatedObject(); void SetAssociatedObject(CString& sObjectName); BoundingRect Property The BoundingRect property represents the parent-window rectangle into which the object will be drawn. Setting this property is equivalent to using the Move method. The Font property may be set or retrieved using these methods: Lucent Technologies - Proprietary Use pursuant to Company instructions. -22CRect GetBoundingRect(); void SetBoundingRect(CRect& rcNew); Container Property The Container property a pointer to the callbar object container which contains this object. It is readonly and may be retrieved using the following method: CCallbarObjectContainer* GetContainer(); ControlID Property The ControlID property holds the Windows control ID for a control associated with a callbar object (button, combo, etc.). This value is used by the callbar manager when it is reacting to callbar events (i.e., OnCallbarButton). The ControlID property is read-only and may be retrieved using the following method: CString GetControlID(); Name Property The Name property is the reference string used by objects to find one another, as in CIP button which must look up its owning CIP. The Name property may be set or retrieved using these methods: CString GetName(); void SetName(CString& sName); ObjectType Property The ObjectType property contains the type of this object (button, combo, CIP, etc.). It may be set to any one of the following constants: CBAR_OBTYPE_BUTTON CBAR_OBTYPE_CIP CBAR_OBTYPE_INDICATOR CBAR_OBTYPE_COMBO CBAR_OBTYPE_DROPLIST CBAR_OBTYPE_FRAME CBAR_OBTYPE_CIPFRAME CBAR_OBTYPE_DISPLAY CBAR_OBTYPE_STATIC CBAR_OBTYPE_SLIDER The ObjectType property is read-only (set only during construction) and may be retrieved using the following method: DWORD GetObjectType(); ParentWindow Property The ParentWindow property maintains a pointer to the CWnd which is the parent of this callbar object. This property only applies to windowed objects. The ParentWindow property is read-only may be retrieved using the following method: CWnd* GetParentWindow(); 4.6.1.5 Startup This class has only a default constructor. Lucent Technologies - Proprietary Use pursuant to Company instructions. -234.6.1.6 Shutdown No special actions are taken in the destructor of this class. 4.6.1.7 Error Messages This class displays no user error messages. 4.6.1.8 Events for Event Log This class logs no errors. 4.6.2 CCallbarButton 4.6.2.1 Description The CCallbarButton class manages the appearance and characteristics of a callbar button, an entity which can take on many forms and meanings. Callbar buttons perform the following functions: • • • • • • • Activate a set feature Activate a Feature Access Code (FAC) Dial a digit Create a call Play/Stop an announcement Dial a speed-dial number Display another callbar 4.6.2.2 Interfacing FUs/Classes CCallbarManager When an instance of the CCallbarButton class is created, it registers itself with the callbar manager. The callbar manager is responsible for handling all Windows control events sent to the button through CCallbarManager::OnCallbarButton. 4.6.2.3 Data Structures and Variables Besides the members it inherits from CCallbarObject, CCallbarButton contains the following members: m_pButton - Instance of the CButton class owned by this object m_pIndicator - Instance of the CCallbarIndicator class owned by this object. Data storage for the Indicator property. m_dwBtnType - Action to be performed by this button. Data storage for the ButtonType property. m_dwCurrCIPFunc - Current state of a CIP button. Data storage for the CurrCIPFunc property. m_dwIndicType - Type of indictor displayed with this button. Data storage for the IndicType property. m_sFeatString - String associated with the current button type. Data storage for the FeatString property. m_dwFeatIndex - Index of feature associated with this button. Data storage for the FeatIndex property. 4.6.2.4 Functions/Methods 4.6.2.4.1 Actions CCallbarButton(CWnd* pWnd, CCallbarObjectContainer* pCont, UINT nID, CRect& rcBounds, CString& sName, CString& sCaption, LONG lIndicatorType); Lucent Technologies - Proprietary Use pursuant to Company instructions. -24The constructor for the CCallbarButton class performs the following function: 1. Set the values of inherited members (m_pOwner, m_pCont, m_nControlID, m_rcBounds, and m_sName). 2. Set m_dwObType to CBAR_OBTYPE_BUTTON. 3. If any type of indicator is requested other than CBAR_INDICTYPE_NONE, build the indicator, calculate its position, and add it to our container. 4. Create the button window using the supplied caption. 5. Add this object to the callbar manager’s global object list. ~CCallbarButton(); The destructor for the CCallbarButton class removes this object from the callbar manager global list, removes its indicator (if one exists) from its container, deletes the window which represents the button by calling m_pButton-> DestroyWindow, and then deletes the button object pointed to by m_pButton. void Move(CRect& rc); This method changes the current location of the button object within its parent window, moving the button itself and any associated indicator. After modifying the value of the m_rcBounds member, it invalidates the previous rectangle and the new rectangle, and then it calls MoveWindow for its internal button object. 4.6.2.4.2 Properties ButtonIcon Property The ButtonIcon property represents the bitmap currently displayed on the button face. It may be set or retrieved using these methods: HICON GetIcon(); HICON SetIcon(HICON hIcon); These methods directly call the CButton methods of the same names. ButtonType Property The ButtonType property maintains the type of function performed by this button. This value is set by entities external to this object, but defaults to CBAR_BTNTYPE_FEATURE. This property may be set to any one of the following values: CBAR_BTNTYPE_SPEEDDIAL - a speed dial button (not supported in this release) CBAR_BTNTYPE_MAKECALL - a button which places a call CBAR_BTNTYPE_DIALPAD - a dialpad button (<57503-25>) CBAR_BTNTYPE_CIP - a call information panel button CBAR_BTNTYPE_FEATURE - a button representing a telephone feature CBAR_BTNTYPE_FAC - a button which dials a Feature Access Code CBAR_BTNTYPE_ANNOUNCE - a button which plays/stops announcements CBAR_BTNTYPE_POPCB - a button which displays other callbars The ButtonType property may be set or retrieved using these methods: DWORD GetButtonType(); void SetButtonType(DWORD dwButtonType); CurrCIPFunc Property Lucent Technologies - Proprietary Use pursuant to Company instructions. -25The CurrCIPFunc property maintains the type of function performed by this button. This value is set by entities external to this object, but defaults to CBAR_BTNTYPE_FEATURE. This property may be set to any one of the following values: CBAR_CURRCIPFUNC_RELEASE - the button currently displays the string “Release,” and will release its call when it is pushed. CBAR_CURRCIPFUNC_ANSWER - the button currently displays the string “Answer,” and will answer its call when it is pushed. CBAR_CURRCIPFUNC_UNHOLD - the button currently displays the string “Reconnect,” and will unhold its call when it is pushed. CBAR_CURRCIPFUNC_BRIDGEDANSWER - the button currently displays the extension of the bridged appearance with which the call is associated, and will answer the call when it is pushed. The CurrCIPFunc property may be set or retrieved using these methods: DWORD GetCIPFunc(); void SetCIPFunc(DWORD dwFunc); Indicator Property The Indicator property allows access to the button’s indicator object.It is read-only and may be retrieved using the following method: CCallbarIndicator* GetIndicator(); IndicType Property The IndicType property maintains the type of indicator this button displays. It may take on any of these values: CBAR_INDICTYPE_NONE - the button displays no indicator. CBAR_INDICTYPE_CALLAPP - the button displays a line feature indicator with two lamps. CBAR_INDICTYPE_FEAT - the button displays a feature indicator with one lamp. The IndicType property is read-only and may be retrieved using the following method: DWORD GetIndicType(); FeatString Property The FeatString property contains a string used to perform the function assigned to a button; its meaning is dependent upon the ButtonType property. The meanings of this property per button type are as follows: CBAR_BTNTYPE_SPEEDDIAL - the user-defined dial string (not supported in this release) CBAR_BTNTYPE_DIALPAD - the digit to be dialed CBAR_BTNTYPE_FEATURE - the PASTE name of the feature to be activated CBAR_BTNTYPE_FAC - the PASTE name of the FAC to be activated CBAR_BTNTYPE_POPCB - the name of the callbar to display The FeatString property may be set and retrieved using the following methods: CString GetFeatString(); void SetFeatString(CString& sFeat); FeatIndex Property The FeatIndex property indicates the depth to which the callbar manager should search in the PASTE data table for a particular feature; for example, if this button represented the abrv-dial switch feature, and we wished for this button to activate the third abbreviated dial button, then the value of this Lucent Technologies - Proprietary Use pursuant to Company instructions. -26property would be three. This property is only used with the CBAR_BTNTYPE_FEATURE button type. The FeatString property may be set and retrieved using the following methods: CString GetFeatIndex(); void SetFeatIndex(DWORD dwIndex); 4.6.2.5 Startup See constructor in section 4.6.2.4. 4.6.2.6 Shutdown See destructor in section 4.6.2.4. 4.6.2.7 Error Messages This class displays no user error messages. 4.6.2.8 Events for Event Log This class logs memory allocation errors. 4.6.3 CCallbarCIP 4.6.3.1 Description The CCallbarCIP class displays a basic McFone telephony component, the Call Information Panel (CIP). CIPs bind themselves to a call (specifically, to the TAPI HCALL) and provide information and services for that call. CIPs show the display text for a call in a display area, display line-feature-like lamp status using an indicator, and allow state-related call manipulation through a button. 4.6.3.2 Interfacing FUs/Classes CCallbarCIPFrame This derivative of the CCallbarFrame class handles the display of multiple CIPs, representative of multiple incoming and outgoing calls. CCallbarCIPFrame creates CIPs when it detects a TAPI HCALL for which it has not already created a CIP, and removes CIPs when their calls become idle. 4.6.3.3 Data Structures and Variables Besides the members it inherits from CCallbarObject, CCallbarButton contains the following members: m_pCBButton - Instance of the CCallbarButton class owned by this CIP. Data storage for the CIPButton property. m_dwCallState - Current TAPI state of the call associated with this CIP. Data storage for the CallState property. m_hCall - Action to be performed by this button. Data storage for the CallHandle property. m_pDispFont - Current font for the CIP display text. Data storage for the Font property. m_sDispText - Current display text. Data storage for the DispText property. Lucent Technologies - Proprietary Use pursuant to Company instructions. -274.6.3.4 Functions/Methods 4.6.3.4.1 Actions CCallbarCIP::CCallbarCIP(CWnd* pWnd, CCallbarObjectContainer* pCont, UINT nID, CRect& rc, CString& sName); The constructor for the CCallbarCIP class performs the following function: 1. Set the values of inherited members (m_pOwner, m_pCont, m_nControlID, m_rcBounds, and m_sName). 2. Set m_dwObType to CBAR_OBTYPE_CIP. 3. Create the font used in the display area. 4. Create the CIP button. 5. Add this object to the callbar manager’s global object list. ~CCallbarButton(); The destructor for the CCallbarCIP class removes this object from the callbar manager global list, removes the CIP button from its container, and then deletes the display font. void DrawControl(CDC* pDC); This method performs the following actions: 1. Draw a 3D rectangle around the display area specified by m_rcBounds. 2. Draw the text in m_sDispText vertically centered and left-justified within m_rcBounds. void Move(CRect& rcNew); This method moves the CIP object to the new coordinates specified by rcNew. In order to do this, it invalidates the current bounding rectangle, invalidates the new rectangle, updates the value of the current bounding rectangle, and calls for a window update. Then it moves the button control using CCallbarButton::Move. void OnCallDisplayChange(); On receipt of this message, the CIP looks up the display for its HCALL using CVICE::GetHCallDispString; if this display line is not blank, the CIP updates its DispText property to reflect the change. 4.6.3.4.2 Properties CallHandle Property The CallHandle property represents the TAPI HCALL currently associated with this CIP. The CallHandle property may be set or retrieved using these methods: HCALL GetCallHandle(); void SetCallHandle(HCALL hCall); CallState Property The CallState property represents the current state of the TAPI call associated with this CIP. It can take on the value of any TAPI LINECALLSTATE_ constant. The CallState property may be set or retrieved using these methods: DWORD GetCallState(); void SetCallState(DWORD dwCallState); Lucent Technologies - Proprietary Use pursuant to Company instructions. -28This access method performs the following steps based on call state: 1. Set the m_dwCallState member variable. 2. If the new call state is LINECALLSTATE_CONNECTED, change the CIP button text to “Release” and set the button function to CBAR_CURRCIPFUNC_RELEASE. If the BS_DEFPUSHBUTTON style bit was previously added to this button, remove it (<575038>). 3. If the new call state is LINECALLSTATE_ONHOLD, LINECALLSTATE_ ONHOLDPENDCONF, or LINECALLSTATE_ONHOLDPENDTRANSFER, change the CIP button text to “Reconnect” and set the button function to CBAR_CURRCIPFUNC_ UNHOLD. 4. If the new call state is LINECALLSTATE_OFFERING and the associated appearance is bridged, set the CIP button text to display the extension of the bridged appearance; if the appearance is not bridged, change the CIP button text to “Answer.” In both cases, set the button function to CBAR_CURRCIPFUNC_ANSWER. If no other offering calls exist, add the BS_DEFPUSHBUTTON style bit to the CIP button, making this the default button for ENTER key presses (<57503-7>, <57503-39>). CIPButton Property The CIPButton property allows access to the CIP’s button object. It is read-only and may be retrieved using the following method: CCallbarButton* GetCIPButton(); DispText Property The DispText property contains the current display string used in painting the CIP. It is empty by default, but may be set or retrieved using these methods: CString GetDispText(); void SetDispText(CString& sDisp); Font Property The Font property represents a pointer to a CFont object (m_sDispFont). This font is created and set to a default value (Times New Roman, Normal, 20 ht.) in CCallbarCIP’s constructor, and the font object is deleted when the CCallbarCIP object is deleted. The Font property may be set or retrieved using these methods: CFont GetFont(); void SetFont(CFont& font); 4.6.3.5 Startup See constructor in section 4.6.3.4. 4.6.3.6 Shutdown See destructor in section 4.6.3.4. 4.6.3.7 Error Messages This class displays no user error messages. 4.6.3.8 Events for Event Log This class logs memory allocation errors. Lucent Technologies - Proprietary Use pursuant to Company instructions. -294.6.4 CCallbarCombo 4.6.4.1 Description The CCallbarCombo class manages the appearance and characteristics of a callbar combo box. Callbar combos are drop-down list boxes with writable text areas which are used for senderized dialing (<5750325>). The CCallbarCombo class combo box window does not specifically limit the amount of characters which may be entered by the user; this allows for the entry of 65,535 bytes in characters (<57503-33>). 4.6.4.2 Interfacing FUs/Classes CCallbarManager When an instance of the CCallbarCombo class is created, it registers itself with the callbar manager. The callbar manager is responsible for handling all Windows control events sent to the combo. 4.6.4.3 Data Structures and Variables Besides the members it inherits from CCallbarObject, CCallbarCombo contains the following members: m_pCombo - Instance of the CComboBox class owned by this object. Data storage for the Combo property. 4.6.4.4 Functions/Methods 4.6.4.4.1 Actions CCallbarCombo(CWnd* pWnd, UINT nID, CRect& rcBounds, CString& sName); The constructor for the CCallbarCombo class performs the following functions: 1. Set the values of inherited members (m_pOwner, m_nControlID, m_rcBounds, and m_sName). 2. Set m_dwObType to CBAR_OBTYPE_COMBO. 3. Create the combo window using the supplied caption. 4. Add this object to the callbar manager’s global object list. ~CCallbarCombo(); The destructor for the CCallbarCombo class removes this object from the callbar manager global list, deletes the window which represents the combo by calling m_pCombo-> DestroyWindow, and then deletes the combo object pointed to by m_pCombo. void Move(CRect& rc); This method changes the current location of the combo object within its parent window. After modifying the value of the m_rcBounds member, it calls MoveWindow for its internal combo object. 4.6.4.4.2 Properties Combo Property The Combo property allows access to the combo control this object represents. This property is readonly and may be retrieved using the following method: CComboBox* GetCombo(); 4.6.4.5 Startup See constructor in section 4.6.4.4. Lucent Technologies - Proprietary Use pursuant to Company instructions. -304.6.4.6 Shutdown See destructor in section 4.6.4.4. 4.6.4.7 Error Messages This class displays no user error messages. 4.6.4.8 Events for Event Log This class logs memory allocation errors. 4.6.5 CCallbarDisplay 4.6.5.1 Description The CCallbarDisplay class shows all 2nd-line display text sent by the switch (i.e., Date/Time, Call Prompting Digits, Directory, etc.) (<57503-32>). It is drawn as a simple 3D rectangle with embedded text on the DC of its container; it does not have a window of its own. 4.6.5.2 Interfacing FUs/Classes CCallbarManager When an instance of the CCallbarDisplay class is created, it registers itself with the callbar manager. Thereafter, when the callbar manager receives 2nd-line display change notifications from the VICE layer through VICE calls to CCallbarManager::OnDispLine2Change, all instances of CCallbarDisplay are notified of the update. 4.6.5.3 Data Structures and Variables m_pDispFont - pointer to the current CFont object being used to paint display text. Data storage for this object’s Font property. m_sDispText - string containing the current display contents. Data area for this object’s DispText property. 4.6.5.4 Functions/Methods 4.6.5.4.1 Actions CCallbarDisplay(CWnd* pWnd, CCallbarObjectContainer* pCont, CRect& rcBounds, CString& sName); The constructor of the CCallbarDisplay class performs the following functions: 1. Store pWnd, pCont, rcBounds, and sName in respective member variables. 2. Set the object type to CBAR_OBTYPE_DISPLAY. 3. Set initial display text (m_sDispText) to a blank string. 4. Allocate a CFont object and assign it to m_pDispFont. Create the default font for display text. 5. Add self to the callbar manager’s global list by calling the CCallbarManager::AddGlobalObject method. ~CCallbarDisplay(); The destructor simply removes the display object from the callbar manager’s global list using CCallbarManager::RemoveGlobalObject and deletes m_pDispFont. void DrawControl(CDC* pDC); Lucent Technologies - Proprietary Use pursuant to Company instructions. -31This method performs the following actions: 1. Draw a 3D rectangle around the display area specified by m_rcBounds. 2. Draw the text in m_sDispText vertically centered and left-justified within m_rcBounds. void Move(CRect& rcNew); This method moves the display object to the new coordinates specified by rcNew. In order to do this, it invalidates the current bounding rectangle, invalidates the new rectangle, updates the value of the current bounding rectangle, and calls for a window update. 4.6.5.4.2 Properties The following properties extend those properties which the CCallbarDisplay class inherits from the CCallbarObject class. They represent those characteristics peculiar to callbar display objects. DispText Property The DispText property contains the current display string used in painting the object. It is empty by default, but may be set or retrieved using these methods: CString GetDispText(); void SetDispText(CString& sDisp); Font Property The Font property represents a pointer to a CFont object (m_sDispFont). This font is created and set to a default value (Times New Roman, Normal, 20 ht.) in CCallbarDisplay’s constructor, and the font object is deleted when the CCallbarDisplay object is deleted. The Font property may be set or retrieved using these methods: CFont GetFont(); void SetFont(CFont& font); 4.6.5.5 Startup See the constructor for CCallbarDisplay in section 4.6.5.4. 4.6.5.6 Shutdown See the destructor for CCallbarDisplay in section 4.6.5.4. 4.6.5.7 Error Messages This class displays no user error messages. 4.6.5.8 Events for Event Log This class logs failures to allocate memory. 4.6.6 CCallbarDroplist 4.6.6.1 Description The CCallbarDroplist class manages the appearance and characteristics of a callbar drop-down text (droplist) box. Callbar droplists are drop-down list boxes with read-only text areas which are used for announcement selection. Lucent Technologies - Proprietary Use pursuant to Company instructions. -324.6.6.2 Interfacing FUs/Classes CCallbarManager When an instance of the CCallbarDroplist class is created, it registers itself with the callbar manager. The callbar manager is responsible for handling all Windows control events sent to the droplist. 4.6.6.3 Data Structures and Variables Besides the members it inherits from CCallbarObject, CCallbarDroplist contains the following members: m_pCombo - Instance of the CComboBox class owned by this object. Data storage for the Combo property. 4.6.6.4 Functions/Methods 4.6.6.4.1 Actions CCallbarDroplist(CWnd* pWnd, UINT nID, CRect& rcBounds, CString& sName); The constructor for the CCallbarDroplist class performs the following functions: 1. Set the values of inherited members (m_pOwner, m_nControlID, m_rcBounds, and m_sName). 2. Set m_dwObType to CBAR_OBTYPE_DROPLIST. 3. Create the droplist window. 4. Add this object to the callbar manager’s global object list. ~CCallbarDroplist(); The destructor for the CCallbarDroplist class removes this object from the callbar manager global list, deletes the window which represents the droplist by calling m_pCombo-> DestroyWindow, and then deletes the combo object pointed to by m_pCombo. void Move(CRect& rc); This method changes the current location of the droplist object within its parent window. After modifying the value of the m_rcBounds member, it calls MoveWindow for its internal combo object. 4.6.6.4.2 Properties Combo Property The Combo property allows access to the combo control this object represents. This property is readonly and may be retrieved using the following method: CComboBox* GetCombo(); 4.6.6.5 Startup See constructor in section 4.6.4.4. 4.6.6.6 Shutdown See destructor in section 4.6.4.4. 4.6.6.7 Error Messages This class displays no user error messages. Lucent Technologies - Proprietary Use pursuant to Company instructions. -334.6.6.8 Events for Event Log This class logs memory allocation errors. 4.6.7 CCallbarIndicator 4.6.7.1 Description The CCallbarIndicator class displays either a one or two Definity-style lamps, analogous to Definity feature and line feature buttons, repectively. Indicators are usually associated with buttons of the CBAR_BTNTYPE_FEATURE button type. 4.6.7.2 Interfacing FUs/Classes CCallbarManager When an instance of the CCallbarIndicator class is created, it registers itself with the callbar manager. Thereafter, when the callbar manager receives lamp update notifications through OnLampStateChange, these notifications are passed to the indicator. 4.6.7.3 Data Structures and Variables m_dwBtnID - the TAPI button ID assigned to this indicator. Data Storage for the BtnID property. m_dwCurrentIndicState - state of the “current call” (red) indicator lamp. Data Storage for the CurrentIndicState property. m_dwIndicatorType - type of indicator displayed by this object. Data Storage for the IndicatorType property. m_dwStatusIndicFlashState - on/off state of the status indicator (green) lamp within the context of its current flash pattern. Data storage for the StatusIndicFlashState property. m_dwStatusIndicState - state of the status (green) indicator lamp. Data Storage for the StatusIndicState property. 4.6.7.4 Functions/Methods 4.6.7.4.1 Actions CCallbarIndicator(CWnd* pWnd, CCallbarObjectContainer* pCont, CRect& rcBounds, CString& sName, DWORD dwIndicatorType); The constructor of the CCallbarIndicator class performs the following functions: 1. Store pWnd, pCont, rcBounds, sName and dwIndicatorType in respective member variables. 2. Set the object type to CBAR_OBTYPE_INDICATOR. 3. Allocate a CFont object and assign it to m_pDispFont. Create the default font for display text. 4. Register with the pulse generator object for lamp flash pattern pulses. 5. Add self to the callbar manager’s global list by calling the CCallbarManager::AddGlobalObject method. ~CCallbarIndicator(); The destructor simply unregisters from the pulse generator and removes this object from the callbar manager’s global list. void DrawControl(CDC* pDC); This method performs the following actions: Lucent Technologies - Proprietary Use pursuant to Company instructions. -341. Determine the colors of the current call and status indicators based on indicator state. 2. If the indicator type is CBAR_INDICTYPE_CALLAPP, draw the current and status lamps with 3D rectangle on their perimeters. 3. If the indicator type is CBAR_INDICTYPE_FEAT, draw only the status lamp with a 3D rectangle on its perimeter. void IndicatorPulse(LONG lStatusIndicState); This method is called by the pulse generator object on every lamp pulse interval. lStatusIndicState is a bitmap which indicates this interval’s on/off flash state for every lamp flash type. This method performs the following steps: 1. AND the bitmap with the value of the StatusIndicState property to determine the on/off flash state of our flash type for this interval. 2. If our flash state has changed, redraw the status lamp by invalidating its area and requesting an update. void Move(CRect& rcNew); This method moves the indicator object by invalidating the lamp’s current position, resetting the lamp’s rectangle to rcNew, and invalidating the lamp’s new position. 4.6.7.4.2 Properties The following properties extend those properties which the CCallbarIndicator class inherits from the CCallbarObject class. They represent those characteristics peculiar to callbar indicator objects. BtnID Property The BtnID property is the TAPI button ID used by this indicator to determine the lamp state notifications upon which it should update itself . It may be set or retrieved using these methods: DWORD GetBtnID(); void SetBtnID(DWORD dwBtnID); CurrentIndicState Property The CurrentIndicState property determines the state of the “current call” (red) indicator lamp. This may be either of the following values: CBAR_INDICSTATE_OFF CBAR_INDICSTATE_STEADY The CurrentIndicState property may be set or retrieved using these methods: DWORD GetCurrentIndicState(); void SetCurrentIndicState(DWORD dwIndicState); IndicatorType Property The IndicatorType property determines the type of indicator which will be displayed. This may be either of the following values: CBAR_INDICTYPE_CALLAPP - a two-lamp line feature indicator CBAR_INDICTYPE_FEAT - a one-lamp feature indicator The IndicatorType property may be set or retrieved using these methods: DWORD GetIndicatorType(); void SetIndicatorType(DWORD dwIndicType); Lucent Technologies - Proprietary Use pursuant to Company instructions. -35StatusIndicFlashState Property The StatusIndicFlashState property determines the current display state of the status indicator lamp within its flash pattern. This may be either of the following values: CBAR_INDICFLASH_OFF CBAR_INDICFLASH_ON The StatusIndicFlashState property is read-only and may be retrieved using the following method: DWORD GetStatusIndicFlashState(); StatusIndicState Property The StatusIndicState property determines the state of the status (green) indicator lamp. This may be one of the following values: CBAR_INDICSTATE_OFF CBAR_INDICSTATE_STEADY CBAR_INDICSTATE_WINK CBAR_INDICSTATE_INVWINK CBAR_INDICSTATE_FLASH CBAR_INDICSTATE_FLUTTER CBAR_INDICSTATE_BRKFLUTTER The StatusIndicState property may be set or retrieved using these methods: DWORD GetStatusIndicState(); void SetStatusIndicState(DWORD dwIndicState); 4.6.7.5 Startup See the constructor for CCallbarIndicator in section 4.6.7.4. 4.6.7.6 Shutdown See the destructor for CCallbarDisplay in section 4.6.7.4. 4.6.7.7 Error Messages This class displays no user error messages. 4.6.7.8 Events for Event Log This class logs failures to allocate memory. 4.6.8 CCallbarSlider 4.6.8.1 Description The CCallbarSlider class manages the appearance and characteristics of a callbar slider. Callbar sliders are sliders that are used 4.6.8.2 Interfacing FUs/Classes CCallbarManager When an instance of the CCallbarSlider class is created, it registers itself with the callbar manager. The callbar manager is responsible for handling all Windows control events sent to the slider. Lucent Technologies - Proprietary Use pursuant to Company instructions. -364.6.8.3 Data Structures and Variables Besides the members it inherits from CCallbarObject, CCallbarSlider contains the following members: m_pSlider - Instance of the CSliderCtrl class owned by this object. Data storage for the Combo property. m_iPosition - Current position of the slider m_iType - Type of slider, ringer or headset volume. 4.6.8.4 Functions/Methods 4.6.8.4.1 Actions CCallbarSlider(CWnd* pWnd, CCallbarObjectContainer* pCont, UINT nID, CRect& rcBounds, CString& sName, UINT iType); The constructor for the CCallbarDroplist class performs the following functions: 1. Set the values of inherited members (m_pOwner, m_pCont, m_nControlID, m_rcBounds, and m_sName), 2. Set m_dwObType to CBAR_OBTYPE_SLIDER, 3. Create the slider window, 4. Add this object to the callbar manager’s global object list, 5. Set the slider range, 6. Get the current headset or ringer volume and 7. Initialize the slider to the current volume. ~CCallbarSlider(); The destructor for the CCallbarDroplist class removes this object from the callbar manager global list, deletes the window which represents the slider by calling m_pSlider -> DestroyWindow, and then deletes the slider object pointed to by m_pSlider. void Move(CRect& rc); This method changes the current location of the slider object within its parent window. After modifying the value of the m_rcBounds member, it calls MoveWindow for its internal combo object. 4.6.8.4.2 Properties Slider Property The Slider property allows access to the slider control this object represents. This property is readonly and may be retrieved using the following method: CSliderCtrl * GetSlider(); Type Property The Type property allows access to the type of slider control this object represents. This may be one of the following values: CBAR_SLRTYPE_VOLUME CBAR_SLRTYPE_RINGER Position Property Lucent Technologies - Proprietary Use pursuant to Company instructions. -37The Position property allows access to the current position of the slider control. This property may be set or retrieved using the following method: UINT GetPosition() void SetPosition(UINT iPosition) 4.6.8.5 Startup See constructor in section 4.6.4.4. 4.6.8.6 Shutdown See destructor in section 4.6.4.4. 4.6.8.7 Error Messages This class displays no user error messages. 4.6.8.8 Events for Event Log This class logs memory allocation errors. 4.7 Telephony Management Classes 4.7.1 CVICE 4.7.1.1 Description CVICE is the telephony abstraction layer of the McFone CVA release. It presents telephony, PASTE, and voice recorder functionality as a set of uniform class methods. 4.7.1.2 Interfacing FUs/Classes CCallbarManager, TAPI Callbacks All of the listed entities call CVICE members to invoke telephony commands. 4.7.1.3 Data Structures and Variables m_pDisplayCache - instance of the CDisplayCache class used to track the current display contents of each line m_pPhoneCaps - pointer to the TAPI PHONECAPS structure for our phone. m_pRecorder - pointer to the voice recorder object. m_pSizeOfPasteStructures - pointer to a structure which indicates how large the various PASTER arrays are. m_pFeatureAccessCodes - pointer to an array of PASTER-allocated FeatureAccessCodes structures. m_pButtonAssignments - pointer to an array of PASTER-allocated ButtonAssignments structures. 4.7.1.4 Functions/Methods void ActivateFAC(CString sFAC); 1. Look up the dial string of the FAC by searching the m_pFeatureAccessCodes array. 2. If found, dial the FAC using the TAPI lineMakeCall function (<57503-42>). void ActivateFeature(CString sFeature, LONG lIndex); Lucent Technologies - Proprietary Use pursuant to Company instructions. -381. Look up the button number of the feature using GetButtonByFeature. 2. Press the button using the TAPI lineDevSpecificFeature function (<57503-43>). void AnswerCall(HCALL hCall); Call TAPI’s lineAnswer function with the supplied HCALL. (<57503-6>) NOTE: If a call is currently active, this API function will place that call on hold before activating the new call (<57503-9>). DWORD ButtonIDFromPasteID(CString sType, DWORD dwPasteID); 1. If dwPasteID is a number which appears on the 3rd or 4th 606A1 administration screen (as indicated by sType), multiply (dwPasteID - 1) by two (to account for TAPI’s phantom lamps) and add this number to TAPI_LINEFEAT_BASE to get the button ID. 2. If dwPasteID is a number which appears on the 5th 606A1 administration screen (as indicated by sType), multiply (dwPasteID - 1) by two (to account for TAPI’s phantom lamps) and add this number to TAPI_COVE_BASE to get the button ID. 3. If dwPasteID is a number which appears on the 6th 606A1 administration screen (as indicated by sType), add (dwPasteID - 35) to TAPI_PROGFEAT_BASE to get the button ID. 35 is the starting PASTE ID of the 6th administration screen. 4. Return the button ID ORed with TAPI_BTN_BASE. CVICE(); 1. Default member variables to NULL or 0 as appropriate. 2. Call PasterReadPASTEData to read the PASTE file data into m_pSizeOfPasteStructures, m_pFeatureAccessCodes, m_pButtonAssignments. 3. If the return code from PasterReadPASTEData indicates partial or no PASTE file data, do the following: A. Ask the user if a PASTE download should commence. B. If the user approves a PASTE download, display an instance of the CPasteProgressDlg Dialog box and call PasterGetPASTEData. C. If the return code from PasterGetPASTEData indicates success, call PasterReadPASTEData once again. If this call fails, display the error message listed in section 4.7.1.7.2. ~CVICE(); Delete allocated memory referenced by m_pSizeOfPasteStructures, m_pFeatureAccessCodes, m_pButtonAssignments. void DialString(CString sDialString); For each character in sDialString, perform the following steps: 1. If the character is a comma, sleep for an amount of time specified by current TAPI settings. 2. For all other characters, call lineDevSpecificFeature to dial the digit. If this function returns LINEERR_RESOURCEUNAVAIL, wait 500 milliseconds and retry up to three times. DWORD GetButtonByFeature(LONG lIndex, CString& sFeatureName); 1. Search the special features table for the feature name. If this feature is in the special features table, return the feature’s button number by calling GetButtonByFunction. Lucent Technologies - Proprietary Use pursuant to Company instructions. -392. If the feature is not in the special features table, search the m_pButtonAssignments array for instances of the sFeatureName feature; find the instance of the feature specified by the lIndex parameter. 3. If the feature exists in PASTE data, call ButtonIDFromPasteID with the PASTE order number and return the TAPI button ID. DWORD GetButtonByFunction(LONG lIndex, DWORD dwFunction); 1. If the dwFunction parameter contains the special value ALL_CALLAPPS, search the m_pPhoneCaps button functions array for all call appearance types (normal and bridged). Return the button number of the appearance corresponding to the offset given by lIndex. 2. In all other cases, search the m_pPhoneCaps button functions array for the instance of dwFunction specified by lIndex. DWORD GetRecorderState(); 1. Call phoneGetData with the DATAID_QUERY identifier. 2. Return the recorder status. BOOL InitTAPI(); 1. Initialize the TAPI line device using lineInitialize. 2. Find the line corresponding to the Definity line device using FindLineDevice. 3. Negotiate TAPI line API and extension versions using lineNegotiateAPIVersion and lineNegotiateExtVersion, respectively. 4. Open the line using lineOpen. 5. Set up required line status messages using lineSetStatusMessages. 6. Use lineGetLineDevStatus to monitor the line device such that the function does not proceed until the device status bit LINEDEVSTATUSFLAGS_CONNECTED is on. 7. Initialize the TAPI phone device using phoneInitialize. 8. Find the line corresponding to the Definity phone device. 9. Negotiate TAPI phone API and extension versions using phoneNegotiateAPIVersion and phoneNegotiateExtVersion, respectively. 10. Open the phone using phoneOpen. 11. Retrieve and store the PHONECAPS structure. 12. Set up required phone status messages using PhoneSetStatusMessages. 13. Create the voice recorder object and assign it to m_pRecorder. void MakeCall(CString sDialString); 1. Translate the dial string using the VICE TranslateDialString method. 2. Use the TAPI lineMakeCall method to place the call. 3. If an error occurs, display an error message indicative of call placement failure. void PlayGreeting(LONG lGreeting); Call the Play method of the VICE internal recorder object. void RecordGreeting(LONG lGreeting); Call the Record method of the VICE internal recorder object. Lucent Technologies - Proprietary Use pursuant to Company instructions. -40void RefreshCalls(); (<57503-1>) 1. Collect currently-active calls using the TAPI lineGetNewCalls function. 2. For each call, pass the call handle and current state to the Callbar Manager for distribution. void ReleaseCall(HCALL hCall); Call TAPI’s lineRelease function with the supplied HCALL. void StopGreeting(); Call the Stop method of the VICE internal recorder object. CString TranslateDialString(CString sDialString); 1. Translate string characters according to Table 2 (<57503-34>). 2. Return the translated string. Characters Send A, B, and C 2 D, E, and F 3 G, H, and I 4 J, K, and L 5 M, N, and O 6 P, Q, R, and S 7 T, U, and V 8 W, X, Y, and Z 9 comma (pause) no translation 0 through 9, *, # no translation all others remove Table 2. Dial String Character Map void UnholdCall(HCALL hCall); Call TAPI’s lineUnhold function with the supplied HCALL. BOOL UninitTAPI(); 1. Delete m_pPhoneCaps. 2. Close the phone. 3. Shut down the phone device. 4. Close the line. 5. Shut down the line device. 6. Delete m_pRecorder. 4.7.1.5 Startup See the CVICE constructor in section 4.7.1.4. Lucent Technologies - Proprietary Use pursuant to Company instructions. -414.7.1.6 Shutdown N/A 4.7.1.7 Error Messages 4.7.1.7.1 Failed to place call This message indicates a failure to place a call using the TAPI lineMakeCall method. It is displayed with an OK button. 4.7.1.7.2 Could not load switch data This message indicates a failure to load PASTE data after a PASTE download; it informs the user that some telephone functionality will not be available, and that PASTE download should be attempted again in the future. It is displayed with an OK button. 4.7.1.8 Events for Event Log CVICE logs all TAPI function call errors and memory allocation errors. 4.7.2 TAPI Line Callback (LineCallback) 4.7.2.1 Description This callback function handles receipt and distribution of all TAPI line messages. Where appropriate, notifications may be sent to the callbar manager or the VICE layer, or they may be handled internally by the callback function. 4.7.2.2 Interfacing FUs/Classes CCallbarManager Most notifications are sent directly to the callbar manager for interface updates; these include messages such as call state changes via LINE_CALLSTATE. 4.7.2.3 Data Structures and Variables N/A 4.7.2.4 Interpreted Messages LINE_CALLSTATE This message is the heartbeat of McFone’s call processing engine. Whenever LineCallback gets a call state change notification, it forwards the call handle and the state change to the call manager object through the OnCallStateChange method, with the notable exception of LINECALLSTATE_IDLE. When it receives this message, LineCallback passes the message to the callbar manager, and then it deallocates the call using lineDeallocateCall, conserving limited TAPI memory resources. TAPI sends this message on calls generated by both switch-generated and user-generated events (<57503-26>). It also sends the message if the telephone event was triggered by actions in another application (TAPI or TSAPI) (<57503-27>). LINE_CLOSE Upon receipt of this message, the following steps are performed: 1. Inform the user that the application can no longer run. 2. Exit the application. Lucent Technologies - Proprietary Use pursuant to Company instructions. -42LINE_DEVSTATE TAPI sends this message whenever the state of the line device changes; it is this message we use to monitor the health of the link to the telephone and to log link state changes. (<57503-2>, <57503-3>) Four of notifications within this message are of interest to us: LINEDEVSTATE_CONNECTED - tells us when the phone has been reconnected to the PC after a disconnection. When LineCallback receives this message, it logs the status change. It also calls the VICE RefreshCalls method to re-sync the user interface with the phone. (<57503-4>, <57503-28>) LINEDEVSTATE_DISCONNECTED - tells us when the phone has been disconnected from the PC. When LineCallback receives this message, it logs the status change. LINEDEVSTATE_INSERVICE - tells us when the phone has been reconnected to the switch after a disconnection. When LineCallback receives this message, it logs the status change. It also calls the VICE RefreshCalls method to re-sync the user interface with the phone. (<57503-4>, <57503-28>) LINEDEVSTATE_DISCONNECTED - tells us when the phone has been disconnected from the switch. When LineCallback receives this message, it logs the status change. This message is also forwarded to the call manager object’s OnConnectionStateChange method so that it may perform relevant user interface updates. LINE_REPLY Whenever LineCallback receives this message, it logs 1) the request ID with which the message is associated and 2) the success or failure code. Each of these messages is connected to a TAPI function call which returned a request ID earlier; the request IDs for these function calls are logged by the caller for references to LINE_REPLY messages. Also, if the reply is associated with a failed lineMakeCall request, display a message box informing the user. 4.7.2.5 Startup N/A 4.7.2.6 Shutdown N/A 4.7.2.7 Error Messages This callback displays no user error messages. 4.7.2.8 Events for Event Log This callback logs the following events: • TAPI function call errors • TAPI LINE_REPLY error codes • Memory allocation errors 4.7.3 TAPI Phone Callback (PhoneCallback) Lucent Technologies - Proprietary Use pursuant to Company instructions. -434.7.3.1 Description This callback function handles receipt and distribution of all TAPI phone messages. Where appropriate, notifications may be sent to the callbar manager or the VICE layer, or they may be handled internally by the callback function. 4.7.3.2 Interfacing FUs/Classes CVICE Voice recorder notifications are routed by the callback to VICE, which sends these messages to its internal CVoiceRecorder object. This object 1) updates its internal voice recorder data and 2) passes notifications on to any current instance of the CRecorderDlg class, if one exists. CCallbarManager Lamp, display and voice recorder notifications are sent directly to the callbar manager for interface updates. 4.7.3.3 Data Structures and Variables N/A 4.7.3.4 Interpreted Messages PHONE_CLOSE Upon receipt of this message, the following steps are performed: 1. Set phone device handles to NULL. 2. Release the CVICE PHONECAPS structure referenced by m_pPhoneCaps. 3. Set m_pPhoneCaps to NULL. 4. Inform the user that the application will no longer have phone-related functionality. PHONE_DEVSPECIFIC We receive voice recorder status messages through his event. These messages are passed directly to VICE for processing and distribution. PHONE_REPLY Whenever PhoneCallback receives this message, it logs 1) the request ID with which the message is associated and 2) the success or failure code. Each of these messages is connected to a TAPI function call which returned a request ID earlier; the request IDs for these function calls are logged by the caller for references to PHONE_REPLY messages. PHONE_STATE Most status messages of importance to us arrive via this message. PhoneCallback acts upon receipt of the following Param1 values: PHONESTATE_DISPLAY PhoneCallback parses display lines into two categories: Call-related and non-call-related. It determines if a first-line display is call-related by verifying that a) the first character of the display is an alphanumeric character and that 2) the second character is an equal (=) sign. Any display message on the first line which does not meet these criteria is considered to be non-callrealted. All second-line display strings are treated as non-call displays. Lucent Technologies - Proprietary Use pursuant to Company instructions. -44Once these determinations have been made, call-related displays are first sent to the localization DLL for Eurofont character conversion (<57503-31>), then sent to the VICE layer to be placed in the display cache, and then the callbar manager is notified of the display change so that it may update all CCallbarCIPs. Non-call displays are always forwarded through Eurofont translation and then to the callbar manager for update of all CCallbarDisplay instances (<57503-29>, <57503-30>, <57503-32>). PHONESTATE_LAMP These notifications are sent to the callbar manager through its OnLampStateChange member; these notifications are then forwarded to all CCallbarIndicator objects. PHONESTATE_RINGVOLUME If an instance of the CPhoneSettingsDlg class exists, PhoneCallback calls CPhoneSettingsDlg::OnRingVolChange, allowing the dialog to update its user interface. PHONESTATE_HEADSETVOLUME If an instance of the CPhoneSettingsDlg class exists, PhoneCallback calls CPhoneSettingsDlg::OnHeadsetVolChange, allowing the dialog to update its user interface. PHONESTATE_REINIT DO WE NEED THIS? TAPI sends this message on calls generated by both switch-generated and user-generated events (<57503-26>). It also sends the message if the telephone event was triggered by actions in another application (TAPI or TSAPI) (<57503-27>). 4.7.3.5 Startup N/A 4.7.3.6 Shutdown N/A 4.7.3.7 Error Messages This callback displays no user error messages. 4.7.3.8 Events for Event Log This callback logs the following events: • TAPI function call errors • TAPI LINE_REPLY error codes • Memory allocation errors 4.8 Other Support Classes 4.8.1 CConfigSettings 4.8.1.1 Description The CConfigSettings class encapsulates storage of the user’s preference settings. The data items stored are: Lucent Technologies - Proprietary Use pursuant to Company instructions. -45• • • • • • Headset on/off status Headset volume Personalized ring Ring volume Window positions PASTE feature name map 4.8.1.2 Interfacing FUs/Classes CMcPhoneApp The application object creates an instance of this class at startup and calls its LoadSettings and LoadPasteMap methods. It then uses the settings properties to put the phone into a previous state. CCallbarManager The callbar manager Calls the MapPasteName method to perform string-to-string replacement on feature button labels. 4.8.1.3 Data Structures and Variables 4.8.1.3.1 Structures PASTENAMEENTRY This structure consists of two strings, sPasteName and sLabelName, used in mapping from PASTE feature names to names which will be displayed in the user interface. 4.8.1.3.2 Variables m_nInitHeadsetState - initial state of the headset. Data storage for the HeadsetState property. m_nInitRingPattern - initial personalized ring pattern. Data storage for the RingPattern property. m_nInitHeadsetVol - initial headset volume. Data storage for the HeadsetVol property. m_nInitRingVol - initial ringer volume. Data storage for the RingVol property. m_uPasteNameMap - an array of PASTENAMEENTRY structures constituting the PASTE name mapping table. m_rcMain - rectangle representing the last position of the main callbar. Data storage for the MainRect property. m_rcAbbrevDial - rectangle representing the last position of the abbreviated dial callbar. Data storage for the AbbrevRect property. m_rcMiscFeat - rectangle representing the last position of the miscellaneous features callbar. Data storage for the MiscRect property. m_rcCCFeat - rectangle representing the last position of the call center features callbar. Data storage for the CCRect property. m_rcAUXReason - rectangle representing the last position of the AUX reason codes callbar. Data storage for the AUXRect property. m_rcLogoutReason- rectangle representing the last position of the logout reason codes callbar. Data storage for the LogoutRect property. m_rcStrokeCount - rectangle representing the last position of the stroke count callbar. Data storage for the StrokeCtRect property. Lucent Technologies - Proprietary Use pursuant to Company instructions. -464.8.1.4 Functions/Methods 4.8.1.4.1 Methods void LoadSettings(); This method loads CVALOCAL.INI file settings in the [PhoneSettings] section into member variables. It performs the following steps: 1. Load the current headset on/off settings from the HeadsetState entry and store the value in m_nInitHeadsetState. If not found, default this value to the on state. 2. Load the current personalized ring pattern settings from the PersonalRing entry and store the value in m_nInitRingPattern. If not found, default this value to ring pattern 1. 3. Load the current headset volume settings from the HeadsetVol entry and store the value in m_nInitHeadsetVol. If not found, default this value to volume level 4. 4. Load the current ringer volume settings from the RingVol entry and store the value in m_nInitRingVol. If not found, default this value to volume level 7 (highest). 5. Load all callbar rectangles. Any entries which do not exist for a callbar are set to 0; callbar rectangles with left and right coordinates that are both 0 are set to reasonable default positions when opened. void LoadPasteNameMap(); (<57503-91>) 1. Delete the current PASTE name map. 2. Open the PASTE name map file from the CVA data directory location. 3. For every line in the file, parse it into two strings delimited by a ‘|’ and store the strings within a PASTENAMEENTRY structure in the m_uPasteNameMap array. CString MapPasteName(CString& sPasteName); (<57503-91>) 1. Search the m_uPasteNameMap array for an entry with an sPasteName field equivalent to the string passed in the sPasteName parameter. 2. If the PASTE name is found, return the sLabelName from the found record; otherwise, return the value of the sPasteName parameter. void SaveSettings(); This method saves current settings into the [PhoneSettings] section of the CVALOCAL.INI file. It performs the following steps: 1. Save the current value of m_nInitHeadsetState to the HeadsetState entry. 2. Save the current value of m_nInitRingPattern to the PersonalRing entry. 3. Save the current value of m_nInitHeadsetVol to the HeadsetVol entry. 4. Save the current value of m_nInitRingVol to the RingVol entry. 5. Save all callbar rectangles. 4.8.1.4.2 Properties AbbrevRect Property The AbbrevRect property represents the current rectangle of the abbreviated dial callbar window. CRect GetAbbrevRect(); void SetAbbrevRect(CRect& rcNew); Lucent Technologies - Proprietary Use pursuant to Company instructions. -47AUXRect Property The AUXRect property represents the current rectangle of the AUX reason codes callbar window. CRect GetAUXRect(); void SetAUXRect(CRect& rcNew); CCRect Property The CCRect property represents the current rectangle of the call center features callbar window. CRect GetCCRect(); void SetCCRect(CRect& rcNew); HeadsetState Property The HeadsetState property is the on/off state of the telephone’s headset switch. It may be set or retrieved using these methods: LONG GetHeadsetState(); void SetHeadsetState(LONG lHeadsetState); HeadsetVol Property The HeadsetVol property represents the volume level of the headset. It may be set or retrieved using these methods: DWORD GetHeadsetVol(); void SetHeadsetVol(DWORD dwHeadsetVol); LogoutRect Property The LogoutRect property represents the current rectangle of the logout reason codes callbar window. CRect GetLogoutRect(); void SetLogoutRect(CRect& rcNew); MainRect Property The MainRect property represents the current rectangle of the main callbar window. CRect GetMainRect(); void SetMainRect(CRect& rcNew); MiscRect Property The MiscRect property represents the current rectangle of the miscellaneous features callbar window. CRect GetMiscRect(); void SetMiscRect(CRect& rcNew); RingPattern Property The RingPattern property is the personal ring pattern on the phone . It may be set or retrieved using these methods: DWORD GetRingPattern(); void SetRingPattern(DWORD dwRingPattern); RingVol Property The RingVol property represents the volume level of the phone ringer. It may be set or retrieved using these methods: Lucent Technologies - Proprietary Use pursuant to Company instructions. -48DWORD GetRingVol(); void SetRingVol(DWORD dwRingVol); StrokeCtRect Property The StrokeCtRect property represents the current rectangle of the stroke count callbar window. CRect GetStrokeCtRect(); void SetStrokeCtRect(CRect& rcNew); 4.8.1.5 Startup N/A 4.8.1.6 Shutdown N/A 4.8.1.7 Error Messages 4.8.1.7.1 Could not write to CVALOCAL.INI In the event that CConfigSettings cannot write to the CVALOCAL.INI file, it will display this error message. 4.8.1.8 Events for Event Log This class logs all file access and memory allocation errors. 4.8.2 CEvtLog 4.8.2.1 Description The CEvtLog class encapsulates all event logging functionality. This class is used by the application to log all detectable error conditions (<57503-198>). This class makes use of two tables, InfoTable and ErrorTable, from which it extracts strings. The tables load all strings from the application’s string table at event log creation. 4.8.2.2 Interfacing FUs/Classes All classes use CEvtLog to log errors and noteworthy events. 4.8.2.3 Data Structures and Variables m_uLogRec - an instance of the LOGREC structure with non-changing fields initialized m_hLoggerDLL - module handle of the logger DLL m_fnExecLogger - pointer to the logger startup call m_fnLogEvent - pointer to the event logging call m_fnLogSysEvent - pointer to logger shutdown call 4.8.2.4 Functions/Methods 4.8.2.4.1 Notifications CEvtLog(); Lucent Technologies - Proprietary Use pursuant to Company instructions. -49The constructor for the CEvtLog class performs the following steps: 1. Set the initial values of m_fnLogEvent, m_fnExecLogger, and m_fnLogSysEvent to NULL. 2. Attempt to load the LTEVTLOG.DLL using LoadLibrary and store its module ID in m_hLoggerDLL; if this step fails, exit. 3. Attempt to load pointers to ExecLogger, LogEvent, and LogSysEvent into their respective member variables; if any of these fails, set each pointer back to NULL and release the DLL. 4. Call ExecLogger with the value of the localBinPath key in the [cva] section of CVALOCAL.INI. If this call fails, set all function pointers to NULL and release the DLL. 5. Load event strings from resource file into InfoTable and ErrorTable. 6. Set up initial values of m_uLogRec. 7. Log the fact that Event Log binding has succeeded. ~CEvtLog(); The destructor for the CEvtLog class performs the following steps: 1. Log the fact that our Event Log connection is being released. 2. Call LogSysEvent requesting a logger shutdown. 3. Release the logger DLL using FreeLibrary. CString GetString(LONG lStringID, LONG lParam1, LONG lParam2, LONG lParam3); 1. Lookup the string associated with lStringID in the resource file. 2. Call SubstituteString using the resource string and return the new string. void LogMcFoneEvent(LONG lDesc, LONG lSourcePos, LONG lEventType, LONG lSeverity, LONG lParam1, LONG lParam2, LONG lParam3); 1. If m_fnLogEvent is NULL, exit. 2. Set m_uLogRec structure values based on provided parameters. 3. Call m_fnLogEvent. CString SubstituteString(CString sString, DWORD lFlags, LONG lParam1, LONG lParam2, LONG lParam3); 1. Format the string using the CString::Format method. Substitute the parameters provided into the string as appropriate. 4.8.2.5 Startup See the CEvtLog constructor in section 4.8.2.4. 4.8.2.6 Shutdown See the CEvtLog destructor in section 4.8.2.4. 4.8.2.7 Error Messages This class displays no user error messages. 4.8.2.8 Events for Event Log This class logs connection to and disconnection from the Event Log. Lucent Technologies - Proprietary Use pursuant to Company instructions. -504.8.3 CPasteProgressDlg 4.8.3.1 Description The CPasteProgressDlg class displays an animation while a PASTE download is in progress and allows the user to cancel the download (<57503-93>). 4.8.3.2 Interfacing FUs/Classes CCallbarManager The callbar manager activates this dialog modally whenever it receives a Tools | Download Phone Data menu event and initiates a PASTE download. CMcPhoneApp The app object displays this dialog on startup if it needs to start a PASTE download. 4.8.3.3 Data Structures and Variables N/A 4.8.3.4 Functions/Methods 4.8.3.4.1 Notifications void OnCancel(); This notification is sent when the “Cancel” button on the dialog is pressed by the user. This method performs the following steps: 1. Display an “Are you sure?” message box. 2. If the user confirms the cancel, call PasterCancel to stop the PASTE download. BOOL OnInitDialog(); This notification is sent as the dialog box starts up. We perform the following initialization tasks during this event: 1. Load the download animation into the animation control. 2. Play the animation. 4.8.3.5 Startup See the OnInitDialog member function in section 4.8.3.4. 4.8.3.6 Shutdown N/A 4.8.3.7 Error Messages This class displays no user error messages. 4.8.3.8 Events for Event Log This class logs all memory allocation errors. 4.8.4 CPhoneSettingsDlg Lucent Technologies - Proprietary Use pursuant to Company instructions. -514.8.4.1 Description The CPhoneSettingsDlg class allows the user to manipulate telephone settings. Specifically, the following settings are supported: • • • • • Headset on/off Headset volume Personalized ring Personalized ring test Ring volume 4.8.4.2 Interfacing FUs/Classes CCallbarManager The callbar manager activates this class whenever it receives a Window | Phone Settings menu event. It tracks a pointer to this dialog and doesn’t allow more than one instance of the dialog to be displayed. CPhoneSettingsDlg Whenever this dialog changes a hardware setting, it sets the appropriate property of CConfigSettings to the new value and calls CConfigSettings::SaveSettings(). 4.8.4.3 Data Structures and Variables m_nHeadsetOff - group id of the currently-selected headset state radio button m_nRingPattern - current pattern in the personalized ring combo box m_sldHeadsetVol - control variable representing the headset volume slider m_sldRingVol - control variable representing the ringer volume slider 4.8.4.4 Functions/Methods 4.8.4.4.1 Notifications void OnButtonTest() This notification is sent when the “Test” button on the dialog is pressed by the user. This method performs the following steps: 1. Get the current ring settings using phoneGetRing. 2. If the phone is currently ringing, exit. 3. Ring the phone with the inside call identifier (2) using the phoneSetRing TAPI function (<57503-61>). 4. Sleep for one second. 5. Re-query the current ring info using phoneGetRing. 6. Stop the phone from ringing using phoneSetRing (<57503-61>). BOOL OnInitDialog(); This notification is sent as the dialog box starts up. We perform the following initialization tasks during this event: 1. Set the correct min/max ranges for the volume slider controls. 2. Retrieve the current hardware volume settings for the handset and the ringer and set the slider controls to reflect these values. Lucent Technologies - Proprietary Use pursuant to Company instructions. -523. Retrieve the current personalized ring using phoneGetData and the DATAID_PERSONAL_RING value. Set the personalized ring combo box to reflect this value. void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) This member receives notifications from the volume slider controls. The following steps are performed per control: IDC_SLIDER_HEADSETVOL Use the FindObjectByName() function to get a pointer to the slider on the main callbar. Update the main callbar slider to reflect the new phone setting (<57503-61>, <57503-63>). When the main callbar slider is updated the SetHeadsetVolume() function will be called to update the phone. Commit the new setting to CConfigSettings and call ConfigSettings::SaveSettings. IDC_SLIDER_RINGSETVOL Get the current slider position. Use phoneSetRing to reflect the new slider setting on the phone (<57503-61>, <57503-63>). Commit the new setting to CConfigSettings and call CConfigSettings::SaveSettings. void OnRadioHeadsetoff(); Turn off the headset using the phoneSetHookSwitch function, supplying the PHONEHOOKSWITCHMODE_ONHOOK constant (<57503-64>). Commit the new setting to CConfigSettings and call CConfigSettings::SaveSettings. void OnRadioHeadseton(); Turn off the headset using the phoneSetHookSwitch function, supplying the PHONEHOOKSWITCHMODE_MICSPEAKER constant (<57503-64>). Commit the new setting to CConfigSettings and call CConfigSettings::SaveSettings. void OnSelchangeComboRingpat(); This notification is sent when the user selects a new personalized ring setting. We perform the following tasks during this event: 1. Get the current user-selected ring pattern from the combo. 2. Use phoneSetData with the DATAID_PERSONAL_RING value to set the phone’s current personalized ring (<57503-61>, <57503-62>). 3. Commit the new setting to CConfigSettings and call CConfigSettings::SaveSettings. void PostNcDestroy(); This notification is sent after the dialog window has been destroyed; it allows us to do post-dialog cleanup. The following actions are taken by this event: 1. Save all hardware settings to the CVALOCAL.INI file for use at next startup (<57503-65>). 2. Call the callbar manager’s EndPhoneSettings member to clear the phone settings dialog pointer. 3. Delete the CPhoneSettingsDlg object. 4.8.4.5 Startup See the OnInitDialog member function in section 4.8.3.4. 4.8.4.6 Shutdown See the PostNcDestroy member function in section 4.8.3.4. Lucent Technologies - Proprietary Use pursuant to Company instructions. -534.8.4.7 Error Messages This class displays no user error messages. 4.8.4.8 Events for Event Log This class logs all TAPI function call and memory allocation errors. 4.8.5 CRecorderDlg 4.8.5.1 Description class CRecorderDlg : public CDialog The CRecorderDlg class allows the user to manipulate the personalized announcements which can be recorded and played on CALMASTER VI phone device. Specifically, the following actions are supported through this dialog: • Select any of the six available announcements for recording and playing them back for testing purposes. • Record and re-record a selected announcement. • Play a selected announcement for testing and verification purposes. • Delete the contents of a selected announcement. • Change the default names of the announcements to user-supplied such. • Select one of the six announcements to be played automatically on answering of an incoming call. • Store the data associated with the new recordings, after the contents of the sound-chip has been changed. • Control the correctness of the user’s actions while modifying the contents of the sound-chip and error-reporting on improper interaction. • Notify the CCallbarManager object about the changes of the contents of data associated with the announcements (erasing, renaming, etc.), so that the manager can update the interface objects place on the callbar to represent the current recordings on the CALLMASTER VI. This dialog is modeless and gets control over the CRecorderDlg object when it is opened to perform administration of the agent’s announcements. The dialog renders the control of the CVoiceRecorder object to the CCallbarManager object after it has been closed by the user. The CVoiceRecorder object notifies both - the CCallbarManger and the CRecorderDlg objects about changes of the state of the announcements and its internal properties as well. Any of the changes of the contents of the announcements done through the interface, which this dialog provides affect directly the properties of the CVoiceRecorder object (as a part of CVICE object), so that the new contents can be used by the callbar for working purposes simultaneously, even if the dialog is still open. The changes done to the announcements (renaming, erasing, re-recording, etc.) through this dialog are reflected simultaneously in the callbar interface as well. Lucent Technologies - Proprietary Use pursuant to Company instructions. -544.8.5.2 Interfacing FUs/Classes CCallbarManager The callbar manager activates this class whenever it receives a Window | Announcements menu event. It tracks a pointer to this dialog and doesn’t allow more than one instance of the dialog to be displayed. CVoiceRecorder and CVICE The dialog accesses directly the properties and the methods provided with CVICE and the CVoiceRecorder objects in order to implement the required functionality while recording and playing back announcements. The CCallbarManager objects receives from CRecorderDlg and the CVoiceRecorder objects the following notifications: // states reported to the CCallbarManger::OnAnnouncementState notification handler #define ANNC_STATES 0 #define ANNC_PSTART 1 // playing has started #define ANNC_PSTOP 2 // playing has stopped #define ANNC_RSTART 3 // recording has started #define ANNC_RSTOP 4 // recording has stopped #define ANNC_ERASED 5 // record has been erased #define ANNC_RENAMED 6 // record has been renamed #define ANNC_EMPTY 7 // record is empty #define ANNC_LOCKED 8 // record is locked #define ANNC_UNLOCKED 9 // record is unlocked #define ANNC_SELECTED 10 // record has been selected #define ANNC_AUTOANSWER 11 // - '' - for auto-answer #define ANNC_ERROR 12 // error condition // states reported through the CCallbarManger:: OnRecorderState notification handler #define VREC_STATES 0 #define VREC_PLAYING 1 // voice-chip is playing #define VREC_RECORDING 2 // voice-chip is recording #define VREC_STOP 3 // voice-chip is idle #define VREC_INUSE 4 // record in use has changed #define VREC_SELECTED 5 // record has been selected #define VREC_AUTOANSWER 6 // new record for auto-answer #define VREC_REFRESH 7 // the contents of the VT has been changed #define VREC_RELOAD 8 // the table has been re-loaded from the file #define VREC_REINIT 10 // the table has been re-initialized Lucent Technologies - Proprietary Use pursuant to Company instructions. -55#define VREC_SAVED 11 // the table has been saved #define VREC_ADMINSTART 12 // the recorder dlg is open #define VREC_ADMINSTOP 13 // the recorder dlg is open #define VREC_ERROR 14 // error condition 4.8.5.3 Data Structures and Variables Dialog Data members enum { IDD = IDD_RECORDER_DIALOG }; The resource identifier of the dialog template. BOOL m_bAnswer; This holds the currently selected usage mode of the selected announcements. TRUE represents the fact that the announcement has been selected to be played automatically on answering a call, otherwise the state of this property is FALSE. CString m_strName; This property contains the name of the currently selected announcements from the announcements list. int m_nIndex; This property contains the index of the selected announcements. Knowing this index, additional information about the announcements can be retrieved from the CVoiceRecorder object. Protected data members HICON m_hIcon; The bitmap of the dialog as loaded from the resources. CBitmap m_bmpErase; CBitmap m_bmpEraseAct; The bitmaps of the ‘Erase’ button representing the active and the inactive state of the button. CBitmap m_bmpPlay; CBitmap m_bmpPlayAct; The bitmaps of the ‘Play’ button representing the active and the inactive state of the button. CBitmap m_bmpStop; CBitmap m_bmpStopAct; The bitmaps of the ‘Stop’ button representing the active and the inactive state of the button. CBitmap m_bmpRecord; CBitmap m_bmpRecordAct; The bitmaps of the ‘Record’ button representing the active and the inactive state of the button. Public data members CString m_strSelName; Lucent Technologies - Proprietary Use pursuant to Company instructions. -56Name of the currently selected announcement; CString m_strNewName; New name of the currently selected announcement in case of editing. int m_nPos; int m_nCurrPos; int m_nStart; int m_nEnd; Data members reresenting the parameters of the currently selected announcement used to control the operation of the progress indicator while playback or recording is in progress. int m_nState; State of the announcement currently selected by the user. UINT m_uTimerID; ID of the timer created for the current recording or playing operation. BOOL m_bEdit; Flag showing if the contents of the voice-table have been changed after the data has been written to disk. CSemaphore *m_pLockSig; Points to a CSemaphore object created to ensure priority and protection of the UI updates while a playback or recording is in progress and the timer is on. 4.8.5.4 Functions/Methods 4.8.5.4.1 Notifications afx_msg BOOL OnInitDialog(); This notification is sent as the dialog box starts up. We perform the following initialization tasks during this event: 1. Loads the bitmaps for the buttons and the icon of the dialog window. 2. Retrieve the list of the current recordings on CALLMASTER VI and sets the list box of the IDC_COMBO_LIST control to reflect the names of the announcements. 3. Retrieves in this list the announcement which is currently selected to be played automatically on answering a call and selects it from the combo box. 4. Retrieves the parameters associated with the selected announcement and represents its length in the IDC_PROGRESS_INDICATOR control. 5. Marks the current state of the voice table represented in the CVoiceRecorder object as ‘Locked’ so any attempt to play an announcement from the callbar will fail, while the administration of the announcements is not confirmed as done by closing the dialog window.. afx_msg void OnBtnErase(); <57503-82,71> This notification is sent as the dialog box each time the user presses the ‘Erase’ button: The following actions will be performed in this case 1. The announcement currently selected will be marked as ‘Erased’. 2. This new state for the selected announcement will be updated in the CVoiceRecorder object. Lucent Technologies - Proprietary Use pursuant to Company instructions. -573. The filled area of the IDC_PROGRESS_INDICATOR control will be reset to zero length. 4. Although the CALLMASTER VI does not provide a special command for erasing the contents of the sound chip, this will be achieved by first executing the ‘Record’ function followed immediately by the ‘Stop’ command. afx_msg void OnBtnPlay(); <57503-82,69> This notification is sent as the dialog box each time the user presses the ‘Play’ button: The following actions will be performed in this case 1. The announcement currently selected will be marked as being currently in use. Its internal parameters (start segment, end segment and length) will be retrieved from the CVoiceRecorder object. 2. The playback of the announcement will be started by directly invoking the ManualPlayAnnouncement method of the CVoiceRecorder object. 3. The timer will be started for this dialog window. 4. As the playback is confirmed to have been normally started, on each timer tick the filled area of the IDC_PROGRESS_INDICATOR control will be updated to represent the current position of the audio-marker. afx_msg void OnBtnRecord(); <57503-82,67> This notification is sent as the dialog box each time the user presses the ‘Record’ button: The following actions will be performed in this case 1. The announcement currently selected will be marked as being currently in use. Its internal parameters (start segment, end segment and length) will be retrieved from the CVoiceRecorder object. 2. The playback of the announcement will be started by directly invoking the RecordAnnouncement method of the CVoiceRecorder object with the starting segment and the length of the announcement supplied as parameters. 3. The timer will be started for this dialog window. 4. As the recording is confirmed to have been normally started, on each timer tick the filled area of the IDC_PROGRESS_INDICATOR control will be updated to represent the current position of the audio-marker. afx_msg void OnBtnStop(); <57503-82,70> This notification is sent to the dialog box each time the user presses the ‘Stop’ button: The following actions will be performed in this case 1. A playback or a recording of an announcement, if either one is currently in progress will be stopped by invoking directly the StopAnnouncement method of CVoiceRecorder object. 2. The timer installed for this window will be stopped. This will stop also the updating of the filled area of the IDC_PROGRESS_INDICATOR control. 3. In case of a recording, after receiving the confirmation that the recording has been stopped the new parameters of the recording will be updated inside the CVoiceREcorder object. afx_msg void OnCheckAnswer(); <57503-84> This notification is sent to the dialog box each time the user changes the state of the ‘Play on Answer’ check-box. The following actions will be performed in this case 1. The m_bAnswer dialog data member will be updated to represent the current user selection. If the new state is FALSE the corresponding flag of the data associated with the selected Lucent Technologies - Proprietary Use pursuant to Company instructions. -58announcement will be re-set to this state to represent the fact that the recording is not selected to be played automatically on answering a call. 2. If the value of the m_bAnswer property is TRUE, than first the value of the corresponding flag of each of the announcements will be set to FALSE and only after that this flag will be raised for the currently selected announcement, marking it as selected to be played automatically on incoming call. afx_msg void OnTimer(UINT nIDEvent); This notification is sent to the dialog box on each timer tick sent to this window, after the timer has been started on recording or playing back of an announcement. The following actions will be performed in this case 1. The new elapsed time since the starting of a playback or recording cycle will be calculated. 2. Depending on this value, the length of the filled area of the IDC_PROGRESS_INDICATOR control will be recalculated and set to represent the new position of the audio-marker. afx_msg void OnEditchangeComboList(); <57503-72> This notification is sent to the dialog box each time the user makes a change inside the text-box, representing the name of the selected announcement. The new string value for the name of the selected announcement will be retrieved from the edit control of the combo-box. 1. afx_msg void OnKillfocusComboList(); afx_msg void OnCloseupComboList(); afx_msg void OnDropdownComboList(); On these control notifications the CVoiceRecorder object’s method RenameAnnouncement will be called, so that the name of the currently selected announcement will be changed, as read from the edit control of the combo-box. The new name, if changed will be reflected on the callbar’s combo-box too, if.the reanmed announcement is the one currently selected. 1. afx_msg void OnMove(int x, int y); afx_msg void OnSize(UINT nType, int cx, int cy); afx_msg void OnShowWindow(BOOL bShow, UINT nStatus); On these notifications the psoition and the state of the dialog window will be retrieved and properly represented into the CCfgSet object, so that the proper restoration of the window will be posssible after having been closed. afx_msg void OnSelchangeComboList(); <57503-66> afx_msg void OnSelendcancelComboList(); afx_msg void OnSelendokComboList(); These notifications are sent to the dialog box each time the user makes a selection inside the combobox representing the list of the announcements. The following actions will be performed in this case 1. The new string value for the name of the selected announcement will be retrieved. 2. The index of the selected announcement will be retrieved. 3. The parameters of the selected announcement will be retrieved from the CVoiceRecorder object, given the index. afx_msg void OnDblclkComboList(); Lucent Technologies - Proprietary Use pursuant to Company instructions. -59This notification is sent to the dialog box each time the user double-clicks on a string inside the listbox of the combo-box control. The following actions will be performed in this case 1. The double-clicked announcement will be selected for usage. 2. The parameters of the selected announcement will be retrieved from the CVoiceRecorder object, given the index. 3. The playback of this announcement will be started. afx_msg void OnClose(); This notification is sent to the dialog box each time the user closes the CAnnouncementsRecorderDlg window. The following actions will be performed in this case 1. The callbar manager will be informed that the user has finished the administration of the personalized greetings. 2. The CVoiceRecorder object will be place in an ‘Unlocked’ state, so that that the callbar can use the recorded announcements in manual or automatic mode. 3. The data associated with the announcements will be saved in a COM file. <57503-86,87,81> 4.8.5.5 Virtual Over-ridden Functions void DoDataExchange(CDataExchange* pDX); Supports the dialog data members exchange with the controls placed on the dialog window. BOOL DestroyWindow(); This function is called from the framework to destroy the window of this dialog. The following actions will be performed in this case: 1. The allocated resources (bitmaps, icons, etc.) will be freed. Pending operations will be terminated.void PostNcDestroy(); This function is called after the dialog window has been destroyed; it allows us to do post-dialog cleanup. The following actions are taken on this event: 1. The dialog renders the control of the CVoiceRecorder object to the callbar manager object by setting the m_pRecorder pointer of the CVoiceRecorder object to NULL. 2. From this moment on, all notifications coming from the CVICE object and related to the announcements will be routed directly to the callbar manager, instead of routing them first to the CAnnouncementsRecorderDlg object. void OnOK(); void OnCancel(); The OnClose meber function will be called here to ensure the proper closure of the dialog (proper resource clean-up and operation termination). 4.8.5.6 Members Functions CRecorderDlg(CWnd* pParent = NULL); // standard constructor This is a standard constructor of the CRecorderDlg. void StartTimer(); <57503-68> Lucent Technologies - Proprietary Use pursuant to Company instructions. -601. This function is called after the user presses the ‘Play’ or the ‘Record’ button and the confirmation from the CALLMASTER VI has been received. The timer object is activated for the dialog window on this call. void StopTimer(); <57503-68> This function is called after the user presses the ‘Stop’ button in case a either a playback or a recording cycle is currently in process. The following actions are taken at this event: The timer object is deactivated and destroyed, so that the dialog window no longer receives the OnTimer events. int OnRecorderState(int nEvent, int nModule); This function will be called from the CVoiceRecorder object whenever the state of the CALLMASTER VI recorder has changed its state. The following actions will be performed in this case: The recorder state will be reflected on the UI and appropriately handled by the CRecorderDlg object. int OnCallbarState(int nEvent, void *pData); This function will be called from the CBManager object whenever the state of the CALLMASTER VI recorder has been changed due to a call from within the callbar.. The following actions will be performed in this case: This call will not have a visible effect on the state of the dialog’s UI, but any operation started from the callbar will have to be terminated from the callbar and only afterwards any recording, playback or erasing a could be invoked from the dialog. The dialog’s UI will be disabled while an operation started from the callbar is in progress. int GetAnnouncementDuration(int nIndex); <57503-68> Gets the duration of an announcement as recorded on the voice-chip of CALLMASTER VI and refreshes the state of the progress indicator. int RefreshProgressBar(int nIndex, int nNewPos); <57503-68> Refreshes the state of the progress indicator control to represent the new position of the voice-chip martker. int RefreshButtons(int nEvent); Called from OnRecorderState to represent the state of the dialog buttons, depending on the event reported from the CVoicerRecorder object. int ResetProgressBar(int nIndex); <57503-68> Resets the progress indicator to zero-length. void BtnStopEnable(void); void BtnStopDisable(void); void BtnRecordEnable(void); void BtnStopEnable(void); void BtnStopOnlyDisable(void); These functions are called from RefreshButtons private member function to reload new bitmaps and update the states of buttons, depending on the current state of the CVoiceRecorder object and a particular announcement. BOOL CheckHookswitchState(void); Lucent Technologies - Proprietary Use pursuant to Company instructions. -61Retrieves the current hook-switch state of the phone, as no operations through the dialog are allowed if the headset state is ‘On’. CString ShowRecorderError(int nErrCode, CString sError); Shows a user-visible message box which notifies about certain errors or unavailable operations. void Terminate(BOOL bSource); Called upon termination conditions for resource and pending operations clean-up before closing the dialog. Could be called from either outside (Callbar manager module) or from within the dialog object itself, depending on the value of bSource, as the dialog is a modeless one. 4.8.5.7 Dialog Controls The CRecorderDlg object contains the following controls: Resource ID: Mapped to class: ---------------------------------------------------------- ----------------------------------- IDC_BTN_PLAY 1001 CButton IDC_BTN_ERASE 1003 CButton IDC_BTN_RECORD 1004 CButton IDC_BTN_STOP 1005 CButton IDC_PROGRESS_INDICATOR 1007 CProgressBar IDC_COMBO_LIST 1014 CCombo IDC_CHECK_ANSWER 1015 CButton (type CheckBox) 4.8.5.8 Startup See the OnInitDialog member function in section 4.8.1.4 4.8.5.9 Shutdown See the DestroyWindow, PostNcDestroy and OnClose member function in section 4.8.1.4 and 5.7.2.5. 4.8.5.10 Error Messages This class generates error messages which are specified in RFS document (CID 57503). The following situations will be reported as specified in the requirements: Cannot perform recording or playback - <57503-74>) Error message text: Unable to perform recording (or playback). <The rest of the text explains the reason> Recording capacity exceeded. - <57503-75>. Warning message text: The end of the available recording space on CALLMASTER VI has been reached. Prevent recording when on an active call - <57503-76>. Warning message text: You cannot record or playback an announcement while on a call. 4.8.5.11 Events for Event Log This class logs all UI related failures as stated above and the announcements-related TAPI and VICE function calls and memory allocation errors as well. Lucent Technologies - Proprietary Use pursuant to Company instructions. -62- 4.8.6 CVoiceRecorder 4.8.6.1 Description class CVoiceRecorder : public CObject The CVoiceRecorder class supports the basic functionality required to manipulate the personalized announcements, while recording or playing them on the CALMASTER VI phone device. This object is created during initialization of the CVICE object, which is responsible for this. It is an object, visible to other components of the framework through the CVICE object. It encapsulates properties and methods which other objects of the McFone callbar can access for the purpose of recording and playing selected announcements in manual or automatic mode. These methods and properties are specified further on this section. The following basic functionality will be provided by this object: • Maintain the data associated with the personalized announcements (retrieve, update and store the table representing the recordings on the CALLMASTER VI in a file).. • Use directly the functionality provided by VICE to access the announcements-related features of the CALLMASTER VI device for the purpose of recording and playback of the personalized agent’s announcements. • Communicate with the CCallbarManager and the CRecorderDlg objects inside the context of the entire McFone framework in order to ensure proper routing of the announcements-related TAPI messages and use the appropriate CVICE function calls while manipulation of the announcements recording and playback is being performed. • Notify the CCallbarManager object about the changes of the contents of the announcements table, so that this object can update the state of other interface objects placed on the callbar to represent the state of the current recordings on the CALLMASTER VI. The changes done to the announcements (renaming, erasing, etc.) in this dialog are reflected simultaneously in the Call-bar interface as well 4.8.6.2 Interfacing FUs/Classes CCallbarManager The CCallbarManager object receives messages sent from within this class whenever the states of the CALLMASTER VI voice recorder changes. These messages can be processed in an appropriate way - to update the UI of the callbar, or to retrieve additional information about the current recordings as they reside in the voice-chip of the phone device. The CCallbarManager object can also initiate playback of a selected announcement in manual or automatic mode using the member functions provided with this class. The user can initiate these actions through the GUI of the call-bar, or the CCallbarManger object can start playing an announcement automatically on incoming call as well. CRecorderDlg When the CRecorderDlg object is active it uses the services provided with the CVoiceRecorder object. The notifications from the CVoiceRecorder object are re-routed first to this dialog, and the CRecorderDlg objects is responsible for their proper processing. Lucent Technologies - Proprietary Use pursuant to Company instructions. -63Through the UI provided with the CRecorderDlg object recording or playback of an announcement can be initiated. The CCallbarManger can also initiate these actions as requests from the callbar. The CRecorderDlg object sends a subset of the notification messages listed in 4.7.5.2 to the CCallbarManager, as a result of user actions performed through the UI. The CRecorderDlg objects sends to the CCallbarManager object a subset of the notification messages listed in 4.7.5.2, regarding the state of the announcements administration task and the actions performed as initiated by the user Through the UI of this dialog. CVICE and TAPI Callback The CVoiceRecorder object is part of the CVICE object and is created each time the latter is created. It is destroyed when the CVICE object is de-initialized and destroyed. The CVoiceRecorder uses specific set of function calls to TAPI, implemented in CVICE, to start and stop recording or playback of announcements. The following functions are provided with CVICE for this purpose. CVoiceRecorder * GetPhoneRecorder(void); Creates and initializes a CVoiceREcorder object as part of CVICE. int PlayGreeting(VOICECHIPDATA *pData); Starts playback of a recorded greetings, starting at a given segment. int RecordGreeting(VOICECHIPDATA *pData); Starts recording of an announcement at a given segment and with a specified length. int StopGreeting(void); Stops a recording opr a playback cycle. int GetRecorderCaps(VOICECHIPCAPS * pCaps); Retrieves from CALLMASTER VI the parameters describing the recording capacity of the sound chip. int GetDeviceID(void); Retrieves from CALLMASTER VI the device ID of the phone device. int GetPhoneExtension(void); Retrieves the main extension used for the phone. The TAPI Callback module routes to the CVoiceRecorder object specific messages to inform the latter about the current state of the CALLMASTER VI recording device. These messages come as a response to the function calls initiating recording or playback of the announcements. After the appropriate processing of these messages by the CVoiceRecorder object, they are re-routed either to the CRecorderDlg object or to the CCallbarManager object, depending on which one is currently in control of the former. 4.8.6.3 Data Structures and Variables 1. Miscellaneous structures and classes Lucent Technologies - Proprietary Use pursuant to Company instructions. -64VOICECHIPCAPS structure This structure contains the parameters describing the number of the individually addressable segments on the voice-chip, the duration of each segments in msec and the state of the CALLMASTER VI recorder/player.device. typedef struct { short nSegments; // number of segments on the voice-chip short nDuration; // duration of a single segment in [msec] short nState; } VOICECHIPCAPS, FAR * LPVOICECHIPCAPS; VOICECHIPDATA structure This structure contains the starting and the ending segments and also the status of an announcement recorded on the voice-chip. It also contains the device ID of the device on which the recording has been performed. The enumeration of the segments is zero-based. typedef struct { short nStart; // starting segment short nLength; // max length in segments int nState; // state of the recording int nStartPos; // starting position in [msec] int nEndPos; // max len in [msec] int nDuration; // current duration in [msec]. BOOL bAutoPlay; // to be played on auto-answer } VOICECHIPDATA, FAR * LPVOICECHIPDATA; DEVICEID structure A sequence of three bytes represents the device ID of the CALLMASTER VI phone, stored in the nonvolatile memory of the device. typedef struct { BYTE byDevID[3]; } DEVICEID, FAR * LPDEVICEID; Class CVoiceRecord : public Cobject This class/structure contains the data related to a single announcement stored on the voice-chip of CALLMASTER VI. Constructors CVoiceRecord(); CVoiceRecord(int nIndex); CVoiceRecord(int nIndex, CString strName, VOICECHIPDATA vcData); Lucent Technologies - Proprietary Use pursuant to Company instructions. -65Destructor ~CVoiceRecord(); Public data members int m_nIndex; Represents the index of the announcement inside the table, describing the entity of the announcements recorded on the voice chip. CString m_strName; Represents the name of the announcement, user-give or the default one. CString m_strOwner; Represent the login ID of the user who has recorded the announcement (not used in CVA 1.0). VOICECHIPDATA m_vcData; This structure holds the parameters associated with the announcement, describing its physical layout in the voice-chip memory Public member function virtual void Serialize(CArchive& ar); This function is called from the CVoiceRrcorder object for each of the CVoiceRecord objects included in the table representing the recorded announcements. 2.Class Data Members Public members: CRecorderDlg * m_pRecorderDlg; Points to the CRecorderDlg object when it is activated for performing administration of the announcements. CCallbarManager * m_pCBManager; Points to the CCallbarManager object, so that notifications can be sent to it. CVICE * m_pVice; Points to the CVICE object which aggregates the current CVoiceRecorder object VOICECHIPCAPS m_vcCaps; Holds the recording capabilities of the voice chip as retrieved from the CALLMASTER VI upon initialization of CVICE int m_nSize; Number of recordings as predefined in the INI file or hard-code by the GREETINGS_MAX constant int m_nState; State of the table representing the announcements: VT_ERROR, when a table cannot be created, loaded or stored VT_ REFRESH, when the contents have changed Lucent Technologies - Proprietary Use pursuant to Company instructions. -66VT_RELOAD, when the table has been reloaded from the file VT_ CREATE, when a new default one has been created VT_SAVE, when the contents have been stored on the disk CObArray m_obaRecords; An array of CVoiceRecords objects. The size of the array depends on the value of the m_lSize member. int m_nRecInUse; Contains the index of the announcement that is currently in use (selected, recorded or played) int m_nAutoPlay; Index of the announcement which is administered as to be played back automatically on answering of a call. int m_nRecState; Current state of the voice-chip, one of the following: VR_ NOTSUPPORTED, when the voice-chip is not found in CALLMASTER VR_ STOPPED, when the reorder/player is idle VR_ PLAYING, when the playback is in progress VR_ RECORDING, when recording is in progrress VR_ ENDOFSPACE, when recording or playback has been stopped at the end of the available on the voice-chip space. int m_nRecPos; Current position of the recorder, showing in which segment is the audio-marker after a recording or a playback cycle have been stopped. CString m_strStorage; Full path/name of the file in which the CVoiceRecorder object is serialized int m_nDeviceID; The Device ID on which the recordings have been performed, an integer in the range of 0x00FFFFFF. CString 0- m_strUserID; The current user Login ID (left for extensibility) int m_nLastCaller; The ID of the last module which has placed a request for an announcements-related operation. The modules IDs are enumerated. BOOL m_bSaved; Flag showing whether or not the voice-table has been saved to disk after the most recent change of its contents. BOOL m_bNoPlay; Flag showing whether or not the play of an announcement should be performed on the next invoked play operation. Set on some external events to skip any subsequent request for playback. Lucent Technologies - Proprietary Use pursuant to Company instructions. -674.8.6.4 Functions/Methods Constructors: CVoiceRecorder(); CVoiceRecorder(CString strStorage, CVICE *pVice); CVoiceRecorder(CString VOICECHIPCAPS vcCaps); strStorage, CVICE *pVice, int nMode, int nSize, These initialize the CVoiceRecorder object when called from the CVICE object. During creation of the object the capabilities of parameters describing the voice-chip capabilities and the size of the voice table are passed as defined during the initialization of the CVICE object. The table describing the current recordings is de-serialized from the corresponding file as well. Destructor: ~CVoiceRecorder(); When the object is destroyed the current contents of the voice table is serialized back to the dedicated storage and the clean-up of the allocated memory is performed. Virtual Over-ridden Member Functions: virtual void Serialize(CArchive&); This virtual function is over-ridden to perform serialization and de-serialization of the CVoiceRecorder object. Implementation Member Functions: void SetOwnerDlg(CRecorderDlg * pRecorderDlg); The CRecorderDlg uses this function to render its pointer and announce that it is in use of the CVoiceRecorder object. Setting this pointer to NULL represents the fact that the CRecorderDlg renders the control of the object to the CCallbarManager object. void SetOwnerManager(CCallbarManager * pCBManager); After the CCallbarManager object has been created and initialized it calls this member function to render its pointer to the CVoiceRecorder object. Through this pointer the latter can re-rout all the announcements-related notifications to the manager. int ReInitialize(int nEvent); Calls to this function will result to re-initialization of the voice-tables contents either by restoring from the disk or by reseting its contents to the defaults. Possible values for the nEvent input parameter are: VT_CREATE - to re-initialize the contents to the defaults. VT_REINIT - to re-load the table from the disk. int GetRecord(int nIndex, CString& strName, VOICECHIPDATA& vcData); CVoiceRecord * GetRecord(int nIndex); Both functions return the data associated with a given announcement. The index of the announcement should be supplied. This index is one-based. int SetRecord(int nIndex, CString strName, VOICECHIPDATA vcData); Lucent Technologies - Proprietary Use pursuant to Company instructions. -68int SetRecord(int nIndex, CVoiceRecord *pRecords); Both functions modify the parameters associated with a particular record inside the table representing the data about the current recordings on the voice-chip. int ResetRecord(int nIndex); Resets a given record to none-recorded (erased) state. int RenameAnnouncement(int nIndex, CString strNewName); Renames an announcement. int GetName(int nIndex, CString& strName); Returns the name of a given announcement. int SetNewDuration(int nIndex, int nNewDuration); Sets the actual duration of the announcement after recording. int GetVoicechipCaps(VOICECHIPCAPS& vcData); Gets from CVICE object the capabilities of the voice-chip embedded in the CALLMASTER VI device. Int GetRecorderState(void); Gets the current state of the recorder (stopped, playing, recording). int GetAnnouncementState(int nIndex); Gets the current state of an announcement (erased, locked, recorded. etc.) int SetAnnouncementState(int nIndex, int nState, int nModule); Sets a new state for an announcement, depending on certain events. int SaveVoiceTable(void); Saves the data associated with the current recordings by serializing the CVoiceRecorder object to a file.. Always called in the object’s destructor. int LoadVoiceTable(void); Loads the data associated with the current recordings by de-serializing the CVoiceRecorder object from a file. Always called in the object’s constructor. int RecalcVoiceTable(void); Calculates the lay-out of the announcements in the voice-chip memory, based on the value of the m_nSize data member. int GetSize(void); Returns the size of the table (the maximum number of the announcements). .BOOL IsLocked(int nIndex); Checks whether the announcements cam be played from the callbar - TRUE if the announcement is used currently from the CRecorderDlg object, either for playback or recording. BOOL IsRecorded(int nIndex); Checks whether a given announcement is recorded and has non-zero length.. BOOL IsDeviceValid(); Checks whether a given announcement has been recorded on the phone device currently attached to the PC. BOOL GetRejectPlayback(); Lucent Technologies - Proprietary Use pursuant to Company instructions. -69Returns the value of the ‘lock’ flag of the recorder. void SetRejectPlayback(BOOL bReject); Sets the value of the ‘lock’ flag of the recorder. BOOL CheckCurrentDeviceID(void); Retrieves from the phone its device ID. If the device ID of the voice-table is different, reinitializes the table to its default contents. void SetCurrentDeviceID(int nDevID); Sets the value of the m_nDeviceID data member. BOOL CheckHookswitchState(void); Retrieves from the phone the current hook state (hedaset-on - TRUE, headset-off - FALSE). int AutoPlayAnnouncement(); < 57503-77> Starts the playback of the announcement which has been administered to be played back automatically on answering of a call. int PlayAnnouncement(int nIndex, int nModule); < 57503-77> Starts the playback of the announcement with the given index. int RecordAnnouncement(long lIndex, int nModule); Starts the recording of the announcement with the given index. int StopAnnouncement(int nModule); Stops a recording or a playback cycle if one is in progress. int FillAnnouncementsList(CComboBox *pCombo); Fills an interface object (combo-box) with the names of the annoncements. Notification Functions: int OnRecorderStateChange(int nState, int nPosition); Called from the TAPI Callbacks module after the PHONE_DEVSPECIFIC message is received and identified as one that is recorder-related. 4.8.6.5 Startup The CVICE object is responsible for creating and initializing properly this object. If during initialization of TAPI the voice-chip recording capabilities of the phone device have not been recognized this object will not be created and the user interface will not contain controls and menu items related to the Announcements at all. 4.8.6.6 Shutdown The CVICE object is responsible for the destruction of this object on de-initializing TAPI. 4.8.6.7 Error Messages This object does not report error messages to the user. However, most of the functions return error codes related to fault situations when recording and playing back announcements. The error codes returned are defined and documented in the const.h file of the McPhone project Lucent Technologies - Proprietary Use pursuant to Company instructions. -704.8.6.8 Events for Event Log This class will log all failures as reported from this object during the execution of the announcementsrelated TAPI and VICE function calls and memory allocation errors as well. 5. DESIGN CONCERNS Any areas of the design which could be potential trouble areas are identified in this section. For example, performance concerns about a particular area of the design could be described here. Any dependencies on other components’ designs should be documented here. 6. OTHER CONSIDERATIONS 6.1 Processes and Control Flow Only two distinct processes exists within the McFone R1 product: the telephony core and the event logger. Communication between these two processes take place through the CEvtLog class; see section 4.8.2 for details. 6.2 Internal Interfaces Internal interfaces are defined within the method and property description section of each class. See each class for the set of interface functions it supports. 6.3 Capacities N/A 6.4 Resource Usage The classes of the telephony core are designed such that, when a resource is allocated, it is deallocated in the destructor. See each class for details on its resource handling. 6.5 Performance N/A 6.6 Hardware/Firmware N/A 6.7 Target Dependencies N/A 6.8 Future Considerations Please see [5] for a discussion of future considerations. Lucent Technologies - Proprietary Use pursuant to Company instructions. -717. LIST OF TABLES TABLE 1. CALLBAR TYPES AND CONSTRUCTION METHODS..................................................... 12 TABLE 2. DIAL STRING CHARACTER MAP..................................................................................... 40 Lucent Technologies - Proprietary Use pursuant to Company instructions. -72- 8. TABLE OF CONTENTS 1. INTRODUCTION .............................................................................................................................. 3 1.1 GENERAL......................................................................................................................................... 3 1.1.1 Purpose.................................................................................................................................... 3 1.1.2 Module Definition .................................................................................................................... 3 1.1.3 Document Scope ...................................................................................................................... 3 1.1.4 Document History .................................................................................................................... 3 1.1.5 Document Change Control....................................................................................................... 3 1.1.6 Related Documents .................................................................................................................. 3 1.2 TERMINOLOGY AND ACRONYMS ....................................................................................................... 4 1.3 CUSTOMER DOCUMENTATION CONCERNS ......................................................................................... 4 2. EXTERNAL INTERFACES .............................................................................................................. 4 2.1 EVENT LOG FUNCTION CALLS .......................................................................................................... 4 2.2 PASTER FUNCTION CALLS.............................................................................................................. 4 3. EXPOSED INTERFACES ................................................................................................................. 4 4. LOW LEVEL DESIGN...................................................................................................................... 4 4.1 APPLICATION PERFORMANCE............................................................................................................ 4 4.2 CMCFONEAPP ................................................................................................................................. 5 4.2.1 Description .............................................................................................................................. 5 4.2.2 Interfacing FUs/Classes ........................................................................................................... 5 4.2.3 Data Structures and Variables ................................................................................................. 5 4.2.4 Functions/Methods................................................................................................................... 5 4.2.5 Startup ..................................................................................................................................... 6 4.2.6 Shutdown ................................................................................................................................. 6 4.2.7 Error Messages........................................................................................................................ 6 4.2.7.1 Failed to initialize TAPI.................................................................................................................... 6 4.2.7.2 Memory allocation failed .................................................................................................................. 7 4.2.8 Events for Event Log................................................................................................................ 7 4.2.8.1 Memory Errors.................................................................................................................................. 7 4.2.8.2 TAPI Initialization Error ................................................................................................................... 7 4.2.8.3 TAPI Initialization/Shutdown Errors ................................................................................................. 7 4.3 CCALLBARMANAGER ...................................................................................................................... 7 4.3.1 Description .............................................................................................................................. 7 4.3.2 Interfacing FUs/Classes ........................................................................................................... 7 4.3.3 Data Structures and Variables ................................................................................................. 7 4.3.4 Functions/Methods................................................................................................................... 7 4.3.5 Startup ................................................................................................................................... 13 4.3.6 Shutdown ............................................................................................................................... 13 4.3.7 Error Messages...................................................................................................................... 13 4.3.7.1 Could not make call ........................................................................................................................ 13 4.3.8 Events for Event Log.............................................................................................................. 13 4.4 CCALLBARWINDOW ...................................................................................................................... 13 4.4.1 Description ............................................................................................................................ 13 4.4.2 Interfacing FUs/Classes ......................................................................................................... 13 4.4.3 Data Structures and Variables ............................................................................................... 14 4.4.4 Functions/Methods................................................................................................................. 14 4.4.5 Startup ................................................................................................................................... 14 4.4.6 Shutdown ............................................................................................................................... 14 4.4.7 Error Messages...................................................................................................................... 14 Lucent Technologies - Proprietary Use pursuant to Company instructions. -734.4.8 Events for Event Log.............................................................................................................. 14 4.5 CALLBAR OBJECT CONTAINERS ...................................................................................................... 14 4.5.1 CCallbarObjectContainer Class............................................................................................. 14 4.5.1.1 Description ..................................................................................................................................... 14 4.5.1.2 Interfacing FUs/Classes................................................................................................................... 15 4.5.1.3 Data Structures and Variables ......................................................................................................... 15 4.5.1.4 Functions/Methods.......................................................................................................................... 15 4.5.1.4.1 Actions .................................................................................................................................... 15 4.5.1.4.2 Properties ................................................................................................................................ 16 4.5.1.5 Startup............................................................................................................................................ 16 4.5.1.6 Shutdown........................................................................................................................................ 16 4.5.1.7 Error Messages ............................................................................................................................... 16 4.5.1.8 Events for Event Log....................................................................................................................... 16 4.5.2 CCallbarFrame...................................................................................................................... 17 4.5.2.1 Description ..................................................................................................................................... 17 4.5.2.2 Interfacing FUs/Classes................................................................................................................... 17 4.5.2.3 Data Structures and Variables ......................................................................................................... 17 4.5.2.4 Functions/Methods.......................................................................................................................... 17 4.5.2.4.1 Actions .................................................................................................................................... 17 4.5.2.4.2 Properties ................................................................................................................................ 17 4.5.2.5 Startup............................................................................................................................................ 17 4.5.2.6 Shutdown........................................................................................................................................ 18 4.5.2.7 Error Messages ............................................................................................................................... 18 4.5.2.8 Events for Event Log....................................................................................................................... 18 4.5.3 CCallbarCIPFrame................................................................................................................ 18 4.5.3.1 Description ..................................................................................................................................... 18 4.5.3.2 Interfacing FUs/Classes................................................................................................................... 18 4.5.3.3 Data Structures and Variables ......................................................................................................... 18 4.5.3.4 Functions/Methods.......................................................................................................................... 18 4.5.3.4.1 Actions .................................................................................................................................... 18 4.5.3.4.2 Properties ................................................................................................................................ 20 4.5.3.5 Startup............................................................................................................................................ 20 4.5.3.6 Shutdown........................................................................................................................................ 20 4.5.3.7 Error Messages ............................................................................................................................... 20 4.5.3.8 Events for Event Log....................................................................................................................... 20 4.6 CALLBAR OBJECTS......................................................................................................................... 20 4.6.1 CCallbarObject...................................................................................................................... 20 4.6.1.1 Description ..................................................................................................................................... 20 4.6.1.2 Interfacing FUs/Classes................................................................................................................... 20 4.6.1.3 Data Structures and Variables ......................................................................................................... 21 4.6.1.4 Functions/Methods.......................................................................................................................... 21 4.6.1.4.1 Actions .................................................................................................................................... 21 4.6.1.4.2 Properties ................................................................................................................................ 21 4.6.1.5 Startup............................................................................................................................................ 22 4.6.1.6 Shutdown........................................................................................................................................ 23 4.6.1.7 Error Messages ............................................................................................................................... 23 4.6.1.8 Events for Event Log....................................................................................................................... 23 4.6.2 CCallbarButton...................................................................................................................... 23 4.6.2.1 Description ..................................................................................................................................... 23 4.6.2.2 Interfacing FUs/Classes................................................................................................................... 23 4.6.2.3 Data Structures and Variables ......................................................................................................... 23 4.6.2.4 Functions/Methods.......................................................................................................................... 23 4.6.2.4.1 Actions .................................................................................................................................... 23 4.6.2.4.2 Properties ................................................................................................................................ 24 4.6.2.5 Startup............................................................................................................................................ 26 4.6.2.6 Shutdown........................................................................................................................................ 26 4.6.2.7 Error Messages ............................................................................................................................... 26 4.6.2.8 Events for Event Log....................................................................................................................... 26 4.6.3 CCallbarCIP.......................................................................................................................... 26 Lucent Technologies - Proprietary Use pursuant to Company instructions. -744.6.3.1 Description ..................................................................................................................................... 26 4.6.3.2 Interfacing FUs/Classes................................................................................................................... 26 4.6.3.3 Data Structures and Variables ......................................................................................................... 26 4.6.3.4 Functions/Methods.......................................................................................................................... 27 4.6.3.4.1 Actions .................................................................................................................................... 27 4.6.3.4.2 Properties ................................................................................................................................ 27 4.6.3.5 Startup............................................................................................................................................ 28 4.6.3.6 Shutdown........................................................................................................................................ 28 4.6.3.7 Error Messages ............................................................................................................................... 28 4.6.3.8 Events for Event Log....................................................................................................................... 28 4.6.4 CCallbarCombo..................................................................................................................... 29 4.6.4.1 Description ..................................................................................................................................... 29 4.6.4.2 Interfacing FUs/Classes................................................................................................................... 29 4.6.4.3 Data Structures and Variables ......................................................................................................... 29 4.6.4.4 Functions/Methods.......................................................................................................................... 29 4.6.4.4.1 Actions .................................................................................................................................... 29 4.6.4.4.2 Properties ................................................................................................................................ 29 4.6.4.5 Startup............................................................................................................................................ 29 4.6.4.6 Shutdown........................................................................................................................................ 30 4.6.4.7 Error Messages ............................................................................................................................... 30 4.6.4.8 Events for Event Log....................................................................................................................... 30 4.6.5 CCallbarDisplay .................................................................................................................... 30 4.6.5.1 Description ..................................................................................................................................... 30 4.6.5.2 Interfacing FUs/Classes................................................................................................................... 30 4.6.5.3 Data Structures and Variables ......................................................................................................... 30 4.6.5.4 Functions/Methods.......................................................................................................................... 30 4.6.5.4.1 Actions .................................................................................................................................... 30 4.6.5.4.2 Properties ................................................................................................................................ 31 4.6.5.5 Startup............................................................................................................................................ 31 4.6.5.6 Shutdown........................................................................................................................................ 31 4.6.5.7 Error Messages ............................................................................................................................... 31 4.6.5.8 Events for Event Log....................................................................................................................... 31 4.6.6 CCallbarDroplist ................................................................................................................... 31 4.6.6.1 Description ..................................................................................................................................... 31 4.6.6.2 Interfacing FUs/Classes................................................................................................................... 32 4.6.6.3 Data Structures and Variables ......................................................................................................... 32 4.6.6.4 Functions/Methods.......................................................................................................................... 32 4.6.6.4.1 Actions .................................................................................................................................... 32 4.6.6.4.2 Properties ................................................................................................................................ 32 4.6.6.5 Startup............................................................................................................................................ 32 4.6.6.6 Shutdown........................................................................................................................................ 32 4.6.6.7 Error Messages ............................................................................................................................... 32 4.6.6.8 Events for Event Log....................................................................................................................... 33 4.6.7 CCallbarIndicator.................................................................................................................. 33 4.6.7.1 Description ..................................................................................................................................... 33 4.6.7.2 Interfacing FUs/Classes................................................................................................................... 33 4.6.7.3 Data Structures and Variables ......................................................................................................... 33 4.6.7.4 Functions/Methods.......................................................................................................................... 33 4.6.7.4.1 Actions .................................................................................................................................... 33 4.6.7.4.2 Properties ................................................................................................................................ 34 4.6.7.5 Startup............................................................................................................................................ 35 4.6.7.6 Shutdown........................................................................................................................................ 35 4.6.7.7 Error Messages ............................................................................................................................... 35 4.6.7.8 Events for Event Log....................................................................................................................... 35 4.6.8 CCallbarSlider....................................................................................................................... 35 4.6.8.1 Description ..................................................................................................................................... 35 4.6.8.2 Interfacing FUs/Classes................................................................................................................... 35 4.6.8.3 Data Structures and Variables ......................................................................................................... 36 4.6.8.4 Functions/Methods.......................................................................................................................... 36 Lucent Technologies - Proprietary Use pursuant to Company instructions. -754.6.8.4.1 Actions .................................................................................................................................... 36 4.6.8.4.2 Properties ................................................................................................................................ 36 4.6.8.5 Startup............................................................................................................................................ 37 4.6.8.6 Shutdown........................................................................................................................................ 37 4.6.8.7 Error Messages ............................................................................................................................... 37 4.6.8.8 Events for Event Log....................................................................................................................... 37 4.7 TELEPHONY MANAGEMENT CLASSES .............................................................................................. 37 4.7.1 CVICE ................................................................................................................................... 37 4.7.1.1 Description ..................................................................................................................................... 37 4.7.1.2 Interfacing FUs/Classes................................................................................................................... 37 4.7.1.3 Data Structures and Variables ......................................................................................................... 37 4.7.1.4 Functions/Methods.......................................................................................................................... 37 4.7.1.5 Startup............................................................................................................................................ 40 4.7.1.6 Shutdown........................................................................................................................................ 41 4.7.1.7 Error Messages ............................................................................................................................... 41 4.7.1.7.1 Failed to place call................................................................................................................... 41 4.7.1.7.2 Could not load switch data ....................................................................................................... 41 4.7.1.8 Events for Event Log....................................................................................................................... 41 4.7.2 TAPI Line Callback (LineCallback)........................................................................................ 41 4.7.2.1 Description ..................................................................................................................................... 41 4.7.2.2 Interfacing FUs/Classes................................................................................................................... 41 4.7.2.3 Data Structures and Variables ......................................................................................................... 41 4.7.2.4 Interpreted Messages ...................................................................................................................... 41 4.7.2.5 Startup............................................................................................................................................ 42 4.7.2.6 Shutdown........................................................................................................................................ 42 4.7.2.7 Error Messages ............................................................................................................................... 42 4.7.2.8 Events for Event Log....................................................................................................................... 42 4.7.3 TAPI Phone Callback (PhoneCallback).................................................................................. 42 4.7.3.1 Description ..................................................................................................................................... 43 4.7.3.2 Interfacing FUs/Classes................................................................................................................... 43 4.7.3.3 Data Structures and Variables ......................................................................................................... 43 4.7.3.4 Interpreted Messages ...................................................................................................................... 43 4.7.3.5 Startup............................................................................................................................................ 44 4.7.3.6 Shutdown........................................................................................................................................ 44 4.7.3.7 Error Messages ............................................................................................................................... 44 4.7.3.8 Events for Event Log....................................................................................................................... 44 4.8 OTHER SUPPORT CLASSES .............................................................................................................. 44 4.8.1 CConfigSettings ..................................................................................................................... 44 4.8.1.1 Description ..................................................................................................................................... 44 4.8.1.2 Interfacing FUs/Classes................................................................................................................... 45 4.8.1.3 Data Structures and Variables ......................................................................................................... 45 4.8.1.3.1 Structures ................................................................................................................................ 45 4.8.1.3.2 Variables ................................................................................................................................. 45 4.8.1.4 Functions/Methods.......................................................................................................................... 46 4.8.1.4.1 Methods .................................................................................................................................. 46 4.8.1.4.2 Properties ................................................................................................................................ 46 4.8.1.5 Startup............................................................................................................................................ 48 4.8.1.6 Shutdown........................................................................................................................................ 48 4.8.1.7 Error Messages ............................................................................................................................... 48 4.8.1.7.1 Could not write to CVALOCAL.INI......................................................................................... 48 4.8.1.8 Events for Event Log....................................................................................................................... 48 4.8.2 CEvtLog................................................................................................................................. 48 4.8.2.1 Description ..................................................................................................................................... 48 4.8.2.2 Interfacing FUs/Classes................................................................................................................... 48 4.8.2.3 Data Structures and Variables ......................................................................................................... 48 4.8.2.4 Functions/Methods.......................................................................................................................... 48 4.8.2.4.1 Notifications ............................................................................................................................ 48 4.8.2.5 Startup............................................................................................................................................ 49 4.8.2.6 Shutdown........................................................................................................................................ 49 Lucent Technologies - Proprietary Use pursuant to Company instructions. -764.8.2.7 Error Messages ............................................................................................................................... 49 4.8.2.8 Events for Event Log....................................................................................................................... 49 4.8.3 CPasteProgressDlg ................................................................................................................ 50 4.8.3.1 Description ..................................................................................................................................... 50 4.8.3.2 Interfacing FUs/Classes................................................................................................................... 50 4.8.3.3 Data Structures and Variables ......................................................................................................... 50 4.8.3.4 Functions/Methods.......................................................................................................................... 50 4.8.3.4.1 Notifications ............................................................................................................................ 50 4.8.3.5 Startup............................................................................................................................................ 50 4.8.3.6 Shutdown........................................................................................................................................ 50 4.8.3.7 Error Messages ............................................................................................................................... 50 4.8.3.8 Events for Event Log....................................................................................................................... 50 4.8.4 CPhoneSettingsDlg ................................................................................................................ 50 4.8.4.1 Description ..................................................................................................................................... 51 4.8.4.2 Interfacing FUs/Classes................................................................................................................... 51 4.8.4.3 Data Structures and Variables ......................................................................................................... 51 4.8.4.4 Functions/Methods.......................................................................................................................... 51 4.8.4.4.1 Notifications ............................................................................................................................ 51 4.8.4.5 Startup............................................................................................................................................ 52 4.8.4.6 Shutdown........................................................................................................................................ 52 4.8.4.7 Error Messages ............................................................................................................................... 53 4.8.4.8 Events for Event Log....................................................................................................................... 53 4.8.5 CRecorderDlg........................................................................................................................ 53 4.8.5.1 Description ..................................................................................................................................... 53 4.8.5.2 Interfacing FUs/Classes................................................................................................................... 54 4.8.5.3 Data Structures and Variables ......................................................................................................... 55 4.8.5.4 Functions/Methods.......................................................................................................................... 55 4.8.5.4.1 Notifications ............................................................................................................................ 56 4.8.5.5 Virtual Over-ridden Functions......................................................................................................... 59 4.8.5.6 Members Functions......................................................................................................................... 59 4.8.5.7 Dialog Controls............................................................................................................................... 60 4.8.5.8 Startup............................................................................................................................................ 61 4.8.5.9 Shutdown........................................................................................................................................ 61 4.8.5.10 Error Messages ............................................................................................................................. 61 4.8.5.11 Events for Event Log..................................................................................................................... 61 4.8.6 CVoiceRecorder..................................................................................................................... 62 4.8.6.1 Description ..................................................................................................................................... 62 4.8.6.2 Interfacing FUs/Classes................................................................................................................... 62 4.8.6.3 Data Structures and Variables ......................................................................................................... 63 4.8.6.4 Functions/Methods.......................................................................................................................... 67 4.8.6.5 Startup............................................................................................................................................ 69 4.8.6.6 Shutdown........................................................................................................................................ 69 4.8.6.7 Error Messages ............................................................................................................................... 69 4.8.6.8 Events for Event Log....................................................................................................................... 70 5. DESIGN CONCERNS...................................................................................................................... 70 6. OTHER CONSIDERATIONS ......................................................................................................... 70 6.1 PROCESSES AND CONTROL FLOW .................................................................................................... 70 6.2 INTERNAL INTERFACES................................................................................................................... 70 6.3 CAPACITIES ................................................................................................................................... 70 6.4 RESOURCE USAGE .......................................................................................................................... 70 6.5 PERFORMANCE............................................................................................................................... 70 6.6 HARDWARE/FIRMWARE .................................................................................................................. 70 6.7 TARGET DEPENDENCIES ................................................................................................................. 70 6.8 FUTURE CONSIDERATIONS .............................................................................................................. 70 7. LIST OF TABLES............................................................................................................................ 71 Lucent Technologies - Proprietary Use pursuant to Company instructions. -778. TABLE OF CONTENTS.................................................................................................................. 72 Lucent Technologies - Proprietary Use pursuant to Company instructions. -78APPENDIX A: DESIGN TEAM DECISON TRACKING Note: Information about any significant design decisions shall be included in this section. The information shall include the date of the meeting (whether formal or informal), the attendees, and the decision made (and why) at the meeting. Lucent Technologies - Proprietary Use pursuant to Company instructions.
© Copyright 2026 Paperzz