Skip to content

Commit

Permalink
tools/leds: Add uledmon program for monitoring userspace LEDs
Browse files Browse the repository at this point in the history
The uleds driver provides userspace LED devices. This tool is used to
create one of these devices and monitor the changes in brighness for
testing purposes.

Signed-off-by: David Lechner <david@lechnology.com>
Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com>
  • Loading branch information
dlech authored and janaszewski committed Nov 22, 2016
1 parent eb1ce74 commit fa7f324
Show file tree
Hide file tree
Showing 4 changed files with 81 additions and 3 deletions.
7 changes: 4 additions & 3 deletions tools/Makefile
Expand Up @@ -17,6 +17,7 @@ help:
@echo ' hv - tools used when in Hyper-V clients'
@echo ' iio - IIO tools'
@echo ' kvm_stat - top-like utility for displaying kvm statistics'
@echo ' leds - LEDs tools'
@echo ' lguest - a minimal 32-bit x86 hypervisor'
@echo ' net - misc networking tools'
@echo ' perf - Linux performance measurement and analysis tool'
Expand Down Expand Up @@ -56,7 +57,7 @@ acpi: FORCE
cpupower: FORCE
$(call descend,power/$@)

cgroup firewire hv guest spi usb virtio vm net iio gpio objtool: FORCE
cgroup firewire hv guest spi usb virtio vm net iio gpio objtool leds: FORCE
$(call descend,$@)

liblockdep: FORCE
Expand Down Expand Up @@ -126,7 +127,7 @@ acpi_clean:
cpupower_clean:
$(call descend,power/cpupower,clean)

cgroup_clean hv_clean firewire_clean lguest_clean spi_clean usb_clean virtio_clean vm_clean net_clean iio_clean gpio_clean objtool_clean:
cgroup_clean hv_clean firewire_clean lguest_clean spi_clean usb_clean virtio_clean vm_clean net_clean iio_clean gpio_clean objtool_clean leds_clean:
$(call descend,$(@:_clean=),clean)

liblockdep_clean:
Expand Down Expand Up @@ -164,6 +165,6 @@ clean: acpi_clean cgroup_clean cpupower_clean hv_clean firewire_clean lguest_cle
perf_clean selftests_clean turbostat_clean spi_clean usb_clean virtio_clean \
vm_clean net_clean iio_clean x86_energy_perf_policy_clean tmon_clean \
freefall_clean build_clean libbpf_clean libsubcmd_clean liblockdep_clean \
gpio_clean objtool_clean
gpio_clean objtool_clean leds_clean

.PHONY: FORCE
1 change: 1 addition & 0 deletions tools/leds/.gitignore
@@ -0,0 +1 @@
uledmon
13 changes: 13 additions & 0 deletions tools/leds/Makefile
@@ -0,0 +1,13 @@
# Makefile for LEDs tools

CC = $(CROSS_COMPILE)gcc
CFLAGS = -Wall -Wextra -g -I../../include/uapi

all: uledmon
%: %.c
$(CC) $(CFLAGS) -o $@ $^

clean:
$(RM) uledmon

.PHONY: all clean
63 changes: 63 additions & 0 deletions tools/leds/uledmon.c
@@ -0,0 +1,63 @@
/*
* uledmon.c
*
* This program creates a new userspace LED class device and monitors it. A
* timestamp and brightness value is printed each time the brightness changes.
*
* Usage: uledmon <device-name>
*
* <device-name> is the name of the LED class device to be created. Pressing
* CTRL+C will exit.
*/

#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <unistd.h>

#include <linux/uleds.h>

int main(int argc, char const *argv[])
{
struct uleds_user_dev uleds_dev;
int fd, ret;
int brightness;
struct timespec ts;

if (argc != 2) {
fprintf(stderr, "Requires <device-name> argument\n");
return 1;
}

strncpy(uleds_dev.name, argv[1], LED_MAX_NAME_SIZE);
uleds_dev.max_brightness = 100;

fd = open("/dev/uleds", O_RDWR);
if (fd == -1) {
perror("Failed to open /dev/uleds");
return 1;
}

ret = write(fd, &uleds_dev, sizeof(uleds_dev));
if (ret == -1) {
perror("Failed to write to /dev/uleds");
close(fd);
return 1;
}

while (1) {
ret = read(fd, &brightness, sizeof(brightness));
if (ret == -1) {
perror("Failed to read from /dev/uleds");
close(fd);
return 1;
}
clock_gettime(CLOCK_MONOTONIC, &ts);
printf("[%ld.%09ld] %u\n", ts.tv_sec, ts.tv_nsec, brightness);
}

close(fd);

return 0;
}

0 comments on commit fa7f324

Please sign in to comment.