tool/CommandXml.cpp
author Knud Baastrup <kba@deif.com>
Tue, 14 Apr 2015 10:12:55 -0400
changeset 2625 e25af8bd3957
parent 2589 2b9c78543663
permissions -rw-r--r--
Eoe mac address now derived from unique mac.
The EoE MAC address is now derived from the NIC part of the first global
unique MAC address of the linked list of available network interfaces or
otherwise the MAC address used by the EtherCAT master. The EoE MAC address
will get the format 02:NIC:NIC:NIC:RP:RP where NIC comes from the unique MAC
address (if available) and RP is the ring position of the EoE slave.
1142
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     1
/*****************************************************************************
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     2
 *
1363
11c0b2caa253 Improved and added license headers.
Florian Pose <fp@igh-essen.com>
parents: 1327
diff changeset
     3
 *  $Id$
11c0b2caa253 Improved and added license headers.
Florian Pose <fp@igh-essen.com>
parents: 1327
diff changeset
     4
 *
2589
2b9c78543663 Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents: 1968
diff changeset
     5
 *  Copyright (C) 2006-2014  Florian Pose, Ingenieurgemeinschaft IgH
1363
11c0b2caa253 Improved and added license headers.
Florian Pose <fp@igh-essen.com>
parents: 1327
diff changeset
     6
 *
11c0b2caa253 Improved and added license headers.
Florian Pose <fp@igh-essen.com>
parents: 1327
diff changeset
     7
 *  This file is part of the IgH EtherCAT Master.
11c0b2caa253 Improved and added license headers.
Florian Pose <fp@igh-essen.com>
parents: 1327
diff changeset
     8
 *
11c0b2caa253 Improved and added license headers.
Florian Pose <fp@igh-essen.com>
parents: 1327
diff changeset
     9
 *  The IgH EtherCAT Master is free software; you can redistribute it and/or
11c0b2caa253 Improved and added license headers.
Florian Pose <fp@igh-essen.com>
parents: 1327
diff changeset
    10
 *  modify it under the terms of the GNU General Public License version 2, as
11c0b2caa253 Improved and added license headers.
Florian Pose <fp@igh-essen.com>
parents: 1327
diff changeset
    11
 *  published by the Free Software Foundation.
11c0b2caa253 Improved and added license headers.
Florian Pose <fp@igh-essen.com>
parents: 1327
diff changeset
    12
 *
11c0b2caa253 Improved and added license headers.
Florian Pose <fp@igh-essen.com>
parents: 1327
diff changeset
    13
 *  The IgH EtherCAT Master is distributed in the hope that it will be useful,
11c0b2caa253 Improved and added license headers.
Florian Pose <fp@igh-essen.com>
parents: 1327
diff changeset
    14
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
11c0b2caa253 Improved and added license headers.
Florian Pose <fp@igh-essen.com>
parents: 1327
diff changeset
    15
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General
11c0b2caa253 Improved and added license headers.
Florian Pose <fp@igh-essen.com>
parents: 1327
diff changeset
    16
 *  Public License for more details.
11c0b2caa253 Improved and added license headers.
Florian Pose <fp@igh-essen.com>
parents: 1327
diff changeset
    17
 *
11c0b2caa253 Improved and added license headers.
Florian Pose <fp@igh-essen.com>
parents: 1327
diff changeset
    18
 *  You should have received a copy of the GNU General Public License along
11c0b2caa253 Improved and added license headers.
Florian Pose <fp@igh-essen.com>
parents: 1327
diff changeset
    19
 *  with the IgH EtherCAT Master; if not, write to the Free Software
11c0b2caa253 Improved and added license headers.
Florian Pose <fp@igh-essen.com>
parents: 1327
diff changeset
    20
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
11c0b2caa253 Improved and added license headers.
Florian Pose <fp@igh-essen.com>
parents: 1327
diff changeset
    21
 *
11c0b2caa253 Improved and added license headers.
Florian Pose <fp@igh-essen.com>
parents: 1327
diff changeset
    22
 *  ---
11c0b2caa253 Improved and added license headers.
Florian Pose <fp@igh-essen.com>
parents: 1327
diff changeset
    23
 *
11c0b2caa253 Improved and added license headers.
Florian Pose <fp@igh-essen.com>
parents: 1327
diff changeset
    24
 *  The license mentioned above concerns the source code only. Using the
11c0b2caa253 Improved and added license headers.
Florian Pose <fp@igh-essen.com>
parents: 1327
diff changeset
    25
 *  EtherCAT technology and brand is only permitted in compliance with the
11c0b2caa253 Improved and added license headers.
Florian Pose <fp@igh-essen.com>
parents: 1327
diff changeset
    26
 *  industrial property and similar rights of Beckhoff Automation GmbH.
1142
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    27
 *
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    28
 ****************************************************************************/
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    29
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    30
#include <iostream>
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    31
#include <iomanip>
1222
7348d6abb6cb Applied patch by Karsten Schwinne, adding a few header files necessary
Florian Pose <fp@igh-essen.com>
parents: 1157
diff changeset
    32
