crc reset command.

This commit is contained in:
Florian Pose
2017-03-03 13:50:49 +01:00
parent efc11fa25f
commit 94ab875ba9

View File

@@ -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;
}
/*****************************************************************************/