|
|
|
@@ -129,52 +129,6 @@ static void SFM_2x2_Input2oo2Exchange(STRU_2X2_CTRL_T *peerCtrl);
|
|
|
|
|
static void SFM_2x2_Eth422StateDark(void);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 主要实现函数
|
|
|
|
|
void save_to_file(const char *format, ...)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
FILE *fp = NULL;
|
|
|
|
|
va_list args;
|
|
|
|
|
int result = 0;
|
|
|
|
|
|
|
|
|
|
// 检查参数有效性
|
|
|
|
|
if (format == NULL) {
|
|
|
|
|
fprintf(stderr, "Error: Invalid parameters\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 以追加模式打开文件,如果文件不存在则创建
|
|
|
|
|
fp = fopen("2xStateChange", "a");
|
|
|
|
|
if (fp == NULL) {
|
|
|
|
|
fprintf(stderr, "Error: Cannot open file \n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 获取可变参数
|
|
|
|
|
va_start(args, format);
|
|
|
|
|
|
|
|
|
|
// 将格式化的字符串写入文件
|
|
|
|
|
result = vfprintf(fp, format, args);
|
|
|
|
|
|
|
|
|
|
// 添加时间戳(可选)
|
|
|
|
|
// if (result >= 0) {
|
|
|
|
|
// time_t now;
|
|
|
|
|
// struct tm *timeinfo;
|
|
|
|
|
// char timestamp[64];
|
|
|
|
|
//
|
|
|
|
|
// time(&now);
|
|
|
|
|
// timeinfo = localtime(&now);
|
|
|
|
|
// strftime(timestamp, sizeof(timestamp), "\n[%Y-%m-%d %H:%M:%S]\n", timeinfo);
|
|
|
|
|
// fputs(timestamp, fp);
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// 清理可变参数列表
|
|
|
|
|
va_end(args);
|
|
|
|
|
|
|
|
|
|
// 关闭文件
|
|
|
|
|
fclose(fp);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 输入周期号同步函数 */
|
|
|
|
|
static void SFM_2x2_InputSysCycSyn(STRU_2X2_CTRL_T *peerCtrl){
|
|
|
|
|
if(s_2x2_Ctrl.RxInputSysCyc > peerCtrl->RxInputSysCyc)
|
|
|
|
@@ -748,14 +702,12 @@ static void s_State_Transition(void)
|
|
|
|
|
/*- 健康度正常切换为预升主 */
|
|
|
|
|
s_2x2_state_Ctrl.LocalState = ENUM_2x2_PRE_MASTER;
|
|
|
|
|
SFM_LOG_MSG_2X("Transition:2x2:INIT>>>>>>>PRE_MASTER\n");
|
|
|
|
|
save_to_file("Transition:2x2:INIT>>>>>>>PRE_MASTER\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
/*保持初始化状态*/
|
|
|
|
|
SFM_LOG_MSG_2X("Transition:2x2:INIT>>>>>>>INIT(LocalCC_Health = %d)\n",s_2x2_state_Ctrl.LocalCC_Health);
|
|
|
|
|
save_to_file("Transition:2x2:INIT>>>>>>>INIT(LocalCC_Health = %d)\n",s_2x2_state_Ctrl.LocalCC_Health);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case ENUM_2x2_OFFLINE: /*-< 离线 */
|
|
|
|
@@ -768,13 +720,11 @@ static void s_State_Transition(void)
|
|
|
|
|
{
|
|
|
|
|
s_2x2_state_Ctrl.LocalState = ENUM_2x2_SLAVE;
|
|
|
|
|
SFM_LOG_MSG_2X("Transition:2x2:OFFLINE>>>>>>>SLAVE(PartnerState is MASTER)\n");
|
|
|
|
|
save_to_file("Transition:2x2:OFFLINE>>>>>>>SLAVE(PartnerState is MASTER)\n");
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
s_2x2_state_Ctrl.LocalState = ENUM_2x2_PRE_MASTER;
|
|
|
|
|
SFM_LOG_MSG_2X("Transition:2x2:OFFLINE>>>>>>>PRE_MASTER(PartnerState != MASTER)\n");
|
|
|
|
|
save_to_file("Transition:2x2:OFFLINE>>>>>>>PRE_MASTER(PartnerState != MASTER)\n");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
@@ -792,7 +742,6 @@ static void s_State_Transition(void)
|
|
|
|
|
/*- 本系转离线 */
|
|
|
|
|
s_2x2_state_Ctrl.LocalState = ENUM_2x2_OFFLINE;
|
|
|
|
|
SFM_LOG_MSG_2X("Transition:2x2:PRE_MASTER>>>>>>>OFFLINE(Other Master)\n");
|
|
|
|
|
save_to_file("Transition:2x2:PRE_MASTER>>>>>>>OFFLINE(Other Master)\n");
|
|
|
|
|
}
|
|
|
|
|
/*- 是否是本系为B系且对系预升主 */
|
|
|
|
|
else if ((ENUM_2x2_PRE_MASTER == s_2x2_state_Ctrl.PartnerState) && ((MSCP_MAIN_B == boardID) || (MSCP_MAIN_D == boardID)))
|
|
|
|
@@ -801,7 +750,6 @@ static void s_State_Transition(void)
|
|
|
|
|
/*- 本系转离线 */
|
|
|
|
|
s_2x2_state_Ctrl.LocalState = ENUM_2x2_OFFLINE;
|
|
|
|
|
SFM_LOG_MSG_2X("Transition:2x2:PRE_MASTER>>>>>>>OFFLINE(Other A will Master)\n");
|
|
|
|
|
save_to_file("Transition:2x2:PRE_MASTER>>>>>>>OFFLINE(Other A will Master)\n");
|
|
|
|
|
}
|
|
|
|
|
/*- 预升主计时是否达到了预升主等待时间 */
|
|
|
|
|
else if (s_2x2_state_Ctrl.preMasterCounter >= (MSCP_2x2_PREMASTER_WAIT * (s_2x2_thread_Ctrl.number_Cyc - 1u)))
|
|
|
|
@@ -810,13 +758,11 @@ static void s_State_Transition(void)
|
|
|
|
|
/*- 本系升主 */
|
|
|
|
|
s_2x2_state_Ctrl.LocalState = ENUM_2x2_MASTER;
|
|
|
|
|
SFM_LOG_MSG_2X("Transition:2x2:PRE_MASTER>>>>>>>MASTER!!!(Will Master Success)\n");
|
|
|
|
|
save_to_file("Transition:2x2:PRE_MASTER>>>>>>>MASTER!!!(Will Master Success)\n");
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
/*- 保持预升主 */
|
|
|
|
|
SFM_LOG_MSG_2X("Transition:2x2:PRE_MASTER>>>>>>>PRE_MASTER(keep count = %d)\n",s_2x2_state_Ctrl.preMasterCounter);
|
|
|
|
|
save_to_file("Transition:2x2:PRE_MASTER>>>>>>>PRE_MASTER(keep count = %d)\n",s_2x2_state_Ctrl.preMasterCounter);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*- @alias 更新预升主计时器 */
|
|
|
|
@@ -848,8 +794,6 @@ static void s_State_Transition(void)
|
|
|
|
|
s_2x2_state_Ctrl.LocalState = ENUM_2x2_OFFLINE;
|
|
|
|
|
SFM_LOG_MSG_2X("Transition:2x2:MASTER>>>>>>>OFFLINE!!!(Old Data PartnerState = %d Rx:MyMicroCyc %d %d Rx:MyCyc %d %d)\n",s_2x2_state_Ctrl.PartnerState, s_2x2_state_Ctrl.RxStateMicroCyc, \
|
|
|
|
|
s_2x2_state_Ctrl.MicroCyc, s_2x2_state_Ctrl.RxStateSysCyc, s_2x2_state_Ctrl.SysCyc );
|
|
|
|
|
save_to_file("Transition:2x2:MASTER>>>>>>>OFFLINE!!!(Old Data PartnerState = %d Rx:MyMicroCyc %d %d Rx:MyCyc %d %d)\n",s_2x2_state_Ctrl.PartnerState, s_2x2_state_Ctrl.RxStateMicroCyc, \
|
|
|
|
|
s_2x2_state_Ctrl.MicroCyc, s_2x2_state_Ctrl.RxStateSysCyc, s_2x2_state_Ctrl.SysCyc );
|
|
|
|
|
/* CM_RE_ASSERT(0, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_4); */
|
|
|
|
|
}
|
|
|
|
|
else if(ENUM_2x2_MASTER == s_2x2_state_Ctrl.PartnerState)
|
|
|
|
@@ -860,14 +804,12 @@ static void s_State_Transition(void)
|
|
|
|
|
/*- 检测到对系是主系,本系宕机*/
|
|
|
|
|
s_2x2_state_Ctrl.LocalState = ENUM_2x2_SHUTDOWN;
|
|
|
|
|
SFM_LOG_MSG_2X("Transition:2x2:MASTER>>>>>>>Double MASTER!!!(Shut Down)\n");
|
|
|
|
|
save_to_file("Transition:2x2:MASTER>>>>>>>Double MASTER!!!(Shut Down)\n");
|
|
|
|
|
CM_RE_ASSERT(0, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_3);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
/*恢复上周期状态*/
|
|
|
|
|
SFM_LOG_MSG_2X("Transition:2x2:Double MASTER Recovery!!!(Last State)\n");
|
|
|
|
|
save_to_file("Transition:2x2:Double MASTER Recovery!!!(Last State)\n");
|
|
|
|
|
s_2x2_state_Ctrl.LocalState = s_2x2_state_Ctrl.LastLocalState;
|
|
|
|
|
TempState = s_2x2_state_Ctrl.LastPartnerState;
|
|
|
|
|
s_2x2_state_Ctrl.LastPartnerState = s_2x2_state_Ctrl.PartnerState;
|
|
|
|
@@ -884,7 +826,6 @@ static void s_State_Transition(void)
|
|
|
|
|
/*- 检测到对系是备系,且同步成功,主系同步失败降为跟随*/
|
|
|
|
|
s_2x2_state_Ctrl.LocalState = ENUM_2x2_OFFLINE;
|
|
|
|
|
SFM_LOG_MSG_2X("Transition:2x2:MASTER>>>>>>>OFFLINE(Health not enough)\n");
|
|
|
|
|
save_to_file("Transition:2x2:MASTER>>>>>>>OFFLINE(Health not enough)\n");
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
/*健康度切系2:本机通控通信异常*/
|
|
|
|
@@ -892,14 +833,12 @@ static void s_State_Transition(void)
|
|
|
|
|
{
|
|
|
|
|
s_2x2_state_Ctrl.LocalState = ENUM_2x2_OFFLINE;
|
|
|
|
|
SFM_LOG_MSG_2X("Transition:2x2:MASTER>>>>>>>OFFLINE(Local CC_Health not enough)\n");
|
|
|
|
|
save_to_file("Transition:2x2:MASTER>>>>>>>OFFLINE(Local CC_Health not enough)\n");
|
|
|
|
|
}
|
|
|
|
|
/*健康度切系3:本机通控通信异常,区域健康度切系,存在备地即降跟随*/
|
|
|
|
|
else if((0 == s_2x2_state_Ctrl.LocalCC_Health) && (CM_TRUE == s_2x2_state_Ctrl.Area_Slave_Is_Exist))
|
|
|
|
|
{
|
|
|
|
|
s_2x2_state_Ctrl.LocalState = ENUM_2x2_OFFLINE;
|
|
|
|
|
SFM_LOG_MSG_2X("Transition:2x2:MASTER>>>>>>>OFFLINE(Area CC_Health not enough)\n");
|
|
|
|
|
save_to_file("Transition:2x2:MASTER>>>>>>>OFFLINE(Area CC_Health not enough)\n");
|
|
|
|
|
}
|
|
|
|
|
/*手动切系*/
|
|
|
|
|
else if((ENUM_2x2_SLAVE == s_2x2_state_Ctrl.PartnerState) && ((1u == s_2x2_state_Ctrl.ctrSwitchFlag) || (1u == s_2x2_state_Ctrl.aidSwitchFlag)))
|
|
|
|
@@ -911,16 +850,12 @@ static void s_State_Transition(void)
|
|
|
|
|
/*- 检测到对系是备系,且允许切系,主系降为备系*/
|
|
|
|
|
s_2x2_state_Ctrl.LocalState = ENUM_2x2_SLAVE;
|
|
|
|
|
SFM_LOG_MSG_2X("Transition:2x2:MASTER>>>>>>>SLAVE(SWITCH:0x%x,AID:0x%x)\n",s_2x2_state_Ctrl.ctrSwitchFlag,s_2x2_state_Ctrl.aidSwitchFlag);
|
|
|
|
|
save_to_file("Transition:2x2:MASTER>>>>>>>SLAVE(SWITCH:0x%x,AID:0x%x)\n",s_2x2_state_Ctrl.ctrSwitchFlag,s_2x2_state_Ctrl.aidSwitchFlag);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
SFM_LOG_MSG_2X("Transition:2x2:MASTER>>>>>>>Do Not Change(SWITCH:0x%x,AID:0x%x,COM:0x%x,LSH:%d,PSH:%d,LCCH:%d,PCCH:%d)\n",s_2x2_state_Ctrl.ctrSwitchFlag,s_2x2_state_Ctrl.aidSwitchFlag,
|
|
|
|
|
s_State_Get_CommunicationState(ENUM_2x2_COM_SWITCH_CONDITION),s_2x2_state_Ctrl.LocalSync_Health,s_2x2_state_Ctrl.PartnerSync_Health,
|
|
|
|
|
s_2x2_state_Ctrl.LocalCC_Health,s_2x2_state_Ctrl.PartnerCC_Health);
|
|
|
|
|
save_to_file("Transition:2x2:MASTER>>>>>>>Do Not Change(SWITCH:0x%x,AID:0x%x,COM:0x%x,LSH:%d,PSH:%d,LCCH:%d,PCCH:%d)\n",s_2x2_state_Ctrl.ctrSwitchFlag,s_2x2_state_Ctrl.aidSwitchFlag,
|
|
|
|
|
s_State_Get_CommunicationState(ENUM_2x2_COM_SWITCH_CONDITION),s_2x2_state_Ctrl.LocalSync_Health,s_2x2_state_Ctrl.PartnerSync_Health,
|
|
|
|
|
s_2x2_state_Ctrl.LocalCC_Health,s_2x2_state_Ctrl.PartnerCC_Health);
|
|
|
|
|
}
|
|
|
|
|
s_State_SwitchState_Init();
|
|
|
|
|
}
|
|
|
|
@@ -953,15 +888,13 @@ static void s_State_Transition(void)
|
|
|
|
|
/*通信SN号清空-防止对系重新上电后不接收新的SN号*/
|
|
|
|
|
s_2x2_state_Ctrl.RxSN = 0u;
|
|
|
|
|
s_2x2_state_Ctrl.RxStateSysCyc = 0u;
|
|
|
|
|
SFM_LOG_MSG_2X("Transition:2x2:SLAVE>>>>>>>MASTER!!!(ALL interrupt)\n");
|
|
|
|
|
save_to_file("Transition:2x2:SLAVE>>>>>>>MASTER!!!(ALL interrupt) PartnerSync_Health = %d\n",s_2x2_state_Ctrl.PartnerSync_Health);
|
|
|
|
|
SFM_LOG_MSG_2X("Transition:2x2:SLAVE>>>>>>>MASTER!!!(ALL interrupt) PartnerSync_Health = %d\n",s_2x2_state_Ctrl.PartnerSync_Health);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
/*- 存在断线-宕机 */
|
|
|
|
|
s_2x2_state_Ctrl.LocalState = ENUM_2x2_SHUTDOWN;
|
|
|
|
|
SFM_LOG_MSG_2X("Transition:2x2:SLAVE>>>>>>>SHUTDOWN ALL interrupt\n");
|
|
|
|
|
save_to_file("Transition:2x2:SLAVE>>>>>>>SHUTDOWN ALL interrupt PartnerSync_Health = %d\n", s_2x2_state_Ctrl.PartnerSync_Health);
|
|
|
|
|
SFM_LOG_MSG_2X("Transition:2x2:SLAVE>>>>>>>SHUTDOWN ALL interrupt PartnerSync_Health = %d\n", s_2x2_state_Ctrl.PartnerSync_Health);
|
|
|
|
|
CM_ASSERT(0, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_5);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@@ -972,14 +905,12 @@ static void s_State_Transition(void)
|
|
|
|
|
s_2x2_state_Ctrl.LocalState = ENUM_2x2_MASTER;
|
|
|
|
|
s_State_SwitchState_Init();
|
|
|
|
|
SFM_LOG_MSG_2X("Transition:2x2:SLAVE>>>>>>>MASTER(ROLLBACK PartnerState = %d LastLocalState = %d)\n",s_2x2_state_Ctrl.PartnerState,s_2x2_state_Ctrl.LastLocalState);
|
|
|
|
|
save_to_file("Transition:2x2:SLAVE>>>>>>>MASTER(ROLLBACK PartnerState = %d LastLocalState = %d)\n",s_2x2_state_Ctrl.PartnerState,s_2x2_state_Ctrl.LastLocalState);
|
|
|
|
|
}
|
|
|
|
|
/*- 与主系输出不一致 或应用跟随数据不一致*/
|
|
|
|
|
else if(CM_FALSE == s_2x2_state_Ctrl.LocalSyncFailFlag)
|
|
|
|
|
{
|
|
|
|
|
s_2x2_state_Ctrl.LocalState = ENUM_2x2_OFFLINE;
|
|
|
|
|
SFM_LOG_MSG_2X("Transition:2x2:SLAVE>>>>>>>OFFLINE(OutPut failed or appflow failed)\n");
|
|
|
|
|
save_to_file("Transition:2x2:SLAVE>>>>>>>OFFLINE(OutPut failed or appflow failed)\n");
|
|
|
|
|
s_State_SwitchState_Init();
|
|
|
|
|
}
|
|
|
|
|
else if((ENUM_2x2_MASTER == s_2x2_state_Ctrl.PartnerState) &&
|
|
|
|
@@ -993,7 +924,6 @@ static void s_State_Transition(void)
|
|
|
|
|
{
|
|
|
|
|
s_2x2_state_Ctrl.LocalState = ENUM_2x2_MASTER;
|
|
|
|
|
SFM_LOG_MSG_2X("Transition:2x2:SLAVE>>>>>>>MASTER((SWITCH:0x%x,AID:0x%x)\n",s_2x2_state_Ctrl.ctrSwitchFlag,s_2x2_state_Ctrl.aidSwitchFlag);
|
|
|
|
|
save_to_file("Transition:2x2:SLAVE>>>>>>>MASTER((SWITCH:0x%x,AID:0x%x)\n",s_2x2_state_Ctrl.ctrSwitchFlag,s_2x2_state_Ctrl.aidSwitchFlag);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
@@ -1001,9 +931,6 @@ static void s_State_Transition(void)
|
|
|
|
|
SFM_LOG_MSG_2X("Transition:2x2:SLAVE>>>>>>>Do Not Change(SWITCH:0x%x,AID:0x%x,COM:0x%x,LSH:%d,PSH:%d,LCCH:%d,PCCH:%d)\n",s_2x2_state_Ctrl.ctrSwitchFlag,s_2x2_state_Ctrl.aidSwitchFlag,
|
|
|
|
|
s_State_Get_CommunicationState(ENUM_2x2_COM_SWITCH_CONDITION),s_2x2_state_Ctrl.LocalSync_Health,s_2x2_state_Ctrl.PartnerSync_Health,
|
|
|
|
|
s_2x2_state_Ctrl.LocalCC_Health,s_2x2_state_Ctrl.PartnerCC_Health);
|
|
|
|
|
save_to_file("Transition:2x2:SLAVE>>>>>>>Do Not Change(SWITCH:0x%x,AID:0x%x,COM:0x%x,LSH:%d,PSH:%d,LCCH:%d,PCCH:%d)\n",s_2x2_state_Ctrl.ctrSwitchFlag,s_2x2_state_Ctrl.aidSwitchFlag,
|
|
|
|
|
s_State_Get_CommunicationState(ENUM_2x2_COM_SWITCH_CONDITION),s_2x2_state_Ctrl.LocalSync_Health,s_2x2_state_Ctrl.PartnerSync_Health,
|
|
|
|
|
s_2x2_state_Ctrl.LocalCC_Health,s_2x2_state_Ctrl.PartnerCC_Health);
|
|
|
|
|
}
|
|
|
|
|
s_State_SwitchState_Init();
|
|
|
|
|
}
|
|
|
|
@@ -1017,7 +944,6 @@ static void s_State_Transition(void)
|
|
|
|
|
/*- 本系离线 */
|
|
|
|
|
s_2x2_state_Ctrl.LocalState = ENUM_2x2_OFFLINE;
|
|
|
|
|
SFM_LOG_MSG_2X("Transition:2x2:SLAVE>>>>>>>OFFLINE(Lose Sync)\n");
|
|
|
|
|
save_to_file("Transition:2x2:SLAVE>>>>>>>OFFLINE(Lose Sync)\n");
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
@@ -1102,14 +1028,12 @@ static CM_THREAD_FUNC_T SFM_2x2_StateChange_Thread(void)
|
|
|
|
|
/*- 检测到对系是主系,本系宕机*/
|
|
|
|
|
s_2x2_state_Ctrl.LocalState = ENUM_2x2_SHUTDOWN;
|
|
|
|
|
SFM_LOG_MSG_2X("Transition:2x2:MASTER>>>>>>>Double MASTER!!!(Shut Down)\n");
|
|
|
|
|
save_to_file("Transition:2x2:MASTER>>>>>>>Double MASTER!!!(Shut Down)\n");
|
|
|
|
|
CM_RE_ASSERT(0, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_1);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
/*恢复上周期状态*/
|
|
|
|
|
SFM_LOG_MSG_2X("Transition:2x2:Double MASTER Recovery!!!(Last State)\n");
|
|
|
|
|
save_to_file("Transition:2x2:Double MASTER Recovery!!!(Last State)\n");
|
|
|
|
|
s_2x2_state_Ctrl.LocalState = s_2x2_state_Ctrl.LastLocalState;
|
|
|
|
|
TempState = s_2x2_state_Ctrl.LastPartnerState;
|
|
|
|
|
s_2x2_state_Ctrl.LastPartnerState = s_2x2_state_Ctrl.PartnerState;
|
|
|
|
@@ -1866,7 +1790,7 @@ static void s_2x2_Recv(void)
|
|
|
|
|
ENUM_CM_RETURN ret = ENUM_CM_FALSE; /* 临时变量 */
|
|
|
|
|
PFM_LOG_SET_STOPTIMER(TSCP_DARK_2x2);
|
|
|
|
|
/*- 以太网循环接收2x2数据 */
|
|
|
|
|
if(CM_TRUE == CFM_GetTimeSyncFlag())
|
|
|
|
|
if(CM_TRUE == s_2x2_Ctrl.TimeSyncFlag)
|
|
|
|
|
{
|
|
|
|
|
do
|
|
|
|
|
{
|
|
|
|
@@ -2464,7 +2388,6 @@ void SFM_2x2_OutputProc(IN const CM_UINT8 *CheckBuf, CM_INT32 CheckLen)
|
|
|
|
|
{
|
|
|
|
|
/*- 进行输出比较 */
|
|
|
|
|
ret = CM_Memcmp((const void*)CheckBuf, (void*)s_2x2_Ctrl.RxCheckFrame, (CM_SIZE_T)CheckLen);
|
|
|
|
|
ret = 0;//qap
|
|
|
|
|
/*- 输出比较是否一致 */
|
|
|
|
|
if (0 == ret)
|
|
|
|
|
{
|
|
|
|
@@ -2597,7 +2520,7 @@ static CM_UINT8 SFM_2x2_RecvAppFollowData(CM_UINT32 sysCyc)
|
|
|
|
|
else if(s_2x2_Ctrl.RxAppFollowSysCrcCyc < peerCtrl.RxAppFollowSysCrcCyc)
|
|
|
|
|
{
|
|
|
|
|
MSCP_LOG_MSG("B-A:g_RxAppFollowCrc_len:%lld\n",g_RxAppFollowCrc_len);
|
|
|
|
|
g_RxAppFollow_len = SFM_2oo2_Exchange_Currency(g_RxAppFollowCrc, 0, g_RxAppFollowCrc, sizeof(g_RxAppFollowCrc), ENUM_2oo2_END_EX);
|
|
|
|
|
g_RxAppFollowCrc_len = SFM_2oo2_Exchange_Currency(g_RxAppFollowCrc, 0, g_RxAppFollowCrc, sizeof(g_RxAppFollowCrc), ENUM_2oo2_END_EX);
|
|
|
|
|
s_2x2_Ctrl.RxAppFollowSysCrcCyc = peerCtrl.RxAppFollowSysCrcCyc;
|
|
|
|
|
/**用于记录综合主系ID */
|
|
|
|
|
SFM_2x2_SetMasterID(peerCtrl.MasterID);
|
|
|
|
@@ -2636,7 +2559,6 @@ void SFM_2x2_EndProc(void)
|
|
|
|
|
CM_UINT8 type = 0u; /*接收到的跟随数据类型 1 CRC 2 全数据*/
|
|
|
|
|
static CM_UINT8 debounce = 0u; /*防抖计数*/
|
|
|
|
|
CM_UINT8 SendFollowDataType = 0u;
|
|
|
|
|
CM_UINT32 i = 0u;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(ENUM_4x2_MASTER == stat)
|
|
|
|
@@ -2645,7 +2567,6 @@ void SFM_2x2_EndProc(void)
|
|
|
|
|
curTickTest[0] = CM_GetTick();
|
|
|
|
|
/* 条件 本地对系是备或者宕机 && 对地A是备或者宕机 && 对地B是备或者宕机*/
|
|
|
|
|
SendFollowDataType = SFM_GetAppFollowType();
|
|
|
|
|
SendFollowDataType = 0;
|
|
|
|
|
if(1u == SendFollowDataType)
|
|
|
|
|
{
|
|
|
|
|
/*- 发送跟随数据 */
|
|
|
|
@@ -2655,7 +2576,7 @@ void SFM_2x2_EndProc(void)
|
|
|
|
|
SFM_2x2_Send(g_TxAppFollow, (CM_UINT32)8, ENUM_2x2_MSG_APP_FOLLOW_CRC);
|
|
|
|
|
MSCP_LOG_MSG("Iam master partner is slave send appfollowcrc\n");
|
|
|
|
|
debounce = 3u;
|
|
|
|
|
//MSCP_LOG_BIN(g_TxAppFollow + 8, g_TxAppFollow_len - 4);//qap
|
|
|
|
|
//MSCP_LOG_BIN(g_TxAppFollow + 8, g_TxAppFollow_len - 4);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
@@ -2699,20 +2620,14 @@ void SFM_2x2_EndProc(void)
|
|
|
|
|
{
|
|
|
|
|
/*- 是否收到了最新的应用跟随数据 */
|
|
|
|
|
/*- 调用应用API覆盖应用关键数据 */
|
|
|
|
|
|
|
|
|
|
//retFollowUp = APP_API_FollowUp(g_RxAppFollow, (CM_UINT32)g_RxAppFollow_len);
|
|
|
|
|
//CM_RE_ASSERT(ENUM_CM_TRUE == retFollowUp, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_9, TSCP_DARK_ASSERT_2);
|
|
|
|
|
for(i = 0u; i < g_RxAppFollow_len; i++)
|
|
|
|
|
{
|
|
|
|
|
g_RxAppFollow[i] = 0;
|
|
|
|
|
}
|
|
|
|
|
retFollowUp = APP_API_FollowUp(g_RxAppFollow, (CM_UINT32)g_RxAppFollow_len);
|
|
|
|
|
CM_RE_ASSERT(ENUM_CM_TRUE == retFollowUp, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_9, TSCP_DARK_ASSERT_2);
|
|
|
|
|
s_2x2_Ctrl.AppFollowCmpFailFlag = 0u;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
MSCP_LOG_MSG("no follow data\n");
|
|
|
|
|
}
|
|
|
|
|
curTickTest[1] = CM_GetTick();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|