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

📄 fsmib.c

📁 包括EPA协议栈
💻 C
字号:
#include "ucos_ii.h"
#define EPAFSMAIB_GLOBALS
#include "fsmib.h"
#undef EPAFSMAIB_GLOBALS
#include "epa_module.h"
#include "ip_module.h"
#include <string.h>

void Initfsmihead()
{
	gFSMIBHeadObj.ObjectID = FSMIBHEADER_BASE_OBJECTID;
	gFSMIBHeadObj.ObjectID_FSConfigurationObject = FSCONO_BASE_OBJECTID;
	gFSMIBHeadObj.ObjectID_FSCommunicationObject = FSCOMO_BASE_OBJECTID;
	gFSMIBHeadObj.ObjectID_FSCommunicationfailureObject = FSCOMFAILUREO_BASE_OBJECTID;
	gFSMIBHeadObj.Number_FSLinkObject = FSLINKOBJECT_AMOUNT;
	gFSMIBHeadObj.FirstNumber_FSLinkObject = FSLO_BASE_OBJECTID;//第一个FSLinkObject;随便弄一个
	gFSMIBHeadObj.Number_ConfiguredFSLinkObject = 0; 
	gFSMIBHeadObj.Number_UnConfigredFSLinkObject = FSLINKOBJECT_AMOUNT;
	//填完了之后,应该懂得如何插入到EPAMIB里面去;
}

void Initfscfgobject()
{

	gFSCfgObj.ObjectID = FSCONO_BASE_OBJECTID;//不晓得是哪个
	gFSCfgObj.HighestSILSupported = FSLINKOBJECT_AMOUNT;
	gFSCfgObj.ConfiguredSIL = 0x00;
	gFSCfgObj.CRCCheckMode = 1;
	//gFSCfgObj.PseudoRandomcode_RelationKeyGeneration[16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,};
	memset(&gFSCfgObj.PseudoRandomcode_RelationKeyGeneration, 0, 16);
	gFSCfgObj.Interval_RelationKeyUpdate = 100;//表示100天更新一次,这个不管.
	//填完了之后,应该懂得如何插入到EPAMIB里面去;
}

void Initfscomobject()
{
	gFSComObj.ObjectID = FSCOMO_BASE_OBJECTID;//
	gFSComObj.State = SAFETYCOM_CLOSE;
	gFSComObj.RemoteIPAddress = inetaddr(128, 128, 2, 181);
	gFSComObj.RelationKey = 0x0000;
	//gFSComObj.MaxResponseTime
	gFSComObj.ESN = 0;
	gFSComObj.MaxResponseTime = 1000;
}

void Initfscomfailure()
{
	gFSComFailureObj.ObjectID = FSCOMFAILUREO_BASE_OBJECTID;
	gFSComFailureObj.DeviceFailure = 0;
	gFSComFailureObj.FailureReportState = 0;
	gFSComFailureObj.FailureReportConfiguration = 1;
	gFSComFailureObj.FailureAcknowledgeState = 0;
	gFSComFailureObj.FailureAcknowledgeConfiguration = 1;
	memset(&gFSComFailureObj.FailureReportPriority, 0, 16);
	gFSComFailureObj.MaxResponseTime = 0;
}

void Initfslinkobject()
{
	int index;
	for(index = 0; index < FSLINKOBJECT_AMOUNT; ++index) {
		gFSLinkObj[index].ObjectID = FSLO_BASE_OBJECTID + index;
		gFSLinkObj[index].LocalAppID = 20;
		gFSLinkObj[index].LocalObjectID = 1;
		gFSLinkObj[index].RemoteAppID = 50;
		gFSLinkObj[index].RemoteObjectID = 1;
		gFSLinkObj[index].ServiceOperation = EVS_DISTRIBUTE;
		gFSLinkObj[index].ServiceRole = 0;
		gFSLinkObj[index].RemoteIPAddress = gNetIf.bcaddr;
		gFSLinkObj[index].SendTimeOffset = 0;
		gFSLinkObj[index].ErrorCountLimit = 0;
		gFSLinkObj[index].ErrorCount = 0;
		gFSLinkObj[index].ESN = 0;
		gFSLinkObj[index].LRSN = 0;
		gFSLinkObj[index].TolerableTimeDelay = 0;
		gFSLinkObj[index].RelationKey = 0;
	}
}

void Update_RelationKey(void)
{
	uint32 temp;
	uint16 i;
//	temp = gFSCfgObj.PseudoRandomcode_RelationKeyGeneration[0] << 24 
//		|  gFSCfgObj.PseudoRandomcode_RelationKeyGeneration[1] << 16
//		|  gFSCfgObj.PseudoRandomcode_RelationKeyGeneration[2] << 8
//		|  gFSCfgObj.PseudoRandomcode_RelationKeyGeneration[3];
	gFSComObj.RelationKey = temp;
	for(i = 0; i < FSLINKOBJECT_AMOUNT; i ++)
	{
		gFSLinkObj[i].RelationKey = temp;
	}
}

uint8 FSMIB_Get(uint16 ObjectID, uint8 *pFSObj) {
	switch(ObjectID) {
		case FSMIBHEADER_BASE_OBJECTID:
			memcpy(pFSObj, &gFSMIBHeadObj, sizeof(FSManagementInfoHeaderObject));
			break;
		case FSCOMO_BASE_OBJECTID:
			memcpy(pFSObj, &gFSComObj, sizeof(FSCommunicationObject));
	       	break;		
		case FSCONO_BASE_OBJECTID:
			memcpy(pFSObj, &gFSCfgObj, sizeof(FSConfigurationObject));
			break;
		case FSCOMFAILUREO_BASE_OBJECTID:
			memcpy(pFSObj,&gFSComFailureObj,sizeof(FSCommunicationFailureObject));	
			break;
	  default:
			if((ObjectID >= FSLO_BASE_OBJECTID) &&(ObjectID <= FSLO_BASE_OBJECTID)) {
				memcpy(pFSObj, &gFSLinkObj[ObjectID - FSLO_BASE_OBJECTID], sizeof(FSLinkObject));
			}
			else {
				return (1);
			}
	}
	return 0;
}	
	      				
uint8 FSMIB_Set(uint16 ObjectID, uint8 *pFSObj) {
	switch(ObjectID) {
		case FSMIBHEADER_BASE_OBJECTID:
			memcpy(&gFSMIBHeadObj, pFSObj, sizeof(FSManagementInfoHeaderObject));
			break;				
		case FSCOMO_BASE_OBJECTID:
			memcpy(&gFSComObj, pFSObj, sizeof(FSCommunicationObject));
			break;				
		case FSCONO_BASE_OBJECTID:
			memcpy(&gFSCfgObj, pFSObj, sizeof(FSConfigurationObject));
			break;				
		case FSLO_BASE_OBJECTID:
			memcpy(&gFSLinkObj, pFSObj, sizeof(FSLinkObject));
			break;	       					
		case FSCOMFAILUREO_BASE_OBJECTID:
			memcpy(&gFSComFailureObj, pFSObj, sizeof(FSCommunicationFailureObject));	
			break;
		default:
			if((ObjectID >= FSLO_BASE_OBJECTID) &&(ObjectID <= FSLO_BASE_OBJECTID))	{
				memcpy(&gFSLinkObj[ObjectID - FSLO_BASE_OBJECTID], pFSObj, sizeof(FSLinkObject));
			}
			else {
				return (1);
			}
	}
	return 0;	
}

⌨️ 快捷键说明

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