OpenCores
URL https://opencores.org/ocsvn/w11/w11/trunk

Subversion Repositories w11

[/] [w11/] [tags/] [w11a_V0.7/] [tools/] [src/] [librlink/] [RlinkCommand.cpp] - Diff between revs 27 and 28

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 27 Rev 28
Line 1... Line 1...
// $Id: RlinkCommand.cpp 609 2014-12-07 19:35:25Z mueller $
// $Id: RlinkCommand.cpp 628 2015-01-04 16:22:09Z mueller $
//
//
// Copyright 2011-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
// Copyright 2011-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
//
//
// This program is free software; you may redistribute and/or modify it under
// This program is free software; you may redistribute and/or modify it under
// the terms of the GNU General Public License as published by the Free
// the terms of the GNU General Public License as published by the Free
// Software Foundation, either version 2, or at your option any later version.
// Software Foundation, either version 2, or at your option any later version.
//
//
Line 11... Line 11...
// or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
// or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
// for complete details.
// for complete details.
// 
// 
// Revision History: 
// Revision History: 
// Date         Rev Version  Comment
// Date         Rev Version  Comment
 
// 2015-01-04   628   1.2.3  Print(): adopt large nblk;
 
// 2014-12-21   617   1.2.2  use kStat_M_RbTout for rbus timeout
 
// 2014-12-20   616   1.2.1  Print(): display BlockDone; add kFlagChkDone
// 2014-12-06   609   1.2    new rlink v4 iface
// 2014-12-06   609   1.2    new rlink v4 iface
// 2014-08-15   583   1.1    rb_mreq addr now 16 bit
// 2014-08-15   583   1.1    rb_mreq addr now 16 bit
// 2013-05-06   495   1.0.2  add RlinkContext to Print() args
// 2013-05-06   495   1.0.2  add RlinkContext to Print() args
// 2013-02-03   481   1.0.1  use Rexception
// 2013-02-03   481   1.0.1  use Rexception
// 2011-03-27   374   1.0    Initial version
// 2011-03-27   374   1.0    Initial version
// 2011-01-15   355   0.1    First draft
// 2011-01-15   355   0.1    First draft
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
 
 
/*!
/*!
  \file
  \file
  \version $Id: RlinkCommand.cpp 609 2014-12-07 19:35:25Z mueller $
  \version $Id: RlinkCommand.cpp 628 2015-01-04 16:22:09Z mueller $
  \brief   Implemenation of class RlinkCommand.
  \brief   Implemenation of class RlinkCommand.
 */
 */
 
 
// debug
// debug
#include <iostream>
#include <iostream>
Line 68... Line 71...
const uint32_t RlinkCommand::kFlagPktEnd;
const uint32_t RlinkCommand::kFlagPktEnd;
const uint32_t RlinkCommand::kFlagErrNak;
const uint32_t RlinkCommand::kFlagErrNak;
const uint32_t RlinkCommand::kFlagErrDec;
const uint32_t RlinkCommand::kFlagErrDec;
const uint32_t RlinkCommand::kFlagChkStat;
const uint32_t RlinkCommand::kFlagChkStat;
const uint32_t RlinkCommand::kFlagChkData;
const uint32_t RlinkCommand::kFlagChkData;
 
const uint32_t RlinkCommand::kFlagChkDone;
 
 
const uint8_t RlinkCommand::kStat_M_Stat;
const uint8_t RlinkCommand::kStat_M_Stat;
const uint8_t RlinkCommand::kStat_V_Stat;
const uint8_t RlinkCommand::kStat_V_Stat;
const uint8_t RlinkCommand::kStat_B_Stat;
const uint8_t RlinkCommand::kStat_B_Stat;
const uint8_t RlinkCommand::kStat_M_Attn;
const uint8_t RlinkCommand::kStat_M_Attn;
 
