
// #include "iec_method.h"

// #include "mySystem.h"





// #define YX_START_PORT 0x01   //遥信起始位置
// #define YC_START_PORT 0x4001 //遥测起始位置
// #define DD_START_PORT 0x6401 //电度起始位置



// stDISTURB_YC_AVR g_stDisturbYcAvr = {.isInit = false};
// stSOE_INFORM g_stSoeInform = {.isInit = false};
// stFAULT_INFORM_MAIN g_stFaultInformMain = {.isInit = false};

// int GetTimeItfs(__CP56Time2a *pTime)
// {
//     return 0;
// }

// int SetTimeItfs(__CP56Time2a *pTime)
// {

//     return 0;
// }

// void StampToCp56(__CP56Time2a *pTime, uint32_t uiSeconds, uint16_t usMs)
// {
//     if(NULL == pTime)
//     {
//         return;
//     }

//     // 1. 处理毫秒：拆分高低8位
//     uint16_t ms = usMs % 1000;  // 确保毫秒范围 0~999
//     pTime->ucLMs = (unsigned char)(ms & 0xFF);        // 低8位
//     pTime->ucHMs = (unsigned char)((ms >> 8) & 0x01); // 高8位（仅用bit0）

//     // 2. 从秒时间戳分解 年/月/日/时/分/秒/星期
//     const uint16_t month_days[] = {31,28,31,30,31,30,31,31,30,31,30,31};
//     uint32_t sec = uiSeconds;
//     uint32_t day_cnt = sec / 86400;    // 总天数
//     uint32_t sec_today = sec % 86400;  // 当日秒数

//     // 分解时分
//     pTime->ucHour = (unsigned char)(sec_today / 3600);
//     uint32_t remain_sec = sec_today % 3600;
//     pTime->ucMin = (unsigned char)(remain_sec / 60);

//     // 计算星期（基准：1970-01-01 是周四）
//     pTime->ucWeek = (unsigned char)((day_cnt + 4) % 7);
//     if(pTime->ucWeek == 0) pTime->ucWeek = 7; // 周日=7，符合CP56规范

//     // 计算年月日（相对于2000年）
//     uint32_t year = 1970;
//     while(1)
//     {
//         uint8_t is_leap = ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0));
//         uint16_t days = is_leap ? 366 : 365;
//         if(day_cnt < days) break;
//         day_cnt -= days;
//         year++;
//     }

//     // 计算月
//     uint8_t is_leap = ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0));
//     uint32_t month = 0;
//     while(1)
//     {
//         uint16_t m_days = month_days[month];
//         if(month == 1 && is_leap) m_days = 29; // 闰年2月
//         if(day_cnt < m_days) break;
//         day_cnt -= m_days;
//         month++;
//     }
//     pTime->ucMonth = month + 1;
//     pTime->ucYear = (unsigned char)(year - 2000); // 年份=实际年份-2000
// }

// void Cs10xWriteFileResetCOI(uint8_t ucCoi)
// {
//     // SysResetDelay(5); //延迟重启
	
//     return;
// }

// uint8_t Cs10xReadFileResetCOI(void)
// {
//     return 0;
// }


// /**
//  * @brief      获取遥测数据组中的遥测数目
//  * @param[in]  usGroupID-组号 20是总招 21-36是组招  pvParam-设备指针
//  * @param[in]  pvParam-通信口指针
//  * @param[out] puiStartInf-起始信息体地址
//  * @param[out] puiEndInf-结束信息体地址
//  * @return     数量 0-表示该分组未配置数据  g_astYcTable
//  */
// int32_t GetYcCountByGroup(uint16_t usGroupID, void *pvParam, uint32_t *puiStartInf, uint32_t *puiEndInf)
// {
//     stru_app_cfg *p_app_cfg = get_app_cfg_ptr();

//     *puiStartInf = YC_START_PORT;
//     *puiEndInf = YC_START_PORT + p_app_cfg->mx_info_vec.size();

//     return p_app_cfg->mx_info_vec.size();
// }   

// /**
//  * @brief 总召获取遥测数据值
//  * @param[in]  usGroupID-组号  未用 
//  * @param[in]  usIdx-组内ID从0开始  
//  * @param[in]  pvParam-设备指针
//  * @param[out] pstInfo-数据指针
//  * @return     0-失败  1-成功
// */
// int32_t GetYcValueByGroup(uint16_t usGroupID, uint16_t usIdx, Yc_Info *pstInfo, void *pvParam)
// {
//     uint16_t usTabIdx = 0;
//     uint16_t usInfoAddr = 0;
//     stYC_TABLE  stYcTable = {0};

