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

📄 mib.c

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

#if FS_MODULE_EN > 0
#include "fsmib.h"
#endif	// FS_MODULE_EN

#if NS_MODULE_EN > 0
#include "nsmib.h"
#endif	// FS_MODULE_EN


uint8 MIBInit(void) {
	
	MIBHdr_Init();
	DevDes_Init();
	ClkSync_Init();
	MaxRsp_Init();
	ComSch_Init();
	DevApp_Init();
	FBAppHdr_Init();
	FBApp_Init();
	DomainAppHdr_Init();
	DomainApp_Init();
	LinkObjHdr_Init();
	LinkObj_Init();

#if FS_MODULE_EN > 0

#endif	// FS_MODULE_EN

#if NS_MODULE_EN > 0
	NSMIBHdr_Init();
	KeyMan_Init();
	SecMeasure_Init();
	SecPtclMan_Init();
	AuthenObj_Init();
	AcctrlObj_Init();
#endif	// FS_MODULE_EN
	return EPA_NO_ERR;
}

void MIBHdr_Init(void) {
	gmib_hdr.obj_id = MIB_BASE_OBJID_MIBHDR;
	gmib_hdr.ver = 0;
}

void DevDes_Init(void) {
	gdev_des.obj_id = MIB_BASE_OBJID_DEVDES;
	gdev_des.res[0] = EPA_RESERVED_VALUE;
	gdev_des.res[1] = EPA_RESERVED_VALUE;
	memcpy(gdev_des.dev_id, EPA_DEFAULT_DEVID, VISUAL_STRING_LEN);                          // 设备标识
	memcpy(gdev_des.pd_tag, EPA_DEFAULT_PDTAG, VISUAL_STRING_LEN);                          // 设备标识
	gdev_des.act_ip = gDefNI->ip;
	gdev_des.dev_type = EPA_DEV_TYPE | NS_DEV_TYPE;
	gdev_des.status = 1;
	gdev_des.dev_ver = 0;
	gdev_des.ann_interval = EPA_DEFAULT_ANN_INTERVAL;
	gdev_des.ann_ver = 0;
	gdev_des.dev_r_state = 0;
	gdev_des.dev_r_num = 1;
	gdev_des.lan_r_port = 0;
	gdev_des.max_r_num = 2;
	gdev_des.dup_tag_detected = 0;
	
	gAnnMacroCnt = (gMacroCyc ? EPA_DEFAULT_ANN_INTERVAL / gMacroCyc : 50);
}

void ClkSync_Init(void) {
	gclk_sync.obj_id = MIB_BASE_OBJID_CLKSYNC;
	gclk_sync.clk_syn_protocol = 1;
	gclk_sync.res[0] = EPA_RESERVED_VALUE;
	gclk_sync.res[1] = EPA_RESERVED_VALUE;
	gclk_sync.pri_time_srver = 0;
	gclk_sync.sec_time_srver = 0;
	gclk_sync.req_time_out = 0;
	gclk_sync.req_time_interval = 5000;
	gclk_sync.cap_time_sync = 0;
	gclk_sync.tar_time_sync = 0;
	gclk_sync.cur_time.year = 0;
	gclk_sync.cur_time.month = 0;
	gclk_sync.cur_time.date = 0;
	gclk_sync.cur_time.hour = 0;
	gclk_sync.cur_time.minute = 0;
	gclk_sync.cur_time.millisec = 0;
	gclk_sync.std_time_diff.date = 0;
	gclk_sync.std_time_diff.millisec = 0;
}

void MaxRsp_Init(void) {
	gmax_rsp.obj_id = MIB_BASE_OBJID_MAXRSPTIME;
	gmax_rsp.res[0] = EPA_RESERVED_VALUE;
	gmax_rsp.res[1] = EPA_RESERVED_VALUE;
	gmax_rsp.max_rsp_time = 0;
}

