--- a/lib/sdo_request.c Thu Sep 20 09:20:51 2012 +0200
+++ b/lib/sdo_request.c Thu Sep 20 15:28:25 2012 +0200
@@ -2,7 +2,7 @@
*
* $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.
*
@@ -35,12 +35,10 @@
/*****************************************************************************/
#include <stdio.h>
-#include <errno.h>
#include <string.h>
-#include <sys/ioctl.h>
+#include "ioctl.h"
#include "sdo_request.h"
-#include "master/ioctl.h"
#include "slave_config.h"
#include "master.h"
@@ -60,15 +58,17 @@
void ecrt_sdo_request_timeout(ec_sdo_request_t *req, uint32_t timeout)
{
ec_ioctl_sdo_request_t data;
+ int ret;
data.config_index = req->config->index;
data.request_index = req->index;
data.timeout = timeout;
- if (ioctl(req->config->master->fd, EC_IOCTL_SDO_REQUEST_TIMEOUT,
- &data) == -1)
+ ret = ioctl(req->config->master->fd, EC_IOCTL_SDO_REQUEST_TIMEOUT, &data);
+ if (EC_IOCTL_IS_ERROR(ret)) {
fprintf(stderr, "Failed to set SDO request timeout: %s\n",
- strerror(errno));
+ strerror(EC_IOCTL_ERRNO(ret)));
+ }
}
/*****************************************************************************/
@@ -90,14 +90,17 @@
ec_request_state_t ecrt_sdo_request_state(ec_sdo_request_t *req)
{
ec_ioctl_sdo_request_t data;
+ int ret;
data.config_index = req->config->index;
data.request_index = req->index;
- if (ioctl(req->config->master->fd, EC_IOCTL_SDO_REQUEST_STATE,
- &data) == -1)
+ ret = ioctl(req->config->master->fd, EC_IOCTL_SDO_REQUEST_STATE, &data);
+ if (EC_IOCTL_IS_ERROR(ret)) {
fprintf(stderr, "Failed to get SDO request state: %s\n",
- strerror(errno));
+ strerror(EC_IOCTL_ERRNO(ret)));
+ return EC_REQUEST_ERROR;
+ }
if (data.size) { // new data waiting to be copied
if (req->mem_size < data.size) {
@@ -108,9 +111,11 @@
data.data = req->data;
- if (ioctl(req->config->master->fd, EC_IOCTL_SDO_REQUEST_DATA,
- &data) == -1) {
- fprintf(stderr, "Failed to get SDO data: %s\n", strerror(errno));
+ ret = ioctl(req->config->master->fd,
+ EC_IOCTL_SDO_REQUEST_DATA, &data);
+ if (EC_IOCTL_IS_ERROR(ret)) {
+ fprintf(stderr, "Failed to get SDO data: %s\n",
+ strerror(EC_IOCTL_ERRNO(ret)));
return EC_REQUEST_ERROR;
}
req->data_size = data.size;
@@ -124,14 +129,16 @@
void ecrt_sdo_request_read(ec_sdo_request_t *req)
{
ec_ioctl_sdo_request_t data;
+ int ret;
data.config_index = req->config->index;
data.request_index = req->index;
- if (ioctl(req->config->master->fd, EC_IOCTL_SDO_REQUEST_READ,
- &data) == -1)
+ ret = ioctl(req->config->master->fd, EC_IOCTL_SDO_REQUEST_READ, &data);
+ if (EC_IOCTL_IS_ERROR(ret)) {
fprintf(stderr, "Failed to command an SDO read operation : %s\n",
- strerror(errno));
+ strerror(EC_IOCTL_ERRNO(ret)));
+ }
}
/*****************************************************************************/
@@ -139,16 +146,18 @@
void ecrt_sdo_request_write(ec_sdo_request_t *req)
{
ec_ioctl_sdo_request_t data;
+ int ret;
data.config_index = req->config->index;
data.request_index = req->index;
data.data = req->data;
data.size = req->data_size;
- if (ioctl(req->config->master->fd, EC_IOCTL_SDO_REQUEST_WRITE,
- &data) == -1)
+ ret = ioctl(req->config->master->fd, EC_IOCTL_SDO_REQUEST_WRITE, &data);
+ if (EC_IOCTL_IS_ERROR(ret)) {
fprintf(stderr, "Failed to command an SDO write operation : %s\n",
- strerror(errno));
+ strerror(EC_IOCTL_ERRNO(ret)));
+ }
}
/*****************************************************************************/