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

TimestampWrite.cc

  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    TimestampWrite.cc 2.67 KiB
    //#  TimestampWrite.cc: implementation of the TimestampWrite 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/EPA_Protocol.ph>
    
    #include <APL/RTCCommon/PSAccess.h>
    #include <string.h>
    
    #include "StationSettings.h"
    #include "TimestampWrite.h"
    #include "Cache.h"
    
    using namespace LOFAR;
    using namespace RSP;
    using namespace EPA_Protocol;
    using namespace RTC;
    using namespace blitz;
    
    TimestampWrite::TimestampWrite(GCFPortInterface& board_port, int board_id, const Scheduler& scheduler)
      : SyncAction(board_port, board_id, 1),  m_scheduler(scheduler)
    {
      memset(&m_hdr, 0, sizeof(MEPHeader));
    }
    
    TimestampWrite::~TimestampWrite()
    {
      /* TODO: delete event? */
    }
    
    void TimestampWrite::sendrequest()
    {
      EPARsrTimestampEvent ts;
        
      // send timestamp to all FPGA's (ALL BLP's and RSP)
      // RSP uses it on CEP output
      // BLP's use it on TBB data output via the backplane
      ts.hdr.set(MEPHeader::RSR_TIMESTAMP_HDR, MEPHeader::DST_ALL, MEPHeader::WRITE);
      ts.timestamp = m_scheduler.getCurrentTime().sec() + 1;
      
      m_hdr = ts.hdr;
      getBoardPort().send(ts);
    }
    
    void TimestampWrite::sendrequest_status()
    {
      // intentionally left empty
    }
    
    GCFEvent::TResult TimestampWrite::handleack(GCFEvent& event, GCFPortInterface& /*port*/)
    {
      if (EPA_WRITEACK != event.signal)
      {
        LOG_WARN("TimestampWrite::handleack:: unexpected ack");
        return GCFEvent::NOT_HANDLED;
      }
      
      EPAWriteackEvent ack(event);
    
      if (!ack.hdr.isValidAck(m_hdr))
      {
        LOG_ERROR("TimestampWrite::handleack: invalid ack");
        Cache::getInstance().getState().ts().write_error(getBoardId());
        return GCFEvent::NOT_HANDLED;
      }
    
      // change state to indicate that it has been applied in the hardware
      Cache::getInstance().getState().ts().write_ack(getBoardId());
    
      return GCFEvent::HANDLED;
    }