]> mj.ucw.cz Git - ursary.git/blobdiff - nocturn.c
Document button assignment changes
[ursary.git] / nocturn.c
index ba5edf25f7e74693ad8952c9d5e304cf8bc01b29..7353822fd5ee682edf679f61bf64e717ed57e785 100644 (file)
--- a/nocturn.c
+++ b/nocturn.c
@@ -270,7 +270,7 @@ static void noct_do_write(uint cmd, uint arg)
 
 static void noct_sched_write(void)
 {
-  if (noct_write_pending)
+  if (!usb_dev || noct_write_pending)
     return;
 
   if (noct_dirty_button)
@@ -328,6 +328,14 @@ void noct_set_button(int button, int val)
     }
 }
 
+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");
@@ -386,6 +394,9 @@ static void noct_connect(struct main_timer *t)
   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");
@@ -482,7 +493,6 @@ void noct_init(void)
   // 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