//     stru_app_cfg *p_app_cfg = get_app_cfg_ptr();
//     uint32_t yc_config_num = p_app_cfg->mx_info_vec.size();


//     if(usIdx > yc_config_num)   /*总召遥测数量超过配置遥测数量*/
//     {
//         return 0;  
//     }
//     // usInfoAddr = usIdx + YC_START_PORT;
//     /*遥测置数数据*/
// //    if(g_stYcYxSet.uiYcHoldTime)  
// //    {
// //        for(ucI=0;ucI<SETPARAM_MAXNUM;ucI++)
// //        {
// //            if(usInfoAddr == g_stYcYxSet.astYcSetParam[ucI].usInfoAddr)
// //            {
// //                pstInfo->fVal = g_stYcYxSet.astYcSetParam[ucI].fYcValue;
// //                pstInfo->uiInfoAddr = usInfoAddr;
// //                return 1;
// //            }
// //        }
// //    }

//     stru_iec_mx_info *p_mx_info = &p_app_cfg->mx_info_vec[usIdx];

//     pstInfo->fVal = p_mx_info->data * p_mx_info->factor;
//     pstInfo->uiInfoAddr = p_mx_info->inf;

//     return 1;
// }



// stINFOR_OUT *GetInforOut(void *pvParam, std::vector<stINFOR_OUT> &stInforOut)
// {
//     uint32_t interface = *(uint32_t *)pvParam;
//     stru_iec_60870 *p_iec = iec60870_get_by_interface(interface);

//     for(uint32_t i = 0; i < stInforOut.size(); i++)
//     {
//         if(stInforOut[i].ucPrtocol == p_iec->iec_type && stInforOut[i].uiChannelType == interface)
//         {
//             return &stInforOut[i];
//         }
//     }

//     stINFOR_OUT stInfor;
//     stInfor.ucPrtocol = p_iec->iec_type;
//     stInfor.uiChannelType = interface;
//     stInfor.usOutNum = 0;
//     stInforOut.push_back(stInfor);

//     return &stInforOut.back();
// }


// void local_sem_init(bool &isInit, sem_t *p_sem)
// {
//     if(!isInit)
//     {
//         sem_init(p_sem, 0, 1);
//         isInit = true;
//     }
// }

// int UserWriteDisturbYc(uint16_t usIndex, float fVal)
// {
//     usIndex += YC_START_PORT;

//     local_sem_init(g_stDisturbYcAvr.isInit, &g_stDisturbYcAvr.sem);
//     sem_wait(&g_stDisturbYcAvr.sem);
//     g_stDisturbYcAvr.astYc[g_stDisturbYcAvr.usInptr].usIndex = usIndex;
//     g_stDisturbYcAvr.astYc[g_stDisturbYcAvr.usInptr].fVal = fVal;
//     g_stDisturbYcAvr.usInptr++;
//     g_stDisturbYcAvr.usInptr %= DISTURB_YC_LEN;
//     sem_post(&g_stDisturbYcAvr.sem);

//     return 1;
// }

// /**
//  * @brief       数据表中获取扰动遥测数据
//  * @param[in]   *pvParam 通信接口
//  * @param[in]   uiPos 取数据的偏移量
//  * @param[out]  *pstInfo 获取单条扰动数据值和点号
//  * @return     
//  */
// int32_t GetDiturbYc(Yc_Info *pstInfo, void *pvParam, uint32_t uiPos)
// {
//     uint8_t ucInforNum = 0;
//     stYC_RECORD stYcInfo;

//     stINFOR_OUT *pstInfor = GetInforOut(pvParam, g_stDisturbYcAvr.astOutptr);

//     local_sem_init(g_stDisturbYcAvr.isInit, &g_stDisturbYcAvr.sem);
//     sem_wait(&g_stDisturbYcAvr.sem);
//     uint16_t pos = uiPos + pstInfor->usOutNum;
//     pos %= DISTURB_YC_LEN;

//     pstInfo->uiInfoAddr = g_stDisturbYcAvr.astYc[pos].usIndex;
//     pstInfo->fVal = g_stDisturbYcAvr.astYc[pos].fVal;

//     sem_post(&g_stDisturbYcAvr.sem);

//     return 1;   
// }

