cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

uledmon.c (1318B)


      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
     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}