diff -r af21f0bdc7c9 -r 2b9c78543663 lib/domain.c --- a/lib/domain.c Thu Sep 06 14:21:02 2012 +0200 +++ b/lib/domain.c Mon Nov 03 15:20:05 2014 +0100 @@ -1,11 +1,11 @@ /****************************************************************************** - * + * * $Id$ - * - * Copyright (C) 2006-2009 Florian Pose, Ingenieurgemeinschaft IgH - * + * + * Copyright (C) 2006-2012 Florian Pose, Ingenieurgemeinschaft IgH + * * This file is part of the IgH EtherCAT master userspace library. - * + * * The IgH EtherCAT master userspace library is free software; you can * redistribute it and/or modify it under the terms of the GNU Lesser General * Public License as published by the Free Software Foundation; version 2.1 @@ -19,9 +19,9 @@ * You should have received a copy of the GNU Lesser General Public License * along with the IgH EtherCAT master userspace library. If not, see * . - * + * * --- - * + * * The license mentioned above concerns the source code only. Using the * EtherCAT technology and brand is only permitted in compliance with the * industrial property and similar rights of Beckhoff Automation GmbH. @@ -35,15 +35,13 @@ /*****************************************************************************/ -#include -#include #include -#include #include +#include /* ENOENT */ +#include "ioctl.h" #include "domain.h" #include "master.h" -#include "master/ioctl.h" /*****************************************************************************/ @@ -52,13 +50,6 @@ // nothing to do } - -/*****************************************************************************/ -unsigned int ecrt_domain_index(ec_domain_t *domain) -{ - return domain->index; -} - /*****************************************************************************/ int ecrt_domain_reg_pdo_entry_list(ec_domain_t *domain, @@ -67,15 +58,15 @@ const ec_pdo_entry_reg_t *reg; ec_slave_config_t *sc; int ret; - + for (reg = regs; reg->index; reg++) { if (!(sc = ecrt_master_slave_config(domain->master, reg->alias, reg->position, reg->vendor_id, reg->product_code))) - return -1; // FIXME + return -ENOENT; if ((ret = ecrt_slave_config_reg_pdo_entry(sc, reg->index, reg->subindex, domain, reg->bit_position)) < 0) - return -1; // FIXME + return ret; *reg->offset = ret; } @@ -85,6 +76,21 @@ /*****************************************************************************/ +size_t ecrt_domain_size(const ec_domain_t *domain) +{ + int ret; + + ret = ioctl(domain->master->fd, EC_IOCTL_DOMAIN_SIZE, domain->index); + if (EC_IOCTL_IS_ERROR(ret)) { + fprintf(stderr, "Failed to get domain size: %s\n", + strerror(EC_IOCTL_ERRNO(ret))); + } + + return ret; +} + +/*****************************************************************************/ + uint8_t *ecrt_domain_data(ec_domain_t *domain) { if (!domain->process_data) { @@ -92,12 +98,12 @@ offset = ioctl(domain->master->fd, EC_IOCTL_DOMAIN_OFFSET, domain->index); - if (offset == -1) { + if (EC_IOCTL_IS_ERROR(offset)) { fprintf(stderr, "Failed to get domain offset: %s\n", - strerror(errno)); - return NULL; + strerror(EC_IOCTL_ERRNO(offset))); + return NULL; } - + domain->process_data = domain->master->process_data + offset; } @@ -108,9 +114,12 @@ void ecrt_domain_process(ec_domain_t *domain) { - if (ioctl(domain->master->fd, EC_IOCTL_DOMAIN_PROCESS, - domain->index) == -1) { - fprintf(stderr, "Failed to process domain: %s\n", strerror(errno)); + int ret; + + ret = ioctl(domain->master->fd, EC_IOCTL_DOMAIN_PROCESS, domain->index); + if (EC_IOCTL_IS_ERROR(ret)) { + fprintf(stderr, "Failed to process domain: %s\n", + strerror(EC_IOCTL_ERRNO(ret))); } } @@ -118,9 +127,12 @@ void ecrt_domain_queue(ec_domain_t *domain) { - if (ioctl(domain->master->fd, EC_IOCTL_DOMAIN_QUEUE, - domain->index) == -1) { - fprintf(stderr, "Failed to queue domain: %s\n", strerror(errno)); + int ret; + + ret = ioctl(domain->master->fd, EC_IOCTL_DOMAIN_QUEUE, domain->index); + if (EC_IOCTL_IS_ERROR(ret)) { + fprintf(stderr, "Failed to queue domain: %s\n", + strerror(EC_IOCTL_ERRNO(ret))); } } @@ -129,13 +141,15 @@ void ecrt_domain_state(const ec_domain_t *domain, ec_domain_state_t *state) { ec_ioctl_domain_state_t data; + int ret; data.domain_index = domain->index; data.state = state; - - if (ioctl(domain->master->fd, EC_IOCTL_DOMAIN_STATE, &data) == -1) { + + ret = ioctl(domain->master->fd, EC_IOCTL_DOMAIN_STATE, &data); + if (EC_IOCTL_IS_ERROR(ret)) { fprintf(stderr, "Failed to get domain state: %s\n", - strerror(errno)); + strerror(EC_IOCTL_ERRNO(ret))); } }