.h#include <windows.h>
#ifndef CMLINKNT
#define CMLINKNT
                          
typedef struct SRSConf
{
	char		device[5];			
	long		baudrate;			
	int                      parity;					
             int		stop;				
	int		car;				
} RSCONF;
typedef struct STcpipPar
{
	char		ClientIpAddr[20];	
	int		PortNumber;			
	int		TimerValue;			
	int		Encription;				char                    CertificateName[80];
} TCPIPPAR;
typedef struct _ConnectionParam
{
	char		ConnectionMode;			
             RSCONF		pRsConf;			
	TCPIPPAR	TcpIpConf;			
} CONNECTIONPARAM;
#define DLINK_MODE_SERIAL	   'S'	  
#define DLINK_MODE_SERIAL_EASY 's'	  
#define DLINK_MODE_TCPIP       'L'	  
#define DLINK_MODE_USB	       'U'	  
#define DLINK_MODE_EMULATION   'E'	  
#define WM_EXECUTE_COMPLETE				WM_USER+1017     
//----------API Return code-----------------------------------------------------
#define CM_OK                           1		
#define CM24_TABCONFULL                 1401   
#define CM24_SYSTEMERR                  1402   
#define CM24_SEQUENCEERR                1403   
#define CM24_PARAMERR                   1404   
#define CM24_CMDFAILED                  1405   
#define CM24_CFGFILENOTFOUND            1406   
#define CM24_RCUNKNOW                   1407   
#define CM24_CONNECTFAILED              1408   
#define CM24_DISCONNECTFAILED           1409   
#define CM24_CONNECREFUSED              1410   
#define CM24_SYNTAXERROR				1412   
#define CM_SYNTAXERROR					1413  
#define CM_UNEXPECTEDREPLY				1414
#define CM_OUTPUTOVERFLOW				1415
#define CM24_FWFILENOTFOUND             1451  
#define CM24_FWFILEERR                  1452   
#define CM_SYSTEM_ERR					1001
#define CM_CONNECTION_ERR				1002
#define CM_ALREADY_CONNECTED_ERR		1003
#define CM_PARAMETERS_ERR				1004
#define	CM_WRITE_ERR					1005
#define	CM_LAN_WRITE_ERR				1006
#define	CM_TIMEOUT_ERR					1007
#define	CM_OVERFLOW_ERR					1008
#define	CM_READ_ERR						1009
#define	CM_LAN_OPEN_ERR					1010
#define	CM_HCONNECT_UNAVAILABLE			1011
#define	CM_LAN_READ_ERR					1012
#define	CM_BCC_ERR						1013
#define	CM_PROTOCOL_ERR					1014
#define CM_CDM_IN_PROGRESS				1015
#define LEN_PASSWORD		 6
#define CM_SINGLE_CONNECTION 0xFFFF
#define CM_DEF_TIMEOUT		 0xFFFF
#define MAX_SLOT_ACTIVE		 4
#define MAX_FLASH_REF		 16
#define MAX_CASSETTES		 10
#define MAX_DELAYCLASS		 10
#define MAX_USERID			 10
#define MAX_MODULE			 20
#define MAX_CHARDENOM		 4
#define MAX_CHANNEL			 32
#define MAX_DEPOSIT			 200
#define MAX_DENOMINATION	 32
#define MAX_BOOKING			 29
#define OPEN								'O'
#define CLOSE								'C'
#define EXTENDED_STATUS						'E'
#define GET_CASH_DATA						'G'
#define TEST				                'T'
#define TRASPARENT							'#'
#define TRASPARENT_START		           	'X'
#define TRASPARENT_END          			'Y'
#define DEPOSIT				          		'D'
#define WITHDRAWAL							'W'
#define GET_CONFIG							'R'
#define MOD_FILL							'Z'
#define FILL								'F'
#define UNDO								'U'
#define INIT								'I'
typedef struct _InpOpTest 
{
	CHAR  Module; 
	WORD  Type;
	LPVOID ExInfo;
} INPUT_OP_TEST,INPUT_OP_MOD_FILL;
typedef struct _InpOpFill 
{
	WORD  Type;
	LPVOID ExInfo;
} INPUT_OP_FILL;
typedef struct _OpTrasp 
{
	char*  Buff; 
	WORD  Size; 
} IO_TRASP; 
//********************* Open								
typedef struct IOpen 
{
	CHAR  Side; 
	CHAR  Password[LEN_PASSWORD+1]; 
	WORD* Opt;
} INPUT_OP_OPEN; 
typedef struct OOpen 
{
	CHAR  Side;
	CHAR  FwVersion[MAX_CHARDENOM+1];
	WORD  Rc; 
} OUT_OP_OPEN; 
//********************* Open
//********************* Close								
typedef struct _IClose 
{
	CHAR  Side; 
} INPUT_OP_CLOSE; 
typedef struct _OClose 
{
	CHAR  Side; 
	WORD  Rc; 
} OUT_OP_CLOSE; 
//********************* Close
								
