tools/Master.cpp
changeset 948 1cfab7161491
parent 938 5b936e8e39fa
child 949 e424c0074c67
equal deleted inserted replaced
947:6ca9c5fb56d5 948:1cfab7161491
    60     ::close(fd);
    60     ::close(fd);
    61 }
    61 }
    62 
    62 
    63 /****************************************************************************/
    63 /****************************************************************************/
    64 
    64 
       
    65 void Master::showDomains(int domainIndex)
       
    66 {
       
    67     if (domainIndex == -1) {
       
    68         unsigned int numDomains = domainCount(), i;
       
    69 
       
    70         for (i = 0; i < numDomains; i++) {
       
    71             showDomain(i);
       
    72         }
       
    73     } else {
       
    74         showDomain(domainIndex);
       
    75     }
       
    76 }
       
    77 
       
    78 /****************************************************************************/
       
    79 
    65 void Master::listSlaves()
    80 void Master::listSlaves()
    66 {
    81 {
    67     unsigned int numSlaves = slaveCount(), i;
    82     unsigned int numSlaves = slaveCount(), i;
    68     ec_ioctl_slave_t slave;
    83     ec_ioctl_slave_t slave;
    69     uint16_t lastAlias, aliasIndex;
    84     uint16_t lastAlias, aliasIndex;
   121             generateSlaveXml(i);
   136             generateSlaveXml(i);
   122         }
   137         }
   123     } else {
   138     } else {
   124         generateSlaveXml(slavePosition);
   139         generateSlaveXml(slavePosition);
   125     }
   140     }
       
   141 }
       
   142 
       
   143 /****************************************************************************/
       
   144 
       
   145 void Master::showDomain(unsigned int domainIndex)
       
   146 {
       
   147     ec_ioctl_domain_t data;
       
   148     
       
   149     getDomain(&data, domainIndex);
       
   150 
       
   151 	unsigned int data_size;
       
   152 	uint32_t logical_base_address;
       
   153 	uint16_t working_counter;
       
   154 	uint16_t expected_working_counter;
       
   155 
       
   156 	cout << "Domain" << domainIndex << ":"
       
   157 		<< " LogBaseAddr 0x"
       
   158 		<< hex << setfill('0') << setw(8) << data.logical_base_address
       
   159 		<< ", Size " << dec << data.data_size
       
   160 		<< ", WorkingCounter "
       
   161 		<< dec << data.working_counter
       
   162 		<< " of " << data.expected_working_counter
       
   163 		<< endl;
   126 }
   164 }
   127 
   165 
   128 /****************************************************************************/
   166 /****************************************************************************/
   129 
   167 
   130 void Master::listSlavePdos(uint16_t slavePosition, bool printSlave)
   168 void Master::listSlavePdos(uint16_t slavePosition, bool printSlave)
   273         << "</EtherCATInfo>" << endl;
   311         << "</EtherCATInfo>" << endl;
   274 }
   312 }
   275 
   313 
   276 /****************************************************************************/
   314 /****************************************************************************/
   277 
   315 
       
   316 unsigned int Master::domainCount()
       
   317 {
       
   318     int ret;
       
   319 
       
   320     if ((ret = ioctl(fd, EC_IOCTL_DOMAIN_COUNT, 0)) < 0) {
       
   321         stringstream err;
       
   322         err << "Failed to get number of domains: " << strerror(errno);
       
   323         throw MasterException(err.str());
       
   324     }
       
   325 
       
   326     return ret;
       
   327 }
       
   328 
       
   329 /****************************************************************************/
       
   330 
   278 unsigned int Master::slaveCount()
   331 unsigned int Master::slaveCount()
   279 {
   332 {
   280     int ret;
   333     int ret;
   281 
   334 
   282     if ((ret = ioctl(fd, EC_IOCTL_SLAVE_COUNT, 0)) < 0) {
   335     if ((ret = ioctl(fd, EC_IOCTL_SLAVE_COUNT, 0)) < 0) {
   283         stringstream err;
   336         stringstream err;
   284         err << "Failed to get slave: " << strerror(errno);
   337         err << "Failed to get number of slaves: " << strerror(errno);
   285         throw MasterException(err.str());
   338         throw MasterException(err.str());
   286     }
   339     }
   287 
   340 
   288     return ret;
   341     return ret;
       
   342 }
       
   343 
       
   344 /****************************************************************************/
       
   345 
       
   346 void Master::getDomain(ec_ioctl_domain_t *data, unsigned int index)
       
   347 {
       
   348     data->index = index;
       
   349 
       
   350     if (ioctl(fd, EC_IOCTL_DOMAIN, data)) {
       
   351         stringstream err;
       
   352         err << "Failed to get domain: ";
       
   353         if (errno == EINVAL)
       
   354             err << "Domain " << index << " does not exist!";
       
   355         else
       
   356             err << strerror(errno);
       
   357         throw MasterException(err.str());
       
   358     }
   289 }
   359 }
   290 
   360 
   291 /****************************************************************************/
   361 /****************************************************************************/
   292 
   362 
   293 void Master::getSlave(ec_ioctl_slave_t *slave, uint16_t slaveIndex)
   363 void Master::getSlave(ec_ioctl_slave_t *slave, uint16_t slaveIndex)