예제 #1
0
void CMonitor::removeBreakpoint(CStringDictionary::TStringId fbResId, CStringDictionary::TStringId fbNameId, CStringDictionary::TStringId portNameId){


	T_DEVICE_MAP::iterator resIter;
	T_RESOURCE_CONTAINER::iterator fbIter;
	T_FB_CONTAINER_ITER portIter;

	CCriticalRegion criticalRegion(mLockDataWatches);

	// Test if Resource is in device, otherwise do nothing
	resIter = mDataWatches.find(fbResId);
	if(resIter != mDataWatches.end()){
		// Test if FB is in Resource, otherwise do nothing
		fbIter = resIter->second.find(fbNameId);
		if(fbIter != resIter->second.end()){
			// Test if Port is in FB, otherwise do nothing
			portIter = std::find(fbIter->second.breakpointList.begin(), fbIter->second.breakpointList.end(),portNameId);
			if(portIter != fbIter->second.breakpointList.end()){
				fbIter->second.breakpointList.erase(portIter);
			}

			// clean up unused maps/lists
			if(fbIter->second.addWatchList.size() == 0 && fbIter->second.breakpointList.size() == 0){
				resIter->second.erase(fbIter);
			}
		}
		// clean up unused maps/lists
		//if(resIter->second.size() == 0){
		//	mDataWatches.erase(resIter);
		//}
	}
}
예제 #2
0
CModbusHandler::TCallbackDescriptor CModbusHandler::addComCallback(forte::com_infra::CComLayer* pa_pComCallback){
  CCriticalRegion criticalRegion(m_oSync);
  m_nCallbackDescCount++;
  TComContainer stNewNode = { m_nCallbackDescCount, pa_pComCallback };
  m_lstComCallbacks.push_back(stNewNode);

  return m_nCallbackDescCount;
}
예제 #3
0
void CFDSelectHandler::addComCallback(TFileDescriptor pa_nFD, forte::com_infra::CComLayer *pa_poComLayer){
  {
    CCriticalRegion criticalRegion(m_oSync);
    TConnContType stNewNode = { pa_nFD, pa_poComLayer };
    m_lstConnectionsList.push_back(stNewNode);
    m_bConnectionListChanged = true;
  }
  if(!isAlive()){
#ifdef __XENO__
    this->start(1,90);
#else
    this->start();
#endif
  }
  resumeSelfSuspend();
}
예제 #4
0
void * c_posixThread::threadFunction(void *arguments){
  // Get pointer to CThread object out of void pointer
  c_posixThread *pThread = (c_posixThread *) arguments;

  // if pointer is ok
  if(0 != pThread){
    c_criticalRegion criticalRegion(pThread->joinMutex);
    pThread->isThisAlive = true;
    pThread->run();
    pThread->isThisAlive = false;
    pThread->threadId = 0;
  }
  else{
    FZRTE_ERROR("pThread pointer is 0!");
  }
  return 0;
}
예제 #5
0
void CModbusHandler::removeComCallback(CModbusHandler::TCallbackDescriptor pa_nCallbackDesc){
  CCriticalRegion criticalRegion(m_oSync);

  TCallbackList::Iterator itRunner(m_lstComCallbacks.begin());

  if(itRunner->m_nCallbackDesc == pa_nCallbackDesc){
    m_lstComCallbacks.pop_front();
  }
  else{
    TCallbackList::Iterator itLastPos(itRunner);
    TCallbackList::Iterator itEnd(m_lstComCallbacks.end());
    ++itRunner;
    while(itRunner != itEnd){
      if(itRunner->m_nCallbackDesc == pa_nCallbackDesc){
        m_lstComCallbacks.eraseAfter(itLastPos);
        break;
      }
      itLastPos = itRunner;
      ++itRunner;
    }
  }
}
예제 #6
0
bool CMonitor::addBreakpoint(CDevice *device, CStringDictionary::TStringId resourceNameId, CStringDictionary::TStringId fbNameId, CStringDictionary::TStringId portNameId){


	T_DEVICE_MAP::iterator resIter;
	T_RESOURCE_CONTAINER::iterator fbIter;
	T_FB_CONTAINER_ITER portIter;

	if(CMonitor::startBreakpoint(device, resourceNameId, fbNameId, portNameId) == false){
		return false;
	}

	{
	  CCriticalRegion criticalRegion(mLockDataWatches);

    // Test if Resource is in device, otherwise add it
    resIter = mDataWatches.find(resourceNameId);
    if(resIter == mDataWatches.end()){
      T_RESOURCE_CONTAINER newResCont;
      mDataWatches[resourceNameId] = newResCont;
      resIter = mDataWatches.find(resourceNameId);
    }

    // Test if FB is in Resource, otherwise add it
    fbIter = resIter->second.find(fbNameId);
    if(fbIter == resIter->second.end()){
      T_FB_CONTAINER newFbCont;
      resIter->second[fbNameId] = newFbCont;
      fbIter = resIter->second.find(fbNameId);
    }

    // Test if Port is in FB, otherwise add it
    portIter = std::find(fbIter->second.breakpointList.begin(), fbIter->second.breakpointList.end(),portNameId);
    if(portIter == fbIter->second.breakpointList.end()){
      fbIter->second.breakpointList.push_back(portNameId);
    }else{} // port already inserted
	} //End Critical region
	return true;
}
예제 #7
0
void CFDSelectHandler::removeComCallback(TFileDescriptor pa_nFD){
  CCriticalRegion criticalRegion(m_oSync);

  TConnectionContainer::Iterator itRunner(m_lstConnectionsList.begin());
  TConnectionContainer::Iterator itRefNode(m_lstConnectionsList.end());
  TConnectionContainer::Iterator itEnd(m_lstConnectionsList.end());

  while(itRunner != itEnd){
    if(itRunner->m_nSockDes == pa_nFD){
      if(itRefNode ==itEnd){
        m_lstConnectionsList.pop_front();
      }
      else{
        m_lstConnectionsList.eraseAfter(itRefNode);
      }
      break;
    }

    itRefNode = itRunner;
    ++itRunner;
  }

  m_bConnectionListChanged = true;
}
예제 #8
0
void c_posixThread::join(void){
  if(0 != threadId){
   c_criticalRegion criticalRegion(joinMutex);
  }
}