JVR Documentation

Abstract

JVR is an IVR/CT application framework that allows Java applications to control Dialogic telephony hardware. It provides a JNI bridge between the Dialogic System Release Software and the Java Virtual Machine.

This document serves as a programming guide for Java developers. By necessity, it also provides some documentation of the Dialogic software API.

The official location of this document is:


Table of Contents

1. Introduction
2. Getting Started
1. Requirements
2. Supported Dialogic Cards
3. Installation
3.1. Linux
3.2. Windows
4. Post Installation Tasks
3. Development and Usage
4. Development and Usage
5. FAQ
1. Miscellaneous Facts
A. Release Procedure
B. Release Notes
1. Version 0.6
2. Version 0.5
3. Version 0.4
4. Version 0.3
5. Version 0.2
6. Version 0.1
C. Debugging ISDN using ISDIAG and ISDTRACE
1. Menu Tree
2. Outgoing Call

Chapter 1. Introduction

Before getting into the details of IVR/CT programming, it's probably best to get some of the basics out of the way.

1.1.

What is JVR trying to accomplish? What are the goals of the application?

The goal of the JVR project is to map as much of the Dialogic C API into Java classes as possible. In most cases, this mapping is pretty straightforward, with minor changes like a (char*) pointer is changed to a java.lang.String object.

Sometimes it is not possible to extend the API into Java exactly as Dialogic implemented it. For example, everywhere that Dialogic make suse of unsigned short, the Java code needs to use int. Also, you can't register a Java method as a native-context signal handler. Where these issues exist we tried to keep the solutions consistent. If you spot inconsistencies, let us know. We want JVR to be predictable.

JVR sometimes introduces constructs that do not exist in the Dialogic API at all. An example would be the event handling system. Here, JVR makes use of the familiar Event Listener pattern to dispatch Event objects to JVR components. JVR takes care of calling all of the relevant event information functions in advance. While this is new in the sense that Dialogic does not have a similiar pattern, it is old news to Java programming in general.

1.2.

Why does the API look so much like the Dialogic API?

The API looks like the Dialogic API because that's a primary goal of the project: extending the API into Java. While it is possible to simplify the Dialogic API and still support the most common programming needs, the resulting JVR API would not be as flexible in the long term.

Also, by keeping as close as possible to the original API, we negate the need for alot of documentation. For example, consider the function dx_playvox:

  • The path for the VOX file changes from (char*) to java.lang.String. That is pretty straightforward and consistent.
  • The (DV_TPT*) pointer changes to a net.threebit.jvr.DV_TPT[] object, but the meaning of each struct member (aka: class member) remain. Instead of pointing to a set of DV_TPT structs (either contiguous or linked-list), developers supply an array of DV_TPT objects. JVR will convert between the two automatically.
  • The (DX_XPB*) pointer changes to a net.threebit.jvr.DX_XPB[] object, but the meaning of each struct member (aka: class member) remain. Instead of pointing to a set of DX_XPB structs (either contiguous or linked-list), developers supply an array of DX_XPB objects. JVR will convert between the two automatically.
  • The (unsigned short) arguments changes to an int argument, but otherwise has exactly the same meaning.
Since the function/method meanings remain the same, we don't need to document anything (except to give links into the Dialogic API documentation).

1.3.

How much of the Dialogic API will you need to learn?

Only as much as you need to. If all you want to do is answer incoming calls (on regular, analog phone lines) and play the same recorded message to each caller, you'll only need dx_wtring(), dx_sethook(), dx_playvox() and maybe a few other functions.

If you want to handle user-input and play back variable content to the user, you'll need dx_getdig() and some other functions.

You get the idea. This is another reason why JVR does not impose any ideals on how the Dialogic API should be mapped: You are the only qualified person to decide how your applications should work.

Thankfully, there is alot of sample code available in the JVR Unit Test package (net.threebit.jvr.tests). You can browse them online too.

1.4.

Will you need to know JNI?

No. Everything is handled internally by JVR. Of course, if there is a part of the Dialogic API that JVR has not implemented yet, then you will have everything you need to start extending the JVR package as you require.

Chapter 2. Getting Started

This section will get you started with JVR. One thing though before we begin: the online copy of this document is updated continously as new development is performed and it may be out-of-sync with the most recent release. If the instructions here seem inconsistent with the version you downloaded, it's probably because the source code has been changed since then and the documentation is synchronized to the code. Just something to keep in mind.