#include <string.h>
1142
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    33
using namespace std;
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    34
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    35
#include "CommandXml.h"
1826
ec6223c3b7ec Multi-master support for command-line tool. The --master option supports
Florian Pose <fp@igh-essen.com>
parents: 1560
diff changeset
    36
#include "MasterDevice.h"
1142
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    37
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    38
/*****************************************************************************/
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    39
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    40
CommandXml::CommandXml():
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    41
    Command("xml", "Generate slave information XML.")
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    42
{
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    43
}
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    44
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    45
/*****************************************************************************/
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    46
1968
4f682084c643 Implemented drive_no for command-line tool; binary base name is now a
Florian Pose <fp@igh-essen.com>
parents: 1890
diff changeset
    47
string CommandXml::helpString(const string &binaryBaseName) const
1142
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    48
{
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    49
    stringstream str;
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    50
1968
4f682084c643 Implemented drive_no for command-line tool; binary base name is now a
Florian Pose <fp@igh-essen.com>
parents: 1890
diff changeset
    51
    str << binaryBaseName << " " << getName() << " [OPTIONS]" << endl
1142
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    52
        << endl
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    53
        << getBriefDescription() << endl
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    54
        << endl
1327
4d179b06dd3c merge -c1604 branches/stable-1.4: Fixed spelling of EtherCAT terms.
Florian Pose <fp@igh-essen.com>
parents: 1222
diff changeset
    55
        << "Note that the PDO information can either originate" << endl
1142
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    56
        << "from the SII or from the CoE communication area. For" << endl
1327
4d179b06dd3c merge -c1604 branches/stable-1.4: Fixed spelling of EtherCAT terms.
Florian Pose <fp@igh-essen.com>
parents: 1222
diff changeset
    57
        << "slaves, that support configuring PDO assignment and" << endl
1144
7dbfdd61812c Bugfixes and improvements.
Florian Pose <fp@igh-essen.com>
parents: 1142
diff changeset
    58
        << "mapping, the output depends on the last configuration." << endl
1142
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    59
        << endl
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    60
        << "Command-specific options:" << endl
1157
04d1c950cf9d Added --help for alias and position parameters.
Florian Pose <fp@igh-essen.com>
parents: 1151
diff changeset
    61
        << "  --alias    -a <alias>" << endl
04d1c950cf9d Added --help for alias and position parameters.
Florian Pose <fp@igh-essen.com>
parents: 1151
diff changeset
    62
        << "  --position -p <pos>    Slave selection. See the help of" << endl
04d1c950cf9d Added --help for alias and position parameters.
Florian Pose <fp@igh-essen.com>
parents: 1151
diff changeset
    63
        << "                         the 'slaves' command." << endl
1142
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    64
        << endl
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    65
        << numericInfo();
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    66
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    67
    return str.str();
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    68
}
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    69
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    70
/****************************************************************************/
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    71
1826
ec6223c3b7ec Multi-master support for command-line tool. The --master option supports
Florian Pose <fp@igh-essen.com>
parents: 1560
diff changeset
    72
