diff options
Diffstat (limited to 'drivers/misc')
-rw-r--r-- | drivers/misc/apds990x_proxy.c | 42 |
1 files changed, 29 insertions, 13 deletions
diff --git a/drivers/misc/apds990x_proxy.c b/drivers/misc/apds990x_proxy.c index ba6ea3d..5474f5e 100644 --- a/drivers/misc/apds990x_proxy.c +++ b/drivers/misc/apds990x_proxy.c @@ -31,6 +31,8 @@ struct device { unsigned int n; + int prox; + char *power; char *prox_en; char *prox_raw; @@ -75,31 +77,45 @@ int write_file(char *fname, const char *val) int read_proxy(void) { - int i, fd; + unsigned int i; + int fd, retval = 0; ssize_t ret; char val[6]; - fd = open(apds990x_dev.prox_raw, O_RDONLY); - if (fd < 0) { - fprintf(stderr, "%s: %s\n", apds990x_dev.prox_raw, + for (i = 0; i < apds990x_dev.n; i++) { + sleep(1); + + fd = open(apds990x_dev.prox_raw, O_RDONLY); + if (fd < 0) { + retval = errno; + fprintf(stderr, "%s: %s\n", apds990x_dev.prox_raw, strerror(errno)); - return errno; - } + return retval; + } - for (i = 0; i < apds990x_dev.n; i++) { - ret = read(fd, val, 5); - if (!ret) { + ret = read(fd, val, sizeof(val)); + if (ret < 0) { + retval = errno; fprintf(stderr, "%s: %s\n", apds990x_dev.prox_raw, strerror(errno)); break; } - val[ret] = '\0'; - printf("%s\n", val); - sleep(1); + /* replace EOF with \n */ + val[ret-1] = '\n'; + apds990x_dev.prox = (int) strtol(val, NULL, 10); + printf("%d\n", apds990x_dev.prox); + + fd = close(fd); + if (fd < 0) { + retval = errno; + fprintf(stderr, "%s: %s\n", apds990x_dev.prox_raw, + strerror(errno)); + break; + } } - return errno; + return retval; } void print_usage(char *name) |