You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1178 lines
52 KiB
C
1178 lines
52 KiB
C
|
12 years ago
|
// Note: Include this file afer WINDOWS.H
|
||
|
|
// WINDOWS.H must be included in your project
|
||
|
|
|
||
|
|
#ifndef DMCCOM_H
|
||
|
|
#define DMCCOM_H
|
||
|
|
|
||
|
|
#ifdef __cplusplus
|
||
|
|
extern "C" {
|
||
|
|
#endif
|
||
|
|
|
||
|
|
// Common datatypes (see WINDOWS.H)
|
||
|
|
#ifndef FAR
|
||
|
|
#define FAR
|
||
|
|
#endif
|
||
|
|
#ifndef NEAR
|
||
|
|
#define NEAR
|
||
|
|
#endif
|
||
|
|
typedef short int SHORT;
|
||
|
|
typedef short int NEAR* PSHORT;
|
||
|
|
typedef short int FAR* LPSHORT;
|
||
|
|
typedef unsigned short int USHORT;
|
||
|
|
typedef unsigned short int NEAR* PUSHORT;
|
||
|
|
typedef unsigned short int FAR* LPUSHORT;
|
||
|
|
#if defined(_WIN32) || defined(__WIN32__)
|
||
|
|
typedef long int LONG;
|
||
|
|
#endif
|
||
|
|
typedef long int NEAR* PLONG;
|
||
|
|
typedef long int FAR* LPLONG;
|
||
|
|
typedef unsigned long int ULONG;
|
||
|
|
typedef unsigned long int NEAR* PULONG;
|
||
|
|
typedef unsigned long int FAR* LPULONG;
|
||
|
|
typedef char CHAR;
|
||
|
|
typedef char NEAR* PCHAR;
|
||
|
|
typedef char FAR* LPCHAR;
|
||
|
|
typedef unsigned char UCHAR;
|
||
|
|
typedef unsigned char NEAR* PUCHAR;
|
||
|
|
typedef unsigned char FAR* LPUCHAR;
|
||
|
|
typedef unsigned char BYTE;
|
||
|
|
typedef unsigned char NEAR* PBYTE;
|
||
|
|
typedef unsigned char FAR* LPBYTE;
|
||
|
|
typedef void NEAR* PVOID;
|
||
|
|
typedef void FAR* LPVOID;
|
||
|
|
typedef char FAR* PSZ;
|
||
|
|
|
||
|
|
#if defined(_WIN32) || defined(__WIN32__)
|
||
|
|
#define GALILCALL __stdcall
|
||
|
|
#else
|
||
|
|
#define GALILCALL FAR PASCAL __export
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if !defined(_WIN32) && !defined(__WIN32__)
|
||
|
|
#ifndef TEXT
|
||
|
|
#define TEXT
|
||
|
|
#endif
|
||
|
|
#endif
|
||
|
|
|
||
|
|
// Controller model constants
|
||
|
|
#define DMC400 TEXT("DMC-400")
|
||
|
|
#define DMC600 TEXT("DMC-600")
|
||
|
|
#define DMC700 TEXT("DMC-700")
|
||
|
|
#define DMC1000 TEXT("DMC-1000")
|
||
|
|
#define DMC1200 TEXT("DMC-1200")
|
||
|
|
#define DMC1300 TEXT("DMC-1300")
|
||
|
|
#define DMC1410 TEXT("DMC-1410")
|
||
|
|
#define DMC1411 TEXT("DMC-1411")
|
||
|
|
#define DMC1412 TEXT("DMC-1412")
|
||
|
|
#define DMC1413 TEXT("DMC-1413")
|
||
|
|
#define DMC1414 TEXT("DMC-1414")
|
||
|
|
#define DMC1415 TEXT("DMC-1415")
|
||
|
|
#define DMC1425 TEXT("DMC-1425")
|
||
|
|
#define DMC3425 TEXT("DMC-3425")
|
||
|
|
#define DMC1416 TEXT("DMC-1416")
|
||
|
|
#define DMC1417 TEXT("DMC-14x7")
|
||
|
|
#define DMC1500 TEXT("DMC-1500")
|
||
|
|
#define DMC1600 TEXT("DMC-1600")
|
||
|
|
#define DMC1700 TEXT("DMC-1700")
|
||
|
|
#define DMC1800 TEXT("DMC-1800")
|
||
|
|
#define DMC1802 TEXT("DMC-1802")
|
||
|
|
#define DMC2000 TEXT("DMC-2000")
|
||
|
|
#define DMC2100 TEXT("DMC-2100")
|
||
|
|
#define DMC2102 TEXT("DMC-21x3/2")
|
||
|
|
#define DMC2200 TEXT("DMC-2200")
|
||
|
|
#define DMC7007 TEXT("IOC-7007")
|
||
|
|
|
||
|
|
#define MODEL_UNKNOWN 0
|
||
|
|
#define MODEL_600 600
|
||
|
|
#define MODEL_700 700
|
||
|
|
#define MODEL_1000 1000
|
||
|
|
#define MODEL_1200 1200
|
||
|
|
#define MODEL_1300 1300
|
||
|
|
#define MODEL_1410 1410
|
||
|
|
#define MODEL_1411 1411
|
||
|
|
#define MODEL_1412 1412
|
||
|
|
#define MODEL_1413 1413
|
||
|
|
#define MODEL_1414 1414
|
||
|
|
#define MODEL_1415 1415
|
||
|
|
#define MODEL_1416 1416
|
||
|
|
#define MODEL_1417 1417
|
||
|
|
#define MODEL_1500 1500
|
||
|
|
#define MODEL_1600 1600
|
||
|
|
#define MODEL_1700 1700
|
||
|
|
#define MODEL_1800 1800
|
||
|
|
#define MODEL_1802 1802
|
||
|
|
#define MODEL_2000 2000
|
||
|
|
#define MODEL_2100 2100
|
||
|
|
#define MODEL_2102 2102
|
||
|
|
#define MODEL_2200 2200
|
||
|
|
#define MODEL_7007 7007
|
||
|
|
#define MODEL_USERDEFINED 9999
|
||
|
|
|
||
|
|
|
||
|
|
// General defines
|
||
|
|
#define COMMAND_SIZE 80
|
||
|
|
#define MAX_CONTROLLERS 64
|
||
|
|
|
||
|
|
// User defined message to notify application program of an interrupt
|
||
|
|
#define WM_DMCINTERRUPT (WM_USER+128) // Status byte from the controller is passed to user via the wParam argument
|
||
|
|
#define WM_MOTIONCOMPLETE (WM_USER+129)
|
||
|
|
#define WM_UNSOLICITEDMSG (WM_USER+130)
|
||
|
|
#define WM_NEWDATARECORD (WM_USER+131)
|
||
|
|
|
||
|
|
// Errors
|
||
|
|
#define DMCNOERROR 0
|
||
|
|
#define DMCWARNING_MONITOR 1
|
||
|
|
|
||
|
|
#define DMCERROR_TIMEOUT -1
|
||
|
|
#define DMCERROR_COMMAND -2
|
||
|
|
#define DMCERROR_CONTROLLER -3
|
||
|
|
#define DMCERROR_FILE -4
|
||
|
|
#define DMCERROR_DRIVER -5
|
||
|
|
#define DMCERROR_HANDLE -6
|
||
|
|
#define DMCERROR_HMODULE -7
|
||
|
|
#define DMCERROR_MEMORY -8
|
||
|
|
#define DMCERROR_BUFFERFULL -9
|
||
|
|
#define DMCERROR_RESPONSEDATA -10
|
||
|
|
#define DMCERROR_DMA -11
|
||
|
|
#define DMCERROR_ARGUMENT -12
|
||
|
|
#define DMCERROR_DATARECORD -13
|
||
|
|
#define DMCERROR_DOWNLOAD -14
|
||
|
|
#define DMCERROR_FIRMWARE -15
|
||
|
|
#define DMCERROR_CONVERSION -16
|
||
|
|
#define DMCERROR_RESOURCE -17
|
||
|
|
#define DMCERROR_REGISTRY -18
|
||
|
|
#define DMCERROR_BUSY -19
|
||
|
|
#define DMCERROR_DEVICE_DISCONNECTED -20
|
||
|
|
#define DMCERROR_TIMEING_ERROR -21
|
||
|
|
#define DMCERROR_WRITEBUFFER_TOO_LARGE -22
|
||
|
|
#define DMCERROR_NO_MODIFY_PNP_CONTROLLER -23
|
||
|
|
#define DMCERROR_FUNCTION_OBSOLETE -24
|
||
|
|
#define DMCERROR_STREAMING_COMMAND_IN_PROGRESS -25
|
||
|
|
#define DMCERROR_DEVICEDRIVER_VERSION_TOO_OLD -26
|
||
|
|
#define DMCERROR_STREAMING_COMMAND_MUST_BE_SOLITARY -27
|
||
|
|
#define DMCERROR_FIRMWARE_VERSION_TOO_OLD -28
|
||
|
|
#define DMCERROR_ETHERNET_NO_MORE_HANDLES -29
|
||
|
|
#define DMCERROR_NETWORK_UNREACHABLE -30
|
||
|
|
|
||
|
|
|
||
|
|
// Data types
|
||
|
|
typedef LONG HANDLEDMC;
|
||
|
|
typedef HANDLEDMC FAR* PHANDLEDMC;
|
||
|
|
|
||
|
|
// Constant values
|
||
|
|
|
||
|
|
// Constant values for data record access
|
||
|
|
#include "dmcdrc.h"
|
||
|
|
|
||
|
|
// Constant values for registry structures
|
||
|
|
enum DMCControllerTypes
|
||
|
|
{
|
||
|
|
ControllerTypeISABus = 0, // ISA or PC-104 bus controller
|
||
|
|
ControllerTypeSerial = 1, // RS-232 serial controller
|
||
|
|
ControllerTypePCIBus = 2, // PCI or Compact PCI bus controller
|
||
|
|
ControllerTypeUSB = 3, // Universal serial bus controller
|
||
|
|
ControllerTypeEthernet = 4, // Ethernet controller
|
||
|
|
ControllerTypeVMEBus = 5 // VME bus controller
|
||
|
|
};
|
||
|
|
|
||
|
|
enum DMCDeviceDrivers
|
||
|
|
{
|
||
|
|
DeviceDriverWinRT = 0, // Use WinRT device driver
|
||
|
|
DeviceDriverGalil = 1 // Use Galil device driver
|
||
|
|
};
|
||
|
|
|
||
|
|
enum DMCSerialHandshake
|
||
|
|
{
|
||
|
|
SerialHandshakeHardware = 0, // Hardware handshake (RTS/CTS)
|
||
|
|
SerialHandshakeSoftware = 1, // Software handshake (XOn/XOff)
|
||
|
|
SerialHandshakeBoth = 2 // RESERVED FOR GALIL USE ONLY
|
||
|
|
};
|
||
|
|
|
||
|
|
enum DMCBusIOStyle
|
||
|
|
{
|
||
|
|
DMC600IOStyle = 0, // For DMC-600, DMC-1400
|
||
|
|
DMC1000IOStyle = 1, // For DMC-1000, DMC-1200, DMC-1700, DMC-1802
|
||
|
|
DMC1600IOStyle = 2 // For DMC-1600, DMC-1800
|
||
|
|
};
|
||
|
|
|
||
|
|
enum DMCInterruptStyle
|
||
|
|
{
|
||
|
|
DMC1000InterruptStyle = 0, // For DMC-1000
|
||
|
|
DMC1400InterruptStyle = 1, // For DMC-1400
|
||
|
|
DMC1700InterruptStyle = 2, // For DMC-1200, DMC-1700, DMC-1802
|
||
|
|
DMC1600InterruptStyle = 3 // For DMC-1600, DMC-1800
|
||
|
|
};
|
||
|
|
|
||
|
|
enum DMCDataRecordAccess
|
||
|
|
{
|
||
|
|
DataRecordAccessNone = 0, // No data record access capability or data record access is off
|
||
|
|
DataRecordAccessDMA = 1, // Use DMA for data record access
|
||
|
|
DataRecordAccessFIFO = 2, // Use FIFO for data record access
|
||
|
|
DataRecordAccessBoth = 3, // RESERVED FOR GALIL USE ONLY
|
||
|
|
DataRecordAccessQR = 4 // RESERVED FOR GALIL USE ONLY
|
||
|
|
};
|
||
|
|
|
||
|
|
enum DMCEthernetProtocol
|
||
|
|
{
|
||
|
|
EthernetProtocolTCP = 0,
|
||
|
|
EthernetProtocolUDP = 1
|
||
|
|
};
|
||
|
|
enum DMCVMEBusInterface
|
||
|
|
{
|
||
|
|
VMEBusInterfaceBit3 = 0,
|
||
|
|
VMEBusInterfaceVMIC = 1
|
||
|
|
};
|
||
|
|
|
||
|
|
// Ethernet flags
|
||
|
|
#define ETH_NO_MULTICAST 0x0001 // Do not open a multi-cast session
|
||
|
|
#define ETH_UNSOLICITEDMESSAGES 0x0002 // Open an unsolicited message session on second handle
|
||
|
|
#define ETH_UNSOLICITEDMESSAGES_SAMEHANDLE 0x0004 // Open an unsolicited message session on same handle
|
||
|
|
|
||
|
|
// Structures
|
||
|
|
|
||
|
|
// Structure used to add/change/delete registry information
|
||
|
|
// Old-style structure
|
||
|
|
typedef struct _GALILREGISTRY
|
||
|
|
{
|
||
|
|
#ifdef UNDER_CE
|
||
|
|
TCHAR szModel[32]; // Controller model string
|
||
|
|
#else
|
||
|
|
CHAR szModel[16]; // Controller model string
|
||
|
|
#endif
|
||
|
|
USHORT usDeviceNumber; // Device number - for Galil use only
|
||
|
|
USHORT fDeviceDriver; // Use Galil or WinRT device driver
|
||
|
|
ULONG ulTimeout; // Time-out in milliseconds
|
||
|
|
ULONG ulDelay; // Delay in microsceonds
|
||
|
|
USHORT fControllerType; // Controller type (ISA bus, PCI bus, serial, etc.)
|
||
|
|
USHORT usCommPort; // Serial communications port
|
||
|
|
ULONG ulCommSpeed; // Serial Communications speed
|
||
|
|
USHORT fHandshake; // Serial communications handshake
|
||
|
|
USHORT usAddress; // Bus address
|
||
|
|
USHORT usInterrupt; // Interrupt
|
||
|
|
USHORT fDataRecordAccess; // Data record access type
|
||
|
|
USHORT usDMAChannel; // DMA channel
|
||
|
|
USHORT usDataRecordSize; // Data record size (for data record access)
|
||
|
|
USHORT usRefreshRate; // Data record refresh rate in 2^usRefreshRate ms
|
||
|
|
USHORT usSerialNumber; // Controller Serial Number
|
||
|
|
#ifdef UNDER_CE
|
||
|
|
TCHAR szPNPHardwareKey[128];// Hardware registry key for PNP controllers - for Galil use only
|
||
|
|
#else
|
||
|
|
CHAR szPNPHardwareKey[64]; // Hardware registry key for PNP controllers - for Galil use only
|
||
|
|
#endif
|
||
|
|
} GALILREGISTRY, FAR* PGALILREGISTRY;
|
||
|
|
|
||
|
|
// Hardware info - ISA and PCI bus communications
|
||
|
|
typedef struct _BUSINFO
|
||
|
|
{
|
||
|
|
USHORT usDeviceNumber; // Device number - for Galil use only
|
||
|
|
USHORT fDeviceDriver; // Use Galil or WinRT device driver
|
||
|
|
USHORT fIOStyle; // Style of addressing status register on controller
|
||
|
|
USHORT usAddress; // I/O port address
|
||
|
|
USHORT fInterruptStyle; // Style of handling interrupts from controller
|
||
|
|
USHORT usInterrupt; // Interrupt
|
||
|
|
USHORT fDataRecordAccess; // Data record access type
|
||
|
|
USHORT usDMAChannel; // DMA channel
|
||
|
|
USHORT usDataRecordSize; // Data record size (for data record access)
|
||
|
|
USHORT usRefreshRate; // Data record refresh rate in 2^usRefreshRate ms
|
||
|
|
USHORT bPNP; // Plug and play? (TRUE | FALSE)
|
||
|
|
USHORT usAddress2; // Alternate I/O port address for PCI controllers
|
||
|
|
USHORT usReserved1; // Reserved for future use
|
||
|
|
USHORT nCommWaitMethod ; // Added 8/8/02 for specifying DMCCommand communication method.
|
||
|
|
BOOL bFirmSupportsIntComm; // Added 8/8/02 for signaling if device firmware supports int comm.
|
||
|
|
SHORT nDRCacheDepth; // Added 10/28/02 for recording data record cache depth.
|
||
|
|
ULONG ulHardwareID; // Added to uniquely identify controllers by serial number and function.
|
||
|
|
#ifdef UNDER_CE
|
||
|
|
TCHAR szPNPHardwareKey[128];// Hardware registry key for PNP controllers - for Galil use only
|
||
|
|
#else
|
||
|
|
CHAR szPNPHardwareKey[55]; // Hardware registry key for PNP controllers - for Galil use only
|
||
|
|
#endif
|
||
|
|
} BUSINFO;
|
||
|
|
|
||
|
|
// Hardware info - serial communications
|
||
|
|
typedef struct _SERIALINFO
|
||
|
|
{
|
||
|
|
USHORT usCommPort; // Communications port
|
||
|
|
ULONG ulCommSpeed; // Communications speed
|
||
|
|
USHORT fHandshake; // Communications handshake
|
||
|
|
USHORT usDeviceNumber; // Device number - for Galil use only
|
||
|
|
USHORT usReserved1; // Reserved for future use
|
||
|
|
} SERIALINFO;
|
||
|
|
|
||
|
|
// Hardware info - serial communications
|
||
|
|
typedef struct _WINSOCKINFO
|
||
|
|
{
|
||
|
|
ULONG ulPort; // Host port number - for Galil use only
|
||
|
|
#ifdef UNDER_CE
|
||
|
|
TCHAR szIPAddress[64]; // Host name string
|
||
|
|
#else
|
||
|
|
CHAR szIPAddress[32]; // Host name string
|
||
|
|
#endif
|
||
|
|
USHORT fProtocol; // UDP or TCP
|
||
|
|
ULONG fFlags; // Controls auto opening of multi-cast and unsolicited message sessions
|
||
|
|
USHORT fMsgProtocol; // Added 9/15/03. UDP or TCP. Relevant only when second handle is used for unsolicited messages.
|
||
|
|
USHORT fUseEthernetWait; // Added 9/15/03. Allows Ethernet read calls to wait on a FD_READ event rather than spinning the processor.
|
||
|
|
USHORT fUseUnsolicitedDR; // Added 10/7/03. Commands driver to open dedicated data record handle.
|
||
|
|
USHORT nRefreshRate; // Added 10/15/03. Sets the ethernet DR command frequency in millisec.
|
||
|
|
USHORT nCacheDepth; // Added 12/1/03. Allows ethernet implementation of DMCmGetDataRecordConstPointerArray and DMCmGetDataRecordArray.
|
||
|
|
USHORT usReserved3; // Reserved for future use
|
||
|
|
} WINSOCKINFO;
|
||
|
|
|
||
|
|
// Hardware info - ISA and PCI bus communications
|
||
|
|
typedef struct _VMEBUSINFO
|
||
|
|
{
|
||
|
|
USHORT usDeviceNumber; // Device number - for Galil use only
|
||
|
|
USHORT fDeviceDriver; // Use Galil or WinRT device driver
|
||
|
|
USHORT fInterface; // Which VME to PC interface
|
||
|
|
ULONG ulMemoryAddress; // Physical memory address of VME interface card
|
||
|
|
ULONG ulMemoryOffset; // Offset in memory to Galil controller
|
||
|
|
USHORT usAddress; // I/O port address for VME interface card
|
||
|
|
USHORT fIOStyle; // Style of addressing status register on controller
|
||
|
|
USHORT fInterruptStyle; // Style of handling interrupts from controller
|
||
|
|
USHORT usInterrupt; // Interrupt (IRQ) mapped to PC (jumper on VME interface card)
|
||
|
|
USHORT usInterruptLevel; // Interrupt level on the VME bus (jumper on controller)
|
||
|
|
USHORT fDataRecordAccess; // Data record access type
|
||
|
|
USHORT usDataRecordSize; // Data record size (for data record access)
|
||
|
|
USHORT usRefreshRate; // Data record refresh rate in 2^usRefreshRate ms
|
||
|
|
USHORT bPNP; // Plug and play? (TRUE | FALSE)
|
||
|
|
ULONG ulReserved1; // Reserved for future use
|
||
|
|
ULONG ulReserved2; // Reserved for future use
|
||
|
|
ULONG ulReserved3; // Reserved for future use
|
||
|
|
ULONG ulReserved4; // Reserved for future use
|
||
|
|
} VMEBUSINFO;
|
||
|
|
|
||
|
|
// Hardware info for registry
|
||
|
|
typedef union _HARDWAREINFO
|
||
|
|
{
|
||
|
|
BUSINFO businfo; // ISA and PCI bus information
|
||
|
|
SERIALINFO serialinfo; // Serial information
|
||
|
|
WINSOCKINFO winsockinfo; // WinSock (e.g. Ethernet) information
|
||
|
|
VMEBUSINFO vmebusinfo; // VME bus information
|
||
|
|
} HARDWAREINFO;
|
||
|
|
|
||
|
|
// Structure used to add/change/delete registry information
|
||
|
|
// New-style structure
|
||
|
|
typedef struct _GALILREGISTRY2
|
||
|
|
{
|
||
|
|
USHORT usVersion; // Structure version
|
||
|
|
#ifdef UNDER_CE
|
||
|
|
TCHAR szModel[32]; // Controller model string
|
||
|
|
#else
|
||
|
|
CHAR szModel[16]; // Controller model string
|
||
|
|
#endif
|
||
|
|
USHORT usModelID; // Model ID
|
||
|
|
USHORT fControllerType; // Controller type (ISA bus, PCI bus, serial, etc.)
|
||
|
|
ULONG ulTimeout; // Time-out in milliseconds
|
||
|
|
ULONG ulDelay; // Delay in microsceonds
|
||
|
|
ULONG ulSerialNumber; // Controller serial number
|
||
|
|
HARDWAREINFO hardwareinfo; // Union defining the hardware characteristics of the controller
|
||
|
|
} GALILREGISTRY2, FAR* PGALILREGISTRY2;
|
||
|
|
|
||
|
|
// Hardware info for user-defined bus controllers
|
||
|
|
// RESERVED FOR GALIL USE ONLY
|
||
|
|
typedef struct _BUSDEF
|
||
|
|
{
|
||
|
|
SHORT iIOType;
|
||
|
|
SHORT iIOMin;
|
||
|
|
SHORT iIOMax;
|
||
|
|
SHORT iIOSize;
|
||
|
|
SHORT iInterruptType;
|
||
|
|
SHORT iInterrupts;
|
||
|
|
SHORT iInterruptList[16];
|
||
|
|
SHORT iDataRecordAccessType;
|
||
|
|
SHORT iDMAChannels;
|
||
|
|
SHORT iDMAChannelList[8];
|
||
|
|
SHORT nCommWaitMethod;
|
||
|
|
UCHAR bFirmSupportsIntComm;
|
||
|
|
} BUSDEF;
|
||
|
|
|
||
|
|
// Hardware info for user-defined serial controllers
|
||
|
|
// RESERVED FOR GALIL USE ONLY
|
||
|
|
typedef struct _SERIALDEF
|
||
|
|
{
|
||
|
|
SHORT iCommPorts;
|
||
|
|
SHORT iCommPortList[16];
|
||
|
|
SHORT iCommSpeeds;
|
||
|
|
LONG iCommSpeedList[16];
|
||
|
|
SHORT iHandshake;
|
||
|
|
} SERIALDEF;
|
||
|
|
|
||
|
|
// Hardware info for user-defined controllers
|
||
|
|
// RESERVED FOR GALIL USE ONLY
|
||
|
|
typedef union _HARDWAREDEF
|
||
|
|
{
|
||
|
|
BUSDEF busdef;
|
||
|
|
SERIALDEF serialdef;
|
||
|
|
} HARDWAREDEF;
|
||
|
|
|
||
|
|
// Structure used to describe user-defined controllers
|
||
|
|
// RESERVED FOR GALIL USE ONLY
|
||
|
|
typedef struct _CONTROLLERDEF
|
||
|
|
{
|
||
|
|
#ifdef UNDER_CE
|
||
|
|
TCHAR szModel[32];
|
||
|
|
#else
|
||
|
|
CHAR szModel[16];
|
||
|
|
#endif
|
||
|
|
SHORT iControllerType;
|
||
|
|
HARDWAREDEF hardwaredef;
|
||
|
|
} CONTROLLERDEF;
|
||
|
|
|
||
|
|
// Function prototypes
|
||
|
|
|
||
|
|
// All functions return an error code. DMCNOERROR (0) is function completed
|
||
|
|
// successfully. < 0 is a local error (see the error codes above). > 0 is an
|
||
|
|
// Win32 API error (if you are using the 32-bit DLLs). These are documented in
|
||
|
|
// the Win32 Programming Reference.
|
||
|
|
|
||
|
|
// General functions for all controllers
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCOpen(USHORT usController, HWND hwnd,
|
||
|
|
PHANDLEDMC phdmc);
|
||
|
|
// Open communications with the Galil controller. The handle to the Galil
|
||
|
|
// controller is returned in the argument phdmc.
|
||
|
|
// NOTE: hwnd is not used for controllers which do not support bus interrupts.
|
||
|
|
|
||
|
|
// usController A number between 1 and 16. Up to 16 Galil controllers may be
|
||
|
|
// addressed per process.
|
||
|
|
// hwnd The window handle to use for notifying the application
|
||
|
|
// program of an interrupt via PostMessage.
|
||
|
|
// phdmc Buffer to receive the handle to the Galil controller to be
|
||
|
|
// used for all subsequent API calls. Users should declare a
|
||
|
|
// variable of type HANDLEDMC and pass the address of the
|
||
|
|
// variable to the function. Output only.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCOpen2(USHORT usController, LONG lThreadID,
|
||
|
|
PHANDLEDMC phdmc);
|
||
|
|
// Open communications with the Galil controller. The handle to the Galil
|
||
|
|
// controller is returned in the argument phdmc.
|
||
|
|
// NOTE: lThreadID is not used for controllers which do not support bus interrupts.
|
||
|
|
|
||
|
|
// usController A number between 1 and 16. Up to 16 Galil controllers may be
|
||
|
|
// addressed per process.
|
||
|
|
// lThreadID The thread ID to use for notifying the application
|
||
|
|
// program of an interrupt via PostThreadMessage.
|
||
|
|
// phdmc Buffer to receive the handle to the Galil controller to be
|
||
|
|
// used for all subsequent API calls. Users should declare a
|
||
|
|
// variable of type HANDLEDMC and pass the address of the
|
||
|
|
// variable to the function. Output only.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCGetHandle(USHORT usController, PHANDLEDMC phdmc);
|
||
|
|
// Get the handle for a Galil controller which was already opened using
|
||
|
|
// DMCOpen or DMCOpen2. The handle to the Galil controller is returned in the
|
||
|
|
// argument phdmc.
|
||
|
|
|
||
|
|
// usController A number between 1 and 16. Up to 16 Galil controllers may be
|
||
|
|
// addressed per process.
|
||
|
|
// phdmc Buffer to receive the handle to the Galil controller to be
|
||
|
|
// used for all subsequent API calls. Users should declare a
|
||
|
|
// variable of type HANDLEDMC and pass the address of the
|
||
|
|
// variable to the function. Output only.
|
||
|
|
|
||
|
|
HANDLE GALILCALL DMCInterruptEventHandle( USHORT );
|
||
|
|
// Get the handle to the Event that is set signled to indicate an interrupt occured
|
||
|
|
// usController A number between 1 and 16. Up to 16 Galil controllers may be
|
||
|
|
// addressed per process.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCChangeInterruptNotification(HANDLEDMC hdmc, LONG lHandle);
|
||
|
|
// Change the window handle used in DMCOpen or the thread ID used in DMCOpen2. This
|
||
|
|
// value is for notification of interrupts.
|
||
|
|
// NOTE: This function is not used for controllers which do not support bus interrupts.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// lHandle New window handle or thread ID.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCClose(HANDLEDMC hdmc);
|
||
|
|
// Close communications with the Galil controller.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCCommand(HANDLEDMC hdmc, PSZ pszCommand,
|
||
|
|
LPCHAR pchResponse, ULONG cbResponse);
|
||
|
|
// Send a DMC command in ascii format to the Galil controller.
|
||
|
|
// NOTE: This function can only send commands or groups of commands up to
|
||
|
|
// 1024 bytes long.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// pszCommand The command to send to the Galil controller.
|
||
|
|
// pchResponse Buffer to receive the response data. If the buffer is too
|
||
|
|
// small to recieve all the response data from the controller,
|
||
|
|
// the error code DMCERROR_BUFFERFULL will be returned. The
|
||
|
|
// user may get additional response data by calling the
|
||
|
|
// function DMCGetAdditionalResponse. The length of the
|
||
|
|
// additonal response data may ascertained by call the
|
||
|
|
// function DMCGetAdditionalResponseLen. If the response
|
||
|
|
// data from the controller is too large for the internal
|
||
|
|
// additional response buffer, the error code
|
||
|
|
// DMCERROR_RESPONSEDATA will be returned. Output only.
|
||
|
|
// cbResponse Length of the buffer.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCFastCommand(HANDLEDMC hdmc, PSZ pszCommand);
|
||
|
|
// Send a DMC command in ascii format to the Galil controller and do not
|
||
|
|
// wait for a response. Use this function with extreme caution as command
|
||
|
|
// errors will not be reported and the out-going FIFO or communciations buffer
|
||
|
|
// may fill up. Use this function for Galil commands which do
|
||
|
|
// not return an acknowlegement from the controller such as providing data
|
||
|
|
// for the Galil DL and QD commands. Other uses may be to send contour data.
|
||
|
|
// NOTE: This function can only send commands or groups of commands up to
|
||
|
|
// 1024 bytes long.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// pszCommand The command to send to the Galil controller.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCBinaryCommand(HANDLEDMC hdmc, LPBYTE pbCommand, ULONG ulCommandLength,
|
||
|
|
LPCHAR pchResponse, ULONG cbResponse);
|
||
|
|
// Send a DMC command in binary format to the Galil controller.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// pbCommand The command to send to the Galil controller in binary.
|
||
|
|
// ulCommandLength The length of the command (binary commands are not null-terminated).
|
||
|
|
// pchResponse Buffer to receive the response data. If the buffer is too
|
||
|
|
// small to recieve all the response data from the controller,
|
||
|
|
// the error code DMCERROR_BUFFERFULL will be returned. The
|
||
|
|
// user may get additional response data by calling the
|
||
|
|
// function DMCGetAdditionalResponse. The length of the
|
||
|
|
// additonal response data may ascertained by call the
|
||
|
|
// function DMCGetAdditionalResponseLen. If the response
|
||
|
|
// data from the controller is too large for the internal
|
||
|
|
// additional response buffer, the error code
|
||
|
|
// DMCERROR_RESPONSEDATA will be returned. Output only.
|
||
|
|
// cbResponse Length of the buffer.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCGetUnsolicitedResponse(HANDLEDMC hdmc,
|
||
|
|
LPCHAR pchResponse, ULONG cbResponse);
|
||
|
|
// Query the Galil controller for unsolicited responses. These are messages
|
||
|
|
// output from programs running in the background in the Galil controller.
|
||
|
|
// The data placed in the user buffer (pchResponse) is NULL terminated.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// pchResponse Buffer to receive the response data.
|
||
|
|
// cbResponse Length of the buffer.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCWriteData(HANDLEDMC hdmc,
|
||
|
|
LPCHAR pchBuffer, ULONG cbBuffer, LPULONG pulBytesWritten);
|
||
|
|
// Low-level I/O routine to write data to the Galil controller. Data is written
|
||
|
|
// to the Galil controller only if it is "ready" to receive it. The function
|
||
|
|
// will attempt to write exactly cbBuffer characters to the controller.
|
||
|
|
// NOTE: For Win32 and WinRT driver the maximum number of bytes which can be
|
||
|
|
// written each time is 64. There are no restrictions with the Galil driver.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// pchBuffer Buffer to write the data from. Data does not need to be
|
||
|
|
// NULL terminated.
|
||
|
|
// cbBuffer Length of the data in the buffer.
|
||
|
|
// pulBytesWritten Number of bytes written.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCReadData(HANDLEDMC hdmc,
|
||
|
|
LPCHAR pchBuffer, ULONG cbBuffer, LPULONG pulBytesRead);
|
||
|
|
// Low-level I/O routine to read data from the Galil controller. The routine
|
||
|
|
// will read what ever is currently in the FIFO (bus controller) or
|
||
|
|
// communications port input queue (serial controller). The function will read
|
||
|
|
// up to cbBuffer characters from the controller. The data placed in the
|
||
|
|
// user buffer (pchBuffer) is NOT NULL terminated. The data returned is not
|
||
|
|
// guaranteed to be a complete response - you may have to call this function
|
||
|
|
// repeatedly to get a complete response.
|
||
|
|
// NOTE: For Win32 and WinRT driver the maximum number of bytes which can be
|
||
|
|
// read each time is 64. There are no restrictions with the Galil driver.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// pchBuffer Buffer to read the data into. Data will not be NULL
|
||
|
|
// terminated.
|
||
|
|
// cbBuffer Length of the buffer.
|
||
|
|
// pulBytesRead Number of bytes read.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCGetAdditionalResponseLen(HANDLEDMC hdmc,
|
||
|
|
LPULONG pulResponseLen);
|
||
|
|
// Query the Galil controller for the length of additional response data. There
|
||
|
|
// will be more response data available if the DMCCommand function returned
|
||
|
|
// DMCERROR_BUFFERFULL.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// pulResponseLen Buffer to receive the additional response data length.
|
||
|
|
// Output only.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCGetAdditionalResponse(HANDLEDMC hdmc,
|
||
|
|
LPCHAR pchResponse, ULONG cbResponse);
|
||
|
|
// Query the Galil controller for more response data. There will be more
|
||
|
|
// response data available if the DMCCommand function returned
|
||
|
|
// DMCERROR_BUFFERFULL. Once this function is called, the internal
|
||
|
|
// additonal response buffer is cleared.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// pchResponse Buffer to receive the response data. Output only.
|
||
|
|
// cbResponse Length of the buffer.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCError(HANDLEDMC hdmc, LONG lError, LPCHAR pchMessage,
|
||
|
|
ULONG cbMessage);
|
||
|
|
// Retrieve the error message text from a DMCERROR_COMMAND error.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// pchMessage Buffer to receive the error message text. Output only.
|
||
|
|
// cbMessage Length of the buffer.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCClear(HANDLEDMC hdmc);
|
||
|
|
// Clear the Galil controller FIFO.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCReset(HANDLEDMC hdmc);
|
||
|
|
// Reset the Galil controller.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCMasterReset(HANDLEDMC hdmc);
|
||
|
|
// Master reset the Galil controller.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCVersion(HANDLEDMC hdmc, LPCHAR pchVersion,
|
||
|
|
ULONG cbVersion);
|
||
|
|
// Get the version of the Galil controller.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// pchVersion Buffer to receive the version information. Output only.
|
||
|
|
// cbVersion Length of the buffer.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCDownloadFile(HANDLEDMC hdmc, PSZ pszFileName,
|
||
|
|
PSZ pszLabel);
|
||
|
|
// Download a file to the Galil controller.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// pszFileName File name to download to the Galil controller.
|
||
|
|
// pszLabel Program label to download to. This argument is ignored if
|
||
|
|
// NULL.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCDownloadFromBuffer(HANDLEDMC hdmc, PSZ pszBuffer,
|
||
|
|
PSZ pszLabel);
|
||
|
|
// Download from a buffer to the Galil controller.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// pszBuffer Buffer of DMC commands to download to the Galil controller.
|
||
|
|
// pszLabel Program label to download to. This argument is ignored if
|
||
|
|
// NULL.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCUploadFile(HANDLEDMC hdmc, PSZ pszFileName);
|
||
|
|
// Upload a file from the Galil controller.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// pszFileName File name to upload from the Galil controller.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCUploadToBuffer(HANDLEDMC hdmc, LPCHAR pchBuffer,
|
||
|
|
ULONG cbBuffer);
|
||
|
|
// Upload to a buffer from the Galil controller.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// pchBuffer Buffer of DMC commands to upload from the Galil controller.
|
||
|
|
// Output only.
|
||
|
|
// cbBuffer Length of the buffer.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCSendFile(HANDLEDMC hdmc, PSZ pszFileName);
|
||
|
|
// Send a file consisting of DMC commands in ascii format to the Galil controller.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// pszFileName File name to send to the Galil controller.
|
||
|
|
|
||
|
|
// Binary communications functions
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCSendBinaryFile(HANDLEDMC hdmc, PSZ pszFileName);
|
||
|
|
// Send a file consisting of DMC commands in binary format to the Galil controller.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// pszFileName File name to send to the Galil controller.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCArrayDownload(HANDLEDMC hdmc, PSZ pszArrayName,
|
||
|
|
USHORT usFirstElement, USHORT usLastElement, LPCHAR pchData, ULONG cbData,
|
||
|
|
LPULONG cbBytesWritten);
|
||
|
|
// Download an array to the Galil controller. The array must exist. Array data can be
|
||
|
|
// delimited by a comma or CR (0x0D) or CR/LF (0x0D0A).
|
||
|
|
// NOTE: The firmware on the controller must be recent enough to support the QD command.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// pszArrayName Array name to download to the Galil controller.
|
||
|
|
// usFirstElement First array element.
|
||
|
|
// usLastElement Last array element.
|
||
|
|
// pchData Buffer to write the array data from. Data does not need to be
|
||
|
|
// NULL terminated.
|
||
|
|
// cbData Length of the array data in the buffer.
|
||
|
|
// cbBytesWritten Number of bytes written.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCArrayUpload(HANDLEDMC hdmc, PSZ pszArrayName,
|
||
|
|
USHORT usFirstElement, USHORT usLastElement, LPCHAR pchData, ULONG cbData,
|
||
|
|
LPULONG pulBytesRead, SHORT fComma);
|
||
|
|
// Upload an array from the Galil controller. The array must exist. Array data will be
|
||
|
|
// delimited by a comma or CR (0x0D) depending of the value of fComma.
|
||
|
|
// NOTE: The firmware on the controller must be recent enough to support the QU command.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// pszArrayName Array name to upload from the Galil controller.
|
||
|
|
// usFirstElement First array element.
|
||
|
|
// usLastElement Last array element.
|
||
|
|
// pchData Buffer to read the array data into. Array data will not be
|
||
|
|
// NULL terminated.
|
||
|
|
// cbData Length of the buffer.
|
||
|
|
// pulBytesRead Number of bytes read.
|
||
|
|
// fComma 0 = delimit by "\r", 1 = delimit by ",".
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCCommand_AsciiToBinary(HANDLEDMC hdmc, PSZ pszAsciiCommand,
|
||
|
|
ULONG ulAsciiCommandLength, LPBYTE pbBinaryResult,
|
||
|
|
ULONG cbBinaryResult, LPULONG pulBinaryResultLength);
|
||
|
|
// Convert an ascii DMC command to a binary DMC command.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// pszAsciiCommand Ascii DMC command(s) to be converted.
|
||
|
|
// ulAsciiCommandLength Length of DMC command(s).
|
||
|
|
// pbBinaryResult Buffer to receive the translated DMC command.
|
||
|
|
// cbBinaryResult Length of the buffer.
|
||
|
|
// pulBinaryResultLength Length of the translated DMC command.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCCommand_BinaryToAscii(HANDLEDMC hdmc, LPBYTE pbBinaryCommand,
|
||
|
|
ULONG ulBinaryCommandLength, PSZ pszAsciiResult,
|
||
|
|
ULONG cbAsciiResult, LPULONG pulAsciiResultLength);
|
||
|
|
// Convert a binary DMC command to an ascii DMC command.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// pbBinaryCommand Binary DMC command(s) to be converted.
|
||
|
|
// ulBinaryCommandLength Length of DMC command(s).
|
||
|
|
// pszAsciiResult Buffer to receive the translated DMC command.
|
||
|
|
// cbAsciiResult Length of the buffer.
|
||
|
|
// pulAsciiResultLength Length of the translated DMC command.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCFile_AsciiToBinary(HANDLEDMC hdmc, PSZ pszInputFileName,
|
||
|
|
PSZ pszOutputFileName);
|
||
|
|
// Convert a file consisting of ascii commands to a file consisting of binary commands.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// pszInputFileName File name for the input ascii file.
|
||
|
|
// pszOutputFileName File name for the output binary file.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCFile_BinaryToAscii(HANDLEDMC hdmc, PSZ pszInputFileName,
|
||
|
|
PSZ pszOutputFileName);
|
||
|
|
// Convert a file consisting of binary commands to a file consisting of ascii commands.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// pszInputFileName File name for the input binary file.
|
||
|
|
// pszOutputFileName File name for the output ascii file.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCReadSpecialConversionFile(HANDLEDMC hdmc, PSZ pszFileName);
|
||
|
|
// Read into memory a special BinaryToAscii/AsciiToBinary conversion table.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// pszFileName File name for the special conversion file.
|
||
|
|
|
||
|
|
// Data record access (DMA/FIFO) functions.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCRefreshDataRecord(HANDLEDMC hdmc, ULONG ulLength);
|
||
|
|
// Refresh the data record used for fast polling.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// ulLength Refresh size in bytes. Set to 0 unless you do not want a full-buffer
|
||
|
|
// refresh.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCGetDataRecord(HANDLEDMC hdmc, USHORT usGeneralOffset,
|
||
|
|
USHORT usAxisInfoOffset, LPUSHORT pusDataType, LPLONG plData);
|
||
|
|
// Get a data item from the data record used for fast polling. Gets one item from the
|
||
|
|
// data record by using offsets (see data record constants defined in DMCDRC.H). To
|
||
|
|
// retrieve data record items by Id instead of offset, use the function
|
||
|
|
// DMCGetDataRecordByItemId.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// usGeneralOffset Data record offset for general data item.
|
||
|
|
// usAxisInfoOffset Additional data record offset for axis data item.
|
||
|
|
// pusDataType Data type of the data item. If you are using the standard,
|
||
|
|
// pre-defined offsets, set this argument to zero before calling this
|
||
|
|
// function. The actual data type of the data item is returned
|
||
|
|
// on output.
|
||
|
|
// plData Buffer to receive the data record data. Output only.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCGetDataRecordByItemId(HANDLEDMC hdmc, USHORT usItemId,
|
||
|
|
USHORT usAxisId, LPUSHORT pusDataType, LPLONG plData);
|
||
|
|
// Get a data item from the data record used for fast polling. Gets one item from the
|
||
|
|
// data record by using Id (see data record Ids defined in DMCDRC.H). To
|
||
|
|
// retrieve data record items by offset instead of Id, use the function DMCGetDataRecord.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// usItemId Data record item Id.
|
||
|
|
// usAxisId Axis Id used for axis data items.
|
||
|
|
// pusDataType Data type of the data item. The data type of the
|
||
|
|
// data item is returned on output. Output Only.
|
||
|
|
// plData Buffer to receive the data record data. Output only.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCGetDataRecordSize(HANDLEDMC hdmc, LPUSHORT pusRecordSize);
|
||
|
|
// Get the size of the data record used for fast polling.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// pusRecordSize The size of the data record is returned on output. Output Only.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCCopyDataRecord(HANDLEDMC hdmc, PVOID pDataRecord);
|
||
|
|
// Get a copy of the data record used for fast polling. The data record is
|
||
|
|
// only as recent as the last call made to DMCRefreshDataRecord.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// pDataRecord A copy of the data record is returned on output. Output Only.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCGetDataRecordRevision(HANDLEDMC hdmc, LPUSHORT pusRevision);
|
||
|
|
// Get the revision of the data record structure used for fast polling.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// pusRevision The revision of the data record structure is returned on
|
||
|
|
// output. Output Only.
|
||
|
|
|
||
|
|
// Diagnostics functions for all controllers
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCDiagnosticsOn(HANDLEDMC hdmc, PSZ pszFileName,
|
||
|
|
SHORT fAppend);
|
||
|
|
// Turn on diagnostics.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// pszFileName File name for the diagnostic file.
|
||
|
|
// fAppend TRUE if the file will open for append, otherwise FALSE.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCDiagnosticsOff(HANDLEDMC hdmc);
|
||
|
|
// Turn off diagnostics.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
|
||
|
|
// Configuration functions for all controllers
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCGetTimeout(HANDLEDMC hdmc, LONG FAR* pTimeout);
|
||
|
|
// Get current time-out value. The default is 1000.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// pTimeout Buffer to receive the current time-out value in
|
||
|
|
// milliseconds. Output only.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCSetTimeout(HANDLEDMC hdmc, LONG lTimeout);
|
||
|
|
// Set time-out value. The default is 1000. If the time-out value is set to
|
||
|
|
// zero, the DLLs will ignore time-out errors. This is useful for sending
|
||
|
|
// Galil commands which do not return a response, such as providing records
|
||
|
|
// to the DL or QD commands.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// lTimeout Time-out value in milliseconds.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCGetDelay(HANDLEDMC hdmc, LONG FAR* pDelay);
|
||
|
|
// *** THIS FUNCTION IS OBSOLETE. DELAY IS NO LONGER USED ***
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// pDelay Buffer to receive the current delay value in
|
||
|
|
// milliseconds. Output only.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCSetDelay(HANDLEDMC hdmc, LONG lDelay);
|
||
|
|
// *** THIS FUNCTION IS OBSOLETE. DELAY IS NO LONGER USED ***
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// lDelay Delay value in milliseconds.
|
||
|
|
|
||
|
|
// Registry functions for all controllers
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCAddGalilRegistry(PGALILREGISTRY pgalilregistry,
|
||
|
|
LPUSHORT pusController);
|
||
|
|
// Add a Galil controller to the Windows registry. The controller number is
|
||
|
|
// returned in the argument pusController.
|
||
|
|
// Supports old-style registry structure.
|
||
|
|
|
||
|
|
// pgalilregistry Pointer to a GALILREGISTRY struct.
|
||
|
|
// pusController Buffer to receive the Galil controller number. Output only.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCAddGalilRegistry2(PGALILREGISTRY2 pgalilregistry2,
|
||
|
|
LPUSHORT pusController);
|
||
|
|
// Add a Galil controller to the Windows registry. The controller number is
|
||
|
|
// returned in the argument pusController.
|
||
|
|
// Supports new-style registry structure.
|
||
|
|
|
||
|
|
// pgalilregistry Pointer to a GALILREGISTRY2 struct.
|
||
|
|
// pusController Buffer to receive the Galil controller number. Output only.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCModifyGalilRegistry(USHORT usController,
|
||
|
|
PGALILREGISTRY pgalilregistry);
|
||
|
|
// Change a Galil controller in the Windows registry.
|
||
|
|
// Supports old-style registry structure.
|
||
|
|
|
||
|
|
// usController Galil controller number.
|
||
|
|
// pgalilregistry Pointer to a GALILREGISTRY struct.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCModifyGalilRegistry2(USHORT usController,
|
||
|
|
PGALILREGISTRY2 pgalilregistry2);
|
||
|
|
// Change a Galil controller in the Windows registry.
|
||
|
|
// Supports new-style registry structure.
|
||
|
|
|
||
|
|
// usController Galil controller number.
|
||
|
|
// pgalilregistry2 Pointer to a GALILREGISTRY2 struct.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCGetGalilRegistryInfo(USHORT usController,
|
||
|
|
PGALILREGISTRY pgalilregistry);
|
||
|
|
// Get Windows registry information for a given Galil controller.
|
||
|
|
// Supports old-style registry structure.
|
||
|
|
|
||
|
|
// usController Galil controller number.
|
||
|
|
// pgalilregistry Pointer to a GALILREGISTRY struct. Output only.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCGetGalilRegistryInfo2(USHORT usController,
|
||
|
|
PGALILREGISTRY2 pgalilregistry2);
|
||
|
|
// Get Windows registry information for a given Galil controller.
|
||
|
|
// Supports new-style registry structure.
|
||
|
|
|
||
|
|
// usController Galil controller number.
|
||
|
|
// pgalilregistry2 Pointer to a GALILREGISTRY2 struct. Output only.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCEnumGalilRegistry(USHORT FAR* pusCount,
|
||
|
|
PGALILREGISTRY pgalilregistry);
|
||
|
|
// Enumerate or list all the Galil controllers in the Windows registry. The
|
||
|
|
// user needs to make two calls to this function. The first call should
|
||
|
|
// have a NULL for the argument pgalilregistry. The number of GALILREGISTRY
|
||
|
|
// structs (number of Galil controllers in the Windows registry) will be
|
||
|
|
// returned in the argument pusCount. The second call should have sufficient
|
||
|
|
// memory allocated for all the GALILREGISTRY structs to be returned
|
||
|
|
// and pass the pointer to that memory as the argument pgalilregistry.
|
||
|
|
// It is the users responsibility to allocate and free memory to hold the
|
||
|
|
// GALILREGISTRY structs.
|
||
|
|
// Supports old-style registry structure.
|
||
|
|
|
||
|
|
// pusCount Pointer to the number of GALILREGISTRY structs returned.
|
||
|
|
// pgalilregistry Pointer to a GALILREGISTRY struct. Output only.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCEnumGalilRegistry2(USHORT FAR* pusCount,
|
||
|
|
PGALILREGISTRY2 pgalilregistry2);
|
||
|
|
// Enumerate or list all the Galil controllers in the Windows registry. The
|
||
|
|
// user needs to make two calls to this function. The first call should
|
||
|
|
// have a NULL for the argument pgalilregistry. The number of GALILREGISTRY2
|
||
|
|
// structs (number of Galil controllers in the Windows registry) will be
|
||
|
|
// returned in the argument pusCount. The second call should have sufficient
|
||
|
|
// memory allocated for all the GALILREGISTRY2 structs to be returned
|
||
|
|
// and pass the pointer to that memory as the argument pgalilregistry.
|
||
|
|
// It is the users responsibility to allocate and free memory to hold the
|
||
|
|
// GALILREGISTRY structs.
|
||
|
|
// Supports new-style registry structure.
|
||
|
|
|
||
|
|
// pusCount Pointer to the number of GALILREGISTRY2 structs returned.
|
||
|
|
// pgalilregistry2 Pointer to a GALILREGISTRY2 struct. Output only.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCDeleteGalilRegistry(SHORT sController);
|
||
|
|
// Delete a Galil controller in the Windows registry.
|
||
|
|
// Supports both old-style and new-style registry structures.
|
||
|
|
|
||
|
|
// sController Galil controller number. Use -1 to delete all Galil
|
||
|
|
// controllers.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCGetControllerDesc(USHORT usController, PSZ pszControllerDesc, ULONG cbControllerDesc);
|
||
|
|
// Get a description of the controller from the registry.
|
||
|
|
|
||
|
|
// usController Galil controller number.
|
||
|
|
// pszControllerDesc Buffer to receive the controller description. Output only.
|
||
|
|
// cbControllerDesc Length of the buffer.
|
||
|
|
|
||
|
|
// Windows plug-and-play functions
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCRegisterPnpControllers(USHORT* pusCount);
|
||
|
|
// Update Windows registry for all Galil Plug-and-Play (PnP) controllers. This function
|
||
|
|
// will add new controllers to the registry or update existing ones.
|
||
|
|
// NOTE: This function is for the DMC-1600, DMC-1700, and DMC-1800 only.
|
||
|
|
// NOTE: This function is for Win16 and Windows NT only. Windows 95/98
|
||
|
|
// automatically register controllers through the device driver.
|
||
|
|
|
||
|
|
// pusCount Pointer to the number of Galil PnP controllers registered
|
||
|
|
// (and/or updated).
|
||
|
|
|
||
|
|
// Registry dialog windows
|
||
|
|
|
||
|
|
SHORT FAR GALILCALL DMCSelectController(HWND hwnd);
|
||
|
|
// Select a Galil motion controller from a list of registered controllers. Returns the
|
||
|
|
// selected controller number or -1 if no controller was selected.
|
||
|
|
// NOTE: This function invokes a dialog window.
|
||
|
|
|
||
|
|
// hwnd The window handle of the calling application. If NULL, the
|
||
|
|
// window with the current input focus is used.
|
||
|
|
|
||
|
|
VOID FAR GALILCALL DMCEditRegistry(HWND hwnd);
|
||
|
|
// Edit the Windows registry: add, change, or delete Galil motion controllers.
|
||
|
|
// NOTE: This function invokes a dialog window.
|
||
|
|
|
||
|
|
// hwnd The window handle of the calling application. If NULL, the
|
||
|
|
// window with the current input focus is used.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCAssignIPAddress(HWND hWnd, PGALILREGISTRY2 pgalilregistry2);
|
||
|
|
// Assign the IP Address to a DMC-2100 or DMC-1415 Ethernet controller. The controller must be in
|
||
|
|
// BOOTP broadcast mode.
|
||
|
|
|
||
|
|
// hwnd The window handle of the calling application. If NULL, the
|
||
|
|
// window with the current input focus is used.
|
||
|
|
// szIPAddress The IP address as a string. Example: "160.35.50.1".
|
||
|
|
|
||
|
|
// Utility functions
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCWaitForMotionComplete(HANDLEDMC hdmc, PSZ pszAxes, SHORT fDispatchMsgs);
|
||
|
|
// Wait for motion complete by creating a thread to query the controller. The function returns
|
||
|
|
// when motion is complete.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// pszAxes Which axes to wait for: X, Y, Z, W, E, F, G, H, or S for
|
||
|
|
// coordinated motion. To wait for more than one axis (other than
|
||
|
|
// coordinated motion), simply concatenate the axis letters in the string.
|
||
|
|
// fDispatchMsgs Set to TRUE if you want to get and dispatch Windows messages
|
||
|
|
// while waiting for motion complete. This flag is always TRUE for Win16.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCDownloadFirmwareFile(HANDLEDMC hdmc, PSZ pszFileName, SHORT fDisplayDialog);
|
||
|
|
// Update the controller's firmware. This function will open a binary firmware file and refresh
|
||
|
|
// the flash EEPROM of the controller.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// pszFileName File name to download to the Galil controller.
|
||
|
|
// fDisplayDialog Display a progress dialog while the firmware file is being downloaded.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCCompressFile(PSZ pszInputFileName, PSZ pszOutputFileName, USHORT usLineWidth,
|
||
|
|
PUSHORT pusLineCount);
|
||
|
|
// Compress a DMC file so that program space in the controller is fully utilized. Lines
|
||
|
|
// are put together whenever possible to make more lines available. Leading and trailing spaces
|
||
|
|
// are removed as well.
|
||
|
|
|
||
|
|
// pszInputFileName The name of the DMC file to compress.
|
||
|
|
// pszOutputFileName The name of the resulting compressed DMC file.
|
||
|
|
// usLineWidth The maximum line width. For most controllers, this value is either 40 or 80.
|
||
|
|
// pusLineCount The line count of the resulting compressed DMC file is returned on output.
|
||
|
|
// Output Only.
|
||
|
|
|
||
|
|
#if defined(_WIN32) || defined(__WIN32__)
|
||
|
|
// Win32 device driver functions
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCReadRegister(HANDLEDMC hdmc, USHORT usOffset, PBYTE pbStatus);
|
||
|
|
// Read from a register (FIFO) of a bus controller.
|
||
|
|
// NOTE: This function is for Galil bus controllers and Win32 only.
|
||
|
|
|
||
|
|
// ** THIS FUNCTION IS FOR EXPERIENCED PROGRAMMERS ONLY **
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// usOffset Register offset. 0 = mailbox, 1 = status.
|
||
|
|
// pbStatus Buffer to receive status register data.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCWriteRegister(HANDLEDMC hdmc, USHORT usOffset, BYTE bStatus);
|
||
|
|
// Write to a register (FIFO) of a bus controller.
|
||
|
|
// NOTE: This function is for Galil bus controllers and Win32 only.
|
||
|
|
|
||
|
|
// ** THIS FUNCTION IS FOR EXPERIENCED PROGRAMMERS ONLY **
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// usOffset Register offset. 0 = mailbox, 1 = status.
|
||
|
|
// bStatus Status register data.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCStartDeviceDriver(USHORT usController);
|
||
|
|
// Start the device driver associated with the given controller. All controller
|
||
|
|
// handles must be closed. Use this function to recycle the device driver after
|
||
|
|
// making a configuration change through the Windows registry. For bus controllers
|
||
|
|
// only.
|
||
|
|
// NOTE: This function is for Win32 only. Windows NT requires
|
||
|
|
// administrative authority.
|
||
|
|
|
||
|
|
// usController Galil controller number.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCStopDeviceDriver(USHORT usController);
|
||
|
|
// Stop the device driver associated with the given controller. All controller
|
||
|
|
// handles must be closed. Use this function to recycle the device driver after
|
||
|
|
// making a configuration change through the Windows registry. For bus controllers
|
||
|
|
// only.
|
||
|
|
// NOTE: This function is for Win32 only. Windows NT requires
|
||
|
|
// administrative authority.
|
||
|
|
|
||
|
|
// usController Galil controller number.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCStopDeviceDriverEx( DWORD dwType );
|
||
|
|
// Stop the device driver type. All controller
|
||
|
|
// handles must be closed. Use this function to recycle the device driver after
|
||
|
|
// making a configuration change through the Windows registry. For bus controllers
|
||
|
|
// only.
|
||
|
|
// NOTE: This function is for Win32 only. Windows NT requires
|
||
|
|
// administrative authority.
|
||
|
|
|
||
|
|
// dwType Galil driver type.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCStartDeviceDriverEx( DWORD dwType );
|
||
|
|
// Start the device driver associated with the given controller. All controller
|
||
|
|
// handles must be closed. Use this function to recycle the device driver after
|
||
|
|
// making a configuration change through the Windows registry. For bus controllers
|
||
|
|
// only.
|
||
|
|
// NOTE: This function is for Win32 only. Windows NT requires administrative authority.
|
||
|
|
|
||
|
|
// dwType Galil driver type.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCQueryDeviceDriver( DWORD dwType );
|
||
|
|
// Start the device driver associated with the given controller. All controller
|
||
|
|
// handles must be closed. Use this function to recycle the device driver after
|
||
|
|
// making a configuration change through the Windows registry. For bus controllers
|
||
|
|
// only.
|
||
|
|
// NOTE: This function is for Win32 only. Windows NT requires administrative authority.
|
||
|
|
|
||
|
|
// dwType Galil driver type.
|
||
|
|
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCSendCW2OnClose( HANDLEDMC hdmc, BOOL *pbValue );
|
||
|
|
// This function sets the bSendCW2OnClose property of the dmc handle. This property
|
||
|
|
// determines if the controller is sent a "CW2" command on closing. The "CW2"
|
||
|
|
// command causes the controller to NOT set the most significant bit of unsolicited
|
||
|
|
// messages to 1 (please see the Galil Motion Control Command reference). The default
|
||
|
|
// behavior is TRUE, which means the CW2 command is sent prior to closing a controller
|
||
|
|
// handle.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// pbValue Desired boolean value. On function return pbValue contains the
|
||
|
|
// previous value. .
|
||
|
|
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCGetDataRecordItemOffsetById( HANDLEDMC hdmc, USHORT usItemId,
|
||
|
|
USHORT usAxisId, LPUSHORT pusOffset, LPUSHORT pusDataType );
|
||
|
|
// Get the total offset for a data item by data item Id(see data record Ids defined in DMCDRC.H).
|
||
|
|
// The returned offset and datatype can then be used to extract a value from the data record
|
||
|
|
// pointer retrieved using DMCCopyDataRecord.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// usItemId Data record item Id.
|
||
|
|
// usAxisId Axis Id used for axis data items.
|
||
|
|
// pusOffset Total offset (number of bytes) from the beginning of the data
|
||
|
|
// record to the data item. Output Only.
|
||
|
|
// pusDataType Data type of the data item. The data type of the
|
||
|
|
// data item is returned on output. Output Only.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCGetDataRecordConstPointer(HANDLEDMC hdmc, const char **pchDataRecord);
|
||
|
|
// Get a const pointer to the most recent data record. Using this method to access the information
|
||
|
|
// in the data record eliminates the copying necessary with DMCCopyDataRecord. For PCI and ISA controllers
|
||
|
|
// using WDM drivers 5.0.0.0 and higher, this function retrieves the most recent data record available. If
|
||
|
|
// the cache depth is set larger than 1, the records are lost. If an application is using this function
|
||
|
|
// exclusively, the data record cache depth should be set to 1. DMCRefreshDataRecord must be called prior to
|
||
|
|
// calling this function.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// pchDataRecord Const pointer to the data record.
|
||
|
|
|
||
|
|
LONG FAR GALILCALL DMCGetDataRecordConstPointerArray(HANDLEDMC hdmc, const char **pchDataRecord, LPUSHORT pusNumDataRecords);
|
||
|
|
// Get a const pointer to the available data records. This function retrieves all the available cached
|
||
|
|
// data records from a PCI and ISA controller with 2nd FIFO. Compatible with Glwdmpci.sys, Glwdmisa.sys,
|
||
|
|
// and GalilPCI.sys driver versions 7.0.0.0 and higher. The cache depth is set by controller properties
|
||
|
|
// stored in the Galil Registry. It is not necessary to call DMCRefreshDataRecord prior to calling this function.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// pchDataRecord Const pointer to an array of data records.
|
||
|
|
// psNumDataRecords The number of data records contained in the character array.
|
||
|
|
|
||
|
|
|
||
|
|
#ifdef __cplusplus
|
||
|
|
|
||
|
|
struct CDMCFullDataRecord; // Forward declaration.
|
||
|
|
LONG FAR GALILCALL DMCGetDataRecordArray(HANDLEDMC hdmc, CDMCFullDataRecord **pDataRecordArray, LPUSHORT pusNumDataRecords);
|
||
|
|
// Get an array of data records. This function retrieves all the available cached
|
||
|
|
// data records from a PCI and ISA controller with 2nd FIFO. Compatible with Glwdmpci.sys, Glwdmisa.sys,
|
||
|
|
// and GalilPCI.sys driver versions 7.0.0.0 and higher. The cache depth is set by controller properties
|
||
|
|
// stored in the Galil Registry. It is not necessary to call DMCRefreshDataRecord prior to calling this function.
|
||
|
|
|
||
|
|
// hdmc Handle to the Galil controller.
|
||
|
|
// pchDataRecord Pointer to an array of CDMCFullDataRecord objects. CDMCFullDataRecord contains members
|
||
|
|
// for every possible item in a record. If a member doesn't apply to a given controller (such
|
||
|
|
// as axes 5-8 on a four axis controller) then these members must be disregarded.
|
||
|
|
// psNumDataRecords The number of data records contained in the data record array.
|
||
|
|
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#ifdef __cplusplus
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#endif // DMCCOM_H
|