Skip to content
Snippets Groups Projects
Select Git revision
  • master default protected
  • L2SS-1914-fix_job_dispatch
  • TMSS-3170
  • TMSS-3167
  • TMSS-3161
  • TMSS-3158-Front-End-Only-Allow-Changing-Again
  • TMSS-3133
  • TMSS-3319-Fix-Templates
  • test-fix-deploy
  • TMSS-3134
  • TMSS-2872
  • defer-state
  • add-custom-monitoring-points
  • TMSS-3101-Front-End-Only
  • TMSS-984-choices
  • SDC-1400-Front-End-Only
  • TMSS-3079-PII
  • TMSS-2936
  • check-for-max-244-subbands
  • TMSS-2927---Front-End-Only-PXII
  • Before-Remove-TMSS
  • LOFAR-Release-4_4_318 protected
  • LOFAR-Release-4_4_317 protected
  • LOFAR-Release-4_4_316 protected
  • LOFAR-Release-4_4_315 protected
  • LOFAR-Release-4_4_314 protected
  • LOFAR-Release-4_4_313 protected
  • LOFAR-Release-4_4_312 protected
  • LOFAR-Release-4_4_311 protected
  • LOFAR-Release-4_4_310 protected
  • LOFAR-Release-4_4_309 protected
  • LOFAR-Release-4_4_308 protected
  • LOFAR-Release-4_4_307 protected
  • LOFAR-Release-4_4_306 protected
  • LOFAR-Release-4_4_304 protected
  • LOFAR-Release-4_4_303 protected
  • LOFAR-Release-4_4_302 protected
  • LOFAR-Release-4_4_301 protected
  • LOFAR-Release-4_4_300 protected
  • LOFAR-Release-4_4_299 protected
40 results

GetSubbandsCmd.cc

Blame
    • wierenga's avatar
      6e086a37
      BugID: 658 · 6e086a37
      wierenga authored
      First working version of RSPDriver which supports MEP 4.1 protocol.
      6e086a37
      History
      BugID: 658
      wierenga authored
      First working version of RSPDriver which supports MEP 4.1 protocol.
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    GetSubbandsCmd.cc 3.19 KiB
    //#  GetSubbandsCmd.cc: implementation of the GetSubbandsCmd class
    //#
    //#  Copyright (C) 2002-2004
    //#  ASTRON (Netherlands Foundation for Research in Astronomy)
    //#  P.O.Box 2, 7990 AA Dwingeloo, The Netherlands, seg@astron.nl
    //#
    //#  This program is free software; you can redistribute it and/or modify
    //#  it under the terms of the GNU General Public License as published by
    //#  the Free Software Foundation; either version 2 of the License, or
    //#  (at your option) any later version.
    //#
    //#  This program is distributed in the hope that it will be useful,
    //#  but WITHOUT ANY WARRANTY; without even the implied warranty of
    //#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    //#  GNU General Public License for more details.
    //#
    //#  You should have received a copy of the GNU General Public License
    //#  along with this program; if not, write to the Free Software
    //#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    //#
    //#  $Id$
    
    #include <lofar_config.h>
    #include <Common/LofarLogger.h>
    
    #include <APL/RSP_Protocol/RSP_Protocol.ph>
    #include <APL/RTCCommon/PSAccess.h>
    #include <blitz/array.h>
    
    #include "StationSettings.h"
    #include "GetSubbandsCmd.h"
    
    using namespace blitz;
    using namespace LOFAR;
    using namespace RSP;
    using namespace RSP_Protocol;
    using namespace RTC;
    
    GetSubbandsCmd::GetSubbandsCmd(GCFEvent& event, GCFPortInterface& port, Operation oper)
    {
      m_event = new RSPGetsubbandsEvent(event);
    
      setOperation(oper);
      setPeriod(0);
      setPort(port);
    }
    
    GetSubbandsCmd::~GetSubbandsCmd()
    {
      delete m_event;
    }
    
    void GetSubbandsCmd::ack(CacheBuffer& cache)
    {
      RSPGetsubbandsackEvent ack;
    
      ack.timestamp = getTimestamp();
      ack.status = SUCCESS;
    
      Range src_range;
      switch (m_event->type) {
    
      case SubbandSelection::BEAMLET:
        ack.subbands().resize(m_event->rcumask.count(), MEPHeader::N_BEAMLETS);
        src_range = Range(MEPHeader::N_LOCAL_XLETS, MEPHeader::N_LOCAL_XLETS + MEPHeader::N_BEAMLETS - 1);
        break;
    
      case SubbandSelection::XLET:
        ack.subbands().resize(m_event->rcumask.count(), MEPHeader::N_LOCAL_XLETS);
        src_range = Range(0, MEPHeader::N_LOCAL_XLETS - 1);
        break;
    
      default:
        LOG_FATAL("invalid subbandselection type");
        exit(EXIT_FAILURE);
        break;
      }
      
      int result_rcu = 0;
      for (int cache_rcu = 0; cache_rcu < StationSettings::instance()->nrRcus(); cache_rcu++)
      {
        if (m_event->rcumask[cache_rcu])
        {
          ack.subbands()(result_rcu, Range::all())
    	= cache.getSubbandSelection()()(cache_rcu, src_range);
          
          result_rcu++;
        }
      }
      
      getPort()->send(ack);
    }
    
    void GetSubbandsCmd::apply(CacheBuffer& /*cache*/, bool /*setModFlag*/)
    {
      /* intentionally left empty */
    }
    
    void GetSubbandsCmd::complete(CacheBuffer& cache)
    {
      ack(cache);
    }
    
    const Timestamp& GetSubbandsCmd::getTimestamp() const
    {
      return m_event->timestamp;
    }
    
    void GetSubbandsCmd::setTimestamp(const Timestamp& timestamp)
    {
      m_event->timestamp = timestamp;
    }
    
    bool GetSubbandsCmd::validate() const
    {
      return ((m_event->rcumask.count() <= (unsigned int)StationSettings::instance()->nrRcus())
    	  && (m_event->type == SubbandSelection::BEAMLET || m_event->type == SubbandSelection::XLET));
    }
    
    bool GetSubbandsCmd::readFromCache() const
    {
      return m_event->cache;
    }