1 /*
2  *
3   Copyright (c) Eicon Networks, 2000.
4  *
5   This source file is supplied for the use with
6   Eicon Networks range of DIVA Server Adapters.
7  *
8   Eicon File Revision :    1.9
9  *
10   This program is free software; you can redistribute it and/or modify
11   it under the terms of the GNU General Public License as published by
12   the Free Software Foundation; either version 2, or (at your option)
13   any later version.
14  *
15   This program is distributed in the hope that it will be useful,
16   but WITHOUT ANY WARRANTY OF ANY KIND WHATSOEVER INCLUDING ANY
17   implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18   See the GNU General Public License for more details.
19  *
20   You should have received a copy of the GNU General Public License
21   along with this program; if not, write to the Free Software
22   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23  *
24  */
25 #ifndef __DIVA_EICON_TRACE_API__
26 #define __DIVA_EICON_TRACE_API__
27 
28 #define DIVA_TRACE_LINE_TYPE_LEN 64
29 #define DIVA_TRACE_IE_LEN        64
30 #define DIVA_TRACE_FAX_PRMS_LEN  128
31 
32 typedef struct _diva_trace_ie {
33 	byte length;
34 	byte data[DIVA_TRACE_IE_LEN];
35 } diva_trace_ie_t;
36 
37 /*
38 	Structure used to represent "State\\BX\\Modem" directory
39 	to user.
40 	*/
41 typedef struct _diva_trace_modem_state {
42 	dword	ChannelNumber;
43 
44 	dword	Event;
45 
46 	dword	Norm;
47 
48 	dword Options; /* Options received from Application */
49 
50 	dword	TxSpeed;
51 	dword	RxSpeed;
52 
53 	dword RoundtripMsec;
54 
55 	dword SymbolRate;
56 
57 	int		RxLeveldBm;
58 	int		EchoLeveldBm;
59 
60 	dword	SNRdb;
61 	dword MAE;
62 
63 	dword LocalRetrains;
64 	dword RemoteRetrains;
65 	dword LocalResyncs;
66 	dword RemoteResyncs;
67 
68 	dword DiscReason;
69 
70 } diva_trace_modem_state_t;
71 
72 /*
73 	Representation of "State\\BX\\FAX" directory
74 	*/
75 typedef struct _diva_trace_fax_state {
76 	dword	ChannelNumber;
77 	dword Event;
78 	dword Page_Counter;
79 	dword Features;
80 	char Station_ID[DIVA_TRACE_FAX_PRMS_LEN];
81 	char Subaddress[DIVA_TRACE_FAX_PRMS_LEN];
82 	char Password[DIVA_TRACE_FAX_PRMS_LEN];
83 	dword Speed;
84 	dword Resolution;
85 	dword Paper_Width;
86 	dword Paper_Length;
87 	dword Scanline_Time;
88 	dword Disc_Reason;
89 	dword	dummy;
90 } diva_trace_fax_state_t;
91 
92 /*
93 	Structure used to represent Interface State in the abstract
94 	and interface/D-channel protocol independent form.
95 	*/
96 typedef struct _diva_trace_interface_state {
97 	char Layer1[DIVA_TRACE_LINE_TYPE_LEN];
98 	char Layer2[DIVA_TRACE_LINE_TYPE_LEN];
99 } diva_trace_interface_state_t;
100 
101 typedef struct _diva_incoming_call_statistics {
102 	dword Calls;
103 	dword Connected;
104 	dword User_Busy;
105 	dword Call_Rejected;
106 	dword Wrong_Number;
107 	dword Incompatible_Dst;
108 	dword Out_of_Order;
109 	dword Ignored;
110 } diva_incoming_call_statistics_t;
111 
112 typedef struct _diva_outgoing_call_statistics {
113 	dword Calls;
114 	dword Connected;
115 	dword User_Busy;
116 	dword No_Answer;
117 	dword Wrong_Number;
118 	dword Call_Rejected;
119 	dword Other_Failures;
120 } diva_outgoing_call_statistics_t;
121 
122 typedef struct _diva_modem_call_statistics {
123 	dword Disc_Normal;
124 	dword Disc_Unspecified;
125 	dword Disc_Busy_Tone;
126 	dword Disc_Congestion;
127 	dword Disc_Carr_Wait;
128 	dword Disc_Trn_Timeout;
129 	dword Disc_Incompat;
130 	dword Disc_Frame_Rej;
131 	dword Disc_V42bis;
132 } diva_modem_call_statistics_t;
133 
134 typedef struct _diva_fax_call_statistics {
135 	dword Disc_Normal;
136 	dword Disc_Not_Ident;
137 	dword Disc_No_Response;
138 	dword Disc_Retries;
139 	dword Disc_Unexp_Msg;
140 	dword Disc_No_Polling;
141 	dword Disc_Training;
142 	dword Disc_Unexpected;
143 	dword Disc_Application;
144 	dword Disc_Incompat;
145 	dword Disc_No_Command;
146 	dword Disc_Long_Msg;
147 	dword Disc_Supervisor;
148 	dword Disc_SUB_SEP_PWD;
149 	dword Disc_Invalid_Msg;
150 	dword Disc_Page_Coding;
151 	dword Disc_App_Timeout;
152 	dword Disc_Unspecified;
153 } diva_fax_call_statistics_t;
154 
155 typedef struct _diva_prot_statistics {
156 	dword X_Frames;
157 	dword X_Bytes;
158 	dword X_Errors;
159 	dword R_Frames;
160 	dword R_Bytes;
161 	dword R_Errors;
162 } diva_prot_statistics_t;
163 
164 typedef struct _diva_ifc_statistics {
165 	diva_incoming_call_statistics_t	inc;
166 	diva_outgoing_call_statistics_t outg;
167 	diva_modem_call_statistics_t		mdm;
168 	diva_fax_call_statistics_t			fax;
169 	diva_prot_statistics_t					b1;
170 	diva_prot_statistics_t					b2;
171 	diva_prot_statistics_t					d1;
172 	diva_prot_statistics_t					d2;
173 } diva_ifc_statistics_t;
174 
175 /*
176 	Structure used to represent "State\\BX" directory
177 	to user.
178 	*/
179 typedef struct _diva_trace_line_state {
180 	dword	ChannelNumber;
181 
182 	char Line[DIVA_TRACE_LINE_TYPE_LEN];
183 
184 	char Framing[DIVA_TRACE_LINE_TYPE_LEN];
185 
186 	char Layer2[DIVA_TRACE_LINE_TYPE_LEN];
187 	char Layer3[DIVA_TRACE_LINE_TYPE_LEN];
188 
189 	char RemoteAddress[DIVA_TRACE_LINE_TYPE_LEN];
190 	char RemoteSubAddress[DIVA_TRACE_LINE_TYPE_LEN];
191 
192 	char LocalAddress[DIVA_TRACE_LINE_TYPE_LEN];
193 	char LocalSubAddress[DIVA_TRACE_LINE_TYPE_LEN];
194 
195 	diva_trace_ie_t	call_BC;
196 	diva_trace_ie_t	call_HLC;
197 	diva_trace_ie_t	call_LLC;
198 
199 	dword Charges;
200 
201 	dword CallReference;
202 
203 	dword LastDisconnecCause;
204 
205 	char UserID[DIVA_TRACE_LINE_TYPE_LEN];
206 
207 	diva_trace_modem_state_t modem;
208 	diva_trace_fax_state_t   fax;
209 
210 	diva_trace_interface_state_t* pInterface;
211 
212 	diva_ifc_statistics_t*				pInterfaceStat;
213 
214 } diva_trace_line_state_t;
215 
216 #define DIVA_SUPER_TRACE_NOTIFY_LINE_CHANGE             ('l')
217 #define DIVA_SUPER_TRACE_NOTIFY_MODEM_CHANGE            ('m')
218 #define DIVA_SUPER_TRACE_NOTIFY_FAX_CHANGE              ('f')
219 #define DIVA_SUPER_TRACE_INTERFACE_CHANGE               ('i')
220 #define DIVA_SUPER_TRACE_NOTIFY_STAT_CHANGE             ('s')
221 #define DIVA_SUPER_TRACE_NOTIFY_MDM_STAT_CHANGE         ('M')
222 #define DIVA_SUPER_TRACE_NOTIFY_FAX_STAT_CHANGE         ('F')
223 
224 struct _diva_strace_library_interface;
225 typedef void (*diva_trace_channel_state_change_proc_t)(void* user_context,
226 							struct _diva_strace_library_interface* hLib,
227 							int Adapter,
228 							diva_trace_line_state_t* channel, int notify_subject);
229 typedef void (*diva_trace_channel_trace_proc_t)(void* user_context,
230 							struct _diva_strace_library_interface* hLib,
231 							int Adapter, void* xlog_buffer, int length);
232 typedef void (*diva_trace_error_proc_t)(void* user_context,
233 							struct _diva_strace_library_interface* hLib,
234 							int Adapter,
235 							int error, const char* file, int line);
236 
237 /*
238 	This structure creates interface from user to library
239 	*/
240 typedef struct _diva_trace_library_user_interface {
241 	void*																		user_context;
242 	diva_trace_channel_state_change_proc_t	notify_proc;
243 	diva_trace_channel_trace_proc_t					trace_proc;
244 	diva_trace_error_proc_t									error_notify_proc;
245 } diva_trace_library_user_interface_t;
246 
247 /*
248 	Interface from Library to User
249 	*/
250 typedef int   (*DivaSTraceLibraryStart_proc_t)(void* hLib);
251 typedef int   (*DivaSTraceLibraryFinit_proc_t)(void* hLib);
252 typedef int   (*DivaSTraceMessageInput_proc_t)(void* hLib);
253 typedef void*	(*DivaSTraceGetHandle_proc_t)(void* hLib);
254 
255 /*
256 	Turn Audio Tap trace on/off
257 	Channel should be in the range 1 ... Number of Channels
258 	*/
259 typedef int (*DivaSTraceSetAudioTap_proc_t)(void* hLib, int Channel, int on);
260 
261 /*
262 	Turn B-channel trace on/off
263 	Channel should be in the range 1 ... Number of Channels
264 	*/
265 typedef int (*DivaSTraceSetBChannel_proc_t)(void* hLib, int Channel, int on);
266 
267 /*
268 	Turn	D-channel (Layer1/Layer2/Layer3) trace on/off
269 		Layer1 - All D-channel frames received/sent over the interface
270 						 inclusive Layer 2 headers, Layer 2 frames and TEI management frames
271 		Layer2 - Events from LAPD protocol instance with SAPI of signalling protocol
272 		Layer3 - All D-channel frames addressed to assigned to the card TEI and
273 						 SAPI of signalling protocol, and signalling protocol events.
274 	*/
275 typedef int (*DivaSTraceSetDChannel_proc_t)(void* hLib, int on);
276 
277 /*
278 	Get overall card statistics
279 	*/
280 typedef int (*DivaSTraceGetOutgoingCallStatistics_proc_t)(void* hLib);
281 typedef int (*DivaSTraceGetIncomingCallStatistics_proc_t)(void* hLib);
282 typedef int (*DivaSTraceGetModemStatistics_proc_t)(void* hLib);
283 typedef int (*DivaSTraceGetFaxStatistics_proc_t)(void* hLib);
284 typedef int (*DivaSTraceGetBLayer1Statistics_proc_t)(void* hLib);
285 typedef int (*DivaSTraceGetBLayer2Statistics_proc_t)(void* hLib);
286 typedef int (*DivaSTraceGetDLayer1Statistics_proc_t)(void* hLib);
287 typedef int (*DivaSTraceGetDLayer2Statistics_proc_t)(void* hLib);
288 
289 /*
290 	Call control
291 	*/
292 typedef int (*DivaSTraceClearCall_proc_t)(void* hLib, int Channel);
293 
294 typedef struct _diva_strace_library_interface {
295 	void* hLib;
296   DivaSTraceLibraryStart_proc_t DivaSTraceLibraryStart;
297   DivaSTraceLibraryStart_proc_t DivaSTraceLibraryStop;
298 	DivaSTraceLibraryFinit_proc_t DivaSTraceLibraryFinit;
299 	DivaSTraceMessageInput_proc_t DivaSTraceMessageInput;
300 	DivaSTraceGetHandle_proc_t    DivaSTraceGetHandle;
301 	DivaSTraceSetAudioTap_proc_t  DivaSTraceSetAudioTap;
302 	DivaSTraceSetBChannel_proc_t  DivaSTraceSetBChannel;
303 	DivaSTraceSetDChannel_proc_t  DivaSTraceSetDChannel;
304 	DivaSTraceSetDChannel_proc_t  DivaSTraceSetInfo;
305 	DivaSTraceGetOutgoingCallStatistics_proc_t \
306 																DivaSTraceGetOutgoingCallStatistics;
307 	DivaSTraceGetIncomingCallStatistics_proc_t \
308 																DivaSTraceGetIncomingCallStatistics;
309 	DivaSTraceGetModemStatistics_proc_t \
310 																DivaSTraceGetModemStatistics;
311 	DivaSTraceGetFaxStatistics_proc_t \
312 																DivaSTraceGetFaxStatistics;
313 	DivaSTraceGetBLayer1Statistics_proc_t \
314 																DivaSTraceGetBLayer1Statistics;
315 	DivaSTraceGetBLayer2Statistics_proc_t \
316 																DivaSTraceGetBLayer2Statistics;
317 	DivaSTraceGetDLayer1Statistics_proc_t \
318 																DivaSTraceGetDLayer1Statistics;
319 	DivaSTraceGetDLayer2Statistics_proc_t \
320 																DivaSTraceGetDLayer2Statistics;
321 	DivaSTraceClearCall_proc_t    DivaSTraceClearCall;
322 } diva_strace_library_interface_t;
323 
324 /*
325 	Create and return Library interface
326 	*/
327 diva_strace_library_interface_t* DivaSTraceLibraryCreateInstance (int Adapter,
328 													const diva_trace_library_user_interface_t* user_proc,
329                           byte* pmem);
330 dword DivaSTraceGetMemotyRequirement (int channels);
331 
332 #define DIVA_MAX_ADAPTERS  64
333 #define DIVA_MAX_LINES     32
334 
335 #endif
336 
337