mirror of
https://gitlab.com/etherlab.org/ethercat.git
synced 2026-08-19 10:25:50 +08:00
Implemented domain command.
This commit is contained in:
+71
-1
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user