⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 manage.c

📁 包括EPA协议栈
💻 C
字号:
#include "tcpip.h"
#include <string.h>
#define MANAGE_GLOBALS
#include "epa.h"
#undef MANAGE_GLOBALS
#include "manage.h"
#include "variable.h"
#include "mib.h"
#include "cs.h"
#include "macro.h"

void Find_Tag_Query_Output(uint8 type, VisualString pd_tag, VisualString fb_tag, uint16 element) {
 	PSock psock;

	psock = GetSock(PROTOCOL_EPA_FB, LEN_FINDTAGQUERY, EPA_PORT, BCInetAddr(gDefNI), gDefNI);
	
	psock->payload[0] = type;
	psock->payload[1] = EPA_RESERVED_VALUE;
	psock->payload[2] = EPA_RESERVED_VALUE;
	psock->payload[3] = EPA_RESERVED_VALUE;
	
	switch (type) {
		case QT_PDTAG:	
			memcpy(psock->payload + 4, pd_tag, VISUAL_STRING_LEN);
			memcpy(psock->payload + 4 + VISUAL_STRING_LEN, fb_tag, VISUAL_STRING_LEN);
			h2n16(element, psock->payload + (4 + 2 * VISUAL_STRING_LEN));
			break;
		case QT_FBTAG:
		case QT_ELEMENTID:
		default:
			break;
	}
	
	EPAOutput(psock, EMS_FINDTAGQUERY, EPA_COM_TYPE, EPA_MSG_ID);	 	
} 

void Find_Tag_Query_Input(PSock psock, uint8 com_type, uint16 msg_id) {
	uint8 type;
	VisualString  pdtag;
	VisualString  fbtag;
	uint16 element;
	 
	uint8 detected = FALSE;
    
	type = psock->payload[0];
	memcpy(pdtag, psock->payload + 4, VISUAL_STRING_LEN);
 	memcpy(fbtag, psock->payload + 4 + VISUAL_STRING_LEN, VISUAL_STRING_LEN);
	n2h16(psock->payload + (4 + 2 * VISUAL_STRING_LEN), &element);
	PutSock(psock);

	if(memcmp(pdtag, gdev_des.pd_tag, VISUAL_STRING_LEN)) {
		detected = TRUE;
	}

	switch (type) {
		case QT_PDTAG:	
			Find_Tag_Reply_Output(type, detected, msg_id, psock->dst_port, psock->src_ip); 
			break;
		default:
			break;
	}
}

void Find_Tag_Reply_Output(uint8 type, uint8 detected, uint16 msg_id, uint16 dst_port, uint32 dst_ip) {
	PSock psock;

	psock = GetSock(PROTOCOL_EPA_FB, LEN_FINDTAGREPLY, dst_port, dst_ip, NISelect(dst_ip));
	
	psock->payload[0] = type;
	psock->payload[1] = detected;
 	psock->payload[2] = EPA_RESERVED_VALUE;
 	psock->payload[3] = EPA_RESERVED_VALUE;
	h2n32(gdev_des.act_ip, psock->payload + 4);
	memcpy(psock->payload + 8, gdev_des.dev_id, VISUAL_STRING_LEN);
	memcpy(psock->payload + 8 + VISUAL_STRING_LEN, gdev_des.pd_tag, VISUAL_STRING_LEN);
	
	EPAOutput(psock, EMS_FINDTAGREPLY, EPA_COM_TYPE, msg_id);	 	
}

void Find_Tag_Reply_Input(PSock psock, uint8 com_type, uint16 msg_id) {	
	PutSock(psock);
}

void Get_Attrib_Output(uint32 dst_ip) {
	PSock psock;

	psock = GetSock(PROTOCOL_EPA_FB, LEN_GETATTRIB, EPA_PORT, dst_ip, NISelect(dst_ip));
	 
	h2n32(dst_ip, psock->payload);	

	EPAOutput(psock, EMS_GETATTRIB, EPA_COM_TYPE, EPA_MSG_ID);	 	
}

void Get_Attrib_Input(PSock psock, uint8 com_type, uint16 msgid) {
	uint32 ip;
	
	n2h32(psock->payload, &ip);
	if(gnitbl[0].ip == ip) {
		Get_Attrib_Pos_Output(msgid, psock->src_port, psock->src_ip);
	}
	else {
		Get_Attrib_Neg_Output(1, 1, 1, msgid, psock->src_port, psock->src_ip);
	}
		                                                      
	PutSock(psock);
}		

