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

📄 fsmib.h

📁 包括EPA协议栈
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifndef _FSMIB_H
#define _FSMIB_H

#include "global.h"

#ifdef MIB_GLOBALS
	#define MIB_EXTERN
#else
	#define MIB_EXTERN extern
#endif	// MIB_EXTERN

#define MIB_NUM_FS_LINKOBJ              (5)

#define FSMIB_BASE_OBJID_MIBHDR         (11)
#define FSMIB_BASE_OBJID_CFGOBJ         (1000)
#define FSMIB_BASE_OBJID_COMOBJ         (1001)
#define FSMIB_BASE_OBJID_FAILURE        (1002)
#define FSMIB_BASE_OBJID_ALERT          (1003)
#define FSMIB_BASE_OBJID_LINKOBJ        (1100)

typedef	unsigned short BitString;

typedef struct {
	uint16       obj_id;
	uint16       obj_id_com;
	uint16       obj_id_cfg;
	uint16       obj_id_fail;
	uint16       num_fslink_obj;
	uint16       first_fslink_obj;
	uint16       cfged_fslink_obj;
	uint16       uncfged_fslink_obj;
} FSMIBHdr, *PFSMIBHdr;

typedef struct {
	uint16       obj_id;
	uint16       highest_sil;
	uint16       cfged_sil;
	uint16       crc_mode;
	Octet        pr_r_key_gen[16];
	uint32       inter_update_key;
} FSCfg, *PFSCfg;

typedef struct {
	uint16       obj_id;
	uint16       status;
	uint32       rmt_ip;
	uint32       r_key;
	uint32       max_rsp_time;
	uint16       e_sn;
} FSCom, *PFSCom;

typedef struct {
	uint16       obj_id;
	BitString    dev_fail;
	BitString    fail_report_state;
	BitString    fail_report_cfg;
	BitString    fail_ack_state;
	BitString    fail_ack_cfg;
	uint16       fail_report_prio;
	uint32       max_rsp_time;
} FSComFail, *PFSComFail;

typedef struct {
	uint16       obj_id;
	uint8        alert_type;
	uint8        msg_type;
	uint32       fail_ip;
	uint8        prio;
	uint8        res[3];
	BinaryDate   stamp;
} FSAlert, *PFSAlert;

typedef struct {
	uint16       obj_id;
	uint16       local_app_id;
	uint16       local_obj_id;
	uint16       rmt_app_id;
	uint16       rmt_app_id;
	uint8        srv_op;
	uint8        srv_role;
	uint32       rmt_ip;
	uint32       send_time_offset;
	uint8        err_cnt_limit;
	uint8        err_cnt;
	uint16       e_sn;
	uint16       lr_sn;
	uint16       tolr_delay;
	uint32       r_key;
} FSLinkObj, *PFSLinkObj;

MIB_EXTERN FSMIBHdr           gfs_mib_hdr;
MIB_EXTERN FSCfg              gfs_cfg;
MIB_EXTERN FSCom		          gfs_com;
MIB_EXTERN FSComFail          gfs_com_fail;
MIB_EXTERN FSAlert            gfs_alert;
MIB_EXTERN FSLinkObj          gfs_link_obj[FSLINKOBJECT_AMOUNT];

/*----------------------------------------------------------------------------------*
 *- Get & Set Interface of safety mib header
 *----------------------------------------------------------------------------------*/
__inline uint16 FS_GetLinkObjNum(void) {
	return (gfs_mib_hdr.num_fslink_obj);
}       

__inline uint16 FS_GetFirstLinkObj(void) {
	return (gfs_mib_hdr.first_fslink_obj);
}    

__inline uint16 FS_GetCfgLinkObjNum(void) {
	return (gfs_com.cfged_fslink_obj);
}

/*----------------------------------------------------------------------------------*
 *- Get & Set Interface of communication object
 *----------------------------------------------------------------------------------*/
__inline uint16 FS_GetComState(void) {
	return (gfs_com.status);
}

__inline uint32 FS_GetComRmtIP(void) {
	return (gfs_com.rmt_ip);
}