void ComSch_Init(void) {
	gcom_sch.obj_id = MIB_BASE_OBJID_COMSCHEDULE;
	gmax_rsp.res[0] = EPA_RESERVED_VALUE;
	gmax_rsp.res[1] = EPA_RESERVED_VALUE;
	gcom_sch.com_macro_cyc = 100;
	gcom_sch.non_prd_offset = 100;
	gcom_sch.macro_cyc_ver = 1;
}

void DevApp_Init(void) {
	gdev_app.obj_id = MIB_BASE_OBJID_DEVAPP;
	gdev_app.xddl_ver = 1;
}

void FBAppHdr_Init(void) {
	gfb_app_hdr.obj_id = MIB_BASE_OBJID_FBAPPHDR;
	gfb_app_hdr.num_fb_obj = MIB_NUM_FBAPP;
	gfb_app_hdr.first_fb_obj = MIB_BASE_OBJID_FBAPP;
}

void FBApp_Init(void) {
#if MIB_NUM_FBAPP > 0
	uint8 idx;
	
	for(idx = 0; idx < MIB_NUM_FBAPP; ++idx) {
		gfb_app[idx].obj_id = MIB_BASE_OBJID_FBAPP + idx;
		gfb_app[idx].res[0] = EPA_RESERVED_VALUE;
		gfb_app[idx].res[1] = EPA_RESERVED_VALUE;
		memcpy(gfb_app[idx].name, EPA_DEFAULT_FB_NAME, VISUAL_STRING_LEN);
		gfb_app[idx].type = 0;
		gfb_app[idx].max_instantion = 0;
		gfb_app[idx].exec_time = 0;
		gfb_app[idx].first_instantion = 0;
	}
#endif	// MIB_NUM_FBAPP
}

void DomainAppHdr_Init(void) {
	gdomain_app_hdr.obj_id = MIB_BASE_OBJID_DOMAINHDR;
	gdomain_app_hdr.num_domain_obj = MIB_NUM_DOMAINAPP;
	gdomain_app_hdr.first_domain_obj = MIB_BASE_OBJID_DOMAINAPP;
	gdomain_app_hdr.cfged_domain_obj = 0;
	gdomain_app_hdr.uncfged_domain_obj = MIB_NUM_DOMAINAPP;
}

void DomainApp_Init(void) {
#if MIB_NUM_DOMAINAPP > 0
	uint8 idx;
	
	for(idx = 0; idx < MIB_NUM_DOMAINAPP; ++idx) {
		gdomain_app[idx].obj_id = MIB_BASE_OBJID_DOMAINAPP + idx;
		gdomain_app[idx].domain_obj_id = 0;
		gdomain_app[idx].cfg_status = 0;
		gdomain_app[idx].res[0] = EPA_RESERVED_VALUE;
		gdomain_app[idx].res[1] = EPA_RESERVED_VALUE;
		gdomain_app[idx].res[2] = EPA_RESERVED_VALUE;
		memcpy(gdomain_app[idx].name, EPA_DEFAULT_DOMAIN_NAME, VISUAL_STRING_LEN);
	}
#endif	// MIB_NUM_DOMAINAPP
}

void LinkObjHdr_Init(void) {
	glink_obj_hdr.obj_id = MIB_BASE_OBJID_LINKOBJHDR;
	glink_obj_hdr.num_link_obj = MIB_NUM_LINKOBJ;
	glink_obj_hdr.first_link_obj = MIB_BASE_OBJID_LINKOBJ;
	glink_obj_hdr.cfged_link_obj = 0;
	glink_obj_hdr.uncfged_link_obj = MIB_NUM_LINKOBJ;
}