//******************************** GetCashData								
typedef struct _InfoCassettes 
{
	CHAR	Denom[MAX_CHARDENOM+1];
	WORD	NotesNum;
	WORD	NumFree;
	CHAR	Cassette;
	CHAR	Enable;	
} INFOCASSETTES; 
typedef struct _IGetCashData 
{
	CHAR  Side; 
} INPUT_OP_GETCASH; 
typedef struct _OGetCashData 
{
	CHAR			Side;
	WORD			NumItem;	
	INFOCASSETTES	Info[MAX_CASSETTES*MAX_CHANNEL];
	WORD			Rc; 
} OUT_OP_GETCASH; 
//******************************** GetCashData								
//******************************** Deposit								
typedef struct _InfoNotes 
{
	CHAR	Denom[MAX_CHARDENOM+1];
	WORD	Num;
} INFONOTES;
typedef struct _IDeposit 
{
	CHAR	Side;
	WORD	Mode;
	CHAR	Denom[MAX_CHARDENOM+1];
} INPUT_OP_DEPOSIT;
typedef struct _ODeposit 
{
	CHAR				Side;
	WORD				aaa;
	WORD				rrr;
	WORD				uuu;
	WORD				NumItem;
	INFONOTES			DepNote[MAX_CASSETTES*MAX_CHANNEL];
	WORD				Rc; 
} OUT_OP_DEPOSIT; 
//******************************** Deposit								
//******************************** Withdrawal								
typedef struct _IWithdrawal 
{
	CHAR		Side;
	WORD		NumItem;	
	INFONOTES	Info[MAX_CASSETTES];
} INPUT_OP_WITHDRAW;
typedef struct _OWithdrawal 
{
	CHAR		Side;
	WORD		NumItem;	
	INFONOTES	Info[MAX_CASSETTES];
	WORD		Rc; 
} OUT_OP_WITHDRAW; 
//******************************** Withdrawal								
//******************************** Extended-Status								
typedef struct _InfoErr 
{
	CHAR	err[4];
} INFOERR; 
typedef struct _OutExStatus 
{
	WORD			NumItem;
	INFOERR			Info[MAX_MODULE];
	WORD			Rc; 
} OUT_OP_EXSTATUS; 
//******************************** Extended-Status								
//******************************** GetConfig								
typedef struct _CassDenom 
{
	CHAR	Denom[MAX_CHARDENOM+1];
} CASSDENOM; 
typedef struct _CassEnable 
{
	CHAR	Enable;
} CASSENABLE; 
typedef struct _IGetConfig 
{
	CHAR			Side;
	WORD*			Bank;
} INPUT_OP_GETCONFIG; 
typedef struct _Config 
{
	CHAR			Denom[MAX_CHARDENOM+1];				
	CHAR			Version[MAX_CHARDENOM+1];
	WORD			Height;
	CHAR			Enable;			
	CASSENABLE		CassEnable[MAX_CASSETTES];
} CONFIGINFO; 
typedef struct _OGetConfig 
{
	CHAR			Side;
	WORD			Bank;
	CASSDENOM		CassDenom[MAX_CASSETTES];
	CONFIGINFO		ConfigInfo[MAX_CHANNEL];
	WORD			NumItem;	
	WORD			Msg;				
	WORD			Rc; 
} OUT_OP_GETCONFIG; 
//******************************** GetConfig								
//******************************** Test								
 
