1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * uledmon.c 4 * 5 * This program creates a new userspace LED class device and monitors it. A 6 * timestamp and brightness value is printed each time the brightness changes. 7 * 8 * Usage: uledmon <device-name> 9 * 10 * <device-name> is the name of the LED class device to be created. Pressing 11 * CTRL+C will exit. 12 */ 13 14 #include <fcntl.h> 15 #include <stdio.h> 16 #include <string.h> 17 #include <time.h> 18 #include <unistd.h> 19 20 #include <linux/uleds.h> 21 22 int main(int argc, char const *argv[]) 23 { 24 struct uleds_user_dev uleds_dev; 25 int fd, ret; 26 int brightness; 27 struct timespec ts; 28 29 if (argc != 2) { 30 fprintf(stderr, "Requires <device-name> argument\n"); 31 return 1; 32 } 33 34 strncpy(uleds_dev.name, argv[1], LED_MAX_NAME_SIZE); 35 uleds_dev.max_brightness = 100; 36 37 fd = open("/dev/uleds", O_RDWR); 38 if (fd == -1) { 39 perror("Failed to open /dev/uleds"); 40 return 1; 41 } 42 43 ret = write(fd, &uleds_dev, sizeof(uleds_dev)); 44 if (ret == -1) { 45 perror("Failed to write to /dev/uleds"); 46 close(fd); 47 return 1; 48 } 49 50 while (1) { 51 ret = read(fd, &brightness, sizeof(brightness)); 52 if (ret == -1) { 53 perror("Failed to read from /dev/uleds"); 54 close(fd); 55 return 1; 56 } 57 clock_gettime(CLOCK_MONOTONIC, &ts); 58 printf("[%ld.%09ld] %u\n", ts.tv_sec, ts.tv_nsec, brightness); 59 } 60 61 close(fd); 62 63 return 0; 64 } 65