const uint8_t RlinkCommand::kStat_M_RbTout;
const uint8_t RlinkCommand::kStat_M_RbNak;
const uint8_t RlinkCommand::kStat_M_RbNak;
const uint8_t RlinkCommand::kStat_M_RbErr;
const uint8_t RlinkCommand::kStat_M_RbErr;
 
 
//------------------------------------------+-----------------------------------
//------------------------------------------+-----------------------------------
//! Default constructor
//! Default constructor
Line 258... Line 263...
  uint8_t ccode = Command();
  uint8_t ccode = Command();
 
 
  // separator + command mnemonic, code and flags
  // separator + command mnemonic, code and flags
  // separator:  ++  first in packet
  // separator:  ++  first in packet
  //             --  non-first in packet
  //             --  non-first in packet
  //             ??  FIXME: separator for labo canceled commands 
  //             ??  FIXME_code: separator for labo canceled commands 
  const char* sep = "??";
  const char* sep = "??";
  if (TestFlagAny(kFlagPktBeg)) {
  if (TestFlagAny(kFlagPktBeg)) {
    sep = "++";
    sep = "++";
  } else {
  } else {
    sep = "--";
    sep = "--";
Line 307... Line 312...
    } else {
    } else {
      os << " ";
      os << " ";
    }
    }
  }
  }
 
 
 
  // block length field
  if (ccode== kCmdRblk || ccode==kCmdWblk) {
  if (ccode== kCmdRblk || ccode==kCmdWblk) {
    os << " n=" << RosPrintf(BlockSize(), "d", 3);
    os << " n=" << RosPrintf(BlockSize(), "d", 4)
 
       << (BlockSize()==BlockDone() ? "=" : ">")
 
       << RosPrintf(BlockDone(), "d", 4);
 
    if (fpExpect) {
 
      if (TestFlagAny(kFlagChkDone)) {
 
        os << "#";
 
        os << " N=" << RosPrintf(fpExpect->DoneValue(), "d", 4);
 
      } else if (fpExpect->DoneIsChecked()) {
 
        os << "!";
 
      } else {
 
        os << " ";
 
      }
 
    } else {
 
      os << " ";
 
    }
  }
  }
 
 
  // status field
  // status field
  os << " s=" << RosPrintBvi(fStatus, sbase);
  os << " s=" << RosPrintBvi(fStatus, sbase);
  uint8_t scval  = fpExpect ? fpExpect->StatusValue() : cntx.StatusValue();
  uint8_t scval  = fpExpect ? fpExpect->StatusValue() : cntx.StatusValue();
