From b4a18bfef6cb9f5d48a12b455dfa78f9ef67e348 Mon Sep 17 00:00:00 2001 From: kojingeun <diteam.co.kr> Date: 수, 07 6월 2023 10:29:07 +0900 Subject: [PATCH] Revert "Ongoing50 #4517 CF AOI Review 결과 파일 찾기 실패 개선" --- ReviewSystem/CHSignalControls/SignalControl_DitSharedMemorySync.cpp | 241 ++++++++++++++++++++++++++++++++--------------- 1 files changed, 164 insertions(+), 77 deletions(-) diff --git a/ReviewSystem/CHSignalControls/SignalControl_DitSharedMemorySync.cpp b/ReviewSystem/CHSignalControls/SignalControl_DitSharedMemorySync.cpp index 0a7f470..a9a3bf6 100644 --- a/ReviewSystem/CHSignalControls/SignalControl_DitSharedMemorySync.cpp +++ b/ReviewSystem/CHSignalControls/SignalControl_DitSharedMemorySync.cpp @@ -139,101 +139,170 @@ BOOL CSignalControl_DitSharedMemorySync::Write_SendSignal(int nAddrIndex, int nSignalIndex, WORD wSignalValue, int nOnTime) { - if(nOnTime == 0) -{ - if(m_pMemStartAddr == NULL) return FALSE; - if (m_ControlInfo.GetIndex() < 0) return FALSE; - - - CSingleLock localLock(&m_csWriteSignal); - localLock.Lock(); - - if(m_pSendSignalValueAddr[nAddrIndex]==NULL) return FALSE; - - int nAddress = m_pSendSignalValueAddr[nAddrIndex]; - - // read value - WORD wCurValue = 0; - memcpy(&wCurValue, m_pMemStartAddr+nAddress, sizeof(WORD)); - - // send value - WORD wSendValue = 0; - if (wSignalValue==1) // signal on + /*< SWK 20221221 - #4403 MOD Start >*/ +// if (nOnTime == 0) +// { +// if (m_pMemStartAddr == NULL) return FALSE; +// if (m_ControlInfo.GetIndex() < 0) return FALSE; +// +// +// CSingleLock localLock(&m_csWriteSignal); +// localLock.Lock(); +// +// if (m_pSendSignalValueAddr[nAddrIndex] == NULL) return FALSE; +// +// int nAddress = m_pSendSignalValueAddr[nAddrIndex]; +// +// // read value +// WORD wCurValue = 0; +// memcpy(&wCurValue, m_pMemStartAddr + nAddress, sizeof(WORD)); +// +// // send value +// WORD wSendValue = 0; +// if (wSignalValue == 1) // signal on +// { +// wSendValue = 1 << nSignalIndex; +// wSendValue = wSendValue | wCurValue; +// } +// else // signal off +// { +// if (wCurValue > 0) +// { +// wSendValue = 1 << nSignalIndex; +// wSendValue = (wCurValue - wSendValue) < 0 ? 0 : (wCurValue - wSendValue); +// } +// } +// +// memcpy(m_pMemStartAddr + nAddress, &wSendValue, sizeof(WORD)); +// +// +// return TRUE; +// } +// else +// { +// if (m_pSignalThread == NULL) return FALSE; +// +// CSignalData signalData; +// signalData.nAddrIndex = nAddrIndex; +// signalData.nSignalIndex = nSignalIndex; +// signalData.wSignalValue = wSignalValue; +// signalData.dwOnTime = nOnTime; +// +// return m_pSignalThread->AddThreadData(signalData); +// } +// + /*< SWK 20221226 - #4403 ADD Start >*/ + if (0 == nOnTime) { - wSendValue = 1 << nSignalIndex; - wSendValue = wSendValue | wCurValue; + Write_SendSignal(nAddrIndex, nSignalIndex, wSignalValue != 0); + return TRUE; } - else // signal off - { - if (wCurValue>0) - { - wSendValue = 1 << nSignalIndex; - wSendValue = (wCurValue - wSendValue)<0 ? 0 : (wCurValue - wSendValue); - } - } - - memcpy(m_pMemStartAddr+nAddress, &wSendValue, sizeof(WORD)); - - - return TRUE; -} - else -{ - if (m_pSignalThread==NULL) return FALSE; + /*< SWK 20221226 - #4403 ADD End >*/ + if (m_pSignalThread == NULL) return FALSE; CSignalData signalData; - signalData.nAddrIndex = nAddrIndex; - signalData.nSignalIndex = nSignalIndex; - signalData.wSignalValue = wSignalValue; - signalData.dwOnTime = nOnTime; + signalData.nAddrIndex = nAddrIndex; + signalData.nSignalIndex = nSignalIndex; + signalData.wSignalValue = wSignalValue; + signalData.dwOnTime = nOnTime; return m_pSignalThread->AddThreadData(signalData); + /*< SWK 20221221 - #4403 MOD End >*/ } +/*< SWK 20221226 - #4403 ADD Start >*/ +inline void CSignalControl_DitSharedMemorySync::Write_SendSignal(int nAddrIndex, int nSignalIndex, bool bOn) +{ + int nAddress = m_pSendSignalValueAddr[nAddrIndex]; + WORD wSendValue = 1 << nSignalIndex; + WORD wCurValue = 0; + CSingleLock localLock(&m_csWriteSignal, TRUE); + memcpy(&wCurValue, m_pMemStartAddr + nAddress, sizeof(WORD)); + if (bOn) wCurValue |= wSendValue; + else wCurValue &= ~wSendValue; + memcpy(m_pMemStartAddr + nAddress, &wCurValue, sizeof(WORD)); } +/*< SWK 20221226 - #4403 ADD End >*/ void CSignalControl_DitSharedMemorySync::IST2P_RunThreadProcess(const CSignalData& signalData) { - CSingleLock localLock(&m_csWriteSignal); - localLock.Lock(); - - if (m_nSendSignalCount<=0) return; - - if(m_pMemStartAddr == NULL) return; - - int nAddress = m_pSendSignalValueAddr[signalData.nAddrIndex]; - - // read value - WORD wCurValue = 0; - memcpy(&wCurValue, m_pMemStartAddr+nAddress, sizeof(WORD)); - - // send value - WORD wSendValue = 0; - if (signalData.wSignalValue==1) // signal on + /*< SWK 20221221 - #4403 MOD Start >*/ +// CSingleLock localLock(&m_csWriteSignal); +// localLock.Lock(); +// +// if (m_nSendSignalCount<=0) return; +// +// if(m_pMemStartAddr == NULL) return; +// +// int nAddress = m_pSendSignalValueAddr[signalData.nAddrIndex]; +// +// // read value +// WORD wCurValue = 0; +// memcpy(&wCurValue, m_pMemStartAddr+nAddress, sizeof(WORD)); +// +// // send value +// WORD wSendValue = 0; +// wSendValue = 1 << signalData.nSignalIndex; +// if (signalData.wSignalValue==1) // signal on +// { +// wSendValue = 1 << signalData.nSignalIndex; +// wSendValue = wSendValue | wCurValue; +// } +// else // signal off +// { +// if (wCurValue>0) +// { +// wSendValue = 1 << signalData.nSignalIndex; +// wSendValue = (wCurValue - wSendValue)<0 ? 0 : (wCurValue - wSendValue); +// } +// } +// +// memcpy(m_pMemStartAddr+nAddress, &wSendValue, sizeof(WORD)); +// +// if (signalData.dwOnTime>0) +// { +// localLock.Unlock(); +// // wait +// ::Sleep(signalData.dwOnTime); +// +// // clear value +// memcpy(m_pMemStartAddr+nAddress, &wCurValue, sizeof(WORD)); +// } +// +// + if (m_nSendSignalCount <= 0) return; + if (m_pMemStartAddr == NULL) return; + if (signalData.dwOnTime <= 0) // Signal without hold-time + ; + else if(0 == signalData.ullStartTick) // Signal with hold-time { - wSendValue = 1 << signalData.nSignalIndex; - wSendValue = wSendValue | wCurValue; + CSignalData NewSignalData = signalData; + NewSignalData.ullStartTick = GetTickCount64(); // Set Start Tick + NewSignalData.wSignalValue = !signalData.wSignalValue; // Signal Inversion + m_pSignalThread->AddThreadData(NewSignalData); } - else // signal off + else if (GetTickCount64() - signalData.ullStartTick < signalData.dwOnTime) // Check Holding Time { - if (wCurValue>0) - { - wSendValue = 1 << signalData.nSignalIndex; - wSendValue = (wCurValue - wSendValue)<0 ? 0 : (wCurValue - wSendValue); - } + //< KEJ 20230310 - #4403 ADD > + Sleep(1); + CSignalData NewSignalData = signalData; + m_pSignalThread->AddThreadData(NewSignalData); + return; } + /*< SWK 20221226 - #4403 MOD Start >*/ +// int nAddress = m_pSendSignalValueAddr[signalData.nAddrIndex]; +// WORD wSendValue = 1 << signalData.nSignalIndex; +// +// WORD wCurValue = 0; +// memcpy(&wCurValue, m_pMemStartAddr + nAddress, sizeof(WORD)); +// if (true == signalData.wSignalValue) wCurValue |= wSendValue; +// else wCurValue &= ~wSendValue; +// memcpy(m_pMemStartAddr + nAddress, &wCurValue, sizeof(WORD)); - memcpy(m_pMemStartAddr+nAddress, &wSendValue, sizeof(WORD)); - - if (signalData.dwOnTime>0) - { - // wait - ::Sleep(signalData.dwOnTime); - - // clear value - memcpy(m_pMemStartAddr+nAddress, &wCurValue, sizeof(WORD)); - } + Write_SendSignal(signalData.nAddrIndex, signalData.nSignalIndex, signalData.wSignalValue != 0); + /*< SWK 20221226 - #4403 MOD End >*/ + /*< SWK 20221221 - #4403 MOD End >*/ } BOOL CSignalControl_DitSharedMemorySync::ReadData(const CString strAddr, int nSize, CString& strData) @@ -265,6 +334,24 @@ return TRUE; } +/*< LYW 20220610 - #4185 ADD Start >*/ +BOOL CSignalControl_DitSharedMemorySync::ReadData(const CString strAddr, int BitPosition, int nSize, int& nData) +{ + if (m_pMemStartAddr == NULL) return FALSE; + + int nAddress = _ttoi(strAddr); + + // read value + int TempData = 0; + memcpy(&TempData, m_pMemStartAddr + nAddress, sizeof(int)*nSize); + + TempData = TempData >> BitPosition; + + nData = TempData & 1; + return TRUE; +} +/*< LYW 20220610 - #4185 ADD End >*/ + BOOL CSignalControl_DitSharedMemorySync::WriteData(const CString strAddr, int nSize, CString strData) { if(m_pMemStartAddr == NULL) return FALSE; -- Gitblit v1.9.3