static byte noct_ring_mode[8]; // RING_MODE_xxx
static byte noct_ring_val[9];
-static uns noct_dirty_button;
-static uns noct_dirty_ring_mode;
-static uns noct_dirty_ring_val;
+static uint noct_dirty_button;
+static uint noct_dirty_ring_mode;
+static uint noct_dirty_ring_val;
static struct libusb_transfer *noct_write_xfer;
static bool noct_write_pending;
noct_sched_write();
}
-static void noct_do_write(uns cmd, uns arg)
+static void noct_do_write(uint cmd, uint arg)
{
DBG("USB: Submitting write %02x %02x", cmd, arg);
ASSERT(!noct_write_pending);
static void noct_sched_write(void)
{
- if (noct_write_pending)
+ if (!usb_dev || noct_write_pending)
return;
if (noct_dirty_button)
}
}
+void noct_clear(void)
+{
+ for (int i=0; i<=8; i++)
+ noct_set_ring(i, RING_MODE_LEFT, 0);
+ for (int i=0; i<16; i++)
+ noct_set_button(i, 0);
+}
+
static void noct_write_init(void)
{
DBG("Noct: Write init");
if ((err = libusb_open(found_dev, &usb_dev)) < 0)
return noct_error(err, "libusb_open failed");
+ // In newer kernels, Nocturn is claimed by snd-usb-audio. Tell it to surrender the device.
+ libusb_detach_kernel_driver(usb_dev, 0);
+
// There exist configurations 1 (high brightness) and 2 (power-save)
if ((err = libusb_set_configuration(usb_dev, 2)) < 0)
return noct_error(err, "libusb_set_configuration failed");
// Initialize libusb
if ((err = libusb_init(&usb_ctx)) < 0)
die("libusb_init failed: error %d", err);
- libusb_set_debug(usb_ctx, 3);
// Connect libusb to UCW mainloop