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