#include <cvidef.h>

#define USBDLL_H
	// Lizensierungsdaten für AN21xx.DLL V3.9
	//#define USB_DLL_ID		""
	//#define USB_DLL_KEYWORD 	""

	// Lizensierungsdaten für AN21xx.DLL V4.0 und 4.1
	#define USB_DLL_ID		""
	#define USB_DLL_KEYWORD ""

	#define USB_DLL_DRIVER	 "EZUSB" 
	#define USB_DLL_AN21XX	"AN21XX.dll" 
	#define USB_DLL_INTERFACE	"USB_Interface.dll" 
	#define USB_DEVICE_NUMBER	(BYTE)0

	typedef unsigned char BYTE;
	typedef unsigned short WORD;
	typedef const char* LPCSTR;
	typedef const char* LPCSTR;
	typedef long LONG;
  
  
typedef struct

	{
    BYTE bLength; 
    BYTE bDescriptorType;
    LONG bcdUSB;
    BYTE bDeviceClass;
    BYTE bDeviceSubClass;
    BYTE bDeviceProtocol;
    BYTE bMaxPacketSize0;
    LONG idVendor;
    LONG idProduct;
    LONG bcdDevice;
    BYTE iManufacturer;
    BYTE iProduct;
    BYTE iSerialNumber;
    BYTE bNumConfigurations;
} TUSB_DEVICE_DESCRIPTOR;
  
  
#define		Pin0	(BYTE)0x01
#define		Pin1	(BYTE)0x02
#define		Pin2	(BYTE)0x04
#define		Pin3	(BYTE)0x08
#define		Pin4	(BYTE)0x10
#define		Pin5	(BYTE)0x20
#define		Pin6	(BYTE)0x40
#define		Pin7	(BYTE)0x80



// Konstanten für die EEPROM-Funktionen, Parameter: BYTE EEPType
// EEP_WriteByte(), EEP_WriteBlock(), EEP_ReadByte(), EEP_ReadBlock()
#define		C00 	(BYTE)0
#define		C01 	(BYTE)1
#define		C02 	(BYTE)2
#define		C04 	(BYTE)3
#define		C08 	(BYTE)4
#define		C16 	(BYTE)5
#define		C32 	(BYTE)6
#define		C64 	(BYTE)7
#define		C128	(BYTE)8
#define		C256	(BYTE)9

#define PortA 0
#define PortB 1
#define PortC 2



#define IMode_1 1
#define IMode_2 2
#define IMode_3 3 // Not possible with AN 2131
#define IMode_4 4 // Not possible with AN 2131 
#define IMode_5 5 
#define IMode_6 6 

