/* DPR.H Header file for PMAC Dual Ported RAM communications.
|
|
HISTORY:
|
|
03Aug98 JET Added *_DPR_BASE definitions, added PmacDPRAddressRange() decl.
|
23Jan98 EBL Add TURBO PMAC changes
|
24May94 DES Removed bit defines, changed to bit fields.
|
18Nov92 DES Created
|
***************************************************************************/
|
#include "DPRRealT.h"
|
#include "DPRBkg.h"
|
#ifndef _DPR_H
|
#define _DPR_H
|
|
#define PMAC_DPR_BASE 0xD000
|
#define TURBO_DPR_BASE 0x60000
|
#define UMAC_DPR_BASE 0x6C000
|
|
#define RETRY 5
|
#define MAXAOUT 160 // ASCII interface max output string length
|
#define MAXAIN 256 // ASCII interface max input string length
|
#define MAX_VBGBUF_USERS 9 // Maximum number of vbg data buffer users
|
|
typedef enum { stop, run, step, hold, joghold, jogstop } PROGRAM;
|
typedef enum { inpos, jog, running, homing, handle, openloop, disabled } MOTION;
|
typedef enum { linear, rapid, circw, circcw, spline, pvt } MOTIONMODE;
|
|
typedef void (FAR WINAPI * DPRTESTMSGPROC) ( LONG NumErrors, LPTSTR action, LONG CURRENT_OFFSET );
|
typedef void (FAR WINAPI * DPRTESTPROGRESS) ( LONG Percent );
|
|
// Return codes for PmacDPRrotput()
|
|
#define RET_ERROR -1 // Internal Rotary Buffer has zero size, or conversion error
|
#define RET_BUSY 1 // Could not load Command Array into DPR Rotary Buffer
|
#define RET_OKAY 0 // Loaded Command Array into DPR Rotary Buffer
|
|
///////////////////////////////////////////////////////////////////////////
|
// Dual Ported RAM structure
|
//
|
|
// Control Panel ----------------------------------------------------------
|
struct cpanec { // cpanel motor/coord request structure
|
|
USHORT spare : 8; // place holder
|
USHORT jogminus : 1; // jog minus ( motor only )
|
USHORT jogplus : 1; // jog plus ( motor only )
|
USHORT jogreturn : 1; // jog return ( motor only )
|
USHORT start : 1; // start program ( coord only )
|
USHORT step : 1; // step program ( coord only )
|
USHORT stop : 1; // abort program ( coord only )
|
USHORT home : 1; // home motor ( motor only )
|
USHORT hold : 1; // hold program ( coord only )
|
};
|
|
struct cpanem { // cpanel motor/coord structure
|
|
struct cpanec request; // Y:$D001 motor/coord request
|
USHORT feedpot; // X:$D001 feed pot override
|
};
|
|
struct cpane {
|
|
USHORT request1 : 1; // Y:$D000:B0 enable coord/motor 1
|
USHORT request2 : 1; // Y:$D000:B1 enable coord/motor 2
|
USHORT request3 : 1; // Y:$D000:B2 enable coord/motor 3
|
USHORT request4 : 1; // Y:$D000:B3 enable coord/motor 4
|
USHORT request5 : 1; // Y:$D000:B4 enable coord/motor 5
|
USHORT request6 : 1; // Y:$D000:B5 enable coord/motor 6
|
USHORT request7 : 1; // Y:$D000:B6 enable coord/motor 7
|
USHORT request8 : 1; // Y:$D000:B7 enable coord/motor 8
|
USHORT notused : 8; // Y:$D000:B8-B15 place holder
|
USHORT feedoverride; // X:$D000 reserved for feedpot override
|
struct cpanem mtrcrd[8 ]; // $D001 - $D008 for 8 coord/motor
|
};
|
|
|
///////////////////////////////////////////////////////////////////////////
|
// ASCII Interface Structure ----------------------------------------------
|
///////////////////////////////////////////////////////////////////////////
|
struct ascii {
|
USHORT sendready : 1; // Y:$D18B($603A7) output control word
|
USHORT pad : 15;
|
USHORT ctrlchar; // X:$D18B control character
|
char outstr[MAXAOUT ]; // $D18C - $D1B3 output string buffer
|
USHORT instatus; // Y:$D1B4($603D0) input control word
|
USHORT charcount; // X:$D1B4 input character count
|
char instr[MAXAIN ]; // $D1B5 - $D1F4 input string buffer
|
};
|
|
///////////////////////////////////////////////////////////////////////////
|
// ROT BUFFER Interface Structure
|
|
struct rotbuf {
|
USHORT roterr : 8; // Y:$D1FC Error codes
|
USHORT spare0 : 6;
|
USHORT busy : 1; // Y:$D1FC Internal Rotary buffer full
|
USHORT error : 1; // Y:$D1FC Error Flag
|
USHORT coord; // X:$D1FC coordinate system
|
USHORT hostindex; // Y:$D1FD Host Index to Rotary Buffer
|
USHORT pmacindex; // X:$D1FD PMAC Index to Rotary Buffer
|
USHORT bufsize; // Y:$D1FE Size of rotary buffer
|
USHORT bufstart; // X:$D1FE buffer start / TURBO = offset from fixed buf
|
};
|
|
///////////////////////////////////////////////////////////////////////////
|
// DATA GATHER Interface Structure
|
|
struct gatbuf {
|
USHORT bufsize; // Y:$D1FF Size of rotary buffer
|
USHORT bufstart; // X:$D1FF buffer start index
|
};
|
|
//////////////////////////////////////////////////////////////////////////
|
// Functions
|
#ifdef __cplusplus
|
extern "C" {
|
#endif
|
|
void _cdecl DPRLock( DWORD dwDevice );
|
void _cdecl DPRUnlock( DWORD dwDevice );
|
|
VOID SaveConfiguration( DWORD dwDevice );
|
DWORD GetDPRAMAddress( DWORD dwDevice );
|
BOOL ConfigureDPRAM( DWORD dwDevice, DWORD dwDPRBaseAddress );
|
BOOL CardHasMem( DWORD dwDevice );
|
LONG CALLBACK PmacDPRTest();
|
void _cdecl DPRTestThread( PCHAR dummy );
|
void CALLBACK PmacAbortDPRTest( void );
|
void CALLBACK PmacDPRStatus( DWORD dwDevice, UINT * comm, UINT * bg, UINT * bgv,
|
UINT * rt, UINT * cp, UINT * rot );
|
BOOL CALLBACK PmacDPRAvailable( DWORD dwDevice );
|
|
// Numeric read/write functions
|
PVOID CALLBACK PmacDPRGetMem( DWORD dwDevice, DWORD offset, size_t count, PVOID val );
|
PVOID CALLBACK PmacDPRSetMem( DWORD dwDevice, DWORD offset, size_t count, PVOID val );
|
BOOL CALLBACK PmacDPRGetMemBits( DWORD dwDevice, DWORD offset, UINT startbit,UINT width, PDWORD val );
|
BOOL CALLBACK PmacDPRSetMemBits( DWORD dwDevice, DWORD offset, UINT startbit,UINT width, DWORD val );
|
BOOL CALLBACK PmacDPRGetMemBit( DWORD dwDevice, DWORD offset, UINT bit, PBOOL val );
|
BOOL CALLBACK PmacDPRSetMemBit( DWORD dwDevice, DWORD offset, UINT bit, BOOL val );
|
BOOL CALLBACK PmacDPRDWordBitSet( DWORD dwDevice, UINT offset, UINT bit );
|
void CALLBACK PmacDPRSetDWordBit( DWORD dwDevice, UINT offset, UINT bit );
|
void CALLBACK PmacDPRResetDWordBit( DWORD dwDevice, UINT offset, UINT bit );
|
WORD CALLBACK PmacDPRGetWord( DWORD dwDevice, UINT offset );
|
void CALLBACK PmacDPRSetWord( DWORD dwDevice, UINT offset, WORD val );
|
DWORD CALLBACK PmacDPRGetDWord( DWORD dwDevice, UINT offset );
|
void CALLBACK PmacDPRSetDWord( DWORD dwDevice, UINT offset, DWORD val );
|
float CALLBACK PmacDPRGetFloat( DWORD dwDevice, UINT offset );
|
void CALLBACK PmacDPRSetFloat( DWORD dwDevice, UINT offset, double val );
|
void CALLBACK PmacDPRSetDWordMask( DWORD dwDevice, UINT offset, DWORD val, BOOL onoff );
|
DWORD CALLBACK PmacDPRGetDWordMask( DWORD dwDevice, UINT offset, DWORD val );
|
|
double CALLBACK PmacDPRFloat( long d[], double scale );
|
double CALLBACK PmacDPRLFixed( long d[], double scale );
|
|
double CALLBACK PmacDPRVelocity( DWORD dwDevice, int mtr, double units );
|
double CALLBACK PmacDPRVectorVelocity( DWORD dwDevice, int num, int mtr[], double units[] );
|
|
void CALLBACK PmacDPRSetMotors( DWORD dwDevice, UINT n );
|
|
// Function pertaining to global status
|
void CALLBACK PmacDPRGetGlobalStatus(DWORD dwDevice,VOID *gstatus);
|
void CALLBACK PmacDPRGetGlobalStatusTurbo(DWORD dwDevice,struct gsTURBO *turbogstatus);
|
|
BOOL CALLBACK PmacDPRMotionBufOpen( DWORD dwDevice );
|
BOOL CALLBACK PmacDPRRotBufOpen( DWORD dwDevice );
|
BOOL CALLBACK PmacDPRSysServoError( DWORD dwDevice );
|
BOOL CALLBACK PmacDPRSysReEntryError( DWORD dwDevice );
|
BOOL CALLBACK PmacDPRSysMemChecksumError( DWORD dwDevice );
|
BOOL CALLBACK PmacDPRSysPromChecksumError( DWORD dwDevice );
|
|
|
// Functions pertaining to individual motors
|
// Background-Functions pertaining to individual motors
|
BOOL CALLBACK PmacDPRAmpEnabled( DWORD dwDevice, int mtr );
|
BOOL CALLBACK PmacDPRWarnFError( DWORD dwDevice, int mtr );
|
BOOL CALLBACK PmacDPRFatalFError( DWORD dwDevice, int mtr );
|
BOOL CALLBACK PmacDPRAmpFault( DWORD dwDevice, int mtr );
|
BOOL CALLBACK PmacDPROnPositionLimit( DWORD dwDevice, int mtr );
|
BOOL CALLBACK PmacDPRHomeComplete( DWORD dwDevice, int mtr );
|
BOOL CALLBACK PmacDPRInposition( DWORD dwDevice, int mtr );
|
double CALLBACK PmacDPRGetTargetPos( DWORD dwDevice, int motor, double posscale );
|
double CALLBACK PmacDPRGetBiasPos( DWORD dwDevice, int motor, double posscale );
|
long CALLBACK PmacDPRTimeRemInMove( DWORD dwDevice, int cs );
|
long CALLBACK PmacDPRTimeRemInTATS( DWORD dwDevice, int cs );
|
DWORD CALLBACK PmacDPRGetAssignedCoord(DWORD dwDevice, int mtr ,DWORD bWaitForUpdate);
|
DWORD CALLBACK PmacDPRIsAssignedCoord(DWORD dwDevice, int mtr ,DWORD bWaitForUpdate);
|
|
// Logical query functions
|
PROGRAM CALLBACK PmacDPRGetProgramMode( DWORD dwDevice, int csn );
|
MOTIONMODE CALLBACK PmacDPRGetMotionMode( DWORD dwDevice, int csn );
|
|
////////////////////////////////////////////////////////////////////////////
|
// DPR Control Panel functions
|
////////////////////////////////////////////////////////////////////////////
|
BOOL CALLBACK PmacDPRControlPanel( DWORD dwDevice, long on );
|
void CALLBACK PmacDPRSetJogPosBit( DWORD dwDevice, long motor, long onoff );
|
long CALLBACK PmacDPRGetJogPosBit( DWORD dwDevice, long motor );
|
void CALLBACK PmacDPRSetJogNegBit( DWORD dwDevice, long motor, long onoff );
|
long CALLBACK PmacDPRGetJogNegBit( DWORD dwDevice, long motor );
|
void CALLBACK PmacDPRSetJogReturnBit( DWORD dwDevice, long motor, long onoff );
|
long CALLBACK PmacDPRGetJogReturnBit( DWORD dwDevice, long motor );
|
void CALLBACK PmacDPRSetRunBit( DWORD dwDevice, long cs, long onoff );
|
long CALLBACK PmacDPRGetRunBit( DWORD dwDevice, long cs );
|
void CALLBACK PmacDPRSetStopBit( DWORD dwDevice, long cs, long onoff );
|
long CALLBACK PmacDPRGetStopBit( DWORD dwDevice, long cs );
|
void CALLBACK PmacDPRSetHomeBit( DWORD dwDevice, long cs, long onoff );
|
long CALLBACK PmacDPRGetHomeBit( DWORD dwDevice, long cs );
|
void CALLBACK PmacDPRSetHoldBit( DWORD dwDevice, long cs, long onoff );
|
long CALLBACK PmacDPRGetHoldBit( DWORD dwDevice, long cs );
|
long CALLBACK PmacDPRGetStepBit( DWORD dwDevice, long cs );
|
void CALLBACK PmacDPRSetStepBit( DWORD dwDevice, long cs, long onoff );
|
long CALLBACK PmacDPRGetRequestBit( DWORD dwDevice, long mtrcrd );
|
void CALLBACK PmacDPRSetRequestBit( DWORD dwDevice, long mtrcrd, long onoff );
|
long CALLBACK PmacDPRGetFOEnableBit( DWORD dwDevice, long cs );
|
void CALLBACK PmacDPRSetFOEnableBit( DWORD dwDevice, long cs, long on_off );
|
void CALLBACK PmacDPRSetFOValue( DWORD dwDevice, long cs, long value );
|
long CALLBACK PmacDPRGetFOValue( DWORD dwDevice, long cs );
|
|
|
////////////////////////////////////////////////////////////////////////////
|
// Uses both Realtime and background features
|
////////////////////////////////////////////////////////////////////////////
|
MOTION CALLBACK PmacDPRGetMotorMotion( DWORD dwDevice, int mtr );
|
double CALLBACK PmacDPRGetFeedRateMode( DWORD dwDevice, int csn, BOOL * mode );
|
BOOL CALLBACK PmacDPRFixedBufferDataUpdate( DWORD dwDevice );
|
|
////////////////////////////////////////////////////////////////////////////
|
// ASCII FUNCTIONS
|
////////////////////////////////////////////////////////////////////////////
|
BOOL CALLBACK PmacDPRComm( DWORD dwDevice, BOOL on );
|
BOOL CALLBACK PmacDPRReadReady( DWORD dwDevice );
|
void CALLBACK PmacDPRFlush( DWORD dwDevice );
|
|
int CALLBACK PmacDPRSendLineA( DWORD dwDevice, PCHAR outchar );
|
int CALLBACK PmacDPRSendCharA( DWORD dwDevice, CHAR outstr );
|
int CALLBACK PmacDPRSendCtrlCharA( DWORD dwDevice, CHAR outstr );
|
int CALLBACK PmacDPRGetLineA( DWORD dwDevice, PCHAR linebuf, UINT maxchar, PUINT nc );
|
int CALLBACK PmacDPRGetBufferA( DWORD dwDevice, PCHAR s, UINT maxchar, PUINT nc );
|
int CALLBACK PmacDPRGetControlResponseA( DWORD dwDevice, PCHAR s, UINT maxchar, CHAR outchar );
|
int CALLBACK PmacDPRGetResponseA( DWORD dwDevice, PCHAR s, UINT maxchar, PCHAR outstr );
|
void CALLBACK PmacDPRSendCommandA( DWORD dwDevice, PCHAR outchar );
|
|
int CALLBACK PmacDPRSendLineW( DWORD dwDevice, PWCHAR outchar );
|
int CALLBACK PmacDPRSendCharW( DWORD dwDevice, WCHAR outstr );
|
int CALLBACK PmacDPRSendCtrlCharW( DWORD dwDevice, WCHAR outstr );
|
int CALLBACK PmacDPRGetLineW( DWORD dwDevice, PWCHAR linebuf, UINT maxchar, PUINT nc );
|
int CALLBACK PmacDPRGetBufferW( DWORD dwDevice, PWCHAR s, UINT maxchar, PUINT nc );
|
int CALLBACK PmacDPRGetControlResponseW( DWORD dwDevice, PWCHAR s, UINT maxchar, WCHAR outchar );
|
int CALLBACK PmacDPRGetResponseW( DWORD dwDevice, PWCHAR s, UINT maxchar, PWCHAR outstr );
|
void CALLBACK PmacDPRSendCommandW( DWORD dwDevice, PWCHAR outchar );
|
long CALLBACK PmacDPRAddressRange( DWORD dwDevice, BOOL Upper, BOOL PC_offsets );
|
|
#ifdef __cplusplus
|
}
|
#endif
|
|
#ifdef UNICODE
|
#define PmacDPRSendLine PmacDPRSendLineW
|
#define PmacDPRSendChar PmacDPRSendCharW
|
#define PmacDPRSendCtrlChar PmacDPRSendCtrlCharW
|
#define PmacDPRWaitGetLine PmacDPRWaitGetLineW
|
#define PmacDPRGetLine PmacDPRGetLineW
|
#define PmacDPRGetResponse PmacDPRGetResponseW
|
#define PmacDPRGetControlResponse PmacDPRGetControlResponseW
|
#define PmacDPRSendCommand PmacDPRSendCommandW
|
#else
|
#define PmacDPRSendLine PmacDPRSendLineA
|
#define PmacDPRSendChar PmacDPRSendCharA
|
#define PmacDPRSendCtrlChar PmacDPRSendCtrlCharA
|
#define PmacDPRWaitGetLine PmacDPRWaitGetLineA
|
#define PmacDPRGetLine PmacDPRGetLineA
|
#define PmacDPRGetResponse PmacDPRGetResponseA
|
#define PmacDPRGetControlResponse PmacDPRGetControlResponseA
|
#define PmacDPRSendCommand PmacDPRSendCommandA
|
#endif // !UNICODE
|
|
#endif
|