topherfangio-lcdproc-ruby 0.1.1
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/.document +5 -0
- data/.gitignore +6 -0
- data/LICENSE +20 -0
- data/README.rdoc +9 -0
- data/Rakefile +70 -0
- data/TODO +18 -0
- data/VERSION +1 -0
- data/devices/crystalfontz/packet.rb +108 -0
- data/devices/devices.rb +41 -0
- data/examples/basic.rb +39 -0
- data/examples/clock.rb +78 -0
- data/examples/lights.rb +67 -0
- data/lcdproc.rb +43 -0
- data/lib/console.rb +39 -0
- data/lib/core_extensions/array.rb +37 -0
- data/lib/core_extensions/string.rb +37 -0
- data/lib/includes/lcdproc.rb +27 -0
- data/lib/lcdproc-ruby.rb +0 -0
- data/lib/lcdproc/client.rb +458 -0
- data/lib/lcdproc/command.rb +54 -0
- data/lib/lcdproc/errors.rb +41 -0
- data/lib/lcdproc/key_event.rb +59 -0
- data/lib/lcdproc/menu.rb +188 -0
- data/lib/lcdproc/menu_event.rb +49 -0
- data/lib/lcdproc/menu_item.rb +108 -0
- data/lib/lcdproc/menu_items/action.rb +72 -0
- data/lib/lcdproc/menu_items/alpha.rb +85 -0
- data/lib/lcdproc/menu_items/checkbox.rb +76 -0
- data/lib/lcdproc/menu_items/ip.rb +75 -0
- data/lib/lcdproc/menu_items/numeric.rb +75 -0
- data/lib/lcdproc/menu_items/ring.rb +75 -0
- data/lib/lcdproc/menu_items/slider.rb +83 -0
- data/lib/lcdproc/menu_items/submenu.rb +77 -0
- data/lib/lcdproc/response.rb +65 -0
- data/lib/lcdproc/screen.rb +283 -0
- data/lib/lcdproc/widget.rb +142 -0
- data/lib/lcdproc/widgets/graph.rb +185 -0
- data/lib/lcdproc/widgets/hbar.rb +101 -0
- data/lib/lcdproc/widgets/icon.rb +94 -0
- data/lib/lcdproc/widgets/num.rb +92 -0
- data/lib/lcdproc/widgets/scroller.rb +110 -0
- data/lib/lcdproc/widgets/string.rb +94 -0
- data/lib/lcdproc/widgets/title.rb +90 -0
- data/lib/lcdproc/widgets/vbar.rb +111 -0
- data/script/console.rb +28 -0
- data/script/telnet.rb +90 -0
- data/tasks/test/basic.rake +82 -0
- data/tasks/test/keys.rake +66 -0
- data/tasks/test/menus.rake +74 -0
- metadata +104 -0
data/.document
ADDED
data/.gitignore
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2009 topherfangio
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
=Introduction
|
2
|
+
LCDProc-Ruby is an object-oriented API to the LCDProc server LCDd.
|
3
|
+
|
4
|
+
To get started, take a look at LCDProc::Client since it is the main
|
5
|
+
interface to LCDd. If you are interested in the status of development,
|
6
|
+
head over to the TODO to see what outstanding bugs are listed as well
|
7
|
+
as an overview of the features that are yet to be implemented.
|
8
|
+
|
9
|
+
LCDProc-Ruby is released under the open source MIT license.
|
data/Rakefile
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'jeweler'
|
6
|
+
Jeweler::Tasks.new do |gem|
|
7
|
+
gem.name = "lcdproc-ruby"
|
8
|
+
gem.summary = %Q{A Ruby library to interface with LCDProc.}
|
9
|
+
gem.email = "fangiotophia@gmail.com"
|
10
|
+
gem.homepage = "http://github.com/topherfangio/lcdproc-ruby"
|
11
|
+
gem.authors = ["topherfangio"]
|
12
|
+
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
13
|
+
end
|
14
|
+
|
15
|
+
rescue LoadError
|
16
|
+
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
|
17
|
+
end
|
18
|
+
|
19
|
+
require 'rake/testtask'
|
20
|
+
Rake::TestTask.new(:test) do |test|
|
21
|
+
test.libs << 'lib/tasks/test' << 'test'
|
22
|
+
test.pattern = 'test/**/*_test.rb'
|
23
|
+
test.verbose = true
|
24
|
+
end
|
25
|
+
|
26
|
+
begin
|
27
|
+
require 'rcov/rcovtask'
|
28
|
+
Rcov::RcovTask.new do |test|
|
29
|
+
test.libs << 'test'
|
30
|
+
test.pattern = 'test/**/*_test.rb'
|
31
|
+
test.verbose = true
|
32
|
+
end
|
33
|
+
rescue LoadError
|
34
|
+
task :rcov do
|
35
|
+
abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
task :default => :test
|
41
|
+
|
42
|
+
require 'rake/rdoctask'
|
43
|
+
Rake::RDocTask.new do |rdoc|
|
44
|
+
if File.exist?('VERSION.yml')
|
45
|
+
config = YAML.load(File.read('VERSION.yml'))
|
46
|
+
version = "#{config[:major]}.#{config[:minor]}.#{config[:patch]}"
|
47
|
+
else
|
48
|
+
version = ""
|
49
|
+
end
|
50
|
+
|
51
|
+
rdoc.rdoc_dir = 'rdoc'
|
52
|
+
rdoc.title = "lcdproc-ruby #{version}"
|
53
|
+
rdoc.rdoc_files.include('README*')
|
54
|
+
rdoc.rdoc_files.include('TODO*')
|
55
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
56
|
+
rdoc.rdoc_files.include('devices/**/*.rb')
|
57
|
+
|
58
|
+
# Show all methods including private ones
|
59
|
+
rdoc.options << '--all'
|
60
|
+
# Show line numbers and source code
|
61
|
+
rdoc.options << '--line-numbers' << '--inline-source'
|
62
|
+
end
|
63
|
+
|
64
|
+
# Load lcdproc-ruby specific tasks
|
65
|
+
require 'find'
|
66
|
+
Find.find( "tasks/test" ) do |file|
|
67
|
+
if File.basename( file ) =~ /\.rake$/
|
68
|
+
load File.expand_path( file )
|
69
|
+
end
|
70
|
+
end
|
data/TODO
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
=Introduction
|
2
|
+
|
3
|
+
Currently, I am still in the process of stating all of the features that I would like to implement for the 1.0
|
4
|
+
release. Many aspects of the program are in a working condition and can be used to create a basic program that
|
5
|
+
talks to the LCDd server. I hope to add much functionality over the next few months and to ensure that the code
|
6
|
+
structure enables easy extension by other developers (and myself).
|
7
|
+
|
8
|
+
=Bug Fixes
|
9
|
+
|
10
|
+
Bug fixes are any code/design changes that need to be implemented in order for the API to function properly or
|
11
|
+
conform to standards.
|
12
|
+
|
13
|
+
* Horizontal bar graphs should be able to handle a percentage or a regular integer
|
14
|
+
* The <tt>menu_add_item</tt> command currently returns two responses and I have inserted a hack to get it to work, a cleaner solution is desired
|
15
|
+
|
16
|
+
=Future Enhancements
|
17
|
+
|
18
|
+
Any feature requests will be documented here until they can be fully implemented and added into the existing API.
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.1
|
@@ -0,0 +1,108 @@
|
|
1
|
+
#-------------------------------------------------------------------------------
|
2
|
+
# Copyright (c) 2008 Topher Fangio
|
3
|
+
#
|
4
|
+
# Permission is hereby granted, free of charge, to any person
|
5
|
+
# obtaining a copy of this software and associated documentation
|
6
|
+
# files (the "Software"), to deal in the Software without
|
7
|
+
# restriction, including without limitation the rights to use,
|
8
|
+
# copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
# copies of the Software, and to permit persons to whom the
|
10
|
+
# Software is furnished to do so, subject to the following
|
11
|
+
# conditions:
|
12
|
+
#
|
13
|
+
# The above copyright notice and this permission notice shall be
|
14
|
+
# included in all copies or substantial portions of the Software.
|
15
|
+
#
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
18
|
+
# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
20
|
+
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
21
|
+
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
22
|
+
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
23
|
+
# OTHER DEALINGS IN THE SOFTWARE.
|
24
|
+
#-------------------------------------------------------------------------------
|
25
|
+
|
26
|
+
|
27
|
+
module LCDProc
|
28
|
+
module Devices
|
29
|
+
module Crystalfontz
|
30
|
+
|
31
|
+
module Packet
|
32
|
+
VALID_KEYS = [ "Escape", "Enter", "Up", "Down", "Left", "Right" ]
|
33
|
+
|
34
|
+
@drives_devices = [ "CrystalFontz Driver: CFA-635" ]
|
35
|
+
|
36
|
+
LCDProc::Devices.send( :include, self )
|
37
|
+
|
38
|
+
|
39
|
+
def Packet.drives?( search )
|
40
|
+
@drives_devices.include? search
|
41
|
+
end
|
42
|
+
|
43
|
+
|
44
|
+
# Called before initialization takes place.
|
45
|
+
def before_initialize( options = {} )
|
46
|
+
# Do nothing
|
47
|
+
end
|
48
|
+
|
49
|
+
|
50
|
+
# Called after initialization takes place.
|
51
|
+
def after_initialize( options = {} )
|
52
|
+
@leds = { 0 => 0, 1 => 0, 2 => 0, 3 => 0 }
|
53
|
+
end
|
54
|
+
|
55
|
+
|
56
|
+
# Make the specified leds light up.
|
57
|
+
#
|
58
|
+
# * <tt>leds</tt> - The leds that you wish to light. They may be specified as a single number, a range (1..3), an array [0,2] or the special parameter :all.
|
59
|
+
# * <tt>color</tt> - The color that you wish to light the leds. Valid options are :off, :green, :orange, or :red.
|
60
|
+
def light_leds( leds, color )
|
61
|
+
|
62
|
+
if leds == :all
|
63
|
+
leds_to_light = @leds.keys
|
64
|
+
elsif leds.kind_of? Range
|
65
|
+
leds_to_light = leds.to_a
|
66
|
+
else
|
67
|
+
leds_to_light = ( leds.kind_of?( Array ) ? leds : [ leds ] )
|
68
|
+
end
|
69
|
+
|
70
|
+
if leds_to_light.max > @leds.keys.max
|
71
|
+
add_message( "Error: Led '#{leds_to_light.max}' does not correspond to an actual led." )
|
72
|
+
return false
|
73
|
+
end
|
74
|
+
|
75
|
+
case color
|
76
|
+
when :off
|
77
|
+
leds_to_light.each{ |l| @leds[l] = 0 }
|
78
|
+
when :green
|
79
|
+
leds_to_light.each{ |l| @leds[l] = 2 ** l }
|
80
|
+
when :orange
|
81
|
+
leds_to_light.each{ |l| @leds[l] = 2 ** l * 16 + 2 ** l }
|
82
|
+
when :red
|
83
|
+
leds_to_light.each{ |l| @leds[l] = 2 ** l * 16 }
|
84
|
+
else
|
85
|
+
add_message( "Error: Unknown color '#{color}'" )
|
86
|
+
return false
|
87
|
+
end
|
88
|
+
|
89
|
+
command = Command.new( "output #{ @leds.values.sum }" )
|
90
|
+
response = send_command( command )
|
91
|
+
|
92
|
+
if response.successful?
|
93
|
+
add_message( "Leds #{leds_to_light} were correctly lit" )
|
94
|
+
return true
|
95
|
+
else
|
96
|
+
add_message( "Leds #{leds_to_light} were NOT correctly lit (#{response.message})" )
|
97
|
+
return false
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
101
|
+
|
102
|
+
end
|
103
|
+
|
104
|
+
end
|
105
|
+
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
data/devices/devices.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
#-------------------------------------------------------------------------------
|
2
|
+
# Copyright (c) 2008 Topher Fangio
|
3
|
+
#
|
4
|
+
# Permission is hereby granted, free of charge, to any person
|
5
|
+
# obtaining a copy of this software and associated documentation
|
6
|
+
# files (the "Software"), to deal in the Software without
|
7
|
+
# restriction, including without limitation the rights to use,
|
8
|
+
# copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
# copies of the Software, and to permit persons to whom the
|
10
|
+
# Software is furnished to do so, subject to the following
|
11
|
+
# conditions:
|
12
|
+
#
|
13
|
+
# The above copyright notice and this permission notice shall be
|
14
|
+
# included in all copies or substantial portions of the Software.
|
15
|
+
#
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
18
|
+
# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
20
|
+
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
21
|
+
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
22
|
+
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
23
|
+
# OTHER DEALINGS IN THE SOFTWARE.
|
24
|
+
#-------------------------------------------------------------------------------
|
25
|
+
|
26
|
+
|
27
|
+
module LCDProc
|
28
|
+
|
29
|
+
module Devices
|
30
|
+
|
31
|
+
def Devices.included_in
|
32
|
+
ancestors - [ self ]
|
33
|
+
end
|
34
|
+
|
35
|
+
def Devices.find_all_that_drive( search )
|
36
|
+
Devices.included_in.select { |mod| mod.drives?(search.strip) }
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
data/examples/basic.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
#-------------------------------------------------------------------------------
|
2
|
+
# Copyright (c) 2008 Topher Fangio
|
3
|
+
#
|
4
|
+
# Permission is hereby granted, free of charge, to any person
|
5
|
+
# obtaining a copy of this software and associated documentation
|
6
|
+
# files (the "Software"), to deal in the Software without
|
7
|
+
# restriction, including without limitation the rights to use,
|
8
|
+
# copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
# copies of the Software, and to permit persons to whom the
|
10
|
+
# Software is furnished to do so, subject to the following
|
11
|
+
# conditions:
|
12
|
+
#
|
13
|
+
# The above copyright notice and this permission notice shall be
|
14
|
+
# included in all copies or substantial portions of the Software.
|
15
|
+
#
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
18
|
+
# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
20
|
+
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
21
|
+
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
22
|
+
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
23
|
+
# OTHER DEALINGS IN THE SOFTWARE.
|
24
|
+
#-------------------------------------------------------------------------------
|
25
|
+
|
26
|
+
|
27
|
+
require 'lcdproc.rb'
|
28
|
+
|
29
|
+
include LCDProc
|
30
|
+
|
31
|
+
c = Client.new( :name => "My Client", :host => "localhost" )
|
32
|
+
s = Screen.new( "Test" )
|
33
|
+
|
34
|
+
c.attach( s )
|
35
|
+
graph = Widget.new( :graph )
|
36
|
+
|
37
|
+
s.add_widget(graph)
|
38
|
+
|
39
|
+
10.times { graph.bars.each { |bar| bar.height = rand(22) + 5 }; s.update; sleep 1 }
|
data/examples/clock.rb
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
#-------------------------------------------------------------------------------
|
4
|
+
# Copyright (c) 2008 Topher Fangio
|
5
|
+
#
|
6
|
+
# Permission is hereby granted, free of charge, to any person
|
7
|
+
# obtaining a copy of this software and associated documentation
|
8
|
+
# files (the "Software"), to deal in the Software without
|
9
|
+
# restriction, including without limitation the rights to use,
|
10
|
+
# copy, modify, merge, publish, distribute, sublicense, and/or sell
|
11
|
+
# copies of the Software, and to permit persons to whom the
|
12
|
+
# Software is furnished to do so, subject to the following
|
13
|
+
# conditions:
|
14
|
+
#
|
15
|
+
# The above copyright notice and this permission notice shall be
|
16
|
+
# included in all copies or substantial portions of the Software.
|
17
|
+
#
|
18
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
19
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
20
|
+
# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
21
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
22
|
+
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
23
|
+
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
24
|
+
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
25
|
+
# OTHER DEALINGS IN THE SOFTWARE.
|
26
|
+
#-------------------------------------------------------------------------------
|
27
|
+
|
28
|
+
# Example: clock.rb
|
29
|
+
# Author: Topher Fangio
|
30
|
+
# Date: 9.17.2008
|
31
|
+
#
|
32
|
+
# Purpose: This program displays a simple clock on the LCD that updates every 5 seconds.
|
33
|
+
# This will most likely be extracted into it's own Widget at a later date, but
|
34
|
+
# it makes a very good beginners example for now.
|
35
|
+
|
36
|
+
require "lcdproc"
|
37
|
+
|
38
|
+
include LCDProc
|
39
|
+
|
40
|
+
c = Client.new( :host => "localhost" )
|
41
|
+
s = Screen.new("clock")
|
42
|
+
|
43
|
+
hour1 = Widgets::Num.new("hour1", 0, 3)
|
44
|
+
hour2 = Widgets::Num.new("hour2", 1, 7)
|
45
|
+
colon = Widgets::Num.new("colon", 10, 10)
|
46
|
+
minute1 = Widgets::Num.new("minute1", 0, 12)
|
47
|
+
minute2 = Widgets::Num.new("minute2", 0, 16)
|
48
|
+
|
49
|
+
s.add_widget(hour1)
|
50
|
+
s.add_widget(hour2)
|
51
|
+
s.add_widget(colon)
|
52
|
+
s.add_widget(minute1)
|
53
|
+
s.add_widget(minute2)
|
54
|
+
|
55
|
+
c.attach( s )
|
56
|
+
|
57
|
+
while true do
|
58
|
+
t = Time.new
|
59
|
+
|
60
|
+
if (t.hour > 10)
|
61
|
+
hour1.number = t.hour / 10
|
62
|
+
hour2.number = t.hour % 10
|
63
|
+
else
|
64
|
+
hour1.number = 0
|
65
|
+
hour2.number = t.hour
|
66
|
+
end
|
67
|
+
|
68
|
+
if (t.min > 10)
|
69
|
+
minute1.number = t.min / 10
|
70
|
+
minute2.number = t.min % 10
|
71
|
+
else
|
72
|
+
minute1.number = 0
|
73
|
+
minute2.number = t.min
|
74
|
+
end
|
75
|
+
|
76
|
+
s.update
|
77
|
+
sleep 5
|
78
|
+
end
|
data/examples/lights.rb
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
#-------------------------------------------------------------------------------
|
4
|
+
# Copyright (c) 2008 Topher Fangio
|
5
|
+
#
|
6
|
+
# Permission is hereby granted, free of charge, to any person
|
7
|
+
# obtaining a copy of this software and associated documentation
|
8
|
+
# files (the "Software"), to deal in the Software without
|
9
|
+
# restriction, including without limitation the rights to use,
|
10
|
+
# copy, modify, merge, publish, distribute, sublicense, and/or sell
|
11
|
+
# copies of the Software, and to permit persons to whom the
|
12
|
+
# Software is furnished to do so, subject to the following
|
13
|
+
# conditions:
|
14
|
+
#
|
15
|
+
# The above copyright notice and this permission notice shall be
|
16
|
+
# included in all copies or substantial portions of the Software.
|
17
|
+
#
|
18
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
19
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
20
|
+
# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
21
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
22
|
+
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
23
|
+
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
24
|
+
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
25
|
+
# OTHER DEALINGS IN THE SOFTWARE.
|
26
|
+
#-------------------------------------------------------------------------------
|
27
|
+
|
28
|
+
# Example: lights.rb
|
29
|
+
# Author: Topher Fangio
|
30
|
+
# Date: 9.17.2008
|
31
|
+
#
|
32
|
+
# Purpose: This program iterates through the available lights and turns them red.
|
33
|
+
# Note that at the moment, only one device has been defined that supports
|
34
|
+
# leds, the CrystalFontz display defined in devices/crystalfontz/packet.rb.
|
35
|
+
|
36
|
+
require "lcdproc"
|
37
|
+
include LCDProc
|
38
|
+
|
39
|
+
# Setup our client
|
40
|
+
c = Client.new( :host => "192.168.1.142" )
|
41
|
+
|
42
|
+
@current_led = 0
|
43
|
+
@color = :red
|
44
|
+
|
45
|
+
# Define a method to modify the current led
|
46
|
+
def move_current_led(direction)
|
47
|
+
@current_led += direction
|
48
|
+
|
49
|
+
if (@current_led > 3)
|
50
|
+
@current_led = 0
|
51
|
+
end
|
52
|
+
|
53
|
+
if (@current_led < 0)
|
54
|
+
@current_led = 3
|
55
|
+
end
|
56
|
+
|
57
|
+
return @current_led
|
58
|
+
end
|
59
|
+
|
60
|
+
while true
|
61
|
+
c.light_leds(:all, :off)
|
62
|
+
c.light_leds(@current_led, :red)
|
63
|
+
|
64
|
+
move_current_led(1)
|
65
|
+
|
66
|
+
sleep 1
|
67
|
+
end
|