int  __declspec(dllexport) __stdcall  GetDeviceError (BYTE DevNumber);
int  __declspec(dllexport) __stdcall  OpenDevice(BYTE DevNumber, char * DriverName, char * ID, char * KeyWord);
int  __declspec(dllexport) __stdcall  IsOpened(BYTE DevNumber);
int  __declspec(dllexport) __stdcall  SetBootEEP(BYTE DevNumber, BYTE EEPType, BYTE Addr, WORD DeviceID);
int  __declspec(dllexport) __stdcall  SetDeviceEnabled(BYTE DevNumber, BYTE MC_Mode);
int  __declspec(dllexport) __stdcall  IsEnabled(BYTE DevNumber, BYTE *MC_Mode);
int  __declspec(dllexport) __stdcall  CloseDevice(BYTE DevNumber);
int  __declspec(dllexport) __stdcall  CloseAllDevices(void);
int  __declspec(dllexport) __stdcall  SetPortDir(BYTE DevNumber,int Port, BYTE value);
int  __declspec(dllexport) __stdcall  SetPortPin(BYTE DevNumber,int Port, BYTE Pin);
BYTE  __declspec(dllexport) __stdcall ReadPortPin(BYTE DevNumber,int Port, BYTE Pin);
int  __declspec(dllexport) __stdcall  ClearPortPin(BYTE DevNumber,int Port, BYTE Pin);
int  __declspec(dllexport) __stdcall  SetPort(BYTE DevNumber,int Port, BYTE PortValue);
BYTE __declspec(dllexport) __stdcall  ReadPort(BYTE DevNumber,int Port);
int  __declspec(dllexport) __stdcall  GetDeviceID(BYTE DevNumber,WORD *VID, WORD *PID, WORD *DID);
int  __declspec(dllexport) __stdcall  PB_WriteByte(BYTE DevNumber,BYTE Addr, BYTE DByte);
int  __declspec(dllexport) __stdcall  PB_WriteBlock(BYTE DevNumber,BYTE Addr, BYTE *BArray, DWORD ByteCnt);
int  __declspec(dllexport) __stdcall  PB_WriteBlockInc(BYTE DevNumber,BYTE Addr, BYTE *BArray, DWORD ByteCnt);
BYTE __declspec(dllexport) __stdcall  PB_ReadByte(BYTE DevNumber,BYTE Addr);
int  __declspec(dllexport) __stdcall  PB_ReadBlock(BYTE DevNumber,BYTE Addr, BYTE *BArray, DWORD ByteCnt);
int  __declspec(dllexport) __stdcall  PB_ReadBlockInc(BYTE DevNumber,BYTE Addr, BYTE *BArray, DWORD ByteCnt);
int  __declspec(dllexport) __stdcall  I2C_WriteByte(BYTE DevNumber,BYTE Addr, BYTE DByte);
int  __declspec(dllexport) __stdcall  I2C_WriteBlock(BYTE DevNumber,BYTE Addr, BYTE *BArray, DWORD ByteCnt);
BYTE __declspec(dllexport) __stdcall  I2C_ReadByte(BYTE DevNumber,BYTE Addr);
int  __declspec(dllexport) __stdcall  I2C_ReadBlock(BYTE DevNumber,BYTE Addr, BYTE *BArray, DWORD ByteCnt);
int  __declspec(dllexport) __stdcall  EEP_WriteByte(BYTE DevNumber,BYTE EEPType, BYTE Addr, DWORD EEPointer, BYTE DByte);
int  __declspec(dllexport) __stdcall  EEP_WriteBlock(BYTE DevNumber,BYTE EEPType, BYTE Addr, DWORD EEPointer, BYTE *BArray, DWORD ByteCnt);
BYTE __declspec(dllexport) __stdcall  EEP_ReadByte(BYTE DevNumber,BYTE EEPType, BYTE Addr, DWORD EEPointer);
int  __declspec(dllexport) __stdcall  EEP_ReadBlock(BYTE DevNumber,BYTE EEPType, BYTE Addr, DWORD EEPointer, BYTE *BArray, DWORD ByteCnt);
int  __declspec(dllexport) __stdcall  RAM_WriteByte(BYTE DevNumber,WORD Addr, BYTE WrValue);
int  __declspec(dllexport) __stdcall  RAM_WriteBlock(BYTE DevNumber,WORD Addr, BYTE *BArray, DWORD ByteCnt);
BYTE __declspec(dllexport) __stdcall  RAM_ReadByte(BYTE DevNumber,WORD Addr);
int  __declspec(dllexport) __stdcall  RAM_ReadBlock(BYTE DevNumber,WORD Addr, BYTE *BArray, DWORD ByteCnt);
int  __declspec(dllexport) __stdcall  SetInterface(BYTE DevNumber,BYTE InterfaceNumber, BYTE Setting);
int  __declspec(dllexport) __stdcall  AbortPipe(BYTE DevNumber,DWORD PipeNumber);
int  __declspec(dllexport) __stdcall  ResetPipe(BYTE DevNumber,DWORD PipeNumber);
int  __declspec(dllexport) __stdcall  DownloadBinFile(BYTE DevNumber,LPCSTR FileName);
int  __declspec(dllexport) __stdcall  DownloadHexFile(BYTE DevNumber,LPCSTR FileName);
int  __declspec(dllexport) __stdcall  WriteBulkData(BYTE DevNumber,WORD PipeNumber, BYTE *BArray, WORD ByteCnt);
int  __declspec(dllexport) __stdcall  ReadBulkData(BYTE DevNumber,WORD PipeNumber, BYTE *BArray, WORD ByteCnt);
int  __declspec(dllexport) __stdcall  ReOpen(void); //added
int  __declspec(dllexport) __stdcall  CloseLib(void); // added
int  __declspec(dllexport) __stdcall  SetClockDelay (BYTE DevNumber, BYTE Delay);
int  __declspec(dllexport) __stdcall  GetDeviceDescriptor (BYTE DevNumber,TUSB_DEVICE_DESCRIPTOR *usbDD);
int  __declspec(dllexport) __stdcall  SetCallBackHandle (BYTE IntNumber,LONG *pInterrupt);
int  __declspec(dllexport) __stdcall  SetInterrupt (BYTE DevNumber,BYTE IntNum,BYTE STATE);
int  __declspec(dllexport) __stdcall  SetRefreshTime (LONG RefreshTime);
