blinkenlights 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGES +5 -3
- data/VERSION +1 -1
- data/examples/loadbar.rb +3 -1
- data/examples/netblinker.rb +2 -2
- data/lib/blinkenlights.rb +75 -24
- data/make_doc.rb +4 -2
- metadata +31 -26
data/CHANGES
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
2006-06-08 - 0.0.3 * Added support for Windows. The relevant code parts were
|
2
|
+
contributed by Dave Burt <dave@burt.id.au>. Thanks a lot!
|
3
|
+
2005-10-18 - 0.0.2 * Some small bugs fixed
|
4
|
+
* flash method added
|
5
|
+
* additional example
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.3
|
data/examples/loadbar.rb
CHANGED
@@ -5,7 +5,7 @@ include BlinkenLights::Constants
|
|
5
5
|
|
6
6
|
proc_loadavg = '/proc/loadavg'
|
7
7
|
|
8
|
-
bl = BlinkenLights.new
|
8
|
+
bl = BlinkenLights.new(ARGV.shift || '/dev/tty8')
|
9
9
|
trap(:INT) do
|
10
10
|
bl.close if bl
|
11
11
|
exit
|
@@ -19,6 +19,8 @@ loop do
|
|
19
19
|
when 0.25..0.50 then bl.digital = LED_LEFT
|
20
20
|
when 0.50..0.75 then bl.digital = LED_LEFT | LED_MIDDLE
|
21
21
|
when 0.75..1.00 then bl.digital = LED_LEFT | LED_MIDDLE | LED_RIGHT
|
22
|
+
when 1.00..2.00 then bl.off ; bl.digital = LED_RIGHT
|
23
|
+
when 2.00..3.00 then bl.off ; bl.digital = LED_RIGHT | LED_MIDDLE
|
22
24
|
else bl.flash
|
23
25
|
end
|
24
26
|
end
|
data/examples/netblinker.rb
CHANGED
@@ -6,7 +6,7 @@ include BlinkenLights::Constants
|
|
6
6
|
proc_net_dev = '/proc/net/dev'
|
7
7
|
dev = ARGV.shift || 'eth0'
|
8
8
|
|
9
|
-
bl = BlinkenLights.new
|
9
|
+
bl = BlinkenLights.new(ARGV.shift || '/dev/tty8')
|
10
10
|
trap(:INT) do
|
11
11
|
bl.close if bl
|
12
12
|
exit
|
@@ -20,7 +20,7 @@ loop do
|
|
20
20
|
parts = line[0].scan(/\s+\d+/)
|
21
21
|
rx, tx = parts[0].to_i, parts[8].to_i
|
22
22
|
bl.digital = case [ rx != old_rx, tx != old_tx ]
|
23
|
-
when [ true, true ] then
|
23
|
+
when [ true, true ] then LED_ALL
|
24
24
|
when [ false, true ] then LED_RIGHT
|
25
25
|
when [ true, false ] then LED_LEFT
|
26
26
|
else 0
|
data/lib/blinkenlights.rb
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
begin
|
2
|
+
require 'Win32API'
|
3
|
+
rescue LoadError
|
4
|
+
end
|
5
|
+
|
1
6
|
# = blinkenlights.rb - Controlling the keyboard LEDs from Ruby
|
2
7
|
#
|
3
8
|
# == Author
|
@@ -28,6 +33,10 @@
|
|
28
33
|
# It enables you to control the LEDs on your keyboard to signal digital numbers
|
29
34
|
# between 0 and 7, events like received/transmitted network packets, or just
|
30
35
|
# let them blink in visually pleasing patterns.
|
36
|
+
#
|
37
|
+
# *Beware*: If you use BlinkenLights under Windows, not only the leds are
|
38
|
+
# switched on/off but also the related keys are pressed/unpressed! This could
|
39
|
+
# be quite confusing. ;)
|
31
40
|
#
|
32
41
|
# == Examples
|
33
42
|
#
|
@@ -46,10 +55,10 @@
|
|
46
55
|
# 100.times { bl.random }
|
47
56
|
# bl.close
|
48
57
|
#
|
49
|
-
# There
|
58
|
+
# There are also two short examples examples/netblinker.rb and
|
50
59
|
# examples/loadbar.rb in the distribution directory of this library, that show
|
51
60
|
# how to let the lights blink if network packets are received/transmitted on
|
52
|
-
# your host or how high the cpu load average is.
|
61
|
+
# your host or to indicate how high the cpu load average is.
|
53
62
|
class BlinkenLights
|
54
63
|
|
55
64
|
# Module to hold the BlinkenLights constants.
|
@@ -57,9 +66,9 @@ class BlinkenLights
|
|
57
66
|
# The default tty. It happens to be the one, I run X on. ;)
|
58
67
|
DEF_TTY = '/dev/tty8'
|
59
68
|
|
60
|
-
# DEF_DELAY is the default standard delay in seconds, that is slept
|
61
|
-
# the LED state is changed. If it is too small your keyboard may
|
62
|
-
# confused about its LEDs' status.
|
69
|
+
# DEF_DELAY is the default standard delay in seconds, that is slept
|
70
|
+
# everytime the LED state is changed. If it is too small your keyboard may
|
71
|
+
# become confused about its LEDs' status.
|
63
72
|
DEF_DELAY = 0.1
|
64
73
|
|
65
74
|
# Scroll Lock LED (from /usr/include/linux/kd.h)
|
@@ -101,19 +110,42 @@ class BlinkenLights
|
|
101
110
|
|
102
111
|
# All of the LEDs
|
103
112
|
LED_ALL = 7
|
113
|
+
|
114
|
+
if defined? ::Win32API
|
115
|
+
# Mapping from Unix LEDs to Windows LEDs
|
116
|
+
WINDOWS_LEDS = { LED_SCR => 0x91, LED_NUM => 0x90, LED_CAP => 0x14 }
|
117
|
+
|
118
|
+
# Windows key released
|
119
|
+
WIN_KEY_UP = 0x26
|
120
|
+
|
121
|
+
GetKeyState = ::Win32API.new("user32", "GetKeyState", ["i"], "i")
|
122
|
+
Keybd_event = ::Win32API.new("user32", "keybd_event", %w[i i i i], "v")
|
123
|
+
end
|
104
124
|
end
|
105
125
|
include Constants
|
106
126
|
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
127
|
+
if defined? ::Win32API
|
128
|
+
def initialize(ignored = nil, delay = DEF_DELAY) # :nodoc:
|
129
|
+
@tty = File.new('NUL', File::RDWR)
|
130
|
+
@delay = delay
|
131
|
+
@old_leds = get
|
132
|
+
end
|
133
|
+
else
|
134
|
+
# Creates a BlinkenLights instance for _tty_, a full pathname like
|
135
|
+
# '/dev/tty8' to control the LEDs. This parameter is ignored under the
|
136
|
+
# Windows operating system.
|
137
|
+
#
|
138
|
+
# _delay_ is the standard delay in seconds,
|
139
|
+
# that is slept everytime the LED state is changed. If _delay_ is too small
|
140
|
+
# your keyboard may become confused about its LEDs' status.
|
141
|
+
def initialize(tty = DEF_TTY, delay = DEF_DELAY)
|
142
|
+
@tty = File.new(tty, File::RDWR)
|
143
|
+
@delay = delay
|
144
|
+
@old_leds = get
|
145
|
+
end
|
115
146
|
end
|
116
147
|
|
148
|
+
|
117
149
|
# The standard delay of this BlinkenLights instance.
|
118
150
|
attr_accessor :delay
|
119
151
|
|
@@ -385,18 +417,37 @@ class BlinkenLights
|
|
385
417
|
self
|
386
418
|
end
|
387
419
|
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
420
|
+
if defined? ::Win32API
|
421
|
+
def set(number) # :nodoc:
|
422
|
+
WINDOWS_LEDS.each do |nix, win|
|
423
|
+
if (number & nix != 0) ^ (GetKeyState.call(win) != 0)
|
424
|
+
Keybd_event.call(win, 0, 0, 0)
|
425
|
+
Keybd_event.call(win, 0, WIN_KEY_UP, 0)
|
426
|
+
end
|
427
|
+
end
|
428
|
+
sleep @delay
|
429
|
+
number
|
430
|
+
end
|
394
431
|
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
432
|
+
def get # :nodoc:
|
433
|
+
WINDOWS_LEDS.inject(0) do |sum, (nix, win)|
|
434
|
+
sum | ((GetKeyState.call(win) != 0) ? nix : 0)
|
435
|
+
end
|
436
|
+
end
|
437
|
+
else
|
438
|
+
# Set the state of the LEDs to integer _number_. (Quite low level)
|
439
|
+
def set(number)
|
440
|
+
@tty.ioctl(KDSETLED, number)
|
441
|
+
sleep @delay
|
442
|
+
number
|
443
|
+
end
|
444
|
+
|
445
|
+
# Return the state of the LEDs as an integer _number_. (Quite low level)
|
446
|
+
def get
|
447
|
+
char = [0].pack('C')
|
448
|
+
@tty.ioctl(KDGETLED, char)
|
449
|
+
char.unpack('C')[0]
|
450
|
+
end
|
400
451
|
end
|
401
452
|
|
402
453
|
# Return a string representation of this BlinkenLights instance, showing
|
data/make_doc.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
require 'rbconfig'
|
4
|
+
bindir = Config::CONFIG['bindir']
|
5
5
|
|
6
|
+
system "#{bindir}/ruby #{bindir}/rdoc -m BlinkenLights lib/blinkenlights.rb"
|
7
|
+
# vim: set et sw=4 ts=4:
|
metadata
CHANGED
@@ -3,52 +3,57 @@ rubygems_version: 0.8.11
|
|
3
3
|
specification_version: 1
|
4
4
|
name: blinkenlights
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.0.
|
7
|
-
date:
|
6
|
+
version: 0.0.3
|
7
|
+
date: 2006-04-08 00:00:00 +02:00
|
8
8
|
summary: Control the Blinkenlights on your keyboard from Ruby
|
9
9
|
require_paths:
|
10
|
-
|
10
|
+
- lib
|
11
11
|
email: flori@ping.de
|
12
12
|
homepage: http://blinkenlights.rubyforge.org
|
13
13
|
rubyforge_project: blinkenlights
|
14
|
-
description:
|
14
|
+
description: ""
|
15
15
|
autorequire: blinkenlights
|
16
16
|
default_executable:
|
17
17
|
bindir: bin
|
18
18
|
has_rdoc: true
|
19
19
|
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
20
|
requirements:
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
version: 0.0.0
|
21
|
+
- - ">"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.0.0
|
25
24
|
version:
|
26
25
|
platform: ruby
|
27
26
|
signing_key:
|
28
27
|
cert_chain:
|
29
28
|
authors:
|
30
|
-
|
29
|
+
- Florian Frank
|
31
30
|
files:
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
31
|
+
- examples
|
32
|
+
- install.rb
|
33
|
+
- GPL
|
34
|
+
- Rakefile
|
35
|
+
- VERSION
|
36
|
+
- CHANGES
|
37
|
+
- lib
|
38
|
+
- make_doc.rb
|
39
|
+
- README.en
|
40
|
+
- examples/netblinker.rb
|
41
|
+
- examples/loadbar.rb
|
42
|
+
- lib/blinkenlights.rb
|
44
43
|
test_files: []
|
44
|
+
|
45
45
|
rdoc_options:
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
46
|
+
- --title
|
47
|
+
- BlinkenLights in Ruby
|
48
|
+
- --main
|
49
|
+
- BlinkenLights
|
50
50
|
extra_rdoc_files: []
|
51
|
+
|
51
52
|
executables: []
|
53
|
+
|
52
54
|
extensions: []
|
55
|
+
|
53
56
|
requirements: []
|
54
|
-
|
57
|
+
|
58
|
+
dependencies: []
|
59
|
+
|