⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mioctl.h

📁 美国Delta Tau公司PMAC多轴运动控制卡的VC++示例程序
💻 H
字号:
//-------------------------------------------------------------------------
//
// 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)

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


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

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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -