x10-cm17a 0.9.0 → 1.0.0

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/Rakefile CHANGED
@@ -1,189 +1,195 @@
1
- # -*- ruby -*-
2
-
3
- require 'rake/clean'
4
- require 'rake/testtask'
5
- require 'rake/rdoctask'
6
- require 'rbconfig'
7
-
8
- begin
9
- require 'rubygems'
10
- require 'rake/gempackagetask'
11
- rescue Exception
12
- nil
13
- end
14
-
15
- ARCH = Config::CONFIG['arch']
16
- SO_FILE = "lib/#{ARCH}/cm17a_api.so"
17
-
18
- MAKE = (ARCH =~ /win32/) ? 'nmake' : 'make'
19
-
20
- CLOBBER.include(
21
- SO_FILE,
22
- 'ext/cm17a_api/*.o',
23
- 'ext/cm17a_api/*.obj',
24
- 'ext/cm17a_api/*.def',
25
- 'ext/cm17a_api/*.exp',
26
- 'ext/cm17a_api/*.lib',
27
- 'ext/cm17a_api/*.pdb',
28
- 'ext/cm17a_api/*.so',
29
- 'ext/cm17a_api/Makefile',
30
- 'ext/cm17a_api/MANIFEST',
31
- 'lib/*-*',
32
- '**/*.log'
33
- )
34
-
35
- desc "Default task (run tests)"
36
- task :default => :test
37
-
38
- desc "Run the unit tests"
39
- task :test => [SO_FILE] do
40
- test_files = FileList['test/test_*.rb']
41
- ruby "-Ilib", "-Ilib/#{ARCH}", '-e0', *test_files.collect { |fn| "-r#{fn}" }
42
- end
43
-
44
- task :compile => [SO_FILE]
45
-
46
- directory File.dirname(SO_FILE)
47
-
48
- file SO_FILE => ["ext/cm17a_api/cm17a_api.so", File.dirname(SO_FILE)] do |t|
49
- cp t.prerequisites.first, SO_FILE
50
- end
51
-
52
- file "ext/cm17a_api/Makefile" => ["ext/cm17a_api/extconf.rb"] do
53
- Dir.chdir("ext/cm17a_api") do ruby "extconf.rb" end
54
- end
55
-
56
- CM17A_FILES = FileList[
57
- 'ext/cm17a_api/*.c',
58
- 'ext/cm17a_api/*.h',
59
- 'ext/cm17a_api/extconf.rb',
60
- 'ext/cm17a_api/Makefile',
61
- 'ext/cm17a_api/MANIFEST',
62
- ]
63
-
64
- file "ext/cm17a_api/cm17a_api.so" => CM17A_FILES do
65
- Dir.chdir("ext/cm17a_api") do
66
- sh MAKE
67
- end
68
- end
69
-
70
- # RDoc Documentation -------------------------------------------------
71
-
72
- # Choose template, prefer the jamis template if it is available
73
-
74
- def choose_rdoc_template
75
- libdir = Config::CONFIG['rubylibdir']
76
- templates = Dir[File.join(libdir, 'rdoc/**/jamis.rb')]
77
- templates.empty? ? 'html': 'jamis'
78
- end
79
-
80
- rd = Rake::RDocTask.new("rdoc") { |rdoc|
81
- rdoc.rdoc_dir = 'html'
82
- rdoc.template = choose_rdoc_template
83
- rdoc.title = "Ruby X10 Software"
84
- rdoc.options << '--line-numbers' << '--inline-source' << '--main' << 'README'
85
- rdoc.rdoc_files.include(
86
- 'lib/**/*.rb',
87
- 'doc/*.rdoc',
88
- 'ext/**/cm17a_api.c',
89
- 'README',
90
- 'MIT-LICENSE')
91
- rdoc.rdoc_files.exclude('lib/**/other.rb', 'lib/**/bottlerocket.rb')
92
- }
93
-
94
-
95
- # Packaging Tasks ----------------------------------------------------
96
-
97
- file "ext/cm17a_api/MANIFEST" do |t|
98
- open(t.name, "w") do |f|
99
- f.puts Dir["ext/cm17a_api/*"].select { |fn|
100
- fn =~ /\.(h|c|rb)$/
101
- }.collect { |fn|
102
- File.basename(fn)
103
- }
104
- end
105
- end
106
-
107
- PKG_VERSION = '0.9.0'
108
- PKG_FILES = FileList[
109
- 'Rakefile',
110
- 'setup.rb',
111
- 'test/*.rb',
112
- 'lib/**/*.rb',
113
- 'ext/cm17a_api/MANIFEST',
114
- 'ext/cm17a_api/*.h',
115
- 'ext/cm17a_api/*.c',
116
- 'ext/cm17a_api/*.rb',
117
- ]
118
-
119
- if ! defined?(Gem)
120
- puts "Package Target requires RubyGEMs"
121
- else
122
- spec = Gem::Specification.new do |s|
123
-
124
- #### Basic information.
125
-
126
- s.name = 'x10-cm17a'
127
- s.version = PKG_VERSION
128
- s.summary = "Ruby based X10 CM17A Firecracker Controller"
129
- s.description = <<-EOF
130
- EOF
131
-
132
- s.files = PKG_FILES.to_a
133
-
134
- #### C code extensions.
135
-
136
- s.extensions << "ext/cm17a_api/extconf.rb"
137
-
138
- #### Load-time details: library and application (you will need one or both).
139
-
140
- s.require_path = 'lib' # Use these for libraries.
141
-
142
- #### Documentation and testing.
143
-
144
- s.has_rdoc = true
145
- # s.extra_rdoc_files = rd.rdoc_files.reject { |fn| fn =~ /\.rb$/ }.to_a
146
- # s.rdoc_options <<
147
- # '--title' << 'Rake -- Ruby Make' <<
148
- # '--main' << 'README' <<
149
- # '--line-numbers'
150
-
151
- #### Author and project details.
152
-
153
- s.author = "Jim Weirich"
154
- s.email = "jim@weirichhouse.org"
155
- # s.homepage = "http://rake.rubyforge.org"
156
- end
157
-
158
- Rake::GemPackageTask.new(spec) do |pkg|
159
- pkg.need_zip = true
160
- pkg.need_tar = true
161
- end
162
- end
163
-
164
-
165
- # Publishing Tasks ---------------------------------------------------
166
-
167
-
168
- task :publish_on_osb => ["pkg/cm17a-#{PKG_VERSION}.tgz", "pkg/cm17a-#{PKG_VERSION}.gem"] do |t|
169
- sh %{ssh umlcoop mkdir -p "htdocs/software/cm17a"}
170
- sh %{scp -rq #{t.prerequisites.join(' ')} umlcoop:htdocs/software/cm17a}
171
- end
172
-
173
- # Optional publish task for Rake
174
-
175
- require 'rake/contrib/sshpublisher'
176
- require 'rake/contrib/rubyforgepublisher'
177
-
178
- publisher = Rake::CompositePublisher.new
179
- publisher.add Rake::RubyForgePublisher.new('x10-cm17a', 'jimweirich')
180
- publisher.add Rake::SshFilePublisher.new(
181
- 'umlcoop',
182
- 'htdocs/software/x10-cm17a',
183
- '.',
184
- 'x10-cm17a.blurb')
185
-
186
- desc "Publish the Documentation to RubyForge."
187
- task :publish => [:rdoc] do
188
- publisher.upload
189
- end
1
+ # -*- ruby -*-
2
+
3
+ require 'rake/clean'
4
+ require 'rake/testtask'
5
+ require 'rake/rdoctask'
6
+ require 'rbconfig'
7
+
8
+ begin
9
+ require 'rubygems'
10
+ require 'rake/gempackagetask'
11
+ rescue Exception
12
+ nil
13
+ end
14
+
15
+ ARCH = Config::CONFIG['arch']
16
+ SO_FILE = "lib/#{ARCH}/cm17a_api.so"
17
+
18
+ MAKE = (ARCH =~ /win32/) ? 'nmake' : 'make'
19
+
20
+ CLOBBER.include(
21
+ SO_FILE,
22
+ 'ext/cm17a_api/*.o',
23
+ 'ext/cm17a_api/*.obj',
24
+ 'ext/cm17a_api/*.def',
25
+ 'ext/cm17a_api/*.exp',
26
+ 'ext/cm17a_api/*.lib',
27
+ 'ext/cm17a_api/*.pdb',
28
+ 'ext/cm17a_api/*.so',
29
+ 'ext/cm17a_api/Makefile',
30
+ 'ext/cm17a_api/MANIFEST',
31
+ 'lib/*-*',
32
+ '**/*.log'
33
+ )
34
+
35
+ desc "Default task (run tests)"
36
+ task :default => :test
37
+
38
+ desc "Run the unit tests"
39
+ Rake::TestTask.new do |t|
40
+ t.test_files = FileList['test/test_*.rb']
41
+ t.libs << "lib/#{ARCH}"
42
+ end
43
+ task :test => [SO_FILE]
44
+
45
+ task :xtest => [SO_FILE] do
46
+ test_files = FileList['test/test_*.rb']
47
+ ruby "-Ilib", "-Ilib/#{ARCH}", '-e0', *test_files.collect { |fn| "-r#{fn}" }
48
+ end
49
+
50
+ task :compile => [SO_FILE]
51
+
52
+ directory File.dirname(SO_FILE)
53
+
54
+ file SO_FILE => ["ext/cm17a_api/cm17a_api.so", File.dirname(SO_FILE)] do |t|
55
+ cp t.prerequisites.first, SO_FILE
56
+ end
57
+
58
+ file "ext/cm17a_api/Makefile" => ["ext/cm17a_api/extconf.rb"] do
59
+ Dir.chdir("ext/cm17a_api") do ruby "extconf.rb" end
60
+ end
61
+
62
+ CM17A_FILES = FileList[
63
+ 'ext/cm17a_api/*.c',
64
+ 'ext/cm17a_api/*.h',
65
+ 'ext/cm17a_api/extconf.rb',
66
+ 'ext/cm17a_api/Makefile',
67
+ 'ext/cm17a_api/MANIFEST',
68
+ ]
69
+
70
+ file "ext/cm17a_api/cm17a_api.so" => CM17A_FILES do
71
+ Dir.chdir("ext/cm17a_api") do
72
+ sh MAKE
73
+ end
74
+ end
75
+
76
+ # RDoc Documentation -------------------------------------------------
77
+
78
+ # Choose template, prefer the jamis template if it is available
79
+
80
+ def choose_rdoc_template
81
+ libdir = Config::CONFIG['rubylibdir']
82
+ templates = Dir[File.join(libdir, 'rdoc/**/jamis.rb')]
83
+ templates.empty? ? 'html': 'jamis'
84
+ end
85
+
86
+ rd = Rake::RDocTask.new("rdoc") { |rdoc|
87
+ rdoc.rdoc_dir = 'html'
88
+ rdoc.template = choose_rdoc_template
89
+ rdoc.title = "Ruby X10 Software"
90
+ rdoc.options << '--line-numbers' << '--inline-source' << '--main' << 'README'
91
+ rdoc.rdoc_files.include(
92
+ 'lib/**/*.rb',
93
+ 'doc/*.rdoc',
94
+ 'ext/**/cm17a_api.c',
95
+ 'README',
96
+ 'MIT-LICENSE')
97
+ rdoc.rdoc_files.exclude('lib/**/other.rb', 'lib/**/bottlerocket.rb')
98
+ }
99
+
100
+
101
+ # Packaging Tasks ----------------------------------------------------
102
+
103
+ file "ext/cm17a_api/MANIFEST" do |t|
104
+ open(t.name, "w") do |f|
105
+ f.puts Dir["ext/cm17a_api/*"].select { |fn|
106
+ fn =~ /\.(h|c|rb)$/
107
+ }.collect { |fn|
108
+ File.basename(fn)
109
+ }
110
+ end
111
+ end
112
+
113
+ PKG_VERSION = '1.0.0'
114
+ PKG_FILES = FileList[
115
+ 'Rakefile',
116
+ 'setup.rb',
117
+ 'test/*.rb',
118
+ 'lib/**/*.rb',
119
+ 'ext/cm17a_api/MANIFEST',
120
+ 'ext/cm17a_api/*.h',
121
+ 'ext/cm17a_api/*.c',
122
+ 'ext/cm17a_api/*.rb',
123
+ ]
124
+
125
+ if ! defined?(Gem)
126
+ puts "Package Target requires RubyGEMs"
127
+ else
128
+ spec = Gem::Specification.new do |s|
129
+
130
+ #### Basic information.
131
+
132
+ s.name = 'x10-cm17a'
133
+ s.version = PKG_VERSION
134
+ s.summary = "Ruby based X10 CM17A Firecracker Controller"
135
+ s.description = <<-EOF
136
+ EOF
137
+
138
+ s.files = PKG_FILES.to_a
139
+
140
+ #### C code extensions.
141
+
142
+ s.extensions << "ext/cm17a_api/extconf.rb"
143
+
144
+ #### Load-time details: library and application (you will need one or both).
145
+
146
+ s.require_path = 'lib' # Use these for libraries.
147
+
148
+ #### Documentation and testing.
149
+
150
+ s.has_rdoc = true
151
+ # s.extra_rdoc_files = rd.rdoc_files.reject { |fn| fn =~ /\.rb$/ }.to_a
152
+ # s.rdoc_options <<
153
+ # '--title' << 'Rake -- Ruby Make' <<
154
+ # '--main' << 'README' <<
155
+ # '--line-numbers'
156
+
157
+ #### Author and project details.
158
+
159
+ s.author = "Jim Weirich"
160
+ s.email = "jim@weirichhouse.org"
161
+ # s.homepage = "http://rake.rubyforge.org"
162
+ end
163
+
164
+ Rake::GemPackageTask.new(spec) do |pkg|
165
+ pkg.need_zip = true
166
+ pkg.need_tar = true
167
+ end
168
+ end
169
+
170
+
171
+ # Publishing Tasks ---------------------------------------------------
172
+
173
+
174
+ task :publish_on_osb => ["pkg/cm17a-#{PKG_VERSION}.tgz", "pkg/cm17a-#{PKG_VERSION}.gem"] do |t|
175
+ sh %{ssh umlcoop mkdir -p "htdocs/software/cm17a"}
176
+ sh %{scp -rq #{t.prerequisites.join(' ')} umlcoop:htdocs/software/cm17a}
177
+ end
178
+
179
+ # Optional publish task for Rake
180
+
181
+ require 'rake/contrib/sshpublisher'
182
+ require 'rake/contrib/rubyforgepublisher'
183
+
184
+ publisher = Rake::CompositePublisher.new
185
+ publisher.add Rake::RubyForgePublisher.new('x10-cm17a', 'jimweirich')
186
+ publisher.add Rake::SshFilePublisher.new(
187
+ 'umlcoop',
188
+ 'htdocs/software/x10-cm17a',
189
+ '.',
190
+ 'x10-cm17a.blurb')
191
+
192
+ desc "Publish the Documentation to RubyForge."
193
+ task :publish => [:rdoc] do
194
+ publisher.upload
195
+ end
@@ -32,6 +32,10 @@ static VALUE mX10;
32
32
  static VALUE mCm17a;
33
33
  static VALUE cCm17aController;
34
34
  static VALUE eX10Error;
35
+ static VALUE symON;
36
+ static VALUE symOFF;
37
+ static VALUE symDIM;
38
+ static VALUE symBRIGHTEN;
35
39
 
36
40
  /*
37
41
  * call-seq:
@@ -62,13 +66,13 @@ static VALUE cm17a_init(int argc, VALUE *argv, VALUE self)
62
66
  * address is given by the +house+ code (0-15) and the +unit+ code
63
67
  * (0-15). The command must be one of the following constants:
64
68
  *
65
- * * <tt>X10::Cm17a::ON</tt> -- Turn the device on.
66
- * * <tt>X10::Cm17a::OFF</tt> -- Turn the device off.
67
- * * <tt>X10::Cm17a::DIM</tt> -- Dim the device by +steps+ steps.
68
- * * <tt>X10::Cm17a::BRIGHT</tt> -- Brighten the device by +steps+ steps.
69
+ * * <tt>:on</tt> -- Turn the device on.
70
+ * * <tt>:off</tt> -- Turn the device off.
71
+ * * <tt>:dim</tt> -- Dim the device by +steps+ steps.
72
+ * * <tt>:brighten</tt> -- Brighten the device by +steps+ steps.
69
73
  *
70
- * Note that the unit code is ignored for the <tt>BRIGHT</tt> and
71
- * <tt>DIM</tt> commands. The bright/dim commands will effect the
74
+ * Note that the unit code is ignored for the <tt>:brighten</tt> and
75
+ * <tt>:dim</tt> commands. The bright/dim commands will effect the
72
76
  * last addressed unit.
73
77
  */
74
78
  static VALUE cm17a_ruby_command(
@@ -80,8 +84,20 @@ static VALUE cm17a_ruby_command(
80
84
  {
81
85
  int house = NUM2INT(rhouse);
82
86
  int device = NUM2INT(rdevice);
83
- int command = NUM2INT(rcommand);
84
87
  int steps = NUM2INT(rsteps);
88
+ int command;
89
+
90
+ if (rcommand == symON)
91
+ command = CM17A_ON;
92
+ else if (rcommand == symOFF)
93
+ command = CM17A_OFF;
94
+ else if (rcommand == symDIM)
95
+ command = CM17A_DIM;
96
+ else if (rcommand == symBRIGHTEN)
97
+ command = CM17A_BRIGHTEN;
98
+ else
99
+ command = NUM2INT(rcommand);
100
+
85
101
  cm17a_command(fd, house, device, command, steps);
86
102
  return Qnil;
87
103
  }
@@ -103,12 +119,12 @@ void Init_cm17a_api()
103
119
 
104
120
  eX10Error = rb_eval_string("X10::X10Error");
105
121
 
122
+ symON = rb_eval_string(":on");
123
+ symOFF = rb_eval_string(":off");
124
+ symDIM = rb_eval_string(":dim");
125
+ symBRIGHTEN = rb_eval_string(":brighton");
126
+
106
127
  rb_define_method(cCm17aController, "initialize", cm17a_init, -1);
107
128
  rb_define_method(cCm17aController, "close", cm17a_close, 0);
108
129
  rb_define_method(cCm17aController, "command", cm17a_ruby_command, 4);
109
-
110
- rb_define_const(mCm17a, "ON", INT2NUM(CM17A_ON));
111
- rb_define_const(mCm17a, "OFF", INT2NUM(CM17A_OFF));
112
- rb_define_const(mCm17a, "BRIGHTEN", INT2NUM(CM17A_BRIGHTEN));
113
- rb_define_const(mCm17a, "DIM", INT2NUM(CM17A_DIM));
114
130
  }
@@ -2,7 +2,6 @@
2
2
 
3
3
  require 'x10'
4
4
  require 'cm17a_api'
5
-
6
5
  require 'x10/cm17a_device'
7
6
 
8
7
  module X10
@@ -32,111 +32,30 @@ module X10
32
32
 
33
33
  # Turn the device on.
34
34
  def on
35
- @controller.command(@house, @unit, X10::Cm17a::ON, 0)
36
- @level = 1.0 if @on == false
37
- @on = true
35
+ @controller.command(@house, @unit, :on, 0)
38
36
  end
39
37
 
40
38
  # Turn the device off.
41
39
  def off
42
- @controller.command(@house, @unit, X10::Cm17a::OFF, 0)
43
- @level = 0.0
44
- @on = false
45
- end
46
-
47
- # Adjust the brightness level.
48
- #
49
- # The level adjustment is given as a number between 0 and 1. An
50
- # adjustment amount of 1 will adjust a completely dim device
51
- # into a completely bright device. An adjustment of 0.5 will be
52
- # one half of full range.
53
- #
54
- # Negative adjustment amounts dim the device. Positive
55
- # adjustments brighten the device.
56
- def adjust(amount)
57
- steps = steps_for(amount)
58
- while steps > 0
59
- step = (steps > 6 ? 6 : steps)
60
- if amount > 0
61
- brighten(step)
62
- else
63
- dim(step)
64
- end
65
- steps -= step
40
+ @controller.command(@house, @unit, :off, 0)
41
+ end
42
+
43
+ # Adjust the brightness level by +steps+. If +steps+ is
44
+ # positive, the brightness level is increased that many steps.
45
+ # If +steps+ is negative, the brightness level is decreased by
46
+ # <tt>|steps|</tt>.
47
+ #
48
+ # The controller limits the step size to 6, so larger steps must
49
+ # be broken up.
50
+ def step(steps)
51
+ direction = (steps > 0) ? :brighten : :dim
52
+ nsteps = steps.abs
53
+ while nsteps > 0
54
+ n = (nsteps > 6) ? 6 : nsteps
55
+ @controller.command(@house, @unit, direction, n)
56
+ nsteps -= n
66
57
  end
67
- if @level
68
- @level += amount
69
- @level = 0.0 if @level < 0
70
- @level = 1.0 if @level > 1
71
- end
72
- end
73
-
74
- private
75
-
76
- # -- Questionable Methods --------------------------------------
77
-
78
- # The following methods are provided as private methods. They
79
- # are used in testing, but I am uncertain whether they should be
80
- # part of the public interface, due to the uncertaintity of
81
- # there implementation.
82
-
83
- # Is the device on?
84
- #
85
- # Since the CM17A protocol is write only, we can't really sense
86
- # the on/off state of the device, so we remember the last
87
- # commanded state. This approach has the following
88
- # disadvantages:
89
- #
90
- # * The on/off state is indeterminate until the first command is
91
- # issued. Asking for the on/off state before the first
92
- # command will throw an X10::X10Error exception.
93
- # * If there is more than one device object controlling a single
94
- # physical device, then the on/off state can be invalidated by
95
- # second device object.
96
- def on?
97
- fail X10::X10Error, "On/Off state is unknown" if @on.nil?
98
- @on
99
58
  end
100
-
101
- # Is the device off?
102
- #
103
- # See also the discussion in the on? method.
104
- def off?
105
- ! on?
106
- end
107
-
108
- # Return the current brightness level between 0 (very dim) and
109
- # 1.0 (very bright) of the device.
110
- #
111
- # Again, since the CM17A protocol is write only, the same
112
- # caveats that apply to on? and off? are also applicable here.
113
- #
114
- # Furthermore, the real brightness level is a mystery. The
115
- # protocol docs say that stepping the brighteness level changes
116
- # it by approximately 5%. However, there seems to be only 10 or
117
- # so steps from completely dim to completely bright.
118
- def level
119
- fail X10::X10Error, "Level is unknown" if @level.nil?
120
- @level
121
- end
122
-
123
- # -- Helper Commands -------------------------------------------
124
-
125
- # Brightness steps for the given amount.
126
- def steps_for(amount)
127
- (amount * 10).round.abs
128
- end
129
-
130
- # Send a dim command for the given number of steps.
131
- def dim(steps)
132
- @controller.command(@house, @unit, X10::Cm17a::DIM, steps)
133
- end
134
-
135
- # Send a brighten command for the given number of steps.
136
- def brighten(steps)
137
- @controller.command(@house, @unit, X10::Cm17a::BRIGHTEN, steps)
138
- end
139
-
140
59
  end
141
60
  end
142
61
  end
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'drb'
4
+ require 'x10'
5
+ require 'x10/cm17a_device'
6
+
7
+ module X10
8
+ module Cm17aRemote
9
+ class Controller
10
+ def initialize(uri="druby:localhost:7777")
11
+ @uri = uri
12
+ @remote = DRbObject.new(nil, @uri)
13
+ end
14
+ def command(house, unit, command, steps)
15
+ @remote.command(house, unit, command, steps)
16
+ end
17
+ def device(house, unit)
18
+ X10::Cm17a::Device.new(house, unit, self)
19
+ end
20
+ def self.x10_controller?
21
+ true
22
+ end
23
+ end
24
+ end
25
+ end
@@ -14,6 +14,7 @@ class TestApi < Test::Unit::TestCase
14
14
 
15
15
  def teardown
16
16
  X10.controller.close if X10.controller
17
+ X10.controller = nil
17
18
  end
18
19
 
19
20
  def test_default_create
@@ -26,7 +26,7 @@ class MockController < FlexMock
26
26
  X10.controller = controller
27
27
  controller.mock_handle(:device, 1) { |house, unit|
28
28
  X10::Cm17a::Device.new(house, unit, controller)
29
- }
29
+ }
30
30
  end
31
31
 
32
32
  def use
@@ -57,7 +57,7 @@ class TestCm17a < Test::Unit::TestCase
57
57
  def test_on
58
58
  MockController.use do |controller|
59
59
  controller.mock_handle(:command, 1) { |house, unit, cmd, step|
60
- assert_equal X10::Cm17a::ON, cmd
60
+ assert_equal :on, cmd
61
61
  assert_equal 0, step
62
62
  }
63
63
  dev = X10.device('a1')
@@ -68,7 +68,7 @@ class TestCm17a < Test::Unit::TestCase
68
68
  def test_off
69
69
  MockController.use do |controller|
70
70
  controller.mock_handle(:command, 1) { |house, unit, cmd, step|
71
- assert_equal X10::Cm17a::OFF, cmd
71
+ assert_equal :off, cmd
72
72
  assert_equal 0, step
73
73
  }
74
74
  dev = X10.device('a1')
@@ -76,37 +76,27 @@ class TestCm17a < Test::Unit::TestCase
76
76
  end
77
77
  end
78
78
 
79
- def test_step_size
80
- MockController.use do |controller|
81
- dev = X10.device('a1')
82
- assert_equal 0, dev.send(:steps_for, 0.0)
83
- assert_equal 5, dev.send(:steps_for, 0.5)
84
- assert_equal 5, dev.send(:steps_for, -0.5)
85
- assert_equal 10, dev.send(:steps_for, 1.0)
86
- end
87
- end
88
-
89
79
  def test_adjust
90
80
  MockController.use do |controller|
91
81
  controller.mock_handle(:command, 2) { |house, unit, cmd, step|
92
82
  if step == 4
93
83
  assert_equal 4, step
94
- assert_equal X10::Cm17a::BRIGHTEN, cmd
84
+ assert_equal :brighten, cmd
95
85
  else
96
86
  assert_equal 3, step
97
- assert_equal X10::Cm17a::DIM, cmd
87
+ assert_equal :dim, cmd
98
88
  end
99
89
  }
100
90
  dev = X10.device('a1')
101
- dev.adjust(0.4)
102
- dev.adjust(-0.3)
91
+ dev.step(4)
92
+ dev.step(-3)
103
93
  end
104
94
  end
105
95
 
106
96
  def test_big_adjustments
107
97
  MockController.use do |controller|
108
98
  controller.mock_handle(:command, 2) { |house, unit, cmd, step|
109
- assert_equal X10::Cm17a::DIM, cmd
99
+ assert_equal :dim, cmd
110
100
  if step == 6
111
101
  assert_equal 6, step
112
102
  else
@@ -114,7 +104,7 @@ class TestCm17a < Test::Unit::TestCase
114
104
  end
115
105
  }
116
106
  dev = X10.device('a1')
117
- dev.adjust(-0.9)
107
+ dev.step(-9)
118
108
  end
119
109
  end
120
110
 
@@ -122,7 +112,7 @@ class TestCm17a < Test::Unit::TestCase
122
112
  MockController.use do |controller|
123
113
  controller.mock_handle(:command, 0) { }
124
114
  dev = X10.device('a1')
125
- dev.adjust(0.0)
115
+ dev.step(0)
126
116
  end
127
117
  end
128
118
 
@@ -135,80 +125,12 @@ class TestCm17a < Test::Unit::TestCase
135
125
  dev = X10.device('b3')
136
126
  dev.off
137
127
  dev.on
138
- dev.adjust(1)
139
- dev.adjust(-1)
128
+ dev.step(1)
129
+ dev.step(-1)
140
130
  end
141
131
  end
142
132
  end
143
133
 
144
- ######################################################################
145
- class TestCm17aNonApi < Test::Unit::TestCase
146
- def setup
147
- X10.controller = MockController.new
148
- X10.controller.mock_handle(:command) { }
149
- MockController.setup_controller(X10.controller)
150
- @dev = X10.device("a1")
151
- end
152
-
153
- def teardown
154
- X10.controller = nil
155
- end
156
-
157
- def test_query
158
- @dev.on
159
- assert @dev.send(:on?)
160
- assert ! @dev.send(:off?)
161
- @dev.off
162
- assert ! @dev.send(:on?)
163
- assert @dev.send(:off?)
164
- @dev.on
165
- assert @dev.send(:on?)
166
- assert ! @dev.send(:off?)
167
- end
168
-
169
- def test_undefined_on_off_state
170
- assert_raises(X10::X10Error) {
171
- @dev.send(:on?)
172
- }
173
- end
174
-
175
- def test_undefined_level
176
- assert_raises(X10::X10Error) {
177
- @dev.send(:level)
178
- }
179
- end
180
-
181
- def test_undefined_level_after_adjust
182
- assert_raises(X10::X10Error) {
183
- @dev.adjust(0.3)
184
- @dev.send(:level)
185
- }
186
- end
187
-
188
- def test_level
189
- @dev.off
190
- assert_equal 0.0, @dev.send(:level)
191
-
192
- @dev.adjust(-0.5)
193
- assert_equal 0.0, @dev.send(:level)
194
-
195
- @dev.on
196
- assert_equal 1.0, @dev.send(:level)
197
-
198
- @dev.adjust(0.1)
199
- assert_equal 1.0, @dev.send(:level)
200
-
201
- @dev.adjust(-0.5)
202
- assert_equal 0.5, @dev.send(:level)
203
-
204
- @dev.adjust(-0.5)
205
- assert_equal 0.0, @dev.send(:level)
206
-
207
- @dev.adjust(-0.5)
208
- assert_equal 0.0, @dev.send(:level)
209
- end
210
- end
211
-
212
134
  ######################################################################
213
135
  class TestCm17aController < Test::Unit::TestCase
214
136
  def test_create
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.3
3
3
  specification_version: 1
4
4
  name: x10-cm17a
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.9.0
7
- date: 2004-12-30
6
+ version: 1.0.0
7
+ date: 2005-01-17
8
8
  summary: Ruby based X10 CM17A Firecracker Controller
9
9
  require_paths:
10
10
  - lib
@@ -35,6 +35,7 @@ files:
35
35
  - lib/x10.rb
36
36
  - lib/x10/cm17a.rb
37
37
  - lib/x10/cm17a_device.rb
38
+ - lib/x10/cm17a_remote.rb
38
39
  - ext/cm17a_api/MANIFEST
39
40
  - ext/cm17a_api/cm17a.h
40
41
  - ext/cm17a_api/cm17a.c