text: /*****************************************************************************
   *
   *  $Id: SdoCommand.cpp,v 20748e9d2238 2010/03/05 12:39:57 fp $
   *
   *  Copyright (C) 2006-2009  Florian Pose, Ingenieurgemeinschaft IgH
   *
   *  This file is part of the IgH EtherCAT Master.
   *
   *  The IgH EtherCAT Master is free software; you can redistribute it and/or
   *  modify it under the terms of the GNU General Public License version 2, as
   *  published by the Free Software Foundation.
   *
   *  The IgH EtherCAT Master 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 the IgH EtherCAT Master; if not, write to the Free Software
   *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
   *
   *  ---
   *
   *  The license mentioned above concerns the source code only. Using the
   *  EtherCAT technology and brand is only permitted in compliance with the
   *  industrial property and similar rights of Beckhoff Automation GmbH.
   *
   ****************************************************************************/
  
  #include "SdoCommand.h"
  
  /*****************************************************************************/
  
  SdoCommand::SdoCommand(const string &name, const string &briefDesc):
      Command(name, briefDesc)
  {
  }
  
  /****************************************************************************/
  
  const char *SdoCommand::abortText(uint32_t abortCode)
  {
      const AbortMessage *abortMsg;
  
      for (abortMsg = abortMessages; abortMsg->code; abortMsg++) {
          if (abortMsg->code == abortCode) {
              return abortMsg->message;
          }
      }
  
      return "???";
  }
  
  /*****************************************************************************/
  
  /** SDO abort messages.
   *
   * The "Abort SDO transfer request" supplies an abort code, which can be
   * translated to clear text. This table does the mapping of the codes and
   * messages.
   */
  const SdoCommand::AbortMessage SdoCommand::abortMessages[] = {
      {0x05030000, "Toggle bit not changed"},
      {0x05040000, "SDO protocol timeout"},
      {0x05040001, "Client/Server command specifier not valid or unknown"},
      {0x05040005, "Out of memory"},
      {0x06010000, "Unsupported access to an object"},
      {0x06010001, "Attempt to read a write-only object"},
      {0x06010002, "Attempt to write a read-only object"},
      {0x06020000, "This object does not exist in the object directory"},
      {0x06040041, "The object cannot be mapped into the PDO"},
      {0x06040042, "The number and length of the objects to be mapped would"
       " exceed the PDO length"},
      {0x06040043, "General parameter incompatibility reason"},
      {0x06040047, "Gerneral internal incompatibility in device"},
      {0x06060000, "Access failure due to a hardware error"},
      {0x06070010, "Data type does not match, length of service parameter does"
       " not match"},
      {0x06070012, "Data type does not match, length of service parameter too"
       " high"},
      {0x06070013, "Data type does not match, length of service parameter too"
       " low"},
      {0x06090011, "Subindex does not exist"},
      {0x06090030, "Value range of parameter exceeded"},
      {0x06090031, "Value of parameter written too high"},
      {0x06090032, "Value of parameter written too low"},
      {0x06090036, "Maximum value is less than minimum value"},
      {0x08000000, "General error"},
      {0x08000020, "Data cannot be transferred or stored to the application"},
      {0x08000021, "Data cannot be transferred or stored to the application"
       " because of local control"},
      {0x08000022, "Data cannot be transferred or stored to the application"
       " because of the present device state"},
      {0x08000023, "Object dictionary dynamic generation fails or no object"
       " dictionary is present"},
      {}
  };
  
  /****************************************************************************/
  