typedef struct _OTn0_8 
{
	BOOL SafeDoor;
	BOOL TryCassette;
	BOOL Cover;
	BOOL Feeder;
	BOOL InputSlot;
	BOOL RejectSlot;
	BOOL LeftSlot;
	BOOL RightSlot;
	BOOL LeftExtButton;
	BOOL RightExtButton;
	WORD Rc; 
} OUT_OP_Tn0_8;
typedef struct _ITn0_35 
{
	CHAR  Nation[MAX_CHARDENOM+1];
	CHAR* Side;
} INPUT_OP_Tn0_35;
typedef struct _OTn0_35 
{
	WORD		NumItem;	
	INFONOTES  Info[MAX_CASSETTES];
	WORD		Rc; 
} OUT_OP_Tn0_35;
typedef struct _ITn2_2 
{
	CHAR  Side; 
	CHAR  Password[LEN_PASSWORD+1]; 
} INPUT_OP_Tn2_2;
typedef struct _Status
{
	CHAR Cassette;
	CHAR SideEnab;
	WORD SwitchStatus;
	CHAR Err[4];
	CHAR Denom[MAX_CHARDENOM+1];
	WORD NumNotes;
	WORD CapacityFree;
}  SAFE_STATUS;
typedef struct _OTn2_2 
{
	CHAR		Side; 
	WORD		NumItem;	
	SAFE_STATUS Info[MAX_CASSETTES];
	WORD		Rc; 
} OUT_OP_Tn2_2;
typedef struct _ITn6_60 
{
	WORD	nn;
	LPVOID  Ext;
} INPUT_OP_Tn6_60;
typedef struct _OTn6_60 
{
	WORD  Port;
	WORD  Rc; 
} OUT_OP_Tn6_60;
typedef struct Tn3_0 
{
	WORD  IdChannel; 
	WORD  IdChannelInUse; 
	WORD  Rc; 
} OUT_OP_Tn3_0;
typedef struct _Currencies 
{
	CHAR	Cur_name[3]; 
	WORD	Numslot;
	CHAR	Ena;
} CURRENCIES; 
typedef struct Tn3_1 
{
	WORD		NumCurr;
	CURRENCIES  CurrInUse[MAX_FLASH_REF]; 
	WORD		Rc; 
} OUT_OP_Tn3_1; 
 