Line 326... Line 346...
  } else {
  } else {
    os << ( scmsk != 0xff ? "!" : " " );
    os << ( scmsk != 0xff ? "!" : " " );
  }
  }
 
 
  if (TestFlagAny(kFlagDone)) {
  if (TestFlagAny(kFlagDone)) {
    if (TestFlagAny(kFlagChkStat|kFlagChkData)) {
    if (TestFlagAny(kFlagChkStat|kFlagChkData|kFlagChkDone)) {
      os << " FAIL: "
      os << " FAIL: "
         << Rtools::Flags2String(fFlags&(kFlagChkStat|kFlagChkData),
         << Rtools::Flags2String(fFlags&(kFlagChkStat|kFlagChkData|kFlagChkDone),
                                 FlagNames(),',');
                                 FlagNames(),',');
    } else {
    } else {
      os << " OK";
      os << " OK";
    }
    }
  } else if (TestFlagAny(kFlagSend)) {
  } else if (TestFlagAny(kFlagSend)) {
Line 352... Line 372...
 
 
    size_t size  = BlockSize();
    size_t size  = BlockSize();
    const uint16_t* pdat = BlockPointer();
    const uint16_t* pdat = BlockPointer();
 
 
    for (size_t i=0; i<size; i++) {
    for (size_t i=0; i<size; i++) {
      if (i%ncol == 0) os << "\n    " << RosPrintf(i,"d",3) << ": ";
      if (i%ncol == 0) os << "\n    " << RosPrintf(i,"d",4) << ": ";
      os << RosPrintBvi(pdat[i], dbase);
      os << RosPrintBvi(pdat[i], dbase);
      if (dcheck) {
      if (dcheck) {
        if (!fpExpect->BlockCheck(i, pdat[i])) {
        if (!fpExpect->BlockCheck(i, pdat[i])) {
          os << "#";
          os << "#";
        } else {
        } else {
Line 371... Line 391...
    if (dcheck && TestFlagAny(kFlagChkData)) {
    if (dcheck && TestFlagAny(kFlagChkData)) {
      const vector<uint16_t>& evalvec = fpExpect->BlockValue();
      const vector<uint16_t>& evalvec = fpExpect->BlockValue();
      const vector<uint16_t>& emskvec = fpExpect->BlockMask();
      const vector<uint16_t>& emskvec = fpExpect->BlockMask();
      for (size_t i=0; i<size; i++) {
      for (size_t i=0; i<size; i++) {
        if (!fpExpect->BlockCheck(i, pdat[i])) {
        if (!fpExpect->BlockCheck(i, pdat[i])) {
          os << "\n      FAIL d[" << RosPrintf(i,"d",3) << "]: "
          os << "\n      FAIL d[" << RosPrintf(i,"d",4) << "]: "
             << RosPrintBvi(pdat[i], dbase) << "#"
             << RosPrintBvi(pdat[i], dbase) << "#"
             << "  D=" << RosPrintBvi(evalvec[i], dbase);
             << "  D=" << RosPrintBvi(evalvec[i], dbase);
          if (i < emskvec.size() && emskvec[i]!=0x0000) {
          if (i < emskvec.size() && emskvec[i]!=0x0000) {
            os << "," << RosPrintBvi(emskvec[i], dbase);
            os << "," << RosPrintBvi(emskvec[i], dbase);
          }
          }
Line 387... Line 407...
  if (ccode==kCmdWblk) {
  if (ccode==kCmdWblk) {
    const uint16_t* pdat = BlockPointer();
    const uint16_t* pdat = BlockPointer();
    size_t size = BlockSize();
    size_t size = BlockSize();
    size_t ncol = (80-4-5)/(dwidth+2);
    size_t ncol = (80-4-5)/(dwidth+2);
    for (size_t i=0; i<size; i++) {
    for (size_t i=0; i<size; i++) {
      if (i%ncol == 0) os << "\n    " << RosPrintf(i,"d",3) << ": ";
      if (i%ncol == 0) os << "\n    " << RosPrintf(i,"d",4) << ": ";
      os << RosPrintBvi(pdat[i], dbase) << "  ";
      os << RosPrintBvi(pdat[i], dbase) << "  ";
    }
    }
  }
  }
 
 
  os << endl;
  os << endl;
Line 452... Line 472...
const Retro::RflagName* RlinkCommand::FlagNames()
const Retro::RflagName* RlinkCommand::FlagNames()
{
{
  // use msb first order, will also be printing order
  // use msb first order, will also be printing order
  static Retro::RflagName fnam[] = {
  static Retro::RflagName fnam[] = {
    {kFlagChkData, "ChkData"},
    {kFlagChkData, "ChkData"},
 
    {kFlagChkDone, "ChkDone"},
    {kFlagChkStat, "ChkStat"},
    {kFlagChkStat, "ChkStat"},
    {kFlagErrDec,  "ErrDec"},
    {kFlagErrDec,  "ErrDec"},
    {kFlagErrNak,  "ErrNak"},
    {kFlagErrNak,  "ErrNak"},
    {kFlagPktEnd,  "PktEnd"},
    {kFlagPktEnd,  "PktEnd"},
    {kFlagPktBeg,  "PktBeg"},
    {kFlagPktBeg,  "PktBeg"},

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.