www.pudn.com > d4j.zip > EVT.java


// EVT: Model Dialogic event 
// $Id: EVT.java,v 1.6 2003/11/13 11:43:53 cgm8 Exp $ 
/*  
 * Copyright (c) 1999 Carlos G Mendioroz. 
 * 
 *  This file is part of D4J. 
 * 
 *  D4J is free software; you can redistribute it and/or 
 *  modify it under the terms of the GNU Lesser General Public 
 *  License as published by the Free Software Foundation; either 
 *  version 2 of the License, or (at your option) any later version. 
 *   
 *  D4J is distributed in the hope that it will be useful, 
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of 
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
 *  Lesser General Public License for more details. 
 *   
 *  You should have received a copy of the GNU Lesser General Public 
 *  License along with this library; if not, write to the 
 *  Free Software Foundation, Inc., 59 Temple Place - Suite 330, 
 *  Boston, MA  02111-1307, USA. 
 * 
 * Report problems and direct all questions to: 
 * 
 *	tron@acm.org 
 */ 
package local.dialogic; 
 
public class EVT extends java.lang.Object implements Cloneable 
{ 
 
// This is what we model: 
 
// struct evt { 
//       int dev; 
//       unsigned long type; 
//       char data[len]; 
//       } 
// Also, we handle GC events via gc_GetMetaEvent() and get line. 
 
