www.pudn.com > Lib870-5Demo.rar > Link_unbalance_master.h


#ifndef _link_unbalance_master_ 
#define _link_unbalance_master_ 
 
#include "typedef.h" 
#include "stdafx.h" 
#define MAXLINKBUFF 256 
#define MAXSERIALBUFF 256 
 
#define STAM_LINKRESET		1 
#define STAM_WAITFORREQ		2 
#define STAM_EXREQLINK		3 
#define STAM_EXRESETLINK	4 
#define STAM_SLAVELINKAVAIL 5 
#define STAM_EXREQRES		6 
#define STAM_SENDCON		7 
 
#define SENDNOREPLY	1 
#define SENDCONFIRM 2 
//#define TrpMax				3 
#define BROAD_ADDR  0xffff 
#define ServCON		printf  
#define ServIND		printf  
#include "stdafx.h" 
class CUnBalServer; 
class AFX_EXT_CLASS CLink_unbalance_master 
{ 
 
public: 
	_int staNo; 
	_BYTE slave_running_status;	 
	_char curdir[128]; 
	HANDLE dirmutex; 
	_BYTE Servtype; 
	_int Servlength; 
	_BYTE Servbuf[256]; 
	bool Trpflag; 
	_int TrpMax; 
	_int Trpcount; 
 
	HANDLE Txevent; 
	HANDLE Rxevent; 
	bool reqTxflag; 
	CUnBalServer *portserver; 
	_BYTE textLinkUpMsg[256]; 
	_BYTE textLinkDnMsg[256]; 
	_int textLinkUpLen; 
	_int textLinkDnLen; 
	void printLinkDnMsg(_BYTE *sour,_int len); 
	void printLinkUpMsg(_BYTE *sour,_int len); 
	_char textLinkUpRemark[128]; 
	_char textLinkDnRemark[128]; 
	void printLinkDnRemark(_BYTE func); 
	void printLinkUpRemark(_BYTE func,_BYTE tACD,_BYTE tDFC); 
	virtual void OnLinkDnRemark(){}; 
	virtual void OnLinkUpRemark(){}; 
 
 
 
	CLink_unbalance_master(); 
	~CLink_unbalance_master(); 
 
public: 
	void readlinkconfig(); 
	bool rxbuff_dealing_flag;// 0:idle    1:busy 
	 
	_int GetSizeofInput_buffer(); 
	_int GetSizeofOutput_buffer(); 
	 
	void GetInputData(); 
	//Copy ASDU msg to the Input_buffer 
	// When exit ,inputbuff_available=0; 
	// if urgent equ 1 then ACD=1; 
	void ApplayerToLink(_BYTE *asbuff,_int aslen,_BYTE asType=SENDCONFIRM);// put msg into input_buffer 
 
	bool inputbuff_available;//0:unavailable   1:available 
	 
//	bool GetLinkerDecodeMsgRemark(_char * string); 
//	bool GetLinkerEncodeMsgRemark(_char * string); 
 
	//The class inherited from this class, 
	virtual void OnApplyer(_int type); // 
	//void StartASpp(_int type); // 
	_int LinkToApplayer(_BYTE *asbuff,_int asmaxlen);// get msg from output_buffer , when exit outputbuff_available=0; 
	bool outputbuff_available;//0:unavailable   1:available 
public: 
//	void OnRxOneFrame(_BYTE *rxbuf,_int *rxlen); 
//	void readSerialConfig(); 
	bool InitLink(); 
	bool CloseLink(); 
	_WORD slave_addr; 
	_BYTE slave_addr_size; 
	_DWORD dwStart; 
	HANDLE link_handle; 
private: 
	 
	//_int AStype; 
	static void link_thread(void *pp); 
	//static void ASpp_thread(void *pp); 
//	void linkprocess(); 
	//HANDLE	ASppEvent; 
	 
	//HANDLE ASpp_handle; 
 
	///////////////DecodeFrame() or EncodeFrame() 
	//////////////////////////////////////////////////////// 
	_BYTE rxDIR,txDIR; 
	_BYTE rxPRM,txPRM; 
	_BYTE FCB,ACD,FCBtoggle;// 
	_BYTE FCV,DFC; 
	_BYTE rxfunc,txfunc; 
	_BYTE frame_error; 
	//////////////////////////////////////////////////////// 
 
	_int state; 
 
	_BYTE Input_buffer[MAXLINKBUFF]; 
	_int Inlength; 
	_BYTE InType; 
 
	_BYTE Output_buffer[MAXLINKBUFF]; 
	_int Outlength; 
public: 
	_BYTE rxbuffer[MAXSERIALBUFF]; 
	_BYTE txbuffer[MAXSERIALBUFF]; 
	_int rxlength; 
	_int txlength; 
private: 
	void State_process(); 
	bool state_proc_flag; 
	_int RxOneFrame(_BYTE *rxbuf,_int maxbuflen); 
	void DecodeFrame(_BYTE *rxbuf,_int rxlen); 
	_int DecodeFrameServ(_BYTE *rxbuf,_int rxlen); 
	_int TxOneFrame(_BYTE *txbuf,_int txlen); 
	_int EncodeFrame(_BYTE *txbuf); 
	_int EncodeFrameServ(_BYTE *destbuf,_BYTE *inputbuf,_int inputlen); 
 
		void	STAM_LINKRESET_moveto(); 
 
		void	STAM_WAITFORREQ_moveto(); 
 
		void	STAM_EXREQLINK_moveto(); 
 
		void	STAM_EXRESETLINK_moveto(); 
			 
		void	STAM_SLAVELINKAVAIL_moveto(); 
			 
		void	STAM_EXREQRES_moveto(); 
		void	STAM_SENDCON_moveto(); 
	 
	//when enter, rxbuff_dealing_flag=1; 
	//when exit, rxbuff_dealing_flag=0 outputbuff_available=1; 
	//make output_buffer full of msg 
	// rxbuffer(msg: linker+ASDU)===>Output_buffer(msg: ASDU) 
	//_int IND_decodeApplayer(_BYTE *rxbuf,_int rxlen); 
	 
	 
	 
	//when enter 
	//when exit,  inputbuff_available=1; 
	//make output_buffer full of msg 
	//Input_buffer(msg: ASDU)===>txbuffer(msg: linker+ ASDU) 
	//_int REQ_encodeApplayer(_BYTE *inputbuf,_int inputlen);//when enter, rxbuff_dealing_flag=1;when exit, rxbuff_dealing_flag=0 
	 
	_WORD GetlinkAddr(_BYTE *buf); 
	_int SetlinkAddr(_BYTE *buf,_WORD addr); 
	_int GetSizeoflinkaddr(); 
	void DetectHead(_BYTE *Rxbuf,_int &Rxlen); 
	_BYTE verify(_BYTE *buffer, _int length); 
	_int make_shortframe(_BYTE *txbuf,_BYTE only_shortframe=1); 
	_int make_longframe(_BYTE *txbuf,BYTE *inputbuf,_int inputlen); 
}; 
#endif