1. Requirements

  • Dialogic System Release Software. Windows users will require 5.1.1 and Service Pack 1. Linux users will require 5.1 and Service Pack 1, as well as the Linux Streams (LIS) software. Consult the Dialogic installation guides for more details.

  • The Dialogic GlobalCall packages must be installed (GlobalCall is included with the standard Dialogic software - just be sure to select it during installation). JVR uses the GlobalCall event functions internally even if the application does not call any method within the gc class. Windows users should simply choose a complete installation. Linux users should ensure that the GC package is installed.

  • Optional: To compile JVR, you will require Ant and the GNU Compiler Collection. Since JVR is a Java package, it is assumed you are already familiar with Ant. Most Linux distributions will already include the GNU Compiler Collection (gcc, ld, make, etc). Windows users will need to install the Cygwin "Linux-Like" Environment for Windows.

  • Notice To Windows Users. The Win32 binary releases of JVR include binary DLL files from the Cygwin project. JVR/Threebit provides a mirror of all of the Cygwin binaries and sources. While you do not need to download any additional files (they are included), we must let you know that the mirror exists in order to comply with the GPL.

2. Supported Dialogic Cards

JVR should work with any Dialogic card that uses the Dialogic System Release Software. That said, the following cards have been tested with JVR. If your card is not listed please send an email to kevino@threebit.net so I can add your card to the list.

  • D-41HS
  • D/16SC-LS
  • D/240SC-T1
  • D/300PCI-E1
  • D/41D
  • D/41ESC
  • D/480SC-2T1
  • D/4PCI
  • D/600SC-2E1
  • MSI/SC80

3. Installation

This section documents how to install a binary build of JVR on Linux or Windows. See the developer chapter for information on how to download and build JVR from source.

3.1. Linux

  1. Download the most recent Linux version of JVR and save it in /tmp. This procedure assumes you opt for the tgz archive.

    cd /tmp
    # Modify X and Y to reflect appropriate version numbers
    wget http://threebit.net/projects/jvr/download/jvr-X-Y-linux.tgz
    
  2. Extract the TAR file into /usr/local/jvr. If you choose to install JVR into a different directory, that's ok too. Just make substitutions as required.

    cd /usr/local
    tar zxvf /tmp/jvr-X-Y-linux.tgz
    

3.2. Windows

  1. Download the most recent Windows version of JVR and expand the Zip file into c:\program files\jvr.

  2. This is the shortest installation procedure ever written.

4. Post Installation Tasks

Check Your Installation

The first thing you will want to do after installing JVR is check that everything from the Dialogic runtime to the JVR runtime is working properly.

First, run bin/dx_open_test. It should print out OK and exit. If it prints out FAILED then something is wrong with your Dialogic installation. dx_open_test is a simple C program that opens a handle to the first Dialogic Voice Resource (dxxxB1C1). It is an extremely simple test to verify that the Dialogic runtime is working and at least one voice card has been detected. If this test fails, then don't even bother trying to get JVR to work until you've fixed whatever is wrong.

Next we test that JVR can access the Dialogic runtime. To do so we will run an application that does the exact same thing as dx_open_test, except that it will use Java/JVR instead of C. Invoke the test by running bin/jvr_dx_open_test.bat (win32) or bin/jvr_dx_open_test.sh (linux). Once again, OK is good and an exception is bad. You may need to change the JAVA_HOME setting.

Examples

Now that JVR is installed you'll want to poke around a bit before attempting to build your own application. The easiest way to do that is run the JVRConsole and select an example from the drop down menu. From the main JVR directory, run bin/jvrconsole.bat or bin/jvrconsole.sh to run the GUI, then select one of the examples from the Example menu. The purpose of each example is contained in the Javadoc output for each example class. See net.threebit.jvr.console.

Chapter 3. Development and Usage

This section will document how to write applications using JVR, and how to use JVR itself (invocation, system parameters, OS issues, etc).

Unfortunately, it hasn't been written yet.

Chapter 4. Development and Usage

This section will document how to write applications using JVR, and how to use JVR itself (invocation, system parameters, OS issues, etc).

Unfortunately, it hasn't been written yet.

Chapter 5. FAQ

5.1.

Why do I keep getting "dlopen of libicapi.so failed: dlerror=/usr/lib/libicapi.so: undefined symbol: gcdb_InsertLinedev"?

The Dialogic software is having difficulty loading libgc.so. Try running export LD_PRELOAD=/usr/dialogic/lib/libgc.so before launching your JVR application.

5.2.

When I try to run a JVR application I get a DLL error: java.exe - Unable To Locate DLL. The dynamic link library libgc.dll count not be found in the specified path.

JVR relies on Global Call, which is optional when you install the Dialogic software. Rerun the Dialogic installation program and ensure that Global Call is selected if you do a typical installation, or just choose Complete.

1. Miscellaneous Facts

