Files
TSCP/TSCP/src/APP/APP_API.c
T

993 lines
42 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
这是一个示例文件,各产品应当参考本文件,开发自己的APP_API.c
也可以根据自身项目情况将这些函数分散到不同的.c文件中,只保持APP_API.h不变即可
*/
#include "APP_API.h"
#include "MSCP_APP_API.h"
#include "2oo2InterfaceDataManage.h"
#include "2oo2DataTransferManage.h"
#include "commonQueryStruDef.h"
#include "SystemParameterManage.h"
#include "ConfigDataReadManage.h"
#include "ProtclParam.h"
#include "../Deployment/DeploymentExtern.h"
static CM_UINT32 gFollowDataLen = 0u; /*应用跟随数据长度*/
static CM_UINT8 gFollowData[MSCP_FOLLOW_BUFF_SIZE] = { 0 }; /*应用跟随数据*/
/* 内网安全通信配置参数,示例: */
/* 内网安全通信配置参数,示例: */
/*ATP、ATO、MMI间通信时,SFP协议使用的数据库数组:
*两端ATP分别当作ZC1和ZC2,ZC1为发起方;
*ATO为CI3,MMI为CI4,CCOV为CI5(CCOV仅为预留,暂无通信的需求).ZC与CI通信时ZC为发起方
*总结各子系统ID为:两端ATP分别为0x5501,0x5502;ATO为0x7103;MMI为0x7104;CCOV为0x7105*/
const CM_UINT8 g_SfpInnetParam[] =
{
0,4,/*不同设备通信关系表记录个数*/
/*记录的格式如下:*/
/* 发起方 发起方发送数据 发起方报文 发起方报文 发起方接收Ack 跟随方 跟随方发送数据 跟随方运行 跟随方报文 此通信关系中成功发送 */
/* 设备类型 通信类型 发送周期长度 最大延时 报文最大延时差 设备类型 通信类型 周期长度 最大延时 一包数据所需最小周期数 */
/*ZC->CI*/ 0x22, 0x55, 0x01,0x1D, 0x01,0x1D, 0x01,0x1D, 0xff, 0x55, 0x00,0xC8, 0x00,0xC8, 0x02,
/*AOM->TIAS*/ 0x15, 0x55, 0x00,0xC8, 0x00,0xC8, 0x00,0xC8, 0x03, 0x55, 0x00,0xC8, 0x00,0xC8, 0x02,
/*AOM->ATP*/ 0x14, 0x55, 0x00,0xC8, 0x00,0xC8, 0x00,0xC8, 0x15, 0x55, 0x00,0xC8, 0x00,0xC8, 0x02,
/*主机->维护机*/ 0xD9, 0x55, 0x01,0x2c, 0x01,0x2C, 0x01,0x2C, 0xf8, 0x55, 0x00,0xc8, 0x00,0xc8, 0x02,
0,2,/*相同设备通信关系表记录个数*/
/*记录的格式如下:*/
/* 发起方 发起方 发起方发送数据 发起方报文 发起方报文 发起方接收Ack 跟随方 跟随方 跟随方发送数据 跟随方运行 跟随方报文 此通信关系中成功发送 */
/* 设备类型 设备ID 通信类型 发送周期长度 最大延时 报文最大延时差 设备类型 设备ID 通信类型 周期长度 最大延时 一包数据所需最小周期数 */
/*AOM1->AOM2*/ 0x22, 1, 0x55, 0x00,0xC8, 0x00,0xC8, 0x00,0xC8, 0x22, 2, 0x55, 0x00,0xC8, 0x00,0xC8, 0x02,
/*ZC1->ZC2*/ 0x55, 1, 0x55, 0x00,0xC8, 0x00,0xC8, 0x00,0xC8, 0x55, 2, 0x55, 0x00,0xC8, 0x00,0xC8, 0x02
};
/* 应用周期主逻辑2 */
ENUM_CM_RETURN APP_API_MainFunc2(void);
/* 应用周期主逻辑3 */
ENUM_CM_RETURN APP_API_MainFunc3(void);
/* 应用周期主逻辑4 */
ENUM_CM_RETURN APP_API_MainFunc4(void);
/* 应用周期主逻辑4 */
ENUM_CM_RETURN APP_API_MainFunc5(void);
/* 应用周期主逻辑4 */
ENUM_CM_RETURN APP_API_MainFunc6(void);
#if (kPLATFORM==kVXWORKS)
static ENUM_CM_RETURN AddOneAppCheckData(IN const UINT32 dwDataAddr, IN const UINT16 wDataLen);
static ENUM_CM_RETURN AddAppCheckData(UINT32* pConfigDataAdderBuf, UINT16* pConfigDataLenBuf, UINT16 wDataLen);
#endif
/**
* @brief 应用初始化
* @param VitalBuf 关键数据数组
* @param pVitalLen 关键数据长度
* @return ENUM_CM_RETURN 初始化结果
* - ENUM_CM_TRUE 成功
* - ENUM_CM_FALSE 失败(平台立即宕机)
* @details
* 2oo2双机的关键数据内容不一致时,2oo2初始化将失败——平台宕机;
* 2x2双系的关键数据内容不一致时,非主系运行的设备将宕机;
* 关键数据应尽可能短(如几个版本号或MD5码)总长不得超过200字节。
*/
ENUM_CM_RETURN APP_API_Init(OUT CM_UINT8 VitalBuf[200], OUT CM_UINT16* pVitalLen)
{
ENUM_CM_RETURN retVal = ENUM_CM_FALSE; /*返回值*/
UINT8 initRtn = 0U; /*应用初始化结果*/
UINT16* pTiocFsVersion = NULL;/* 数据版本号 */
#if (kPLATFORM==kVXWORKS)
UINT16 wAppConfigDataLen = 0u;
UINT32 szConfigDataAddr[200u] = { 0u };
UINT16 szConfigDataLen[200u] = { 0u };
SERIAL_ID_FUNC pIsSendExtendBoard = NULL;/* 扩展板相关 */
SERIAL_OUT_ATS_VOBC pReserveOutVobc = NULL;
SERIAL_IN_VOBC_ATS pReserveInAts = NULL;
#if 1
UINT8 cSwtichFalg = FUNC_SWITCH_OFF; /* 预留 下版本支持 */
#endif
#endif
if ((NULL != VitalBuf) && (NULL != pVitalLen) && (192u >= *pVitalLen))
{
initRtn = CiAppInitial();
if (1u == initRtn)
{
retVal = ENUM_CM_TRUE;
}
else
{
; /*返回失败*/
}
}
else
{
;/* 返回失败 */
}
printf("CiAppInitial ret:%x\n", retVal);
if (ENUM_CM_TRUE == retVal)
{
/* 应用初始化成功 */
/* 获取数据版本号 */
pTiocFsVersion = GetTiocFsVersion();
if (NULL != pTiocFsVersion)
{
/* 输出数据版本号 */
ShortToChar(pTiocFsVersion[0], &VitalBuf[*pVitalLen]);
*pVitalLen += 2u;
ShortToChar(pTiocFsVersion[1], &VitalBuf[*pVitalLen]);
*pVitalLen += 2u;
ShortToChar(pTiocFsVersion[2], &VitalBuf[*pVitalLen]);
*pVitalLen += 2u;
ShortToChar(pTiocFsVersion[3], &VitalBuf[*pVitalLen]);
*pVitalLen += 2u;
}
else
{
retVal = ENUM_CM_FALSE;
}
}
else
{
;/* 无处理 */
}
printf("GetTiocFsVersion ret:%x\n", retVal);
#if (kPLATFORM==kVXWORKS)
if (ENUM_CM_TRUE == retVal)
{
/* 获取自检内存 */
wAppConfigDataLen = GetTiocDeviceConfigData(szConfigDataAddr, szConfigDataLen, 200u);
/* 添加自检内存 */
if ((0u != wAppConfigDataLen) && (200u >= wAppConfigDataLen))
{
retVal = AddAppCheckData(szConfigDataAddr, szConfigDataLen, wAppConfigDataLen);
printf("AddAppCheckData1 ret:%x\n", retVal);
}
else
{
retVal = ENUM_CM_FALSE;
}
}
else
{
;/* 无处理 */
}
printf("GetTiocDeviceConfigData ret:%x\n", retVal);
if (ENUM_CM_TRUE == retVal)
{
/* 获取自检内存 */
wAppConfigDataLen = GetTiocSystemParameterData(szConfigDataAddr, szConfigDataLen, 200u);
/* 添加自检内存 */
if ((0u != wAppConfigDataLen) && (200u >= wAppConfigDataLen))
{
retVal = AddAppCheckData(szConfigDataAddr, szConfigDataLen, wAppConfigDataLen);
printf("AddAppCheckData2 ret:%x\n", retVal);
}
else
{
retVal = ENUM_CM_FALSE;
}
}
else
{
;/* 无处理 */
}
printf("GetTiocSystemParameterData ret:%x\n", retVal);
if (ENUM_CM_TRUE == retVal)
{
pIsSendExtendBoard = Is_Send_ExtendBoard;
MSCP_SetSerial(pIsSendExtendBoard);
pReserveOutVobc = SerialOutAtsVobcFunc;
MSCP_SetOutAtsVobcFunc(pReserveOutVobc);
pReserveInAts = SerialInVobcAtsFunc;
MSCP_SetInVobcAtsFunc(pReserveInAts);
#if 1
cSwtichFalg = GetCiFunctionSwitchConfig(FUNC_OC_200_INOUTNET);
if (FUNC_SWITCH_ON == cSwtichFalg)
{
/*设置协议参数*/
MSCP_ParamData(innetProtclParam, innetProtclParamLen);
}
else
{
/* 无处理 */
}
#endif
/*设置主应用任务*/
MSCP_SetAppFunc(APP_API_MainFunc, APP_API_MainFunc2, APP_API_MainFunc3, APP_API_MainFunc4, APP_API_MainFunc5);
}
#endif
return retVal;
}
/*
* @brief 提供给平台的初始化函数
* @return无
* @details
* 给平台提供FS版本号,维护ID、内网参数,系统版本号
**/
void APP_API_Data_Init()
{
UINT8 fsVersBuffer[4] = { 0u };
UINT8 appVersBuffer[4] = { 0u };
UINT8 ciToCimDataBuffer[4] = { 0u };
UINT8 deviceSum = 0u; /*通信设备数*/
UINT16* pTiocFsVersion = NULL; /*FS版本号buff*/
UINT16 ii = 0U;
UINT8 szFSFILEVersionFS[DFS_VERSION_LENGTH] = { 0 };
UINT8 funcRetVal = 0U;
funcRetVal = dquGetFSVersion(DataPath, szFSFILEVersionFS);
#if 0//(kPLATFORM==kVXWORKS)
/*文件配置*/
STRU_APP_CFG_T AppCfgInterface = {
.FS_NAME = "RCI.FS", /**< FS文件名称 */
.APP_NAME = "RCOCI", /**< 应用文件名称 */
.CYC_TIME = 300, /**< 系统周期 */
.app_num = 1, /**< app任务数 */
.M_2oo2_Enable = 0x55, /**< 2oo2功能开关 */
.M_2x2_Enable = 0x55, /**< 2x2功能开关*/
.M_InnetSafe_Enable = 0x55, /**< 内网安全通信功能开关 */
.M_InnetRaw_Enable = 0xAA, /**< 内网透传通信功能开关 */
.M_OutnetSafe_Enable = 0x55,/**< 外网安全通信功能开关 */
.M_OutnetRaw_Enable = 0x55, /**< 外网透传通信功能开关 */
.M_CpuUsageGet_Enable = 0xAA,/**< 获取cpu使用率功能开关 */
.M_RemoteUpdate_Enable = 0x55,/**< 远程部署内网安全通信功能开关 */
.ID_Maintenance = DEVICE_TYPE_AIM,
.Start_Path = "/emmc1", /**< 程序启动路径 */
.reboot_replycount = 10, /**< 重启确认报文回复次数 */
.M_AutoReboot_Count = 0, /**< 自动重启次数 */
.M_AutoClear_Days = 1, /**< 连续运行多久清空宕机次数的天数 */
.CPU[0].IP_2oo2 = "192.168.0.11", /**< 2oo2通信IP */
// .CPU[0].IP_2x2 = "192.168.1.62", /**< 2x2通信IP */
.CPU[0].IP_Out = "192.168.1.62", /**< 外网通信IP */
.CPU[0].IP_Maintain = "192.168.146.101", /**< 维护通信IP */
/*适用透传通道-选配*/
.CPU[0].IP_Com = "192.168.1.62", /**< 通用通信IP */
.CPU[0].IP_Com_Extend = "192.168.1.62",/**< 通用通信扩展IP */
.CPU[0].Logger_PortBase = 55011, /**< 明文日志记录发送端口 */
.CPU[0].Logger_PortCiphertext = 55002, /**< 暗文日志记录发送端口 */
.CPU[1].IP_2oo2 = "192.168.0.12", /**< 2oo2通信IP */
// .CPU[1].IP_2x2 = "192.168.2.62", /**< 2x2通信IP */
.CPU[1].IP_Out = "192.168.2.62", /**< 外网通信IP */
.CPU[1].IP_Maintain = "192.168.18.102", /**< 维护通信IP */
/*适用透传通道-选配*/
.CPU[1].IP_Com = "192.168.2.62", /**< 通用通信IP */
.CPU[1].IP_Com_Extend = "192.168.2.62",/**< 通用通信扩展IP */
.CPU[1].Logger_PortBase = 55012, /**< 明文日志记录发送端口 */
.CPU[1].Logger_PortCiphertext = 55002, /**< 暗文日志记录发送端口 */
.CPU[2].IP_2oo2 = "192.168.0.21", /**< 2oo2通信IP */
// .CPU[2].IP_2x2 = "192.168.1.64", /**< 2x2通信IP */
.CPU[2].IP_Out = "192.168.1.64", /**< 外网通信IP */
.CPU[2].IP_Maintain = "192.168.146.103", /**< 维护通信IP */
/*适用透传通道-选配*/
.CPU[2].IP_Com = "192.168.1.64", /**< 通用通信IP */
.CPU[2].IP_Com_Extend = "192.168.1.64",/**< 通用通信扩展IP */
.CPU[2].Logger_PortBase = 55021, /**< 明文日志记录发送端口 */
.CPU[2].Logger_PortCiphertext = 55002, /**< 暗文日志记录发送端口 */
.CPU[3].IP_2oo2 = "192.168.0.22", /**< 2oo2通信IP */
// .CPU[3].IP_2x2 = "192.168.2.64", /**< 2x2通信IP */
.CPU[3].IP_Out = "192.168.2.64", /**< 外网通信IP */
.CPU[3].IP_Maintain = "192.168.18.104", /**< 维护通信IP */
/*适用透传通道-选配*/
.CPU[3].IP_Com = "192.168.2.64", /**< 通用通信IP */
.CPU[3].IP_Com_Extend = "192.168.2.64",/**< 通用通信扩展IP */
.CPU[3].Logger_PortBase = 55022, /**< 明文日志记录发送端口 */
.CPU[3].Logger_PortCiphertext = 55002, /**< 暗文日志记录发送端口 */
/*通用端口配置*/
.Port_Outnet_Safe = 54001, /**< 外网安全通信端口 */
.Port_Innet_Safe = 53001, /**< 内网安全通信端口 */
.Port_Outnet_Raw = 54002, /**< 外网透明传输端口 */
.Port_Remote_Update = 50000, /**< 远程部署通信端口 */
/*透传配置-选配*/
.Port_Innet_Raw_Num = 0, /**< 内网透传端口数量 */
.Port_Innet_Raw_Extend_Num = 0, /**< 内网透传扩展端口数量 */
.Innet_Raw_Parameter[0].Port_Innet_Raw = 3956, /**< 内网透明传输端口 */
.Innet_Raw_Parameter[0].Port_Type_Enable = RAW_COM_UDP, /**< 内网透明tcp传输模式 */
.Innet_Raw_Parameter[0].Server_DevId = 0, /**< 服务端设备类型和id */
.Innet_Raw_Parameter[0].TIME_STAMP_ENABLE = 0XAA, /**< 2取2乘时间戳使能开关 */
.Innet_Raw_Parameter[0].INNET_2oo2_RAW = 0X55, /**< 透传通道2取开关 */
.Innet_Raw_Parameter[0].INNET_2x2_RAW = 0XAA, /**< 透传通道2乘开关 */
.Innet_Raw_Parameter[0].IP_InnetRaw_maddr = "224.0.0.31",/**< 内网透传的组播IP */
.Innet_Raw_Parameter[1].Port_Innet_Raw = 3956, /**< 内网透明传输端口 */
.Innet_Raw_Parameter[1].Port_Type_Enable = RAW_COM_UDP, /**< 内网透明tcp传输模式 */
.Innet_Raw_Parameter[1].Server_DevId = 0, /**< 服务端设备类型和id */
.Innet_Raw_Parameter[1].TIME_STAMP_ENABLE = 0XAA, /**< 2取2乘时间戳使能开关 */
.Innet_Raw_Parameter[1].INNET_2oo2_RAW = 0X55, /**< 透传通道2取开关 */
.Innet_Raw_Parameter[1].INNET_2x2_RAW = 0XAA, /**< 透传通道2乘开关 */
.Innet_Raw_Parameter[1].IP_InnetRaw_maddr = "224.0.0.32",/**< 内网透传的组播IP */
/*外网通信配置*/
.OutNetRed.CC_G_IP = "192.168.1.60", /**< 通控的内网IP */
.OutNetRed.CC_P_IP = "192.168.2.60", /**< 通控的内网IP */
.OutNetRed.EXTEND_G_IP = "192.168.1.70", /**< 扩展板卡的内网IP */
.OutNetRed.EXTEND_P_IP = "192.168.2.70", /**< 扩展板卡的内网IP */
.OutNetRed.OutnetSafe_Port = 54001, /**< 外网安全通信端口 */
.OutNetRed.OutnetRaw_Port = 54002, /**< 外网透传通信端口 */
.OutNetRed.InnetRaw_Port = 53003, /**< 内网透传通信端口 */
.OutNetBlue.CC_G_IP = "192.168.1.61", /**< 通控的内网IP */
.OutNetBlue.CC_P_IP = "192.168.2.61", /**< 通控的内网IP */
.OutNetBlue.EXTEND_G_IP = "192.168.1.71", /**< 扩展板卡的内网IP */
.OutNetBlue.EXTEND_P_IP = "192.168.2.71", /**< 扩展板卡的内网IP */
.OutNetBlue.OutnetSafe_Port = 54001, /**< 外网安全通信端口 */
.OutNetBlue.OutnetRaw_Port = 54002, /**< 外网透传通信端口 */
.OutNetBlue.InnetRaw_Port = 53003, /**< 内网透传通信端口 */
/*日志记录目标设备IP配置*/
.Logger_G_IP = "192.168.146.100", /**< 绿网日志记录IP */
.Logger_P_IP = "192.168.18.100", /**< 紫网日志记录IP */
/*内网通信设备注册最大支持0-255*/
.INNET_COM_NUM = 1, /**< 内网通信设备数量 */
.INNET_COM_CFG[0].InnetID = DEVICE_TYPE_AIM, /**< 内网通信ID */
.INNET_COM_CFG[0].IP_G = (CM_UINT32)inet_addr("192.168.146.100"),/**< 绿网IP */
.INNET_COM_CFG[0].Port_Raw_G = 55004, /**< 绿网透传端口 */
.INNET_COM_CFG[0].Port_Safe_G = 55003, /**< 绿网安全端口 */
.INNET_COM_CFG[0].IP_P = (CM_UINT32)inet_addr("192.168.18.100"),/**< 紫网IP */
.INNET_COM_CFG[0].Port_Raw_P = 55004, /**< 紫网透传端口 */
.INNET_COM_CFG[0].Port_Safe_P = 55003, /**< 紫网安全端口 */
};
MSCP_Set_APP_ConfigData(&AppCfgInterface);
#else
/*↑↑用户初始化代码↑↑*/
/*↓↓基本数据初始化配置示例↓↓*/
STRU_APP_CFG_T AppCfgInterface = {
.FS_NAME = "RCI.FS", /**< FS文件名称 */
.APP_NAME = "RCOCI", /**< 应用文件名称 */
.CYC_TIME = 300, /**< 系统周期(ms */
.app_num = 1, /**< app任务数1-4 */
.M_2oo2_Enable = 0x55, /**< 2oo2功能开关,开0x55,关0xAA */
.M_2x2_Enable = 0x55, /**< 2x2功能开关,开0x55,关0xAA*/
.M_4x2_Enable = 0x55, /**< 4x2功能开关,开0x55,关0xAA*/
.M_Arb_Enable = 0x55, /**< 仲裁功能开关 */
.M_2x2_Com_Cfg = 0x00, /**< 2x2通信功能配置,串口0x00,网卡0x01*/
.M_InnetSafe_Enable = 0x55, /**< 内网安全通信功能开关,开0x55,关0xAA */
.M_InnetRaw_Enable = 0x55, /**< 内网透传通信功能开关,开0x55,关0xAA */
.M_OutnetSafe_Enable = 0x55,/**< 外网安全通信功能开关,开0x55,关0xAA */
.M_OutnetRaw_Enable = 0x55, /**< 外网透传通信功能开关,开0x55,关0xAA */
.M_CpuUsageGet_Enable = 0xAA,/**< 外网透传通信功能开关,开0x55,关0xAA */
.M_RemoteUpdate_Enable = 0xAA,/**< 远程部署内网安全通信功能开关,开0x55,关0xAA */
.ID_Maintenance = 0xF800, /**< 设置维护终端ID */
.Start_Path = "./emmc1", /**< 程序启动路径 */
.reboot_replycount = 10, /**< 重启确认报文回复次数 */
.M_AutoReboot_Count = 0, /**< 自动重启次数 */
.M_AutoClear_Days = 1, /**< 连续运行多久清空宕机次数的天数 */
/*CPU1-1 IP配置*/
.CPU[0].IP_2oo2 = "192.168.0.11", /**< 2oo2通信IP */
.CPU[0].IP_4x2 = "192.168.1.62", /**< 2x2通信IP */
.CPU[0].IP_Out = "192.168.1.62", /**< 外网通信IP */
.CPU[0].IP_Maintain = "192.168.146.101", /**< 维护通信IP */
.CPU[0].IP_Area = "10.3.1.61", /**< 4x2通信IP */
.CPU[0].IP_Sync_Time_A = "192.168.1.62", /**< 时间同步网络A网IP */
.CPU[0].IP_Sync_Time_B = "10.3.1.61", /**< 时间同步网络B网IP */
/*CPU1-1适用透传通道-选配*/
.CPU[0].IP_Com = "192.168.1.62", /**< 通用通信IP */
.CPU[0].IP_Com_Extend = "192.168.1.62",/**< 通用通信扩展IP */
.CPU[0].Logger_PortBase = 55011, /**< 明文日志记录发送端口 */
.CPU[0].Logger_PortCiphertext = 55002, /**< 暗文日志记录发送端口 */
/*CPU1-2 IP配置*/
.CPU[1].IP_2oo2 = "192.168.0.12", /**< 2oo2通信IP */
.CPU[1].IP_4x2 = "192.168.2.62", /**< 2x2通信IP */
.CPU[1].IP_Out = "192.168.2.62", /**< 外网通信IP */
.CPU[1].IP_Maintain = "192.168.18.102", /**< 维护通信IP */
.CPU[1].IP_Area = "10.3.1.63", /**< 4x2通信IP */
.CPU[1].IP_Sync_Time_A = "192.168.2.62", /**< 时间同步网络A网IP */
.CPU[1].IP_Sync_Time_B = "10.3.1.63", /**< 时间同步网络B网IP */
/*CPU1-2适用透传通道-选配*/
.CPU[1].IP_Com = "192.168.2.62", /**< 通用通信IP */
.CPU[1].IP_Com_Extend = "192.168.2.62",/**< 通用通信扩展IP */
.CPU[1].Logger_PortBase = 55012, /**< 明文日志记录发送端口 */
.CPU[1].Logger_PortCiphertext = 55002, /**< 暗文日志记录发送端口 */
/*CPU2-1 IP配置*/
.CPU[2].IP_2oo2 = "192.168.0.11", /**< 2oo2通信IP */
.CPU[2].IP_4x2 = "192.168.1.64", /**< 2x2通信IP */
.CPU[2].IP_Out = "192.168.1.64", /**< 外网通信IP */
.CPU[2].IP_Maintain = "192.168.146.103", /**< 维护通信IP */
.CPU[2].IP_Area = "10.4.1.62", /**< 4x2通信IP */
.CPU[2].IP_Sync_Time_A = "192.168.1.64", /**< 时间同步网络A网IP */
.CPU[2].IP_Sync_Time_B = "10.4.1.62", /**< 时间同步网络B网IP */
/*CPU2-1适用透传通道-选配*/
.CPU[2].IP_Com = "192.168.1.64", /**< 通用通信IP */
.CPU[2].IP_Com_Extend = "192.168.1.64",/**< 通用通信扩展IP */
.CPU[2].Logger_PortBase = 55021, /**< 明文日志记录发送端口 */
.CPU[2].Logger_PortCiphertext = 55002, /**< 暗文日志记录发送端口 */
/*CPU2-2 IP配置*/
.CPU[3].IP_2oo2 = "192.168.0.12", /**< 2oo2通信IP */
.CPU[3].IP_4x2 = "192.168.2.64", /**< 2x2通信IP */
.CPU[3].IP_Out = "192.168.2.64", /**< 外网通信IP */
.CPU[3].IP_Maintain = "192.168.18.104", /**< 维护通信IP */
.CPU[3].IP_Area = "10.4.1.64", /**< 4x2通信IP */
.CPU[3].IP_Sync_Time_A = "192.168.2.64", /**< 时间同步网络A网IP */
.CPU[3].IP_Sync_Time_B = "10.4.1.64", /**< 时间同步网络B网IP */
/*CPU2-2适用透传通道-选配*/
.CPU[3].IP_Com = "192.168.2.64", /**< 通用通信IP */
.CPU[3].IP_Com_Extend = "192.168.2.64",/**< 通用通信扩展IP */
.CPU[3].Logger_PortBase = 55022, /**< 明文日志记录发送端口 */
.CPU[3].Logger_PortCiphertext = 55002, /**< 暗文日志记录发送端口 */
/*CPU3-1 IP配置*/
.CPU[4].IP_2oo2 = "192.168.0.11", /**< 2oo2通信IP */
.CPU[4].IP_4x2 = "192.168.1.162", /**< 2x2通信IP */
.CPU[4].IP_Out = "192.168.1.162", /**< 外网通信IP */
.CPU[4].IP_Maintain = "192.168.146.201", /**< 维护通信IP */
.CPU[4].IP_Area = "10.3.1.161", /**< 4x2通信IP */
.CPU[4].IP_Sync_Time_A = "192.168.1.162", /**< 时间同步网络A网IP */
.CPU[4].IP_Sync_Time_B = "10.3.1.161", /**< 时间同步网络B网IP */
/*CPU3-1适用透传通道-选配*/
.CPU[4].IP_Com = "192.168.1.162", /**< 通用通信IP */
.CPU[4].IP_Com_Extend = "192.168.1.162",/**< 通用通信扩展IP */
.CPU[4].Logger_PortBase = 55031, /**< 明文日志记录发送端口 */
.CPU[4].Logger_PortCiphertext = 55002, /**< 暗文日志记录发送端口 */
/*CPU3-2 IP配置*/
.CPU[5].IP_2oo2 = "192.168.0.12", /**< 2oo2通信IP */
.CPU[5].IP_4x2 = "192.168.2.162", /**< 2x2通信IP */
.CPU[5].IP_Out = "192.168.2.162", /**< 外网通信IP */
.CPU[5].IP_Maintain = "192.168.18.202", /**< 维护通信IP */
.CPU[5].IP_Area = "10.3.1.163", /**< 4x2通信IP */
.CPU[5].IP_Sync_Time_A = "192.168.2.162", /**< 时间同步网络A网IP */
.CPU[5].IP_Sync_Time_B = "10.3.1.163", /**< 时间同步网络B网IP */
/*CPU3-2适用透传通道-选配*/
.CPU[5].IP_Com = "192.168.2.162", /**< 通用通信IP */
.CPU[5].IP_Com_Extend = "192.168.2.162",/**< 通用通信扩展IP */
.CPU[5].Logger_PortBase = 55032, /**< 明文日志记录发送端口 */
.CPU[5].Logger_PortCiphertext = 55002, /**< 暗文日志记录发送端口 */
/*CPU4-1 IP配置*/
.CPU[6].IP_2oo2 = "192.168.0.11", /**< 2oo2通信IP */
.CPU[6].IP_4x2 = "192.168.1.164", /**< 2x2通信IP */
.CPU[6].IP_Out = "192.168.1.164", /**< 外网通信IP */
.CPU[6].IP_Maintain = "192.168.146.203", /**< 维护通信IP */
.CPU[6].IP_Area = "10.4.1.162", /**< 4x2通信IP */
.CPU[6].IP_Sync_Time_A = "192.168.1.164", /**< 时间同步网络A网IP */
.CPU[6].IP_Sync_Time_B = "10.4.1.162", /**< 时间同步网络B网IP */
/*CPU4-1适用透传通道-选配*/
.CPU[6].IP_Com = "192.168.1.164", /**< 通用通信IP */
.CPU[6].IP_Com_Extend = "192.168.1.164",/**< 通用通信扩展IP */
.CPU[6].Logger_PortBase = 55041, /**< 明文日志记录发送端口 */
.CPU[6].Logger_PortCiphertext = 55002, /**< 暗文日志记录发送端口 */
/*CPU4-2 IP配置*/
.CPU[7].IP_2oo2 = "192.168.0.12", /**< 2oo2通信IP */
.CPU[7].IP_4x2 = "192.168.2.164", /**< 2x2通信IP */
.CPU[7].IP_Out = "192.168.2.164", /**< 外网通信IP */
.CPU[7].IP_Maintain = "192.168.18.204", /**< 维护通信IP */
.CPU[7].IP_Area = "10.4.1.164", /**< 4x2通信IP */
.CPU[7].IP_Sync_Time_A = "192.168.2.164", /**< 时间同步网络A网IP */
.CPU[7].IP_Sync_Time_B = "10.4.1.164", /**< 时间同步网络B网IP */
/*CPU4-2适用透传通道-选配*/
.CPU[7].IP_Com = "192.168.2.164", /**< 通用通信IP */
.CPU[7].IP_Com_Extend = "192.168.2.164",/**< 通用通信扩展IP */
.CPU[7].Logger_PortBase = 55042, /**< 明文日志记录发送端口 */
.CPU[7].Logger_PortCiphertext = 55002, /**< 暗文日志记录发送端口 */
/*组播地址配置*/
.IP_Area_G_Multicast = "239.0.0.10", /**< 组播通信IP */
.IP_Area_P_Multicast = "239.0.0.20", /**< 组播通信IP */
.Multicast_Flag = 1u, /**< 单播:0 组播:1 */
/*通用端口配置,平台固定通信端口禁止使用:51001、51002、51003、52001、52002、52003*/
.Port_Outnet_Safe = 54001, /**< 外网安全通信端口 */
.Port_Innet_Safe = 53001, /**< 内网安全通信端口 */
.Port_Outnet_Raw = 54002, /**< 外网透明传输端口 */
.Port_Remote_Update = 50000, /**< 远程部署通信端口 */
/*透传配置-选配*/
.Port_Innet_Raw_Num = 1, /**< 内网透传端口数量0-9 */
.Port_Innet_Raw_Extend_Num = 1, /**< 内网透传扩展端口数量0-9 */
/*透传通道-Number 1根据数量两个通道的数量,按序号累加以此类推(0-17)*/
.Innet_Raw_Parameter[0].Port_Innet_Raw = 3956, /**< 内网透明传输端口 */
.Innet_Raw_Parameter[0].Port_Type_Enable = RAW_COM_UDP, /**< 内网透明UDP传输模式 */
.Innet_Raw_Parameter[0].Server_DevId = 0, /**< 服务端设备类型和id */
.Innet_Raw_Parameter[0].TIME_STAMP_ENABLE = 0XAA, /**< 2取2乘时间戳使能开关 */
.Innet_Raw_Parameter[0].INNET_2oo2_RAW = 0X55, /**< 透传通道2取开关,开0x55,关0xAA */
.Innet_Raw_Parameter[0].INNET_2x2_RAW = 0XAA, /**< 透传通道2乘开关,开0x55,关0xAA */
.Innet_Raw_Parameter[0].IP_InnetRaw_maddr = "224.0.0.31",/**< 内网透传的组播IP */
/*扩展通道-Number 1 根据数量两个通道的数量,按序号累加以此类推(0-17)*/
.Innet_Raw_Parameter[1].Port_Innet_Raw = 3957, /**< 内网透明传输端口 */
.Innet_Raw_Parameter[1].Port_Type_Enable = RAW_COM_BROADCAST, /**< 内网透明广播传输模式 */
.Innet_Raw_Parameter[1].Server_DevId = 0, /**< 服务端设备类型和id */
.Innet_Raw_Parameter[1].TIME_STAMP_ENABLE = 0XAA, /**< 2取2乘时间戳使能开关 */
.Innet_Raw_Parameter[1].INNET_2oo2_RAW = 0X55, /**< 透传通道2取开关,开0x55,关0xAA */
.Innet_Raw_Parameter[1].INNET_2x2_RAW = 0XAA, /**< 透传通道2乘开关,开0x55,关0xAA */
.Innet_Raw_Parameter[1].IP_InnetRaw_maddr = "224.0.0.32",/**< 内网透传的组播IP */
/*外网通信配置-红网*/
.OutNetRed.CC_G_IP_A = "192.168.1.60", /**< 通控的内网IP */
.OutNetRed.CC_P_IP_A = "192.168.2.60", /**< 通控的内网IP */
.OutNetRed.CC_G_IP_B = "192.168.1.160", /**< 通控的内网IP */
.OutNetRed.CC_P_IP_B = "192.168.2.160", /**< 通控的内网IP */
.OutNetRed.EXTEND_G_IP_A = "192.168.1.70", /**< 扩展板卡的内网IP */
.OutNetRed.EXTEND_P_IP_A = "192.168.2.70", /**< 扩展板卡的内网IP */
.OutNetRed.EXTEND_G_IP_B = "192.168.1.71", /**< 扩展板卡的内网IP */
.OutNetRed.EXTEND_P_IP_B = "192.168.2.71", /**< 扩展板卡的内网IP */
.OutNetRed.OutnetSafe_Port = 54001, /**< 外网安全通信端口 */
.OutNetRed.OutnetRaw_Port = 54002, /**< 外网透传通信端口 */
/*外网通信配置-蓝网*/
.OutNetBlue.CC_G_IP_A = "192.168.1.61", /**< 通控的内网IP */
.OutNetBlue.CC_P_IP_A = "192.168.2.61", /**< 通控的内网IP */
.OutNetBlue.CC_G_IP_B = "192.168.1.161", /**< 通控的内网IP */
.OutNetBlue.CC_P_IP_B = "192.168.2.161", /**< 通控的内网IP */
.OutNetBlue.EXTEND_G_IP_A = "192.168.1.170", /**< 扩展板卡的内网IP */
.OutNetBlue.EXTEND_P_IP_A = "192.168.2.170", /**< 扩展板卡的内网IP */
.OutNetBlue.EXTEND_G_IP_B = "192.168.1.171", /**< 扩展板卡的内网IP */
.OutNetBlue.EXTEND_P_IP_B = "192.168.2.171", /**< 扩展板卡的内网IP */
.OutNetBlue.OutnetSafe_Port = 54001, /**< 外网安全通信端口 */
.OutNetBlue.OutnetRaw_Port = 54002, /**< 外网透传通信端口 */
/*日志记录目标设备IP配置*/
.Logger_G_IP_A = "192.168.146.100", /**< A地绿网日志记录IP */
.Logger_P_IP_A = "192.168.18.100", /**< A地紫网日志记录IP */
.Logger_G_IP_B = "192.168.146.200", /**< B地绿网日志记录IP */
.Logger_P_IP_B = "192.168.18.200", /**< B地绿网日志记录IP */
/*内网通信设备注册最大支持0-255,注意:IP配置方式比较特别,与前面配置区分*/
.INNET_COM_NUM = 1, /**< 内网通信设备数量0-255 */
.INNET_COM_CFG[0].InnetID = 0xF800, /**< 内网通信ID */
.INNET_COM_CFG[0].IP_G = (CM_UINT32)inet_addr("172.25.0.100"),/**< 绿网IP*/
.INNET_COM_CFG[0].Port_Raw_G = 55003, /**< 绿网透传端口 */
.INNET_COM_CFG[0].Port_Safe_G = 55004, /**< 绿网安全端口 */
.INNET_COM_CFG[0].IP_P = (CM_UINT32)inet_addr("172.17.0.100"),/**< 紫网IP */
.INNET_COM_CFG[0].Port_Raw_P = 55003, /**< 紫网透传端口 */
.INNET_COM_CFG[0].Port_Safe_P = 55004, /**< 紫网安全端口 */
/*第三方仲裁通信配置*/
.Arb_CFG.IP_Arb_G = "10.3.1.200",
.Arb_CFG.IP_Arb_P = "10.4.1.200",
};
/*调用参数设置初始化接口*/
MSCP_Set_APP_ConfigData(&AppCfgInterface);
#endif
/*组FS版本号*/
ii = 0U;
fsVersBuffer[ii++] = szFSFILEVersionFS[0];
fsVersBuffer[ii++] = szFSFILEVersionFS[1];
fsVersBuffer[ii++] = szFSFILEVersionFS[2];
fsVersBuffer[ii++] = szFSFILEVersionFS[3];
/*组软件版本号*/
ii = 0U;
appVersBuffer[ii++] = VER_SOFT_PRODUCT;
appVersBuffer[ii++] = VER_SOFT_MODUAL_APP >> 2U;
appVersBuffer[ii++] = (VER_SOFT_MODUAL_APP << 6U) + (VER_SOFT_MIANVERSION & (UINT8)0x3F);
appVersBuffer[ii++] = VER_SOFT_SUBVERSION;
/*设置平台调用获取外网信息函数*/
MSCP_SetSrcId(SetOutNetPara);
/*设置内网参数*/
MSCP_SetSfpInnetPara(g_SfpInnetParam);
MSCP_SetAppVersion(appVersBuffer);
MSCP_SetFsVersion(fsVersBuffer);
}
/**
* @brief 应用周期主逻辑
* @return ENUM_CM_RETURN 函数执行结果
* - ENUM_CM_TRUE 成功
* - ENUM_CM_FALSE 失败(平台立即宕机)
* @details
* 当本系热备状态为:ENUM_4x2_SHUTDOWN,时
* 本函数不执行;
* 当本系热备状态为:ENUM_4x2_OFFLINEENUM_4x2_PRE_MASTERENUM_4x2_SLAVE,时
* 本函数被周期执行,但 ENUM_MSG_OUTNET_SAFE 报文不会真实输出;
* 当本系热备状态为:ENUM_4x2_MASTER,时
* 本函数被周期执行,并且所有输出信息被真实输出。
*/
ENUM_CM_RETURN APP_API_MainFunc(void)
{
ENUM_CM_RETURN retVal = ENUM_CM_FALSE;
CM_UINT64 startCycTick = 0u;
CM_UINT64 endCycTick = 0u;
startCycTick = MSCP_GetTick();
debug_infor_printf("app proc start at %llu us\n", startCycTick);
if (1 == MainProcess())
{
retVal = ENUM_CM_TRUE;
}
else
{
debug_infor_printf("app proc err\n");
}
endCycTick = MSCP_GetTick();
debug_infor_printf("app proc end at %llu us,used %d us\n", endCycTick, (CM_INT32)((endCycTick - startCycTick) / 1000));
//gFollowDataLen = GetCiAppData(gFollowData);
memset(gFollowData,0x02,1024*500);
MSCP_SetFollowData(gFollowData, 1024*500);
return retVal;
}
/**
* @brief 应用周期主逻辑2
* @return ENUM_CM_RETURN 函数执行结果
* - ENUM_CM_TRUE 成功
* - ENUM_CM_FALSE 失败(平台立即宕机)
* @details
* 当本系热备状态为:ENUM_4x2_SHUTDOWN,时
* 本函数不执行;
* 当本系热备状态为:ENUM_4x2_OFFLINEENUM_4x2_PRE_MASTERENUM_4x2_SLAVE,时
* 本函数被周期执行,但 ENUM_MSG_OUTNET_SAFE 报文不会真实输出;
* 当本系热备状态为:ENUM_4x2_MASTER,时
* 本函数被周期执行,并且所有输出信息被真实输出。
*/
ENUM_CM_RETURN APP_API_MainFunc2(void)
{
/*MSCP_LogMsg("app2\n");*/
/*CM_Sleep(50u);*/
return ENUM_CM_TRUE;
}
/**
* @brief 应用周期主逻辑3
* @return ENUM_CM_RETURN 函数执行结果
* - ENUM_CM_TRUE 成功
* - ENUM_CM_FALSE 失败(平台立即宕机)
* @details
* 当本系热备状态为:ENUM_4x2_SHUTDOWN,时
* 本函数不执行;
* 当本系热备状态为:ENUM_4x2_OFFLINEENUM_4x2_PRE_MASTERENUM_4x2_SLAVE,时
* 本函数被周期执行,但 ENUM_MSG_OUTNET_SAFE 报文不会真实输出;
* 当本系热备状态为:ENUM_4x2_MASTER,时
* 本函数被周期执行,并且所有输出信息被真实输出。
*/
ENUM_CM_RETURN APP_API_MainFunc3(void)
{
/*MSCP_LogMsg("app3\n");*/
/*CM_Sleep(50u);*/
return ENUM_CM_TRUE;
}
ENUM_CM_RETURN APP_API_MainFunc4(void)
{
/*MSCP_LogMsg("app3\n");*/
/*CM_Sleep(50u);*/
return ENUM_CM_TRUE;
}
/**
* @brief 应用周期主逻辑5
* @return ENUM_CM_RETURN 函数执行结果
* - ENUM_CM_TRUE 成功
* - ENUM_CM_FALSE 失败(平台立即宕机)
* @details
* 当本系热备状态为:ENUM_4x2_SHUTDOWN,时
* 本函数不执行;
* 当本系热备状态为:ENUM_4x2_OFFLINEENUM_4x2_PRE_MASTERENUM_4x2_SLAVE,时
* 本函数被周期执行,但 ENUM_MSG_OUTNET_SAFE 报文不会真实输出;
* 当本系热备状态为:ENUM_4x2_MASTER,时
* 本函数被周期执行,并且所有输出信息被真实输出。
*/
ENUM_CM_RETURN APP_API_MainFunc5(void)
{
/*MSCP_LogMsg("app3\n");*/
/*CM_Sleep(50u);*/
return ENUM_CM_TRUE;
}
ENUM_CM_RETURN APP_API_MainFunc6(void)
{
/*MSCP_LogMsg("app3\n");*/
/*CM_Sleep(50u);*/
return ENUM_CM_TRUE;
}
/**
* @brief 应用输入处理逻辑
* @return ENUM_CM_RETURN 函数执行结果
* - ENUM_CM_TRUE 成功
* - ENUM_CM_FALSE 失败(平台立即宕机)
* @note
* 本函数在平台线程的输入阶段被调用
* 注意平台线程在第N周期接收的输入数据,应用线程在第N+1周期才能读取到
*/
ENUM_CM_RETURN APP_API_InputFunc(void)
{
return ENUM_CM_TRUE;
}
/**
* @brief 备系跟随接口
* @param Data 跟随数据数组
* @param Len 跟随数据长度
* @return ENUM_CM_RETURN 函数执行结果
* - ENUM_CM_TRUE 成功
* - ENUM_CM_FALSE 失败(平台立即宕机)
* @details
* 当本系热备状态为:ENUM_4x2_OFFLINEENUM_4x2_SLAVE,且收到了邻系正确的跟随数据时
* 本函数将在APP_API_MainFunc()之前执行;
* 否则,本函数不执行。
* 应用跟随数据的最大长度不得超过1024*1000字节
* @see :: MSCP_SetFollowData
*/
ENUM_CM_RETURN APP_API_FollowUp(IN const CM_UINT8 Data[MSCP_FOLLOW_BUFF_SIZE], IN CM_UINT32 Len)
{
ENUM_CM_RETURN retVal = ENUM_CM_FALSE;
UINT8 setRtn = 0u;
//setRtn = SetCiAppData(Data, Len);
setRtn = 1;
if (1u == setRtn)
{
retVal = ENUM_CM_TRUE;
}
return retVal;
}
ENUM_CM_RECCUSEB Is_Send_ExtendBoard(IN const CM_UINT16 dstDevTypeId)
{
ENUM_CM_RECCUSEB retVal = ENUM_CM_CC; /*返回值*/
CM_UINT8 devType = 0U; /*设备类型*/
CM_UINT8 devId = 0U; /*设备ID*/
CM_UINT16 wAtsGtWayDevTypeId = 0U;
UINT8 chLocalCiType = 0U; /*本联锁属性*/
UINT8 chDstCiType = 0U; /*本联锁属性*/
UINT8 chCldScxCommMode = 0U;
UINT8 chResult = CI_ERROR; /*联锁属性检查结果*/
wAtsGtWayDevTypeId = GetTiocTrnsmtGtwyDevTypeId();
/**使用通控板与ATS网关通信*/
if (dstDevTypeId != wAtsGtWayDevTypeId)
{
devType = (CM_UINT8)((dstDevTypeId >> 8) & 0xFF);
devId = (CM_UINT8)(dstDevTypeId & 0xFF);
chLocalCiType = GetLocalCiType();
chDstCiType = GetCiType(devId);
chCldScxCommMode = GetCiFunctionSwitchConfig(SCX_CLD_INTERFACE_TYPE);
if ((SCX_CLD_SERIAL_PORT_COMM == chCldScxCommMode) && (CI_SYSTEM_TYPE_CI == devType))
{
if (((CI_TYPE_CLD == chLocalCiType) && (CI_TYPE_SCX == chDstCiType)) || ((CI_TYPE_SCX == chLocalCiType) && (CI_TYPE_CLD == chDstCiType)))
{
/*串口通信要求双方一个为车辆段一个为试车线*/
chResult = CI_SUCCESS;
}
else
{
; /*CI类型错误,返回失败*/
}
}
else
{
; /*不为串口通信,此时不对本地CI类型及对方CI类型进行判断*/
}
if ((CI_SYSTEM_TYPE_XIANDI == devType) || (CI_SYSTEM_TYPE_ATS == devType) || (CI_SYSTEM_TYPE_LEU == devType)
|| (CI_SUCCESS == chResult)
|| (CI_SYSTEM_TYPE_VOBC_BACKUP == devType)) /*现地,ATS,LEU,使用串口的相邻CI*/
{
retVal = ENUM_CM_SEB;
}
else
{
retVal = ENUM_CM_CC;
}
}
else
{
retVal = ENUM_CM_CC;
}
return retVal;
}
/*
* @func: 外网输入ID 红蓝网类型及ID缓存
* @param void
* @return VOID
*/
void SetOutNetPara(UINT8* pRxBuf, UINT32 dwLen, ENUM_OUTNET_CHN_T chOutNetType, UINT16* pOutBuf, INOUT UINT16* pCurLen)
{
UINT16 wSrcId = 0U;
UINT32 dwTmpLen = 0U;
UINT16 tmpAppLen = 0U;
UINT16 objLen = 0U;
UINT16 tempLen = 0U;
UINT16 ii = 0U;
UINT16 gTransmitObjTypeId[TRANSMIT_OBJECT_SUM_MAX * TRANSMIT_OBJECT_DEVICE_SUM_MAX] = { 0U };
if ((NULL != pRxBuf) && (NULL != pOutBuf) && (NULL != pCurLen))
{
if ((ENUM_OUTNET_RED == chOutNetType) || (ENUM_OUTNET_EXTEND_RED == chOutNetType)
|| (ENUM_OUTNET_BLUE == chOutNetType) || (ENUM_OUTNET_EXTEND_BLUE == chOutNetType))
{
while (dwTmpLen < dwLen)
{
tmpAppLen = ShortFromChar(&pRxBuf[dwTmpLen]);
if ((tmpAppLen + 2) <= (dwLen - dwTmpLen))
{
wSrcId = ShortFromChar(&pRxBuf[dwTmpLen + 2]);
dwTmpLen += (tmpAppLen + 2);
/*去重*/
for (ii = 0U; ii < objLen; ii++)
{
if (gTransmitObjTypeId[ii] == wSrcId)
{
break;
}
}
if ((ii == objLen) && (TRANSMIT_OBJECT_SUM_MAX * TRANSMIT_OBJECT_DEVICE_SUM_MAX > objLen))
{
gTransmitObjTypeId[objLen++] = wSrcId;
}
}
else
{
break;
}
}
tempLen = *pCurLen;
if ((TRANSMIT_OBJECT_SUM_MAX * TRANSMIT_OBJECT_DEVICE_SUM_MAX) > (tempLen + objLen))
{
CommonMemCpy(&pOutBuf[tempLen], objLen * sizeof(UINT16), \
gTransmitObjTypeId, objLen * sizeof(UINT16));
*pCurLen = tempLen + objLen;
debug_infor_printf("outnet in type len :%d", chOutNetType, objLen);
debug_out_array(0xAA, gTransmitObjTypeId, objLen * sizeof(UINT16));
}
}
else
{
;
}
}
else
{
printf("buf Null\n");
}
}
#if (kPLATFORM==kVXWORKS)
/*
* 功能描述: 处理平台网络数据类型信息
* 参数说明: void
* 返回值 void
*/
void ProcessPlatformNetData(void)
{
UINT16 ii = 0U;
UINT16 wSrcId = 0U;
UINT16 gRedTransmitObjTypeId[TRANSMIT_OBJECT_SUM_MAX * TRANSMIT_OBJECT_DEVICE_SUM_MAX] = { 0U };
UINT16 gBlueTransmitObjTypeId[TRANSMIT_OBJECT_SUM_MAX * TRANSMIT_OBJECT_DEVICE_SUM_MAX] = { 0U };
MSCP_GetRciTempBuf(gRedTransmitObjTypeId, gBlueTransmitObjTypeId);
debug_infor_printf("\nRED type in cycle:%d", Get2oo2CurCycleNum());
debug_out_array(0xAA, gRedTransmitObjTypeId, TRANSMIT_OBJECT_SUM_MAX * TRANSMIT_OBJECT_DEVICE_SUM_MAX * sizeof(UINT16));
debug_infor_printf("\nBlue type in cycle:%d", Get2oo2CurCycleNum());
debug_out_array(0xAA, gBlueTransmitObjTypeId, TRANSMIT_OBJECT_SUM_MAX * TRANSMIT_OBJECT_DEVICE_SUM_MAX * sizeof(UINT16));
for (ii = 0; ii < TRANSMIT_OBJECT_SUM_MAX * TRANSMIT_OBJECT_DEVICE_SUM_MAX; ii++)
{
wSrcId = gRedTransmitObjTypeId[ii];
SetCiTrnsmitCycNumByNetType((UINT8)(wSrcId >> 8U), (UINT8)(wSrcId & 0x00ffU), TRANSMIT_NET_ATC_RED);
wSrcId = gBlueTransmitObjTypeId[ii];
SetCiTrnsmitCycNumByNetType((UINT8)(wSrcId >> 8U), (UINT8)(wSrcId & 0x00ffU), TRANSMIT_NET_ATC_BLUE);
}
}
ENUM_CM_RETURN AddOneAppCheckData(IN const UINT32 dwDataAddr, IN const UINT16 wDataLen)
{
ENUM_CM_RETURN retVal = ENUM_CM_FALSE; /*返回值*/
CM_UINT32* pTmpDataAdder = NULL;
CM_UINT32 wTmpDataLen = 0u;
pTmpDataAdder = (CM_UINT32*)dwDataAddr;
wTmpDataLen = (CM_UINT32)wDataLen;
if ((NULL != pTmpDataAdder) && (0u != wTmpDataLen))
{
MSCP_MemCheck_Register(pTmpDataAdder, wTmpDataLen);
retVal = ENUM_CM_TRUE;
}
return retVal;
}
ENUM_CM_RETURN AddAppCheckData(UINT32* pConfigDataAdderBuf, UINT16* pConfigDataLenBuf, UINT16 wDataLen)
{
ENUM_CM_RETURN retVal = ENUM_CM_FALSE; /*返回值*/
UINT16 i = 0u;
if ((NULL != pConfigDataAdderBuf) && (NULL != pConfigDataLenBuf) && (0u != wDataLen) && (UINT16_MAX != wDataLen))
{
for (i = 0u; i < wDataLen; i++)
{
retVal = AddOneAppCheckData(pConfigDataAdderBuf[i], pConfigDataLenBuf[i]);
if (ENUM_CM_TRUE != retVal)
{
break;
}
else
{
;/* 无处理 */
}
}
}
else
{
;/* 返回失败 */
}
return retVal;
}
#endif
/*
* 功能描述: 退出运营处理,设置板卡退出
* 参数说明: void
* 返回值 void
*/
void APP_API_ExitOperation(void)
{
UINT8 chExitOpStatus = 0U;
/*退出运营处理*/
Deploy_ExitOperationHandle();
chExitOpStatus = Deploy_GetExitOperateStatus();
if (EXIT_OP_STATUS == chExitOpStatus)
{
MSCP_SetBoardState(ENUM_BOARDSTATE_EXIT); /*设置板卡退出*/
debug_infor_printf("Tell TSCP I AM INTO EXTOPRATION!\n");
}
else
{
/*- 不处理*/
debug_infor_printf("Tell TSCP I AM STAYOPRATION!\n");
}
}
/**
* @brief 输出ats转车数据备用通道判断函数(串口扩展版)。
* @param UINT16 inSrcId UINT16 outSrcId ,UINT16 outDstId
* @details 此函数指针为一个返回值,三个参数。
* 返回值ENUM_CM_RETURN 0x55或0xaa
* 参数1入参CM_UINT16 输入目标Id
* 参数2出参CM_UINT16* 输出源Id
* 参数3出参CM_UINT16* 输出目的Id
*/
ENUM_CM_RETURN SerialOutAtsVobcFunc(UINT16 inDstId IN, UINT16* outSrcId OUT, UINT16* outDstId OUT)
{
ENUM_CM_RETURN retVal = ENUM_CM_FALSE;
UINT8 inDstType = 0U;
inDstType = (UINT8)((inDstId & 0xff00U) >> 8);
if ((CI_SYSTEM_TYPE_VOBC_BACKUP == inDstType) || (CI_SYSTEM_TYPE_ITE == inDstType))
{
*outSrcId = (CI_SYSTEM_TYPE_CI << 8) + GetSystemParaLocalCiId();
*outDstId = GetATSInterfaceTypeId();
retVal = ENUM_CM_TRUE;
}
return retVal;
}
/**
* @brief 输入ats转车数据备用通道判断函数(串口扩展版)。
* @param UINT16 inSrcId
* @details 此函数指针为一个返回值,三个参数。
* 返回值ENUM_CM_RETURN 0x55 true或0xaa false
* 参数1入参CM_UINT16 输入源Id
*/
ENUM_CM_RETURN SerialInVobcAtsFunc(UINT16 inSrcId IN)
{
ENUM_CM_RETURN retVal = ENUM_CM_FALSE;
UINT16 atsBackUpTypeId = 0U;
atsBackUpTypeId = GetATSInterfaceTypeId();
/*判断与列车后备通道0x1300一致*/
if (atsBackUpTypeId == inSrcId)
{
retVal = ENUM_CM_TRUE;
}
return retVal;
}