typedef struct Tn3_3 
{
	WORD  Act_slt;
	WORD  Rc; 
} OUT_OP_Tn3_3; 
typedef struct _Slot 
{
	char	Ref_name[3]; 
	CHAR	Ena;
} SLOT; 
typedef struct Tn3_4 
{
	WORD	NumSlot;
	SLOT	SlotInUse[MAX_SLOT_ACTIVE]; 
	WORD	Rc; 
} OUT_OP_Tn3_4; 
typedef struct _References 
{
	char  Ref_name[3]; 
	char  Ref_ver [5];
	WORD  BankId;
} REFERENCES; 
typedef struct Tn3_5 
{
	WORD		NumRef;
	REFERENCES  RefInFlash[MAX_FLASH_REF]; 
	WORD  Rc; 
} OUT_OP_Tn3_5; 
typedef struct Tn3_9 
{
	WORD	NumSlot;
	WORD	DspFlash[MAX_SLOT_ACTIVE];
	WORD	Rc; 
} OUT_OP_Tn3_9; 
typedef struct Tn0_1 
{
	CHAR  ProtInterface[5]; 
	WORD  Rc; 
} OUT_OP_Tn0_1; 
typedef struct Tn0_4 
{
	WORD  FeedTick; 
	WORD  FeedHigh; 
	WORD  FeedVertical; 
	WORD  Reserved; 
	WORD  ReadVisible; 
	WORD  ReadIrw; 
	WORD  ReadLen; 
	WORD  ReadIrf; 
	WORD  ReadMag; 
	WORD  ReadAux; 
	WORD  Rc; 
} OUT_OP_Tn0_4; 
typedef struct Tn0_9 
{
	CHAR  Code[7];
	WORD  Rc; 
} OUT_OP_Tn0_9; 
typedef struct Tn0_11 
{
	WORD		NumItem;
	INFONOTES	Notes[MAX_SLOT_ACTIVE * MAX_DENOMINATION]; 
	WORD  Rc; 
} OUT_OP_Tn0_11; 
typedef struct Tn0_15 
{
	CHAR  BitNotation[5]; 
	WORD  Rc; 
} OUT_OP_Tn0_15, OUT_OP_Tn0_28; 
typedef struct Tn0_17 
{
	WORD  Rc; 
} OUT_OP_Tn0_17,OUT_OP_Tn0_18,OUT_OP_Tn0_19,OUT_OP_T  n0_27; 
typedef struct _ITn0_19 
{
	WORD  Flag;
} INPUT_OP_Tn0_19;
typedef struct T_Class
{
	WORD  amount; 
	WORD  delay; 
}CLASS;
typedef struct Tn0_21 
{
	WORD   fd; 
	WORD   NumItem; 
	CLASS  DelayClass[MAX_DELAYCLASS]; 
	WORD  Rc; 
} OUT_OP_Tn0_21; 
typedef struct Tn0_22 
{
	WORD  day; 
	WORD  hour1; 
	WORD  min1; 
	WORD  hour2; 
	WORD  min2; 
	WORD  lunch_hour1; 
	WORD  lunch_min1; 
	WORD  lunch_hour2; 
	WORD  lunch_min2; 
	WORD  Rc; 
} OUT_OP_Tn0_22; 
typedef struct _ITn0_25 
{
	WORD  day; 
	WORD  month; 
	WORD  year; 
} INPUT_OP_Tn0_25;
typedef struct Tn0_25 
{
	WORD  day; 
	WORD  month; 
	WORD  year; 
	WORD  hour1; 
	WORD  min1; 
	WORD  hour2; 
	WORD  min2; 
	WORD  lunch_hour1; 
	WORD  lunch_min1; 
	WORD  lunch_hour2; 
	WORD  lunch_min2; 
	WORD  Rc; 
} OUT_OP_Tn0_25;
 
typedef struct _ITn0_27 
{
	CHAR  Side;
	WORD  cass_num;
} INPUT_OP_Tn0_27;
typedef struct TnX_13 
{
	CHAR  Name[5]; 
	CHAR  Ver[5]; 
	CHAR  Rel[5]; 
	CHAR  SerialNumber[13]; 
	WORD  Rc; 
} OUT_OP_TnX_13; 
typedef struct Tn0_31 
{
	DWORD  WithdrLimit; 
	WORD  Rc; 
} OUT_OP_Tn0_31; 
//******************************** Test	
//******************************** Fill
typedef struct _IFn4 
{
	CHAR   cc[2]; 
	CHAR   ss[2]; 
	CHAR   mm[2]; 
	CHAR   hh[2]; 
	CHAR   ww[2]; 
	CHAR   DD[2]; 
	CHAR   MM[2]; 
	CHAR   YY[2]; 
} INPUT_OP_Fn4;
							
//******************************** Fill							
							
