The Dell Latitude 2100 and upcoming follow-on models are netbooks intended for 
classroom use and have a prominent Activity LED embedded in the top of the lid 
so classroom instructors can observe it from a distance. This Activity LED on 
older models only tracked the wireless LAN LED indicator. Newer models (as well 
as older models with updated BIOS) have the capability to drive this LED from 
software using ACPI WMI methods.

Dell recently submitted a driver to linux-kernel called dell-led, and it is in 
the process of working its way upstream for inclusion in the next kernel 
release. See mailing list thread here: http://patchwork.kernel.org/patch/80071/.

We have written a trivial example python program that will turn on the LED 
based on network up/down state as determined by the NetworkManager dbus 
interface. We would like to have this Activity LED work out of the box on any 
NetworkManager-enabled distribution and would like to propose two additions to 
NetworkManager: 1) Activity LED daemon and 2) udev rule to launch the Activity 
LED daemon.

Proposed process:
   -- Dell laptop boots
   -- udev automatically loads the dell-led driver based on auto-detection of 
the ACPI WMI GUID
   -- loading of the driver triggers another udev event which starts the 
Activity LED daemon
   -- Activity LED daemon listens to nm dbus interface to drive LED as 
appropriate

Benefits:
   -- This daemon is only loaded and run on appropriate Dell systems, incurring 
zero overhead for non-Dell systems or Dell systems without the Activity LED
   -- The Activity LED will work out of the box for anybody loading 
NetworkManager enabled distros.

Possible improvements:
   -- Currently the daemon only turns on the Activity LED when it detects 
internet connectivity (either wired or wireless). This is the functionality for 
the Activity LED daemon. Other functionality can be included but this is the 
default functionality.

   -- LED control handoff: Teachers may want to have another program control 
the LED. For example a quiz application can light up when students are 
complete, or a game show application can be used to let students buzz-in for 
answering. The daemon will need a way to know that another app wants to take 
over the LED, and also when to resume control when that other app relinquishes 
control.

Alternate processes are possible, we are very open to suggestions.

Attached are our current daemon example and udev rules. We have not done too 
much work on these as they are just proof-of-concepts for now. We first want to 
see if this idea is acceptable for inclusion into NetworkManager before we 
refine it. You're comments are welcome. Thank you.

--




#! /usr/bin/python
import dbus
from dbus.mainloop.glib import DBusGMainLoop
import gobject
from os import fork, chdir, setsid, umask
from sys import exit, stdin, stdout, stderr

# Dual fork hack to make process run as a daemon
if __name__ == "__main__":
        try:
                pid = fork()
                if pid > 0:
                        exit(0)
        except OSError, e:
                exit(1)

chdir("/")
setsid()
umask(0)

try:
        pid = fork()
        if pid > 0:
                exit(0)
except OSError, e:
        exit(1)

stdin.close()
stdout.close()
stderr.close()

DBusGMainLoop(set_as_default=True)

bus = dbus.SystemBus()

def signal_callback(state):
        if state == 3:
                f = open("/sys/class/leds/dell::lid/brightness", 'w' )
                f.write('1')
                f.close()
        else:
                f = open("/sys/class/leds/dell::lid/brightness", 'w' )
                f.write('0')
                f.close()
        return

# Catch signals from a specific interface and object, and call signal_callback
# when they arrive.
bus.add_signal_receiver(signal_callback,
                        dbus_interface="org.freedesktop.NetworkManager",
                        signal_name="StateChanged")

# Enter the event loop, waiting for signals
loop = gobject.MainLoop()
loop.run()



KERNEL=="dell::lid", ACTION=="add", RUN+="/usr/bin/led_inet_svc.py"
_______________________________________________
NetworkManager-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/networkmanager-list

Reply via email to