void CommandXml::execute(const StringVector &args)
1142
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    73
{
1151
1fc1535dec29 Alias/Position selection.
Florian Pose <fp@igh-essen.com>
parents: 1144
diff changeset
    74
    SlaveList slaves;
1fc1535dec29 Alias/Position selection.
Florian Pose <fp@igh-essen.com>
parents: 1144
diff changeset
    75
    SlaveList::const_iterator si;
1fc1535dec29 Alias/Position selection.
Florian Pose <fp@igh-essen.com>
parents: 1144
diff changeset
    76
1373
e651000f1ff1 Complain about given arguments if none are required.
Florian Pose <fp@igh-essen.com>
parents: 1363
diff changeset
    77
    if (args.size()) {
e651000f1ff1 Complain about given arguments if none are required.
Florian Pose <fp@igh-essen.com>
parents: 1363
diff changeset
    78
        stringstream err;
e651000f1ff1 Complain about given arguments if none are required.
Florian Pose <fp@igh-essen.com>
parents: 1363
diff changeset
    79
        err << "'" << getName() << "' takes no arguments!";
e651000f1ff1 Complain about given arguments if none are required.
Florian Pose <fp@igh-essen.com>
parents: 1363
diff changeset
    80
        throwInvalidUsageException(err);
e651000f1ff1 Complain about given arguments if none are required.
Florian Pose <fp@igh-essen.com>
parents: 1363
diff changeset
    81
    }
e651000f1ff1 Complain about given arguments if none are required.
Florian Pose <fp@igh-essen.com>
parents: 1363
diff changeset
    82
1870
0cee1fb7f0fd Added getSingleMasterIndex() for command-line tool.
Florian Pose <fp@igh-essen.com>
parents: 1869
diff changeset
    83
    MasterDevice m(getSingleMasterIndex());
1142
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    84
    m.open(MasterDevice::Read);
1151
1fc1535dec29 Alias/Position selection.
Florian Pose <fp@igh-essen.com>
parents: 1144
diff changeset
    85
    slaves = selectedSlaves(m);
1142
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    86
1474
758a9bd3e549 'ethercat xml' creates <EtherCATInfoList> for more than one slave.
Florian Pose <fp@igh-essen.com>
parents: 1373
diff changeset
    87
    cout << "<?xml version=\"1.0\" ?>" << endl;
758a9bd3e549 'ethercat xml' creates <EtherCATInfoList> for more than one slave.
Florian Pose <fp@igh-essen.com>
parents: 1373
diff changeset
    88
    if (slaves.size() > 1) {
758a9bd3e549 'ethercat xml' creates <EtherCATInfoList> for more than one slave.
Florian Pose <fp@igh-essen.com>
parents: 1373
diff changeset
    89
        cout << "<EtherCATInfoList>" << endl;
758a9bd3e549 'ethercat xml' creates <EtherCATInfoList> for more than one slave.
Florian Pose <fp@igh-essen.com>
parents: 1373
diff changeset
    90
    }
758a9bd3e549 'ethercat xml' creates <EtherCATInfoList> for more than one slave.
Florian Pose <fp@igh-essen.com>
parents: 1373
diff changeset
    91
1151
1fc1535dec29 Alias/Position selection.
Florian Pose <fp@igh-essen.com>
parents: 1144
diff changeset
    92
    for (si = slaves.begin(); si != slaves.end(); si++) {
1474
758a9bd3e549 'ethercat xml' creates <EtherCATInfoList> for more than one slave.
Florian Pose <fp@igh-essen.com>
parents: 1373
diff changeset
    93
        generateSlaveXml(m, *si, slaves.size() > 1 ? 1 : 0);
758a9bd3e549 'ethercat xml' creates <EtherCATInfoList> for more than one slave.
Florian Pose <fp@igh-essen.com>
parents: 1373
diff changeset
    94
    }
758a9bd3e549 'ethercat xml' creates <EtherCATInfoList> for more than one slave.
Florian Pose <fp@igh-essen.com>
parents: 1373
diff changeset
    95
758a9bd3e549 'ethercat xml' creates <EtherCATInfoList> for more than one slave.
Florian Pose <fp@igh-essen.com>
parents: 1373
diff changeset
    96
    if (slaves.size() > 1) {
758a9bd3e549 'ethercat xml' creates <EtherCATInfoList> for more than one slave.
Florian Pose <fp@igh-essen.com>
parents: 1373
diff changeset
    97
        cout << "</EtherCATInfoList>" << endl;
1142
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    98
    }
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    99
}
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   100
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   101
/****************************************************************************/
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   102
1151
1fc1535dec29 Alias/Position selection.
Florian Pose <fp@igh-essen.com>
parents: 1144
diff changeset
   103
void CommandXml::generateSlaveXml(
1fc1535dec29 Alias/Position selection.
Florian Pose <fp@igh-essen.com>
parents: 1144
diff changeset
   104
        MasterDevice &m,
1474
758a9bd3e549 'ethercat xml' creates <EtherCATInfoList> for more than one slave.
Florian Pose <fp@igh-essen.com>
parents: 1373
diff changeset
   105
        const ec_ioctl_slave_t &slave,
758a9bd3e549 'ethercat xml' creates <EtherCATInfoList> for more than one slave.
Florian Pose <fp@igh-essen.com>
parents: 1373
diff changeset
   106
        unsigned int indent
1151
1fc1535dec29 Alias/Position selection.
Florian Pose <fp@igh-essen.com>
parents: 1144
diff changeset
   107
        )
