Coverage Report

Created: 2026-10-13 06:38

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/barebox/commands/led.c
Line
Count
Source
1
// SPDX-License-Identifier: GPL-2.0-or-later
2
// SPDX-FileCopyrightText: © 2010 Sascha Hauer, Pengutronix
3
4
/* LED command support for barebox */
5
6
#include <common.h>
7
#include <led.h>
8
#include <command.h>
9
#include <getopt.h>
10
#include <errno.h>
11
12
static int do_led(int argc, char *argv[])
13
0
{
14
0
  unsigned long value;
15
0
  struct led *led;
16
0
  int ret;
17
0
  int opt;
18
0
  int flash = 0, blink = 0;
19
0
  int blink_on_ms = 500;
20
0
  int blink_off_ms = 500;
21
22
0
  while ((opt = getopt(argc, argv, "fb")) > 0) {
23
0
    switch(opt) {
24
0
    case 'f':
25
0
      flash = 1;
26
0
      break;
27
0
    case 'b':
28
0
      blink = 1;
29
0
      break;
30
0
    }
31
0
  }
32
33
0
  if (flash || blink) {
34
0
    int args = argc - optind;
35
36
0
    if (!args || (flash && blink))
37
0
      return COMMAND_ERROR_USAGE;
38
39
0
    led = led_by_name_or_number(argv[optind]);
40
0
    if (!led) {
41
0
      printf("no such LED: %s\n", argv[optind]);
42
0
      return 1;
43
0
    }
44
45
0
    if (args > 1)
46
0
      blink_on_ms = simple_strtoul(argv[optind + 1], NULL, 0);
47
0
    if (args > 2)
48
0
      blink_off_ms = simple_strtoul(argv[optind + 2], NULL, 0);
49
50
0
    if (flash)
51
0
      return led_flash(led, blink_on_ms);
52
0
    if (blink)
53
0
      return led_blink(led, blink_on_ms, blink_off_ms);
54
0
  }
55
56
0
  if (argc == 1) {
57
0
    int i = 0;
58
59
0
    led = led_by_number(i);
60
0
    if (!led) {
61
0
      printf("no registered LEDs\n");
62
0
      return COMMAND_ERROR;
63
0
    }
64
65
0
    printf("registered LEDs:\n");
66
67
0
    while ((led = led_by_number(i))) {
68
0
      printf("%-2d: name: %-10s max_value: %d\n",
69
0
          i, led->name ? led->name : "none",
70
0
          led->max_value);
71
0
      i++;
72
0
    }
73
0
    return 0;
74
0
  }
75
76
0
  if (argc != 3)
77
0
    return COMMAND_ERROR_USAGE;
78
79
0
  led = led_by_name_or_number(argv[1]);
80
0
  if (!led) {
81
0
    printf("no such LED: %s\n", argv[1]);
82
0
    return 1;
83
0
  }
84
85
0
  value = simple_strtoul(argv[optind + 1], NULL, 0);
86
87
0
  ret = led_set(led, value);
88
0
  if (ret < 0) {
89
0
    printf("led: %pe\n", ERR_PTR(ret));
90
0
    return COMMAND_ERROR;
91
0
  }
92
93
0
  return 0;
94
0
}
95
96
BAREBOX_CMD_HELP_START(led)
97
BAREBOX_CMD_HELP_TEXT("Control the value of a LED. The exact meaning of VALUE is unspecified,")
98
BAREBOX_CMD_HELP_TEXT("it can be a brightness, or a color. Most often a value of '1' means on")
99
BAREBOX_CMD_HELP_TEXT("and '0' means off. Basic usage is 'led <led> <value>'. LEDs can be given")
100
BAREBOX_CMD_HELP_TEXT("by name or number.")
101
BAREBOX_CMD_HELP_TEXT("")
102
BAREBOX_CMD_HELP_TEXT("Without arguments the available LEDs are listed.")
103
BAREBOX_CMD_HELP_TEXT("Options:")
104
BAREBOX_CMD_HELP_OPT ("-b <led> [duration-on-ms] [duration-off-ms]",  "blink a LED")
105
BAREBOX_CMD_HELP_OPT ("-f <led> [duration-ms]",  "flash a LED")
106
BAREBOX_CMD_HELP_END
107
108
BAREBOX_CMD_START(led)
109
  .cmd    = do_led,
110
  BAREBOX_CMD_DESC("control LEDs")
111
  BAREBOX_CMD_OPTS("LED VALUE")
112
  BAREBOX_CMD_GROUP(CMD_GRP_HWMANIP)
113
  BAREBOX_CMD_HELP(cmd_led_help)
114
BAREBOX_CMD_END