📄 manage.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 + -