ࡱ> PBCDEFGHIJRoot Entry FulON/WordDocument1P ObjectPool*ʎʎSummaryInformation(MO  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?`TQRS]^_`abcdefghijkhuvwxyz{|}~ObjInfo     ) VisioDocument()*+,-./056789BCompObjOSVWXYj`abcdefghijklmnopuvwxyz{|}~C:\tazz\FUNCT\VOICEMOD.DOC Kecia BruceC:\tazz\FUNCT\VOICEMOD.DOC Kecia BruceC:\tazz\FUNCT\VOICEMOD.DOC Kecia BruceC:\tazz\FUNCT\VOICEMOD.DOC Kecia BruceC:\tazz\FUNCT\VOICEMOD.doc Kecia Bruce"\\GIDRA\PUBLIC\keciab\VOICEMOD.doc Avi Belinsky4\\Whpg\public\deanso\PPTs\MODEM\diskette\unimodv.doc Avi BelinskyC:\temp\modem\unimodv.doc@Strike HP 4 Si\\strike\hp4si-52036HPPCL5MSStrike HP 4 SiStrike HP 4 Si@w XX FVISIO 3.0 Drawing VISIO ShapesVisio.Drawing.39qࡱ>LOHB(%77 ࡱ>  Mࡱ>  FMicrosoft Word Document MSWordDocWord.Document.69qࡱ      !"#$%&'()*+,-./03456789:;<=>ABCDEFGHIJKLMNOSTUVWXY[LToc339859849  PAGEREF _Toc339859849 42  Overview This document is the specification for changes to the Windows 95 comm drivers to support voice modems. Voice modem support will be achieved by: extending Unimodem (Windows 95s telephony service provider (TSP) for all fax/data modems) providing a wave driver for serial modems that supports IMA ADPCM and Rockwell ADPCM formats providing a wave wrapper for use with wave drivers for modems with a separate audio hardware interface Overview of Voice Modems Voice modems are modems capable of transmitting and receiving digitized voice data. The proposed industry standard command set for voice modems is the AT+V command set, which consists of Hayes AT (ATTENTION) prefixed commands, and +V (Voice) prefixed commands. AT+V is documented as an ANSI/TIA/EIA standard entitled Facsimile Digital Interfaces--Voice Control Interim Standard for Asynchronous DCE, also called IS-101. PN-3131, prepared by TIA Technical Subcommittee TR-29.2, is the proposed successor to IS-101. There is a wide range of voice modems with differing levels of compliance with the AT+V standard. In addition, there are other command sets, for example Rockwells AT#V (Hayes AT prefixed commands with Rockwell #V prefixed commands), which are widely used. Unimodem Interface Overview Unimodem consists of two executable modules: a Telephony Service Provider (TSP) and a VxD. The TSP handles application requests, such as dialing and answering, which are passed down from TAPI, and passes result codes to TAPI that are sent up from the modem. The exact sequence of commands required by a particular modem to accomplish an application request and the result codes that the modem may send up are contained in an .INF file for that modem. The .INF file is provided by the modem manufacturer and is entered, upon installation of the device, into the registrya Windows tree structured file that stores configuration data. The TSP then accesses the registry as needed to find out these commands, result codes, and other information such as the modem capabilities. The VxD is called by the TSP to send command strings to the modem. It is called by the VCOMM VxD to change modem settings and send/receive data to/from the modem. The following diagram illustrates how these pieces fit together:  EMBED Visio.Drawing.3  Many modems are external, attaching to standard serial COM ports or other types of communications adapters. Or, they may be internal but emulate standard serial UARTs (e.g. 8250, 16550, etc.). In order to support both of these types of modems, Unimodem calls back into VCOMM to talk through a serial port driver to the actual modem. This is illustrated by the following diagram:  New Unimodem Functionality This section describes the key new features being added to Unimodem: Distinctive Ringing (Multiple Addresses) In addition to mapping different ring patterns to different addresses, Unimodem can also map different ring patterns to different types of calls (voice, data, fax). This allows Unimodem to offer new calls to those applications that have requested to receive calls of a specific type on a given address. In this way, fax, data, and voice call discrimination can be offered when users have purchased distinctive ringing services from the local phone company. Caller ID The TSP will call into the VxD to get Caller ID information when the VxD indicates rings to the TSP. TSPI_lineGetID This function returns the the wMid and wPid for the wave driver associated with the telephone line of the currently opened line in the lpDeviceID VARSTRING parameter. To use it, cast the value to a DWORD and pass as an argument to Multimedia functions such as waveOutOpen. TSPI_lineMoniterDigits If enabled, this service will handle custom messages from the VxD indicating that a DTMF tone has been detected. The TSP will then generate a LINE_MONITORTONE message to TAPI.DLL indicating the appropriate tone. The ability to detect DTMF tones on some modems is restricted by the state of the speakerphone on the systemthe TSP will report the speakerphone state as best as possible to applications. TSPI_lineGenerateDigits This call uses a new PM-API to pass the digit to be generated to the VxD. The VxD will acknowledge the digit command by posting an asynchronous completion message. The TSP will send a string of digits one at a time due to limitations in sending DTMF strings on some modems. Phone Device A phone device has been defined to allow applications to monitor and control the hookswitch mode of the handset, speakerphone, and/or headset. Operator Agent The Operator Agent answers incoming calls of unknown media mode and routes them, based on DTMF input from the caller, to the appropriate application. This application is started from Accessories\Operator and is described in section  REF _Ref339258241 \n 5 of this document. New Unimodem External Interfaces Unimodem / Wave Interfaces Following is a description of the two basic types of modems and how the multimedia wave driver for each works with Unimodem: For a serial port modem where wave I/O data is sent through the PCs communications port, Microsoft provides a serial wave driver that calls a 16 bit DLL to synchronizes the wave driver with Unimodem. The serial wave driver supports IMA ADPCM and Rockwell ADPCM formats. For modems with a separate audio hardware interface, a wave wrapper performs all synchronization between the modem and audio. MMSystem calls the wrapper, and the wrapper in turn calls Unimodem to send any needed AT commands to the modem. After the AT commands are completed, the wave driver wrapper calls back into MMSystem, and MMSystem then calls the modem wave device. The modem wave device interfaces only to the audio hardware interface. For existing modem wave drivers, any direct access to the COMM port must be removed (let the wave wrapper send any AT commands to the modem). The following diagram illustrates how these pieces fit together:  EMBED Word.Picture.6  Modem .INF File Additions Unimodem V models a modem as an executor of logical functions (for example, answer a voice call). The exact sequence of commands required by the modem to accomplish a particular logical function is contained in an .INF file for that modem. The INF file also contains other information such as modem capabilities, and result codes that the modem may send up to Unimodem. The .INF file is provided by the modem manufacturer and is entered, upon installation of the device, into the registrya Windows tree structured file that stores configuration data in the form of a hierarchical tree of Keys and Values. All .INF information is stored under the key: HKEY_LOCAL_MACHINE\ System\ CurrentControlSet\ Services\ Class\ Modem\000x where x is a number indicating a particular modem (the first modem installed is 0000, the second is 0001, and so on). Refer to the Windows MDK for specific information on how to create an .INF file to support voice modems. New Unimodem TSP Functions Line Device The following sections describe the support in the TSP for the line device: The first section lists functions that are not implemented in the Unimodem TSP. The second sections lists functions that will be implemented in the usual way (no noteworthy aspects to this implementation). The third section lists functions that will be implemented but require some description of the proposed implementation. Distinctive ringing is handled by a registry table mapping ringing cadence dwAddressID with an associated address phone number. Line Device Functions not Implemented Following is the list of functions for line devices that are not supported. These functions will return LINEERR_OPERATIONUNAVAIL: TSPI_lineAddToConference TSPI_lineBlindTransfer TSPI_lineCompleteCall TSPI_lineCompleteTransfer TSPI_lineDevSpecific TSPI_lineDevSpecificFeature TSPI_lineDropOnClose TSPI_lineDropNoOwner TSPI_lineGatherDigits TSPI_lineGenerateTone TSPI_lineHold TSPI_lineMonitorTones TSPI_lineNegotiateExtVersion TSPI_linePark TSPI_linePickup TSPI_linePrepareAddToConference TSPI_lineRedirect TSPI_lineReleaseUserUserInfo TSPI_lineRemoveFromConference TSPI_lineSecureCall TSPI_lineSendUserUserInfo TSPI_lineSetCurrentLocation TSPI_lineSetMediaControl TSPI_lineSetTerminal TSPI_lineSetupConference TSPI_lineSetupTransfer TSPI_lineSwapHold TSPI_lineUncompleteCall TSPI_lineUnhold TSPI_lineUnpark Line Device Functions with Usual implementation Following is the list of functions for line devices that are implemented in the usual way (no noteworthy aspects to this implementation): TSPI_lineAccept TSPI_lineClose TSPI_lineCloseCall TSPI_lineConfigDialog TSPI_lineConfigDialogEdit TSPI_lineGetCallAddressID TSPI_lineGetDevConfig TSPI_lineGetExtensionID TSPI_lineGetIcon TSPI_lineNegotiateTSPIVersion TSPI_lineOpen TSPI_lineSelectExtVersion TSPI_lineSetAppSpecific TSPI_lineSetCallParams TSPI_lineSetDevConfig TSPI_lineSetMediaMode Line Device Functions with Described Implementation Following is the list of functions for line devices that will be implemented but require some description of the proposed implementation. TSPI_lineAnswer When TSPI_lineAnswer is called, LineVoiceAnswer is performed. TSPI_lineConditionalMediaDetection TSPI_lineConditionalMediaDetection( HDRVLINE hdLine, DWORD dwMediaModes, LPLINECALLPARAMS const lpCallParams ); dwMediaModes supported are: LINEMEDIAMODE_AUTOMATEDVOICE LINEMEDIAMODE_INTERACTIVEVOICE LINEMEDIAMODE_DATAMODEM LINEMEDIAMODE_G3FAX TSPI_lineDial TSPI_lineDial( DRV_REQUESTID dwRequestID, HDRVCALL hdCall, LPCSTR lpszDestAddress, DWORD dwCountryCode ); LineVoiceDialStart, LineVoiceDialNumber and LineVoiceDialComplete are performed as requested by the lpszDestAddress. TSPI_lineDrop When TSPI_lineDrop is called, LineVoiceHangup is performed. LineEnable(Disable)DistinctiveRinging and LineEnable(Disable)CallerID are performed. TSPI_lineForward TSPI_lineForward( DRV_REQUESTID dwRequestID, HDRVLINE hdLine, DWORD bAllAddresses, DWORD dwAddressID, LPLINEFORWARDLIST lpForwardList, DWORD dwNumRingsNoAnswer, HTAPICALL htConsultCall, LPHDRVCALL lphdConsultCall, LPLIENCALLPARAMS lpCallParams ); This function forwards calls to a specific address on a specific line, and cancels forwarding currently in effect. Some Call Forwarding services require that either the forwarding destination answer the phone, or that the destination be called twice within a certain period of time. Unimodem/V will only support Call Forwarding that requires: activate: an activation code followed by the address to forward to deactivate: a deactivation code only. The type of Call Forwarding that is activated as described in the following steps will not be supported: call the number to forward to if someone at that number answers then call forwarding is in effect else call a second time, and now it is in effect end if When calls are forwarded, some Call Forwarding services provide audible indication that forwarding is in effect before presenting the dialtone. In order to handle the variable amounts of time before dialtone is presented, the TSP will prefix the deactivation code with W, a dialable number indicating that dialing should only proceed after a dialtone has been detected. In the case of a busy signal when trying to activate, the function should fail with an appropriate error and the user tries again later. The function should always unforward prior to carrying out new forwarding instructions. This is because the service provider may not always know the forwarding state of the address (for example, it may have been forwarded or unforwarded manually from a handset). The do not disturb feature is not supported. BAllAddresses should always be TRUE (forwarding a single specified line on an address is not supportedall originating lines on the address are forwarded). This means dwAddressID is ignored. If it is not TRUE, LINEERR_INVALPARAM is returned. Following is the description for the LINEFORWARD data structure: DWORD dwTotalSize; DWORD dwNumEntries; 0 or 1 LINEFORWARD ForwardList; DWORD dwForwardMode; LINEFORWARDMODE_UNCOND DWORD dwCallerAddressSize; 0 DWORD dwCallerAddressOffset; 0 DWORD dwDestCountryCode 0 DWORD dwDestAddressSize; TAPI supplied DWORD dwDestAddressOffset; TAPI supplied If dwForwardMode is != LINEFORWARDMODE_UNCOND, LINEERR_INVALPARAM is returned. TSPI_lineGenerateDigits TSPI_lineGenerateDigits( HDRVCALL hdCall, DWORD dwEndToEndID, DWORD dwDigitMode, LPCSTR lpszDigits, DWORD dwDuration ); Only LINEDIGITMODE_DTMF is supported for dwDigitMode. dwDuration is not supported on a per call basis. LineGenerateDTMF is used to dial each digit in turn. LineGenerateFlashhook is used to handle !. TSPI_lineGetAddressCaps TSPI_lineGetAddressCaps( DWORD dwDeviceID, DWORD dwAddressID, DWORD dwTSPIVersion, DWORD dwExtVersion, LPLINEADDRESSCAPS lpAddressCaps ); Following is the typedef for LINEADDRESSCAPS. Interspersed in the typedef are, where appropriate, descriptions of the possible values which the various parameters can take on. typedef struct lineaddresscaps_tag { DWORD dwTotalSize; DWORD dwNeededSize; DWORD dwUsedSize; DWORD dwLineDeviceID; DWORD dwAddressSize; return address from registry DWORD dwAddressOffset; return address from registry DWORD dwDevSpecificSize; 0 DWORD dwDevSpecificOffset; 0 DWORD dwAddressSharing; LINEADDRESSSHARING_PRIVATE DWORD dwAddressStates; 0 DWORD dwCallInfoStates; LINECALLINFOSTATE_OTHER LINECALLINFOSTATE_MEDIAMODE LINECALLINFOSTATE_NUMOWNERINCR LINECALLINFOSTATE_NUMOWNERDECR LINECALLINFOSTATE_NUMMONITORS LINECALLINFOSTATE_CALLERID LINECALLINFOSTATE_MONITORMODES DWORD dwCallerIDFlags; LINECALLPARTYID_NAME LINECALLPARTYID_ADDRESS LINECALLPARTYID_UNKNOWN DWORD dwCalledIDFlags; 0 DWORD dwConnectedIDFlags; 0 DWORD dwRedirectionIDFlags; 0 DWORD dwRedirectingIDFlags; 0 DWORD dwCallStates; LINECALLSTATE_IDLE LINECALLSTATE_OFFERING LINECALLSTATE_ACCEPTED LINECALLSTATE_DIALTONE (address 0 only) LINECALLSTATE_DIALING (address 0 only) LINECALLSTATE_RINGBACK (address 0 only) LINECALLSTATE_BUSY (address 0 only) LINECALLSTATE_CONNECTED LINECALLSTATE_PROCEEDING (address 0 only) LINECALLSTATE_DISCONNECTED LINECALLSTATE_UNKNOWN DWORD dwDialToneModes; LINEDIALTONEMODE_UNAVAIL DWORD dwBusyModes; LINEBUSYMODE_UNAVAIL DWORD dwSpecialInfo; LINESPECIALINFO_UNAVAIL DWORD dwDisconnectModes; LINEDISCONENCTMODE_NORMAL LINEDISCONENCTMODE_UNAVAIL LINEDISCONENCTMODE_BUSY LINEDISCONENCTMODE_NOANSWER DWORD dwMaxNumActiveCalls; 1 DWORD dwMaxNumOnHoldCalls; 01 DWORD dwMaxNumOnHoldPendingCalls; 01 DWORD dwMaxNumConference; 03 DWORD dwMaxNumTransConf; 03 DWORD dwAddrCapFlags; LINEADDRCAPFLAGS_DIALED (only if address 0) LINEADDRCAPFLAGS_BLOCKIDOVERRIDE * LINEADDRCAPFLAGS_ORIGOFFHOOK LINEADDRCAPFLAGS_PARTIALDIAL * conditional on user entering code to block Caller ID in the TSP configuration dialog. DWORD dwCallFeatures; LINECALLFEATURE_ACCEPT LINECALLFEATURE_ANSWER LINECALLFEATURE_DIAL (address 0 only) LINECALLFEATURE_DROP LINECALLFEATURE_GENERATEDIGITS LINECALLFEATURE_MONITORDIGITS LINECALLFEATURE_MONITORMEDIA LINECALLFEATURE_SETCALLPARAMS DWORD dwRemoveFromConfCaps; LINEREMOVEFROMCONF_NONE DWORD dwRemoveFromConfState; 0 DWORD dwTransferModes; 0 DWORD dwParkModes; 0 DWORD dwForwardModes; LINEFORWARDMODE_UNCOND DWORD dwMaxForwardEntries; 1 DWORD dwMaxSpecificEntries; 0 DWORD dwMinFwdNumRings; 0 DWORD dwMaxFwdNumRings; 0 DWORD dwMaxCallCompletions; 0 DWORD dwCallCompletionConds; 0 DWORD dwCallCompletionModes; 0 DWORD dwNumCompletionMessages; 0 DWORD dwCompletionMsgTextEntrySize; 0 DWORD dwCompletionMsgTextSize; 0 DWORD dwCompletionMsgTextOffset; 0 DWORD dwAddressFeatures; LINEADDRFEATURE_MAKECALL (for address 0 only) LINEADDRFEATURE_FORWARD } LINEADDRESSCAPS TSPI_lineGetAddressID TSPI_lineGetAddressID( HDRVLINE hdLine, LPDWORD lpdwAddressID, DWORD dwAddressMode, LPCSTR lpsAddress, DWORD dwSize ); Returns the AddressID given the telephone number. TSPI_lineGetAddressStatus TSPI_lineGetAddressStatus( HDRVLINE hdLine, DWORD dwAddressID, LPLINEADDRESSSTATUS lpAddressStatus ); Following is the typedef for LINEADDRESSSTATUS. Interspersed in the typedef are, where appropriate, descriptions of the possible values which the various parameters can take on. typedef struct lineaddressstatus_tag{ DWORD dwTotalSize; DWORD dwNeededSize; DWORD dwUsedSize; DWORD dwNumInUse; DWORD dwNumActiveCalls; DWORD dwNumOnHoldCalls; 0 DWORD dwNumOnHoldPendCalls; 0 DWORD dwAddressFeatures; LINEADDRFEATURE_FORWARD DWORD dwNumRingsNoAnswer; TAPI supplied DWORD dwForwardNumEntries; 1 DWORD dwForwardSize; DWORD dwForwardOffset; typedef struct lineforward_tag { DWORD dwForwardMode; LINEFORWARDMODE_UNCOND DWORD dwCallerAddressSize; DWORD dwCallerAddressOffset; 0 DWORD dwDestCountryCode; 0 DWORD dwDestAddressSize; DWORD dwDestAddressOffset; address to which the line is forwarded } INEFORWARD; DWORD dwTerminalModesSize; DWORD dwTerminalModesOffset; 0 DWORD dwDevSpecificSize; DWORD dwDevSpecificOffset; 0 } LINEADDRESSSTATUS; LINEADDRFEATURE_FORWARD will only be reported for dwAddressFeatures if it has been configured through the UI registry settings (so it will be dynamically in sync with the modem control panel UI). The address to which a line was last forwarded will be written to the registry so that it will be available the next time the line is opened. A LINE_ADDRESSSTATE message with dwParam2 equal to LINEADDRESSSTATE_FORWARD is sent when an attempt to forward calls was successful. This message is sent by TAPI.DLL, which invokes TSPI_lineGetAddressStatus to determine the current status of the address. TSPI_lineGetCallInfo TSPI_lineGetCallInfo( HDRVCALL hdCall, LPLINECALLINFO lpCallInfo ); Following is the typedef for LINECALLINFO. Interspersed in the typedef are, where appropriate, descriptions of the possible values which the various parameters can take on. typedef struct linecallinfo_tag{ DWORD dwTotalSize; DWORD dwNeededSize; DWORD dwUsedSize; HLINE hLine; DWORD dwLineDeviceID; DWORD dwAddressID; DWORD dwBearerMode; LINEBEARERMODE_VOICE LINEBEARERMODE_PASSTHROUGH DWORD dwRate; 0 DWORD dwMediaMode; LINEMEDIAMODE_AUTOMATEDVOICE LINEMEDIAMODE_INTERACTIVEVOICE LINEMEDIAMODE_DATAMODEM LINEMEDIAMODE_G3FAX DWORD dwAppSpecific; whatever was set last with TSPI_lineSetAppSpecific (initially 0 on a new call)0 DWORD dwCallID; 0Service provider could return caller ID MESG= field here if required. DWORD dwRelatedCallID; 0 DWORD dwCallStates; LINECALLSTATE_IDLE LINECALLSTATE_OFFERING LINECALLSTATE_ACCEPTED LINECALLSTATE_DIALTONE LINECALLSTATE_DIALING LINECALLSTATE_RINGBACK LINECALLSTATE_BUSY LINECALLSTATE_CONNECTED LINECALLSTATE_PROCEEDING LINECALLSTATE_DISCONNECTED LINECALLSTATE_ONHOLD LINECALLSTATE_CONFERENCED LINECALLSTATE_ONHOLDPENDCONF LINECALLSTATE_ ONHOLDPENDTRANSF LINECALLSTATE_UNKNOWN DWORD dwMonitorDigitModes; LINEDIGITMODE_DTMF DWORD dwMonitorMediaModes; TAPI supplied LINEDIALPARAMS DialParams; Set to dialing parameters currently in effect on the call (unless set by TSPI_lineMakeCall or TSPI_lineSetCallParams, the defaults used in LINEDEVCAPS) typedef struct linedialparams_tag{ DWORD dwDialPause; 0 DWORD dwDialSpeed; 0 DWORD dwDigitDuration; 0 DWORD dwWaitForDialtone; 0 } DWORD dwOrigin; LINECALLORIGIN_OUTBOUND LINECALLORIGIN_INBOUNDUNKNOWN DWORD dwReason; LINECALLREASON_UNAVAILDIRECT DWORD dwCompletionID; 0 DWORD dwNumOwners; TAPI supplied. DWORD dwNumMonitors; TAPI supplied. DWORD dwCountryCode; 0 DWORD dwTrunk; 0 DWORD dwCallerIDFlags; LINECALLPARTYID_BLOCKED LINECALLPARTYID_OUTOFAREA LINECALLPARTYID_NAME LINECALLPARTYID_ADDRESS LINECALLPARTYID_UNKNOWN * LINECALLPARTYID_UNAVAIL * * If the modem does not support Caller ID, only LINECALLPARTYID_UNKNOWN will be reported. If the modem does support Caller ID but the Caller ID information has not been made available yet, it will report LINECALLPARTYID_UNAVAIL. DWORD dwCallerIDSize; DWORD dwCallerIDOffset; As available. DWORD dwCallerIDNameSize; DWORD dwCallerIDNameOffset; As available. DWORD dwCalledIDFlags; LINECALLPARTYID_UNAVAIL DWORD dwCalledIDSize; 0 DWORD dwCalledIDOffset; 0 DWORD dwCalledIDNameSize; 0 DWORD dwCalledIDNameOffset; 0 DWORD dwConnectedIDFlags; LINECALLPARTYID_UNAVAIL DWORD dwConnectedIDSize; 0 DWORD dwConnectedIDOffset; 0 DWORD dwConnectedIDNameSize; 0 DWORD dwConnectedIDNameOffset; 0 DWORD dwRedirectionIDFlags; LINECALLPARTYID_UNAVAIL DWORD dwRedirectionIDSize; 0 DWORD dwRedirectionIDOffset; 0 DWORD dwRedirectionIDNameSize; 0 DWORD dwRedirectionIDNameOffset; 0 DWORD dwRedirectingIDFlags; LINECALLPARTYID_UNAVAIL DWORD dwRedirectingIDSize; 0 DWORD dwRedirectingIDOffset; 0 DWORD dwRedirectingIDNameSize; 0 DWORD dwRedirectingIDNameOffset; 0 DWORD dwAppNameSize; TAPI supplied DWORD dwAppNameOffset; TAPI supplied DWORD dwDisplayableAddressSize; TAPI supplied 0 DWORD dwDisplayableAddressOffset; TAPI supplied 0 DWORD dwCalledPartySize; TAPI supplied DWORD dwCalledPartyOffset; TAPI suppled DWORD dwCommentSize; TAPI supplied DWORD dwCommentOffset; TAPI supplied DWORD dwDisplaySize; 0 DWORD dwDisplayOffset; 0 DWORD dwUserUserInfoSize; 0 DWORD dwUserUserInfoOffset; 0 DWORD dwHighLevelCompSize; 0 DWORD dwHighLevelCompOffset; 0 DWORD dwLowLevelCompSize; 0 DWORD dwLowLevelCompOffset; 0 DWORD dwChargingInfoSize; 0 DWORD dwChargingInfoOffset; 0 DWORD dwTerminalModesSize; DWORD dwTerminalModesOffset; 0 DWORD dwDevSpecificSize; 0 DWORD dwDevSpecificOffset; } LINECALLINFO TSPI_lineGetCallStatus TSPI_lineGetCallStatus( HDRVCALL hdCall, LPLINECALLSTATUS lpCallStatus ); typedef struct linecallstatus_tag{ DWORD dwTotalSize; DWORD dwNeededSize; DWORD dwUsedSize; DWORD dwCallState; LINECALLSTATE_IDLE LINECALLSTATE_OFFERING LINECALLSTATE_ACCEPTED LINECALLSTATE_DIALTONE LINECALLSTATE_DIALING LINECALLSTATE_RINGBACK LINECALLSTATE_BUSY LINECALLSTATE_CONNECTED LINECALLSTATE_PROCEEDING LINECALLSTATE_DISCONNECTED LINECALLSTATE_ONHOLD LINECALLSTATE_CONFERENCED LINECALLSTATE_ONHOLDPENDCONF LINECALLSTATE_ ONHOLDPENDTRANSF LINECALLSTATE_UNKNOWN DWORD dwCallStateMode; No special dialtone, busy modes. DWORD dwCallPrivilege; TAPI suppled DWORD dwCallFeatures; /*based upon actual call state*/ LINECALLFEATURE_ACCEPT LINECALLFEATURE_ANSWER LINECALLFEATURE_COMPLETECALL LINECALLFEATURE_DIAL (address 0 only) LINECALLFEATURE_DROP LINECALLFEATURE_GENERATEDIGITS LINECALLFEATURE_MONITORDIGITS LINECALLFEATURE_MONITORMEDIA LINECALLFEATURE_SETUPCONF LINECALLFEATURE_SETUPTRANSF LINECALLFEATURE_SETCALLPARAMS DWORD dwDevSpecificSize; 0 DWORD dwDevSpecificOffset; 0 } LINECALLSTATUS TSPI_lineGetDevCaps( TSPI_lineGetDevCaps( DWORD dwDeviceID, DWORD dwTSPIVersion, DWORD dwExtVersion, LPLINEDEVCAPS lpLineDevCaps ); typedef struct linedevcaps_tag { DWORD dwTotalSize; DWORD dwNeededSize; DWORD dwUsedSize; DWORD dwProviderInfoSize; 0 DWORD dwProviderInfoOffset; Whatever Unimodem currently provides (e.g., Unimodem TAPI sevice provider) 0 DWORD dwSwitchInfoSize; 0 DWORD dwSwitchInfoOffset; 0 DWORD dwPermanentLineID; As provided by TSPI_providerInit DWORD dwLineNameSize; DWORD dwLineNameOffset; Registry supplied DWORD dwStringFormat; STRING_FORMAT_ASCII DWORD dwAddressModes; LINEADDRESS_ADDRESSID DWORD dwNumAddresses; as specified in registry DWORD dwBearerModes; LINEBEARERMODE_VOICE LINEBEARERMODE_PASSTHROUGH DWORD dwMaxRate; Registry supplied DWORD dwMediaModes; LINEMEDIAMODE_UNKNOWN LINEMEDIAMODE_AUTOMATEDVOICE LINEMEDIAMODE_INTERACTIVEVOICE LINEMEDIAMODE_DATAMODEM LINEMEDIAMODE_G3FAX DWORD dwGenerateToneModes; 0 DWORD dwGenerateToneMaxNumFreq; 0 DWORD dwGenerateDigitModes; LINEDIGITMODE_DTMF DWORD dwMonitorToneMaxNumFreq; 1 DWORD dwMonitorToneMaxNumEntries; 1 DWORD dwMonitorDigitModes; LINEDIGITMODE_DTMF LINEDIGITMODE_DTMFEND DWORD dwGatherDigitsMinTimeout; 0 DWORD dwGatherDigitsMaxTimeout; 0 DWORD dwMedCtlDigitMaxListSize; 0 DWORD dwMedCtlMediaMaxListSize; 0 DWORD dwMedCtlToneMaxListSize; 0 DWORD dwMedCtlCallStateMaxListSize; 0 DWORD dwDevCapFlags; LINEDEVCAPFLAGS_DIALBILLING LINEDEVCAPFLAGS_DIALQUIET LINEDEVCAPFLAGS_DIALDIALTONE 0 DWORD dwMaxNumActiveCalls; 1 DWORD dwAnswerMode; LINEANSWERMODE_NONE DWORD dwRingModes; 1 or 0 DWORD dwLineStates; LINEDEVSTATE_RINGING LINEDEVSTATE_CONNECTED LINEDEVSTATE_DISCONNECTED LINEDEVSTATE_INSERVICE LINEDEVSTATE_OUTOFSERVICE LINDEVSTATE_OPEN LINDEVSTATE_CLOSE LINEDEVSTATE_REINIT LINEDEVSTATE_TRANSLATECHANGE LINEDEVSTATE_REMOVED DWORD dwUUIAcceptSize; 0 DWORD dwUUIAnswerSize; 0 DWORD dwUUIMakeCallSize; 0 DWORD dwUUIDropSize; 0 DWORD dwUUISendUserUserInfoSize; 0 DWORD dwUUICallInfoSize; 0 LINEDIALPARAMS MinDialParams; Minimum values for the dial parameters in milliseconds that can be set for calls on this line typedef struct linedialparams_tag{ DWORD dwDialPause; 0 DWORD dwDialSpeed; 0 DWORD dwDigitDuration; 0 DWORD dwWaitForDialtone; 0 } LINEDIALPARAMS MaxDialParams; Maximum values for the dial parameters in milliseconds that can be set for calls on this line typedef struct linedialparams_tag{ DWORD dwDialPause; 0 DWORD dwDialSpeed; 0 DWORD dwDigitDuration; 0 DWORD dwWaitForDialtone; 0 } LINEDIALPARAMS DefaultDialParams; Default values for the dial parameters in milliseconds to be used for calls on this line typedef struct linedialparams_tag{ DWORD dwDialPause; 0 DWORD dwDialSpeed; 0 DWORD dwDigitDuration; 0 DWORD dwWaitForDialtone; 0 } DWORD dwNumTerminals; 0 DWORD dwTerminalCapsSize; 0 DWORD dwTerminalCapsOffset; 0 DWORD dwTerminalTextEntrySize; 0 DWORD dwTerminalTextSize; 0 DWORD dwTerminalTextOffset; 0 DWORD dwDevSpecificSize; 0 DWORD dwDevSpecificOffset; 0 DWORD dwLineFeatures; LINEFEATURE_FORWARD LINEFEATURE_MAKECALL } LINEDEVCAPS A LINE_ADDRESSSTATE message with dwParam2 equal to LINEADDRESSSTATE_CAPSCHANGE is sent when configuration changes made by the user (for example, forwarding no longer in modem control panel UI) result in changes to one or more of the fields in the LINEADDRESSCAPS structure for the address. The application should should use TSPI_lineGetAddressCaps to read the updated structure. TSPI_lineGetLineDevStatus TSPI_lineGetLineDevStatus( HDRVLINE hdLine, LPLINEDEVSTATUS lpLineDevStatus ); typedef struct linedevstatus_tag { DWORD dwTotalSize; DWORD dwNeededSize; DWORD dwUsedSize; DWORD dwNumOpens; TAPI supplied. DWORD dwOpenMediaModes; TAPI supplied. DWORD dwNumActiveCalls; Set to 1 if you have an active call TAPI supplied. DWORD dwNumOnHoldCalls; 0 or 1 DWORD dwNumOnHoldPendCalls; 0 or 1 DWORD dwLineFeatures; LINEFEATURE_MAKECALL (address 0 only) LINEFEATURE_FORWARD DWORD dwNumCallCompletions; 0 DWORD dwRingMode; 0 DWORD dwSignalLevel; 0xffff DWORD dwBatteryLevel; 0xffff DWORD dwRoamMode; LINEROAMMODE_UNAVAIL DWORD dwDevStatusFlags; LINEDEVSTATUS_INSERVICE LINEDEVSTATUS_CONNECTED DWORD dwTerminalModesSize; 0 DWORD dwTerminalModesOffset; 0 DWORD dwDevSpecificSize; 0 DWORD dwDevSpecificOffset; 0 } LINEDEVSTATUS TSPI_lineGetID TSPI_lineGetID( HDRVLINE hdLine, DWORD dwAddressID, HDRVCALL hdCall, DWORD dwSelect, LPVARSTRING lpDeviceID, LPCSTR lpszDeviceClass ); The following table shows the values filled for lpDeviceID for TSPI_lineGetID: DEVICE CLASSTSPI_lineGetIDWAVE/INMM IDWAVE/OUTMM IDTAPI/LINEIts own IDTAPI /PHONEPhone associated with LineCOMMName of ModemCOMM/DATAMODEMDWORD handle followed by name of modem TSPI_lineGetNumAddressIDs TSPI_lineGetNumAddressIDs( HDRVLINE hdLine, LPDWORD lpdwNumAddressIDs ); Returns the number specified in the registry. TSPI_lineGetStatusMessages TSPI_lineGetStatusMessages( HLINE hLine, LPDWORD lpdwLineStates, LPDWORD lpdwAddressStates ); lpdwAddressStates supported are: LINEADDRESSSTATE_OTHER LINEADDRESSSTATE_DEVSPECIFIC LINEADDRESSSTATE_INUSEZERO LINEADDRESSSTATE_INUSEONE LINEADDRESSSTATE_INUSEMANY LINEADDRESSSTATE_NUMCALLS LINEADDRESSSTATE_FORWARD LINEADDRESSSTATE_CAPSCHANGE TSPI_lineMakeCall When TSPI_lineMakeCall is called, LineVoiceDialStart, LineVoiceDialNumber, and LineVoiceDialComplete are performed. TSPI_lineMonitorDigits TSPI_lineMonitorDigits( HDRVCALL hdCall, DWORD dwDigitModes ); dwDigitModes supported are: LINEDIGITMODE_DTMF LINEDIGITMODE_DTMFEND TSPI_lineMonitorMedia TSPI_lineMonitorMedia( HDRVCALL hdCall, DWORD dwMediaModes ); dwMediaModes supported are: LINEMEDIAMODE_AUTOMATEDVOICE LINEMEDIAMODE_INTERACTIVEVOICE LINEMEDIAMODE_DATAMODEM LINEMEDIAMODE_G3FAX TSPI_lineSetDefaultMediaDetection TSPI_lineSetDefaultMediaDetection( HDRVLINE hdLine, DWORD dwMediaModes ); dwMediaModes supported are: LINEMEDIAMODE_AUTOMATEDVOICE LINEMEDIAMODE_INTERACTIVEVOICE LINEMEDIAMODE_DATAMODEM LINEMEDIAMODE_G3FAX TSPI_lineSetStatusMessages TSPI_lineSetStatusMessages always returns success. TAPI does the message filtering. Phone Device A phone device has been defined to allow applications to monitor and control the hookswitch mode of the handset, speakerphone, and/or headset. On some modems, the phone and line devices are related (for example, when the handset is taken off hook, the speaker phone is automatically disabled). The overall strategy is to monitor the handset and line where possible. If the handset is lifted when the speaker is active, LineSetSpeakerOff is used to enable monitoring of the line. If the handset is subsequently replaced without re-enabling the speaker, LineVoiceMonitor is used to disconnect the call. The following sections describe the support in the TSP for the phone device: The first section lists functions that are not implemented in the Unimodem TSP. The second sections lists functions that will be implemented in the usual way (no noteworthy aspects to this implementation). The third section lists functions that will be implemented but require some description of the proposed implementation. Phone Device Functions not Implemented Following is the list of functions for phone devices that are are not supported. These functions will return PHONEERR_OPERATIONUNAVAIL: TSPI_phoneConfigDialog TSPI_phoneDevSpecific TSPI_phoneGetButtonInfo TSPI_phoneGetData TSPI_phoneGetDisplay TSPI_phoneGetExtensionID TSPI_phoneGetLamp TSPI_phoneGetRing TSPI_phoneNegotiateExtVersion TSPI_phoneSetButtonInfo TSPI_phoneSetData TSPI_phoneSetDisplay TSPI_phoneSetLamp TSPI_phoneSetRing Phone Device Functions with Usual implementation Following is the list of functions for phone devices that are implemented in the usual way (no noteworthy aspects to this implementation): TSPI_phoneClose TSPI_phoneGetIcon TSPI_phoneNegotiateTSPIVersion TSPI_phoneSelectExtVersion Phone Device Functions with Described Implementation Following is the list of functions for phone devices that will be implemented but require some description of the proposed implementation. TSPI_phoneGetDevCaps TSPI_phoneGetDevCaps( DWORD dwDeviceID, DWORD dwTSPIVersion, DWORD dwExtVersion, LPPHONECAPS lpPhoneCaps ); Following is the typedef for PHONECAPS. Interspersed in the typedef are, where appropriate, descriptions of the possible values which the various parameters can take on. typedef struct phonecaps_tag{ DWORD dwTotalSize; DWORD dwNeededSize; DWORD dwUsedSize; DWORD dwProviderInfoSize; DWORD dwProviderInfoOffset; The service provider could add a canned Microsoft string here. DWORD dwPhoneInfoSize; DWORD dwPhoneInfoOffset; The service provider could add another registry entry (say \LineDeviceIdentification) to capture a string describing the voice modem. It would be returned here. DWORD dwPermanentPhoneID; Comes from TSPI_providerInit. DWORD dwPhoneNameSize; 0 DWORD dwPhoneNameOffset; 0 DWORD dwStringFormat; STRINGFORMAT_ASCII DWORD dwPhoneStates; PHONESTATE_OTHER PHONESTATE_OWNER PHONESTATE_MONITORS PHONESTATE_HANDSETHOOKSWITCH PHONESTATE_SPEAKERHOOKSWITCH PHONESTATE_SPEAKERVOLUME PHONESTATE_REINIT DWORD dwHookSwitchDevs; PHONEHOOKSWITCHDEV_HANDSET PHONEHOOKSWITCHDEV_SPEAKER DWORD dwHandsetHookSwitchModes; PHONEHOOKSWITCHMODE_ONHOOK PHONEHOOKSWITCHMODE_MICSPEAKER PHONEHOOKSWITCHMODE_UNKNOWN DWORD dwSpeakerHookSwitchModes; PHONEHOOKSWITCHMODE_ONHOOK PHONEHOOKSWITCHMODE_SPEAKER PHONEHOOKSWITCHMODE_MICSPEAKER DWORD dwHeadsetHookSwitchModes; 0 DWORD dwVolumeFlags; PHONEHOOKSWITCHDEV_SPEAKER DWORD dwGainFlags; PHONEHOOKSWITCHDEV_SPEAKER DWORD dwDisplayNumRows; 0 DWORD dwDisplayNumColumns; 0 DWORD dwNumRingModes; 0 DWORD dwNumButtonLamps; 0 DWORD dwButtonModesSize; 0 DWORD dwButtonModesOffset; 0 DWORD dwButtonFunctionsSize; 0 DWORD dwButtonFunctionsOffset; 0 DWORD dwLampModesSize; 0 DWORD dwLampModesOffset; 0 DWORD dwNumSetData; 0 DWORD dwSetDataSize; 0 DWORD dwSetDataOffset; 0 DWORD dwNumGetData; 0 DWORD dwGetDataSize; 0 DWORD dwGetDataOffset; 0 DWORD dwDevSpecificSize; ? DWORD dwDevSpecificOffset; ? } PHONECAPS TSPI_phoneGetGain TSPI_phoneGetGain( HDRVPHONE hdPhone, DWORD dwHookSwitchDev, LPDWORD lpdwGain ); TSPI_phoneGetGain returns the value last set with TSPI_phoneSetGain, regardless of whether there is a current active call. Valid values for the dwHookSwitchDev parameter: PHONEHOOKSWITCHDEV_SPEAKER TSPI_phoneGetHookSwitch TSPI_phoneGetHookSwitch( HDRVPHONE hdPhone, LPDWORD lpdwHookSwitchDevs ); PHONEHOOKSWITCHDEV_HANDSETthe state of the handset will be tracked using the local handset events to the extent possible and reported as: PHONEHOOKSWITCHMODE_ONHOOK PHONEHOOKSWITCHMODE_MICSPEAKER PHONEHOOKSWITCHDEV_SPEAKERthe state of the speaker will be tracked based upon software operations since some modems do not report valid state information (i.e., the handset automatically disables the speakerphone which means the state of the speaker is not always valid). PHONEHOOKSWITCHMODE_ONHOOK PHONEHOOKSWITCHMODE_SPEAKER PHONEHOOKSWITCHMODE_MICSPEAKER TSPI_phoneGetID TSPI_phoneGetID( HDRVPHONE hdPhone, LPVARSTRING lpDeviceID, LPCSTR lpszDeviceClass ); The following table shows the values filled in for lpDeviceID for TSPI_phoneGetID: DEVICE CLASSTSPI_phoneGetIDWAVE/INMM IDWAVE/OUTMM IDTAPI/LINELine ID Associated with PhoneTAPI /PHONEIts own ID TSPI_phoneGetStatus TSPI_phoneGetStatus( HDRVPHONE hdPhone, LPPHONESTATUS lpPhoneStatus ); Following is the typedef for PHONESTATUS. Interspersed in the typedef are, where appropriate, descriptions of the possible values which the various parameters can take on. typedef struct phonestatus_tag{ DWORD dwTotalSize; DWORD dwNeededSize; DWORD dwUsedSize; DWORD dwStatusFlags; PHONESTATUSFLAGS_CONNECTED DWORD dwNumOwners; TAPI supplied DWORD dwNumMonitors; TAPI supplied DWORD dwRingMode; 0 DWORD dwRingVolume; 0 DWORD dwHandsetHookSwitchMode; May not be completely reliable. PHONEHOOKSWITCHMODE_ONHOOK PHONEHOOKSWITCHMODE_MICSPEAKER DWORD dwHandsetVolume; 0 DWORD dwHandsetGain; 0 DWORD dwSpeakerHookSwitchMode; May not be completely reliable. PHONEHOOKSWITCHMODE_ONHOOK PHONEHOOKSWITCHMODE_SPEAKER PHONEHOOKSWITCHMODE_MICSPEAKER DWORD dwSpeakerVolume; Per the last phoneSetVolume(PHONEHOOKSWITCHDEV_SPEAKER) DWORD dwSpeakerGain; Per the last phoneSetGain(PHONEHOOKSWITCHDEV_SPEAKER) DWORD dwHeadsetHookSwitchMode; 0 DWORD dwHeadsetVolume; 0 DWORD dwHeadsetGain; 0 DWORD dwDisplaySize; 0 DWORD dwDisplayOffset; 0 DWORD dwLampModesSize; 0 DWORD dwLampModesOffset; 0 DWORD dwOwnerNameSize; DWORD dwOwnerNameOffset; TAPI supplied? DWORD dwDevSpecificSize; 0 DWORD dwDevSpecificOffset; 0 } PHONESTATUS TSPI_phoneGetVolume TSPI_phoneGetVolume( HDRVPHONE hdPhone, DWORD dwHookSwitchDev, LPDWORD lpdwVolume ); PHONEHOOKSWITCHDEV_HANDSETreturn PHONEERR_OPERATIONUNAVAIL. PHONEHOOKSWITCHDEV_SPEAKERthe previous volume is returned. TSPI_phoneOpen TSPI_phoneOpen can not be called, nor any of the phone device functions used, until a line is open. This differs from TAPI, which says you should be able to open your phone device at any time, regardless of the state of any line device. If an application tries to open the phone before the line, PHONEERR_OPERATIONFAILED is returned. If the line is closed before the phone, this will nullify the phone device, and all subsequent calls to phone functions will return PHONEERR_OPERATION FAILED. TSPI_phoneSetGain TSPI_phoneSetGain( DRV_REQUESTED dwRequestID, HDRVPHONE hdPhone, DWORD dwHookSwitchDev, DWORD dwGain ); TSPI_phoneSetGain sets the gain of the microphone of the specified phones hookswitch device when there is an active call. If there is not an active call when this function is called, the gain will be set when a call becomes active. Valid values for the dwHookSwitchDev parameter: PHONEHOOKSWITCHDEV_SPEAKER TSPI_phoneSetHookSwitch TSPI_phoneSetHookSwitch( DRV_REQUESTID dwRequestID, HDRVPHONE hdPhone, DWORD dwHookSwitchDevs, DWORD dwHookSwitchMode ); TSPI_phoneSetHookSwitch turns the speakerphone speaker and mic on and off. It will only do this when there is an active call. This function does not set the telephone line on and off-hookthis can not be done. PHONEHOOKSWITCHDEV_SPEAKER PHONEHOOKSWITCHMODE_ONHOOK LineSetSpeakerOff PHONEHOOKSWITCHMODE_SPEAKER SpeakerMuteOn PHONEHOOKSWITCHMODE_MICSPEAKER LineSetSpeakerOn Note: The TSP must maintain sufficient status information such that the state of the speaker can always be restored and the volume re-established. TSPI_phoneSetStatusMessages TSPI_phoneSetStatusMessages always returns success. TAPI does the message filtering. TSPI_phoneSetVolume TSPI_phoneSetVolume( DRV_REQUESTID dwRequestID, HDRVPHONE hdPhone, DWORD dwHookSwitchDev, DWORD dwVolume ); PHONEHOOKSWITCHDEV_HANDSET Return PHONEERR_OPERATIONUNAVAIL. PHONEHOOKSWITCHDEV_SPEAKER The desired volume / Divider + Offset is stored for the next speaker activation and LineSetVolume is used to load the new volume. Service Provider Functions The following Service Provider functions will be implemented in the usual way (no noteworthy aspects to this implementation). TSPI_providerConfig TSPI_providerInit TSPI_providerInstall TSPI_providerRemove TSPI_providerShutdown TSPI_providerEnumDevices (usual implementation for a single line, single phone TSP). TSPI_providerCreateLineDevice TSPI_providerCreatePhoneDevice Operator Agent Windows 95 does not have a call discrimination process for inbound data, fax, and voice calls. Currently, a single application takes all incoming calls of unknown type and drops calls it is not interested in. Sections  REF _Ref320605582 \n 5.1.1 through  REF _Ref320605610 \n 5.1.4 describe current behavior of Windows 95 specifically for four different kinds of modems. Section  REF _Ref339869077 \n 5.2 describes two solutions to the inbound call discrimination problem for voice modems: Distinctive Ringing the Operator Agent, a new Unimodem V component. The Operator Agent addresses the problem by answering incoming calls of unknown media mode and routing them, based on DTMF input from the caller or on a pre-selected priority list, to the appropriate application. Data, Fax Modems [+FCLASS = 0,1,(2)] For data/fax modems (no voice), the adaptive answer capability of data/fax modems, where the receiving modem sends a data modem signal out (answerback tone 2100 Hz) and waits to see if a data modem on the other end responds, is used in Windows 95 to hand off calls from Remote Network Access to At Work Fax. This provides no benefit for modems that include voice capability. Data, Fax, and Voice Modems [+FCLASS = 0,1,(2),8] In typical analog telephony environments, without using distinctive ringing or caller ID, an inbound calls media mode (data, fax, voice, voiceview) is unknown until after the call has been answered and the media stream filtered to make a determination. This is because inbound data and voice calls (and some fax calls) do not present tones that allow Unimodem to determine the type of call and offer it to the intended destination application. Tones can not be sent out by the receiving modem, as this would be objectionable to a human on the other end should it be a voice call. Data, Fax, Voice, VoiceView Modems [+FCLASS = 0,1,(2),(8), 80] The usage model for VoiceView is that calls start out as interactive voice, then briefly switch to VoiceView mode (+FCLASS = 80) during the course of the call. Because the Operator Agent will never answer the call in +FCLASS=80 (only in +FCLASS=8), the same issues apply as for data/fax/voice modems above in Section  REF _Ref320605697 \n 5.1.2. Simultaneous Voice Data (SVD) modems [+FCLASS = 0,(1),(2),8] SVD calls start out as either voice or data calls, so the same issues apply as for data/fax/voice modems above in Section  REF _Ref320605697 \n 5.1.2. Inbound Call Discrimination Solutions for Voice Modems This section describes two solutions to the inbound call discrimination problem for voice modems: Distinctive Ringing the Operator Agent, a new Unimodem V component. Distinctive Ringing With Distinctive Ringing, the user can map a unique ring pattern to a specific type of call (for example, a long ring is always voice, a long-long ring pattern is always data, a long-short-long ring pattern is always fax). Unimodem V will then use the Distinctive Ring information from the modem to determine media mode. This way, the media mode is known and set before the call is answered, and the intended destination app can answer it. This solution is not sufficient, since most users will not have Distinctive Ringing. Operator Agent For users without Distinctive Ringing, described above, the Operator Agent will answer inbound calls of unknown media mode and route them to the appropriate application. The following sections describe: The basic functionality for the Operator AgentSection  REF _Ref320605725 \n 5.2.2.1 Other requirements of the Operator AgentSection  REF _Ref331915973 \n 5.2.2.2 Limitations REF _Ref320605747 \n 5.2.2.3 Operator Agent User InterfaceSection  REF _Ref320605755 \n 5.2.2.4 Requirements for data, fax, and voice apps to work with the Operator AgentSection  REF _Ref320605767 \n 0 Operator Agent Functionality The basic functionality for the Operator Agent is as follows: If more than one kind of media mode (data, fax, or voice) is being monitored by applications answer all calls of lineMediaMode=Unknown. Pause 1 second to call lineMonitorMedia and attempt to detect incoming fax or data tones. If fax or data tones are detected, hand off to the monitoring fax or data application. Play a greeting that tells the caller to enter a DTMF tone to indicate whether they are attempting to make a voice, fax, or data call. If at any time during the greeting, up until a DTMF is pressed, Unimodem detects and reports fax or V.34 data tones, the Operator will stop playing the greeting and lineHandoff the call to the fax or data app. If the appropriate app is not running, drop the call. If no fax or V.34 data tones are detected then the call is either a data call from a non-V.34 modem, a voice call, or a manual fax call (user dials with handset, waits until other end answers, then presses send). DTMF input from the caller is handled as follows: if at any time valid DTMF input is detected stop the greeting if it is not already finished, and lineHandoff the call to the appropriate app if invalid DTMF detected at any time (during or after the greeting) ignore it and follow same steps as for no DTMF described below. if no DTMF detected wait 5 seconds after completion of the greeting, then lineHandoff the call according to the media mode priority order chosen by the user in the Operator Agent setup wizard. The default order is: data voice fax If an appropriate app is not running, that media mode is skipped and the first one for which an app is running is chosen. Other Requirements The user must be able to select a priority sequence for media mode handoffs. This priority sequence is used in two situations: when the Operator Agent greeting is turned off but the Operator Agent is still handing off calls (see 2. below) when no valid DTMF is detected after the Operator Agent greeting plays (see 3. below) The user must be able to disable the Operator Agent greeting and handoff calls according to the users prioritized list of media modes. An example of how this might be useful: if the user expects only data calls from a V.34 modem, fax calls with fax tones, and voice calls, and doesnt want to force voice callers through two greetings (the Operators and the TAMs). Disabling the greeting still keeps the Operator in the loop to route (based on tones) data or fax calls if they should arrive. In is case, the user would set Voice as the highest priority media to receive incoming unknown calls, and disable the Operator Agent greeting. The Operator Agent would then simply hand off the call to the TAM, but would not play its outgoing message. There will be a 2 second pause before the handoff to the TAM occurs, during which time V.34 data or fax tones will cause a handoff to the appropriate app. If the target of the handoff is not running, the Operator Agent plays an Im sorry message (either pre-recorded or user-recorded). This requirement only applies if the caller explicitly selected a destination. If the target of the handoff was defaulted to because there was no DTMF input from the caller, then the Operator Agent just tries the next service, in priority order, until one succeeds. The outgoing greeting should not be played if only one kind of app is running (data, fax, or voice). In this case, the unknown call is passed through, unanswered, to whatever app is running. Once the setup wizard has been run, the Operator Agent will be launched by the TSP automatically when the Unimodem TSP is first initialized via the TSPI_ProviderInit() function call and will always run henceforth unless explicitly turned off by the user through the tray. Once turned off, the Operator can be restarted through Start/Programs/Accessories/Operator. Limitations Following are limitations of the Operator agent: For voice calls where another (data or fax) app is also running and the Operator Agent greeting has not been disabled, the caller has to go through 2 greetings to get to the answering machine. This is a usability issue for voice apps. There is no multiple line support in the Operator Agent. It monitors only the first line it finds that supports LINEMEDIAMODE_AUTOMATEDVOICE. Unimodem will only report LINEMEDIAMODE_AUTOMATEDVOICE for those voice modems that it supports. Hence, if one line has a data/fax only modem and another has a voice modem, the data/fax only modem is ignored. If more than one line has a voice modem, only the first line found is monitored. The solution will not always work for calls from pulse phones (for example, if a caller wants to leave voice mail but data or fax is the #1 priority media mode to receive handoffs when no DTMF is entered) User Interface The User Interface for the Operator Agent consists of the following A Wizard to guide initial setup of the Operator Agent A tray notification icon to indicate the Operator Agents status A dialog indicating the status of the Operator A properties sheet that allows changes to the Operator Agent configuration to be made Each of these UI components is described below. Wizard A wizard will set up the Operator Agent before it can be used. The wizard can be accessed in one of two ways: By launching Operator in Programs|Accessories. This runs the wizard if it has not already been run, and launches the Operator Agent for the first time. MS Phone will have a help topic that indicates that an Operator Agent is available to answer incoming calls, and asks if the user would like to set it up. If so, the wizard is automatically run and the Operator Agent launched for the first time. Subsequent changes to the Operator Agent configuration will be made in the Microsoft Operator Agent Properties sheet (described below). Following are the wizards functions: Setting number of rings before the Operator Agent answers (valid range should be 1 - 20). Each time a new call is offered, the Operator first checks the number of rings via lineGetNumRings. If the return value is -1 (not set by another application), then the number of rings entered in the Operator Agents UI is used. If lineGetNumRings returns a valid number, then the Operator Agent will use that number. Recording of outgoing Greeting (pre-recorded or user-recorded). Recording of failed call message, telling caller that destination app selected with DTMF is not running (pre-recorded or user-recorded). Selection of call routing priority sequence for media mode handoffs in the case of calls with no DTMF input or when the Operator Agents outgoing greeting has been disabled. Tray Notification Icon The Operator Agent tray notification icon appears as a telephone if the Operator Agent is enabled; or a telephone with a red circle and x it if it is disabled: Enabled:  EMBED Package  Disabled:  EMBED Package  Right clicking on the icon brings up the following menu that allows the user to either go to the Operator Agent status dialog that is also reached by left double clicking on the icon (Open), suspend the Operator (change its status to Idle, not monitoring line), or exit the Operator.  EMBED Word.Picture.6  Status Dialog The Operator Agent status dialog is reached either by selecting Open in the menu reached by right clicking on the tray notification icon, or by left double clicking on the tray notification icon. The Operator Agent dialog, shown below, will indicate one of the current statuses: Idle, not monitoring line (either suspended or only one kind of data/fax/voice app running) Monitoring line, waiting for call (more than one kind of data/fax/voice app running and operator not suspended) Handoff successful to FAX (call has been handed off to fax app, this status remains for the duration of the fax call) Handoff successful to Data application (call has been handed off to data app, this status remains for the duration of the data call) Handoff successful to Answering Machine (call has been handed off to voice app, this status remains for the duration of the voice call) Call answered (operator has answered the call, and is in the process of playing its greeting and performing call discrimination) Incoming call, line ringing (an incoming call is ringing and has not yet been answered by the Operator) Call active (there is an active call on the line that the Operator did not hand off) The Operator Agent dialog also allows the Operator to be enabled/disabled, and the outgoing greeting to be turned on or off.  When this dialog is started, the focus should be on the Let Operator answer my calls check box. OK should be the default pushbutton. The Tab order is as follows: Let Operator answer my calls Play / Don't play group. The user should be able to use arrows to get from one to the other. Properties OK Cancel (Cancel becomes default push button) Apply (Apply becomes default push button) Back to beginning (OK becomes default push button). The status edit box should not be a tab stop, since it is read only. Properties Sheet The Operator properties sheet, shown below, is reached by pressing the Properties button in the Microsoft Operator Agent dialog box. It allows the user to change individual settings initially set in the Operator wizard.  Pressing any of the 3 buttons above will bring up the corresponding parts of the Operator wizard. Operator Agent Setup and Registry Entries Unimodem V setup will: copy all Operator files and install Operator in Start|Accessories|Operator write the Operator and OperatorError values into the registry The wizard will add the OperatorPath and ErrorPath values the first time it runs (using the directory portions of the filenames). If the registry entries have been corrupted or deleted, an error message will say to re-run setup. All of the following are string values in the registry under HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft Operator: Operatorthe full path of the default operator greeting. Setup sets it in the registry initially, and the wizard may subsequently change it. OperatorErrorthe full path of the default error message. Setup sets it in the registry initially, and the wizard may subsequently change it. OperatorPaththe directory containing canned operator greetings (\media\operator). The Operator wizard sets this value. It is needed because Operator might point to a .wav file in another location, yet we still need to know where the canned greetings are. ErrorPaththe directory containing the pre-recorded error messages (\media\operatorerror). The Operator wizard sets this value. It is needed because Operator might point to a .wav file in another location, yet we still need to know where the pre-recorded error messages are. RunOperatorset to 0 if the Operator has been run before on the machine, 1 if it has not. OperatorInfoindicates choices made in the setup of the Operator, such as number of rings to answer on and the priority of media modes. PreferredDeviceindicates the users current choice of modems in the Connect using modem field of Microsoft Operator Agent Properties that the Operator should monitor. RunOperatorWizardindicates whether the Operator wizard has already been run. This is needed because the wizard is only run one time (thereafter, changes to the Operator configuration are made in Microsoft Operator Agent Properties. Requirements of other apps This section summarizes aspects of the Operator Agent that data, fax, and voice applications need to be aware of. Comm apps must be able to accept a handoff from the Operator. Cooperating apps are an assumption (for example, another app will not take over a call inappropriately). When a call that comes in and a voice application is monitoring, the voice application should put up its usual User Interface for an incoming call (answer, screen, send to AM). This obviates the need for the Operator Agent to have this kind of UI. Comm apps must be able to determine if an incoming call is a normal call (modem still on hook) or a "hot" call (modem off hook), so they can use different initialization strings in each case (for example, if the call has not already been answered, the app may want to hang up the modem as part of its initialization process). The following table indicates how an app (fax) can make this determination: LINECALLSTATE_LINEMEDIAMODE_Operator Agent is not running because fax is only kind of comm app running.OFFERINGUNKNOWNIncoming call not answered by Operator Agent, Distinctive RingingOFFERINGG3FAXFax is first priority media mode to accept a handoff if either the Operator Agent outgoing greerting is not played or no DTMF is detected.CONNECTEDUNKNOWNIncoming call answered by Operator Agent Operator Agent has determined it is a faxCONNECTEDG3FAX Functional Requirements for Wave Drivers Telephone Line Wave Devices This section describes requirements and recommendations of wave drivers connected to the telephone line. The following items are for both the wave-in and wave-out device. Requirements: Support 8kHz, mono, 16-bit PCM format wave data. PC wave I/O (multimedia wave in and wave out) should be independent from wave I/O for the telephone line. If they are not independent, the wave driver must implement a scheme where the wave I/O from the telephone line preempts or is not blocked by the wave I/O from the PC wave devices. Line-in must not be mixed with output to the telephone line. Recommendations: Support 11.025 kHz, 22.05 kHz, 44.1 kHz, mono, 8- and 16-bit PCM format wave data. Support IMA-ADPCM format wave data. Support low priority. This allows Voice-Aware applications to listen all the time without having to use push-to-talk. It allows scenarios like wave-out (system events, game audio) when listening for user commands. This is for multimedia audio, not for a wave driver attached to the phone line. Low priority mode should not be in a serial port wave driver. Setup & Installation The following steps will install the Unimodem/V software. They accommodate both Plug and Play and non-Plug and Play modems. These steps assume that the modem hardware has already been installed per the manufacturers instructions. Right click on the file unimodv.inf, then select install from the menu. Restart your computer. In Control Panel, double-click System. Click on the Device Manager tab. Double click on the Modem icon. In the list, click your modem, and then click Remove. Click Refresh. If the modem is Plug and Play, Windows 95 will automatically detect your modem at this point. If your modem is not automatically detected, follow these additional three steps. In Control Panel, double-click Modems. If the Install New Modem wizard does not automatically start, Click Add Follow the instructions on your screen to detect your modem. Configuration Dialogs for CLASS Features This section describes the configuration dialogs that will be added as tabs to the Modems Control Panel (modem.cpl) for the support of Distinctive Ringing and Call Forwarding. Distinctive Ringing There are two kinds of modem support for Distinctive Ringing: Ring quantities (1, 2, and 3 for single, double and triple rings). This doesnt fully support Distinctive Ringing from some companies; for example, US Wests Distinctive Ringing includes a long long ring for the main number, and a short short ring for one of the Distinctive Rings (only one of which can be supported by this kind of distinctive ringing since they both map to a quantity of two rings). Cadencescombinations of rings with long and short duration, and varying quantities. For example: long short short long long short long short Based on a registry entry indicating the kind of Distinctive Ringing the modem supports, one of the two following tabs will be loaded. User Interface for Distinctive Ringing with Cadences  Check Box The check box allows the user to indicate whether Distinctive Ringing is available on their phone line. If it is checked, this enables all other controls. Ring pattern This is a series of combo boxes that allow the user to choose the ring pattern associated with each Distinctive Ringing address. The dropdown list contains the following choices. A dot represents a short ring; a dash represents a long ring: None . - . . . - - . - - . . - . - . - . . - . - Initially, the Primary address box will contain ., Address one will contain -, and Address 2 will contain . .. The rest of the combo boxes will contain None. The user is not allowed to pick the same pattern for more than one address. Type of Call This is a series of combo boxes that allow the user to indicate the type of call that will be received on each distinctive ringing address. The dropdown lists contain the following choices: Unspecified (any type of call may be received) Data Fax Voice Initially, all of the combo boxes will contain Unspecified. User Interface for Distinctive Ringing with Ring Quantities  Check Box The check box allows the user to indicate whether Distinctive Ringing is available on their phone line. If it is checked, this enables all other controls. Ring pattern These indicate the three ring quantities available with this kind of Distinctive Ringing. Type of Call This is a series of combo boxes that allow the user to indicate the type of call that will be received on each distinctive ringing address. The dropdown lists contains the following choices: Unspecified (any type of call may be received) Data Fax Voice Initially, all of the combo boxes will contain Unspecified. Call Forwarding Tab  Check Box The check box allows the user to indicate whether Call Forwarding is available on their phone line. If it is checked, this enables all other controls. Activation Code Edit box that allows the user to enter the code that activates call forwarding. This box allows a maximum of 7 characters to be entered. Deactivation Code Edit box that allows the user to enter the code that deactivates call forwarding. This box allows a maximum of 7 characters to be entered. If the check box "This phone line has call forwarding" is checked, the OK button will be disabled until either both codes have been entered, the check box has been unchecked, or the user has pressed Cancel. Valid characters for each of the two edit boxes are: #, *, 0, 1, 2, 3, 4, 5, 6, 7, 8, and 9, comma, and W. If the user enters an invalid character, a system beep should be played. See section  REF _Ref339702252 \n 4.1.3.5 of this document for information on which type of Call Forwarding offerings from telephone companies are supported, and which are not.  TITLE \* MERGEFORMAT Voice Modem Functional Spec Revision  SUBJECT \* MERGEFORMAT 0.9  PRINTDATE \* MERGEFORMAT 07/15/95 5:53 PM PAGE  styleref "heading 1"Overview Microsoft Confidential Page  PAGE 1 /=onz:4": XX  9&j & &$TNPPMicrosoft PowerPoint & TNPPP & &TNPP  / 7O(45&h---$,d d--%%d%pArial0-.  2 \ VCOMM.386`hpxx(PPP & &`h-- "System-(-``--'(- $`Y=Y & &@H---@@--'- $@c[[ & &p((--((p@pArial0-. pArial0-.  2 UNIMODEM.386hh(xph`x(PPP & &'---'@pArial0-.  2  Port Device`X80(hPP(PP & &---@pArial0-.  2 ModemxXXP & &@ HH--- (-@`@--'(- $@Ac & &@H(--(-@@@--'(- $@!c & &@ HH-- O-@`@--'O- $@Ac & &@H(--O-@@@--'O- $@!c & & H--h  -`--'- $A & &(--h -@--'- $! & & 0(--d0O-  --'O- $ C)) & &`ph--dp(-@``--'(- $`+=+ & &@H--d-@@--'- $@c,, & &--@pArial0-.  2 Telephone LineXP(PXXXXP(X(XP & &=Arial0-.  62 Control calls from UNIMODEM.DLL:111,-- 0H:9B>:6B:11 & &[Arial0-.  92 0!Configuration calls from Comm API:1111-01,-,1G91GH:5 & &)FArial0-.  (2 cData I/O from Comm API:,,>1G91GG96 & &`(-- %``(-- $'3' & &@-- %@@ -- $'#' & & 8O-- % 00O-- $(( & &p(--(p@pArial0-.  2  Port Device`X80(hPP(PPpArial0-.  2 Driverh8(PP8 & &HO-- %(@@1O-- $@c)) & &H(-- %@@1(-- $@c(( & & -- %  1-- $(( & &@H---(-@ @--'(- $@c & &TNPP & --$ 8++<<+++ m>:Y  :   C (9ʦ??_???????????_??__?_?_?_?_?_???_????????_????????_????????_??ߟ?߿?????_?????_??_?__?_?_?_?_?__?______________?________?________?________?____ߟ_߿___?_______???_?????_?_______?_?_?_?_ߟ߿?_???_?????_?_______?_?_?_?_ߟ߿?_???_?????_?_______?_?_?_?_ߟ߿:%{!  &  Do C DoDo(oDʦ??_???????????_??__?_?_?_?_?_???_????????_????????_????????_??ߟ?߿?????_?????_??_?__?_?_?_?_?__?______________?________?________?________?____ߟ_߿___?_______???_?????_?_______?_?_?_?_ߟ߿?_???_?????_?_______?_?_?_?_ߟ߿?_???_?????_?_______?_?_?_?_ߟ߿F:#V)(p    X C XX(Xʦ  $$$(((,,,000444888<<<@@@DDDHHHLLLPPPTTTXXX\\\```dddhhhlllppptttxxx|||5B550O?55#\#5QkB!5c+G_?________?____ߟ_߿___?_______???_?????_?_______?_?_?_?_ߟ߿?_???_?????_?_______?_?_?_?_ߟ߿?_???_?????_?_______?_?_?_?_ߟ߿F:#V)(p    X C XX(Xʦ??_???????????_??__?_?_?_?_?_???_????????_????????_????????_??ߟ?߿?????_?????_??_?__?_?_?_?_?__?______________?________?________?________?____ߟ_߿___?_______???_?????_?_______?_?_?_?_ߟ߿?_???_?????_?_______?_?_?_?_ߟ߿?_???_?????_?_______?_?_?_?_ߟ߿F:#V)(p    X C XX(Xʦ??_???????????_??__?_?_?_?_?_???_????????_????????_????????_??ߟ?߿?????_?????_??_?__?_?_?_?_?__?______________?________?________?________?____ߟ_߿___?_______???_?????_?_______?_?_?_?_ߟ߿?_???_?????_?_______?_?_?_?_ߟ߿?_???_?????_?_______?_?_?_?_ߟ߿Root Entry FuDFN/WordDocumentQ ObjectPool*ʎʎSummaryInformation(      !"#$%&'()*+,-./0123456789:;<=>?M?TVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~@@@@@@@A AAA,AQA`AAAAAAAAB BBBBKCZCdCvCCCCCCC1E@EaElEEEEE8FKFUFhFsFFFFFFFFGGHHHII!I+I6I@INImIIIIIIIIIIIJJ.J8JOJYJuJJJJJJJ/KDKEKZKeKkKuKKKKKKKKKKKLL(L=LCLWLbLxLLLLLL>MEMFMLMMMbMDocumentSummaryInformation8 _869047212'()*+,-./0%Fʎ`>?@_869047211GHIJKLMNOP F`^_`_876571724ghijklmnop F`@O&~՜.+,0HP\dl t| azz @ Voice Modem Functional SpecࡱOh+'0 ( P \ h tVoice Modem Functional Spec.9@MSUDNHP LaserJet 4Si ;d Strike HP 4 Si@w XX@MSUDNHP LaserJet 4Si ;d   a RZ[\]^b"#|}0189XY  !"$&'()*+,-./01234567:<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcehijklmnopqrstuvwxyz}gi sufhZ \  e g   x z A C   af &+,3~fgrsG!= ]E _`F xJ K 9L M N GO P Q OR S T oU V /X Z \  ^ ` % b d f ~ h j r l n  p } r t *v x z Y| ~ ) # |  ! A  I  ȳ  }  ؉ " A*" z}~Times New Roman Symbol &ArialCG TimesTimesTimes New Roman5Courier Newtimesroman"Helvetica Tms Rmn5Lucida Sans Typewriter"CV h e+4%u|!*@?!#*'q$V XC:\Weci@tspecWO Avi Belinsky=A3enMicrosoft Word for Windows 95@0@JS@ఁ@*!ࡱ> ՜.+,0HP`hp x Tazz$ ࡱ> "*.8DJNOghxyz 789;]^yz-.EFGIjk56MNOQcd uDaU[ uDU[auDU[9:UVmnoq,-/1`a|}  H I d e | }  " # % ' T U p q G H c d { | ~ uDaab ; < W X o p r t     F G b c z { }  '(*,YZuv"#>?VWY[&')+,-  uD uDaa` %&'("" # # # #q'r'''''3333344V4X4`4l4r4t4y44444444444@5[5]5k5v5555555555555 6,6;6=6K6O6]6i6x66666667 777 7(72787 BEF+EVU uD3KuD3avKuDuD uD3KuD3avKR87;7@7L7Y7\7a7m7x7{777777777788(>5>>>>>??J?[?`?a?l?n?s?t???????????????@ @@@!@$@)@*@;@K@P@Q@d@w@@@@@@@@AAA%A0Am?mRm}mmmmmmmmmmmmmmmnn n n"n&n+n,nHnLnQnRn_nannnnnnnnnnnnooo pppp#p(p)p8p?[?n????????@ @"@$@=@K@f@t@@@!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!8hhh( h 4h @@AA2AHA\A_A(BABZBvBBBBBBCCCCDD.DKDbDDDDDDDDEEE7ESErEEEEEF!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!+FF-FEF\F^FxFzFFFFFFFGGEGlGGGGGH+HBH[HnHHHHHHHI2IMIOIjImIIIIIII!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!,II J0JMJjJJJJK,KAK`K~KKKKK L L#L%L8L:LPLgLLLLLLLLLLLMM0M2MQMSMwMyMM!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!,MMMMMNN.NEN\NmNNNNNNNO*OEOdOOO>PdPwPPPPPPPPPQ0QJQXQsQuQQQQ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*QQQ R&R(RARCR\RwRRRRRRRSS1SSTUUUUUUVVVVVVW#W7W!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!`#7WLWgWuWwWWWWWWXWXgXXXXXYY.YEY[YrYYYYYYZZ=ZSZnZZZZZ][[[[[[[[!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!,[[[[[\&\6\S\i\k\~\\\\\\\\\]"]7]O]i]]h^~^^^^^^^_-_/_G_I_c_e_____!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!,_____ ` `+`-`I`a`|`~````````a0a2aOaQaparaaaaaaaa b b/b=b?bXbfbbbbb!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!,bbbbbcc c"c>c@c[c]czc|ccccccccc d(d*dCdIdddsddddddde%e7eJeoeeee!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!+eeee f%f@fUfoffffffggUglggggggh5hOhkhhhhhhhhhi2iMiiiliiiii!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!+iiiiIjKjcjejjjjjjjjk)k?kUkkkkkkkkkll;lZlrllllllllmm7m9mTmgm}m!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!,}mmmmmmmnn$n&nJnLnan}nnnnnnnnoo)o>oUooooooooo p p!p#p:p}X}q}}}~+~C~T~j~m~~~~~~~ &Cbz6Um!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" h 4h%ZuɅ!3Ec{ƆÇއ!^!!!!!!!.!!!!!!!!!!!!!!!!.!!!!!!.!!" h( 4h h 4h ʈ,/ډ 1Kg֊xNjɋ&C_xԌ ;[v֍ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!+ .NPeƎȎ02MOlnÏ׏ُ 46MOhj!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!,̐xÑܑ%)ϒ:[l}ŔȔ(89AGHQW!!!!!!!!!!!!!!!!!!!!!!!!!!!!!v v v v v l<$ r%WXbÕٕŖؖ/BPesܗ/1FHgv v v v v !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!l<$ r'ߘ.Cyə˙-/F_nʚߚ "%bÝޝ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!<)ޝ&)B]uޟ}Ѡ5Cdu%zբ 'Id!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^!'Τ9WvVy!!!!!!!!!|!z!u!T!   4h 4h.  4h" ( 4h h( 4h /aDRȯ (Kʳݴ!!.!!.!!.!!.!!^!!!!.!!.!!!!!!!!  < 4h<   4h  4hݴe~ܸ=չ!!!!!!!x!U!x!U!" ( 4h" 8( 4h" ( 4h  ( 4h.  ( 4h. չ!5$z!!!!!!q!N!N!" < 4h  < 4h." 8( 4h." ( 4h% 8( 4h zPaq, !!!!!!u!u!u!!q!N!N!" hP 4h.<  < 4h.  4h. h 4h." h< 4h. ,[Vp/o_!!!!!!!!!!!!!!!!A!A!!!!!!<( h 4h.  4h." hP 4h.`FS=1=@l !!!!!!!!!!!!!!!!!!v!!! h 4h" h< 4h  4h" ( 4h e/-_Hd}u&'s!!!!!!!!!!!!!!!!!!!!!!!!# l h^Y! h 4h. h 4hs|bltu (ev####!!!^!!!!!!!!! h 4h.h 4h. l h^Y!QfMM\ 3{z!!!!!!!!!!!!!!!!!^!!t!"  4h.  4h.  4h. h 4h.lyjqV )&bvx!!!!!!.!p!!!!! ! !!!!!!.!p!!!!!!!!!^!ph.BhB  4h"  4hx*P!!"#|}~!!!!!!!!!!!!(h`%$!.BhBOK @ Normalx]a ~@~ Heading 1Z 0(* 4 . U]a c 0@0 Heading 2 ( * c*@* Heading 3  ( * c4@4 Heading 4 x( *Ucx@x Heading 5T 0 4 .8 U]a cv@v Heading 6T 0 4 . ]a cx@x Heading 7T 0 4 . U]a cd@d Heading 8F 0< 4 .V]f @f Heading 9F P0< 4 .V]c"A@"Default Paragraph FontONormal 1hONormal 2ONormal 38* @"*Footer& HV]c,@2,Header( $V]c"@B" Normal IndentORNormal1OQbNormal2OarNormal3p2@2TOC 1x<h$ U]a c,@,TOC 2h<$@ ]a ,@,TOC 3<$ ]a ,@,TOC 48<$ ]a (@(TOC 5<$ *@*TOC 6<$ *@*TOC 7! c*@*TOC 8! c*@*TOC 9 x! c$'@$Annotation Referencec*@"*Annotation Text"V]a " @2"Index 4#8]a " @B"Index 3$]a " @R"Index 2%h]a & @b&Index 1 &$J]a (@q Line Number$&@$Footnote Referencece.@. Footnote Text)x ]a c$O$Code *hU]c O Code Mono+U]*O* Spec info ,0]a  O Extra Info-' \"O"" Definition .hOList 1/OList 00h3@List 31p2@"List 22"O2" List 1 Packed3"O!B" List 2 Packed4.OR. Spec title5H( Uc2Ob2Titlepage info6xVc,O, Figure title 7Vc8O8Revision History8 8p$@]a 0O0 Centered Bold9 U]a c(Or(Picture:xcJOJ OpenIssueHead';;10%-+U]$O$ OpenIssue <' 8 O NormalTable=&O&Question>&)')()))V0O0title document ?U]c(O( title info @])@ Page NumberOTermB<U*O2*KeciaC(](OR(Term1 D ]a c$OB$Def1 EPclOlSynVFJ0H`x  8Ph(@c"O"Tes Gtc OATerm2HOQDef2I0.O.Lb1JPcXOXEx>K$5 $ 0 <HT` ] a c O Le L`c .O.NsM(  ]a bc &O&Np1N(Pc* !!!!!!!!! ! ! ! ! !!!!!!!!!!!!!!!!!! !!!"!#!$!%!&!'!(!)!*~. ^<'+-18?lD8ILR]X+]`5ei:m-tw{12Ϗܔz/ݱP_& K  (  T!2 l!"#$%&5' (<)"/Ez}<JRr2 (u  - \ , / 8 #!|( ) 2jy3K^k  @ [ !q$$$<'''h((((+))"***J+c+z++++++,,1,?,U,r,,,,,,,-+-G-`-u-------...... /%/;/S/d///////09000141X1t1111112,2@2N2]2x22222=3K3334 4;4\4{44445'5*5666S7q777777i99:(;<[<n<<<<<<<<= ="=$===K=f=t====>>2>H>\>_>(?A?Z?v??????@@@@AA.AKAbAAAAAAAABBB7BSBrBBBBBCC-CEC\C^CxCzCCCCCCCDDEDlDDDDDE+EBE[EnEEEEEEEF2FMFOFjFmFFFFFFFF G0GMGjGGGGH,HAH`H~HHHHH I I#I%I8I:IPIgIIIIIIIIIIIJJ0J2JQJSJwJyJJJJJJKK.KEK\KmKKKKKKKL*LELdLLL>MdMwMMMMMMMMMN0NJNXNsNuNNNNNN O&O(OAOCO\OwOOOOOOOPP1PPQRRRRRRSSSSSST#T7TLTgTuTwTTTTTTUWUgUUUUUVV.VEV[VrVVVVVVWW=WSWnWWWWW]XXXXXXXXXXXXY&Y6YSYiYkY~YYYYYYYYYZ"Z7ZOZiZZh[~[[[[[[[\-\/\G\I\c\e\\\\\\\\\ ] ]+]-]I]a]|]~]]]]]]]]^0^2^O^Q^p^r^^^^^^^^ _ _/_=_?_X_f_________`` `"`>`@`[`]`z`|````````` a(a*aCaIadasaaaaaaab%b7bJbobbbbbbb c%c@cUcoccccccddUdldddddde5eOekeeeeeeeeef2fMfiflffffffffIgKgcgeggggggggh)h?hUhkhhhhhhhii;iZiriiiiiiiijj7j9jTjgj}jjjjjjjkk$k&kJkLkak}kkkkkkkkll)l>lUlolllllll m m!m#m:mzXzqzzz{+{C{T{j{m{{{{{{{| |&|C|b|z|||||||}6}U}m}}}}}~Zuɂ!3Ec{ƃÄބʅ,/چ 1KgևxLjɈ&C_xԉ ;[v֊ .NPeƋȋ02MOlnÌ׌ٌ 46MOhj̍xÎ܎%)Ϗ:[l}őȑ9HXÒْœؓ/BPesܔ/1FHgߕ.Cyɖ˖-/F_nʗߗ "%bÚޚ&)B]uޜ}ѝ5Cdu%z՟ 'IdΡ9WvVy/aDRȬ (Kʰݱe~ܵ=ն!5$zPaq,[Vp/o_`FS=1=@l e/-_Hd}u'u (evQfMM\ 3{zlyjqV )&bvx*P!5,,,,5$$$000000000000000000000$$$000000000000$$$$$$000000 BBB....B. BBB.B.BBB.B. 87BhIMQW4\`c7ilJq)tx{7ȔA= EFGHIJKLMNOPQRSTUVWXYZ[\]^8 ""-149@FIMQ7W[_bei}mptxz } Wޝݴչz, sx_`abcdefghijklmnopqrstuvwxyz{|}~Unknown Kecia BruceNgx79:]y-EGHj5MOPc9Umop,/0`|  Hd| "%&TpGc{~; W o r s    F b z } ~  ' * + Y u " > V Y Z  & ) * , %' q$$$_v|!$;A*AI|Ȱd{}iz|  2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@:::::4?Y]_{! !F _Toc339859817 _Toc321816569 _Toc339859818 _Toc321816570 _Ref322241063 _Toc339859819 _Toc321816571 _Toc339859820 _Toc321816575 _Toc339859821 _Toc321816576 _Toc339859822 _Toc321816615 _Toc330863849 _Toc339859823 _Toc339859824 _Toc321816616 _Toc339859825 _Toc321816617 _Toc339859826 _Toc321816618 _Toc339859827 _Toc321816619 _Toc339859828 _Ref339702252 _Toc321816620 _Toc339859829 _Toc321816621 _Toc339859830 _Toc321816622 _Toc339859831 _Toc321816623 _Toc339859832 _Toc310933030 _Toc321816624 _Toc339859833 _Ref339258241 _Toc339859834 _Toc321816634 _Toc319146735 _Ref320605582 _Toc321045814 _Toc339859835 _Toc319146736 _Ref320605596 _Ref320605697 _Toc321045815 _Toc339859836 _Toc319146737 _Toc321045816 _Toc339859837 _Ref320605610 _Toc321045817 _Toc339859838 _Toc339859839 _Ref339869077 _Toc319146739 _Toc321045819 _Toc339859840 _Ref339258233 _Toc339859841 _Ref320605725 _Ref320605737 _Ref331915973 _Ref320605747 _Ref320605755 _Ref320605767 _Toc339859842 _Toc321816635 _Toc339859843 _Toc321816636 _Toc339859844 _Toc321816637 _Toc339859845 _Toc339859846 _Toc339859847 _Toc339859848 _Toc339859849/ ^ @ @ $$$h(((**--003}}ƃƃބބvv/////DDD !bQQfb   !"#$%B&'()*+,-./0123456789:;<=>?@ACDEFGHIJKLM7    ? ? P Z $h(((((**..80803}}`````QQ #'33pbee u/79Dy } ,/jx ~3Je"m"P'W'_876571610       F@O& 7 _876571208'()*+,-./0  F 7?@>?@PICDEFGHIJKLMNOP UVWXY#L`METAdefghijklmnop  uvwxy<ZUCompObjhObjInfo WordDocumentSummaryInformation(DocumentSummaryInformation8 Ole$%&'()*+,-./0 56789f@PICDEFGHIJKLMNOP UVWXYdL`METAdefghijklmnop uvwxy;( CompObj9PObjInfo8Ole10Native%Ole PIC      L META$%&'()*+,-./0 56789~, @CompObjFGHIJKLMNOPUVWXY|P`ObjInfofghijklmnopuvwxy{Ole10NativegPIC LMETA  ,CompObjlINWORD\TEMPLATE\tspec.dotVoice Modem Functional Spec Avi Belinskyࡱ>  PBCDEFGHIJOleEntry PICocument $'LMETAPool 2CompObjnformation&(gObjInfo     " ObjectPool'()*+,-./0``>?@WordDocument!#SummaryInformation(Oh+'0  @ L X dpxFH Kecia Bruce6HcD Normal.dot Kecia Bruce2GMicrosoft Word for Windows 95@@@`@ ࡱ>  MܥhW eE '         P 1$ $ $ $ 4 B B B R T T T 6 ^ 2  X *P  B 4 B B B P R 4 $ R R R B 4 4 R hg B R R R Open Suspend Operator Exit Operator PAGE \# "'Page: '#' '"  NNX'!)0&!qx!Qx!Q%&'(>@ABDEu uDPPuD uDP\ uDa 'CDE~~K@Normala "A@"Default Paragraph Font$'@$Annotation Referencec @ Annotation Text Kecia Bruce%EKBE E EE!E\'F@HP LaserJet 4Si\\scanner\hpHPPCL5MSHP LaserJet 4SiHP LaserJet 4Si@w XX@MSUDNHP LaserJet 4Si ;d HP LaserJet 4Si@w XX@MSUDNHP LaserJet 4Si ;d 1Times New Roman Symbol &Arial"h% !* Kecia Bruce Kecia Bruce         FMicrosoft Word Picture MSWordDocWord.Picture.69qࡱ #&WordMicrosoft Word    -fff- fff"- "--Times New Roman4- 2 Open<*%*S-#2 uSuspend Operator.* *%**<*%%*-2 Exit Operator3*<*%%*-@Lࡱ>  MSuspendoC:\WINDOWS\TEMP\SUSPENDOC:\WINDOWS\TEMP\SUSPENDO6 &(( @s30;303303 ;wss  ? ;3030 s0p0;0w;s;s00sp;sp;p;0;03;03x;ss?w;?3330< `?|x`0?( 039?;s390 0?;?p;?0;p30xAࡱ>ࡱ>  M FPackagePackagePackage9qࡱ>  NE !  2<MS Sans Serif- eA ( < `?|x`0?  !A Ff ( h . !Suspendo!  -0ࡱLNEࡱ>  Mࡱ> Operator.icoC:\WINDOWS\TEMP\OPERATOR.ICOC:\WINDOWS\TEMP\OPERATOR.ICO6 &(( @s30;303303;wss?;3030s0p0;0w;s;s00sp;sp;p;0;03;03x;ss?w;?3330?'c?|x`0?( 030?;s3000?;?p;?0;p30x????;03p?c'ࡱ>  Mࡱ>  M FPackagePackagePackage9qࡱ>  E !  2HMS Sans Serif- eA p ( ?'c?|x`0?  !A Ff ( h . ! Operator.ico!$  -ࡱLEGࡱ>  Mࡱ> Oh+'0  8T lC:\WINWORD\TEMPLATE\Normal.dot Kecia Bruce Kecia BruceMicrosoft Word 6.02ࡱ>  Mࡱ>  M  FMicrosoft Word 6.0 Picture MSWordDocWord.Picture.69qࡱL07 ࡱ>  Mࡱ>  MܥhE e!^jjjj  1    6D6z6XW* D    jj    j  jjjj     Separate Audio Interface AT Commands Modem Wave Device Wave Wrapper MMSystem Unimodem NN+`(0#0&2"0('S%< 2!0(S%< 00&& 20()<Z20(<Z00& 00&,XW00&$ IH00&$<;00&2(9800&2(]KJ 00&2(00&2()(00&i-}0 0&)"!00&)00&)0 0&)lKJ 0 0&)00&i-NKJ 00&z+ih00&i-ih00&z+lKJ 00&z+0 0&)"0 0&d#YX00&8"YX00&8"ih20({K00&20(5KZ$--%% $  -- " ! u uDa!:;GHZ[hist}~5Fvi5K@Normala "A@"Default Paragraph Font':HS]`   (XL| <l,\L| > n @HP LaserJet 4Si\\scanner\hpHPPCL5MSHP LaserJet 4SiHP LaserJet 4Siw XX@MSUDKHP LaserJet 4Si ;d bFHP LaserJet 4Siw XX@MSUDKHP LaserJet 4Si ;d bF1Times New Roman Symbol &Arial"1h9%!* Kecia Bruce Kecia Bruceࡱ>  MPABCDEFGHIJNT      !"#$%&'()*+,-./0@3456789:;<=>PR\]^_abcdefg\ijklmnotqrstuvwxyz{|}~0 R/&WordMicrosoft Word  W  -Times New Romanr- - "-L  "--? -2 &*W MMSystemJJ.* %A'- "-/--;-2 L^ W Wave WrapperN%*%N%**%'- "-S /2--F ;>-%2 LSW Modem Wave DeviceJ**%AN%*%<%*%%'- "-i5--\A-2 RzW Unimodem<*A**%A' "--- "- $mo-- "--- "- $-- "--- "- $  )-- "--- "- $n&& -- "-- "-- "--- "- $ $uumm $]]UU $EE== $--%% $  -- "-m- "-mm- "-m--- $ $uumm $]]UU $EE== $--%% $  -- "--- "- $  )-- "- 5 -- "- $   ---- $   x x $ h h ` ` $ P P H H $ 7 7 / / $     $   -- "-  5 - "-;; - "-;--- $ $oogg $WWOO $??77 $'' $-- "-O- "-O+O- "-+O+-- "- $>+-- "-Q Q -- "- $e = Q )---- $    $  ## $3 3 ;; $K K SS $c c kk ${ {  $   $   $   $   $   $     $# # ++ $; ; CC $S S [[ $k k ss $   $   $   $   $   $   $   $+ + 33 $C C KK $[ [ cc $s s {{ $   $   $   $   $   $     $  ## $3 3 ;; $K K SS $c c kk ${ {  $   $   $   $   $   $     $# # ++ $; ; CC $S S [[ $k k ss $   $   $   $   $   $   $   $+ + 33 $C C KK $[ [ cc $s s {{ $   $  ---- $  $## $33;; $KKSS $cckk ${{ $ $ $ $ $ $   $##++ $;;CC $SS[[ $kkss $ $ $ $ $ $ $ $++33 $CCKK $[[cc $ss{{ $ $ $ $ $ $   $## $33;; $KKSS $cckk ${{ $ $ $ $ $ $   $##++ $;;CC $SS[[ $kkss $ $ $ $ $ $ $ $++33 $CCKK $[[cc $ss{{ $ $-------&y!t $v!v%n%n! $^!^%V%V! $F!F%>%>! $.!.%&%&! $!%%! $!%%! $!%%! $!%%! $!%%! $!%%! $!%~%~! $n!n%f%f! $V!V%N%N! $>!>%6%6! $&!&%%! $ ! %%! $!%%! $!%%! $!%%! $!%%! $!%%! $}!}%u%u! $e!e%]%]! $M!M%E%E! $5!5%-%-! $!%%! $!%%! $!%%! $!%%! $!%%! $))11 $AAII $YYaa $qqyy $ $ $ $ $ $ $   $!!)) $99AA $QQYY $iiqq $ $ $ $ $ $ $ $**22 $BBJJ $ZZbb $rrzz $ $ $ $ $ $   $"" $22:: $JJRR $bbjj $txxt $txxt $toxoxgtg $tWxWxOtO $t?x?x7t7 $t'x'x%t%&y!t---l--2 > W AT Commands<37*AA%** '-----& ! $ ! % % ! $ ! % % ! $ ! % % ! $ ! % % ! $ ! % % ! $o !o %g %g ! $W !W %O %O ! $? !? %7 %7 ! $' !' % % ! $ ! % % ! $ ! % % ! $ ! % % ! $ ! % % ! $ ! % % ! $ ! % % ! $ ! %w %w ! $g !g %_ %_ ! $O !O %G %G ! $7 !7 %/ %/ ! $ ! % % ! $ ! %%! $!%%! $!%%! $!%%! $!%%! $!%%! $v!v%n%n! $^!^%V%V! $F!F%>%>! $.!.%&%&! $!%%! $!%%! $!%%! $!%%! $!%%! $!%%! $!%~%~! $n!n%f%f! $V!V%N%N! $B-F-F5B5 $BEFEFMBM $B]F]FeBe $BuFuF}B} $BFFB $FFNN $^^ff $vv~~ $ $ $ $ $ $ $&& $66>> $NNVV $ffnn $~~ $ $ $ $ $ $     $' ' / /  $? ? G G  $W W _ _  $o o w w  $     $     $     $     $     $     $     $/ / 7 7  $G G O O  $_ _ g g  $w w    $     $     $     $     $     $   { { $ k k c c $ S S K K $ ; ; 3 3--- -N-/2 >NW Separate Audio Interface.%*%%%<****%%%%' "-#3#-- "- $7++#I---ࡱ>  MPABCDEFGHIJNTVisio (TM) Drawing BR DA(d !fffMMM333<q0<T d Arial) -3Times New Roman5T?? Y@-1,,J/T  hTJbOSS0{Gz?@CPjV]uVbUUO OS? T666 NP U    UvPaC G#G#G#G#G#G#xG &#O`$$!N=4!>7i>}p'0U2?E! 67gjP>603206&0B!4?6@27Tg2k=\- g2 VT @9ܯ6L^pu )5,2?Op??ZX F&m0#P@w?l_?VCG MO_N9{OOOOOo2qG`?FoXf.Xf RrjrjrgF_ _) ]__qgaopsoon# h0T_o?u5e%wv4:p|q@";@U B ` ;@ U#'U/3C@;U?GKUOSpU_%@ g!kU"o#$ %{&' ~ yJB ̏}h1 1C~P ~`  !3(~  u~p #~ ew~ 6߿ | Wi@X?xjtTCU&KPJ3zό} [mm%1Hߠ}ߏ~t ]o~ܰ  ~  M_q(~d ~=Oas~w ~ w-?Qc(~w~w///Z`aO贁Nk?0A&&JT /////f/ 0e?'2-???Q?c?u?Q ?2E?'2???? O/??4]OoOZaOOG5bOK\ J@ROXNaZ+x5 c(_tavwTiePa< \'2rR9p=qEfq^"ДNe1j`aPV?|oU03b0f[reG !______$4~dTqij+dzowogeSBei@sd2oDj[%QkghJ{ooo5>P&ono}oe# 1CU poo- DŽ+я+h$I[myٟ!>> \##L@|g >~!~`(C) Shapeware Corporation{nW e, H $ $) ) pdp<J-rH&bw$pK$?!() >  d|C/L$h?d pr*0.1 " "@0V!J2#"rq!4#O+ E < ??7Ug?;5I?5?9?8dE_@t@5<@H"  hTP@?,,443?P t` ?(rb tw[@u`A@qu @u`z{u b  o #U'#'0O贁Nk?,r wrAl(OU8%rWaOG+,5 ,+VE^r+4 N",=Z'#!\" &h ß `ߊq'dr v,=zy/ Frp c!03B )):A"q|H"  hTP@,?,===?P (rb t` u[@u`A@t 6u@ u`u bu{   #'#'0O贁Nk?K,r {rAl(U8%ra+O>+^u Jq ],#!=N"],>\r,$,-%+>!hV(+]h c}qdr" v-/ rp x03)'0!q|H" 'hT,Z@?,4443P t` v6qtwu  ?u`zu ~bb    0O贁Nk?P A@{lUX%agbkk++-~   *E>|/4/:r:!D_؛ hM:%-7 FhDk #BXD v B_hD|CkG@P,DChz+KتOC>G+&OD& HHO?Dn ODb(#ODOXf$%)F hTA@* ?<I?NXfx** <Ebb{b b NeH  3:x{  833330)0{T 0{{V {0 sh;q 33=whs~33;߰ ; xpxv ';:{[)QQ݇(p3nConnector with up to 5 legs. Use c shapes by point2, dynamic glue methods.Vmbؿ?n:mؿ8io6?l?7 H"&\hT@?Z,4,FFP u `u `u `u `A@bxu/bu` Z?u b .%   &  4()4@G4?[en:/JV541# # &(. /7/I/[$d ~az" !@ / +/P" ///% L@C/"*WAA2?Z4Њ5?b rL`-@6 0u`_.@Dr-1 4 0 @@rJA1a= 73 HRB ^0 g4 -G7G1b"zD A2q@?OFF n2}lOU ! aAQFP4*PV@S P0!PP]gP30 C73b F@ EOP"CJ0S8TVRBQRETV0`np?WS3 A@n` C[pa~a @ CQI< @rQYVQoXfT`USedTR@o`sf}ck bgcobVQ@(ip{[EgSVpGjKUn3b0a263sAbTpl3uS(L3!lVh=gE\+GPLQqa@qBX"7`p^CvIPB7P`!Rp hm0(Wd8P 12tqe@@Bpg@AQ ;4IBuf`ug`i-@d@ӑ؟Qq[Bk BNB g3T.c`CT8cv8P~Guw` ?u qb_b} (T* **%L@_ !`(C) Shapeware Corporation2klUXBa ,*Z  D* >>*/<-r!Z/~/ rr ! h>:qr 4%Q"/ A/A a/;>P /:?/^?/???3@t3@<3@}-FD$#B _D3Q BD[G@_DkS+BDlS7H_pDSf,:m@_N@$ ,:m@_N@% ,:m@_N@) L@B /OD ,HD0|D\SOD4@ @DT +ODߢ/D{?R +D *p Voice Modem changes to unimc?urtsm "(*Rd9&7;IP o}*<Bhc:\visio\template\block.vss Oxs asic*5B!qD?DŽ@'!FT L*hGTI:m@I贁Nw@?A?IcFIzIbwbb/ b }'en@GH www w w*] w2 w:xBwRʿwZxbwjwrww]ww.xw{x"w#w= T=  71&5 GTER Ki@t@ @@Gzk@g5?]0?PV6_6h6 q6W  WU^,"wfCD)($<>OL\G`gqgnO5{>Fo6HL6HO]0LߗADMAT P@ P, PJ PC2HIB"e0y0?-RjoOVh=y>71I{l_U!{VNWĶGVqUXZUX'`D'`0'`WWPH-QB'\ 7_I_[YpVy5Vx6y58.@__WWy5Ygo`b(o:iXT)Z Yo2poOh?_oo5w_<J:gn7Win32 Comm, Multimedia, Telephony ApplicationsiwD4'2UTPW)wA)R&1RI{xgZV4^4tg5ww| @bSW3Q38X33ʖ} 2 :F  tN`zs@" &l?oAIY?eWz0O/k?!%%=M0 p1ju~Er@\bjlk.9d-F.s*p\G xC0!@FݵW<p1of =5%,fF9nr.cŢY - (Aхo TACPIw5g$1O;PZ3 vt3n89 @3ն9 YW<@V`c`@ay&13?XKuOng ВݖH)G\Ct P` PL P8Ttapi.dllʀӏ B@{QD巣uu{Q{p ğ 5B2} *@*?@Yq˯ݯm m$YDk}sĿֿ/0f(cn(ϡi MM Wave@Ϩ7?i6䙕r܂0,>|5Pbnzߌr B߯rOK@<;\n{6 I IgM6K_Ruser, kernel32, etc.DVhz  N?`?B 3?>?=B?rbO,O>O_ffgyOOOO{ OOs Oqfii8}qla___Xmmsystem@__  1o_/H % .@K8]i ~ϒ *8"4FX̯ޯs //s ,/>/P/b/t/2ؿ/////??(?:2 j o(@!߁oE> oo( $`RQ? RJNT{\{?{h{Г▶6e:sȲ~Z֒ȲVddoORd+w vТw+7`uo` Ku` wG<暑-Q- >*)q-Q=-q-Q6;3|WD]]pфD_+S$#L_֏ "4d 6Q?O繸:\ficomïA%z?2h~4GGײbxcq` l#ҿi.VfI[mϑH1Ϲf%9NhߌNŵޑ)J9э_?serial\nH@T|q@A%OxcHpVOOEY@I-@# "A"%%  UVZy .2R8HRmSRd\R. [S  rT_ bo#Hbycj-/?$ G)F#AOk/}////////I??Qcu{m^t??Kٮ?;???OOw_]MO_OqOUS[QOOFBOOO  -_?_SZMe P##㨕  Ӑד#(.R !T8 &RKKӐם4oߑ͡ᤢbo@/`TG"Ӑ ז דѲ뿠ooos p2 p;]/ Fv`6w ;.А1AӟےLZbSxrI*bru `u `Yrڐuf`ug``k@3b#?d/@@#0<|vTvBAC 2 aDGX2-QvuÝb9&(%0m  j ï`G)qjmI !3?+ p ppcYqass`6mDVQjbw0ύZl~@L! mP" XL\q(,Q/,P%/w9H' @@=+M@J"uЌ%wj"!(SPꗬBVWV&{#ݑ#a #:`2 ɪ{i3<6k0ّʖ/|?OOH? psiY - %'OH&O!w!_J!G%<=F4ό(_J 73<5ҫ___׻#ӱJ"[hw\O,() /,'E/W/{k+@@TIg<΄8ußwZ^P {@1r"B -Pr..dr5,P+h1У9 dpIx???OU$SYEOWO- LuIx7v*>qOOgq_a=_O_a_7Ixt?CC?@i*`b l@,,,#X;"qo+j_(~2M/v׼@&D:h- wxs4 vr!r {vgrPgszg+m2Ba4dz|7R 8AI}ɏۏ- |z.gBnTfaߘ&ӟ z(41[`@&y猯H!3k+ xrD #y q?S=6C@7?i6?ww2[z$(ut{vt{qIaC(KQ@"LVP9I6C PϷϰ+Bs1@2_]iLth(>l~GC+_>T _ZqD/W___}j&/DfC@@e)xocHfqՈ8X?]@说N{n810p5ƤO4Ƞo616179 B )EC FC?@'?@lDtEw03k?R/`@A=j ZO_"_4_F\8hzxQCA aI>2DBm8ech`=1t8ehE8READ,WRITE9?Eiuf@e?!w`'wy trλ r$6-"*P C ||OO3t__x____o k0.l]rTo+:oN?H*`1v8n?83צէ48ܠ3(8S OC!B+OeC nOOOOO_wωϛ F\?Qs_oMolf؀l6fwk TSPUI+0/2NB1|.!u Ԡp= ף8d .e i.2333TF\ Ɣ?TE  0**'' '|~#L@@߬SPb0aG  R` )u <$Hl Tz41aqӅ"A" = 16-bit wave interface "BVoiceGetModemHandle() "Cnew v PM_APIs to unim.vxdj|^3c0a.-"G'0+:]7"r@@*\(ΕK 8΢ "rF45%33G%83m&s!B"Ē8B#/@}' tH#O#5GYk+???F\("W.6HZl~ /O*lfHlnXkmVCOMM Port Driver(D. @'F9T L*HhGTIv!@z&@?[?A ?zF;)Iz_bb b w;e;n`:m@贁N@$%&')*+,-./012345679:;<=> N~ET,!@&( <@BpDT=f `,D P oD!4@D< ?R +D=%ߔ8Page-1Black fill_White }uRed Green -Cya@Yellow GMnta3a=y(10% x line3 Long dash1"da%rI9e. X5 7 9 1Gpxlm9mHairqShort Arial cke?redtop leftTim esConnector 8pt3-D box0Universܳ&G/or?.29.7`/yrw"2E =R anglt&.8] '9]/o"10!)11+2,3,4.,5*641/ 7/#yE?#9}?o# /?o#?!/?p" i?o#3?o#4 Oo#5<)Oo#6EOo#]0vE3mW3Q@5@@U@@݅@@@A@S@C@3@#@@@3@ƪ@@@@@j@R@F@0@!@@@3 3PPPPPPxPhPXPGP4P$PP3APAPAPAPAPAPAPrAPdAPUAPGAP?wHDA<@D bࡱ>  MPABCDEFGHIJNTܥhW eP s  & & & &  & * $+( U U U U tV * W 8\ d0] 0] 4] 4] Fza tc <O Q Q Q < a 5  X XS & *e E_+4] 4] *e *e S & & 4] zW OHB ~    - "-$;,`; "-- - "-$`;;`,`-- - "-$;;;-- .  Arial -!.Win32 Comm, Multimedia, Telephony Applicationsa"System- - "-%-- "- $-- .  Arial-!TAPI- - "-%;--- $[[-- . - !MM Wave- - "-$EE-- . - !tapi.dll`- - "-$~~EE-- . -!user, kernel32,!etc.- - "-$;;EE-- . - ! mmsystem.dllw- - "-$qq-- . - ! unimdm.tsp)- - "-$;;qq---- . - ! wave driver- - "-$!MMq!q!-- . - ! vmodctl.dll@- - "-$777-- . - ! unimodem.vxd- - "-$@@PP-- . - ! vcomm.vxd- - "-$777-- . - ! serial.vxdx- - "-%a--- $dMdd---- $xx-- .  Arial- !"A"{- - "- %!- -- $---- $-- . - !"B"- - "- %RR- -- $^RG^---- $!&!&-- . - !"C"- - "- %CCCC- -- $-- - "- %&&&&]- -- $ZqZZ-- - "- %YYYY- -- $-- - "- %''<- -- $39'P939-- - "- %~- -- $VV//-- . - ! READ,WRITEY- - "- %&&&&]- -- $ZqZZ-- - "- %- -- $44-- . -!TSPI'- - "- %&&&&&;&- -- $=[=[-- . - !MM Wave0-  . -!"A" = 16-bit wave interfaceR!"B" = VoiceGetModemHandle()MR!'"C" = new voice PM_APIs to unimodem.vxdR- - "- %ClClC!C!- -- $,!,-- - "- % ' ' ' ' @ - -- $""-- . -!VCOMM Port Driver-ࡱ>  MPABCDEFGHIJNTjMuM}MMMMMMMMMMMMNN6NHN^NqN{NNNNNNNNNNNNNOO$O.O?OIOZObOuOOOOOOOPPcPtP9RRRRRRRRRRRRR$S+SSSSSSSSSSSSSSSTTT!T)T5TmTsT}TTTU"U9U]UeUUUUUYWlWWWWWXX#X9XXX,Y4YYYgYqY|YYYYYYYYYn[|[ *e n & 4] & 4] O lO & ' & & & & *e O  Unimodem V Microsoft Confidential Version: 3.0 Filename: unimodv.doc Date:  TIME \@ "MMMM d, yyyy" November 1, 1995 Table of Contents  TOC \o "1-3" 1. Overview  GOTOBUTTON _Toc339859817  PAGEREF _Toc339859817 3 1.1. Overview of Voice Mode[[[[[[[[\+\5\E\O\a\k\\\\\\\\\]])]3]G]g]z]]]]]]]]]^.^8^M^W^n^x^^^^^^^^_-_E_V_l___________` ``(`<`F`Y`c`x`````````` aa&a0aAaOabataaaaaaaaaaaaaabbb#b+b5b=bHbccccdddd$d2dMdSdeeeeeeee ff#f0f?fKf[fhflfsftfzf{ffffffffffff8g>gQgagkg}ggggggggghh/h=h[hihhhhhhhiiiiiiijj5j?jRjjjjjjjjk k"k,kHkRk_kkkkkl ll'lmm)m8mBmSm]mjmtmmmmmmnnoopppppqq%q/qAqKq_qiqzqqqqq1s7sÓ˓֓ޓ5@Vcy-7DNe4AP\ǖіޖ+5DL]tɗʗݗ !њܚ%):t~'6]tu̜ܜ:=5Bdt $%@{̟ӟŠ͡Ρ9VWuCMéJSNc|CN qCRGSXa%[^ps-9_puyae2;fqJS(0~ Kecia Bruce C:\tazz\specs\FUNCT\voicemod.doc Kecia Bruce C:\tazz\specs\FUNCT\voicemod.doc Kecia Bruce C:\tazz\specs\FUNCT\voicemod.doc Kecia BruceC:\tazz\FUNCT\VOICEMOD.DOC Kecia BruceC:\tazz\FUNCT\VOICEMOD.DOC Kecia BruceC:\tazz\FUNCT\VOICEMOD.DOC Kecia BruceC:\tazz\FUNCT\VOICEMOD.DOC Kecia BruceC:\tazz\FUNCT\VOICEMOD.doc Kecia Bruce"\\GIDRA\PUBLIC\keciab\VOICEMOD.doc Avi Belinsky4\\Whpg\public\deanso\PPTs\MODEM\diskette\unimodv.doc@Strike HP 4 Si\\strike\hp4si-52036HPPCL5MSStrike HP 4 SiStrike HP 4 Si@w XX@MSUDNHP LaserJet 4Si ;d Strike HP 4 Si@w XX@MSUDNHP LaserJet 4Si ;d ////Times New Roman Symbol &ArialCG TimesTimesTimes New Roman5Courier Newtimesroman"Helvetica Tms Rmn5Lucida Sans Typewriter"CV h e eu|>$*iz* -$V eC:\WINWORD\TEMPLATE\tspec.dotVoice Modem Functional Spec0.9 Kecia Bruce Kecia Bruceࡱ>  @PABCDEFGHIJKP@ms  GOTOBUTTON _Toc339859818  PAGEREF _Toc339859818 3 1.2. Unimodem Interface Overview  GOTOBUTTON _Toc339859819  PAGEREF _Toc339859819 3 2. New Unimodem Functionality  GOTOBUTTON _Toc339859820  PAGEREF _Toc339859820 5 3. New Unimodem External Interfaces  GOTOBUTTON _Toc339859821  PAGEREF _Toc339859821 6 3.1. Unimodem / Wave Interfaces  GOTOBUTTON _Toc339859822  PAGEREF _Toc339859822 6 3.2. Modem .INF File Additions  GOTOBUTTON _Toc339859823  PAGEREF _Toc339859823 6 4. NeܥhW e   " " " " " $ ,+$ O O O P P $ Q 8W jjW jW nW nW F[ t(^ <  <ف Z X e " d_ E_+nW nW d_ d_  " " nW Q w Unimodem TSP Functions  GOTOBUTTON _Toc339859824  PAGEREF _Toc339859824 7 4.1. Line Device  GOTOBUTTON _Toc339859825  PAGEREF _Toc339859825 7 4.1.1. Line Device Functions not Implemented  GOTOBUTTON _Toc339859826  PAGEREF _Toc339859826 7 4.1.2. Line Device Functions with Usual implementation  GOTOBUTTON _Toc339859827  PAGEREF _Toc339859827 8 4.1.3. Line Device Functions with Described Implementation  GOTOBUTTON _Toc339859828  PAGEREF _Toc339859828 8 4.2. Phone Device  GOTOBU   d_ z " nW " nW `"" # " " " " d_   Unimodem V Microsoft Confidential Version: 3.0 Filename: unimodv.doc Date:  TIME \@ "MMMM d, yyyy" November 1, 1995 Table of Contents  TOC \o "1-3" 1. Overview  GOTOBUTTON _Toc339859817  PAGEREF _Toc339859817 3 1.1. Overview of Voice Modems  GOTOBUTTON _Toc339859818  PAGEREF _Toc339859818 3 1.2. Unimodem Interface Overview  GOTOBUTTON _Toc339859819  PAGEREF _Toc339859819 3 2. New Unimodem Functionality  GOTOBUTTON _Toc339859820  PAGEREF _Toc339859820 5 3. New Unimodem External Interfaces  GOTOBUTTON _Toc339859821  PAGEREF _Toc339859821 6 3.1. Unimodem / Wave Interfaces  GOTOBUTTON _Toc339859822  PAGEREF _Toc339859822 6 3.2. Modem .INF File Additions  GOTOBUTTON _Toc339859823  PAGEREF _Toc339859823 6 4. New Unimodem TSP Functions  GOTOBUTTON _Toc339859824  PAGEREF _Toc339859824 7 4.1. Line Device  GOTOBUTTON _Toc339859825  PAGEREF _Toc339859825 7 4.1.1. Line Device Functions not Implemented  GOTOBUTTON _Toc339859826  PAGEREF _Toc339859826 7 4.1.2. Line Device Functions with Usual implementation  GOTOBUTTON _Toc339859827  PAGEREF _Toc339859827 8 4.1.3. Line Device Functions with Described Implementation  GOTOBUTTON _Toc339859828  PAGEREF _Toc339859828 8 4.2. Phone Device  GOTOBUTTON _Toc339859829  PAGEREF _Toc339859829 24 4.2.1. Phone Device Functions not Implemented  GOTOBUTTON _Toc339859830  PAGEREF _Toc339859830 25 4.2.2. Phone Device Functions with Usual implementation  GOTOBUTTON _Toc339859831  PAGEREF _Toc339859831 25 4.2.3. Phone Device Functions with Described Implementation  GOTOBUTTON _Toc339859832  PAGEREF _Toc339859832 25 4.3. Service Provider Functions  GOTOBUTTON _Toc339859833  PAGEREF _Toc339859833 31 5. Operator Agent  GOTOBUTTON _Toc339859834  PAGEREF _Toc339859834 31 5.1.1. Data, Fax Modems [+FCLASS = 0,1,(2)]  GOTOBUTTON _Toc339859835  PAGEREF _Toc339859835 31 5.1.2. Data, Fax, and Voice Modems [+FCLASS = 0,1,(2),8]  GOTOBUTTON _Toc339859836  PAGEREF _Toc339859836 32 5.1.3. Data, Fax, Voice, VoiceView Modems [+FCLASS = 0,1,(2),(8), 80]  GOTOBUTTON _Toc339859837  PAGEREF _Toc339859837 32 5.1.4. Simultaneous Voice Data (SVD) modems [+FCLASS = 0,(1),(2),8]  GOTOBUTTON _Toc339859838  PAGEREF _Toc339859838 32 5.2. Inbound Call Discrimination Solutions for Voice Modems  GOTOBUTTON _Toc339859839  PAGEREF _Toc339859839 32 5.2.1. Distinctive Ringing  GOTOBUTTON _Toc339859840  PAGEREF _Toc339859840 32 5.2.2. Operator Agent  GOTOBUTTON _Toc339859841  PAGEREF _Toc339859841 32 6. Functional Requirements for Wave Drivers  GOTOBUTTON _Toc339859842  PAGEREF _Toc339859842 38 6.1. Telephone Line Wave Devices  GOTOBUTTON _Toc339859843  PAGEREF _Toc339859843 38 7. Setup & Installation  GOTOBUTTON _Toc339859844  PAGEREF _Toc339859844 39 8. Configuration Dialogs for CLASS Features  GOTOBUTTON _Toc339859845  PAGEREF _Toc339859845 39 8.1. Distinctive Ringing  GOTOBUTTON _Toc339859846  PAGEREF _Toc339859846 39 8.1.1. User Interface for Distinctive Ringing with Cadences  GOTOBUTTON _Toc339859847  PAGEREF _Toc339859847 40 8.1.2. User Interface for Distinctive Ringing with Ring Quantities  GOTOBUTTON _Toc339859848  PAGEREF _Toc339859848 41 8.2. Call Forwarding Tab  GOTOBUTTON _X'j'k't'u'{'m*x*J+b+c+y+z+++++++++++,,,,0,1,>,?,T,U,q,r,,,,,,,,,,,,,--*-+-F-G-_-`-t-u------------......... / /$/%/:/;/R/S/c/d/////////////000000113141V1l1r111111111@2M2N2[2k2v222222222222 3,3;3=3J3P3]3i3x3333333333333442484L4Y4m4x4444444455&5{8888 99M9U9 ::::(;5;;;a<l<t<<<<<<<<<==!=*=;=Q=d=w=======>>>%>0><>F>Q>[>>>>>>>>?)?@?A?X?j?t?????????@ @6@=@@@@@TTON _Toc339859829  PAGEREF _Toc339859829 24 4.2.1. Phone Device Functions not Implemented  GOTOBUTTON _Toc339859830  PAGEREF _Toc339859830 25 4.2.2. Phone Device Functions with Usual implementation  GOTOBUTTON _Toc339859831  PAGEREF _Toc339859831 25 4.2.3. Phone Device Functions with Described Implementation  GOTOBUTTON _Toc339859832  PAGEREF _Toc339859832 25 4.3. Service Provider Functions  GOTOBUTTON _Toc339859833  PAGEREF _Toc339859833 31 5. Operator Agent  GOTOBUTTON _Toc339859834  PAGEREF _Toc339859834 31 5.1.1. Data, Fax Modems [+FCLASS = 0,1,(2)]  GOTOBUTTON _Toc339859835  PAGEREF _Toc339859835 31 5.1.2. Data, Fax, and Voice Modems [+FCLASS = 0,1,(2),8]  GOTOBUTTON _Toc339859836  PAGEREF _Toc339859836 32 5.1.3. Data, Fax, Voice, VoiceView Modems [+FCLASS = 0,1,(2),(8), 80]  GOTOBUTTON _Toc339859837  PAGEREF _Toc339859837 32 5.1.4. Simultaneous Voice Data (SVD) modems [+FCLASS = 0,(1),(2),8]  GOTOBUTTON _Toc339859838  PAGEREF _Toc339859838 32 5.2. Inbound Call Discrimination Solutions for Voice Modems  GOTOBUTTON _Toc339859839  PAGEREF _Toc339859839 32 5.2.1. Distinctive Ringing  GOTOBUTTON _Toc339859840  PAGEREF _Toc339859840 32 5.2.2. Operator Agent  GOTOBUTTON _Toc339859841  PAGEREF _Toc339859841 32 6. Functional Requirements for Wave Drivers  GOTOBUTTON _Toc339859842  PAGEREF _Toc339859842 38 6.1. Telephone Line Wave Devices  GOTOBUTTON _Toc339859843  PAGEREF _Toc339859843 38 7. Setup & Installation  GOTOBUTTON _Toc339859844  PAGEREF _Toc339859844 39 8. Configuration Dialogs for CLASS Features  GOTOBUTTON _Toc339859845  PAGEREF _Toc339859845 39 8.1. Distinctive Ringing  GOTOBUTTON _Toc339859846  PAGEREF _Toc339859846 39 8.1.1. User Interface for Distinctive Ringing with Cadences  GOTOBUTTON _Toc339859847  PAGEREF _Toc339859847 40 8.1.2. User Interface for Distinctive Ringing with Ring Quantities  GOTOBUTTON _Toc339859848  PAGEREF _Toc339859848 41 8.2. Call Forwarding Tab  GOTOBUTTON _November6199533356667778824252525313131323232323232383839393940414255.1.15.1.45.25.1.25.1.25.2.2.15.2.2.25.2.2.35.2.2.404.1.3.5 Voice Modem Functional Spec07/15/95 5:53 PM"*.8DJNOghxyz 789;]^yz-.EFGIjk56MNOQcd uDaU[ uDU[auDU[9:UVmnoq,-/1`a|}  H I d e | }  " # % ' T U p q G H c d { | ~ uDaab ; < W X o p r t     F G b c z { }  '(*,YZuv"#>?VWY[&')+,-  uD uDaa` +MV $%/167IKPQeŠÊԊx}~ŋɋ΋ϋ$;@AYԍ.34LPUVcĎȎ͎Ύ.27UVd78KOTUjnstÏȏɏՏُޏߏ $%26;<KOTUfjopÐʐ̐Ґ֐/@Ñ$[{}ĔȔUVaȔ 9@AHPQX\abÕ̕Еוٕ!ÖŖʖ˖֖ؖݖޖ/45@PUVcsxy-167DHMNeߘ.34AVU BEF(EU BEF(EV BEF(E\Ay~Ǚ˙Йљޙ+/45DFKL]nstݚߚ !֜).6:HLkÝѝܝޝ AEFD BEFD BEFD BEFDVUZ%):'6]ğ̟ܟޟ@zȢ̢Ӣբڢţ_`vw|}!"K`ʬˬ$%;<ABhi*+ABIJ|}cUcuDUV`ȳɳde{|}~UqCRijz{|} 'evloUcuDT.uDWuD uDHj?4KuDHj?4avK uDk?4K uDk?4vK uDLl?4K uDLl?4vKUU^ BEF+EuDH vw !#$89ABCYqrxyz{~= E F J K L M N O P Q R S T U V X Z \ ^ ` b d f uPAaPA uDPAa uDUuDuDjUuDLUcT"/Ez}<JRr2 (  u  -\,/8!!!!!! !!! ! !!! !!!!!!!!!! !!!!!!!! !! ! !!!!!,,5)lyjqV )&bvx!!!!!!.!p!!!!! ! !!!!!!.!p!!!!!!!!!^!ph.BhB  4h"  4hx*P!!"#|}~ !!!!!!!!!!!!(h`%$!.BhBOK @ Normalx]a ~@~ Heading 1Z 0(* 4 . U]a c 0@0 Heading 2 ( * c*@* Heading 3  ( * c4@4 Heading 4 x( *Ucx@x Heading 5T 0 4 .8 U]a cv@v Heading 6T 0 4 . ]a cx@x Heading 7T 0 4 . U]a cd@d Heading 8F 0< 4 .V]f @f Heading 9F P0< 4 .V]c"A@"Default Paragraph FontONormal 1hONormal 2ONormal 38* @"*Footer& HV]c,@2,Header( $V]c"@B" Normal IndentORNormal1OQbNormal2OarNormal3p2@2TOC 1x<h$ U]a c,@,TOC 2h<$@ ]a ,@,TOC 3<$ ]a ,@,TOC 48<$ ]a (@(TOC 5<$ *@*TOC 6<$ *@*TOC 7! c*@*TOC 8! c*@*TOC 9 x! c$'@$Annotation Referencec*@"*Annotation Text"V]a " @2"Index 4#8]a " @B"Index 3$]a " @R"Index 2%h]a & @b&Index 1 &$J]a (@q Line Number$&@$Footnote Referencece.@. Footnote Text)x ]a c$O$Code *hU]c O Code Mono+U]*O* Spec info ,0]a  O Extra Info-' \"O"" Definition .hOList 1/OList 00h3@List 31p2@"List 22"O2" List 1 Packed3"O!B" List 2 Packed4.OR. Spec title5H( Uc2Ob2Titlepage info6xVc,O, Figure title 7Vc8O8Revision History8 8p$@]a 0O0 Centered Bold9 U]a c(Or(Picture:xcJOJ OpenIssueHead';;10%-+U]$O$ OpenIssue <' 8 O NormalTable=&O&Question>&)')()))V0O0title document ?U]c(O( title info @])@ Page NumberOTermB<U*O2*KeciaC(](OR(Term1 D ]a c$OB$Def1 EPclOlSynVFJ0H`x  8Ph(@c"O"Tes Gtc OATerm2HOQDef2I0.O.Lb1JPcXOXEx>K$5 $ 0 <HT` ] a c O Le L`c .O.NsM(  ]a bc &O&Np1N(PcConfiguration Dialogs for CLASS Features42!!!!!!! ! ! ! ! !!!!!!!!!!!!!!!!!! !!!"!#!$!%!&!'!(!)!*~. ^<'+-18?lD8ILR]X+]`5ei:m-tw{12Ϗܔz/ݱP_& Kf h j l n p r t v x z | ~ ؉ " *" ," PAaua#* !!!!!!!!! ! ! ! ! !!!!!!!!!!!!!!!!!! !!!"!#!$!%!&!'!(!)!*h H&'-18}?VD"IuLnRGX]`ei$mtw{ׁƔdDZ:Iyu K  (  T!2 l!"#$%&5' (<)/z&4<\lxk_  j  } F @ѩkݯ5!!! !!! ! !!! !!!!!!!!!! !!!!!!!! !! ! !!!!!!!!!!!!!! /dgz&4<\lxk_  j  } F   " j fTcu5HU * E ![$w$$&'q''R(m(y(()) ***4+M+d+z++++++,,),?,\,j,z,,,,,,-1-J-_-x------ ......./%/=/N/l/z//////#00001B1^11111112*282G2b2w2222'353333 4%4F4e4444455k666=7[777777S99:;<E<X<l<s<<<<<<<< =='=5=P=^=====>>2>F>I>?+?D?`?}?????@@@@@AA5ALAmAAAAAAAAA B!B=B\B{BBBBBBC/CFCHCbCdCCCCCCCCD/DVD~DDDDDE,EEEXEmEEEEEEFF7F9FTFWFyF|FFFFFFFG7GTGGGGGH+HJHhHHHHHHH II"I$I:IQIlInIIIIIIIIIIIJJ;J=JaJcJJJJJJJKK/KFKWKnKKKKKKKL/LNLrLuL(MNMaMuMMMMMMMMNN4NBN]N_NtNNNNNNOO+O-OFOaOOOOOOOPPPPnQnRRRRRR|SSSSSSS T!T6TQT_TaTtTTTTTTAUQUUUUUUVV/VEV\VoVVVVVVW'W=WXWkWWWWGXjX}XXXXXXXXXXXY Y=YSYUYhYwYYYYYYYYY Z!Z9ZSZmZR[h[[[[[[[\\\1\3\M\O\k\m\\\\\\\\\]]3]K]f]h]]]]]]]]]^^9^;^Z^\^}^^^^^^^^^_'_)_B_P_k_x_________ ` `(`*`E`G`d`f``````````aa-a3aNa]auaaaaaaab!b4bYbpbbbbbbbc*c?cYcvccccccd?dVdmdddddee9eUeseeeeeeeeff7fSfVfwfffffff3g5gMgOgigkgggggggh)h?hUhnhhhhhhhi%iDi\ipiiiiiiiii!j#j>jQjgjjjjjjjjjkk4k6kKkgkkkkkkkkkkl(l?lYlpllllllll m m$m&m?mAmVmXmym{mmmmn6nInLn_nbnyn|nnnnno:oMoPocofo}oooooop{T{W{s{{{{{{{{|-|L|d|x||||||} }?}W}k}}}}x~D_ׁ˂݂ /Mewl|Ȅ˅Ć 5Qb|̈Έ-Ib׉ %E`ۊ8:Oj}͋ϋ79VXwyÌ،ڌ  79RToq}эbƎߎڏۏ$EVg{#2BkÒߒ“֓,:O]oqƔ02Qqɕ-cʖ̖0IXqsɗܗ LȚޚ,G_xȜg֝-N_dyݟ3NРi}Ρ#A`o@cw|Kѩ.k<ݯ5iDZOhƵ'k d{:~K[E@ZYIiJ0='|'*V OyuI2Ng_o_ O`;P77Fe|dyVcT[u@~L`bm: 5,,,,5$$$000000000000000000000$$$000000000000$$$$$$000000 BBB....B. BBB.B.BBB.B. 87BhIMQW4\`c7ilJq)tx{7ȔAf ," EFGHIJKLMNOPQRSTUVWXYZ[\]^8 ""-149@FIMQ7W[_bei}mptxz } Wޝݴչz, sx _`abcdefghijklmnopqrstuvwxyz{|}~Unknown Kecia Bruce8Qbz !#$Gc{}~/12Tp79:Mi#?WYZJf~2Nfij >Zruv1Mehi% A Y \ ] z   0 L d g h    C _ w z { ( @ C D     [$s$u$I`fp %++3f}ڰNegSdfs  2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@2%@:::::4?Y[w ! !F _Toc339859817 _Toc321816569 _Toc339859818 _Toc321816570 _Ref322241063 _Toc339859819 _Toc321816571 _Toc339859820 _Toc321816575 _Toc339859821 _Toc321816576 _Toc339859822 _Toc321816615 _Toc330863849 _Toc339859823 _Toc339859824 _Toc321816616 _Toc339859825 _Toc321816617 _Toc339859826 _Toc321816618 _Toc339859827 _Toc321816619 _Toc339859828 _Ref339702252 _Toc321816620 _Toc339859829 _Toc321816621 _Toc339859830 _Toc321816622 _Toc339859831 _Toc321816623 _Toc339859832 _Toc310933030 _Toc321816624 _Toc339859833 _Ref339258241 _Toc339859834 _Toc321816634 _Toc319146735 _Ref320605582 _Toc321045814 _Toc339859835 _Toc319146736 _Ref320605596 _Ref320605697 _Toc321045815 _Toc339859836 _Toc319146737 _Toc321045816 _Toc339859837 _Ref320605610 _Toc321045817 _Toc339859838 _Toc339859839 _Ref339869077 _Toc319146739 _Toc321045819 _Toc339859840 _Ref339258233 _Toc339859841 _Ref320605725 _Ref320605737 _Ref331915973 _Ref320605747 _Ref320605755 _Ref320605767 _Toc339859842 _Toc321816635 _Toc339859843 _Toc321816636 _Toc339859844 _Toc321816637 _Toc339859845 _Toc339859846 _Toc339859847 _Toc339859848 _Toc339859849 H * * w$w$w$R(m(m(**--//3}}ׁׁȄȄРР``o||||...j Ly;;P|yL   !"#$%B&'()*+,-./0123456789:;<=>?@ACDEFGHIJKLM!    ) ) : D $R(l(l(x(x(**.."0"03}}jnJJJJJЩЩЩjjj;; ZLOO_#.c g Tb}hsu4O"W":'A'B'T'U'^'_'e'W*b*4+L+M+c+d+y+z+++++++++++,,,,(,),>,?,[,\,i,j,y,z,,,,,,,,,,,--0-1-I-J-^-_-w-x----------...........//$/%/>>&>0>;>E>r>}>>>>>>>?*?+?B?T?^?p?{????????? @'@@@@@@@@@@@@@@A AA;AJAsAAAAAAAAABBB5CDCNC`CjC~CCCCCE*EKEVEsEEEE"F5F?FRF]FwFFFFFFFGGHHHHH II I*I8IWIjItIIIIIIIIIIJJ"J9JCJ_JiJJJJJJK.K/KDKOKUK_KlKvKKKKKKKKKKKL'L-LALLLbLqLLLLL(M/M0M6M7MLMTM_MgMsM{MMMMMMMMMMMN N2NHN[NeNrNzNNNNNNNNNNNNNOO)O3ODOLO_OOOOOOOOPMP^P#R