📄 fsmib.h
字号:
#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 + -