return ret;
}
-static void set_leds_hidraw(int fd, int number)
+static uint8_t calc_leds_bitmap(int number)
+{
+ uint8_t bitmap = 0;
+
+ /* TODO we could support up to 10 (1 + 2 + 3 + 4) */
+ if (number > 7)
+ return bitmap;
+
+ if (number > 4) {
+ bitmap |= 0x10;
+ number -= 4;
+ }
+
+ bitmap |= 0x01 << number;
+
+ return bitmap;
+}
+
+static void set_leds_hidraw(int fd, uint8_t leds_bitmap)
{
/*
* the total time the led is active (0xff means forever)
};
int ret;
- /* TODO we could support up to 10 (1 + 2 + 3 + 4) */
- if (number > 7)
- return;
-
- if (number > 4) {
- leds_report[10] |= 0x10;
- number -= 4;
- }
-
- leds_report[10] |= 0x01 << number;
+ leds_report[10] = leds_bitmap;
ret = write(fd, leds_report, sizeof(leds_report));
if (ret == sizeof(leds_report))
gpointer user_data)
{
int number = GPOINTER_TO_INT(user_data);
+ uint8_t bitmap;
int fd;
if (cond & (G_IO_HUP | G_IO_ERR | G_IO_NVAL))
DBG("number %d", number);
fd = g_io_channel_unix_get_fd(channel);
- set_leds_hidraw(fd, number);
+
+ bitmap = calc_leds_bitmap(number);
+ if (bitmap != 0)
+ set_leds_hidraw(fd, bitmap);
return FALSE;
}