65 lines · c
1// SPDX-License-Identifier: GPL-2.02/*3 * uledmon.c4 *5 * This program creates a new userspace LED class device and monitors it. A6 * 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. Pressing11 * 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 22int 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