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