void LinkObj_Init(void) {
#if MIB_NUM_LINKOBJ > 0	
	uint8 idx;

	for(idx = 0; idx < MIB_NUM_LINKOBJ; ++idx) {
		glink_obj[idx].obj_id = MIB_BASE_OBJID_LINKOBJ;
		glink_obj[idx].local_app = 0;
		glink_obj[idx].local_obj = 0;
		glink_obj[idx].rmt_app = 0;
		glink_obj[idx].rmt_obj = 0;
		glink_obj[idx].srv_op = 0;
		glink_obj[idx].srv_role = 0xFF;
		glink_obj[idx].rmt_ip = 0;
		glink_obj[idx].send_time_offset = 0;
	}
#endif	// MIB_NUM_LINKOBJ
}

uint8 MIBRead(uint16 obj_id, uint16 sub_idx, uint16 msg_id, uint16 src_app, uint16 src_port, uint32 src_ip) {

#if NS_MODULE_EN > 0 && MIB_NUM_ACCTRL_OBJ > 0
	if(obj_id >= NSMIB_BASE_OBJID_ACCTRL_OBJ && obj_id < (NSMIB_BASE_OBJID_ACCTRL_OBJ + MIB_NUM_ACCTRL_OBJ)) {
		return (AcctrlObj_Read(obj_id, sub_idx, msg_id, src_app, src_port, src_ip));
	}
#endif	// NS_MODULE_EN

#if FS_MODULE_EN > 0 && FSMIB_NUM_LINKOBJ > 0
	if(obj_id >= FSMIB_BASE_OBJID_LINKOBJ && obj_id < (FSMIB_BASE_OBJID_LINKOBJ + FSMIB_NUM_LINKOBJ) {
		return (FSLinkObj_Read(obj_id, sub_idx, msg_id, src_app, src_port, src_ip));
	}
#endif	// FS_MODULE_EN

	if(obj_id >= MIB_BASE_OBJID_LINKOBJ && obj_id < (MIB_BASE_OBJID_LINKOBJ + MIB_NUM_LINKOBJ)) {
		return (LinkObj_Read(obj_id, sub_idx, msg_id, src_app, src_port, src_ip));
	}
	
	switch(obj_id) {
		case MIB_BASE_OBJID_MIBHDR:
			return (MIBHdr_Read(sub_idx, msg_id, src_app, src_port, src_ip));
		case MIB_BASE_OBJID_DEVDES:
			return (DevDes_Read(sub_idx, msg_id, src_app, src_port, src_ip));
		case MIB_BASE_OBJID_CLKSYNC:
			return (ClkSync_Read(sub_idx, msg_id, src_app, src_port, src_ip));
		case MIB_BASE_OBJID_MAXRSPTIME:
			return (MaxRsp_Read(sub_idx, msg_id, src_app, src_port, src_ip));
		case MIB_BASE_OBJID_COMSCHEDULE:
			return (ComSch_Read(sub_idx, msg_id, src_app, src_port, src_ip));
		case MIB_BASE_OBJID_DEVAPP:
			return (DevApp_Read(sub_idx, msg_id, src_app, src_port, src_ip));
		case MIB_BASE_OBJID_FBAPPHDR:
			return (FBAppHdr_Read(sub_idx, msg_id, src_app, src_port, src_ip));
		case MIB_BASE_OBJID_DOMAINHDR:
			return (DomainAppHdr_Read(sub_idx, msg_id, src_app, src_port, src_ip));
		case MIB_BASE_OBJID_LINKOBJHDR:
			return (LinkObjHdr_Read(sub_idx, msg_id, src_app, src_port, src_ip));

#if NS_MODULE_EN > 0
		case NSMIB_BASE_OBJID_MIBHDR:
			return (NSMIBHdr_Read(sub_idx, msg_id, src_app, src_port, src_ip));
		case NSMIB_BASE_OBJID_KEY_MAN:
			return (KeyMan_Read(sub_idx, msg_id, src_app, src_port, src_ip));
		case NSMIB_BASE_OBJID_SEC_MEASURE:
			return (SecMeasure_Read(sub_idx, msg_id, src_app, src_port, src_ip));
		case NSMIB_BASE_OBJID_PTCL_MAN:
			return (SecPtclMan_Read(sub_idx, msg_id, src_app, src_port, src_ip));
		case NSMIB_BASE_OBJID_AUTHEN:
			return (AuthenObj_Read(sub_idx, msg_id, src_app, src_port, src_ip));
#endif	// NS_MODULE_EN

#if FS_MODULE_EN > 0
		case FSMIB_BASE_OBJID_MIBHDR:
			return (FSMIBHdr_Read(sub_idx, msg_id, src_app, src_port, src_ip));
		case FSMIB_BASE_OBJID_CFGOBJ:
			return (FSCfg_Read(sub_idx, msg_id, src_app, src_port, src_ip));
		case FSMIB_BASE_OBJID_COMOBJ:
			return (FSCom_Read(sub_idx, msg_id, src_app, src_port, src_ip));
		case FSMIB_BASE_OBJID_FAILURE:
			return (FSComFail_Read(sub_idx, msg_id, src_app, src_port, src_ip));
		case FSMIB_BASE_OBJID_ALERT:
			return (FSAlert_Read(sub_idx, msg_id, src_app, src_port, src_ip));
#endif	// FS_MODULE_EN

		default:
			if(obj_id >= MIB_BASE_OBJID_FBAPP && obj_id < (MIB_BASE_OBJID_FBAPP + MIB_NUM_FBAPP)) {
				return (FBApp_Read(obj_id, sub_idx, msg_id, src_app, src_port, src_ip));
			}
			if(obj_id >= MIB_BASE_OBJID_DOMAINAPP && obj_id < (MIB_BASE_OBJID_DOMAINAPP + MIB_NUM_DOMAINAPP)) {
				return (DomainApp_Read(obj_id, sub_idx, msg_id, src_app, src_port, src_ip));
			}
			Read_Neg_Output(src_app, 1, 1, 0, msg_id, src_port, src_ip);
			return EPA_OBJID_ILLEGAL;
	}
	return EPA_NO_ERR;
}

uint8 MIBWrite(uint16 obj_id, uint16 sub_idx, OctetString payload, uint16 msg_id, uint16 src_app, uint16 src_port, uint32 src_ip) {

#if NS_MODULE_EN > 0 && MIB_NUM_ACCTRL_OBJ > 0
	if(obj_id >= NSMIB_BASE_OBJID_ACCTRL_OBJ && obj_id < (NSMIB_BASE_OBJID_ACCTRL_OBJ + MIB_NUM_ACCTRL_OBJ)) {
		return (AcctrlObj_Write(obj_id, sub_idx, payload, msg_id, src_app, src_port, src_ip));
	}
#endif	// NS_MODULE_EN

#if FS_MODULE_EN > 0 && FSMIB_NUM_LINKOBJ > 0
	if(obj_id >= FSMIB_BASE_OBJID_LINKOBJ && obj_id < (FSMIB_BASE_OBJID_LINKOBJ + FSMIB_NUM_LINKOBJ) {
		return (FSLinkObj_Write(obj_id, sub_idx, payload, msg_id, src_app, src_port, src_ip);
	}
#endif	// FS_MODULE_EN

	if(obj_id >= MIB_BASE_OBJID_LINKOBJ && obj_id < (MIB_BASE_OBJID_LINKOBJ + MIB_NUM_LINKOBJ)) {
		return (LinkObj_Write(obj_id, sub_idx, payload, msg_id, src_app, src_port, src_ip));
	}
	
	switch(obj_id) {
		case MIB_BASE_OBJID_MIBHDR:
			return (MIBHdr_Write(sub_idx, payload, msg_id, src_app, src_port, src_ip));
		case MIB_BASE_OBJID_DEVDES:
			return (DevDes_Write(sub_idx, payload, msg_id, src_app, src_port, src_ip));
		case MIB_BASE_OBJID_CLKSYNC:
			return (ClkSync_Write(sub_idx, payload, msg_id, src_app, src_port, src_ip));
		case MIB_BASE_OBJID_MAXRSPTIME:
			return (MaxRsp_Write(sub_idx, payload, msg_id, src_app, src_port, src_ip));
		case MIB_BASE_OBJID_COMSCHEDULE:
			return (ComSch_Write(sub_idx, payload, msg_id, src_app, src_port, src_ip));
		case MIB_BASE_OBJID_DEVAPP:
			return (DevApp_Write(sub_idx, payload, msg_id, src_app, src_port, src_ip));
		case MIB_BASE_OBJID_FBAPPHDR:
			return (FBAppHdr_Write(sub_idx, payload, msg_id, src_app, src_port, src_ip));
		case MIB_BASE_OBJID_DOMAINHDR:
			return (DomainAppHdr_Write(sub_idx, payload, msg_id, src_app, src_port, src_ip));
		case MIB_BASE_OBJID_LINKOBJHDR:
			return (LinkObjHdr_Write(sub_idx, payload, msg_id, src_app, src_port, src_ip));

#if NS_MODULE_EN > 0
		case NSMIB_BASE_OBJID_MIBHDR:
			return (NSMIBHdr_Write(sub_idx, payload, msg_id, src_app, src_port, src_ip));
		case NSMIB_BASE_OBJID_KEY_MAN:
			return (KeyMan_Write(sub_idx, payload, msg_id, src_app, src_port, src_ip));
		case NSMIB_BASE_OBJID_SEC_MEASURE:
			return (SecMeasure_Write(sub_idx, payload, msg_id, src_app, src_port, src_ip));
		case NSMIB_BASE_OBJID_PTCL_MAN:
			return (SecPtclMan_Write(sub_idx, payload, msg_id, src_app, src_port, src_ip));
		case NSMIB_BASE_OBJID_AUTHEN:
			return (AuthenObj_Write(sub_idx, payload, msg_id, src_app, src_port, src_ip));
#endif	// FS_MODULE_EN

#if FS_MODULE_EN > 0
		case FSMIB_BASE_OBJID_MIBHDR:
			return (FSMIBHdr_Write(sub_idx, payload, msg_id, src_app, src_port, src_ip));
		case FSMIB_BASE_OBJID_CFGOBJ:
			return (FSCfg_Write(sub_idx, payload, msg_id, src_app, src_port, src_ip));
		case FSMIB_BASE_OBJID_COMOBJ:
			return (FSCom_Write(sub_idx, payload, msg_id, src_app, src_port, src_ip));
		case FSMIB_BASE_OBJID_FAILURE:
			return (FSComFail_Write(sub_idx, payload, msg_id, src_app, src_port, src_ip));
		case FSMIB_BASE_OBJID_ALERT:
			return (FSAlert_Write(sub_idx, payload, msg_id, src_app, src_port, src_ip));
#endif	// FS_MODULE_EN

		default:
			if(obj_id >= MIB_BASE_OBJID_FBAPP && obj_id < (MIB_BASE_OBJID_FBAPP + MIB_NUM_FBAPP)) {
				return (FBApp_Write(obj_id, sub_idx, payload, msg_id, src_app, src_port, src_ip));
			}
			if(obj_id >= MIB_BASE_OBJID_DOMAINAPP && obj_id < (MIB_BASE_OBJID_DOMAINAPP + MIB_NUM_DOMAINAPP)) {
				return (DomainApp_Write(obj_id, sub_idx, payload, msg_id, src_app, src_port, src_ip));
			}
			Write_Neg_Output(src_app, 1, 1, 0, msg_id, src_port, src_ip);
			return EPA_OBJID_ILLEGAL;
	}
	return EPA_NO_ERR;
}

⌨️ 快捷键说明

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