atduskgreg-rad 0.2.5 → 0.3.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,3 +1,8 @@
1
+ == 0.3.0 2008-09-22
2
+ * Pushing to rubyforge..
3
+ - added rad install arduino
4
+ - added rad test arduino
5
+
1
6
  == 0.2.5 2008-07-21
2
7
  * 1ish large post Bastille Day update:
3
8
  - added i2c capability
data/Manifest.txt CHANGED
@@ -3,8 +3,6 @@ License.txt
3
3
  Manifest.txt
4
4
  README.rdoc
5
5
  Rakefile
6
- bin/hello_world_test/Makefile
7
- bin/hello_world_test/hello_world.cpp
8
6
  bin/rad
9
7
  lib/examples/add_hysteresis.rb
10
8
  lib/examples/basic_blink.rb
@@ -103,10 +101,12 @@ lib/rad.rb
103
101
  lib/rad/README.rdoc
104
102
  lib/rad/arduino_plugin.rb
105
103
  lib/rad/arduino_sketch.rb
104
+ lib/rad/darwin_installer.rb
106
105
  lib/rad/generators/makefile/makefile.erb
107
106
  lib/rad/generators/makefile/makefile.rb
108
107
  lib/rad/hardware_library.rb
109
108
  lib/rad/init.rb
109
+ lib/rad/linux_installer.rb
110
110
  lib/rad/progressbar.rb
111
111
  lib/rad/rad_processor.rb
112
112
  lib/rad/rad_rewriter.rb
@@ -127,6 +127,8 @@ spec/models/sketch_compiler_spec.rb
127
127
  spec/models/spec_helper.rb
128
128
  spec/sim/hello_world_spec.rb
129
129
  spec/spec.opts
130
+ test/hello_world_test/Makefile
131
+ test/hello_world_test/hello_world.cpp
130
132
  test/test_array_processing.rb
131
133
  test/test_plugin_loading.rb
132
134
  test/test_translation_post_processing.rb
data/bin/rad CHANGED
@@ -14,6 +14,8 @@ require 'readline'
14
14
 
15
15
  require File.expand_path(File.dirname(__FILE__)) + "/../lib/rad/version.rb"
16
16
  require File.expand_path(File.dirname(__FILE__)) + "/../lib/rad/progressbar.rb"
17
+ require File.expand_path(File.dirname(__FILE__)) + "/../lib/rad/linux_installer.rb"
18
+ require File.expand_path(File.dirname(__FILE__)) + "/../lib/rad/darwin_installer.rb"
17
19
 
18
20
  class OptionParser #:nodoc:
19
21
 
@@ -94,28 +96,18 @@ end
94
96
 
95
97
 
96
98
  if ARGV[0] == "install"
97
- raise "Sorry. Can only install Arduino on Mac OS X. See here for Linux instructions: http://www.arduino.cc/playground/Learning/Linux" unless RUBY_PLATFORM =~ /darwin/
98
- puts "Downloading arduino-0012 for Mac from Arduino.cc"
99
- File.open("/Applications/arduino-0012.zip", "w") do |file|
100
- pbar = nil
101
- file << open("http://www.arduino.cc/files/arduino-0012-mac.zip",
102
- :content_length_proc => lambda {|t|
103
- if t && 0 < t
104
- pbar = ProgressBar.new(" Progress", t)
105
- pbar.file_transfer_mode
106
- end
107
- },
108
- :progress_proc => lambda {|s|
109
- pbar.set s if pbar
110
- }).read
111
- pbar.finish
99
+
100
+ case RUBY_PLATFORM
101
+ when /linux/
102
+ LinuxInstaller.install!
103
+ when /darwin/
104
+ DarwinInstaller.install!
105
+ else
106
+ raise "Sorry. Can only install Arduino on Mac OS X. See here for Linux instructions: http://www.arduino.cc/playground/Learning/Linux"
112
107
  end
