diff -r 6ca9c5fb56d5 -r 1cfab7161491 tools/Master.cpp --- a/tools/Master.cpp Wed Jun 04 10:10:50 2008 +0000 +++ b/tools/Master.cpp Wed Jun 04 10:13:07 2008 +0000 @@ -62,6 +62,21 @@ /****************************************************************************/ +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::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 @@ /****************************************************************************/ +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 @@ /****************************************************************************/ +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;