SDC C-Project CF Review 프로그램
LYW
2021-06-09 f143e5ece742a275d1e360c55e829d21e706b26d
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
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
//-------------------------------------------------------------------------
//
// MIOCTL.H
//
// 32-bit Motion Control Device Driver
//
// Defines interface to kernel driver to be used by user-level dll.
//
//-------------------------------------------------------------------------
 
 
#ifndef _MIOCTL_
#define _MIOCTL_
 
  #ifndef _NT
    #define CTL_CODE( DeviceType, Function, Method, Access ) (                 \
        ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) \
    )
    #define METHOD_BUFFERED  0
    #define FILE_ANY_ACCESS  0
    #define FILE_DEVICE_SOUND               0x0000001d
  #endif
 
// device type - we are a multimedia device, so for now we will be a sound device
  #define FILE_DEVICE_MOTION            FILE_DEVICE_SOUND
 
// maximum number of pmac devices and users we allow
  #define MAX_MOTION_DEVICES            8
  #define MAX_DEVICE_USERS              5
  #define MAX_PMAC_LOCATIONS            6 // 5 + LT_UNKNOWN
  #define MAX_INT_LEVELS                8 // levels of interrupts
  #define MAX_ROTBUF_PMAC               16
 
// Max Unsolicited Response Buffer Size
  #define USRESPONSE_SIZE 2000
  #define IVARCHANGEMONITOR_SIZE 2000
 
// base for IOCTL requests - just above the sound requests
  #define IOCTL_MOTION_BASE 0x200
 
// Ioctl set
 
// Interrupt functions
// stream init       <IN ULONG microsec-per-frame>
  #define IOCTL_MOTION_INTR_INIT      CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x0E, METHOD_BUFFERED, FILE_ANY_ACCESS)
// interrupt term        no args
  #define IOCTL_MOTION_INTR_TERM      CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x0F, METHOD_BUFFERED, FILE_ANY_ACCESS)
// queue interrupt (queus interrupts down to driver) <OUT ULONG count>
  #define IOCTL_MOTION_QUEUE_INTR     CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x13, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_GET_PMACIR     CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x14, METHOD_BUFFERED, FILE_ANY_ACCESS)
// Create Global Interrupt Event
  #define IOCTL_MOTION_CREATE_EVENT_INTR CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x15, METHOD_BUFFERED, FILE_ANY_ACCESS)
// Set Interrupt Mask
  #define IOCTL_MOTION_SET_INTR_MASK  CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x16, METHOD_BUFFERED, FILE_ANY_ACCESS)
// Set Interrupt events for a device
  #define IOCTL_REF_INTR_EVENTS       CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x17, METHOD_BUFFERED, FILE_ANY_ACCESS)
// Set events for an unplug
  #define IOCTL_REF_UNPLUG_EVENT       CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x18, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
// BUS
  #define IOCTL_MOTION_FLUSH_PORT     CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x20, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_PORT_READREADY CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x21, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_READLN_PORT    CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x22, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_WRITELN_PORT   CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x23, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_WRITECHAR_PORT CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x24, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_PORT_ERROR     CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x25, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_WRITECHAR_PORT        CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x26, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_READCHAR_PORT         CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x27, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_CTRLRESP_PORT  CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x28, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_READBUFFER_PORT CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x29,METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_GETQUICKRESPONSE_PORT CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x2a,METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_WRITEBUFFER_PORT CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x2b,METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_WRITEERROR_PORT CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x2c,METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_FWDOWNLOAD     CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x2d,METHOD_BUFFERED, FILE_ANY_ACCESS) 
 
// DPRAM
  #define IOCTL_MOTION_FLUSH_MEM      CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x30, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_MEM_READREADY  CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x31, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_READLN_MEM     CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x32, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_WRITELN_MEM    CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x33, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_WRITECHAR_MEM  CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x34, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_WRITECTRL_MEM  CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x35, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_MEM_ERROR      CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x36, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_MAP_DPRAM      CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x37, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_FREE_DPRAM     CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x38, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_CTRLRESP_MEM   CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x39, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_GET_MEM        CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x40, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_SET_MEM        CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x41, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_MEM_READYSTATE CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x42, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_GET_MEM_BITS   CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x43, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_SET_MEM_BITS   CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x44, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_GET_MEM_BIT    CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x45, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_SET_MEM_BIT    CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x46, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_GET_MEM_ARRAY  CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x47, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_SET_MEM_ARRAY  CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x48, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_DPRAM          CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x49, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_DPRAM_TEST     CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x4A, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_SETWORD_MEM    CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x4B, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_GETWORD_MEM    CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x4C, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
 
// DPRAM Binary Rotary Buffer Commands
  #define IOCTL_MOTION_SET_BINROT     CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x4D, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_GET_BINROT_ERROR CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x4E, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_BINROT_INIT    CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x4F, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
// General
  #define IOCTL_MOTION_VERSION       CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x50, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_DATE          CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x51, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_LINK          CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x52, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_PSCALES       CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x53, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_VSCALES       CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x54, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_DEV_TYPE      CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x55, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_I10           CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x56, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_LDSLINK       CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x57, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_PDEVINFO      CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x58, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_SETPMAC_NO    CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x59, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_TIMEOUT_COUNT CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x5A, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_RESOURCES     CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x5B, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_INIT          CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x5c, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