113
- puts "Unzipping..."
114
- `cd /Applications; unzip arduino-0012.zip`
115
- `rm /Applications/arduino-0012.zip`
116
- puts "installed Arduino here: /Applications/arduino-0012"
108
+
117
109
  elsif ARGV[0] == "test"
118
- test_dir = File.expand_path(File.dirname(__FILE__)) + "/../bin/hello_world_test"
110
+ test_dir = File.expand_path(File.dirname(__FILE__)) + "/../test/hello_world_test"
119
111
  puts "Compiling hello_world.cpp to test your Arduino."
120
112
  puts "cd #{test_dir}; make depend; make;"
121
113
  `cd #{test_dir}; make depend; make;`
@@ -176,6 +168,14 @@ else
176
168
  FileUtils.mkdir_p "#{sketch_name}/vendor/libraries"
177
169
  puts "Successfully created your libraries directory."
178
170
 
171
+ FileUtils.cp_r "#{File.dirname(__FILE__)}/../lib/libraries/AF_XPort/.", "#{sketch_name}/vendor/libraries/AF_XPort"
172
+ puts "Installed AF_XPort into #{sketch_name}/vendor/libraries"
173
+ puts
174
+
175
+ FileUtils.cp_r "#{File.dirname(__FILE__)}/../lib/libraries/AFSoftSerial/.", "#{sketch_name}/vendor/libraries/AFSoftSerial"
176
+ puts "Installed AFSoftSerial into #{sketch_name}/vendor/libraries"
177
+ puts
178
+
179
179
  FileUtils.cp_r "#{File.dirname(__FILE__)}/../lib/libraries/DS1307/.", "#{sketch_name}/vendor/libraries/DS1307"
180
180
  puts "Installed DS1307 into #{sketch_name}/vendor/libraries"
181
181
  puts
@@ -24,7 +24,12 @@ class HelloArray2 < ArduinoSketch
24
24
  array "int pizzas[] = {1,2,3,4}"
25
25
  array "byte buffer[20] = {'A', 'B', 'Z', 'C', 'Y', 'D', 'W', 'E', '%', 'H', '*', '!', ')', '=', 'P', '-', '+', 'R', 'I', 'K'}"
26
26
 
27
- output_pin 14, :as => :my_lcd, :device => :pa_lcd, :rate => 19200, :clear_screen => :true
27
+ ## multidimensional arrays
28
+ array 'int @my_numbers[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}}'
29
+ array 'char* @pizzas[2][4] = {{"margherita","funghi","napoletana","prosciutto cotto"},{"veggie","pepperoni","cheese","kitchen sink"}}'
30
+
31
+
32
+ output_pin 5, :as => :my_lcd, :device => :pa_lcd, :rate => 19200, :clear_screen => :true
28
33
 
29
34
 
30
35
  def setup
@@ -56,6 +61,8 @@ class HelloArray2 < ArduinoSketch
56
61
 
57
62
  delay 3000
58
63
 
64
+
65
+
59
66
  my_lcd.clearline 1, @names[2]
60
67
  my_lcd.print " [ "
61
68
  my_lcd.print pizzas[1]
@@ -63,6 +70,32 @@ class HelloArray2 < ArduinoSketch
63
70
 
64
71
  delay 2000
65
72
 
73
+ my_lcd.clearscr "Multidimensional ?n"
74
+
75
+ 0.upto(2) do |f|
76
+ 0.upto(3) do |s|
77
+ my_lcd.print @my_numbers[f][s]
78
+ my_lcd.print ", "
79
+ delay 500
80
+ end
81
+ end
82
+
83
+ delay 1000
84
+
85
+ my_lcd.clearscr
86
+
87
+ 0.upto(1) do |f|
88
+ 0.upto(3) do |s|
89
+ my_lcd.print @pizzas[f][s]
90
+ my_lcd.print ", "
91
+ delay 500
92
+ end
93
+ end
94
+
95
+
96
+
97
+ delay 2000
98
+
66
99
  my_lcd.clearscr "Array Load?n"
67
100
  1.upto(20) do |x|
68
101
  # buffer[x] = 64 + x # we cannot set array elements yet except to initialize in declaration