void Get_Attrib_Pos_Output(uint16 msg_id, uint16 dst_port, uint32 dst_ip) {	
	PSock psock;

	psock = GetSock(PROTOCOL_EPA_FB, LEN_GETATTRIB_POS, dst_port, dst_ip, NISelect(dst_ip)); 

	memcpy(psock->payload, gdev_des.dev_id, VISUAL_STRING_LEN);
	memcpy(psock->payload + VISUAL_STRING_LEN, gdev_des.pd_tag, VISUAL_STRING_LEN);
	psock->payload[2 * VISUAL_STRING_LEN] = gdev_des.status;
	psock->payload[1 + 2 * VISUAL_STRING_LEN] = gdev_des.dev_type;
	h2n16(gdev_des.ann_interval, psock->payload + (2 + 2 * VISUAL_STRING_LEN));
	h2n16(gdev_des.ann_ver, psock->payload + (4 + 2 * VISUAL_STRING_LEN));
	psock->payload[6 + 2 * VISUAL_STRING_LEN] = gdev_des.dup_tag_detected;
	psock->payload[7 + 2 * VISUAL_STRING_LEN] = gdev_des.dev_r_num;
	h2n16(gdev_des.lan_r_port, psock->payload + (8 + 2 * VISUAL_STRING_LEN));
	psock->payload[10 + 2 * VISUAL_STRING_LEN] = gdev_des.dev_r_state;
	psock->payload[11 + 2 * VISUAL_STRING_LEN] = gdev_des.max_r_num;
	psock->payload[12 + 2 * VISUAL_STRING_LEN] = EPA_RESERVED_VALUE;
	psock->payload[13 + 2 * VISUAL_STRING_LEN] = EPA_RESERVED_VALUE;
	h2n32(gdev_des.act_ip, psock->payload + 78);
    
	EPAOutput(psock, EMS_GETATTRIB_POS, EPA_COM_TYPE, msg_id);	 	
}

void Get_Attrib_Pos_Input(PSock psock, uint8 com_type, uint16 msg_id) {
	PutSock(psock); 
}

void Get_Attrib_Neg_Output(uint8 err_class, uint8 err_code, uint8 add_code, uint16 msg_id, uint16 dst_port, uint32 dst_ip) {	
	PSock psock;

	psock = GetSock(PROTOCOL_EPA_FB, LEN_GETATTRIB_NEG, dst_port, dst_ip, NISelect(dst_ip));

	h2n32(gdev_des.act_ip, psock->payload);
	psock->payload[4] = err_class;
	psock->payload[5] = err_code;
	psock->payload[6] = add_code;
	psock->payload[7] = EPA_RESERVED_VALUE;
	memcpy(psock->payload + 8, &gErr_Des[err_class][err_code], VISUAL_STRING_LEN);

	EPAOutput(psock, EMS_GETATTRIB_NEG, EPA_COM_TYPE, msg_id);	 	
}

void Get_Attrib_Neg_Input(PSock psock, uint8 com_type, uint16 msg_id) {
	PutSock(psock); 
}

void Ann_Output() {	 
	PSock psock;

	psock = GetSock(PROTOCOL_EPA_FB, LEN_ANNUNCIATION, EPA_PORT, BCInetAddr(gDefNI), gDefNI);
	
	memcpy(psock->payload, gdev_des.dev_id, VISUAL_STRING_LEN);
	memcpy(psock->payload + VISUAL_STRING_LEN, gdev_des.pd_tag, VISUAL_STRING_LEN);
	psock->payload[2 * VISUAL_STRING_LEN] = gdev_des.status;
	psock->payload[1 + 2 * VISUAL_STRING_LEN] = gdev_des.dev_type;
	h2n16(gdev_des.ann_ver, psock->payload + (2 + 2 * VISUAL_STRING_LEN));
	psock->payload[4 + 2 * VISUAL_STRING_LEN] = gdev_des.dev_r_num;
	psock->payload[5 + 2 * VISUAL_STRING_LEN] = gdev_des.dev_r_state;
	h2n16(gdev_des.lan_r_port, psock->payload + (6 + 2 * VISUAL_STRING_LEN));
	psock->payload[8 + 2 * VISUAL_STRING_LEN] = gdev_des.dup_tag_detected;
	psock->payload[9 + 2 * VISUAL_STRING_LEN] = EPA_RESERVED_VALUE;
	psock->payload[10 + 2 * VISUAL_STRING_LEN] = EPA_RESERVED_VALUE;
	psock->payload[11 + 2 * VISUAL_STRING_LEN] = gdev_des.max_r_num;
	h2n32(gdev_des.act_ip, psock->payload + (12 + 2 * VISUAL_STRING_LEN));

	EPAOutput(psock, EMS_ANNUNCIATION, EPA_COM_TYPE, EPA_MSG_ID);	 	
}