__inline uint16 FS_GetComESN(void) {
	return (gfs_com.e_sn);
}

__inline uint32 FS_GetComKey(void) {
	return (gfs_com.r_key);
}

__inline void FS_SetComState(uint16 status) {
	gfs_com.status = status;
}

__inline void FS_SetComESN(uint16 e_sn) {
	gfs_com.e_sn = e_sn;
}

__inline void FS_SetComRmtIP(uint32 rmt_ip) {
	gfs_com.rmt_ip = rmt_ip;
}

/*----------------------------------------------------------------------------------*
 *- Get & Set Interface of configueration object
 *----------------------------------------------------------------------------------*/
__inline uint16 FS_GetCfgCrcMode(void) {
	return (gfs_cfg.crc_mode);
}

/*----------------------------------------------------------------------------------*
 *- Get & Set Interface of safety link object
 *----------------------------------------------------------------------------------*/
__inline PFSLinkObj FS_GetLinkObj(uint16 objid) {
	return (&gfs_link_obj[objid - MIB_BASE_OBJID_LINKOBJ]);
}

__inline PFSLinkObj FS_GetLocalLinkObj(uint16 appid, uint16 objid, uint8 role) {
	uint16 idx;
	for(idx = 0; idx < MIB_NUM_LINKOBJ; ++idx) {
		if((gfs_link_obj[idx].local_app_id == appid) && (gfs_link_obj[idx].local_obj_id == objid) && (gfs_link_obj[idx].role == role)) {
			return (&gfs_link_obj[idx]);
		}
	}
	return ((PFSLinkObj)0);
}
	
__inline PFSLinkObj FS_GetRmtLinkObj(uint16 appid, uint16 objid, uint8 role, uint32 ip) {
	uint16 idx;
	for(idx = 0; idx < MIB_NUM_LINKOBJ; ++idx) {
		if((gfs_link_obj[idx].rmt_app_id == appid) && (gfs_link_obj[idx].rmt_obj_id == objid) && (gfs_link_obj[idx].role == role) && (gfs_link_obj[idx].rmt_ip == rmtip)) {
			return (&gfs_link_obj[idx]);
		}
	}
	return ((PFSLinkObj)0);
}

/*----------------------------------------------------------------------------------*
 *- Read & Write Interface of objects
 *----------------------------------------------------------------------------------*/
void FSMIBHdr_Init(void);

__inline uint8 FSMIBHdr_Read(uint16 idx, uint16 msg_id, uint16 src_app, uint16 src_port, uint32 src_ip) {
	OctetString payload;
	
	switch (idx) {
		case 0:
			h2n16(gfs_mib_hdr.obj_id, payload);
			h2n16(gfs_mib_hdr.obj_id_com, payload + 2);
			h2n16(gfs_mib_hdr.obj_id_cfg, payload + 4);
			h2n16(gfs_mib_hdr.obj_id_fail, payload + 6);
			h2n16(gfs_mib_hdr.num_fslink_obj, payload + 8);
			h2n16(gfs_mib_hdr.first_fslink_obj, payload + 10);
			h2n16(gfs_mib_hdr.cfged_fslink_obj, payload + 12);
			h2n16(gfs_mib_hdr.uncfged_fslink_obj, payload + 14);
			Read_Pos_Output(src_app, payload, 16, msg_id, src_port, src_ip);
			break;
		case 2:
			h2n16(gfs_mib_hdr.obj_id_com, payload);
			Read_Pos_Output(src_app, payload, 2, msg_id, src_port, src_ip);
			break;
		case 3:
			h2n16(gfs_mib_hdr.obj_id_cfg, payload);
			Read_Pos_Output(src_app, payload, 2, msg_id, src_port, src_ip);
			break;
		case 4:
			h2n16(gfs_mib_hdr.obj_id_fail, payload);
			Read_Pos_Output(src_app, payload, 2, msg_id, src_port, src_ip);
			break;
		case 5:
			h2n16(gfs_mib_hdr.num_fslink_obj, payload);
			Read_Pos_Output(src_app, payload, 2, msg_id, src_port, src_ip);
			break;
		case 6:
			h2n16(gfs_mib_hdr.first_fslink_obj, payload);
			Read_Pos_Output(src_app, payload, 2, msg_id, src_port, src_ip);
			break;
		case 7:
			h2n16(gfs_mib_hdr.cfged_fslink_obj, payload);
			Read_Pos_Output(src_app, payload, 2, msg_id, src_port, src_ip);
			break;
		case 8:
			h2n16(gfs_mib_hdr.uncfged_fslink_obj, payload);
			Read_Pos_Output(src_app, payload, 2, msg_id, src_port, src_ip);
			break;
		default:
			Read_Neg_Output(src_app, 1, 2, 0, msg_id, src_port, src_ip);
			return EPA_SUBINDEX_ILLEGAL;
	}
	return EPA_NO_ERR;
}