@@ -204,6 +204,7 @@ class ArduinoSketch
204
204
  def array(arg)
205
205
  if arg
206
206
  arg = arg.chomp.rstrip.lstrip
207
+ arg.sub!("@","__")
207
208
  name = arg.scan(/\s*(\w*)\[\d*\]?/).first.first
208
209
  # help rad_processor do a better job with array types
209
210
  types = ["int", "long", "char*", "unsigned int", "unsigned long", "byte", "bool", "float" ]
@@ -0,0 +1,132 @@
1
+ class LinuxInstaller
2
+
3
+ # this is the thing we actually run to make something happen
4
+ def self.install!
5
+ puts "Welcome to the RAD Linux Installer!"
6
+ puts "-----------------------------------"
7
+ puts "Let's begin."
8
+ puts
9
+
10
+ check_or_warn_for_usb_driver
11
+
12
+ # of course we need rubygems
13
+ # maybe just rely on the user installing rubygems, because the ubuntu one sux
14
+ #check_or_install_package("rubygems")
15
+ #%x{gem update --system}
16
+
17
+ # we need java to make this ship float
18
+ check_or_nag_package("sun-java5-jre")
19
+
20
+ # remove a package that interferes with the arduino usb/serial driver
21
+ check_or_remove_package("brltty")
22
+
23
+ # install pre-requisites
24
+ check_or_install_package("binutils-avr")
25
+ check_or_install_package("gcc-avr")
26
+ check_or_install_package("avr-libc")
27
+ check_or_install_package("unzip")
28
+ check_or_install_package("wget")
29
+
30
+ # remove a probably out of date avrdude
31
+ check_or_remove_package("avrdude")
32
+
33
+ # install pre-requisites for avrdude if we wanted to build from source
34
+ # nah, it comes with the arduino binary
35
+ #check_or_install_package("gcc")
36
+ #check_or_install_package("bison")
37
+ #check_or_install_package("flex")
38
+ check_or_install_arduino
39
+ end
40
+
41
+ def self.check_or_install_package(package_name)
42
+ package = %x{dpkg --get-selections | grep #{package_name}}
43
+ if package.include?("\tinstall")
44
+ puts "#{package_name} installed!"
45
+ else
46
+ puts "installing #{package_name}..."
47
+ %x{apt-get install -y #{package_name}}
48
+ end
49
+ end
50
+
51
+ def self.check_or_nag_package(package_name, custom_msg = nil)
52
+ package = %x{dpkg --get-selections | grep #{package_name}}
53
+ if package.include?("\tinstall")
54
+ puts "#{package_name} installed!"
55
+ else
56
+ puts "you will need to manually install #{package_name}! use the command below."
57
+ if custom_msg
58
+ puts custom_msg
59
+ else
60
+ puts "sudo apt-get install #{package_name}"
61
+ end
62
+ exit
63
+ end
64
+ end
65
+
66
+ def self.check_or_remove_package(package_name)
67
+ package = %x{dpkg --get-selections | grep #{package_name}}
68
+
69
+ #an easier way to check for installed packages?
70
+ if package.include?("\tinstall")
71
+ puts "removing #{package_name}..."
72
+ %x{apt-get remove -y #{package_name}}
73
+ else
74
+ puts "#{package_name} previously uninstalled!"
75
+ end
76
+ end
77
+
78
+ def self.check_or_warn_for_usb_driver
79
+
80
+ # check if usb device recognized by system
81
+ puts "Please plug in your arduino to your usb port... [hit enter to continue]"
82
+ STDIN.gets # we patiently wait
83
+
84
+ usb = %x{dmesg | tail | grep "FTDI USB Serial" | grep -c "now attached"}
85
+
86
+ if usb.to_i == 0
87
+ # maybe we can be nice here and offer to download and install the driver package
88
+ puts "the system is not recognizing your usb-serial driver, please re-install"
89
+ exit
90
+ end
91
+ end
92
+
93
+ def self.check_or_install_arduino
94
+ if File.exist?("/usr/local/arduino-0012")
95
+ puts "arduino software previously installed at /usr/local/arduino-0012 !"
96
+ else
97
+ puts "installing arduino software..."
98
+ %x{cd /usr/local/; wget http://arduino.cc/files/arduino-0012-linux.tgz}
99
+ %x{tar -C /usr/local -xzf /usr/local/arduino-0012-linux.tgz}
100
+
101
+ %x{ln -s /usr/local/arduino-0012/arduino ~/Desktop/arduino}
102
+
103
+ # gotta patch it so it can run from command line or anywhere
104
+ arduino_file = File.open("/usr/local/arduino-0012/arduino") {|f| f.read}
105
+ new_doc = arduino_file.split("\n")
106
+ new_doc[1] = "cd /usr/local/arduino-0012"
107
+ File.open("/usr/local/arduino-0012/arduino", "w") {|f| f.puts new_doc }
108
+
109
+ %x{mkdir -p /usr/local/arduino-0012/hardware/tools/avr/bin}
110
+ # there is a difference from what the makefile expects to where it is
111
+ %x{ln -s /usr/bin/avr-gcc /usr/local/arduino-0012/hardware/tools/avr/bin/avr-gcc}
112
+ %x{ln -s /usr/bin/avr-g++ /usr/local/arduino-0012/hardware/tools/avr/bin/avr-g++}
113
+ %x{ln -s /usr/bin/avr-ar /usr/local/arduino-0012/hardware/tools/avr/bin/avr-ar}
114
+ %x{ln -s /usr/bin/avr-objcopy /usr/local/arduino-0012/hardware/tools/avr/bin/avr-objcopy}
115
+ %x{ln -s /usr/local/arduino-0012/hardware/tools/avrdude /usr/local/arduino-0012/hardware/tools/avr/bin/avrdude}
116
+ %x{ln -s /usr/local/arduino-0012/hardware/tools/avrdude.conf /usr/local/arduino-0012/hardware/tools/avr/etc/avrdude.conf}
117
+
118
+
119
+ puts
120
+ puts "************************************************************************"
121
+ puts "** please add /usr/local/arduino-0012 to your path! **"
122
+ puts "** you will also need to run sudo update-alternatives --config java **"
123
+ puts "** to choose java-1.50-sun as the default java **"
124
+ puts "************************************************************************"
125
+ puts
126
+ end
127
+
128
+ end
129
+ end
130
+
131
+
132
+
File without changes
File without changes
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: atduskgreg-rad
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.3.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Greg Borenstein
@@ -47,8 +47,8 @@ files:
47
47
  - Manifest.txt
48
48
  - README.rdoc
49
49
  - Rakefile
50
- - bin/hello_world_test/Makefile
51
- - bin/hello_world_test/hello_world.cpp
50
+ - test/hello_world_test/Makefile
51
+ - test/hello_world_test/hello_world.cpp
52
52
  - bin/rad
53
53
  - lib/examples/add_hysteresis.rb
54
54
  - lib/examples/basic_blink.rb
@@ -153,7 +153,8 @@ files:
153
153
  - lib/rad/init.rb
154
154
  - lib/rad/progressbar.rb
155
155
  - lib/rad/rad_processor.rb
156
- - lib/rad/rad_rewriter.rb
156
+ - lib/rad/linux_installer.rb
157
+ - lib/rad/darwin_installer.rblib/rad/rad_rewriter.rb
157
158
  - lib/rad/rad_type_checker.rb
158
159
  - lib/rad/sim/arduino_sketch.rb
159
160
  - lib/rad/sketch_compiler.rb
@@ -184,8 +185,6 @@ files:
184
185
  - website/examples/gps_reader.rb.html
185
186
  - website/examples/hello_world.rb.html
186
187
  - website/examples/serial_motor.rb.html
187
- - bin/Makefile
188
- - bin/hello_world.cpp
189
188
  has_rdoc: true
190
189
  homepage: http://github.com/atduskreg/rad
191
190
  post_install_message:
@@ -212,6 +211,6 @@ rubyforge_project: rad
212
211
  rubygems_version: 1.2.0
213
212
  signing_key:
214
213
  specification_version: 2
215
- summary: "RAD: Ruby Arduino Development - 0.2.5.5"
214
+ summary: "RAD: Ruby Arduino Development - 0.3.0.2"
216
215
  test_files: []
217
216
 
@@ -1,94 +0,0 @@
1
- require 'ruby_to_ansi_c'
2
-
3
- class RADRewriter < Rewriter
4
-
5
- def process_iter(exp)
6
- call = process exp.shift
7
- var = process exp.shift
8
- body = process exp.shift
9
-
10
- var = s(:dasgn_curr, Unique.next) if var.nil?
11
-
12
- assert_type call, :call
13
-
14
- if call[2] != :each then # TODO: fix call[n] (api)
15
- call.shift # :call
16
- lhs = call.shift
17
- method_name = call.shift
18
-
19
- case method_name
20
- when :downto then
21
- var.shift #
22
- start_value = lhs
23
- finish_value = call.pop.pop # not sure about this
24
- var_name = var.shift
25
- body.find_and_replace_all(:dvar, :lvar)
26
- result = s(:dummy,
27
- s(:lasgn, var_name, start_value),
28
- s(:while,
29
- s(:call, s(:lvar, var_name), :>=,
30
- s(:arglist, finish_value)),
31
- s(:block,
32
- body,
33
- s(:lasgn, var_name,
34
- s(:call, s(:lvar, var_name), :-,
35
- s(:arglist, s(:lit, 1))))), true))
36
- when :upto then
37
- # REFACTOR: completely duped from above and direction changed
38
- var.shift #
39
- start_value = lhs
40
- finish_value = call.pop.pop # not sure about this
41
- var_name = var.shift
42
- body.find_and_replace_all(:dvar, :lvar)
43
- result = s(:dummy,
44
- s(:lasgn, var_name, start_value),
45
- s(:while,
46
- s(:call, s(:lvar, var_name), :<=,
47
- s(:arglist, finish_value)),
48
- s(:block,
49
- body,
50
- s(:lasgn, var_name,
51
- s(:call, s(:lvar, var_name), :+,
52
- s(:arglist, s(:lit, 1))))), true))
53
- when :times then
54
- # REFACTOR: mostly duped from above and gave default start value of 0
55
- # and a finish value that was the start value above
56
- var.shift
57
- start_value = s(:lit, 0)
58
- finish_value = lhs
59
- var_name = var.shift
60
- body.find_and_replace_all(:dvar, :lvar)
61
- result = s(:dummy,
62
- s(:lasgn, var_name, start_value),
63
- s(:while,
64
- s(:call, s(:lvar, var_name), :<,
65
- s(:arglist, finish_value)),
66
- s(:block,
67
- body,
68
- s(:lasgn, var_name,
69
- s(:call, s(:lvar, var_name), :+,
70
- s(:arglist, s(:lit, 1))))), true))
71
- when :define_method then
72
- # BEFORE: [:iter, [:call, nil, :define_method, [:array, [:lit, :bmethod_added]]], [:dasgn_curr, :x], [:call, [:dvar, :x], :+, [:array, [:lit, 1]]]]
73
- # we want to get it rewritten for the scope/block context, so:
74
- # - throw call away
75
- # - rewrite to args
76
- # - plop body into a scope
77
- # AFTER: [:block, [:args, :x], [:call, [:lvar, :x], :+, [:arglist, [:lit, 1]]]]
78
- var.find_and_replace_all(:dasgn_curr, :args)
79
- body.find_and_replace_all(:dvar, :lvar)
80
- result = s(:block, var, body)
81
- else
82
- # HACK we butchered call up top
83
- result = s(:iter, s(:call, lhs, method_name, call.shift), var, body)
84
- end
85
- else
86
- if var.nil? then
87
- var = s(:lvar, Unique.next)
88
- end
89
-
90
- s(:iter, call, var, body)
91
- end
92
- end
93
-
94
- end