/*
*
Copyright (c) Eicon Networks, 2000.
*
This source file is supplied for the use with
Eicon Networks range of DIVA Server Adapters.
*
Eicon File Revision : 1.9
*
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
*
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY OF ANY KIND WHATSOEVER INCLUDING ANY
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
*
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
*/
#ifndef __DIVA_EICON_TRACE_API__
#define __DIVA_EICON_TRACE_API__
#define DIVA_TRACE_LINE_TYPE_LEN 64
#define DIVA_TRACE_IE_LEN 64
#define DIVA_TRACE_FAX_PRMS_LEN 128
typedef struct _diva_trace_ie {
byte length;
byte data[DIVA_TRACE_IE_LEN];
} diva_trace_ie_t;
/*
Structure used to represent "State\\BX\\Modem" directory
to user.
*/
typedef struct _diva_trace_modem_state {
dword ChannelNumber;
dword Event;
dword Norm;
dword Options; /* Options received from Application */
dword TxSpeed;
dword RxSpeed;
dword RoundtripMsec;
dword SymbolRate;
int RxLeveldBm;
int EchoLeveldBm;
dword SNRdb;
dword MAE;
dword LocalRetrains;
dword RemoteRetrains;
dword LocalResyncs;
dword RemoteResyncs;
dword DiscReason;
} diva_trace_modem_state_t;
/*
Representation of "State\\BX\\FAX" directory
*/
typedef struct _diva_trace_fax_state {
dword ChannelNumber;
dword Event;
dword Page_Counter;
dword Features;
char Station_ID[DIVA_TRACE_FAX_PRMS_LEN];
char Subaddress[DIVA_TRACE_FAX_PRMS_LEN];
char Password[DIVA_TRACE_FAX_PRMS_LEN];
dword Speed;
dword Resolution;
dword Paper_Width;
dword Paper_Length;
dword Scanline_Time;
dword Disc_Reason;
dword dummy;
} diva_trace_fax_state_t;
/*
Structure used to represent Interface State in the abstract
and interface/D-channel protocol independent form.
*/
typedef struct _diva_trace_interface_state {
char Layer1[DIVA_TRACE_LINE_TYPE_LEN];
char Layer2[DIVA_TRACE_LINE_TYPE_LEN];
} diva_trace_interface_state_t;
typedef struct _diva_incoming_call_statistics {
dword Calls;
dword Connected;
dword User_Busy;
dword Call_Rejected;
dword Wrong_Number;
dword Incompatible_Dst;
dword Out_of_Order;
dword Ignored;
} diva_incoming_call_statistics_t;
typedef struct _diva_outgoing_call_statistics {
dword Calls;
dword Connected;
dword User_Busy;
dword No_Answer;
dword Wrong_Number;
dword Call_Rejected;
dword Other_Failures;
} diva_outgoing_call_statistics_t;
typedef struct _diva_modem_call_statistics {
dword Disc_Normal;
dword Disc_Unspecified;
dword Disc_Busy_Tone;
dword Disc_Congestion;
dword Disc_Carr_Wait;
dword Disc_Trn_Timeout;
dword Disc_Incompat;
dword Disc_Frame_Rej;
dword Disc_V42bis;
} diva_modem_call_statistics_t;
typedef struct _diva_fax_call_statistics {
dword Disc_Normal;
dword Disc_Not_Ident;
dword Disc_No_Response;
dword Disc_Retries;
dword Disc_Unexp_Msg;
dword Disc_No_Polling;
dword Disc_Training;
dword Disc_Unexpected;
dword Disc_Application;
dword Disc_Incompat;
dword Disc_No_Command;
dword Disc_Long_Msg;
dword Disc_Supervisor;
dword Disc_SUB_SEP_PWD;
dword Disc_Invalid_Msg;
dword Disc_Page_Coding;
dword Disc_App_Timeout;
dword Disc_Unspecified;
} diva_fax_call_statistics_t;
typedef struct _diva_prot_statistics {
dword X_Frames;
dword X_Bytes;
dword X_Errors;
dword R_Frames;
dword R_Bytes;
dword R_Errors;
} diva_prot_statistics_t;
typedef struct _diva_ifc_statistics {
diva_incoming_call_statistics_t inc;
diva_outgoing_call_statistics_t outg;
diva_modem_call_statistics_t mdm;
diva_fax_call_statistics_t fax;
diva_prot_statistics_t b1;
diva_prot_statistics_t b2;
diva_prot_statistics_t d1;
diva_prot_statistics_t d2;
} diva_ifc_statistics_t;
/*
Structure used to represent "State\\BX" directory
to user.
*/
typedef struct _diva_trace_line_state {
dword ChannelNumber;
char Line[DIVA_TRACE_LINE_TYPE_LEN];
char Framing[DIVA_TRACE_LINE_TYPE_LEN];
char Layer2[DIVA_TRACE_LINE_TYPE_LEN];
char Layer3[DIVA_TRACE_LINE_TYPE_LEN];
char RemoteAddress[DIVA_TRACE_LINE_TYPE_LEN];
char RemoteSubAddress[DIVA_TRACE_LINE_TYPE_LEN];
char LocalAddress[DIVA_TRACE_LINE_TYPE_LEN];
char LocalSubAddress[DIVA_TRACE_LINE_TYPE_LEN];
diva_trace_ie_t call_BC;
diva_trace_ie_t call_HLC;
diva_trace_ie_t call_LLC;
dword Charges;
dword CallReference;
dword LastDisconnecCause;
char UserID[DIVA_TRACE_LINE_TYPE_LEN];
diva_trace_modem_state_t modem;
diva_trace_fax_state_t fax;
diva_trace_interface_state_t *pInterface;
diva_ifc_statistics_t *pInterfaceStat;
} diva_trace_line_state_t;
#define DIVA_SUPER_TRACE_NOTIFY_LINE_CHANGE ('l')
#define DIVA_SUPER_TRACE_NOTIFY_MODEM_CHANGE ('m')
#define DIVA_SUPER_TRACE_NOTIFY_FAX_CHANGE ('f')
#define DIVA_SUPER_TRACE_INTERFACE_CHANGE ('i')
#define DIVA_SUPER_TRACE_NOTIFY_STAT_CHANGE ('s')
#define DIVA_SUPER_TRACE_NOTIFY_MDM_STAT_CHANGE ('M')
#define DIVA_SUPER_TRACE_NOTIFY_FAX_STAT_CHANGE ('F')
struct _diva_strace_library_interface;
typedef void (*diva_trace_channel_state_change_proc_t)(void *user_context,
struct _diva_strace_library_interface *hLib,
int Adapter,
diva_trace_line_state_t *channel, int notify_subject);
typedef void (*diva_trace_channel_trace_proc_t)(void *user_context,
struct _diva_strace_library_interface *hLib,
int Adapter, void *xlog_buffer, int length);
typedef void (*diva_trace_error_proc_t)(void *user_context,
struct _diva_strace_library_interface *hLib,
int Adapter,
int error, const char *file, int line);
/*
This structure creates interface from user to library
*/
typedef struct _diva_trace_library_user_interface {
void *user_context;
diva_trace_channel_state_change_proc_t notify_proc;
diva_trace_channel_trace_proc_t trace_proc;
diva_trace_error_proc_t error_notify_proc;
} diva_trace_library_user_interface_t;
/*
Interface from Library to User
*/
typedef int (*DivaSTraceLibraryStart_proc_t)(void *hLib);
typedef int (*DivaSTraceLibraryFinit_proc_t)(void *hLib);
typedef int (*DivaSTraceMessageInput_proc_t)(void *hLib);
typedef void* (*DivaSTraceGetHandle_proc_t)(void *hLib);
/*
Turn Audio Tap trace on/off
Channel should be in the range 1 ... Number of Channels
*/
typedef int (*DivaSTraceSetAudioTap_proc_t)(void *hLib, int Channel, int on);
/*
Turn B-channel trace on/off
Channel should be in the range 1 ... Number of Channels
*/
typedef int (*DivaSTraceSetBChannel_proc_t)(void *hLib, int Channel, int on);
/*
Turn D-channel (Layer1/Layer2/Layer3) trace on/off
Layer1 - All D-channel frames received/sent over the interface
inclusive Layer 2 headers, Layer 2 frames and TEI management frames
Layer2 - Events from LAPD protocol instance with SAPI of signalling protocol
Layer3 - All D-channel frames addressed to assigned to the card TEI and
SAPI of signalling protocol, and signalling protocol events.
*/
typedef int (*DivaSTraceSetDChannel_proc_t)(void *hLib, int on);
/*
Get overall card statistics
*/
typedef int (*DivaSTraceGetOutgoingCallStatistics_proc_t)(void *hLib);
typedef int (*DivaSTraceGetIncomingCallStatistics_proc_t)(void *hLib);
typedef int (*DivaSTraceGetModemStatistics_proc_t)(void *hLib);
typedef int (*DivaSTraceGetFaxStatistics_proc_t)(void *hLib);
typedef int (*DivaSTraceGetBLayer1Statistics_proc_t)(void *hLib);
typedef int (*DivaSTraceGetBLayer2Statistics_proc_t)(void *hLib);
typedef int (*DivaSTraceGetDLayer1Statistics_proc_t)(void *hLib);
typedef int (*DivaSTraceGetDLayer2Statistics_proc_t)(void *hLib);
/*
Call control
*/
typedef int (*DivaSTraceClearCall_proc_t)(void *hLib, int Channel);
typedef struct _diva_strace_library_interface {
void *hLib;
DivaSTraceLibraryStart_proc_t DivaSTraceLibraryStart;
DivaSTraceLibraryStart_proc_t DivaSTraceLibraryStop;
DivaSTraceLibraryFinit_proc_t DivaSTraceLibraryFinit;
DivaSTraceMessageInput_proc_t DivaSTraceMessageInput;
DivaSTraceGetHandle_proc_t DivaSTraceGetHandle;
DivaSTraceSetAudioTap_proc_t DivaSTraceSetAudioTap;
DivaSTraceSetBChannel_proc_t DivaSTraceSetBChannel;
DivaSTraceSetDChannel_proc_t DivaSTraceSetDChannel;
DivaSTraceSetDChannel_proc_t DivaSTraceSetInfo;
DivaSTraceGetOutgoingCallStatistics_proc_t \
DivaSTraceGetOutgoingCallStatistics;
DivaSTraceGetIncomingCallStatistics_proc_t \
DivaSTraceGetIncomingCallStatistics;
DivaSTraceGetModemStatistics_proc_t \
DivaSTraceGetModemStatistics;
DivaSTraceGetFaxStatistics_proc_t \
DivaSTraceGetFaxStatistics;
DivaSTraceGetBLayer1Statistics_proc_t \
DivaSTraceGetBLayer1Statistics;
DivaSTraceGetBLayer2Statistics_proc_t \
DivaSTraceGetBLayer2Statistics;
DivaSTraceGetDLayer1Statistics_proc_t \
DivaSTraceGetDLayer1Statistics;
DivaSTraceGetDLayer2Statistics_proc_t \
DivaSTraceGetDLayer2Statistics;
DivaSTraceClearCall_proc_t DivaSTraceClearCall;
} diva_strace_library_interface_t;
/*
Create and return Library interface
*/
diva_strace_library_interface_t *DivaSTraceLibraryCreateInstance(int Adapter,
const diva_trace_library_user_interface_t *user_proc,
byte *pmem);
dword DivaSTraceGetMemotyRequirement(int channels);
#define DIVA_MAX_ADAPTERS 64
#define DIVA_MAX_LINES 32
#endif