//-------------------------------------------------------------------------
|
//
|
// 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_
|