static __thread int last_error;
+static const char *const error_descr[] = {
+ "success",
+ "GPIO line not requested",
+};
+
static void set_last_error(int errnum)
{
last_error = errnum;
const char * gpiod_strerror(int errnum)
{
- return strerror(errnum);
+ if (errnum < __GPIOD_ERRNO_OFFSET)
+ return strerror(errnum);
+ else if (errnum > __GPIOD_MAX_ERR)
+ return "invalid error number";
+ else
+ return error_descr[errnum - __GPIOD_ERRNO_OFFSET];
}
int gpiod_simple_get_value(const char *device, unsigned int offset)
int status;
if (!gpiod_line_is_requested(line)) {
- set_last_error(EPERM);
+ set_last_error(GPIOD_ENOTREQUESTED);
return -1;
}
int status;
if (!gpiod_line_is_requested(line)) {
- set_last_error(EPERM);
+ set_last_error(GPIOD_ENOTREQUESTED);
return -1;
}
#define GPIOD_BIT(nr) (1UL << (nr))
+#define __GPIOD_ERRNO_OFFSET 10000
+
+enum {
+ GPIOD_ESUCCESS = __GPIOD_ERRNO_OFFSET,
+ GPIOD_ENOTREQUESTED,
+ __GPIOD_MAX_ERR,
+};
+
int gpiod_errno(void) GPIOD_API;
const char * gpiod_strerror(int errnum) GPIOD_API;