    protected int dev = 0; 
    public int type = 0; 
    public int termmsk = 0; 
    public int cstevt = 0; 
    public int cstdata = 0; 
    public int data = 0; 
    public int line = 0; 
    public long crn = 0; 
    public int conf = 0; 
     
// We have a Bitset to track ISDN devices, because events types 
// clash with GC events... even though they seem to be equivalent. 
    private static java.util.BitSet isISDN; 
 
// Event types 
public static final int  DT_USER     = 0x1000;     /* USER event */ 
 
public static final int  TDX_PLAY     = 0x81;     /* Play Completed */ 
public static final int  TDX_RECORD   = 0x82;     /* Record Completed */ 
public static final int  TDX_GETDIG   = 0x83;     /* Get Digits Completed */ 
public static final int  TDX_DIAL     = 0x84;     /* Dial Completed */ 
public static final int  TDX_CALLP    = 0x85;     /* Call Progress Completed */ 
public static final int  TDX_CST      = 0x86;     /* CST Event Received */ 
public static final int  TDX_SETHOOK  = 0x87;     /* SetHook Completed */ 
public static final int  TDX_WINK     = 0x88;     /* Wink Completed */ 
public static final int  TDX_PLAYTONE = 0x8A;     /* Play Tone Completed */ 
public static final int  TDX_GETR2MF  = 0x8B;     /* Get R2MF completed */ 
public static final int  TDX_BARGEIN  = 0x8C;     /* Barge in completed */ 
public static final int  TDX_NOSTOP   = 0x8D;     /* No Stop needed to be Issued */ 
public static final int  TDX_ERROR    = 0x89;     /* Error Event */ 
 
/* 
 * Unsolicited DTI event types 
 */ 
public static final int DT_DTI= 0x00002000;    /* DTI device class */ 
public static final int DTEV_RCVPDG   =(DT_DTI | 0x48); /* Received a pulse digit */ 
public static final int DTEV_T1ERRC   =(DT_DTI | 0x49); /* T1 error condition event */ 
public static final int DTEV_E1ERRC   = DTEV_T1ERRC   ; /* E1 error condition event == T1 error */ 
public static final int DTEV_COMRSP   =(DT_DTI | 0x4A); /* Successful com test */ 
public static final int DTEV_DATRSP   =(DT_DTI | 0x4B); /* Response to data test */ 
public static final int DTEV_PDDONE   =(DT_DTI | 0x4C); /* Pulse dial complete */ 
public static final int DTEV_SIG      =(DT_DTI | 0x4D); /* Signalling event */ 
public static final int DTEV_RETDIAG  =(DT_DTI | 0x4E); /* Diagnostic complete */ 
public static final int DTEV_WINKCPLT =(DT_DTI | 0x4F); /* Wink complete */ 
public static final int DTEV_MTFCNCPT =(DT_DTI | 0x50); /* Multi-tasking func complete */ 
public static final int DTEV_CLKFAIL  =(DT_DTI | 0x51); /* Clock FallBack Event */ 
public static final int DTEV_ERREVT   =(DT_DTI | 0xF0); /* Error condition event */ 
public static final int DTEV_OUTSERVICE=(DT_DTI | 0xF1); /* Device out of Service event */ 
 
/* 
 * Unsolicited DCB event types 
 */ 
public static final int DT_DCB      = 0x00008000;     /* DCB device class              */ 
public static final int DCBEV_DIGIT = (DT_DCB| 0x96); /* Digit detection event         */ 
public static final int DCBEV_CTU   = (DT_DCB| 0x97); /* Resourcee Tbl Update event    */ 
// our related defines 
public static final int DCBEV_NEW   = (DT_DCB| 0x9a); /* new channel in conf   */ 
public static final int DCBEV_GONE  = (DT_DCB| 0x9b); /* channel left conf     */ 
public static final int DCBEV_CLOSED= (DT_DCB| 0x9c); /* conference closed     */  
 
/* 
 * Unsolicited MSI event types 
 */ 
public static final int DT_MSI      = 0x00004000;      /* MSI device class              */ 
public static final int MSEV_RING    = (DT_MSI | 0x4D);/* MSI Ring successful event */ 
public static final int MSEV_NORING  = (DT_MSI | 0x4e);/* MSI ring unsuccessful event */ 
 
 
// Termination masks 
public static final int  TM_NORMTERM = 0x00000;     /* Normal Termination */ 
public static final int  TM_MAXDTMF  = 0x00001;     /* Max Number of Digits Recd */ 
public static final int  TM_MAXSIL   = 0x00002;     /* Max Silence */ 
public static final int  TM_MAXNOSIL = 0x00004;     /* Max Non-Silence */ 
public static final int  TM_LCOFF    = 0x00008;     /* Loop Current Off */ 
public static final int  TM_IDDTIME  = 0x00010;     /* Inter Digit Delay */ 
public static final int  TM_MAXTIME  = 0x00020;     /* Max Function Time Exceeded */ 
public static final int  TM_DIGIT    = 0x00040;     /* Digit Mask or Digit Type Term. */ 
public static final int  TM_PATTERN  = 0x00080;     /* Pattern Match Silence Off */ 
public static final int  TM_USRSTOP  = 0x00100;     /* Function Stopped by User */ 
public static final int  TM_EOD      = 0x00200;     /* End of Data Reached on Playback */ 
public static final int  TM_TONE     = 0x02000;     /* Tone On/Off Termination */ 
public static final int  TM_BARGEIN  = 0x80000;     /* Play terminated due to Barge-in */ 
public static final int  TM_ERROR    = 0x80000;     /* I/O Device Error */ 
 
// CST events 
public static final int DE_RINGS    = 1 ;    /* Rings received */ 
public static final int DE_SILON    = 2 ;    /* Silence on */ 
public static final int DE_SILOF    = 3 ;    /* Silenec off */ 
public static final int DE_LCON     = 4 ;    /* Loop current on */ 
public static final int DE_LCOF     = 5 ;    /* Loop current off */ 
public static final int DE_WINK     = 6 ;    /* Wink received */ 
public static final int DE_RNGOFF   = 7 ;    /* Ring off event */ 
public static final int DE_DIGITS   = 8 ;    /* Digit Received */ 
public static final int DE_DIGOFF   = 9 ;    /* Digit tone off event */ 
public static final int DE_LCREV    = 13;    /* Loop current reversal   */ 
public static final int DE_TONEON   = 17;    /* Tone ON  Event Received */ 
public static final int DE_TONEOFF  = 18;    /* Tone OFF Event Received */ 
public static final int DE_STOPRINGS= 19;    /* Stop ring detect state */ 
// CallP stati 
public static final int CR_BUSY      =  7;   /* Line busy */ 
public static final int CR_NOANS     =  8;   /* No answer */ 
public static final int CR_NORB      =  9;   /* No ringback */ 
public static final int CR_CNCT      = 10;   /* Call connected */ 
public static final int CR_CEPT      = 11;   /* Operator intercept */ 
public static final int CR_STOPD     = 12;   /* Call analysis stopped */ 
public static final int CR_NODIALTONE= 17;   /* No dialtone detected */ 
public static final int CR_FAXTONE   = 18;   /* Fax tone detected */ 
public static final int CR_ERROR     = 0x100;/* Call analysis error */ 
 
// ISDN Call Control events 
public static final int DT_CC             = 0x800; 
public static final int CCEV_TASKFAIL     = (DT_CC | 0x01); /* abnormal condition state 
                                             unchanged */ 
public static final int CCEV_ANSWERED     = (DT_CC | 0x02); /* call answered and connected */ 
public static final int CCEV_ACCEPT       = (DT_CC | 0x04); /* call is accepted */ 
public static final int CCEV_DROPCALL     = (DT_CC | 0x05); /* cc_DropCall is completed */ 
public static final int CCEV_RESTART      = (DT_CC | 0x06); /* cc_Restart is completed */ 
public static final int CCEV_CALLINFO     = (DT_CC | 0x07); /* Info message received */ 
public static final int CCEV_REQANI       = (DT_CC | 0x08); /* cc_ReqANI() is completed */ 
public static final int CCEV_SETCHANSTATE = (DT_CC | 0x09); /* cc_SetChanState() is completed */ 
public static final int CCEV_FACILITY_ACK = (DT_CC | 0x0A); /* cc_facilityreq() is 
                                             completed and successfully */ 
public static final int CCEV_FACILITY_REJ = (DT_CC | 0x0B); /* cc_facilityreq() is completed 
                                             but rejected, use cc_CauseValue  
                                             to get the reason */ 
public static final int CCEV_MOREDIGITS   = (DT_CC | 0x0C); /* cc_moredigits() is completed*/ 
public static final int CCEV_SETBILLING   = (DT_CC | 0x0E); /* cc_SetBilling() is completed*/ 
public static final int CCEV_ALERTING     = (DT_CC | 0x21); /* The destination telephone 
                                             terminal equipment has received 
                                             connection request (in ISDN acc- 
                                             epted the connection request. This 
                                             event is an unsolicited event) */ 
public static final int CCEV_CONNECTED    = (DT_CC | 0x22); /* The destination answered the 
                                             request */ 
public static final int CCEV_ERROR        = (DT_CC | 0x23); /* unexpected error event */ 
public static final int CCEV_OFFERED      = (DT_CC | 0x24); /* a connection request has 
                                             been made */ 
public static final int CCEV_DISCONNECTED = (DT_CC | 0x26); /* remote disconnected*/ 
public static final int CCEV_PROCEEDING   = (DT_CC | 0x27); /* the call state has been 
                                             changed to the proceeding state */ 
public static final int CCEV_PROGRESSING  = (DT_CC | 0x28); /* a call progress message has 
                                             been received */ 
public static final int CCEV_CALLPROGRESS = (DT_CC | 0x28); /* a call progress message has 
                                             been received */ 
public static final int CCEV_USRINFO      = (DT_CC | 0x29); /* a user to user information 
                                             event is coming */ 
public static final int CCEV_FACILITY     = (DT_CC | 0x2A); /* a facility request is made 
                                             by CO */ 
public static final int CCEV_CONGESTION   = (DT_CC | 0x2B); /* remote end is not ready to 
                                             accept incoming user information */ 
public static final int CCEV_D_CHAN_STATUS= (DT_CC | 0x2E); /* report D-channel status to 
                                             the user */ 
public static final int CCEV_NOUSRINFOBUF = (DT_CC | 0x30); /* User information element 
                                             buffer is not ready */ 
public static final int CCEV_NOFACILITYBUF= (DT_CC | 0x31); /* Facility buffer is not ready*/ 
public static final int CCEV_BLOCKED      = (DT_CC | 0x32); 
public static final int CCEV_UNBLOCKED    = (DT_CC | 0x33); 
 
public static final int CCEV_ISDNMSG      = (DT_CC | 0x34); /* An "information" message or unde-  
                                             fined massage has been received */ 
public static final int CCEV_NOTIFY       = (DT_CC | 0x35); /* A Notify message has been  
                                             received */ 
public static final int CCEV_L2FRAME      = (DT_CC | 0x36); /* A layer 2 access message has been 
                                             received */ 
public static final int CCEV_L2BFFRFULL   = (DT_CC | 0x37); /* reserved for future use */ 
public static final int CCEV_L2NOBFFR     = (DT_CC | 0x38); /* Failed to get a free space for an 
                                             incoming layer 2 access message */ 
public static final int CCEV_SETUP_ACK    = (DT_CC | 0x39); /* CALL_SETUP_ACK message has been received */ 
 
public static final int CCEV_DIVERTED     = (DT_CC | 0x40); 
public static final int CCEV_HOLDACK      = (DT_CC | 0x41); 
public static final int CCEV_HOLDCALL     = (DT_CC | 0x42); 
public static final int CCEV_HOLDREJ      = (DT_CC | 0x43); 
public static final int CCEV_RETRIEVEACK  = (DT_CC | 0x44); 
public static final int CCEV_RETRIEVECALL = (DT_CC | 0x45); 
public static final int CCEV_RETRIEVEREJ  = (DT_CC | 0x46); 
public static final int CCEV_NSI          = (DT_CC | 0x47); 
public static final int CCEV_TRANSFERACK  = (DT_CC | 0x48); 
public static final int CCEV_TRANSFERREJ  = (DT_CC | 0x49); 
public static final int CCEV_TRANSIT      = (DT_CC | 0x4A); 
public static final int CCEV_RESTARTFAIL  = (DT_CC | 0x4B); /* abnormal condition state */ 
public static final int CCEV_TERM_REGISTER= (DT_CC | 0x4C); /* BRI msg - An action is required for the 
                                             North Am. terminal initialization procedure */ 
public static final int CCEV_RCVTERMREG_ACK=  (DT_CC | 0x4E); /* Positive acknowledgement of cc_TermRegisterResponse */ 
public static final int CCEV_RCVTERMREG_NACK= (DT_CC | 0x4F); /* Negative acknowledgement of cc_TermRegisterResponse */ 
public static final int CCEV_INFONULL       = (DT_CC | 0x50); /* NULL (Dummy) CRN Information IE */ 
public static final int CCEV_TONEREDEFINEFAIL=      (DT_CC | 0x51); 
public static final int CCEV_TONEREDEFINE    =      (DT_CC | 0x52); 
public static final int CCEV_PLAYTONEFAIL    =      (DT_CC | 0x53); 
public static final int CCEV_PLAYTONE        =      (DT_CC | 0x54); 
public static final int CCEV_STOPTONEFAIL    =      (DT_CC | 0x55); 
public static final int CCEV_STOPTONE        =      (DT_CC | 0x56); 
public static final int CCEV_NOTIFYNULL     = (DT_CC | 0x57); /* NULL (Dummy) CRN Notify IE */ 
public static final int CCEV_REDIRECT       = (DT_CC | 0x58); /* ISDN REDIRECT message */ 
public static final int CCEV_RELEASECALL    = (DT_CC | 0x59); /* Asynchronous cc_ReleaseCall() Completion event */ 
public static final int CCEV_RELEASECALLFAIL= (DT_CC | 0x5A); /* Asynchronous cc_ReleaseCall() fail event */ 
public static final int CCEV_FACILITYNULL   = (DT_CC | 0x5B); /* NULL (Dummy) CRN Facility IE */ 
public static final int CCEV_INFOGLOBAL     = (DT_CC | 0X5C); /* GLOBAL CRN Information IE */ 
public static final int CCEV_NOTIFYGLOBAL   = (DT_CC | 0X5D); /* GLOBAL CRN Notify IE */ 
public static final int CCEV_FACILITYGLOBAL = (DT_CC | 0x5E); /* GLOBAL CRN Facility IE */ 
public static final int CCEV_DROPACK        = (DT_CC | 0x5F); /* DROP Request Acknowledgement message */ 
public static final int CCEV_DROPREJ        = (DT_CC | 0x60); /* DROP Request Reject message */ 
public static final int CCEV_CONFDROP	    = (DT_CC | 0x61); /* Request to drop the call*/ 
 
