Commit 648a1d6e authored by Marco Buttu's avatar Marco Buttu
Browse files

In case of FAILURE, set a tracking false just in case of no tracking

parent bab4af1d
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -80,8 +80,6 @@ public:

    inline bool isElevationTrackingEn() { return m_isElevationTrackingEn; }
    
    inline bool isTracking() { return m_isTracking; }

    inline bool isScanning() { return m_isScanning; }

    inline bool isScanActive() { return m_isScanActive; }
@@ -178,6 +176,7 @@ public:
    bool m_isElevationTracking; // Is it tracking?
    bool m_isElevationTrackingEn; // Is the tracking enabled?
    bool m_isTracking;
    bool m_trackingError; // Set from an TrackingThread;
    bool m_isASConfiguration;

    Scan m_scan;
+5 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ MSBossConfiguration::MSBossConfiguration(maci::ContainerServices *Services, Mino
    m_isElevationTracking = false;
    m_isElevationTrackingEn = false;
    m_isTracking = false;
    m_trackingError = false;
    m_isScanning = false;
    m_isScanLocked = false;
    m_isScanActive = false;
@@ -328,6 +329,10 @@ void MSBossConfiguration::setScan(
}


bool MSBossConfiguration::isTracking() { 
    return m_isTracking && !m_trackingError; 
}

ACS::doubleSeq MSBossConfiguration::getPosition(string comp_name, ACS::Time time)
    throw (ManagementErrors::ConfigurationErrorExImpl)
{
+18 −2
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ TrackingThread::TrackingThread(
    {
        AUTO_TRACE("TrackingThread::TrackingThread()");
        m_ready_error = false;
        m_configuration->m_trackingError = false;
    }

    TrackingThread::~TrackingThread() { AUTO_TRACE("TrackingThread::~TrackingThread()"); }
@@ -64,19 +65,34 @@ TrackingThread::TrackingThread(
                            if(component_ref->isReady()) {
                                component_ref->setPosition(positions, NOW);
                                m_ready_error = false;
                                m_configuration->m_trackingError=false;
                                m_configuration->m_isElevationTracking = true;
                                m_configuration->m_status = Management::MNG_OK;
                            }
                            else {
                                if(component_ref->isStarting() || component_ref->isParked() || component_ref->isParking()) {
                                    m_ready_error = false;
                                    m_configuration->m_trackingError=false;
                                    m_configuration->m_isElevationTracking = true;
                                    m_configuration->m_status = Management::MNG_OK;
                                }
                                else {
                                    ACS::ROdoubleSeq_var refActPos = component_ref->actPos();
                                    ACSErr::Completion_var completion;
                                    ACS::doubleSeq * act_pos = refActPos->get_sync(completion.out());
                                    for(size_t i=0; i<act_pos->length(); i++) { 
                                        // TODO: pay attention, this code is incorrect in case of many dynamic components
                                        if(fabs((*act_pos)[i] - position[i]) > component_ref->getTrackingDelta()) {
                                            m_configuration->m_status = Management::MNG_FAILURE;
                                            m_configuration->m_trackingError=true;
                                            m_configuration->m_isElevationTracking = false;
                                            break;
                                        }
                                    }

                                    if(!m_ready_error) {
                                        string msg(comp_name + " in failure.");
                                        ACS_SHORT_LOG((LM_ERROR, msg.c_str()));
                                        m_configuration->m_isElevationTracking = false;
                                        m_ready_error = true;
                                    }
                                }