mirror of
https://gitlab.com/etherlab.org/ethercat.git
synced 2026-02-05 19:39:50 +08:00
crc reset command.
This commit is contained in:
@@ -27,6 +27,7 @@
|
||||
|
||||
#include <iostream>
|
||||
#include <iomanip>
|
||||
#include <algorithm>
|
||||
using namespace std;
|
||||
|
||||
#include "CommandCrc.h"
|
||||
@@ -45,8 +46,9 @@ string CommandCrc::helpString(const string &binaryBaseName) const
|
||||
{
|
||||
stringstream str;
|
||||
|
||||
str << binaryBaseName << " " << getName()
|
||||
<< " [OPTIONS]" << endl
|
||||
str
|
||||
<< binaryBaseName << " " << getName() << endl
|
||||
<< binaryBaseName << " " << getName() << " reset" << endl
|
||||
<< endl
|
||||
<< getBriefDescription() << endl
|
||||
<< endl
|
||||
@@ -66,16 +68,60 @@ string CommandCrc::helpString(const string &binaryBaseName) const
|
||||
/****************************************************************************/
|
||||
|
||||
#define NUM_PORTS (4)
|
||||
#define REG_SIZE (20)
|
||||
|
||||
void CommandCrc::execute(const StringVector &args)
|
||||
{
|
||||
bool reset = false;
|
||||
|
||||
if (args.size() > 1) {
|
||||
stringstream err;
|
||||
err << "'" << getName() << "' takes either no or 'reset' argument!";
|
||||
throwInvalidUsageException(err);
|
||||
}
|
||||
|
||||
if (args.size() == 1) {
|
||||
string arg = args[0];
|
||||
transform(arg.begin(), arg.end(),
|
||||
arg.begin(), (int (*) (int)) std::tolower);
|
||||
if (arg != "reset") {
|
||||
stringstream err;
|
||||
err << "'" << getName() << "' takes either no or 'reset' argument!";
|
||||
throwInvalidUsageException(err);
|
||||
}
|
||||
|
||||
reset = true;
|
||||
}
|
||||
|
||||
MasterDevice m(getSingleMasterIndex());
|
||||
m.open(MasterDevice::Read);
|
||||
m.open(reset ? MasterDevice::ReadWrite : MasterDevice::Read);
|
||||
|
||||
ec_ioctl_master_t master;
|
||||
m.getMaster(&master);
|
||||
|
||||
uint8_t data[REG_SIZE];
|
||||
ec_ioctl_slave_reg_t io;
|
||||
io.emergency = 0;
|
||||
io.address = 0x0300;
|
||||
io.size = REG_SIZE;
|
||||
io.data = data;
|
||||
|
||||
if (reset) {
|
||||
for (int j = 0; j < REG_SIZE; j++) {
|
||||
data[j] = 0x00;
|
||||
}
|
||||
|
||||
for (unsigned int i = 0; i < master.slave_count; i++) {
|
||||
|
||||
io.slave_position = i;
|
||||
try {
|
||||
m.writeReg(&io);
|
||||
} catch (MasterDeviceException &e) {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
cout << " |";
|
||||
for (unsigned int port = 0; port < NUM_PORTS; port++) {
|
||||
@@ -89,19 +135,12 @@ void CommandCrc::execute(const StringVector &args)
|
||||
}
|
||||
cout << endl;
|
||||
|
||||
ec_ioctl_slave_reg_t io;
|
||||
io.emergency = 0;
|
||||
io.address = 0x0300;
|
||||
io.size = 20;
|
||||
io.data = new uint8_t[20];
|
||||
|
||||
for (unsigned int i = 0; i < master.slave_count; i++) {
|
||||
|
||||
io.slave_position = i;
|
||||
try {
|
||||
m.readReg(&io);
|
||||
} catch (MasterDeviceException &e) {
|
||||
delete [] io.data;
|
||||
throw e;
|
||||
}
|
||||
|
||||
@@ -120,8 +159,6 @@ void CommandCrc::execute(const StringVector &args)
|
||||
slaveName = slaveName.substr(0, 11);
|
||||
cout << slaveName << endl;
|
||||
}
|
||||
|
||||
delete [] io.data;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
Reference in New Issue
Block a user