#include <gpiod.h>
#include <stdlib.h>
#include <string.h>
-#include <sys/ioctl.h>
#include <unistd.h>
#include "internal.h"
memset(info, 0, sizeof(*info));
- ret = ioctl(fd, GPIO_GET_CHIPINFO_IOCTL, info);
+ ret = gpiod_ioctl(fd, GPIO_GET_CHIPINFO_IOCTL, info);
if (ret)
return -1;
assert(chip);
ret = read_chip_info(chip->fd, &info);
- if (ret < 0)
+ if (ret)
return NULL;
return gpiod_chip_info_from_uapi(&info);
cmd = watch ? GPIO_V2_GET_LINEINFO_WATCH_IOCTL :
GPIO_V2_GET_LINEINFO_IOCTL;
- ret = ioctl(fd, cmd, info);
+ ret = gpiod_ioctl(fd, cmd, info);
if (ret)
return -1;
{
assert(chip);
- return ioctl(chip->fd, GPIO_GET_LINEINFO_UNWATCH_IOCTL, &offset);
+ return gpiod_ioctl(chip->fd, GPIO_GET_LINEINFO_UNWATCH_IOCTL, &offset);
}
GPIOD_API int gpiod_chip_get_fd(struct gpiod_chip *chip)
}
ret = read_chip_info(chip->fd, &chinfo);
- if (ret < 0)
+ if (ret)
return -1;
for (offset = 0; offset < chinfo.lines; offset++) {
return NULL;
ret = read_chip_info(chip->fd, &info);
- if (ret < 0)
+ if (ret)
return NULL;
- ret = ioctl(chip->fd, GPIO_V2_GET_LINE_IOCTL, &uapi_req);
- if (ret < 0)
+ ret = gpiod_ioctl(chip->fd, GPIO_V2_GET_LINE_IOCTL, &uapi_req);
+ if (ret)
return NULL;
request = gpiod_line_request_from_uapi(&uapi_req, info.name);
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <sys/ioctl.h>
#include <sys/stat.h>
#include <sys/sysmacros.h>
#include <sys/types.h>
return 0;
}
+int gpiod_ioctl(int fd, unsigned long request, void *arg)
+{
+ int ret;
+
+ ret = ioctl(fd, request, arg);
+ if (ret <= 0)
+ return ret;
+
+ errno = EBADE;
+ return -1;
+}
+
void gpiod_line_mask_zero(uint64_t *mask)
{
*mask = 0ULL;
int gpiod_poll_fd(int fd, int64_t timeout);
int gpiod_set_output_value(enum gpiod_line_value in,
enum gpiod_line_value *out);
+int gpiod_ioctl(int fd, unsigned long request, void *arg);
void gpiod_line_mask_zero(uint64_t *mask);
bool gpiod_line_mask_test_bit(const uint64_t *mask, int nr);
#include <gpiod.h>
#include <stdlib.h>
#include <string.h>
-#include <sys/ioctl.h>
#include <sys/param.h>
#include <unistd.h>
uapi_values.mask = mask;
- ret = ioctl(request->fd, GPIO_V2_LINE_GET_VALUES_IOCTL, &uapi_values);
+ ret = gpiod_ioctl(request->fd, GPIO_V2_LINE_GET_VALUES_IOCTL,
+ &uapi_values);
if (ret)
return -1;
uapi_values.mask = mask;
uapi_values.bits = bits;
- return ioctl(request->fd, GPIO_V2_LINE_SET_VALUES_IOCTL, &uapi_values);
+ return gpiod_ioctl(request->fd, GPIO_V2_LINE_SET_VALUES_IOCTL,
+ &uapi_values);
}
GPIOD_API int gpiod_line_request_set_values(struct gpiod_line_request *request,
return -1;
}
- ret = ioctl(request->fd, GPIO_V2_LINE_SET_CONFIG_IOCTL,
- &uapi_cfg.config);
+ ret = gpiod_ioctl(request->fd, GPIO_V2_LINE_SET_CONFIG_IOCTL,
+ &uapi_cfg.config);
if (ret)
return ret;