// COM Serial port driver functions
  #define IOCTL_PMACSER_GET_STATE    CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x60, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_PMACSER_SET_STATE    CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x61, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
// Commands for 24bit Host port Mode
  #define IOCTL_MOTION_SET_HOSTFLUSH  CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x70, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_SET_HOSTBINROT CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x71, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_SET_HOSTBINBKG CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x72, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_SET_HOSTBINRT  CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x73, METHOD_BUFFERED, FILE_ANY_ACCESS)
  #define IOCTL_MOTION_SET_HOSTBININIT CTL_CODE(FILE_DEVICE_MOTION, IOCTL_MOTION_BASE+0x74, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
 
 
 
// Interupt events passing structure
typedef struct
{
  HANDLE hEvent[MAX_INT_LEVELS + 1];
} DEVICEINTARRAY, *PDEVICEINTARRAY;
 
// Communications return codes
  #define COMM_CHARS(c)    (c & 0x0FFFFFFF)
  #define COMM_STATUS(c)   (c & 0xF0000000)
  #define COMM_OK          1
 
  // Below are all negative return codes
  #define COMM_EOT           0x80000000
  #define COMM_TIMEOUT       0xC0000000
  #define COMM_BADCKSUM      0xD0000000
  #define COMM_ERROR         0xE0000000
  #define COMM_FAIL          0xF0000000
  #define COMM_ANYERR        0x70000000
  // Below are all positive return codes
  #define COMM_UNSOLICITED   0x10000000
 
  #define IS_COMM_MORE(c)     ((c & COMM_FAIL) == 0)
  #define IS_COMM_EOT(c)      ((c & COMM_FAIL) == COMM_EOT)
  #define IS_COMM_TIMEOUT(c)  ((c & COMM_FAIL) == COMM_TIMEOUT)
  #define IS_COMM_BADCKSUM(c) ((c & COMM_FAIL) == COMM_BADCKSUM)
  #define IS_COMM_ERROR(c)    ((c & COMM_FAIL) == COMM_ERROR)
  #define IS_COMM_FAIL(c)     ((c & COMM_FAIL) == COMM_FAIL)
  #define IS_COMM_ANYERROR(c) ((c & COMM_ANYERR) > 0)
  #define IS_COMM_UNSOLICITED(c) ((c & 0xF0000000) == COMM_UNSOLICITED)
 
  #define MAX_COMM_BUFFER    256
 
// Comm passing structure
typedef struct
{
  CHAR  buffer[MAX_COMM_BUFFER]; // pointer to buffer
  int   status;                  // return status
  int   count;                   // num of characters returned
  int   maxChars;                // max characters calling buffer will hold
 
} COMM_BUFFER, *PCOMM_BUFFER;
 
typedef struct
{
  BOOL  val;     // boolean value get/set of the bit
  UINT  offset;  // offset from DPRAM base
  UINT  bit;     // bit
  BOOL  success; // return status (true / false)
} MEM_BUFFER_BIT, *PMEM_BUFFER_BIT;
 
typedef struct
{
  UINT val;     // value get/set of the bits
  UINT  offset;  // offset from DPRAM base
  short bit;     // starting bit
  short width;   // num of bits
  BOOL  success; // return status (true / false)
} MEM_BUFFER_BITS, *PMEM_BUFFER_BITS;
 
typedef struct 
{
  WORD length;
  WORD num_put;
  WORD start_adr;
  BYTE data[4096];
} *PBINROTPUT,BINROTPUT;
 
 
typedef struct 
{
  WORD length;
  WORD num_put;
  WORD start_adr;
  BYTE data[4096];
  DWORD coord;
} *PBINROTPUTCOORD,BINROTPUTCOORD;
 
typedef struct 
{
  WORD length;
  BYTE data[8192];
} *PHOSTROTPUT,HOSTROTPUT;
 
typedef struct 
{
  HOSTROTPUT hostrotcoord[MAX_ROTBUF_PMAC];
} *PHOSTROT,HOSTROT;
 
 
// Resource information structure to pass server resource
// information easily to the user programs
typedef struct
{
  PUCHAR port;
  ULONG  intr;
  ULONG  memAddress;
  ULONG  memLength;
} DEVICERESOURCE, *PDEVICERESOURCE;
 
//-----------------------------------
// PMAC values for control characters
//-----------------------------------
  #define CTRL_A          1
  #define CTRL_B          2
  #define CTRL_C          3
  #define CTRL_D          4
  #define CTRL_E          5
  #define CTRL_F          6
  #define CTRL_G          7
  #define CTRL_H          8
  #define CTRL_I          9
  #define CTRL_J         10
  #define CTRL_K         11
  #define CTRL_L         12
  #define CTRL_M         13
  #define CTRL_N         14
  #define CTRL_O         15
  #define CTRL_P         16
  #define CTRL_Q         17
  #define CTRL_R         18
  #define CTRL_S         19
  #define CTRL_T         20
  #define CTRL_U         21
  #define CTRL_V         22
  #define CTRL_W         23
  #define CTRL_X         24
  #define CTRL_Y         25
  #define CTRL_Z         26
 
#endif // _MIOCTL_