// /**
//  * @brief     获取扰动遥测数量
//  * @param[in]  pvArg - 通信接口指针
//  * @param[out] 无
//  * @return     失败返回0, 成功返回>0
//  */
// int32_t GetDiturbYcSendNum(void *pvArg)  
// {
//     int32_t iSendNum = 0;

//     stINFOR_OUT *pstInfor = GetInforOut(pvArg, g_stDisturbYcAvr.astOutptr);

//     local_sem_init(g_stDisturbYcAvr.isInit, &g_stDisturbYcAvr.sem);
//     sem_wait(&g_stDisturbYcAvr.sem);

//     if(g_stDisturbYcAvr.usInptr >= pstInfor->usOutNum)
//     {
//         iSendNum = g_stDisturbYcAvr.usInptr - pstInfor->usOutNum;
//     }
//     else
//     {
//         iSendNum = DISTURB_YC_LEN - pstInfor->usOutNum + g_stDisturbYcAvr.usInptr;
//     }

//     sem_post(&g_stDisturbYcAvr.sem);

//     return iSendNum;
// }

// /**
//  * @brief     数据表中更新扰动遥测数据出指针接口函数
//  * @param[in]  pvParam - 通信接口指针
//  * @param[in]  uiPos 取数据的偏移量 表征取出记录个数    
//  * @return     0-异常 1-正常
//  */
// int32_t UpdateDiturbYcPtrOut(void *pvParam, uint32_t uiPos)
// {
//     uint8_t ucInforNum = 0;
  
//     if(uiPos == 0 || pvParam == NULL)
//     {
//         return 0;
//     }

//     stINFOR_OUT *pstInfor = GetInforOut(pvParam, g_stDisturbYcAvr.astOutptr);

//     local_sem_init(g_stDisturbYcAvr.isInit, &g_stDisturbYcAvr.sem);
//     sem_wait(&g_stDisturbYcAvr.sem);
//     pstInfor->usOutNum += uiPos;
//     pstInfor->usOutNum %= DISTURB_YC_LEN;
//     sem_post(&g_stDisturbYcAvr.sem);

//     return 1;
// }


// /**
//  * @brief     数据表中获取遥信数据组中的遥信数目的接口函数
//  * @param[in]  ucGroupID-组号 20是总招 21-36是组招  未用
//  * @param[in]  pvParam-设备指针 数据传输路径
//  * @param[out] puiStartInf-起始信息体地址 从1开始
//  * @param[out] puiEndInf-结束信息体地址
//  * @return     已配遥信数量
//  */
// int32_t GetYxCountByGroup(uint16_t usGroupID, void *pvParam, uint32_t *puiStartInf, uint32_t *puiEndInf)
// {

//     stru_app_cfg *p_app_cfg = get_app_cfg_ptr();
    
//     *puiStartInf = YX_START_PORT;
//     *puiEndInf = *puiStartInf + p_app_cfg->st_info_vec.size();

//     return p_app_cfg->st_info_vec.size();
// }


// /**
//  *@brief       总召获取遥信数据
//  * @param[in]  ucGroupID-组号 未使用    
//  * @param[in]  usIdx-遥信数据偏移量 从0开始  
//  * @param[in]  pvParam-设备指针 数据传输路径
//  * @param[out] pstInfo-数据指针 获取遥信状态信息
//  * @return     0-获取数据失败    1-成功
// */
// int32_t GetYxStatusByGroup(uint16_t usGroupID, uint16_t usIdx, Yx_Info *pstInfo, void *pvParam)
// {
//     uint16_t   usTabIdx = 0;   /*数据表下标*/
//     uint16_t   usInfoAddr = 0;
//     uint32_t   uiItfs = *(uint32_t*)pvParam;         /*通信接口*/
//     stru_iec_60870 *p_iec = {0};   /*规约实体*/
//     // stYX_TABLE  stYxTable = {0};            /*单个点号配置信息*/  

//     stru_app_cfg *p_app_cfg = get_app_cfg_ptr();
//     uint32_t yx_config_num = p_app_cfg->st_info_vec.size();

//     if(usIdx > yx_config_num)    /*默认遥信全配置  后续改遥信配置数量*/
//     {
//         return 0;
//     }

//     usInfoAddr = usIdx + YX_START_PORT;
//     /*遥信置数*/
// //    if(g_stYcYxSet.uiYxHoldTime)  
// //    {
// //        for(ucI=0;ucI<SETPARAM_MAXNUM;ucI++)
// //        {
// //            if(usInfoAddr == g_stYcYxSet.astYxSetParam[ucI].usInfoAddr)
// //            {
// //                pstInfo->ucStatus = g_stYcYxSet.astYxSetParam[ucI].ucYxValue;
// //                pstInfo->uiInfoAddr = usInfoAddr;
// //                return 1;
// //            }
// //        }
// //    }

//     stru_iec_st_info *p_st_info = &p_app_cfg->st_info_vec[usIdx];

//     pstInfo->ucStatus = p_st_info->data;
//     pstInfo->uiInfoAddr = p_st_info->inf;
//     pstInfo->ucStateType = 0;    /*遥信单双点属性*/ 


    
//    // usDYxStartPos = &g_stYxInform.stYxSoft.stYxDouble.astDoubleYx[0] - (stYX_STATE*)&g_stYxInform; //计算双点遥信起始下标号
//     p_iec = iec60870_get_by_interface(uiItfs);  /*获取规约实体*/

//     if(p_iec->cs10x.usYxType) //104规约-遥信传输类型为双点
//     {
//         pstInfo->ucStateType = 1; //双点遥信
// //        if((usTabIdx < usDYxStartPos || usTabIdx >= (usDYxStartPos+DOUBLEYX_NUM))) /*单点遥信处理*/ 
// //        {
// //            pstInfo->ucStatus += 1; 
// //        }
//         if(p_st_info->invert) /*遥信取反*/
//         {
//             if(pstInfo->ucStatus == 2)
//             {
//                 pstInfo->ucStatus = 1;
//             }
//             else if(pstInfo->ucStatus == 1)
//             {
//                 pstInfo->ucStatus = 2;
//             }
//         }
//     }
//     else  //104规约-遥信传输类型为单点
//     {
// //        if((usTabIdx >= usDYxStartPos && usTabIdx < (usDYxStartPos+DOUBLEYX_NUM))) /*双点遥信 */
// //        {
// //            pstInfo->ucStateType = 1;
// //            if(stYxTable.ucAttr) /*遥信取反*/
// //            {
// //                if(pstInfo->ucStatus == 2)
// //                {
// //                    pstInfo->ucStatus = 1;
// //                }
// //                else if(pstInfo->ucStatus == 1)
// //                {
// //                    pstInfo->ucStatus = 2;
// //                }
// //            }
// //        }
// //        else //单点遥信
//         {
//             pstInfo->ucStateType = 0; 
//             if(p_st_info->invert) /*遥信取反*/
//             {
//                 if(pstInfo->ucStatus)
//                 {
//                     pstInfo->ucStatus = 0;
//                 }
//                 else
//                 {
//                     pstInfo->ucStatus = 1;
//                 }
//             }
//         } 
//     }
//     return 1;
// }



// int UserWriteSoeEvent(uint16_t usIndex, uint8_t ucState, uint32_t uiSeconds, uint16_t usMs)
// {
//     // usIndex += YX_START_PORT;
//     local_sem_init(g_stSoeInform.isInit, &g_stSoeInform.sem);
//     sem_wait(&g_stSoeInform.sem);
//     stYX_CHANGE_INFO *p_soe_info = &g_stSoeInform.astSoeInfo[g_stSoeInform.usInptr];
//     p_soe_info->usYxPot = usIndex;
//     p_soe_info->ucState = ucState;
//     p_soe_info->uiSeconds = uiSeconds;
//     p_soe_info->usMs = usMs;
//     g_stSoeInform.usInptr++;
//     g_stSoeInform.usInptr %= SOE_LEN;
//     sem_post(&g_stSoeInform.sem);

//     return 1;
// }

// /**
// * @brief       数据表中获取SOE突变遥信数据
// * @param[in]   pvParam-设备指针
// * @param[in]   uiPos 取数据的偏移量
// * @param[out]   pstInfo 获取单条SOE信息
// * @return 失败返回0, 成功返回1
// */
// int32_t GetSOE(SOE_Info *pstInfo, void *pvParam, uint32_t uiPos)
// {
//     stINFOR_OUT *pstInfor = GetInforOut(pvParam, g_stSoeInform.astOutptr);

//     local_sem_init(g_stSoeInform.isInit, &g_stSoeInform.sem);
//     sem_wait(&g_stSoeInform.sem);
//     uint16_t pos = uiPos + pstInfor->usOutNum;
//     pos %= SOE_LEN;
//     stYX_CHANGE_INFO *p_soe_info = &g_stSoeInform.astSoeInfo[pos];
//     pstInfo->uiInfoAddr = p_soe_info->usYxPot;
//     pstInfo->ucStatus = p_soe_info->ucState;
//     pstInfo->ucStateType = p_soe_info->ucType;
//     StampToCp56(&pstInfo->stCTime, p_soe_info->uiSeconds, p_soe_info->usMs);
//     sem_post(&g_stSoeInform.sem);