    public String toString() { 
        StringBuffer buf = new StringBuffer(); 
        boolean evtmask = false; // Also in dialogic.dll! 
        if ((type & DT_CC) != 0 && isISDN.get(dev)) 
            switch (type) {     
	        // ISDN Call Control 
            case CCEV_TASKFAIL:	buf.append("CC Task failed"); 
				    break; 
            case CCEV_ANSWERED:	buf.append("CC call answered"); 
				    break; 
            case CCEV_ACCEPT:	buf.append("CC call accepted"); 
				    break; 
            case CCEV_DROPCALL:	buf.append("CC call dropped"); 
				    break; 
            case CCEV_RESTART:	buf.append("CC Line restart"); 
				    break; 
            case CCEV_CALLINFO:	buf.append("CC Info message received"); 
				    break; 
            case CCEV_REQANI:	buf.append("CC requested ANI"); 
				    break; 
            case CCEV_SETCHANSTATE:	buf.append("CC channel state set"); 
				    break; 
            case CCEV_FACILITY_ACK:	buf.append("CC Facility Ack"); 
				    break; 
            case CCEV_FACILITY_REJ:	buf.append("CC Facility rejected"); 
				    break; 
            case CCEV_MOREDIGITS:	buf.append("CC more digits"); 
				    break; 
            case CCEV_SETBILLING:	buf.append("CC Billing set"); 
				    break; 
            case CCEV_ALERTING:	buf.append("CC call alerting"); 
				    break; 
            case CCEV_CONNECTED:	buf.append("CC call connected"); 
				    break; 
            case CCEV_ERROR:	buf.append("CC unexpected error event"); 
				    break; 
            case CCEV_OFFERED:	buf.append("CC call offered"); 
				    break; 
            case CCEV_DISCONNECTED:	buf.append("CC remote disconnected"); 
				    break; 
            case CCEV_PROCEEDING:	buf.append("CC call proceeding"); 
				    break; 
            case CCEV_PROGRESSING:	buf.append("CC call progressing"); 
				    break; 
            case CCEV_USRINFO:	buf.append("CC UUIE received"); 
				    break; 
            case CCEV_FACILITY:	buf.append("CC facility request by CO"); 
				    break; 
            case CCEV_CONGESTION:	buf.append("CC congestion"); 
				    break; 
            case CCEV_D_CHAN_STATUS:buf.append("CC D-channel status"); 
				    break; 
            case CCEV_NOUSRINFOBUF:	buf.append("CC No user information element buffer"); 
				    break; 
            case CCEV_NOFACILITYBUF:buf.append("CC No facility buffer"); 
				    break; 
            case CCEV_BLOCKED:	buf.append("CC Line blocked"); 
				    break; 
            case CCEV_UNBLOCKED:	buf.append("CC Line unblocked"); 
				    break; 
            case CCEV_ISDNMSG:	buf.append("CC ISDN message received"); 
				    break; 
            case CCEV_NOTIFY:	buf.append("CC Notify message received"); 
				    break; 
            case CCEV_L2FRAME:	buf.append("CC L2 frame received"); 
				    break; 
            case CCEV_L2BFFRFULL:	buf.append("CC L2 buffer full"); 
				    break; 
            case CCEV_L2NOBFFR:	buf.append("CC no L2 buffer"); 
				    break; 
            case CCEV_SETUP_ACK:	buf.append("CC call setup ok"); 
				    break; 
            case CCEV_DIVERTED:	buf.append("CC call diverted"); 
				    break; 
            case CCEV_HOLDACK:	buf.append("CC call on hold"); 
				    break; 
            case CCEV_HOLDCALL:	buf.append("CC hold call"); 
				    break; 
            case CCEV_HOLDREJ:	buf.append("CC hold rejected"); 
				    break; 
            case CCEV_RETRIEVEACK:	buf.append("CC call retrieved"); 
				    break; 
            case CCEV_RETRIEVECALL:	buf.append("CC retrieve call"); 
				    break; 
            case CCEV_RETRIEVEREJ:	buf.append("CC retrieve rejected"); 
				    break; 
            case CCEV_NSI:		buf.append("CC NSI IE"); 
				    break; 
            case CCEV_TRANSFERACK:	buf.append("CC call transferred"); 
				    break; 
            case CCEV_TRANSFERREJ:	buf.append("CC transfer rejected"); 
				    break; 
            case CCEV_TRANSIT:	buf.append("CC Transit IE"); 
				    break; 
            case CCEV_RESTARTFAIL:	buf.append("CC abnormal condition state"); 
				    break; 
            case CCEV_TERM_REGISTER:buf.append("CC request for registration"); 
				    break; 
            case CCEV_RCVTERMREG_ACK:buf.append("CC Registration ok"); 
				    break; 
            case CCEV_RCVTERMREG_NACK:buf.append("CC Bad registration"); 
				    break; 
            case CCEV_INFONULL:	buf.append("CC NULL CRN Information IE"); 
				    break; 
            case CCEV_TONEREDEFINEFAIL:	buf.append("CC tone redefine failure"); 
				    break; 
            case CCEV_TONEREDEFINE:	buf.append("CC tone redefine"); 
				    break; 
            case CCEV_PLAYTONEFAIL:	buf.append("CC tone play failure"); 
				    break; 
            case CCEV_PLAYTONE:	buf.append("CC tone play"); 
				    break; 
            case CCEV_STOPTONEFAIL:	buf.append("CC tone stop failure"); 
				    break; 
            case CCEV_STOPTONE:	buf.append("CC tone stop"); 
				    break; 
            case CCEV_NOTIFYNULL:	buf.append("CC NULL CRN Notify IE"); 
				    break; 
            case CCEV_REDIRECT:	buf.append("ISDN REDIRECT message"); 
				    break; 
            case CCEV_RELEASECALL:	buf.append("CC call released"); 
				    break; 
            case CCEV_RELEASECALLFAIL:	buf.append("CC call release failure"); 
				    break; 
            case CCEV_FACILITYNULL:	buf.append("CC NULL CRN Facility IE"); 
				    break; 
            case CCEV_INFOGLOBAL:	buf.append("CC GLOBAL CRN Information IE"); 
				    break; 
            case CCEV_NOTIFYGLOBAL:	buf.append("CC GLOBAL CRN Notify IE"); 
				    break; 
            case CCEV_FACILITYGLOBAL:	buf.append("CC GLOBAL CRN Facility IE"); 
				    break; 
            case CCEV_DROPACK:	buf.append("CC call drop ok"); 
				    break; 
            case CCEV_DROPREJ:	buf.append("CC call drop rejected"); 
				    break; 
            case CCEV_CONFDROP:	buf.append("CC call drop requested"); 
				    break; 
            default:            buf.append("Unknown ISDN event "+type); 
        } 
        else  
        switch (type) { 
        case DT_USER:       buf.append("User event (" + data + ")"); 
                            break; 
        case TDX_PLAY:      buf.append("Play Completed"); 
                            evtmask = true; 
                            break; 
        case TDX_RECORD:    buf.append("Record Completed"); 
                            evtmask = true; 
                            break; 
        case TDX_GETDIG:    buf.append("Get Digits Completed"); 
                            evtmask = true; 
                            break; 
        case TDX_DIAL:      buf.append("Dial Completed"); 
                            break; 
        case TDX_CALLP:     buf.append("Call Progress Completed"); 
        	switch(data) { 
        	// Set by analog channel service via callpStatus() 
                case CR_BUSY      :  buf.append(": Line busy"); break; 
                case CR_NOANS     :  buf.append(": No answer"); break; 
                case CR_NORB      :  buf.append(": No ringback"); break; 
                case CR_CNCT      :  buf.append(": Call connected"); break; 
                case CR_CEPT      :  buf.append(": Operator intercept"); break; 
                case CR_STOPD     :  buf.append(": Call analysis stopped"); break; 
                case CR_NODIALTONE:  buf.append(": No dialtone detected"); break; 
                case CR_FAXTONE   :  buf.append(": Fax tone detected"); break; 
                case CR_ERROR     :  buf.append(": Call analysis error"); break; 
                } 
                break; 
        case TDX_CST:       buf.append("CST Event Received: "); 
             switch(cstevt) { 
                case DE_RINGS:  buf.append("Rings"); break; 
                case DE_SILON:  buf.append("Silence on"); break; 
                case DE_SILOF:  buf.append("Silenec off"); break; 
                case DE_LCON:   buf.append("Loop current on"); break; 
                case DE_LCOF:   buf.append("Loop current off"); break; 
                case DE_WINK:   buf.append("Wink"); break; 
                case DE_RNGOFF: buf.append("Ring off"); break; 
                case DE_DIGITS: buf.append("Digit " + cstdata); break; 
                case DE_DIGOFF: buf.append("Digit tone off"); break; 
                case DE_LCREV:  buf.append("Loop current reversal"); break; 
                case DE_TONEON: buf.append("Tone ON " + cstdata); break; 
                case DE_TONEOFF: buf.append("Tone OFF " + cstdata); break; 
                case DE_STOPRINGS: buf.append("Stop ring detect state"); break; 
                default: buf.append("Unknown CST "+cstevt+"/"+cstdata+"/"+data); 
             } 
             break; 
        case TDX_SETHOOK:   buf.append("SetHook Completed"); 
                            break; 
        case TDX_WINK:      buf.append("Wink Completed"); 
                            break; 
        case TDX_PLAYTONE:  buf.append("Play Tone Completed"); 
                            evtmask = true; 
                            break; 
        case TDX_GETR2MF:   buf.append("Get R2MF completed"); 
                            break; 
        case TDX_BARGEIN:   buf.append("Barge in completed"); 
                            break; 
        case TDX_NOSTOP:    buf.append("No Stop needed to be Issued"); 
                            break; 
        case TDX_ERROR:     buf.append("Error Event"); 
                            break; 
        case  DTEV_RCVPDG:  buf.append("Received a pulse digit"); 
                            break; 
        case  DTEV_E1ERRC:  buf.append("E1/T1 error condition event: "); 
                            switch(data) { 
                            case Dialogic.DTE1_RLOS:	 
                                buf.append("receive loss of sync"); 
                                break; 
                            case Dialogic.DTE1_RUA1: 
                                buf.append("receive unframed all ones alarm"); 
                                break; 
                            case Dialogic.DTE1_FSERR: 
                                buf.append("frame sync error"); 
                                break; 
                            case Dialogic.DTE1_RRA:	 
                                buf.append("receive remote alarm"); 
                                break; 
                            case Dialogic.DTE1_BPVS:	 
                                buf.append("bipolar violation count saturation"); 
                                break; 
                            case Dialogic.DTE1_CECS:	 
                                buf.append("CRC error count saturation"); 
                                break; 
                            case Dialogic.DTE1_ECS:	 
                                buf.append("error count saturation"); 
                                break; 
                            case Dialogic.DTE1_LOS:	 
                                buf.append("loss of E-1 digital signal detected"); 
                                break; 
                            case Dialogic.DTE1_DPM:	 
                                buf.append("driver performance monitor"); 
                                break; 
                            case Dialogic.DTE1_MFSERR:	 
                                buf.append("multiframe sync error"); 
                                break; 
                            case Dialogic.DTE1_RSA1:	 
                                buf.append("receive signaling all ones alarm"); 
                                break; 
                            case Dialogic.DTE1_RDMA:	 
                                buf.append("receive distant multiframe alarm"); 
                                break; 
                            case Dialogic.DTE1_RLOSOK:	 
                                buf.append("end of receive loss of sync"); 
                                break; 
                            case Dialogic.DTE1_RUA1OK:	 
                                buf.append("end of receive unframed all ones alarm"); 
                                break; 
                            case Dialogic.DTE1_FSERROK:	 
                                buf.append("end of frame sync error"); 
                                break; 
                            case Dialogic.DTE1_RRAOK:	 
                                buf.append("end of receive remote alarm"); 
                                break; 
                            case Dialogic.DTE1_BPVSOK:	 
                                buf.append("end of bipolar violation count saturation"); 
                                break; 
                            case Dialogic.DTE1_CECSOK:	 
                                buf.append("end of CRC error count saturation"); 
                                break; 
                            case Dialogic.DTE1_ECSOK:	 
                                buf.append("end of error count saturation"); 
                                break; 
                            case Dialogic.DTE1_LOSOK:	 
                                buf.append("end of loss of E-1 digital signal detected"); 
                                break; 
                            case Dialogic.DTE1_DPMOK:	 
                                buf.append("end of driver performance monitor"); 
                                break; 
                            case Dialogic.DTE1_MFSERROK:	 
                                buf.append("end of multiframe sync error"); 
                                break; 
                            case Dialogic.DTE1_RSA1OK:	 
                                buf.append("end of receive signaling all ones alarm"); 
                                break; 
                            case Dialogic.DTE1_RDMAOK:	 
                                buf.append("end of receive distant multiframe alarm"); 
                                break; 
                            } 
                            break; 
        case  DTEV_COMRSP:  buf.append("Successful com test"); 
                            break; 
        case  DTEV_DATRSP:  buf.append("Response to data test"); 
                            break; 
        case  DTEV_PDDONE:  buf.append("Pulse dial complete"); 
                            break; 
        case  DTEV_SIG:     buf.append("Signalling event: "); 
                            if ((data & Dialogic.DTC_ABIT) != 0) { 
                                if ((data & Dialogic.DTB_ABIT)!= 0) 
                                    buf.append("AON "); 
                                else 
                                    buf.append("AOFF "); 
                            } 
                            if ((data & Dialogic.DTC_BBIT) != 0) { 
                                if ((data & Dialogic.DTB_BBIT)!= 0) 
                                    buf.append("BON "); 
                                else 
                                    buf.append("BOFF "); 
                            } 
                            if ((data & Dialogic.DTMM_WINK) != 0) { 
                                buf.append("Wink"); 
                            } 
                            break; 
        case  DTEV_RETDIAG: buf.append("Diagnostic complete"); 
                            break; 
        case  DTEV_WINKCPLT:buf.append("Wink complete"); 
                            break; 
        case  DTEV_MTFCNCPT:buf.append("Multi-tasking func complete"); 
                            break; 
        case  DTEV_CLKFAIL: buf.append("Clock FallBack Event"); 
                            break; 
        case  DTEV_ERREVT:  buf.append("Error condition event"); 
                            break; 
        case  DTEV_OUTSERVICE:buf.append("Device out of Service event"); 
                            break; 
        case  DCBEV_DIGIT:  buf.append("DCB Digit detection event ("+data+")"); 
                            break; 
        case  DCBEV_CTU:    buf.append("DCB Resourcee Tbl Update event"); 
                            break; 
        case  DCBEV_NEW:    buf.append("DCB new channel in conf"); 
                            break; 
        case  DCBEV_GONE:    buf.append("DCB channel left conf"); 
                            break; 
        case  DCBEV_CLOSED:    buf.append("DCB conference closed"); 
                            break; 
        case  MSEV_RING:    buf.append("MSI Ring successful event"); 
                            break; 
        case  MSEV_NORING:  buf.append("MSI ring unsuccessful event"); 
                            break; 
 
	// Global Call                             
                             
        case GCChannel.GCEV_TASKFAIL: 
                            buf.append("Abnormal condition; state unchanged"); 
                            break; 
        case GCChannel.GCEV_ANSWERED: 
                            buf.append("Call answered and connected"); 
                            break; 
        case GCChannel.GCEV_CALLPROGRESS: 
                            buf.append("Call progressing"); 
                            break; 
        case GCChannel.GCEV_ACCEPT: 
                            buf.append("Call is accepted"); 
                            break; 
        case GCChannel.GCEV_DROPCALL: 
                            buf.append("gc_DropCall is completed"); 
                            break; 
        case GCChannel.GCEV_RESETLINEDEV: 
                            buf.append("Restart event"); 
                            break; 
        case GCChannel.GCEV_CALLINFO: 
                            buf.append("Info message received"); 
                            break; 
        case GCChannel.GCEV_REQANI: 
                            buf.append("gc_ReqANI() is completed"); 
                            break; 
        case GCChannel.GCEV_SETCHANSTATE: 
                            buf.append("gc_SetChanState() is completed"); 
                            break; 
        case GCChannel.GCEV_FACILITY_ACK: 
                            buf.append("Facility acknowledged"); 
                            break; 
        case GCChannel.GCEV_FACILITY_REJ: 
                            buf.append("Facility rejected"); 
                            break; 
        case GCChannel.GCEV_MOREDIGITS: 
                            buf.append("cc_moredigits() is completed"); 
                            break; 
        case GCChannel.GCEV_SETBILLING: 
                            buf.append("gc_SetBilling() is completed"); 
                            break; 
        case GCChannel.GCEV_ALERTING: 
                            buf.append("Remote accept (alerting)"); 
                            break; 
        case GCChannel.GCEV_CONNECTED: 
                            buf.append("Destination answered the request"); 
                            break; 
        case GCChannel.GCEV_ERROR: 
                            buf.append("unexpected error event"); 
                            break; 
        case GCChannel.GCEV_OFFERED: 
                            buf.append("A connection request has been made"); 
                            break; 
        case GCChannel.GCEV_DISCONNECTED: 
                            buf.append("Remote end disconnected"); 
                            break; 
        case GCChannel.GCEV_PROCEEDING: 
                            buf.append("Proceeding"); 
                            break; 
        case GCChannel.GCEV_PROGRESSING: 
                            buf.append("Progressing"); 
                            break; 
        case GCChannel.GCEV_USRINFO: 
                            buf.append("A user to user information event"); 
                            break; 
        case GCChannel.GCEV_FACILITYREQ: 
                            buf.append("A facility request is made by CO"); 
                            break; 
        case GCChannel.GCEV_CONGESTION: 
                            buf.append("Remote end is not ready to accept"); 
                            break; 
        case GCChannel.GCEV_FACILITY: 
                            buf.append("Facility info. available"); 
                            break; 
        case GCChannel.GCEV_D_CHAN_STATUS: 
                            buf.append("Report D-channel status to the user"); 
                            break; 
        case GCChannel.GCEV_NOUSRINFOBUF: 
                            buf.append("User information buffer is not ready"); 
                            break; 
        case GCChannel.GCEV_NOFACILITYBUF: 
                            buf.append("Facility buffer is not ready"); 
                            break; 
        case GCChannel.GCEV_BLOCKED: 
                            buf.append("Line device is blocked"); 
                            break; 
        case GCChannel.GCEV_UNBLOCKED: 
                            buf.append("Line device is no longer blocked"); 
                            break; 
        case GCChannel.GCEV_ISDNMSG: 
                            buf.append("ISDN message"); 
                            break; 
        case GCChannel.GCEV_NOTIFY: 
                            buf.append("Notify message received"); 
                            break; 
        case GCChannel.GCEV_L2FRAME: 
                            buf.append("Level2 frame"); 
                            break; 
        case GCChannel.GCEV_L2BFFRFULL: 
                            buf.append("Level2 buffer full"); 
                            break; 
        case GCChannel.GCEV_L2NOBFFR: 
                            buf.append("Level2 no buffer available"); 
                            break; 
        case GCChannel.GCEV_SETUP_ACK: 
                            buf.append("Setup acknowledged"); 
                            break; 
        case GCChannel.GCEV_CALLSTATUS: 
                            buf.append("call status, e.g. busy"); 
                            break; 
        case GCChannel.GCEV_DIVERTED: 
                            buf.append("Diverted"); 
                            break; 
        case GCChannel.GCEV_HOLDACK: 
                            buf.append("Hold acknowledged"); 
                            break; 
        case GCChannel.GCEV_HOLDCALL: 
                            buf.append("Hold call"); 
                            break; 
        case GCChannel.GCEV_HOLDREJ: 
                            buf.append("Hold rejected"); 
                            break; 
        case GCChannel.GCEV_RETRIEVEACK: 
                            buf.append("Retrieve acknowledged"); 
                            break; 
        case GCChannel.GCEV_RETRIEVECALL: 
                            buf.append("Retrieve call"); 
                            break; 
        case GCChannel.GCEV_RETRIEVEREJ: 
                            buf.append("Retrieve rejected"); 
                            break; 
        case GCChannel.GCEV_NSI: 
                            buf.append("NSI event"); 
                            break; 
        case GCChannel.GCEV_TRANSFERACK: 
                            buf.append("Transfer acknowledged"); 
                            break; 
        case GCChannel.GCEV_TRANSFERREJ: 
                            buf.append("Transfer rejected"); 
                            break; 
        case GCChannel.GCEV_TRANSIT: 
                            buf.append("Transit event"); 
                            break; 
        case GCChannel.GCEV_ACKCALL: 
                           buf.append("Termination event for gc_CallACK()"); 
                            break; 
        default:            buf.append("Unknown event "+type); 
        } 
 
    if (evtmask) { 
        // Dxxx event  
        if ((termmsk & TM_MAXDTMF) != 0)   buf.append(",Max Number of Digits Recd"); 
        if ((termmsk & TM_MAXDTMF) != 0)   buf.append(",Max Number of Digits Recd"); 
        if ((termmsk & TM_MAXSIL) != 0)    buf.append(",Max Silence"); 
        if ((termmsk & TM_MAXNOSIL) != 0)  buf.append(",Max Non-Silence"); 
        if ((termmsk & TM_LCOFF) != 0)     buf.append(",Loop Current Off"); 
        if ((termmsk & TM_IDDTIME) != 0)   buf.append(",Inter Digit Delay"); 
        if ((termmsk & TM_MAXTIME) != 0)   buf.append(",Max Function Time Exceeded"); 
        if ((termmsk & TM_DIGIT) != 0)     buf.append(",Digit Mask or Digit Type Term."); 
        if ((termmsk & TM_PATTERN) != 0)   buf.append(",Pattern Match Silence Off"); 
        if ((termmsk & TM_USRSTOP) != 0)   buf.append(",Function Stopped by User"); 
        if ((termmsk & TM_EOD) != 0)       buf.append(",End of Data Reached on Playback"); 
        if ((termmsk & TM_TONE) != 0)      buf.append(",Tone On/Off Termination"); 
        if ((termmsk & TM_BARGEIN) != 0)   buf.append(",Play terminated due to Barge-in"); 
        if ((termmsk & TM_ERROR) != 0)     buf.append(",/O Device Error"); 
    } 
    return buf.toString();                 
    } 
     
    public EVT dup(int device) { 
        EVT nEvt = null; 
        try { 
            nEvt = (EVT)super.clone(); 
        } catch (Exception e) {} 
        nEvt.dev = device; 
        return nEvt; 
    } 
     
    /** Let EVT class know kind of device is ISDN */ 
    public static void setISDN(int device) { 
        isISDN.set(device); 
    } 
     
    public static void resetISDN(int device) { 
        isISDN.clear(device); 
    } 
     
    static { 
        isISDN = new java.util.BitSet(); 
    } 
}