brintos

brintos / linux-shallow public Read only

0
0
Text · 1.3 KiB · c15a39c Raw
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