//     stru_iec_60870 *p_iec = iec60870_get_by_interface(*(uint32_t*)pvParam);
//     if(p_iec->cs10x.usYxType) //104规约-遥信传输类型为双点
//     {
//         pstInfo->ucStateType = 1; //双点遥信
//         pstInfo->ucStatus += 1; //双点遥信状态值加1
//     }
//     else  //104规约-遥信传输类型为单点
//     {
//         pstInfo->ucStateType = 0; //单点遥信
//     }

//     return 1;
// }

// /**
// * @brief     数据表中获取突变遥信数量接口函数
// * @param[in]  pvArg - 通信接口指针
// * @param[out] 无
// * @return
// */
// int32_t GetSOESendNum(void *pvArg)
// {
//     int num = 0;
//     stINFOR_OUT *pstInfor = GetInforOut(pvArg, g_stSoeInform.astOutptr);

//     local_sem_init(g_stSoeInform.isInit, &g_stSoeInform.sem);
//     sem_wait(&g_stSoeInform.sem);

//     if(g_stSoeInform.usInptr >= pstInfor->usOutNum)
//     {
//         num = g_stSoeInform.usInptr - pstInfor->usOutNum;
//     }
//     else
//     {
//         num = SOE_LEN - pstInfor->usOutNum + g_stSoeInform.usInptr;
//     }

//     sem_post(&g_stSoeInform.sem);

//     return num;
// }

// /**
// * @brief      数据表中更新突变遥信数据出指针接口函数
// * @param[in]  pvParam-设备指针
// * @param[in]  uiPos 取数据的偏移量 表征取出记录个数
// * @param[out]  无
// * @return     0-异常 1-正常
// */
// int32_t UpdateSoePtrOut(void *pvParam, uint32_t uiPos)
// {
//     stINFOR_OUT *pstInfor = GetInforOut(pvParam, g_stSoeInform.astOutptr);

//     local_sem_init(g_stSoeInform.isInit, &g_stSoeInform.sem);
//     sem_wait(&g_stSoeInform.sem);
//     pstInfor->usOutNum += uiPos;
//     pstInfor->usOutNum %= SOE_LEN;
//     sem_post(&g_stSoeInform.sem);

//     return 1;
// }

// /**
//  * @brief      获取电度数据组中的遥测数目  // 数据表中有多少电能量
//  * @param[in]  usGroupID-是否带时标
//  * @param[in]  pvParam-设备指针
//  * @param[out]  puiStartInf-起始信息体地址
//  * @param[out]  puiEndInf-结束信息体地址
//  * @param[in]  ucTimeEn-时标使能
//  * @return     数量 0-表示该分组未配置数据
//  */
// int32_t GetDdCountByGroup(uint16_t usGroupID, void *pvParam, uint32_t *puiStartInf, uint32_t *puiEndInf, uint8_t ucTimeEn)
// {
//     stru_app_cfg *p_app_cfg = get_app_cfg_ptr();
//     uint32_t dd_num = p_app_cfg->dd_info_vec.size();

//     if(0 == usGroupID) //总召
//     {
//         if(ucTimeEn)
//         {
//             return 0;
//         }

//         *puiStartInf = DD_START_PORT;
//         *puiEndInf = *puiStartInf + dd_num;

//         return dd_num;
//     }

//     int usNum = 8; //实时电能量8个
//     if(ucTimeEn)
//     {
//         *puiStartInf = DD_START_PORT + usNum;
//         usNum = dd_num - usNum;
//         *puiEndInf = *puiStartInf + usNum;
//         return usNum;
//     }

//     *puiStartInf = DD_START_PORT;
//     *puiEndInf = *puiStartInf + usNum;

//     return usNum;
// }

// int32_t GetDdValueByGroup(uint16_t usGroupID, uint16_t usIdx, TimeDd_Info *pstInfo, void *pvParam, uint8_t ucTimeEn)
// {
//     stru_app_cfg *p_app_cfg = get_app_cfg_ptr();
//     uint32_t dd_num = p_app_cfg->dd_info_vec.size();
//     uint16_t usMax = 0;
//     uint16_t usMin = 0;
//     uint16_t usVaildSublabel = 0;

//     if(usIdx >= dd_num)
//     {
//         return 0;
//     }