void Ann_Input(PSock psock, uint8 com_type, uint16 msg_id) {
	PutSock(psock);
}

void Set_Attrib_Output(EM_SetAttrib* pmsg) {
	PSock psock;
	
	psock = GetSock(PROTOCOL_EPA_FB, LEN_SETATTRIB, EPA_PORT, pmsg->dst_ip, NISelect(pmsg->dst_ip));
	
	h2n32(pmsg->dst_ip, psock->payload);
	memcpy(psock->payload + 4, pmsg->dev_id, VISUAL_STRING_LEN); 
	memcpy(psock->payload + (4 + VISUAL_STRING_LEN), pmsg->pd_tag, VISUAL_STRING_LEN);				 
	h2n16(pmsg->ann_interval, psock->payload + (4 + 2 * VISUAL_STRING_LEN));				 
	psock->payload[6 + 2 * VISUAL_STRING_LEN] = pmsg->dup_tag_detected;
	psock->payload[7 + 2 * VISUAL_STRING_LEN] = pmsg->dev_r_num;
	h2n16(pmsg->lan_r_port, psock->payload + (8 + 2 * VISUAL_STRING_LEN));
	psock->payload[10 + 2 * VISUAL_STRING_LEN] = pmsg->dev_r_state;
	psock->payload[11 + 2 * VISUAL_STRING_LEN] = pmsg->max_r_num;
	h2n32(pmsg->act_ip, psock->payload + (12 + 2 * VISUAL_STRING_LEN)); 			
	 
	EPAOutput(psock, EMS_SETATTRIB, EPA_COM_TYPE, EPA_MSG_ID);	 	
} 

void Set_Attrib_Input(PSock psock, uint8 com_type, uint16 msg_id) {
 
	if(memcmp(psock->payload + 4, gdev_des.dev_id, VISUAL_STRING_LEN) == 0)	{	
		memcpy(gdev_des.pd_tag, psock->payload + (4 + VISUAL_STRING_LEN), VISUAL_STRING_LEN);
		n2h16(psock->payload + (4 + 2 * VISUAL_STRING_LEN), &gdev_des.ann_interval);
		gdev_des.dup_tag_detected = psock->payload[6 + 2 * VISUAL_STRING_LEN];				 
		gdev_des.dev_r_num = psock->payload[7 + 2 * VISUAL_STRING_LEN];
		n2h16(psock->payload + (8 + 2 * VISUAL_STRING_LEN), &gdev_des.lan_r_port);
		gdev_des.dev_r_state = psock->payload[10 + 2 * VISUAL_STRING_LEN];
		gdev_des.max_r_num = psock->payload[11 + 2 * VISUAL_STRING_LEN];
		n2h32(psock->payload + (12 + 2 * VISUAL_STRING_LEN), &gdev_des.act_ip);

		SetDevStatus(STATE_DEV_CONFIGURED);
#if CS_MODULE_EN > 0
		gAnnMacroCnt = (gMacroCyc ? gdev_des.ann_interval / gMacroCyc : 50);
		gSysStatus |= SYS_BCONFIGURED;
#endif	// CS_MODULE_EN
		
		Set_Attrib_Pos_Output(msg_id, psock->src_port, psock->src_ip);
	}
	else {
		Set_Attrib_Neg_Output(1, 2, 1, msg_id, psock->src_port, psock->src_ip);
	}

	PutSock(psock);	
}

void Set_Attrib_Pos_Output(uint16 msg_id, uint16 dst_port, uint32 dst_ip) {
	PSock psock;

	psock = GetSock(PROTOCOL_EPA_FB, LEN_SETATTRIB_POS, dst_port, dst_ip, NISelect(dst_ip));
	 
	h2n32(gdev_des.act_ip , psock->payload);
	psock->payload[4] = gdev_des.max_r_num;

	EPAOutput(psock, EMS_SETATTRIB_POS, EPA_COM_TYPE, msg_id);	 	
}