__inline uint8 FSMIBHdr_Write(uint16 idx, OctetString payload, uint16 msg_id, uint16 src_app, uint16 src_port, uint32 src_ip) {
	if(idx > 8) {
		Write_Neg_Output(src_app, 1, 2, 0, msg_id, src_port, src_ip);
		return EPA_SUBINDEX_ILLEGAL;
	}
	Write_Neg_Output(src_app, 1, 3, 0, msg_id, src_port, src_ip);
	return EPA_OBJ_UNWRITABLE;
}

void FSCfg_Init(void);

__inline uint8 FSCfg_Read(uint16 idx, uint16 msg_id, uint16 src_app, uint16 src_port, uint32 src_ip) {
	OctetString payload;
	
	switch (idx) {
		case 0:
			h2n16(gfs_cfg.obj_id, payload);
			h2n16(gfs_cfg.highest_sil, payload + 2);
			h2n16(gfs_cfg.cfged_sil, payload + 4);
			h2n16(gfs_cfg.crc_mode, payload + 6);
			memcpy(payload + 8, gfs_cfg.inter_update_key, 16);
			h2n32(gfs_cfg.inter_update_key, payload + 24);
			Read_Pos_Output(src_app, payload, 28, msg_id, src_port, src_ip);
			break;
		case 2:
			h2n16(gfs_cfg.highest_sil, payload);
			Read_Pos_Output(src_app, payload, 2, msg_id, src_port, src_ip);
			break;
		case 3:
			h2n16(gfs_cfg.cfged_sil, payload);
			Read_Pos_Output(src_app, payload, 2, msg_id, src_port, src_ip);
			break;
		case 4:
			h2n16(gfs_cfg.crc_mode, payload);
			Read_Pos_Output(src_app, payload, 2, msg_id, src_port, src_ip);
			break;
		case 5:
			memcpy(payload, gfs_cfg.inter_update_key, 16);
			Read_Pos_Output(src_app, payload, 16, msg_id, src_port, src_ip);
			break;
		case 6:
			h2n32(gfs_cfg.inter_update_key, payload);
			Read_Pos_Output(src_app, payload, 2, msg_id, src_port, src_ip);
			break;
		default:
			Read_Neg_Output(src_app, 1, 2, 0, msg_id, src_port, src_ip);
			return EPA_SUBINDEX_ILLEGAL;
	}
	return EPA_NO_ERR;
}

__inline uint8 FSCfg_Write(uint16 idx, OctetString payload, uint16 msg_id, uint16 src_port, uint32 src_ip) {
	switch(idx) {
		case 0:
			n2h16(payload + 2, &gfs_cfg.highest_sil);
			n2h16(payload + 4, &gfs_cfg.cfged_sil);
			n2h16(payload + 6, &gfs_cfg.crc_mode);
			memcpy(gfs_cfg.inter_update_key, payload + 8, 16);
			n2h32(payload + 24, &gfs_cfg.inter_update_key);
			Write_Pos_Output(src_app, msg_id, src_port, src_ip);
			break;
		case 2:
			n2h16(payload, &gfs_cfg.highest_sil);
			Write_Pos_Output(src_app, msg_id, src_port, src_ip);
			break;
		case 3:
			n2h16(payload, &gfs_cfg.cfged_sil);
			Write_Pos_Output(src_app, msg_id, src_port, src_ip);
			break;
		case 4:
			n2h16(payload, &gfs_cfg.crc_mode);
			Write_Pos_Output(src_app, msg_id, src_port, src_ip);
			break;
		case 5:
			memcpy(gfs_cfg.inter_update_key, payload + 8, 16);
			Write_Pos_Output(src_app, msg_id, src_port, src_ip);
			break;
		case 6:
			n2h32(payload, &gfs_cfg.inter_update_key);
			Write_Pos_Output(src_app, msg_id, src_port, src_ip);
			break;
		default:
			if(idx > 6) {
				Write_Neg_Output(src_app, 1, 2, 0, msg_id, src_port, src_ip);
				return EPA_SUBINDEX_ILLEGAL;
			}
			Write_Neg_Output(src_app, 1, 3, 0, msg_id, src_port, src_ip);
			return EPA_OBJ_UNWRITABLE;
	}
	return EPA_NO_ERR;
}

void FSCom_Init(void);

__inline uint8 FSCom_Read(uint16 idx, uint16 msg_id, uint16 src_app, uint16 src_port, uint32 src_ip) {
	OctetString payload;
	
	switch (idx) {
		case 0:
			h2n16(gfs_com.obj_id, payload);
			h2n16(gfs_com.status, payload + 2);
			h2n32(gfs_com.rmt_ip, payload + 4);
			h2n32(gfs_com.r_key, payload + 8);
			h2n32(gfs_com.max_rsp_time, payload + 12);
			h2n16(gfs_com.e_sn, payload + 16);
			Read_Pos_Output(src_app, payload, 18, msg_id, src_port, src_ip);
			break;
		case 2:
			h2n16(gfs_com.status, payload);
			Read_Pos_Output(src_app, payload, 2, msg_id, src_port, src_ip);
			break;
		case 3:
			h2n32(gfs_com.rmt_ip, payload);
			Read_Pos_Output(src_app, payload, 4, msg_id, src_port, src_ip);
			break;
		case 4:
			h2n32(gfs_com.r_key, payload);
			Read_Pos_Output(src_app, payload, 4, msg_id, src_port, src_ip);
			break;
		case 5:
			h2n32(gfs_com.max_rsp_time, payload);
			Read_Pos_Output(src_app, payload, 4, msg_id, src_port, src_ip);
			break;
		case 6:
			h2n16(gfs_com.e_sn, payload);
			Read_Pos_Output(src_app, payload, 2, msg_id, src_port, src_ip);
			break;
		default:
			Read_Neg_Output(src_app, 1, 2, 0, msg_id, src_port, src_ip);
			return EPA_SUBINDEX_ILLEGAL;
	}
	return EPA_NO_ERR;
}

__inline uint8 FSCom_Write(uint16 idx, OctetString payload, uint16 msg_id, uint16 src_app, uint16 src_port, uint32 src_ip) {
	switch (idx) {
		case 0:
			n2h16(payload + 2, &gfs_com.status);
			n2h32(payload + 4, &gfs_com.rmt_ip);
			n2h32(payload + 8, &gfs_com.r_key);
			n2h32(payload + 12, &gfs_com.max_rsp_time);
			n2h16(payload + 16, &gfs_com.e_sn);
			Write_Pos_Output(src_app, msg_id, src_port, src_ip);
			break;
		case 2:
			n2h16(payload, &gfs_com.status);
			Write_Pos_Output(src_app, msg_id, src_port, src_ip);
			break;
		case 3:
			n2h32(payload, &gfs_com.rmt_ip);
			Write_Pos_Output(src_app, msg_id, src_port, src_ip);
			break;
		case 4:
			n2h32(payload, &gfs_com.r_key);
			Write_Pos_Output(src_app, msg_id, src_port, src_ip);
			break;
		case 5:

⌨️ 快捷键说明

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