summaryrefslogtreecommitdiffstats
path: root/private/ntos/ndis/irmini/settings.h
blob: f41ccd3ae7fb2906809cd51df0971eeaedc738ff (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
/*
 ************************************************************************
 *
 *	SETTINGS.h
 *
 *		IRMINI Infrared Serial NDIS Miniport driver.
 *
 *		(C) Copyright 1996 Microsoft Corp.
 *
 *
 *		(ep)
 *
 *************************************************************************
 */



#ifndef SETTINGS_H
	#define SETTINGS_H

	#include "dongle.h"

	#if (DBG && defined(_X86_))

		/*
		 *  The DBG_ADD_PKT_ID flag causes the miniport to add/delete a packet id to each packet.
		 *  This is only for debugging purposes; it makes the miniport INCOMPATIBLE
		 *  with all others.
		 */
		// #define DBG_ADD_PKT_ID 

		#ifdef DBG_ADD_PKT_ID
			extern BOOLEAN addPktIdOn;
		#endif

		typedef enum {
						DBG_ERR		= (1 << 0),
						DBG_STAT	= (1 << 1),
						DBG_MSG		= (1 << 2),
						DBG_BUF		= (1 << 3),
						DBG_PACKET  = (1 << 4),

						DBG_ALL		= (DBG_ERR|DBG_STAT|DBG_MSG|DBG_BUF|DBG_PACKET)
		};
		extern ULONG _cdecl DbgPrint(PCHAR Format, ...);
		extern UINT dbgOptions;

		#define DBG_NDIS_RESULT_STR(_ndisResult) \
					(PUCHAR)(	(_ndisResult == NDIS_STATUS_SUCCESS) ? "NDIS_STATUS_SUCCESS" : \
								(_ndisResult == NDIS_STATUS_FAILURE) ? "NDIS_STATUS_FAILURE" : \
								(_ndisResult == NDIS_STATUS_PENDING) ? "NDIS_STATUS_PENDING" : \
								"NDIS_STATUS_???")
		#define DBGPRINT(dbgprint_params_in_parens) \
			{ \
				_asm { pushf } \
				_asm { cli }   \
				DbgPrint("IRMINI: "); \
				DbgPrint dbgprint_params_in_parens; \
				DbgPrint("\r\n"); \
				_asm { popf } \
			}
		#define DBGOUT(dbgprint_params_in_parens) \
			if (dbgOptions & DBG_MSG){ \
				DBGPRINT(dbgprint_params_in_parens); \
			}
		#define DBGERR(dbgprint_params_in_parens) \
			if (dbgOptions & DBG_ERR){ \
				DBGPRINT((" *** IRMINI ERROR *** ")); \
				DBGPRINT(dbgprint_params_in_parens); \
				_asm { int 3 } /* DbgBreakPoint() causes problems */  \
			}

		#define DBGSTAT(dbgprint_params_in_parens) \
			if (dbgOptions & DBG_STAT){ \
				DBGPRINT(dbgprint_params_in_parens); \
			}
		#define DBGPKT(dbgprint_params_in_parens) \
			if (dbgOptions & DBG_PACKET){ \
				DBGPRINT(dbgprint_params_in_parens); \
			}
		extern VOID DBG_PrintBuf(PUCHAR bufptr, UINT buflen);
		#define DBGPRINTBUF(bufptr, buflen) \
			if (dbgOptions & DBG_BUF){ \
				DBG_PrintBuf((PUCHAR)(bufptr), (UINT)(buflen)); \
			}
	#else
		#define DBGOUT(dbgprint_params_in_parens) 
		#define DBGERR(dbgprint_params_in_parens)
		#define DBGPRINTBUF(bufptr, buflen)
		#define DBGSTAT(dbgprint_params_in_parens) 
		#define DBGPKT(dbgprint_params_in_parens) 
		#define DBGPRINTBUF(bufptr, buflen) 
		#define DBG_NDIS_RESULT_STR(_ndisResult) 
	#endif

	enum baudRates {
						/*
						 *  Slow IR
						 */
						BAUDRATE_2400 = 0,
						BAUDRATE_9600,
						BAUDRATE_19200,
						BAUDRATE_38400,
						BAUDRATE_57600,
						BAUDRATE_115200,

						/*
						 *  Medium IR
						 */
						BAUDRATE_576000,
						BAUDRATE_1152000,

						/*
						 *  Fast IR
						 */
						BAUDRATE_4000000,

						NUM_BAUDRATES	/* must be last */
	};

	#define DEFAULT_BAUDRATE BAUDRATE_115200

	#define ALL_SLOW_IRDA_SPEEDS (	NDIS_IRDA_SPEED_2400	|	\
									NDIS_IRDA_SPEED_9600	|	\
									NDIS_IRDA_SPEED_19200	|	\
									NDIS_IRDA_SPEED_38400	|	\
									NDIS_IRDA_SPEED_57600	|	\
									NDIS_IRDA_SPEED_115200	 	\
								)

	#define DEFAULT_BOFS_CODE  BOFS_48
	#define MAX_NUM_EXTRA_BOFS 48
	#define DEFAULT_NUM_EXTRA_BOFS MAX_NUM_EXTRA_BOFS


	#define DEFAULT_TURNAROUND_usec 5000


	typedef struct		{
							enum baudRates tableIndex;
							UINT bitsPerSec;
							UINT ndisCode;				// bitmask element
	} baudRateInfo;

	#define DEFAULT_BAUD_RATE 9600



	/*
	 *  This is the largest IR packet size 
	 *  (counting _I_ field only, and not counting ESC characters)
	 *  that we handle.
	 */
	#define MAX_I_DATA_SIZE 2048
	#define MAX_NDIS_DATA_SIZE (SLOW_IR_ADDR_SIZE+SLOW_IR_CONTROL_SIZE+MAX_I_DATA_SIZE)

	#ifdef DBG_ADD_PKT_ID
		#pragma message("WARNING: INCOMPATIBLE DEBUG VERSION")
		#define MAX_RCV_DATA_SIZE (MAX_NDIS_DATA_SIZE+SLOW_IR_FCS_SIZE+sizeof(USHORT))
	#else
		#define MAX_RCV_DATA_SIZE  (MAX_NDIS_DATA_SIZE+SLOW_IR_FCS_SIZE) 
	#endif

	/*
	 *  We loop an extra time in the receive FSM in order to
	 *  see EOF after the last data byte; so we need some
	 *  extra space in readBuf in case we then get garbage instead.
	 */
	#define RCV_BUFFER_SIZE (MAX_RCV_DATA_SIZE+4)


	/*
	 *  We allocate buffers twice as large as the max rcv size to
	 *  accomodate ESC characters and BOFs, etc.
	 *  Recall that in the worst possible case, the data contains
	 *  all BOF/EOF/ESC characters, in which case we must expand it to
	 *  twice its original size.
	 */
	#define MAX_POSSIBLE_IR_PACKET_SIZE_FOR_DATA(dataLen) \
					((dataLen)*2 + \
					   (MAX_NUM_EXTRA_BOFS+1)*SLOW_IR_BOF_SIZE + \
					   SLOW_IR_ADDR_SIZE + \
					   SLOW_IR_CONTROL_SIZE + \
					   SLOW_IR_FCS_SIZE + \
					   SLOW_IR_EOF_SIZE)
	#define MAX_IRDA_DATA_SIZE MAX_POSSIBLE_IR_PACKET_SIZE_FOR_DATA(MAX_I_DATA_SIZE)

	/*
	 *  When FCS is computed on an IR packet with FCS appended,
	 *  the result should be this constant.
	 */
	#define GOOD_FCS ((USHORT)~0xf0b8)


	/*
	 *  Sizes of IrLAP frame fields:
	 *		Beginning Of Frame (BOF) 
	 *		End Of Frame (EOF) 
	 *		Address
	 *		Control
	 */
	#define SLOW_IR_BOF_TYPE		UCHAR
	#define SLOW_IR_BOF_SIZE		sizeof(SLOW_IR_BOF_TYPE)
	#define SLOW_IR_EXTRA_BOF_TYPE  UCHAR
	#define SLOW_IR_EXTRA_BOF_SIZE  sizeof(SLOW_IR_EXTRA_BOF_TYPE)
	#define SLOW_IR_EOF_TYPE		UCHAR
	#define SLOW_IR_EOF_SIZE		sizeof(SLOW_IR_EOF_TYPE)
	#define SLOW_IR_FCS_TYPE		USHORT
	#define SLOW_IR_FCS_SIZE		sizeof(SLOW_IR_FCS_TYPE)
	#define SLOW_IR_ADDR_SIZE		1
	#define SLOW_IR_CONTROL_SIZE	1
	#define SLOW_IR_BOF				0xC0
	#define SLOW_IR_EXTRA_BOF		0xC0  /* don't use 0xFF, it breaks some HP printers! */
	#define SLOW_IR_EOF				0xC1
	#define SLOW_IR_ESC				0x7D
	#define SLOW_IR_ESC_COMP		0x20
	#define MEDIUM_IR_BOF			0x7E
	#define MEDIUM_IR_EOF			0x7E


	#define MIN(a,b) (((a) <= (b)) ? (a) : (b))
	#define MAX(a,b) (((a) >= (b)) ? (a) : (b))


#endif SETTINGS_H