--- 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;