//******************************** ModFill
typedef struct _IZn0_2 
{
	WORD   fd; 
	WORD   NumItem; 
	CLASS  DelayClass[MAX_DELAYCLASS]; 
} INPUT_OP_Zn0_2;
							
//******************************** ModFill							
//******************************** Booking							
typedef struct _IZn0_11 
{
	CHAR		Id_User[MAX_USERID+1];
	WORD		Id_Op;
	WORD		NumItem;
	INFONOTES	Info[MAX_CASSETTES];
} INPUT_OP_Zn0_11;
typedef struct _OZn0_11 
{
	CHAR  Id_User[MAX_USERID+1];
	WORD  Index;
	CHAR  ss[2]; 
	CHAR  mm[2]; 
	CHAR  hh[2]; 
	CHAR  DD[2]; 
	CHAR  MM[2]; 
	CHAR  YY[2]; 
	WORD  Rc; 
} OUT_OP_Zn0_11;
typedef struct _IZn0_12 
{
	CHAR		Id_User[MAX_USERID+1];
	WORD		Index;
} INPUT_OP_Zn0_12,INPUT_OP_Zn0_20;
typedef struct _OZn0_14 
{
	WORD		NumItem;
	INFONOTES	Info[MAX_CASSETTES];
	WORD  Rc; 
} OUT_OP_Zn0_14,OUT_OP_Zn0_20;
typedef struct _OZn0_18 
{
	WORD		Index;
	CHAR		Id_User[MAX_USERID+1];
	WORD		Id_Op;
	WORD		NumItem;
	INFONOTES	Info[MAX_CASSETTES];
	CHAR  ss[2]; 
	CHAR  mm[2]; 
	CHAR  hh[2]; 
	CHAR  DD[2]; 
	CHAR  MM[2]; 
	CHAR  YY[2];
	WORD  Status;
	CHAR  Side;
	WORD  Rc; 
} OUT_OP_Zn0_18;
typedef struct _IZn0_19 
{
	WORD		Index;
	WORD		Status;
} INPUT_OP_Zn0_19;
typedef struct _OZn0_19 
{
	WORD  PrevStatus;
	WORD  Rc; 
} OUT_OP_Zn0_19;
typedef struct _IUndo 
{
	CHAR		Side;
	WORD		Mode;
} INPUT_OP_UNDO;
typedef struct _OUndo 
{
	CHAR		Side;
	WORD		NumItem;
	INFONOTES	Info[MAX_CASSETTES*MAX_CHANNEL];
	WORD  Rc; 
} OUT_OP_UNDO;
typedef struct _IInitMode 
{
	WORD	Inote;
	WORD*	Bundle;
}INIT_MODE;
typedef struct _IInit 
{
	CHAR	Side;
	CHAR	Denom[MAX_CHARDENOM+1];
	CHAR	Password[LEN_PASSWORD+1]; 
	INIT_MODE*	Mode;
} INPUT_OP_INIT;
typedef struct _OInit 
{
	CHAR	Side;
	CHAR	Denom[MAX_CHARDENOM+1];
	WORD	ms;
	WORD	NumPhysical;
	WORD	NumLogical;
	WORD	Rc; 
} OUT_OP_INIT;
#ifdef __cplusplus
extern "C" {
#endif
	WORD APIENTRY CMCommand_Connect (WORD*,CONNECTIONPARAM*);
	WORD APIENTRY CMCommand_Disconnect (WORD);
	WORD APIENTRY CMCommand_Execute (WORD,CHAR, LPVOID, LPVOID, DWORD);
	WORD APIENTRY CMCommand_AsyncExecute (WORD,HWND, CHAR, LPVOID,LPVOID, DWORD);
	WORD APIENTRY CMCommand_AsyncGetResult (WORD,LPVOID);
	WORD APIENTRY CMCommand_ChangeConnect (WORD ,CONNECTIONPARAM* );
#ifdef __cplusplus
}
#endif
#endif   /* CMLINKNT */