📄 class.h
字号:
#ifndef _CLASS_H_
#define _CLASS_H_
#include "common.h"
class CWindows {
private:
char pageno;
char pagelineno;
char pagedotno;
keyin_buf_t keyin_buf;
public:
char mainmenuno; //set main menu item no to the first
char itemmenuno; //set sub menu item no to the first
char oldmainmenuno;
char olditemmenuno;
BOOLEAN item_flag; //if a menu is opened
BOOLEAN window_flag; //if a window is opened
BOOLEAN clr_brand_flag;
BOOLEAN siginput; // signal of input data
BOOLEAN sigcreat; // signal of create window
BOOLEAN sigcursor; // signal of cursor move
check_time_t check_time;
public:
void initial();
void DrawBackGround();
void PopSubMenu(INT8U menuno);
void ClrSubMenu(INT8U menuno);
void DrawMainMenu();
void MessageBox(INT8U *s);
void parakeyin(INT8U key);
void KeyDrop();
void ResetKeyBuf();
void DispKeyInput(INT8U x, INT8U y, INT8U len, INT8U color, BOOLEAN mask);
INT16U ProcessWord();
int ProcessInt();
void mainmenucheck();
void SubMenuCheck();
void mainenter();
void mainltarr();
void mainrtarr();
void mainuparr();
void maindnarr();
void mainesc();
void mainf2();
void mainf4();
void mainf5();
void mainf6();
void mainf7();
void mainf9();
void mainpgup();
void mainpgdn();
void scrollup(INT8U topx, INT8U topy, INT8U endx, INT8U endy);
void PassWindow(BOOLEAN *flag);
void WinMessage();
void SetMessage();
void hardset();
void winportset();
void datasourceset();
void protocolpar();
void doykopinfo();
void doykop();
void checktime();
void showwindow();
void boot_record();
void ycdefine();
void ymdefine();
void yxdefine();
void ykdefine();
void update_yx_info();
void update_yc_info();
void update_ym_info();
void update_port_info();
void yxinfo();
void ycinfo();
void yminfo();
void portinfo();
void boot_info();
void UpdatePopMenu();
void UpdateMainMenu();
void UpdateInfo();
void UpdateClock();
void UpdateWindow();
void between_check(INT16U small, INT16U big, INT16U *ret);
void between_check(INT8U small, INT8U big, INT8U *ret);
void between_check(int small, int big, int *ret);
void between_check(BOOLEAN *ret);
BOOLEAN IsPolling(INT8U portno);
};
class CYx {
private:
INT16U ioport;
BOOLEAN first_board_sample;
public:
void init();
void boardyxget();
void yxgetdeal();
};
class CYm {
private:
INT16U ioport;
BOOLEAN first_board_sample;
public:
void init();
INT8U Get8Ym(INT8U address, INT8U orderno);
void boardymget();
void ymdeal();
};
class CYc {
public:
INT16U ioport;
INT16U adport;
INT8U intno;
public:
void init();
void selectayc();
void startayc();
void ycdeal();
};
class CYk {
private:
INT16U ioport;
public:
void init();
BOOLEAN ykselect();
void boardyk();
void boardykreset();
void portyk();
void doyk();
};
// the base class of each protocol
class CProtocol {
public:
INT8U myportno;
public:
CProtocol() {}
CProtocol(INT8U portno);
~CProtocol() {}
int get_yc_dot(INT16U dotno);
INT16U get_yx_16dot(INT16U dotno);
INT32U get_ym_dot(INT16U dotno);
INT16U get_yx_dot(INT16U dotno);
void yx_update_db(INT16U dotno, INT16U value);
void yc_update_db(INT16U dotno, INT16U value);
void ym_update_db(INT16U dotno, INT32U value);
INT8U get_crc8_code(INT8U *buf, INT8U len);
INT16U get_crc16_code(INT8U *msg, INT8U len);
INT8U checksum(INT8U *buf, INT8U len);
void ProtocolProcessYX(int orderno, INT8U val);
virtual void deal() {};
virtual void master_send() {};
virtual void master_receive() {};
};
class CMasterProtocol: public CProtocol {
public:
INT16U *pyc_tbl;
INT16U *pyx_tbl;
INT16U *pym_tbl;
INT16U *pyk_tbl; // query table in this port
int yc_num;
int yx_num;
int ym_num;
int yk_num; // info amount in this port
public:
CMasterProtocol() {}
CMasterProtocol(INT8U portno);
~CMasterProtocol();
};
typedef enum QueryStatus_t {QUERY=0,ANSWER=1,BOARDCAST=2};
class CMasterPollingProtocol: public CMasterProtocol {
public:
INT8U DevStartAddr;
INT8U DevEndAddr;
QueryStatus_t QueryStatus;
INT8U rece_end;
INT8U *LINK_flag;
BOOLEAN *isLink;
INT8U *fail_count;
INT8U dev_num;
INT8U CurrentQueryAddr;
INT32U QueryGap;
INT32U GapTimer;
public:
CMasterPollingProtocol() {}
CMasterPollingProtocol(INT8U portno);
~CMasterPollingProtocol();
void SetQueryGap(INT32U TimerGap);
virtual void PreProcess() {}; // to do some works before query
void CommunicateProcess();
void deal();
};
class CNbb: public CProtocol {
public:
INT8U frame_count; // counting frame word send
INT8U packet_count; // counting packet word (6 byte) send
INT8U frame_type, frame_length;
BOOLEAN isFrameHead; // indicate send head or packet word
INT8U YxHead,YcHead,YmHead; // the leader function code
INT8U source_add, dest_add;
INT8U len_a, len_b, len_c, len_d1, len_d2, len_e;
INT8U FrameInsertNum; // insert frame length
BOOLEAN sync_flag, ControlFlag; // rece in sync flag
INT8U RecvIndex; // receive buf pointer index the free buf beginning
INT8U soe_count;
BOOLEAN soe_sending; // keep current sending soe because need 3 times
soe_record_t current_soe; // when preset err need to return a failure check
yk_preset_err_t yk_preset_err;
INT8U recbuf[NBB_RECE_BUFSIZE];
static const INT8U nbb_sync_code[6];
static const INT8U FRAME_A;
static const INT8U FRAME_B;
static const INT8U FRAME_C;
static const INT8U FRAME_D1;
static const INT8U FRAME_D2;
static const INT8U FRAME_E;
public:
CNbb() {};
CNbb(INT8U portno);
~CNbb() {};
public:
INT8U get_frame_type(INT8U count);
INT8U get_frame_length(INT8U type);
BOOLEAN PacketSend(INT8U type, INT8U length);
BOOLEAN FrameYCPacketSend(INT8U FrameType,INT8U length);
BOOLEAN FrameD1PacketSend(INT8U length);
BOOLEAN FrameD2PacketSend(INT8U length);
BOOLEAN FrameEPacketSend(INT8U length);
BOOLEAN FrameYCAssemble(INT8U *buf, INT8U length, INT8U FrameType);
BOOLEAN FrameD1Assemble(INT8U *buf, INT8U length);
BOOLEAN FrameD2Assemble(INT8U *buf, INT8U length);
BOOLEAN FrameEAssemble(INT8U *buf, INT8U length);
BOOLEAN BWPacketSend(INT8U FrameType, INT8U length);
BOOLEAN YkRetPacketSend(INT8U FrameType, INT8U length, BOOLEAN preset_noerr);
BOOLEAN isFrameOver(INT8U count, INT8U length);
BOOLEAN packet_crc_check(INT8U *ptr);
void yk_preset(INT8U *ptr);
void yk_cancel(INT8U *ptr);
void yk_execute(INT8U *ptr);
void time_setting(INT8U *ptr);
void identify_packet(INT8U *ptr);
void master_send();
void master_receive();
void deal();
};
class CDISA3: public CNbb {
public:
CDISA3() {};
CDISA3(INT8U portno);
~CDISA3() {};
public:
BOOLEAN FrameYCAssemble(INT8U *buf, INT8U length, INT8U FrameType);
BOOLEAN BWPacketSend(INT8U FrameType, INT8U length);
BOOLEAN YkRetPacketSend(INT8U FrameType, INT8U length, BOOLEAN preset_noerr);
BOOLEAN PacketSend(INT8U type, INT8U length);
BOOLEAN FrameYCPacketSend(INT8U FrameType,INT8U length);
void master_send();
void deal();
};
class CIec103M: public CMasterPollingProtocol {
public:
INT8U *FCB;
INT8U *ACDFlag; // class1 flag
BOOLEAN *isGI; // general interration indicate
INT8U *LastCommand; // record last command
INT16U send_cycle; // cycle counter
static const INT8U RESET_CU;
static const INT8U CALL_CLASS1;
static const INT8U CALL_CLASS2;
static const INT8U CALL_ALL;
public:
CIec103M() {};
CIec103M(INT8U portno);
~CIec103M() {};
public:
void master_receive();
void master_send();
void process_fixed(INT8U *buf);
void process_var(INT8U *buf);
void process_asdu1(INT8U *buf);
void process_asdu2(INT8U *buf);
void process_asdu9(INT8U *buf);
void process_asdu205(INT8U *buf);
void reset_cu();
void query_class1_data();
void query_class2_data();
void send_asdu6();
void send_asdu7();
void send_asdu20_yk();
void PreProcess();
};
class CDCModbus: public CMasterPollingProtocol {
public:
INT8U station_add; // this station address
INT8U send_add;
INT8U currentCMD; // current command indicate
INT8U askbuf[MODBUS_SEND_BUFSIZE];
INT8U recbuf[MODBUS_RECE_BUFSIZE];
INT8U dcmauchhi[256];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -