/*
 *
  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_IDI_IFC_H__
#define __DIVA_EICON_TRACE_IDI_IFC_H__

void* SuperTraceOpenAdapter   (int AdapterNumber);
int   SuperTraceCloseAdapter  (void* AdapterHandle);
int   SuperTraceWrite         (void* AdapterHandle,
                               const void* data, int length);
int   SuperTraceReadRequest   (void* AdapterHandle,const char* name,byte* data);
int   SuperTraceGetNumberOfChannels (void* AdapterHandle);
int   SuperTraceASSIGN        (void* AdapterHandle, byte* data);
int   SuperTraceREMOVE        (void* AdapterHandle);
int   SuperTraceTraceOnRequest(void* hAdapter, const char* name, byte* data);
int   SuperTraceWriteVar (void* AdapterHandle,
												byte* data,
										 		const char* name,
										 		void* var,
										 		byte type,
										 		byte var_length);
int   SuperTraceExecuteRequest (void* AdapterHandle,
																const char* name,
																byte* data);

typedef struct _diva_strace_path2action {
	char               path[64]; /* Full path to variable            */
	void*							 variable; /* Variable that will receive value */
} diva_strace_path2action_t;

typedef struct _diva_strace_context {
	diva_strace_library_interface_t	instance;

	int   Adapter;
	void* hAdapter;

	int Channels;
	int	req_busy;

  ENTITY   e;
  IDI_CALL request;
  BUFFERS  XData;
  BUFFERS  RData;
	byte buffer[2048+512+1];
  int removal_state;
  int general_b_ch_event;
  int general_fax_event;
  int general_mdm_event;

	byte	rc_ok;

	/*
		Initialization request state machine
		*/
	int ChannelsTraceActive;
	int ModemTraceActive;
	int FaxTraceActive;
	int IncomingCallsCallsActive;
	int IncomingCallsConnectedActive;
	int OutgoingCallsCallsActive;
	int OutgoingCallsConnectedActive;

	int trace_mask_init;
	int audio_trace_init;
	int bchannel_init;
	int trace_length_init;
	int	trace_on;
	int trace_events_down;
	int l1_trace;
	int l2_trace;

	/*
		Trace\Event Enable
		*/
	word trace_event_mask;
	word current_trace_event_mask;

	dword audio_tap_mask;
	dword current_audio_tap_mask;
	dword current_eye_pattern_mask;
	int   audio_tap_pending;
	int   eye_pattern_pending;

	dword bchannel_trace_mask;
	dword current_bchannel_trace_mask;


	diva_trace_line_state_t lines[30];

	int	parse_entries;
	int	cur_parse_entry;
	diva_strace_path2action_t* parse_table;

	diva_trace_library_user_interface_t user_proc_table;

	int line_parse_entry_first[30];
	int line_parse_entry_last[30];

	int modem_parse_entry_first[30];
	int modem_parse_entry_last[30];

	int fax_parse_entry_first[30];
	int fax_parse_entry_last[30];

	int statistic_parse_first;
	int statistic_parse_last;

	int mdm_statistic_parse_first;
	int mdm_statistic_parse_last;

	int fax_statistic_parse_first;
	int fax_statistic_parse_last;

	dword	line_init_event;
	dword	modem_init_event;
	dword	fax_init_event;

	dword	pending_line_status;
	dword	pending_modem_status;
	dword	pending_fax_status;

	dword clear_call_command;

	int outgoing_ifc_stats;
	int incoming_ifc_stats;
	int modem_ifc_stats;
	int fax_ifc_stats;
	int b1_ifc_stats;
	int b2_ifc_stats;
	int d1_ifc_stats;
	int d2_ifc_stats;

	diva_trace_interface_state_t Interface;
	diva_ifc_statistics_t				 InterfaceStat;
} diva_strace_context_t;

typedef struct _diva_man_var_header {
	byte   escape;
	byte   length;
	byte   management_id;
	byte   type;
	byte   attribute;
	byte   status;
	byte   value_length;
	byte	 path_length;
} diva_man_var_header_t;

#endif