1142
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   108
{
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   109
    ec_ioctl_slave_sync_t sync;
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   110
    ec_ioctl_slave_sync_pdo_t pdo;
1474
758a9bd3e549 'ethercat xml' creates <EtherCATInfoList> for more than one slave.
Florian Pose <fp@igh-essen.com>
parents: 1373
diff changeset
   111
    string pdoType, in;
1142
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   112
    ec_ioctl_slave_sync_pdo_entry_t entry;
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   113
    unsigned int i, j, k;
1474
758a9bd3e549 'ethercat xml' creates <EtherCATInfoList> for more than one slave.
Florian Pose <fp@igh-essen.com>
parents: 1373
diff changeset
   114
758a9bd3e549 'ethercat xml' creates <EtherCATInfoList> for more than one slave.
Florian Pose <fp@igh-essen.com>
parents: 1373
diff changeset
   115
    for (i = 0; i < indent; i++) {
758a9bd3e549 'ethercat xml' creates <EtherCATInfoList> for more than one slave.
Florian Pose <fp@igh-essen.com>
parents: 1373
diff changeset
   116
        in += "  ";
758a9bd3e549 'ethercat xml' creates <EtherCATInfoList> for more than one slave.
Florian Pose <fp@igh-essen.com>
parents: 1373
diff changeset
   117
    }
2589
2b9c78543663 Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents: 1968
diff changeset
   118
1142
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   119
    cout
1474
758a9bd3e549 'ethercat xml' creates <EtherCATInfoList> for more than one slave.
Florian Pose <fp@igh-essen.com>
parents: 1373
diff changeset
   120
        << in << "<EtherCATInfo>" << endl
2589
2b9c78543663 Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents: 1968
diff changeset
   121
        << in << "  <!-- Slave " << dec << slave.position << " -->" << endl
1474
758a9bd3e549 'ethercat xml' creates <EtherCATInfoList> for more than one slave.
Florian Pose <fp@igh-essen.com>
parents: 1373
diff changeset
   122
        << in << "  <Vendor>" << endl
758a9bd3e549 'ethercat xml' creates <EtherCATInfoList> for more than one slave.
Florian Pose <fp@igh-essen.com>
parents: 1373
diff changeset
   123
        << in << "    <Id>" << slave.vendor_id << "</Id>" << endl
758a9bd3e549 'ethercat xml' creates <EtherCATInfoList> for more than one slave.
Florian Pose <fp@igh-essen.com>
parents: 1373
diff changeset
   124
        << in << "  </Vendor>" << endl
758a9bd3e549 'ethercat xml' creates <EtherCATInfoList> for more than one slave.
Florian Pose <fp@igh-essen.com>
parents: 1373
diff changeset
   125
        << in << "  <Descriptions>" << endl
758a9bd3e549 'ethercat xml' creates <EtherCATInfoList> for more than one slave.
Florian Pose <fp@igh-essen.com>
parents: 1373
diff changeset
   126
        << in << "    <Devices>" << endl
758a9bd3e549 'ethercat xml' creates <EtherCATInfoList> for more than one slave.
Florian Pose <fp@igh-essen.com>
parents: 1373
diff changeset
   127
        << in << "      <Device>" << endl
758a9bd3e549 'ethercat xml' creates <EtherCATInfoList> for more than one slave.
Florian Pose <fp@igh-essen.com>
parents: 1373
diff changeset
   128
        << in << "        <Type ProductCode=\"#x"
1142
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   129
        << hex << setfill('0') << setw(8) << slave.product_code
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   130
        << "\" RevisionNo=\"#x"
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   131
        << hex << setfill('0') << setw(8) << slave.revision_number
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   132
        << "\">" << slave.order << "</Type>" << endl;
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   133
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   134
    if (strlen(slave.name)) {
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   135
        cout
1474
758a9bd3e549 'ethercat xml' creates <EtherCATInfoList> for more than one slave.
Florian Pose <fp@igh-essen.com>
parents: 1373
diff changeset
   136
            << in << "        <Name><![CDATA["
1142
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   137
            << slave.name
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   138
            << "]]></Name>" << endl;
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   139
    }
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   140
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   141
    for (i = 0; i < slave.sync_count; i++) {
1151
1fc1535dec29 Alias/Position selection.
Florian Pose <fp@igh-essen.com>
parents: 1144
diff changeset
   142
        m.getSync(&sync, slave.position, i);
1142
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   143
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   144
        cout
2589
2b9c78543663 Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents: 1968
diff changeset
   145
            << in << "        <Sm Enable=\""
2b9c78543663 Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents: 1968
diff changeset
   146
            << dec << (unsigned int) sync.enable
1890
b64e3791075d Output hex values in ethercat xml.
Florian Pose <fp@igh-essen.com>
parents: 1870
diff changeset
   147
            << "\" StartAddress=\"#x" << hex << sync.physical_start_address
2589
2b9c78543663 Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents: 1968
diff changeset
   148
            << "\" ControlByte=\"#x"
2b9c78543663 Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents: 1968
diff changeset
   149
            << hex << (unsigned int) sync.control_register
1890
b64e3791075d Output hex values in ethercat xml.
Florian Pose <fp@igh-essen.com>
parents: 1870
diff changeset
   150
            << "\" DefaultSize=\"" << dec << sync.default_size
1142
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   151
            << "\" />" << endl;
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   152
    }
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   153
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   154
    for (i = 0; i < slave.sync_count; i++) {
1151
1fc1535dec29 Alias/Position selection.
Florian Pose <fp@igh-essen.com>
parents: 1144
diff changeset
   155
        m.getSync(&sync, slave.position, i);
1142
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   156
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   157
        for (j = 0; j < sync.pdo_count; j++) {
1151
1fc1535dec29 Alias/Position selection.
Florian Pose <fp@igh-essen.com>
parents: 1144
diff changeset
   158
            m.getPdo(&pdo, slave.position, i, j);
1142
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   159
            pdoType = (sync.control_register & 0x04 ? "R" : "T");
1327
4d179b06dd3c merge -c1604 branches/stable-1.4: Fixed spelling of EtherCAT terms.
Florian Pose <fp@igh-essen.com>
parents: 1222
diff changeset
   160
            pdoType += "xPdo"; // last 2 letters lowercase in XML!
1142
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   161
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   162
            cout
1474
758a9bd3e549 'ethercat xml' creates <EtherCATInfoList> for more than one slave.
Florian Pose <fp@igh-essen.com>
parents: 1373
diff changeset
   163
                << in << "        <" << pdoType
1142
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   164
                << " Sm=\"" << i << "\" Fixed=\"1\" Mandatory=\"1\">" << endl
1474
758a9bd3e549 'ethercat xml' creates <EtherCATInfoList> for more than one slave.
Florian Pose <fp@igh-essen.com>
parents: 1373
diff changeset
   165
                << in << "          <Index>#x"
1142
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   166
                << hex << setfill('0') << setw(4) << pdo.index
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   167
                << "</Index>" << endl
1474
758a9bd3e549 'ethercat xml' creates <EtherCATInfoList> for more than one slave.
Florian Pose <fp@igh-essen.com>
parents: 1373
diff changeset
   168
                << in << "          <Name>" << pdo.name << "</Name>" << endl;
1142
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   169
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   170
            for (k = 0; k < pdo.entry_count; k++) {
1151
1fc1535dec29 Alias/Position selection.
Florian Pose <fp@igh-essen.com>
parents: 1144
diff changeset
   171
                m.getPdoEntry(&entry, slave.position, i, j, k);
1142
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   172
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   173
                cout
1474
758a9bd3e549 'ethercat xml' creates <EtherCATInfoList> for more than one slave.
Florian Pose <fp@igh-essen.com>
parents: 1373
diff changeset
   174
                    << in << "          <Entry>" << endl
758a9bd3e549 'ethercat xml' creates <EtherCATInfoList> for more than one slave.
Florian Pose <fp@igh-essen.com>
parents: 1373
diff changeset
   175
                    << in << "            <Index>#x"
1142
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   176
                    << hex << setfill('0') << setw(4) << entry.index
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   177
                    << "</Index>" << endl;
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   178
                if (entry.index)
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   179
                    cout
1474
758a9bd3e549 'ethercat xml' creates <EtherCATInfoList> for more than one slave.
Florian Pose <fp@igh-essen.com>
parents: 1373
diff changeset
   180
                        << in << "            <SubIndex>"
1142
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   181
                        << dec << (unsigned int) entry.subindex
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   182
                        << "</SubIndex>" << endl;
2589
2b9c78543663 Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents: 1968
diff changeset
   183
1142
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   184
                cout
1474
758a9bd3e549 'ethercat xml' creates <EtherCATInfoList> for more than one slave.
Florian Pose <fp@igh-essen.com>
parents: 1373
diff changeset
   185
                    << in << "            <BitLen>"
1142
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   186
                    << dec << (unsigned int) entry.bit_length
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   187
                    << "</BitLen>" << endl;
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   188
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   189
                if (entry.index) {
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   190
                    cout
1474
758a9bd3e549 'ethercat xml' creates <EtherCATInfoList> for more than one slave.
Florian Pose <fp@igh-essen.com>
parents: 1373
diff changeset
   191
                        << in << "            <Name>" << entry.name
1142
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   192
                        << "</Name>" << endl
1474
758a9bd3e549 'ethercat xml' creates <EtherCATInfoList> for more than one slave.
Florian Pose <fp@igh-essen.com>
parents: 1373
diff changeset
   193
                        << in << "            <DataType>";
1142
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   194
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   195
                    if (entry.bit_length == 1) {
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   196
                        cout << "BOOL";
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   197
                    } else if (!(entry.bit_length % 8)) {
1560
0ca50da62c52 Allow BITx types in XML output.
Florian Pose <fp@igh-essen.com>
parents: 1474
diff changeset
   198
                        if (entry.bit_length <= 64) {
1142
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   199
                            cout << "UINT" << (unsigned int) entry.bit_length;
1560
0ca50da62c52 Allow BITx types in XML output.
Florian Pose <fp@igh-essen.com>
parents: 1474
diff changeset
   200
                        } else {
1142
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   201
                            cout << "STRING("
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   202
                                << (unsigned int) (entry.bit_length / 8)
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   203
                                << ")";
1560
0ca50da62c52 Allow BITx types in XML output.
Florian Pose <fp@igh-essen.com>
parents: 1474
diff changeset
   204
                        }
1142
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   205
                    } else {
1560
0ca50da62c52 Allow BITx types in XML output.
Florian Pose <fp@igh-essen.com>
parents: 1474
diff changeset
   206
                        cout << "BIT" << (unsigned int) entry.bit_length;
1142
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   207
                    }
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   208
1560
0ca50da62c52 Allow BITx types in XML output.
Florian Pose <fp@igh-essen.com>
parents: 1474
diff changeset
   209
                    cout << "</DataType>" << endl;
1142
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   210
                }
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   211
1474
758a9bd3e549 'ethercat xml' creates <EtherCATInfoList> for more than one slave.
Florian Pose <fp@igh-essen.com>
parents: 1373
diff changeset
   212
                cout << in << "          </Entry>" << endl;
1142
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   213
            }
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   214
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   215
            cout
1474
758a9bd3e549 'ethercat xml' creates <EtherCATInfoList> for more than one slave.
Florian Pose <fp@igh-essen.com>
parents: 1373
diff changeset
   216
                << in << "        </" << pdoType << ">" << endl;
1142
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   217
        }
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   218
    }
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   219
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   220
    cout
1474
758a9bd3e549 'ethercat xml' creates <EtherCATInfoList> for more than one slave.
Florian Pose <fp@igh-essen.com>
parents: 1373
diff changeset
   221
        << in << "      </Device>" << endl
758a9bd3e549 'ethercat xml' creates <EtherCATInfoList> for more than one slave.
Florian Pose <fp@igh-essen.com>
parents: 1373
diff changeset
   222
        << in << "    </Devices>" << endl
758a9bd3e549 'ethercat xml' creates <EtherCATInfoList> for more than one slave.
Florian Pose <fp@igh-essen.com>
parents: 1373
diff changeset
   223
        << in << "  </Descriptions>" << endl
758a9bd3e549 'ethercat xml' creates <EtherCATInfoList> for more than one slave.
Florian Pose <fp@igh-essen.com>
parents: 1373
diff changeset
   224
        << in << "</EtherCATInfo>" << endl;
758a9bd3e549 'ethercat xml' creates <EtherCATInfoList> for more than one slave.
Florian Pose <fp@igh-essen.com>
parents: 1373
diff changeset
   225
}
758a9bd3e549 'ethercat xml' creates <EtherCATInfoList> for more than one slave.
Florian Pose <fp@igh-essen.com>
parents: 1373
diff changeset
   226
1142
59be91dfcbe1 Redesigned command interface.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   227
/*****************************************************************************/