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


#ifndef _link_unbalance_slave_ 
#define _link_unbalance_slave_ 
 
#include "typedef.h" 
#include "SerialComm.h" 
#define MAXLINKBUFF 256 
#define MAXSERIALBUFF 256 
 
#define STA_SLAVE_UNRESET				1 
	 
#define STA_RESET_EXEC					2 
	 
#define STA_LINKLAYER_AVAIL				3 
	 
#define STA_LINK_CALMING_SUPERVISORY	4 
	 
#define STA_EVAL_SENDNOREPLY				5 
	 
#define STA_EVAL_SENDCONFIRM				6 
	 
#define	STA_EVAL_REQRESPONSE			7 
		 
#define STA_WAIT_RESPONSE				8 
	 
#define STA_SLAVE_BUSY					9 
	 
#define STA_BUSY_CALMING_SUPERVISORY	10 
 
#define RESETLINKSTATUS					200 
#define CLASS1_DATA						101 
#define CLASS2_DATA						102 
#define ERROR_SENDNOREPLY				103 
 
#define REQ_SendConfirm				1	 
 
#define SRVTIME 50 
 
class AFX_EXT_CLASS CLink_unbalance_slave:public CSerialPort 
{ 
public: 
	virtual void On_init_Link_process(){}; 
	_int testtype; 
	_BYTE testtag; 
	_BYTE test_once; 
	_int  test_once_len; 
	_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(){On_RecvMsg(textLinkDnMsg,textLinkDnLen);}; 
	virtual void OnLinkUpRemark(){On_SendMsg(textLinkUpMsg,textLinkUpLen);}; 
 
	virtual void On_RecvMsg(_BYTE *msgbuf,_int len ){}; 
	virtual void On_SendMsg(_BYTE *msgbuf,_int len){}; 
 
 
	CLink_unbalance_slave(); 
	~CLink_unbalance_slave(); 
 
public: 
	void readlinkconfig(); 
	bool rxbuff_dealing_flag;// 0:idle    1:busy 
	 
	_int GetSizeofInput_buffer(); 
	_int GetSizeofOutput_buffer(); 
	 
 
	//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,_int type,_BYTE urgent);// 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 OnApplayer(_int type)=0; // 
	void StartASpp(_int type); // 
	_int LinkToApplayer(_BYTE *asbuff,_int asmaxlen,_int *type);// get msg from output_buffer , when exit outputbuff_available=0; 
	bool outputbuff_available;//0:unavailable   1:available 
	_WORD slave_addr; 
	_BYTE slave_addr_size; 
protected: 
//	void OnRxOneFrame(_BYTE *rxbuf,_int *rxlen); 
//	void readSerialConfig(); 
	bool InitLink(); 
	bool CloseLink(); 
	_DWORD dwStart; 
private: 
	 
	_int AStype; 
	static void link_thread(void *pp); 
	static void ASpp_thread(void *pp); 
//	void linkprocess(); 
	HANDLE	ASppEvent; 
	HANDLE link_handle; 
	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 Output_buffer[MAXLINKBUFF]; 
	_int Outlength; 
 
	_BYTE rxbuffer[MAXSERIALBUFF]; 
	_BYTE txbuffer[MAXSERIALBUFF]; 
	_int rxlength; 
	_int txlength; 
 
	void State_process(); 
	bool state_proc_flag; 
	void testLINKprocess(_BYTE *pbuf,_int *plen); 
 
	_int RxOneFrame(_BYTE *rxbuf,_int maxbuflen); 
	void DecodeFrame(_BYTE *rxbuf,_int rxlen); 
	_int TxOneFrame(_BYTE *txbuf,_int txlen); 
	_int EncodeFrame(_BYTE *txbuf); 
 
	void STA_SLAVE_UNRESET_moveto(); 
	 
	void STA_RESET_EXEC_moveto();					 
		 
	void STA_LINKLAYER_AVAIL_moveto();				 
		 
	void STA_LINK_CALMING_SUPERVISORY_moveto();	 
		 
	void STA_EVAL_SENDNOREPLY_moveto();			 
		 
	void STA_EVAL_SENDCONFIRM_moveto();			 
		 
	void STA_EVAL_REQRESPONSE_moveto();		 
			 
	void STA_WAIT_RESPONSE_moveto();			 
		 
	void STA_SLAVE_BUSY_moveto();				 
		 
	void STA_BUSY_CALMING_SUPERVISORY_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); 
}; 
#endif