/* use14_ioc.h ** definitions of use1401 module stuff that is shared between use1401 and the driver. ** Copyright (C) Cambridge Electronic Design Limited 2010 ** Author Greg P Smith ************************************************************************************/ #ifndef __USE14_IOC_H__ #define __USE14_IOC_H__ #define MAX_TRANSAREAS 8 /* The number of transfer areas supported by driver */ #define i386 #include "winioctl.h" /* needed so we can access driver */ /* ** Defines for IOCTL functions to ask driver to perform. These must be matched ** in both use1401 and in the driver. The IOCTL code contains a command ** identifier, plus other information about the device, the type of access ** with which the file must have been opened, and the type of buffering. ** The IOCTL function codes from 0x80 to 0xFF are for developer use. */ #define FILE_DEVICE_CED1401 0x8001 #define FNNUMBASE 0x800 #define U14_OPEN1401 CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_CLOSE1401 CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+1, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_SENDSTRING CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+2, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_RESET1401 CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+3, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_GETCHAR CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+4, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_SENDCHAR CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+5, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_STAT1401 CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+6, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_LINECOUNT CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+7, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_GETSTRING CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+8, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_REGCALLBACK CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+9, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_GETMONITORBUF CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+10, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_SETTRANSFER CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+11, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_UNSETTRANSFER CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+12, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_SETTRANSEVENT CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+13, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_GETOUTBUFSPACE CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+14, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_GETBASEADDRESS CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+15, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_GETDRIVERREVISION CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+16, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_GETTRANSFER CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+17, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_KILLIO1401 CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+18, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_BLKTRANSSTATE CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+19, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_BYTECOUNT CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+20, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_ZEROBLOCKCOUNT CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+21, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_STOPCIRCULAR CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+22, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_STATEOF1401 CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+23, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_REGISTERS1401 CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+24, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_GRAB1401 CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+25, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_FREE1401 CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+26, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_STEP1401 CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+27, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_SET1401REGISTERS CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+28, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_STEPTILL1401 CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+29, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_SETORIN CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+30, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_STARTSELFTEST CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+31, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_CHECKSELFTEST CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+32, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_TYPEOF1401 CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+33, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_TRANSFERFLAGS CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+34, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_DBGPEEK CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+35, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_DBGPOKE CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+36, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_DBGRAMPDATA CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+37, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_DBGRAMPADDR CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+38, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_DBGGETDATA CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+39, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_DBGSTOPLOOP CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+40, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_FULLRESET CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+41, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_SETCIRCULAR CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+42, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_GETCIRCBLK CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+43, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define U14_FREECIRCBLK CTL_CODE( FILE_DEVICE_CED1401, \ FNNUMBASE+44, \ METHOD_BUFFERED, \ FILE_ANY_ACCESS) //--------------- Structures that are shared with the driver ------------- #pragma pack(1) typedef struct /* used for get/set standard 1401 registers */ { short sPC; char A; char X; char Y; char stat; char rubbish; } T1401REGISTERS; typedef union /* to communicate with 1401 driver status & control funcs */ { char chrs[22]; short ints[11]; long longs[5]; T1401REGISTERS registers; } TCSBLOCK; typedef TCSBLOCK* LPTCSBLOCK; typedef struct paramBlk { short sState; TCSBLOCK csBlock; } PARAMBLK; typedef PARAMBLK* PPARAMBLK; typedef struct TransferDesc /* Structure and type for SetTransArea */ { WORD wArea; /* number of transfer area to set up */ void FAR * lpvBuff; /* address of transfer area */ DWORD dwLength; /* length of area to set up */ short eSize; /* size to move (for swapping on MAC) */ } TRANSFERDESC; typedef TRANSFERDESC FAR * LPTRANSFERDESC; /* This is the structure used to set up a transfer area */ typedef struct VXTransferDesc /* use1401.c and use1432x.x use only */ { WORD wArea; /* number of transfer area to set up */ WORD wAddrSel; /* 16 bit selector for area */ DWORD dwAddrOfs; /* 32 bit offset for area start */ DWORD dwLength; /* length of area to set up */ } VXTRANSFERDESC; #pragma pack() #endif