Author: kevlo
Date: Fri Mar 31 08:20:59 2017
New Revision: 316326
URL: https://svnweb.freebsd.org/changeset/base/316326

Log:
  Add support for ThingM blink(1) notification LED to uled(4).

Modified:
  head/share/man/man4/uled.4
  head/sys/dev/usb/misc/uled.c
  head/sys/dev/usb/usbdevs

Modified: head/share/man/man4/uled.4
==============================================================================
--- head/share/man/man4/uled.4  Fri Mar 31 06:33:20 2017        (r316325)
+++ head/share/man/man4/uled.4  Fri Mar 31 08:20:59 2017        (r316326)
@@ -25,7 +25,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd September 5, 2014
+.Dd March 31, 2017
 .Dt ULED 4
 .Os
 .Sh NAME
@@ -48,7 +48,8 @@ uled_load="YES"
 .Sh DESCRIPTION
 The
 .Nm
-driver provides support for the Dream Cheeky WebMail Notifier device.
+driver provides support for Dream Cheeky WebMail Notifier and
+ThingM blink(1) notification LED.
 .Pp
 Subsequently, the
 .Pa /dev/uled0

Modified: head/sys/dev/usb/misc/uled.c
==============================================================================
--- head/sys/dev/usb/misc/uled.c        Fri Mar 31 06:33:20 2017        
(r316325)
+++ head/sys/dev/usb/misc/uled.c        Fri Mar 31 08:20:59 2017        
(r316326)
@@ -1,5 +1,5 @@
 /*-
- * Copyright (c) 2014 Kevin Lo
+ * Copyright (c) 2014, 2017 Kevin Lo
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -68,10 +68,16 @@ struct uled_softc {
 
        uint8_t                 sc_state;
 #define        ULED_ENABLED    0x01
+
+       int                     sc_flags;
+#define        ULED_FLAG_BLINK1        0x0001
 };
 
-/* prototypes */
+/* Initial commands. */
+static uint8_t blink1[] = { 0x1, 'v', 0, 0, 0, 0, 0, 0 };
+static uint8_t dl100b[] = { 0x1f, 0x2, 0, 0x5f, 0, 0, 0x1a, 0x3 };
 
+/* Prototypes. */
 static device_probe_t  uled_probe;
 static device_attach_t uled_attach;
 static device_detach_t uled_detach;
@@ -88,7 +94,7 @@ static struct usb_fifo_methods uled_fifo
 };
 
 static usb_error_t     uled_ctrl_msg(struct uled_softc *, uint8_t, uint8_t,
-                           uint16_t, uint16_t, void *buf, uint16_t);
+                           uint16_t, uint16_t, void *, uint16_t);
 static int             uled_enable(struct uled_softc *);
 
 static devclass_t uled_devclass;
@@ -108,7 +114,10 @@ static driver_t uled_driver = {
 };
 
 static const STRUCT_USB_HOST_ID uled_devs[] = {
-       {USB_VPI(USB_VENDOR_DREAMLINK, USB_PRODUCT_DREAMLINK_DL100B, 0)},
+#define        ULED_DEV(v,p,i) { USB_VPI(USB_VENDOR_##v, 
USB_PRODUCT_##v##_##p, i) }
+       ULED_DEV(DREAMLINK, DL100B, 0),
+       ULED_DEV(THINGM, BLINK1, ULED_FLAG_BLINK1),
+#undef ULED_DEV
 };
 
 DRIVER_MODULE(uled, uhub, uled_driver, uled_devclass, NULL, NULL);
@@ -141,6 +150,7 @@ uled_attach(device_t dev)
        uaa = device_get_ivars(dev);
        sc = device_get_softc(dev);
        unit = device_get_unit(dev);
+       sc->sc_flags = USB_GET_DRIVER_INFO(uaa);
 
        device_set_usb_desc(dev);
        mtx_init(&sc->sc_mtx, "uled lock", NULL, MTX_DEF | MTX_RECURSE);
@@ -194,10 +204,11 @@ uled_ctrl_msg(struct uled_softc *sc, uin
 static int
 uled_enable(struct uled_softc *sc)
 {
-       static uint8_t cmdbuf[] = { 0x1f, 0x02, 0x00, 0x5f, 0x00, 0x00, 0x1a,
-           0x03 };
+       uint8_t *cmdbuf;
        int error;
 
+       cmdbuf = (sc->sc_flags & ULED_FLAG_BLINK1) ? blink1 : dl100b;
+
        sc->sc_state |= ULED_ENABLED;
        mtx_lock(&sc->sc_mtx);
        error = uled_ctrl_msg(sc, UT_WRITE_CLASS_INTERFACE, UR_SET_REPORT,
@@ -257,12 +268,21 @@ uled_ioctl(struct usb_fifo *fifo, u_long
                sc->sc_color.green = color.green;
                sc->sc_color.blue = color.blue;
 
-               buf[0] = color.red;
-               buf[1] = color.green;
-               buf[2] = color.blue;
-               buf[3] = buf[4] = buf[5] = 0;
-               buf[6] = 0x1a;
-               buf[7] = 0x05;
+               if (sc->sc_flags & ULED_FLAG_BLINK1) {
+                       buf[0] = 0x1;
+                       buf[1] = 'n';
+                       buf[2] = color.red;
+                       buf[3] = color.green;
+                       buf[4] = color.blue;
+                       buf[5] = buf[6] = buf[7] = 0;
+               } else {
+                       buf[0] = color.red;
+                       buf[1] = color.green;
+                       buf[2] = color.blue;
+                       buf[3] = buf[4] = buf[5] = 0;
+                       buf[6] = 0x1a;
+                       buf[7] = 0x05;
+               }
                error = uled_ctrl_msg(sc, UT_WRITE_CLASS_INTERFACE,
                    UR_SET_REPORT, 0x200, 0, buf, sizeof(buf));
                break;

Modified: head/sys/dev/usb/usbdevs
==============================================================================
--- head/sys/dev/usb/usbdevs    Fri Mar 31 06:33:20 2017        (r316325)
+++ head/sys/dev/usb/usbdevs    Fri Mar 31 08:20:59 2017        (r316326)
@@ -747,6 +747,7 @@ vendor WESTMOUNTAIN 0x2405  West Mountain
 vendor TRIPPLITE       0x2478  Tripp-Lite
 vendor HIROSE          0x2631  Hirose Electric
 vendor NHJ             0x2770  NHJ
+vendor THINGM          0x27b8  ThingM
 vendor PLANEX          0x2c02  Planex Communications
 vendor VIDZMEDIA       0x3275  VidzMedia Pte Ltd
 vendor LINKINSTRUMENTS 0x3195  Link Instruments Inc.
@@ -4493,6 +4494,9 @@ product TELIT UC864G              0x1004  UC864G 3G m
 /* Ten X Technology, Inc. */
 product TENX UAUDIO0           0xf211  USB audio headset
 
+/* ThingM products */
+product THINGM BLINK1          0x01ed  USB notification light
+
 /* Texas Intel products */
 product TI UTUSB41             0x1446  UT-USB41 hub
 product TI TUSB2046            0x2046  TUSB2046 hub
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to