## Various factoids that I have not integrated into the
## regular documentation yet.
% make -f Makefile.win32 jnifields.o
g++ -fPIC -w -c \
	-I/cygdrive/c/j2sdk1.4.2_01/include \
	-I/cygdrive/c/j2sdk1.4.2_01/include/win32 \
	-o jnifields.o \
	jnifields.cpp
In file included from /cygdrive/c/j2sdk1.4.2_01/include/jni.h:27,
                 from jnifields.cpp:22:
/cygdrive/c/j2sdk1.4.2_01/include/win32/jni_md.h:16: error: syntax error before
   `;' token

See http://ptolemy.eecs.berkeley.edu/ptolemyII/ptII3.0/ptII3.0.2/doc/codeDoc/jni/JNIUtilities.html

##
## When using dx.reciottdata, dx.playiottdata, or any function that
## takes a DX_XPB parameter, use this to record and playback to 
## WAV files that work with Windows Media Player, etc.
##
final DX_XPB xpb = new DX_XPB();
xpb.wFileFormat = dx.FILE_FORMAT_WAVE;
xpb.wDataFormat = dx.DATA_FORMAT_PCM;
xpb.nSamplesPerSec = dx.DRT_11KHZ;
xpb.wBitsPerSample = 8;

Appendix A. Release Procedure

This section documents the procedure that should be followed when making a release of JVR. Skip this section unless you're trying to build a binary release and uploaded it to the threebit website.

  1. Make final changes to the release notes and perform a final CVS checkin of all code. Start the release-notes for the next release (move the TODO section).

  2. Create a TAG for this release. The tag is created at the tip of HEAD (the development branch). Do this on BOA. Make the tag a branch since we may come back to do maintenance on it.

    cd ~/code/jvr; cvs rtag -b jvr-0-1 jvr

  3. On a Linux and Win32 machine:

    Edit build.xml and edit the release.tag property to match the name of the tag/branch in the previous step, then run "ant release".

    Copy the TGZ and ZIP files to the JVR website:

    scp jvr-* kevino@threebit.net:/www/threebit.net/projects/jvr/download

  4. On boa, edit the download page to reflect the new release. Run ~/bin/jvr-www-update.sh to rebuild the documentation, etc.

  5. Send an email to the mailing list with a copy of the release notes attached.

Appendix B. Release Notes

This appendix contains the releases notes for each version of JVR.

1. Version 0.6

  *** This release is still in development ***

2. Version 0.5

 * Implemented more Voice API functions.
   dx_deltones(), dx_chgdur(), dx_chgfreq(), dx_chgrepcnt(), dx_initcallp()

 * Added new symbol.
   TID_BUSY1, TID_BUSY2, TID_DIAL_INTL, TID_DIAL_LCL, TID_DIAL_XTRA,
   TID_FAX1, TID_FAX2, TID_RNGBK1, TID_DISCONNECT,

 * User I/O functions added to support user supplied input/output stream
   playback.  dx_setuio() implemented internally.

 * Moved to the LGPL license to allow JVR to be integrated/distributed with
   non-GPL works.

 * Increased the number of native-context buffers for DX_XPB, DIGBUF
   GC_PARM_BLK and DX_IOTT structures to 200.

 * Completed Javadoc links to the official Dialogic API.

 * ms.addtoconf() and ms.remfromconf(), ATMS_TSSGBIT(), ms_dsprescount(), 
   ms_setbrdparm(), ms_setcde()

 * Skeletal support for DCB (Conferencing) functions.
 
 * Additional example code (console package).
 
 * DX_XPB.getWavFormat(File file) added to simplify the creation
   of a parameter block for wav files.

3. Version 0.4

  Example code for determining available Dialogic hardware.
  http://threebit.net/pipermail/jvr-general/2004-April/000167.html
  http://threebit.net/pipermail/jvr-general/2004-January/000022.html

  dx_fileopen and dx_fileclose provided on Linux platforms to enable use
    of dx.playf/dx.recf functions.

  dx_wtcallid, though I could not get it to return caller ID information
    on my D/41ESC board.  Could be my hardware though, so we'll assume
    the function is working ok.

  dx_getparm, dx_setparm and associated symbols.

  dx_open_test native executable.  After installing JVR, run this program
    to verify that the underlying Dialogic system is functional.  Always
    make sure that this program reports "OK" before sending in a JVR
    problem report.

  DxOpenTest JVR class.  Once the Dialogic runtime is confirmed, this
    JVR based application will do a dx.open test.

  Required Cygwin DLLs are included in the Windows release (in JVR/bin).

  GlobalCall support expanded considerably.

  Critial (show stopper) JNI bugs resolved.

  JVR Event model fixes.

  ISDN via GlobalCall supported and tested.

  T1 via GlobalCall supported and tested.

  T1 via "R4 ISDN" programming model supported and tested.

  GCOutbound and ImmediateCAP (Call Analysis and Progress) utility classes.

  Thanks to Shawn Deleurme for doing the Linux binary build....


4. Version 0.3

Combination of bug fixes, new features and documentation.

  New Dialogic API Mappings

    ATDT_STATUS
    ATDT_TSSGBIT
    ATDX_HOOKST
    dt_settssig
    dt_settssigsim
    dt_xmitwink
    dx_playwav
    dx_recwav

  Documentation

    net.threebit.jvr.dx Javadocs improved significantly.

  Bugs

    gc_Start() was not being called before event handling started.

  Thanks To:

    Andrew Taylor
    Kevin W. English
    Matt Darnell

5. Version 0.2

Quick bug fixing release.

  Global Call

    gc_AttachResource
    gc_CRN2LineDev
    gc_Detach
    gc_GetCallState
    gc_GetCTInfo
    gc_GetResourceH
    gc_GetXmitSlot
    gc_LoadDxParm
    gc_SetChanState
    gc_GetCTInfo removed due to compile issues.  Will be fixed later.

  Documentation

    - Added "required software" section to the documentation.
    - Added a "readme" that refers the user to the online docs.

  Build Process

    - By default, and now builds the JAR file and all native libs.
    - New task: "prep" will obtain lib/junit.jar automatically.

  Examples

    - Example1 and Example2 added to JVRConsole.

  Misc

    - Various bugs, typos and paper bag issues.

  Thanks To:

    Andrew Taylor - testing, suggestions, and more testing.

6. Version 0.1

This is the first release of the JVR package.  I had planned to hold
off on the first release until the GlobaCall support was complete, but
there has been enough interest in the non-GlobalCall portions to 
warrant one anyway.

Below is a list of the bindings that have been completed to date.
See the Javadoc, HTML and/or PDF documentation for full details
on how to use JVR.

  Device Handling
    dt_open, dt_close
    dx_open, dx_close
    ms_open, ms_close

  SC Bus Routing
    ag_getxmitslot, ag_listen, ag_unlisten
    dt_getxmitslot, dt_listen, dt_unlisten
    dx_getxmitslot, dx_listen, dx_unlisten
    ms_getxmitslot, ms_listen, ms_unlisten

  SRL Event Management
    dt_setevtmsk
    dx_setevtmsk
    ms_setevtmsk

  Conferencing / MSI Stations
    ms_delconf
    ms_estconf
    ms_genring
    ms_monconf
    ms_stopfn
    ms_unmonconf

  Voice Processing
    ATDX_CONNTYPE
    ATDX_CPTERM
    ATDX_LONGLOW
    ATDX_SHORTLOW
    ATDX_SIZEHI
    ATDX_TERMMSK
    ATDX_TRCOUNT
    dx_bldtgen
    dx_clrdigbuf
    dx_dial
    dx_fileopen, dx_fileclose, dx_fileerrno (win32 only)
    dx_getdig
    dx_playtone
    dx_playtoneEx
    dx_playvox
    dx_playwav
    dx_rec
    dx_recf
    dx_sethook
    dx_stopch
    dx_wtring

  Standard Release Library (SRL)
    ATDV_ERRMSGP
    ATDV_LASTERR
    ATDV_NAMEP
    sr_getevtdatap
    sr_getevtdev
    sr_getevtlen
    sr_getevttype
    sr_waitevt
    sr_waitevtEx

  Global Call
    gc_CCLibStatusEx
    gc_DropCall
    gc_GetCallInfo
    gc_GetMetaEvent, gc_GetMetaEventEx
    gc_Listen
    gc_MakeCall
    gc_ReleaseCallEx
    gc_ResetLineDev
    gc_Start
    gc_Stop
    gc_UnListen
    gc_WaitCall
    gc_AnswerCall

----- Notes ----------------------------------------------------------

* The Global Call package must be installed.  The event handling
  routines make use of gc_GetMetaEvent() and gc_GetMetaEventEx().
  Even if your application will not be using Global Call directly,
  it must be installed.


Appendix C. Debugging ISDN using ISDIAG and ISDTRACE

If you are reading this, then you are having trouble getting your ISDN configuration running. This section will bring you through using the ISDIAG program to receive and place an ISDN call. It may not work for you as-is, since one of the things about ISDN is that each telephone company has slightly different needs - but at least you'll have more information than I did the first time I tried to do this.

This tutorial assumes that your ISDN protocol is set already (4ESS/5ESS, DMS, etc).

It's time to run ISDIAG which is located in the Dialogic "bin" directory. This tutorial assumes you are running on Windows - Linux users should adapt filenames as necessary. Running ISDIAG with no parameters gives you a help message:

Dialogic ISDN Diagnostic Utility
Copyright(c) 1998 Dialogic Corporation
Version Package 3 v1.01

USAGE:  isdiag <board> <channel> <boardtype> <type> <voice>

    board =====> board #
    channel ===> 1-23 for T1
            ===> 1-30 for E1
            ===> 1-2  for BRI
    boardtype => 't'  = T1
              => 'e'  = E1
              => 'b'  = BRI
              => 'b2' = BRI/2VFD
    type ======> 'p'  = PEB
                 's'  = SCBUS
    trace mode =====> 'r' = Trace mode, No waitcall issued at startup
                       default: Normal mode, waitcall issued at startup
    voice =====> 'v' = voice supported(span cards)
                       default: no voice support(dti cards)

I am using a D/480SC-2T1 card so I will choose the first T1 (board 1) and the first timeslot on that T1 (channel 1). Obviously the board type is T1 and SCBUS.

Thomas Fejes contributes: Regarding the ISDIAG trace mode command line option ('r'): it is used when you want to capture an ISDN trace while another ISDN application is running. For example, you have a commercial Dialogic application running in the field that is misbehaving at the ISDN level and neither it nor the telco provides any ISDN tracing facility. Using the 'r' option, you can use ISDIAG to 'eavesdrop' at the ISDN level without interfering with the commercial app. Run "isdiag 1 1 t s r" in parallel with the commercial app and then choose the normal options to create a trace file. The key thing that the 'r' option does is it avoids interacting with the trunk by not issuing a reset or waitcall (which ISDIAG does without the 'r' option). Note that since ISDIAG only works on Springware boards (e.g. D/xxxSC, D/xxxPCI and D/xxxJCT boards), you cannot use this method with DM3 boards.

Running ISDIAG with parameters this time we get to the opening menu. If you don't get to this screen then you have probably forgotten to start the Dialogic service.

C:\>isdiag 1 1 t s
-----------------------------------------------------------------------------
MAIN MENU                                ISDIAG Version Package 3 - Beta 1.00
                                         LOS  OOF  RAI  AIS  CRC  R/E  DCH
1.  set call parameters                   0    0    0    0    0    0    0
2.  request calling party number(ANI)
3.  send maintenance request
4.  display information
5.  drop call                            F1. help menu
6.  make call
7.  play/record/dial
8.  set info
9.  send message
10. start/stop/browse trace
11. restart and waitcall
12. shell to DOS
13. change current channel
14. Hold/Retrieve Call
15. dpnss supp service
ESC exit
  Please enter choice:

Just under "MAIN MENU" you should see nothing. If you see "RED ALARM" or "YELLOW ALARM" then something is wrong with the T1. Wait two minutes for the alarms to clear (patience is key!). If they don't go away then I recommend you call your telco - they will be able to debug the situation from their side better than you can guess about it from your side.

In the upper-right you will see various status bits about your D channel and the T1 itself. In a perfect world it should be all zeros:

LOS  OOF  RAI  AIS  CRC  R/E  DCH
 0    0    0    0    0    0    0

In the end, if DCH is 1 then your D-channel is down. If after two minutes it has not come up (changed to 0) then call your telco.

1. Menu Tree

First, let us document each menu option and it's purpose. For display purposes the submenus that appear under each menu option are displaed 'inline'. There are several parts of ISDIAG I have never used so I haven't bothered documenting them.

MAIN MENU

1.  set call parameters

  1.  change destination number type

    0. Unknown
    1. International Number
    2. National Number
    4. Subscriber Number
    5. Abbreviated Number

    "National Number" is what you want if you are in the US or Canada
    and are calling another number in the US or Canada.  If you are from
    someplace else (or are calling someplace else), please let me know your
    settings so I can update this document.

  2.  change destination number plan

    0. Unknown
    1. ISDN/Telephony number plan(Rec. E.164/E.163)
    2. Telephony number plan(E.163)
    9. Private number plan

    "ISDN/Telephony" is what you want.

  3.  change facility coding value

    0. Clear coding value
    01. SDN
    02. MEGACOM 800
    03. MEGACOM
    06. ACCUNET
    08. I800
    16. ATT MULTIQUEST

    I am unsure what the Facility Coding Value means, but I
    can tell you that I had to set it to 0 (Clear Coding Value).
    Again - if you can offer an explanation let me know so I can update
    this document.

  4.  change facility feature service

    Not used / Not documented.

  5.  change presentation indicator

    0. Presentation allowed
    1. Presentation restricted
    2. Number not available due to interworking
    3. Reserved

    This controls what information the phone network will
    display to the end user when you make an outgoing call.

  6.  change calling party number

    0. Number is sent en_bloc
    1. International number
    2. National number

      0. Unknown
      1. ISDN/Telephony number plan(Rec. E.164/E.163)
      2. Telephony number plan(E.163)
      9. Private number plan

      Again, when calling to/from the US and Canada from within
      the US/Canada, you specify the calling number as a National Number
      that uses the ISDN/Telephone number plan.

    4. Subscriber number
    5. Overlap sending

  7.  do not send calling party number

    Not used / Not documented.

  8.  change info. transfer capability

    Not used / Not documented.

  9.  change user info. layer 1 protocol

    01.  CCITT standardized rate adaption V.110/X.30
    02.  Recommendation G.711 Mu-law
    03.  Recommendation G.711 A-law
    04.  Recommendation G.721 32kbit/s ADPCM & Recommendation I.460
    07.  Non-CCITT standardized rate adaption
    16.  Remove layer 1 protocol field

    My PRI is connected to Quest so I had to change this value
    to "G.711 Mu-law.

  10. change user rate

    Not used / Not documented.

  11. change called party number

    Enter called party number: 

    I am not certain if you have to set this value but 
    I have been doing it anyway.  Use the full 10 digits.

  12. Disable called party Subaddressing
  13. Disable calling party Subaddressing

    I'm not certain what Subaddressing is, but I disabled
    it.  After you disable it these menu options change to say 
    "Enable ..."

2.  request calling party number(ANI)

  Not used / Not documented.

3.  send maintenance request

  Not used / Not documented.

4.  display information

  1.  Display Called Party Subaddress

    Not used / Not documented.

  2.  Display User-User Info.

    Not used / Not documented.

  3.  Display B channel information

    BOARD: 1

    CHAN:     1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
    STATUS:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

    CHAN:    17 18 19 20 21 22 23
    STATUS:  00 00 00 00 00 00 00

    This section will show the status of each B
    channel in the PRI.  If they are all zeros than you're
    all good.

  4.  Display D channel information

    Returns you to the main menu.  The D-channel
    information is in the upper-right hand corner.

5.  drop call

  When you have a connected call (either inbound
  or outbound, this option hangs up.

6.  make call

  Call: <enter the phone number to call>

  Quest informed me that even if the call is long distance,
  I don't need to put a "1" before the area code - just put in the
  10 digit number you are calling.  Your Telco, or ISDN protocol
  if not using 5ESS, may have different requirements.
  

7.  play/record/dial

  Not used / Not documented.

8.  set info

  Not used / Not documented.

9.  send message

  Not used / Not documented.

10. start/stop/browse trace

  1. Start Trace

    Please enter the full path name and filename:

    Enter a filename "c:\trace.log" then hit
    enter.  From this point on the messages that are 
    received and transmitted on the ISDN D-channel will
    be recorded in binary form.  The ISDTRACE utility is
    used afterwards to convert the file to a human-
    readable format.

  2. Stop Trace

    Stops a running trace.

  3. Browse Trace

    Not used / Not documented.

11. restart and waitcall

  Please enter channel to restart:

  Before using ISDIAG to receive an incoming 
  call, you have to tell it what channel to expect the
  call on.  Enter a B-channel number here (1 to 23).
  

12. shell to DOS

  Not used / Not documented.

13. change current channel

  Change current channel to:

  When making outbound calls, ISDIAG will
  use whatever channel you specified on the command
  line until you use this option to select another
  B channel.  Enter a B-channel number here (1 to 23).
  

14. Hold/Retrieve Call

  Not used / Not documented.

15. dpnss supp service

  Not used / Not documented.

2. Outgoing Call

Use this procedure to make an outgoing call with ISDIAG. This call was made using a D/480SC-2T1 card connected to a Quest PRI running the 5ESS protocol.

Restart ISDIAG.

Ensure that your D-channel is still up (DCH=0).

1. Set Call Parameters

  3. Change facility coding value
    0. 0. Clear coding value

  5. Change presentation indicator
    0. Presentation allowed

  6.  Change calling party number
    2. National number
    1. ISDN/Telephony number plan(Rec. E.164/E.163)
    Enter the 10-digit number you are calling from.

  9. Change user info. layer 1 protocol
    2. Recommendation G.711 Mu-law

  11. Change called party number
    Enter called party number:
    Enter the 10-digit number you are calling.

  12. Disable called party Subaddressing
  13. Disable calling party Subaddressing

  Hit ESC to return to the main menu.

10. Start/stop/browse trace
  1. Start Trace
    Please enter the full path name and filename: c:\trace.log

6. Make call
  Call: Enter the 10-digit number you are calling.

  When you have hit enter, the status line at the bottom of the
  screen will be updated with events as the call is placed.

  send SETUP to NETWORK
    The first step in making a call.
  received PROCEEDING from FW
    The SETUP message was accepted and the call
    is being routed through the phone network.
  received ALERTING message from NETWORK
    The remote end is ringing.
  received CONNECT message from NETWORK
    The remote end has picked up.

  If your call did not go through, then skip the "Drop Call" step
  and move right to stopping the trace file.

5. Drop call

  send DEALLOC to FW

10. Start/stop/browse trace
  2. Stop Trace

EXIT.

Convert the trace file from binary to text format:

C:\>isdtrace trace.log trace.txt

Dialogic ISDN Trace Utility
Copyright (c) 1997 Dialogic Corporation
Version 1.00-Alpha-0.10
BINARY TRACE
ISDN Protocol: PRI 4ESS/5ESS

And here is the output from the trace file.

RECEIVE
Command=1   SAPI=0x00
TEI=0x00
0x01 0x9b  Receive Ready

TIME STAMP: 2/28/2004, 21:12:41.819
                                       TRANSMIT
                                       Response=1   SAPI=0x00
                                       TEI=0x00
                                       0x01 0xa3  Receive Ready

                                       TIME STAMP: 2/28/2004, 21:12:41.819
                                       TRANSMIT
                                       Command=0    SAPI=0x00
                                       TEI=0x00
                                       0x9a 0xa2  Information
                                       Dest=0   CR=0x0015
                                       SETUP(0x05)
                                         1:           BEARER CAPABILITY(0x04)
                                         2:           IE Length(0x03)
                                         3:  1------- Extension Bit
                                             -00----- Coding Standard
                                             ---00000 Info. Transfer Cap.
                                         4:  1------- Extension Bit
                                             -00----- Transfer Mode
                                             ---10000 Info. Transfer Rate
                                         5:  1------- Extension Bit
                                             -01----- Layer 1 Indent
                                             ---00010 User Info. Layer 1
                                         1:           CHANNEL ID(0x18)
                                         2:           IE Length(0x03)
                                         3:  1------- Extension Bit
                                             -0------ Interface ID Present
                                             --1----- Interface Type
                                             ---0---- Spare
                                             ----1--- Preferred/Exclusive
                                             -----0-- D-Channel Indicator
                                             ------01 Info. Channel Sel.
                                       3.2:  1------- Extension Bit
                                             -00----- Coding Standard
                                             ---0---- Number Map
                                             ----0011 Channel/Map Element
                                         4:  1------- Extension Bit
                                             -0000001 Channel Number/Slot Map
                                         1:           CALLING PARTY NUM(0x6c)
                                         2:           IE Length(0x0c)
                                         3:  0------- Extension Bit
                                             -010---- Type Of Number
                                             ----0001 Numbering Plan ID
                                        3a:  1------- Extension Bit
                                             -00----- Presentation Indicator
                                             ---000-- Spare
                                             ------00 Screening Indicator
                                             6134564561  Number Digit(s)
                                         1:           CALLED PARTY NUM(0x70)
                                         2:           IE Length(0x0b)
                                         3:  1------- Extension Bit
                                             -010---- Type of Number
                                             ----0001 Numbering plan ID
                                             6138672620  Number Digit(s)

                                       TIME STAMP: 2/28/2004, 21:12:41.867
RECEIVE
Response=0    SAPI=0x00
TEI=0x00
0x01 0x9c  Receive Ready

TIME STAMP: 2/28/2004, 21:12:41.867
RECEIVE
Command=1   SAPI=0x00
TEI=0x00
0xa2 0x9c  Information
Orig=1   CR=0x8015
CALL PROCEEDING(0x02)
  1:           CHANNEL ID(0x18)
  2:           IE Length(0x03)
  3:  1------- Extension Bit
      -0------ Interface ID Present
      --1----- Interface Type
      ---0---- Spare
      ----1--- Preferred/Exclusive
      -----0-- D-Channel Indicator
      ------01 Info. Channel Sel.
3.2:  1------- Extension Bit
      -00----- Coding Standard
      ---0---- Number Map
      ----0011 Channel/Map Element
  4:  1------- Extension Bit
      -0000001 Channel Number/Slot Map

TIME STAMP: 2/28/2004, 21:12:41.883
                                       TRANSMIT
                                       Response=1   SAPI=0x00
                                       TEI=0x00
                                       0x01 0xa4  Receive Ready

                                       TIME STAMP: 2/28/2004, 21:12:41.883
RECEIVE
Command=1   SAPI=0x00
TEI=0x00
0xa4 0x9c  Information
Orig=1   CR=0x8015
ALERTING(0x01)
  1:           PROGRESS INDICATOR(0x1e)
  2:           IE Length(0x02)
  3:  1------- Extension Bit
      -00----- Coding Standard
      ---0---- Spare
      ----0001 Location
  4:  1------- Extension Bit
      -0001000 Progress Description

TIME STAMP: 2/28/2004, 21:12:42.803
                                       TRANSMIT
                                       Response=1   SAPI=0x00
                                       TEI=0x00
                                       0x01 0xa6  Receive Ready

                                       TIME STAMP: 2/28/2004, 21:12:42.803
RECEIVE
Command=1   SAPI=0x00
TEI=0x00
0x01 0x9d  Receive Ready

TIME STAMP: 2/28/2004, 21:12:44.795
                                       TRANSMIT
                                       Response=1   SAPI=0x00
                                       TEI=0x00
                                       0x01 0xa7  Receive Ready

                                       TIME STAMP: 2/28/2004, 21:12:44.795
RECEIVE
Command=1   SAPI=0x00
TEI=0x00
0xa6 0x9c  Information
Orig=1   CR=0x8015
CALL CONNECT(0x07)

TIME STAMP: 2/28/2004, 21:12:46.723
                                       TRANSMIT
                                       Response=1   SAPI=0x00
                                       TEI=0x00
                                       0x01 0xa8  Receive Ready

                                       TIME STAMP: 2/28/2004, 21:12:46.723
                                       TRANSMIT
                                       Command=0    SAPI=0x00
                                       TEI=0x00
                                       0x9c 0xa8  Information
                                       Dest=0   CR=0x0015
                                       CALL CONNECT ACKNOWLEDGE(0x0f)

                                       TIME STAMP: 2/28/2004, 21:12:46.731
RECEIVE
Response=0    SAPI=0x00
TEI=0x00
0x01 0x9e  Receive Ready

TIME STAMP: 2/28/2004, 21:12:46.731
RECEIVE
Command=1   SAPI=0x00
TEI=0x00
0x01 0x9f  Receive Ready

TIME STAMP: 2/28/2004, 21:12:48.715
                                       TRANSMIT
                                       Response=1   SAPI=0x00
                                       TEI=0x00
                                       0x01 0xa9  Receive Ready

                                       TIME STAMP: 2/28/2004, 21:12:48.715
RECEIVE
Command=1   SAPI=0x00
TEI=0x00
0x01 0x9f  Receive Ready

TIME STAMP: 2/28/2004, 21:12:50.715
                                       TRANSMIT
                                       Response=1   SAPI=0x00
                                       TEI=0x00
                                       0x01 0xa9  Receive Ready

                                       TIME STAMP: 2/28/2004, 21:12:50.715
                                       TRANSMIT
                                       Command=0    SAPI=0x00
                                       TEI=0x00
                                       0x9e 0xa8  Information
                                       Dest=0   CR=0x0015
                                       CALL DISCONNECT(0x45)
                                         1:           CAUSE(0x08)
                                         2:           IE Length(0x02)
                                         3:  1------- Extension Bit
                                             -00----- Coding Standard
                                             ---0---- Spare
                                             ----0000 Location
                                         4:  1------- Extension Bit
                                             -0010000 Cause Value

                                       TIME STAMP: 2/28/2004, 21:12:51.435
RECEIVE
Response=0    SAPI=0x00
TEI=0x00
0x01 0xa0  Receive Ready

TIME STAMP: 2/28/2004, 21:12:51.443
RECEIVE
Command=1   SAPI=0x00
TEI=0x00
0xa8 0xa0  Information
Orig=1   CR=0x8015
RELEASE(0x4d)

TIME STAMP: 2/28/2004, 21:12:51.443
                                       TRANSMIT
                                       Response=1   SAPI=0x00
                                       TEI=0x00
                                       0x01 0xaa  Receive Ready

                                       TIME STAMP: 2/28/2004, 21:12:51.443
                                       TRANSMIT
                                       Command=0    SAPI=0x00
                                       TEI=0x00
                                       0xa0 0xaa  Information
                                       Dest=0   CR=0x0015
                                       RELEASE COMPLETE(0x5a)

                                       TIME STAMP: 2/28/2004, 21:12:51.451
RECEIVE
Response=0    SAPI=0x00
TEI=0x00
0x01 0xa2  Receive Ready

Other resources: