/****************************************************************************
** use1401.h
** Copyright (C) Cambridge Electronic Design Ltd, 1992-2010
** Authors: Paul Cox, Tim Bergel, Greg Smith
** See CVS for revisions.
**
** Because the size of a long is different between 32-bit and 64-bit on some
** systems, we avoid this in this interface.
****************************************************************************/
#ifndef __USE1401_H__
#define __USE1401_H__
#include "machine.h"

// Some definitions to make things compatible. If you want to use Use1401 directly
//  from a Windows program you should define U14_NOT_DLL, in which case you also
//  MUST make sure that your application startup code calls U14InitLib().
// DLL_USE1401 is defined when you are building the Use1401 dll, not otherwise.
#ifdef _IS_WINDOWS_
#ifndef U14_NOT_DLL
#ifdef DLL_USE1401
#define U14API(retType) retType DllExport __stdcall
#else
#define U14API(retType) retType DllImport __stdcall
#endif
#endif

#define U14ERRBASE -500
#define U14LONG long
#endif

#ifdef LINUX
#define U14ERRBASE -1000
#define U14LONG int
#endif

#ifdef _QT
#ifndef U14_NOT_DLL
#undef U14API
#define U14API(retType) retType __declspec(dllimport) __stdcall
#endif
#undef U14LONG
#define U14LONG int
#endif

#ifndef U14API
#define U14API(retType) retType
#endif

#ifndef U14LONG
#define U14LONG long
#endif

/// Error codes: We need them here as user space can see them.
#define U14ERR_NOERROR        0             // no problems

/// Device error codes, but these don't need to be extended - a succession is assumed
#define U14ERR_STD            4              // standard 1401 connected
#define U14ERR_U1401          5              // u1401 connected
#define U14ERR_PLUS           6              // 1401 plus connected
#define U14ERR_POWER          7              // Power1401 connected
#define U14ERR_U14012         8              // u1401 mkII connected
#define U14ERR_POWER2         9
#define U14ERR_U14013        10
#define U14ERR_POWER3        11

/// NBNB Error numbers need shifting as some linux error codes start at 512
#define U14ERR(n)             (n+U14ERRBASE)
#define U14ERR_OFF            U14ERR(0)      /* 1401 there but switched off    */
#define U14ERR_NC             U14ERR(-1)     /* 1401 not connected             */
#define U14ERR_ILL            U14ERR(-2)     /* if present it is ill           */
#define U14ERR_NOIF           U14ERR(-3)     /* I/F card missing               */
#define U14ERR_TIME           U14ERR(-4)     /* 1401 failed to come ready      */
#define U14ERR_BADSW          U14ERR(-5)     /* I/F card bad switches          */
#define U14ERR_PTIME          U14ERR(-6)     /* 1401plus failed to come ready  */
#define U14ERR_NOINT          U14ERR(-7)     /* couldn't grab the int vector   */
#define U14ERR_INUSE          U14ERR(-8)     /* 1401 is already in use         */
#define U14ERR_NODMA          U14ERR(-9)     /* couldn't get DMA channel       */
#define U14ERR_BADHAND        U14ERR(-10)    /* handle provided was bad        */
#define U14ERR_BAD1401NUM     U14ERR(-11)    /* 1401 number provided was bad   */

#define U14ERR_NO_SUCH_FN     U14ERR(-20)    /* no such function               */
#define U14ERR_NO_SUCH_SUBFN  U14ERR(-21)    /* no such sub function           */
#define U14ERR_NOOUT          U14ERR(-22)    /* no room in output buffer       */
#define U14ERR_NOIN           U14ERR(-23)    /* no input in buffer             */
#define U14ERR_STRLEN         U14ERR(-24)    /* string longer than buffer      */
#define U14ERR_ERR_STRLEN     U14ERR(-24)    /* string longer than buffer      */
#define U14ERR_LOCKFAIL       U14ERR(-25)    /* failed to lock memory          */
#define U14ERR_UNLOCKFAIL     U14ERR(-26)    /* failed to unlock memory        */
#define U14ERR_ALREADYSET     U14ERR(-27)    /* area already set up            */
#define U14ERR_NOTSET         U14ERR(-28)    /* area not set up                */
#define U14ERR_BADAREA        U14ERR(-29)    /* illegal area number            */
#define U14ERR_FAIL           U14ERR(-30)    /* we failed for some other reason*/

#define U14ERR_NOFILE         U14ERR(-40)    /* command file not found         */
#define U14ERR_READERR        U14ERR(-41)    /* error reading command file     */
#define U14ERR_UNKNOWN        U14ERR(-42)    /* unknown command                */
#define U14ERR_HOSTSPACE      U14ERR(-43)    /* not enough host space to load  */
#define U14ERR_LOCKERR        U14ERR(-44)    /* could not lock resource/command*/
#define U14ERR_CLOADERR       U14ERR(-45)    /* CLOAD command failed           */

#define U14ERR_TOXXXERR       U14ERR(-60)    /* tohost/1401 failed             */
#define U14ERR_NO386ENH       U14ERR(-80)    /* not 386 enhanced mode          */
#define U14ERR_NO1401DRIV     U14ERR(-81)    /* no device driver               */
#define U14ERR_DRIVTOOOLD     U14ERR(-82)    /* device driver too old          */

#define U14ERR_TIMEOUT        U14ERR(-90)    /* timeout occurred               */

#define U14ERR_BUFF_SMALL     U14ERR(-100)   /* buffer for getstring too small */
#define U14ERR_CBALREADY      U14ERR(-101)   /* there is already a callback    */
#define U14ERR_BADDEREG       U14ERR(-102)   /* bad parameter to deregcallback */
#define U14ERR_NOMEMORY       U14ERR(-103)   /* no memory for allocation       */

#define U14ERR_DRIVCOMMS      U14ERR(-110)   /* failed talking to driver       */
#define U14ERR_OUTOFMEMORY    U14ERR(-111)   /* needed memory and couldnt get it*/

/// 1401 type codes.
#define U14TYPE1401           0           /* standard 1401                  */
#define U14TYPEPLUS           1           /* 1401 plus                      */
#define U14TYPEU1401          2           /* u1401                          */
#define U14TYPEPOWER          3           /* power1401                      */
#define U14TYPEU14012         4           /* u1401 mk II                    */
#define U14TYPEPOWER2         5           /* power1401 mk II                */
#define U14TYPEU14013         6           /* u1401-3                        */
#define U14TYPEPOWER3         7           /* power1401-3                    */
#define U14TYPEUNKNOWN        -1          /* dont know                      */

/// Transfer flags to allow driver capabilities to be interrogated

/// Constants for transfer flags
#define U14TF_USEDMA          1           /* Transfer flag for use DMA      */
#define U14TF_MULTIA          2           /* Transfer flag for multi areas  */
#define U14TF_FIFO            4           /* for FIFO interface card        */
#define U14TF_USB2            8           /* for USB2 interface and 1401    */
#define U14TF_NOTIFY          16          /* for event notifications        */
#define U14TF_SHORT           32          /* for PCI can short cycle        */
#define U14TF_PCI2            64          /* for new PCI card 1401-70       */
#define U14TF_CIRCTH          128         /* Circular-mode to host          */
#define U14TF_DIAG            256         /* Diagnostics/debug functions    */
#define U14TF_CIRC14          512         /* Circular-mode to 1401          */

/// Definitions of element sizes for DMA transfers - to allow byte-swapping
#define ESZBYTES              0           /* BYTE element size value        */
#define ESZWORDS              1           /* WORD element size value        */
#define ESZLONGS              2           /* long element size value        */
#define ESZUNKNOWN            0           /* unknown element size value     */

/// These define required access types for the debug/diagnostics function
#define BYTE_SIZE             1           /* 8-bit access                   */
#define WORD_SIZE             2           /* 16-bit access                  */
#define LONG_SIZE             3           /* 32-bit access                  */

/// Stuff used by U14_GetTransfer
#define GET_TX_MAXENTRIES  257          /* (max length / page size + 1) */

#ifdef _IS_WINDOWS_
#pragma pack(1)

typedef struct                          /* used for U14_GetTransfer results */
{                                          /* Info on a single mapped block */
   U14LONG physical;
   U14LONG size;
} TXENTRY;

typedef struct TGetTxBlock              /* used for U14_GetTransfer results */
{                                               /* matches structure in VXD */
   U14LONG size;
   U14LONG linear;
   short   seg;
   short   reserved;
   short   avail;                      /* number of available entries */
   short   used;                       /* number of used entries */
   TXENTRY entries[GET_TX_MAXENTRIES];       /* Array of mapped block info */
} TGET_TX_BLOCK;

typedef TGET_TX_BLOCK *LPGET_TX_BLOCK;

#pragma pack()
#endif

#ifdef LINUX
typedef struct                          /* used for U14_GetTransfer results */
{                                       /* Info on a single mapped block */
   long long physical;
   long     size;
} TXENTRY;

typedef struct TGetTxBlock              /* used for U14_GetTransfer results */
{                                       /* matches structure in VXD */
   long long linear;                    /* linear address */
   long     size;                       /* total size of the mapped area, holds id when called */
   short    seg;                        /* segment of the address for Win16 */
   short    reserved;
   short    avail;                      /* number of available entries */
   short    used;                       /* number of used entries */
   TXENTRY  entries[GET_TX_MAXENTRIES]; /* Array of mapped block info */
} TGET_TX_BLOCK;
#endif

#ifdef __cplusplus
extern "C" {
#endif

U14API(int)   U14WhenToTimeOut(short hand);         // when to timeout in ms
U14API(short) U14PassedTime(int iTime);             // non-zero if iTime passed

U14API(short) U14LastErrCode(short hand);

U14API(short) U14Open1401(short n1401);
U14API(short) U14Close1401(short hand);
U14API(short) U14Reset1401(short hand);
U14API(short) U14ForceReset(short hand);
U14API(short) U14TypeOf1401(short hand);
U14API(short) U14NameOf1401(short hand, char* pBuf, WORD wMax);

U14API(short) U14Stat1401(short hand);
U14API(short) U14CharCount(short hand);
U14API(short) U14LineCount(short hand);

U14API(short) U14SendString(short hand, const char* pString);
U14API(short) U14GetString(short hand, char* pBuffer, WORD wMaxLen);
U14API(short) U14SendChar(short hand, char cChar);
U14API(short) U14GetChar(short hand, char* pcChar);

U14API(short) U14LdCmd(short hand, const char* command);
U14API(DWORD) U14Ld(short hand, const char* vl, const char* str);

U14API(short) U14SetTransArea(short hand, WORD wArea, void *pvBuff,
                                            DWORD dwLength, short eSz);
U14API(short) U14UnSetTransfer(short hand, WORD wArea);
U14API(short) U14SetTransferEvent(short hand, WORD wArea, BOOL bEvent,
                                  BOOL bToHost, DWORD dwStart, DWORD dwLength);
U14API(int)   U14TestTransferEvent(short hand, WORD wArea);
U14API(int)   U14WaitTransferEvent(short hand, WORD wArea, int msTimeOut);
U14API(short) U14GetTransfer(short hand, TGET_TX_BLOCK *pTransBlock);

U14API(short) U14ToHost(short hand, char* pAddrHost,DWORD dwSize,DWORD dw1401,
                                                            short eSz);
U14API(short) U14To1401(short hand, const char* pAddrHost,DWORD dwSize,DWORD dw1401,
                                                            short eSz);

U14API(short) U14SetCircular(short hand, WORD wArea, BOOL bToHost, void *pvBuff,
                                         DWORD dwLength);

U14API(int)   U14GetCircBlk(short hand, WORD wArea, DWORD *pdwOffs);
U14API(int)   U14FreeCircBlk(short hand, WORD wArea, DWORD dwOffs, DWORD dwSize,
                                         DWORD *pdwOffs);

U14API(short) U14StrToLongs(const char* pszBuff, U14LONG *palNums, short sMaxLongs);
U14API(short) U14LongsFrom1401(short hand, U14LONG *palBuff, short sMaxLongs);

U14API(void)  U14SetTimeout(short hand, int lTimeout);
U14API(int)   U14GetTimeout(short hand);
U14API(short) U14OutBufSpace(short hand);
U14API(int)   U14BaseAddr1401(short hand);
U14API(int)   U14DriverVersion(short hand);
U14API(int)   U14DriverType(short hand);
U14API(short) U14DriverName(short hand, char* pBuf, WORD wMax);
U14API(short) U14GetUserMemorySize(short hand, DWORD *pMemorySize);
U14API(short) U14KillIO1401(short hand);

U14API(short) U14BlkTransState(short hand);
U14API(short) U14StateOf1401(short hand);

U14API(short) U14Grab1401(short hand);
U14API(short) U14Free1401(short hand);
U14API(short) U14Peek1401(short hand, DWORD dwAddr, int nSize, int nRepeats);
U14API(short) U14Poke1401(short hand, DWORD dwAddr, DWORD dwValue, int nSize, int nRepeats);
U14API(short) U14Ramp1401(short hand, DWORD dwAddr, DWORD dwDef, DWORD dwEnable, int nSize, int nRepeats);
U14API(short) U14RampAddr(short hand, DWORD dwDef, DWORD dwEnable, int nSize, int nRepeats);
U14API(short) U14StopDebugLoop(short hand);
U14API(short) U14GetDebugData(short hand, U14LONG *plValue);

U14API(short) U14StartSelfTest(short hand);
U14API(short) U14CheckSelfTest(short hand, U14LONG *pData);
U14API(short) U14TransferFlags(short hand);
U14API(void)  U14GetErrorString(short nErr, char* pStr, WORD wMax);
U14API(int)   U14MonitorRev(short hand);
U14API(void)  U14CloseAll(void);

U14API(short) U14WorkingSet(DWORD dwMinKb, DWORD dwMaxKb);
U14API(int)   U14InitLib(void);

#ifdef __cplusplus
}
#endif

#endif /* End of ifndef __USE1401_H__ */