//     if(0 == usGroupID)
//     {
//         if(ucTimeEn)
//         {
//             return 0;
//         }

//         usMax = dd_num;
//         usMin = 0;
//     }
//     else
//     {
//         if(0 == ucTimeEn)
//         {
//             usMax = 8; // 实时电能量8个
//             usMin = 0;
//         }
//         else
//         {
//             usMax = dd_num;
//             usMin = 8;
//         }
//     }

    
// }





// int UserWriteFaultEvent(stFAULT_EVENT_MAIN *pstInfo)
// {
//     local_sem_init(g_stFaultInformMain.isInit, &g_stFaultInformMain.sem);
//     sem_wait(&g_stFaultInformMain.sem);
    
//     memcpy(&g_stFaultInformMain.astFault[g_stFaultInformMain.usInptr++], pstInfo, sizeof(stFAULT_EVENT_MAIN));
//     g_stFaultInformMain.usInptr %= FAULT_EVENT_LEN;

//     sem_post(&g_stFaultInformMain.sem);

//     return 1;
// }

// int32_t GetEventSendNum(void *pvArg)
// {
//     int num = 0;
//     stINFOR_OUT *pstInfor = GetInforOut(pvArg, g_stFaultInformMain.astOutptr);

//     local_sem_init(g_stFaultInformMain.isInit, &g_stFaultInformMain.sem);
//     sem_wait(&g_stFaultInformMain.sem);

//     num = g_stFaultInformMain.usInptr >= pstInfor->usOutNum \
//             ? (g_stFaultInformMain.usInptr - pstInfor->usOutNum) \
//             : (FAULT_EVENT_LEN - pstInfor->usOutNum + g_stFaultInformMain.usInptr);

//     sem_post(&g_stFaultInformMain.sem);

//     return num;
// }

// int32_t GetFaultEvent(FAULT_EVENT_Info *pstInfo, void *pvParam, uint32_t uiPos)
// {
//     stFAULT_EVENT_MAIN stFaultEvenInfo;

//     stINFOR_OUT *pstInfor = GetInforOut(pvParam, g_stFaultInformMain.astOutptr);

//     local_sem_init(g_stFaultInformMain.isInit, &g_stFaultInformMain.sem);
//     sem_wait(&g_stFaultInformMain.sem);

//     uint16_t pos = uiPos + pstInfor->usOutNum;
//     pos %= FAULT_EVENT_LEN;
//     memcpy(&stFaultEvenInfo, &g_stFaultInformMain.astFault[pos], sizeof(stFAULT_EVENT_MAIN));

//     sem_post(&g_stFaultInformMain.sem);

//     for(uint8_t i = 0; i < stFaultEvenInfo.ucYxNum; i++)
//     {
//         pstInfo->staSoe[i].uiInfoAddr = stFaultEvenInfo.stSoe.uiInfoAddr;
//         pstInfo->staSoe[i].ucStatus = stFaultEvenInfo.stSoe.ucStatus;
//         pstInfo->staSoe[i].ucStateType = 0;
//         StampToCp56(&pstInfo->staSoe[i].stCTime, stFaultEvenInfo.stSoe.uiSeconds, stFaultEvenInfo.stSoe.usMs);
    
//         memcpy(&pstInfo->staSoe[i].stCTime, &stFaultEvenInfo.stSoe.stCTime, sizeof(stCP56Time2a));
//     }
//     pstInfo->usSoeNum = stFaultEvenInfo.ucYxNum;

//     for(uint8_t i = 0; i < stFaultEvenInfo.ucYcNum; i++)
//     {
//         pstInfo->staYc[i].uiInfoAddr = stFaultEvenInfo.astYc[i].uiInfoAddr;
//         pstInfo->staYc[i].fVal = stFaultEvenInfo.astYc[i].fVal;
//     }
//     pstInfo->usYcNum = stFaultEvenInfo.ucYcNum;

//     return 1;
// }

// int32_t UpdateFaultEventPtrOut(void *pvParam, uint32_t uiPos)
// {
//     stINFOR_OUT *pstInfor = GetInforOut(pvParam, g_stFaultInformMain.astOutptr);

//     local_sem_init(g_stFaultInformMain.isInit, &g_stFaultInformMain.sem);
//     sem_wait(&g_stFaultInformMain.sem);

//     pstInfor->usOutNum += uiPos;
//     pstInfor->usOutNum %= FAULT_EVENT_LEN;

//     sem_post(&g_stFaultInformMain.sem);

//     return 1;
// }