void Set_Attrib_Pos_Input(PSock psock, uint8 com_type, uint16 msg_id) {
	 
	PutSock(psock);	
}

void Set_Attrib_Neg_Output(uint8 err_class, uint8 err_code, uint8 add_code, uint16 msg_id, uint16 dst_port, uint32 dst_ip) {
	PSock psock;
	
	psock = GetSock(PROTOCOL_EPA_FB, LEN_SETATTRIB_NEG, dst_port, dst_ip, NISelect(dst_ip));
	 
	psock->payload[0] = err_class;
	psock->payload[1] = err_code;
	psock->payload[2] = add_code;
	psock->payload[3] = EPA_RESERVED_VALUE;
	memcpy(psock->payload + 8, &gErr_Des[err_class][err_code], VISUAL_STRING_LEN);

	EPAOutput(psock, EMS_SETATTRIB_NEG, EPA_COM_TYPE, msg_id);	 	
}

void Set_Attrib_Neg_Input(PSock psock, uint8 com_type, uint16 msg_id) {
	 
	PutSock(psock);
}

void Clr_Attrib_Output(uint32 dst_ip, VisualString dev_id, VisualString pd_tag) {
	PSock psock;
	
	psock = GetSock(PROTOCOL_EPA_FB, LEN_CLEARATTRIB, EPA_PORT, dst_ip, NISelect(dst_ip));

	h2n32(dst_ip, psock->payload);
	memcpy(psock->payload + 4 , dev_id, VISUAL_STRING_LEN); 
	memcpy(psock->payload + (4 + VISUAL_STRING_LEN), pd_tag, VISUAL_STRING_LEN);	
 
	EPAOutput(psock, EMS_CLEARATTRIB, EPA_COM_TYPE, EPA_MSG_ID);	 	
}
 
void Clr_Attrib_Input(PSock psock, uint8 com_type, uint16 msg_id) {
	uint32 ip;
	
	n2h32(psock->payload, &ip);

	if(gnitbl[0].ip == ip &&
		!memcmp(psock->payload + 4, gdev_des.dev_id, VISUAL_STRING_LEN) &&
		!memcmp(psock->payload + (4 + VISUAL_STRING_LEN), gdev_des.pd_tag, VISUAL_STRING_LEN)) {
#if CS_MODULE_EN > 0
		CSStop();
		gAnnMacroCnt = 50;
#endif	// CS_MODULE_EN

		DevDes_Init();
		Clr_Attrib_Pos_Output(msg_id, psock->src_port, psock->src_ip);
	}
	else {
		Clr_Attrib_Neg_Output(1, 2, 1, msg_id, psock->src_port, psock->src_ip);
	}

	PutSock(psock);
}

void Clr_Attrib_Pos_Output(uint16 msg_id, uint16 dst_port, uint32 dst_ip) {
	PSock psock;

	psock = GetSock(PROTOCOL_EPA_FB, LEN_CLEARATTRIB_POS, dst_port, dst_ip, NISelect(dst_ip));

	h2n32(gdev_des.act_ip, psock->payload);
	
	EPAOutput(psock, EMS_CLEARATTRIB_POS, EPA_COM_TYPE, msg_id);	 	
}

void Clr_Attrib_Pos_Input(PSock psock, uint8 com_type, uint16 msg_id) {
	 
	PutSock(psock);
}

void Clr_Attrib_Neg_Output(uint8 err_class, uint8 err_code, uint8 add_code, uint16 msg_id, uint16 dst_port, uint32 dst_ip) {
	PSock psock;
	psock = GetSock(PROTOCOL_EPA_FB, LEN_CLEARATTRIB_NEG, dst_port, dst_ip, NISelect(dst_ip));

	h2n32(gdev_des.act_ip, psock->payload);
	psock->payload[4] = err_class;
	psock->payload[5] = err_code;
	psock->payload[6] = add_code;
	psock->payload[7] = EPA_RESERVED_VALUE;
	memcpy(psock->payload + 8, &gErr_Des[err_class][err_code], VISUAL_STRING_LEN);

	EPAOutput(psock, EMS_CLEARATTRIB_NEG, EPA_COM_TYPE, msg_id);	 	
}

void Clr_Attrib_Neg_Input(PSock psock, uint8 com_type, uint16 msg_id) {
	 
	PutSock(psock);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -