tools/Master.cpp
changeset 948 1cfab7161491
parent 938 5b936e8e39fa
child 949 e424c0074c67
--- 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;