Implemented domain command.

This commit is contained in:
Florian Pose
2008-06-04 10:13:07 +00:00
parent 1ecd525663
commit ea384440f4
5 changed files with 150 additions and 4 deletions
+71 -1
View File
@@ -62,6 +62,21 @@ void Master::close()
/****************************************************************************/
void Master::showDomains(int domainIndex)
{
if (domainIndex == -1) {
unsigned int numDomains = domainCount(), i;
for (i = 0; i < numDomains; i++) {
showDomain(i);
}
} else {
showDomain(domainIndex);
}
}
/****************************************************************************/
void Master::listSlaves()
{
unsigned int numSlaves = slaveCount(), i;
@@ -127,6 +142,29 @@ void Master::generateXml(int slavePosition)
/****************************************************************************/
void Master::showDomain(unsigned int domainIndex)
{
ec_ioctl_domain_t data;
getDomain(&data, domainIndex);
unsigned int data_size;
uint32_t logical_base_address;
uint16_t working_counter;
uint16_t expected_working_counter;
cout << "Domain" << domainIndex << ":"
<< " LogBaseAddr 0x"
<< hex << setfill('0') << setw(8) << data.logical_base_address
<< ", Size " << dec << data.data_size
<< ", WorkingCounter "
<< dec << data.working_counter
<< " of " << data.expected_working_counter
<< endl;
}
/****************************************************************************/
void Master::listSlavePdos(uint16_t slavePosition, bool printSlave)
{
ec_ioctl_slave_t slave;
@@ -275,13 +313,28 @@ void Master::generateSlaveXml(uint16_t slavePosition)
/****************************************************************************/
unsigned int Master::domainCount()
{
int ret;
if ((ret = ioctl(fd, EC_IOCTL_DOMAIN_COUNT, 0)) < 0) {
stringstream err;
err << "Failed to get number of domains: " << strerror(errno);
throw MasterException(err.str());
}
return ret;
}
/****************************************************************************/
unsigned int Master::slaveCount()
{
int ret;
if ((ret = ioctl(fd, EC_IOCTL_SLAVE_COUNT, 0)) < 0) {
stringstream err;
err << "Failed to get slave: " << strerror(errno);
err << "Failed to get number of slaves: " << strerror(errno);
throw MasterException(err.str());
}
@@ -290,6 +343,23 @@ unsigned int Master::slaveCount()
/****************************************************************************/
void Master::getDomain(ec_ioctl_domain_t *data, unsigned int index)
{
data->index = index;
if (ioctl(fd, EC_IOCTL_DOMAIN, data)) {
stringstream err;
err << "Failed to get domain: ";
if (errno == EINVAL)
err << "Domain " << index << " does not exist!";
else
err << strerror(errno);
throw MasterException(err.str());
}
}
/****************************************************************************/
void Master::getSlave(ec_ioctl_slave_t *slave, uint16_t slaveIndex)
{
slave->position = slaveIndex;