<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>lib/examples/hello_xbee.rb</filename>
    </added>
    <added>
      <filename>lib/examples/twitter.rb</filename>
    </added>
    <added>
      <filename>lib/libraries/AFSoftSerial/AFSoftSerial.cpp</filename>
    </added>
    <added>
      <filename>lib/libraries/AFSoftSerial/AFSoftSerial.h</filename>
    </added>
    <added>
      <filename>lib/libraries/AFSoftSerial/keywords.txt</filename>
    </added>
    <added>
      <filename>lib/libraries/AF_XPort/AF_XPort.cpp</filename>
    </added>
    <added>
      <filename>lib/libraries/AF_XPort/AF_XPort.h</filename>
    </added>
    <added>
      <filename>lib/plugins/twitter_connect.rb</filename>
    </added>
    <added>
      <filename>lib/rad/README.rdoc</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -23,7 +23,7 @@ class OptionParser #:nodoc:
                 &quot;physical_reset&quot;   =&gt; false
                 },
                 &quot;software&quot; =&gt; {
-                  &quot;arduino_root&quot;   =&gt; &quot;/Applications/arduino-0011&quot;
+                  &quot;arduino_root&quot;   =&gt; &quot;/Applications/arduino-0012&quot;
                  }
                }
     
@@ -109,6 +109,15 @@ puts
 
 FileUtils.mkdir_p &quot;#{sketch_name}/vendor/libraries&quot;
 puts &quot;Successfully created your libraries directory.&quot;
+puts
+
+FileUtils.cp_r &quot;#{File.dirname(__FILE__)}/../lib/libraries/AF_XPort/.&quot;, &quot;#{sketch_name}/vendor/libraries/AF_XPort&quot;
+puts &quot;Installed AF_XPort into #{sketch_name}/vendor/libraries&quot;
+puts
+
+FileUtils.cp_r &quot;#{File.dirname(__FILE__)}/../lib/libraries/AFSoftSerial/.&quot;, &quot;#{sketch_name}/vendor/libraries/AFSoftSerial&quot;
+puts &quot;Installed AFSoftSerial into #{sketch_name}/vendor/libraries&quot;
+puts
 
 FileUtils.cp_r &quot;#{File.dirname(__FILE__)}/../lib/libraries/DS1307/.&quot;, &quot;#{sketch_name}/vendor/libraries/DS1307&quot;
 puts &quot;Installed DS1307 into #{sketch_name}/vendor/libraries&quot;
@@ -174,6 +183,7 @@ puts
 
 FileUtils.mkdir_p &quot;#{sketch_name}/vendor/plugins&quot;
 puts &quot;Successfully created your plugins directory.&quot;
+puts
 
 FileUtils.cp_r &quot;#{File.dirname(__FILE__)}/../lib/plugins/.&quot;, &quot;#{sketch_name}/vendor/plugins&quot;
 puts &quot;Installed Default plugins into #{sketch_name}/vendor/plugins&quot;
@@ -183,6 +193,14 @@ puts
 
 FileUtils.mkdir_p &quot;#{sketch_name}/#{sketch_name}&quot;
 puts &quot;Successfully created your default sketch directory.&quot;
+puts
+
+# Copy the README how_to to the sketch directory
+
+FileUtils.cp_r &quot;#{File.dirname(__FILE__)}/../lib/rad/README.rdoc&quot;, &quot;#{sketch_name}&quot;
+puts &quot;Copied README how_to into #{sketch_name}&quot;
+puts
+
 
 # Build sketch files, etc.:  
 
@@ -226,4 +244,10 @@ end
 puts &quot;Added #{sketch_name}/config/software.yml&quot;
 
 puts
-puts &quot;Run 'rake -T' inside your sketch dir to learn how to compile and upload it.&quot;
\ No newline at end of file
+puts &quot;Run 'rake -T' inside your sketch dir to learn how to compile and upload it.&quot;
+
+puts &quot;***************************************************&quot;
+puts &quot;***     Please note: This version supports      ***&quot;
+puts &quot;***            Arduino 12 only!                 ***&quot;
+puts &quot;***   run rad install arduino to upgrade        ***&quot;
+puts &quot;***************************************************&quot;
\ No newline at end of file</diff>
      <filename>bin/rad</filename>
    </modified>
    <modified>
      <diff>@@ -193,100 +193,69 @@ class ArduinoSketch
 
   end
   
-  # Setup variables outside of the loop. Does some magic based on type of arguments. Subject to renaming. Use with caution.
-  def vars(opts={})
-    opts.each do |k,v|
-      if v.class == Symbol
-       @declarations &lt;&lt; &quot;#{v} _#{k};&quot;
-       @accessors &lt;&lt; &lt;&lt;-CODE
-        #{v} #{k}(){
-        \treturn _#{k};
-        }
-       CODE
-      else
-        type = case v
-        when Integer
-          &quot;int&quot;
-        when String
-          &quot;char*&quot;
-        when TrueClass
-          &quot;bool&quot;
-        when FalseClass
-          &quot;bool&quot;
-        end
 
-        @declarations &lt;&lt; &quot;#{type} _#{k} = #{v};&quot;
-        @accessors &lt;&lt; &lt;&lt;-CODE
-          #{type} #{k}(){
-          \treturn _#{k};
-          }
-        CODE
-      end
+  
+  # array &quot;char buffer[32]&quot;
+  # result: char buffer[32];
+  # array &quot;char buffer[32]&quot;
+  # result: char buffer[32];
+  # todo 
+  # need to feed array external array identifiers to rtc if they are in plugins or libraries, (not so sure about this will do more testing)
+  def array(arg)
+    if arg
+        arg = arg.chomp.rstrip.lstrip
+        name = arg.scan(/\s*(\w*)\[\d*\]?/).first.first
+        # help rad_processor do a better job with array types
+        types = [&quot;int&quot;, &quot;long&quot;, &quot;char*&quot;, &quot;unsigned int&quot;, &quot;unsigned long&quot;, &quot;byte&quot;, &quot;bool&quot;, &quot;float&quot; ]
+        types.each_with_index do |type, i|
+          @type = types[i] if /#{type}/ =~ arg
+        end
+        raise ArgumentError, &quot;type not currently supported.. got: #{arg}.  Currently supporting #{types.join(&quot;, &quot;)}&quot; unless @type
+
+        arg = &quot;#{arg};&quot; unless arg[-1,1] == &quot;;&quot;
+        $array_types[name] = @type
+        @type = nil
+        $external_var_identifiers &lt;&lt; name unless $external_var_identifiers.include?(name)
+        # add array_name declaration
+        $external_array_vars &lt;&lt; arg unless $external_array_vars.include?(arg)
     end
   end
   
-    
-    # array &quot;char buffer[32]&quot;
-    # result: char buffer[32];
-    # array &quot;char buffer[32]&quot;
-    # result: char buffer[32];
-    # todo 
-    # need to feed array external array identifiers to rtc if they are in plugins or libraries, (not so sure about this will do more testing)
-    def array(arg)
-      if arg
-          arg = arg.chomp.rstrip.lstrip
-          name = arg.scan(/\s*(\w*)\[\d*\]?/).first.first
-          # help rad_processor do a better job with array types
-          types = [&quot;int&quot;, &quot;long&quot;, &quot;char*&quot;, &quot;unsigned int&quot;, &quot;unsigned long&quot;, &quot;byte&quot;, &quot;bool&quot;, &quot;float&quot; ]
-          types.each_with_index do |type, i|
-            @type = types[i] if /#{type}/ =~ arg
-          end
-          raise ArgumentError, &quot;type not currently supported.. got: #{arg}.  Currently supporting #{types.join(&quot;, &quot;)}&quot; unless @type
-
-          arg = &quot;#{arg};&quot; unless arg[-1,1] == &quot;;&quot;
-          $array_types[name] = @type
-          @type = nil
-          $external_var_identifiers &lt;&lt; name unless $external_var_identifiers.include?(name)
-          # add array_name declaration
-          $external_array_vars &lt;&lt; arg unless $external_array_vars.include?(arg)
-      end
-    end
-    
-    # define &quot;DS1307_SEC 0&quot;
-    # result: #define DS1307_SEC 0
-    # note we send the constant identifiers and type to our rad_type_checker
-    # however, it only knows about long, float, str....
-    # so we don't send ints ...yet..
-    # need more testing
-    def define(arg)
-      if arg
-          arg = arg.chomp.rstrip.lstrip
-          name = arg.split(&quot; &quot;).first
-          value = arg.gsub!(&quot;#{name} &quot;,&quot;&quot;)
-          # negative
-          if value =~ /^-(\d|x)*$/ 
-             type = &quot;long&quot;
-           # negative float
-           elsif value =~ /^-(\d|\.|x)*$/ 
-             type = &quot;float&quot; 
-           elsif value =~ /[a-zA-Z]/
-             type = &quot;str&quot;
-             value = &quot;\&quot;#{value}\&quot;&quot;
-           elsif value !~ /(\.|x)/
-             type = &quot;long&quot;
-           elsif value =~ /(\d*\.\d*)/ # and no 
-             type = &quot;float&quot;
-           elsif value =~ /0x\d\d/
-             type = &quot;byte&quot;
-           else 
-             raise ArgumentError, &quot;opps, could not determine the define type, got #{value}&quot;
-           end
-          $define_types[name] = type
-          arg = &quot;#define #{name} #{value}&quot;
-          $defines &lt;&lt; arg
-          dummy_for_testing = arg, type
-      end
+  # define &quot;DS1307_SEC 0&quot;
+  # result: #define DS1307_SEC 0
+  # note we send the constant identifiers and type to our rad_type_checker
+  # however, it only knows about long, float, str....
+  # so we don't send ints ...yet..
+  # need more testing
+  def define(arg)
+    if arg
+        arg = arg.chomp.rstrip.lstrip
+        name = arg.split(&quot; &quot;).first
+        value = arg.gsub!(&quot;#{name} &quot;,&quot;&quot;)
+        # negative
+        if value =~ /^-(\d|x)*$/ 
+           type = &quot;long&quot;
+         # negative float
+         elsif value =~ /^-(\d|\.|x)*$/ 
+           type = &quot;float&quot; 
+         elsif value =~ /[a-zA-Z]/
+           type = &quot;str&quot;
+           value = &quot;\&quot;#{value}\&quot;&quot;
+         elsif value !~ /(\.|x)/
+           type = &quot;long&quot;
+         elsif value =~ /(\d*\.\d*)/ # and no 
+           type = &quot;float&quot;
+         elsif value =~ /0x\d\d/
+           type = &quot;byte&quot;
+         else 
+           raise ArgumentError, &quot;opps, could not determine the define type, got #{value}&quot;
+         end
+        $define_types[name] = type
+        arg = &quot;#define #{name} #{value}&quot;
+        $defines &lt;&lt; arg
+        dummy_for_testing = arg, type
     end
+  end
   
   # Configure a single pin for output and setup a method to refer to that pin, i.e.:
   #
@@ -308,9 +277,6 @@ class ArduinoSketch
         when :servo
           servo_setup(num, opts)
           return # don't use declarations, accessor, signatures below
-        when :lcd || :LCD
-          lcd_setup(num, opts)
-          return 
         when :pa_lcd || :pa_LCD
           pa_lcd_setup(num, opts)
           return 
@@ -338,8 +304,11 @@ class ArduinoSketch
         when :onewire
           one_wire(num, opts)
           return #
+        when :ethernet
+          ethernet(num, opts)
+          return #
         else
-          raise ArgumentError, &quot;today's device choices are: :servo, :original_servo_setup, :pa_lcd, :sf_lcd, :freq_out,:i2c, :i2c_eeprom, :i2c_ds1307, and :i2c_blinkm  got #{opts[:device]}&quot;
+          raise ArgumentError, &quot;today's device choices are: :servo, :pa_lcd, :sf_lcd, :freq_out,:i2c, :i2c_eeprom, :i2c_ds1307, and :i2c_blinkm  got #{opts[:device]}&quot;
         end
       end
       
@@ -366,68 +335,6 @@ class ArduinoSketch
     end
   end
   
-  # Like ArduinoSketch#output_pin but configure more than one output pin simultaneously. Takes an array of pin numbers. 
-  def output_pins(nums)
-    ar = Array(nums)
-    ar.each {|n| output_pin(n)} 
-  end
-  
-  # use the servo library
-  def servo_setup(num, opts)
-    if opts[:position]
-      raise ArgumentError, &quot;position must be an integer from 0 to 360, got #{opts[:position].class}&quot; unless opts[:position].is_a?(Fixnum)
-      raise ArgumentError, &quot;position must be an integer from 0 to 360---, got #{opts[:position]}&quot; if opts[:position] &lt; 0 || opts[:position] &gt; 360
-    end
-    servo(num, opts)
-    # move this to better place ... 
-    # should probably go along with servo code into plugin
-    @@servo_dh ||= FALSE
-    if (@@servo_dh == FALSE)	# on second instance this stuff can't be repeated - BBR
-      @@servo_dh = TRUE
-      @declarations &lt;&lt; &quot;void servo_refresh(void);&quot;
-      helper_methods = []
-      helper_methods &lt;&lt; &quot;void servo_refresh(void)&quot;
-      helper_methods &lt;&lt; &quot;{&quot;
-      helper_methods &lt;&lt;  &quot;\tServo::refresh();&quot;
-      helper_methods &lt;&lt; &quot;}&quot;
-      @helper_methods += &quot;\n#{helper_methods.join(&quot;\n&quot;)}&quot;
-    end
-  end
-  
-  ## this won't work at all... no pins
-  # need help
-  def lcd_setup(num, opts)
-    # move to plugin and load plugin
-    # what's the default rate?
-    opts[:rate] ||= 9600
-    rate = opts[:rate] ? opts[:rate] : 9600
-    swser_LCD(num, opts)
-  end
-  
-  # use the pa lcd library
-  def pa_lcd_setup(num, opts)
-    if opts[:geometry]
-      raise ArgumentError, &quot;can only define pin from Fixnum, got #{opts[:geometry]}&quot; unless opts[:geometry].is_a?(Fixnum)
-      raise ArgumentError, &quot;pa_lcd geometry must be 216, 220, 224, 240, 416, 420, got #{opts[:geometry]}&quot; unless opts[:geometry].to_s =~ /(216|220|224|240|416|420)/
-    end
-    # move to plugin and load plugin
-    # what's the default?
-     opts[:rate] ||= 9600
-    rate = opts[:rate] ? opts[:rate] : 9600
-    swser_LCDpa(num, opts)
-  end
-  
-  # use the sf (sparkfun) library
-  def sf_lcd_setup(num, opts)
-    if opts[:geometry]
-      raise ArgumentError, &quot;can only define pin from Fixnum, got #{opts[:geometry]}&quot; unless opts[:geometry].is_a?(Fixnum)
-      raise ArgumentError, &quot;sf_lcd geometry must be 216, 220, 416, 420, got #{opts[:geometry]}&quot; unless opts[:geometry].to_s =~ /(216|220|416|420)/
-    end
-    # move to plugin and load plugin
-     opts[:rate] ||= 9600
-    rate = opts[:rate] ? opts[:rate] : 9600
-    swser_LCDsf(num, opts)
-  end
   
   # Configure a single pin for input and setup a method to refer to that pin, i.e.:
   #
@@ -523,477 +430,6 @@ class ArduinoSketch
   end
 
   
-  # Treat a pair of digital I/O pins as a serial line. See: http://www.arduino.cc/en/Tutorial/SoftwareSerial
-  def software_serial(rx, tx, opts={})
-    raise ArgumentError, &quot;can only define rx from Fixnum, got #{rx.class}&quot; unless rx.is_a?(Fixnum)
-    raise ArgumentError, &quot;can only define tx from Fixnum, got #{tx.class}&quot; unless tx.is_a?(Fixnum)
-    
-    output_pin(tx)
-    input_pin(rx)
-    
-    rate = opts[:rate] ? opts[:rate] : 9600
- 		if opts[:as]
- 			@declarations &lt;&lt; &quot;SoftwareSerial _#{opts[ :as ]} = SoftwareSerial(#{rx}, #{tx});&quot;
- 			accessor = []
- 			accessor &lt;&lt; &quot;SoftwareSerial&amp; #{opts[ :as ]}() {&quot;
- 			accessor &lt;&lt; &quot;\treturn _#{opts[ :as ]};&quot;
- 			accessor &lt;&lt; &quot;}&quot;
- 			@@swser_inc ||= FALSE
- 			if (@@swser_inc == FALSE) # on second instance this stuff can't be repeated
- 				@@swser_inc = TRUE
-	 			accessor &lt;&lt; &quot;int read(SoftwareSerial&amp; s) {&quot;
- 				accessor &lt;&lt; &quot;\treturn s.read();&quot;
- 				accessor &lt;&lt; &quot;}&quot;
- 				accessor &lt;&lt; &quot;void println( SoftwareSerial&amp; s, char* str ) {&quot;
- 				accessor &lt;&lt; &quot;\treturn s.println( str );&quot;
- 				accessor &lt;&lt; &quot;}&quot;
- 				accessor &lt;&lt; &quot;void print( SoftwareSerial&amp; s, char* str ) {&quot;
- 				accessor &lt;&lt; &quot;\treturn s.print( str );&quot;
- 				accessor &lt;&lt; &quot;}&quot;
- 				accessor &lt;&lt; &quot;void println( SoftwareSerial&amp; s, int i ) {&quot;
- 				accessor &lt;&lt; &quot;\treturn s.println( i );&quot;
- 				accessor &lt;&lt; &quot;}&quot;
- 				accessor &lt;&lt; &quot;void print( SoftwareSerial&amp; s, int i ) {&quot;
- 				accessor &lt;&lt; &quot;\treturn s.print( i );&quot;
- 				accessor &lt;&lt; &quot;}&quot;
- 			end
- 			@accessors &lt;&lt; accessor.join( &quot;\n&quot; )
- 			
- 			@signatures &lt;&lt; &quot;SoftwareSerial&amp; #{opts[ :as ]}();&quot;
- 
- 			@other_setup &lt;&lt; &quot;\t_#{opts[ :as ]}.begin(#{rate});&quot;
- 		end
- 	end 	
- 	
- 	def swser_LCDpa(tx, opts={})
-    raise ArgumentError, &quot;can only define tx from Fixnum, got #{tx.class}&quot; unless tx.is_a?(Fixnum)
-
-    rate = opts[:rate] ? opts[:rate] : 9600
-    geometry = opts[:geometry] ? opts[:geometry] : 0
- 		if opts[:as] 
- 			@declarations &lt;&lt; &quot;SWSerLCDpa _#{opts[ :as ]} = SWSerLCDpa(#{tx}, #{geometry});&quot;
- 			accessor = []
- 			$load_libraries &lt;&lt; &quot;SWSerLCDpa&quot;
- 			accessor &lt;&lt; &quot;SWSerLCDpa&amp; #{opts[ :as ]}() {&quot;
- 			accessor &lt;&lt; &quot;\treturn _#{opts[ :as ]};&quot;
- 			accessor &lt;&lt; &quot;}&quot;
- 			@@slcdpa_inc ||= FALSE
- 			if (@@slcdpa_inc == FALSE)	# on second instance this stuff can't be repeated - BBR
- 				@@slcdpa_inc = TRUE
-				  # ------------------- print generics -------------------------------
- 	 			  accessor &lt;&lt; &quot;void print( SWSerLCDpa&amp; s, uint8_t b ) {&quot;
-	  			accessor &lt;&lt; &quot;\treturn s.print( b );&quot;
- 	 			  accessor &lt;&lt; &quot;}&quot;
- 	 			  accessor &lt;&lt; &quot;void print( SWSerLCDpa&amp; s, const char *str ) {&quot;
-  				accessor &lt;&lt; &quot;\treturn s.print( str );&quot;
-  				accessor &lt;&lt; &quot;}&quot;
-  				accessor &lt;&lt; &quot;void print( SWSerLCDpa&amp; s, char c ) {&quot;
-  				accessor &lt;&lt; &quot;\treturn s.print( c );&quot;
-  				accessor &lt;&lt; &quot;}&quot;
-  				accessor &lt;&lt; &quot;void print( SWSerLCDpa&amp; s, int i ) {&quot;
-  				accessor &lt;&lt; &quot;\treturn s.print( i );&quot;
-  				accessor &lt;&lt; &quot;}&quot;
-  				accessor &lt;&lt; &quot;void print( SWSerLCDpa&amp; s, unsigned int i ) {&quot;
-  				accessor &lt;&lt; &quot;\treturn s.print( i );&quot;
-  				accessor &lt;&lt; &quot;}&quot;
-  				accessor &lt;&lt; &quot;void print( SWSerLCDpa&amp; s, long i ) {&quot;
-  				accessor &lt;&lt; &quot;\treturn s.print( i );&quot;
-  				accessor &lt;&lt; &quot;}&quot;
-  				accessor &lt;&lt; &quot;void print( SWSerLCDpa&amp; s, unsigned long i ) {&quot;
-  				accessor &lt;&lt; &quot;\treturn s.print( i );&quot;
-  				accessor &lt;&lt; &quot;}&quot;
-  				accessor &lt;&lt; &quot;void print( SWSerLCDpa&amp; s, long i, int b ) {&quot;
-  				accessor &lt;&lt; &quot;\treturn s.print( i, b );&quot;
-  				accessor &lt;&lt; &quot;}&quot;
-          # ------------------ PA-LCD specific functions ---------------------------------
-   				accessor &lt;&lt; &quot;void clearscr(SWSerLCDpa&amp; s) {&quot;
- 	 			  accessor &lt;&lt; &quot;\treturn s.clearscr();&quot;
-  				accessor &lt;&lt; &quot;}&quot;
-  				accessor &lt;&lt; &quot;void clearscr(SWSerLCDpa&amp; s, const char *str) {&quot;
- 	 			  accessor &lt;&lt; &quot;\treturn s.clearscr(str);&quot;
-  				accessor &lt;&lt; &quot;}&quot;
-  				accessor &lt;&lt; &quot;void clearscr(SWSerLCDpa&amp; s, int n) {&quot;
- 	 			  accessor &lt;&lt; &quot;\treturn s.clearscr(n);&quot;
-  				accessor &lt;&lt; &quot;}&quot;
-  				accessor &lt;&lt; &quot;void clearscr(SWSerLCDpa&amp; s, long n, int b) {&quot;
- 	 			  accessor &lt;&lt; &quot;\treturn s.clearscr(n, b);&quot;
-  				accessor &lt;&lt; &quot;}&quot;
-   				accessor &lt;&lt; &quot;void clearline(SWSerLCDpa&amp; s, int line) {&quot;
- 	 			  accessor &lt;&lt; &quot;\treturn s.clearline( line );&quot;
-  				accessor &lt;&lt; &quot;}&quot;
-   				accessor &lt;&lt; &quot;void clearline(SWSerLCDpa&amp; s, int line, const char *str) {&quot;
- 	 			  accessor &lt;&lt; &quot;\treturn s.clearline( line, str );&quot;
-  				accessor &lt;&lt; &quot;}&quot;
-   				accessor &lt;&lt; &quot;void clearline(SWSerLCDpa&amp; s, int line, int n) {&quot;
- 	 			  accessor &lt;&lt; &quot;\treturn s.clearline( line, n );&quot;
-  				accessor &lt;&lt; &quot;}&quot;
-   				accessor &lt;&lt; &quot;void clearline(SWSerLCDpa&amp; s, int line, long n,  int b) {&quot;
- 	 			  accessor &lt;&lt; &quot;\treturn s.clearline( line, n, b );&quot;
-  				accessor &lt;&lt; &quot;}&quot;
-  				accessor &lt;&lt; &quot;void home( SWSerLCDpa&amp; s) {&quot;
-  				accessor &lt;&lt; &quot;\treturn s.home();&quot;
-  				accessor &lt;&lt; &quot;}&quot;
-  				accessor &lt;&lt; &quot;void home( SWSerLCDpa&amp; s, const char *str) {&quot;
-  				accessor &lt;&lt; &quot;\treturn s.home( str );&quot;
-    			accessor &lt;&lt; &quot;}&quot;
-  				accessor &lt;&lt; &quot;void home( SWSerLCDpa&amp; s, int n) {&quot;
-  				accessor &lt;&lt; &quot;\treturn s.home( n );&quot;
-    			accessor &lt;&lt; &quot;}&quot;
-  				accessor &lt;&lt; &quot;void home( SWSerLCDpa&amp; s, long n, int b) {&quot;
-  				accessor &lt;&lt; &quot;\treturn s.home( n, b );&quot;
-    			accessor &lt;&lt; &quot;}&quot;
-  				accessor &lt;&lt; &quot;void setxy( SWSerLCDpa&amp; s, int x, int y) {&quot;
-  				accessor &lt;&lt; &quot;\treturn s.setxy( x, y );&quot;
-  				accessor &lt;&lt; &quot;}&quot;
-  				accessor &lt;&lt; &quot;void setxy( SWSerLCDpa&amp; s, int x, int y, const char *str) {&quot;
-  				accessor &lt;&lt; &quot;\treturn s.setxy( x, y, str );&quot;
-    			accessor &lt;&lt; &quot;}&quot;
-  				accessor &lt;&lt; &quot;void setxy( SWSerLCDpa&amp; s, int x, int y, long n, int b) {&quot;
-  				accessor &lt;&lt; &quot;\treturn s.setxy( x, y, n, b );&quot;
-    			accessor &lt;&lt; &quot;}&quot;
-  				accessor &lt;&lt; &quot;void setxy( SWSerLCDpa&amp; s, int x, int y, int n) {&quot;
-  				accessor &lt;&lt; &quot;\treturn s.setxy( x, y, n );&quot;
-    			accessor &lt;&lt; &quot;}&quot;
-  				accessor &lt;&lt; &quot;void setgeo( SWSerLCDpa&amp; s, int g) {&quot;
-  				accessor &lt;&lt; &quot;\treturn s.setgeo( g );&quot;
-  				accessor &lt;&lt; &quot;}&quot;
-  				accessor &lt;&lt; &quot;void setintensity( SWSerLCDpa&amp; s, int i ) {&quot;
-  				accessor &lt;&lt; &quot;\treturn s.setintensity( i );&quot;
-  				accessor &lt;&lt; &quot;}&quot;
-  				accessor &lt;&lt; &quot;void intoBignum(SWSerLCDpa&amp; s) {&quot;
-  				accessor &lt;&lt; &quot;\treturn s.intoBignum();&quot;
-  				accessor &lt;&lt; &quot;}&quot;
-  				accessor &lt;&lt; &quot;void outofBignum(SWSerLCDpa&amp; s) {&quot;
-  				accessor &lt;&lt; &quot;\treturn s.outofBignum();&quot;
-  				accessor &lt;&lt; &quot;}&quot;
- 			end
- 			
- 			@accessors &lt;&lt; accessor.join( &quot;\n&quot; )
- 			
- 			@signatures &lt;&lt; &quot;SWSerLCDpa&amp; #{opts[ :as ]}();&quot;
- 
- 			@other_setup &lt;&lt; &quot;\t_#{opts[ :as ]}.begin(#{rate});&quot;
- 			@other_setup &lt;&lt; &quot;\t_#{opts[ :as ]}.clearscr();&quot;     if :clear_screen == :true
- 			
- 		end
- 	end 	
-
-
-
- 	def swser_LCDsf(tx, opts={})
-    raise ArgumentError, &quot;can only define tx from Fixnum, got #{tx.class}&quot; unless tx.is_a?(Fixnum)    
-
-    rate = opts[:rate] ? opts[:rate] : 9600
-    geometry = opts[:geometry] ? opts[:geometry] : 0
- 		if opts[:as] 
- 			@declarations &lt;&lt; &quot;SWSerLCDsf _#{opts[ :as ]} = SWSerLCDsf(#{tx}, #{geometry});&quot;
- 			accessor = []
- 			$load_libraries &lt;&lt; &quot;SWSerLCDsf&quot;
- 			accessor &lt;&lt; &quot;SWSerLCDsf&amp; #{opts[ :as ]}() {&quot;
- 			accessor &lt;&lt; &quot;\treturn _#{opts[ :as ]};&quot;
- 			accessor &lt;&lt; &quot;}&quot;
- 			@@slcdsf_inc ||= FALSE # assign only if nil
- 			if (@@slcdsf_inc == FALSE)	# on second instance this stuff can't be repeated - BBR
- 				@@slcdsf_inc = TRUE
- 	 			accessor &lt;&lt; &quot;void print( SWSerLCDsf&amp; s, uint8_t b ) {&quot;
-	  			accessor &lt;&lt; &quot;\treturn s.print( b );&quot;
- 	 			  accessor &lt;&lt; &quot;}&quot;
- 	 			  accessor &lt;&lt; &quot;void print( SWSerLCDsf&amp; s, const char *str ) {&quot;
-  				accessor &lt;&lt; &quot;\treturn s.print( str );&quot;
-  				accessor &lt;&lt; &quot;}&quot;
-  				accessor &lt;&lt; &quot;void print( SWSerLCDsf&amp; s, char c ) {&quot;
-  				accessor &lt;&lt; &quot;\treturn s.print( c );&quot;
-  				accessor &lt;&lt; &quot;}&quot;
-  				accessor &lt;&lt; &quot;void print( SWSerLCDsf&amp; s, int i ) {&quot;
-  				accessor &lt;&lt; &quot;\treturn s.print( i );&quot;
-  				accessor &lt;&lt; &quot;}&quot;
-  				accessor &lt;&lt; &quot;void print( SWSerLCDsf&amp; s, unsigned int i ) {&quot;
-  				accessor &lt;&lt; &quot;\treturn s.print( i );&quot;
-  				accessor &lt;&lt; &quot;}&quot;
-  				accessor &lt;&lt; &quot;void print( SWSerLCDsf&amp; s, long i ) {&quot;
-  				accessor &lt;&lt; &quot;\treturn s.print( i );&quot;
-  				accessor &lt;&lt; &quot;}&quot;
-  				accessor &lt;&lt; &quot;void print( SWSerLCDsf&amp; s, unsigned long i ) {&quot;
-  				accessor &lt;&lt; &quot;\treturn s.print( i );&quot;
-  				accessor &lt;&lt; &quot;}&quot;
-  				accessor &lt;&lt; &quot;void print( SWSerLCDsf&amp; s, long i, int b ) {&quot;
-  				accessor &lt;&lt; &quot;\treturn s.print( i, b );&quot;
-  				accessor &lt;&lt; &quot;}&quot;
-          # ------------------ Spark Fun Specific  Functions ---------------------------------
-   				accessor &lt;&lt; &quot;void clearscr(SWSerLCDsf&amp; s) {&quot;
- 	 			  accessor &lt;&lt; &quot;\treturn s.clearscr();&quot;
-  				accessor &lt;&lt; &quot;}&quot;
-  				accessor &lt;&lt; &quot;void clearscr(SWSerLCDsf&amp; s, const char *str) {&quot;
- 	 			  accessor &lt;&lt; &quot;\treturn s.clearscr(str);&quot;
-  				accessor &lt;&lt; &quot;}&quot;
-  				accessor &lt;&lt; &quot;void clearscr(SWSerLCDsf&amp; s, int n) {&quot;
- 	 			  accessor &lt;&lt; &quot;\treturn s.clearscr(n);&quot;
-  				accessor &lt;&lt; &quot;}&quot;
-  				accessor &lt;&lt; &quot;void clearscr(SWSerLCDsf&amp; s, long n, int b) {&quot;
- 	 			  accessor &lt;&lt; &quot;\treturn s.clearscr(n, b);&quot;
-  				accessor &lt;&lt; &quot;}&quot;
-  				accessor &lt;&lt; &quot;void home( SWSerLCDsf&amp; s) {&quot;
-  				accessor &lt;&lt; &quot;\treturn s.home();&quot;
-  				accessor &lt;&lt; &quot;}&quot;
-  				accessor &lt;&lt; &quot;void home( SWSerLCDsf&amp; s, const char *str) {&quot;
-  				accessor &lt;&lt; &quot;\treturn s.home( str );&quot;
-    			accessor &lt;&lt; &quot;}&quot;
-  				accessor &lt;&lt; &quot;void home( SWSerLCDsf&amp; s, int n) {&quot;
-  				accessor &lt;&lt; &quot;\treturn s.home( n );&quot;
-    			accessor &lt;&lt; &quot;}&quot;
-  				accessor &lt;&lt; &quot;void home( SWSerLCDsf&amp; s, long n, int b) {&quot;
-  				accessor &lt;&lt; &quot;\treturn s.home( n, b );&quot;
-    			accessor &lt;&lt; &quot;}&quot;
-  				accessor &lt;&lt; &quot;void setxy( SWSerLCDsf&amp; s, int x, int y) {&quot;
-  				accessor &lt;&lt; &quot;\treturn s.setxy( x, y );&quot;
-  				accessor &lt;&lt; &quot;}&quot;
-  				accessor &lt;&lt; &quot;void setxy( SWSerLCDsf&amp; s, int x, int y, const char *str) {&quot;
-  				accessor &lt;&lt; &quot;\treturn s.setxy( x, y, str );&quot;
-  				accessor &lt;&lt; &quot;}&quot;
-  				accessor &lt;&lt; &quot;void setxy( SWSerLCDsf&amp; s, int x, int y, int n) {&quot;
-  				accessor &lt;&lt; &quot;\treturn s.setxy( x, y, n );&quot;
-  				accessor &lt;&lt; &quot;}&quot;
-  				accessor &lt;&lt; &quot;void setxy( SWSerLCDsf&amp; s, int x, int y, long n, int b) {&quot;
-  				accessor &lt;&lt; &quot;\treturn s.setxy( x, y, n, b );&quot;
-    			accessor &lt;&lt; &quot;}&quot;
-  				accessor &lt;&lt; &quot;void setgeo( SWSerLCDsf&amp; s, int g) {&quot;
-  				accessor &lt;&lt; &quot;\treturn s.setgeo( g );&quot;
-  				accessor &lt;&lt; &quot;}&quot;
-  				accessor &lt;&lt; &quot;void setintensity( SWSerLCDsf&amp; s, int i ) {&quot;
-  				accessor &lt;&lt; &quot;\treturn s.setintensity( i );&quot;
-  				accessor &lt;&lt; &quot;}&quot;
-  				accessor &lt;&lt; &quot;void setcmd( SWSerLCDsf&amp; s, uint8_t a, uint8_t b) {&quot;
-  				accessor &lt;&lt; &quot;\treturn s.setcmd( a, b );&quot;
-  				accessor &lt;&lt; &quot;}&quot;
-  			end
- 			@accessors &lt;&lt; accessor.join( &quot;\n&quot; )
- 			
- 			@signatures &lt;&lt; &quot;SWSerLCDsf&amp; #{opts[ :as ]}();&quot;
- 
- 			@other_setup &lt;&lt; &quot;\t_#{opts[ :as ]}.begin(#{rate});&quot;
- 			@other_setup &lt;&lt; &quot;\t_#{opts[ :as ]}.clearscr();&quot;     if :clear_screen == :true
-
- 		end
- 	end 	
-
-
-  def loop_timer(opts={}) # loop timer methods #
-        
-   		if opts[:as]
- 			@declarations &lt;&lt; &quot;LoopTimer _#{opts[ :as ]} = LoopTimer();&quot;
- 			accessor = []
- 			$load_libraries &lt;&lt; &quot;LoopTimer&quot;
- 			accessor &lt;&lt; &quot;LoopTimer&amp; #{opts[ :as ]}() {&quot;
- 			accessor &lt;&lt; &quot;\treturn _#{opts[ :as ]};&quot;
- 			accessor &lt;&lt; &quot;}&quot;
-      @@loptim_inc ||= FALSE
- 			if (@@loptim_inc == FALSE)	# on second instance this stuff can't be repeated - BBR
- 				@@limtim_inc = TRUE
- 				accessor &lt;&lt; &quot;void track( LoopTimer&amp; s ) {&quot;
- 				accessor &lt;&lt; &quot;\treturn s.track();&quot;
- 				accessor &lt;&lt; &quot;}&quot;
- 				accessor &lt;&lt; &quot;unsigned long get_total( LoopTimer&amp; s ) {&quot;
-	 			accessor &lt;&lt; &quot;\treturn s.get_total();&quot;
- 				accessor &lt;&lt; &quot;}&quot;
- 			end
- 			
- 			@accessors &lt;&lt; accessor.join( &quot;\n&quot; )
- 			
- 			@signatures &lt;&lt; &quot;LoopTimer&amp; #{opts[ :as ]}();&quot;
-
- 		end
- 	end 
-
-
-
-  def twowire_stepper(pin1, pin2, opts={}) # servo motor routines #
-    raise ArgumentError, &quot;can only define pin1 from Fixnum, got #{pin1.class}&quot; unless pin1.is_a?(Fixnum)
-    raise ArgumentError, &quot;can only define pin2 from Fixnum, got #{pin2.class}&quot; unless pin2.is_a?(Fixnum)
-        
-    st_speed = opts[:speed] ? opts[:speed] : 30
-    st_steps = opts[:steps] ? opts[:steps] : 100
-    
-   		if opts[:as]
- 			@declarations &lt;&lt; &quot;Stepper _#{opts[ :as ]} = Stepper(#{st_steps},#{pin1},#{pin2});&quot;
- 			accessor = []
- 			$load_libraries &lt;&lt; &quot;Stepper&quot;
- 			accessor &lt;&lt; &quot;Stepper&amp; #{opts[ :as ]}() {&quot;
- 			accessor &lt;&lt; &quot;\treturn _#{opts[ :as ]};&quot;
- 			accessor &lt;&lt; &quot;}&quot;
-      @@stepr_inc ||= FALSE
- 			if (@@stepr_inc == FALSE)	# on second instance this stuff can't be repeated - BBR
- 				@@stepr_inc = TRUE
- 				accessor &lt;&lt; &quot;void set_speed( Stepper&amp; s, long sp ) {&quot;
- 				accessor &lt;&lt; &quot;\treturn s.set_speed( sp );&quot;
- 				accessor &lt;&lt; &quot;}&quot;
- 				accessor &lt;&lt; &quot;void set_steps( Stepper&amp; s, int b ) {&quot;
-	 			accessor &lt;&lt; &quot;\treturn s.set_steps( b );&quot;
- 				accessor &lt;&lt; &quot;}&quot;
- 				accessor &lt;&lt; &quot;int version( Stepper&amp; s ) {&quot;
- 				accessor &lt;&lt; &quot;\treturn s.version();&quot;
- 				accessor &lt;&lt; &quot;}&quot;
-			end
- 			
- 			@accessors &lt;&lt; accessor.join( &quot;\n&quot; )
- 			
- 			@signatures &lt;&lt; &quot;Stepper&amp; #{opts[ :as ]}();&quot;
-
- 			@other_setup &lt;&lt; &quot;\t_#{opts[ :as ]}.set_speed(#{st_speed});&quot; if opts[:speed]
-
- 		end
- 	end 
- 	
-
-  def fourwire_stepper( pin1, pin2, pin3, pin4, opts={}) # servo motor routines #
-    raise ArgumentError, &quot;can only define pin1 from Fixnum, got #{pin1.class}&quot; unless pin1.is_a?(Fixnum)
-    raise ArgumentError, &quot;can only define pin2 from Fixnum, got #{pin2.class}&quot; unless pin2.is_a?(Fixnum)
-    raise ArgumentError, &quot;can only define pin3 from Fixnum, got #{pin3.class}&quot; unless pin3.is_a?(Fixnum)
-    raise ArgumentError, &quot;can only define pin4 from Fixnum, got #{pin4.class}&quot; unless pin4.is_a?(Fixnum)
-        
-    st_speed = opts[:speed] ? opts[:speed] : 30
-    st_steps = opts[:steps] ? opts[:steps] : 100
-    
-   		if opts[:as]
- 			@declarations &lt;&lt; &quot;Stepper _#{opts[ :as ]} = Stepper(#{st_steps},#{pin1},#{pin2},#{pin3},#{pin4});&quot;
- 			accessor = []
- 			$load_libraries &lt;&lt; &quot;Stepper&quot;
- 			accessor &lt;&lt; &quot;Stepper&amp; #{opts[ :as ]}() {&quot;
- 			accessor &lt;&lt; &quot;\treturn _#{opts[ :as ]};&quot;
- 			accessor &lt;&lt; &quot;}&quot;
-      @@stepr_inc ||= FALSE
- 			if (@@stepr_inc == FALSE)	# on second instance this stuff can't be repeated - BBR
- 				@@stepr_inc = TRUE
- 				accessor &lt;&lt; &quot;void set_speed( Stepper&amp; s, long sp ) {&quot;
- 				accessor &lt;&lt; &quot;\treturn s.set_speed( sp );&quot;
- 				accessor &lt;&lt; &quot;}&quot;
- 				accessor &lt;&lt; &quot;void set_steps( Stepper&amp; s, int b ) {&quot;
-	 			accessor &lt;&lt; &quot;\treturn s.set_steps( b );&quot;
- 				accessor &lt;&lt; &quot;}&quot;
- 				accessor &lt;&lt; &quot;int version( Stepper&amp; s ) {&quot;
- 				accessor &lt;&lt; &quot;\treturn s.version();&quot;
- 				accessor &lt;&lt; &quot;}&quot;
-			end
- 			
- 			@accessors &lt;&lt; accessor.join( &quot;\n&quot; )
- 			
- 			@signatures &lt;&lt; &quot;Stepper&amp; #{opts[ :as ]}();&quot;
-
- 			@other_setup &lt;&lt; &quot;\t_#{opts[ :as ]}.set_speed(#{st_speed});&quot; if opts[:speed]
-
- 		end
- 	end 
-
-
-  def servo(pin, opts={}) # servo motor routines #
-    raise ArgumentError, &quot;can only define pin from Fixnum, got #{pin.class}&quot; unless pin.is_a?(Fixnum)
-        
-    minp = opts[:min] ? opts[:min] : 544
-    maxp = opts[:max] ? opts[:max] : 2400
-
-   		if opts[:as]
- 			@declarations &lt;&lt; &quot;Servo _#{opts[ :as ]} = Servo();&quot;
- 			accessor = []
- 			$load_libraries &lt;&lt; &quot;Servo&quot;
- 			accessor &lt;&lt; &quot;Servo&amp; #{opts[ :as ]}() {&quot;
- 			accessor &lt;&lt; &quot;\treturn _#{opts[ :as ]};&quot;
- 			accessor &lt;&lt; &quot;}&quot;
-      @@servo_inc ||= FALSE
- 			if (@@servo_inc == FALSE)	# on second instance this stuff can't be repeated - BBR
- 				@@servo_inc = TRUE
- 				accessor &lt;&lt; &quot;uint8_t attach( Servo&amp; s, int p ) {&quot;
- 				accessor &lt;&lt; &quot;\treturn s.attach(p);&quot;
- 				accessor &lt;&lt; &quot;}&quot;
- 				accessor &lt;&lt; &quot;uint8_t attach( Servo&amp; s, int p, int pos ) {&quot;
- 				accessor &lt;&lt; &quot;\treturn s.attach(p, pos );&quot;
- 				accessor &lt;&lt; &quot;}&quot;
- 				accessor &lt;&lt; &quot;uint8_t attach( Servo&amp; s, int p, uint16_t mn, uint16_t mx ) {&quot;
- 				accessor &lt;&lt; &quot;\treturn s.attach(p, mn, mx);&quot;
- 				accessor &lt;&lt; &quot;}&quot;
- 				accessor &lt;&lt; &quot;uint8_t attach( Servo&amp; s, int p, int pos, uint16_t mn, uint16_t mx ) {&quot;
- 				accessor &lt;&lt; &quot;\treturn s.attach(p, pos, mn, mx);&quot;
- 				accessor &lt;&lt; &quot;}&quot;
- 				accessor &lt;&lt; &quot;void detach( Servo&amp; s ) {&quot;
- 				accessor &lt;&lt; &quot;\treturn s.detach();&quot;
- 				accessor &lt;&lt; &quot;}&quot;
- 				accessor &lt;&lt; &quot;void position( Servo&amp; s, int b ) {&quot;
-	 			accessor &lt;&lt; &quot;\treturn s.position( b );&quot;
- 				accessor &lt;&lt; &quot;}&quot;
- 				accessor &lt;&lt; &quot;void speed( Servo&amp; s, int b ) {&quot;
- 				accessor &lt;&lt; &quot;\treturn s.speed( b );&quot;
- 				accessor &lt;&lt; &quot;}&quot;
- 				accessor &lt;&lt; &quot;uint8_t read( Servo&amp; s ) {&quot;
- 				accessor &lt;&lt; &quot;\treturn s.read();&quot;
- 				accessor &lt;&lt; &quot;}&quot;
- 				accessor &lt;&lt; &quot;uint8_t attached( Servo&amp; s ) {&quot;
- 				accessor &lt;&lt; &quot;\treturn s.attached();&quot;
- 				accessor &lt;&lt; &quot;}&quot;
- 				accessor &lt;&lt; &quot;static void refresh( Servo&amp; s ) {&quot;
- 				accessor &lt;&lt; &quot;\treturn s.refresh();&quot;
- 				accessor &lt;&lt; &quot;}&quot;
- 			end
- 			
- 			@accessors &lt;&lt; accessor.join( &quot;\n&quot; )
- 			
- 			@signatures &lt;&lt; &quot;Servo&amp; #{opts[ :as ]}();&quot;
-
- 			@other_setup &lt;&lt; &quot;\t_#{opts[ :as ]}.attach(#{pin}, #{opts[:position]}, #{minp}, #{maxp});&quot; if opts[:position]
- 			@other_setup &lt;&lt; &quot;\t_#{opts[ :as ]}.attach(#{pin}, #{minp}, #{maxp});&quot; unless opts[:position]
-
- 		end
- 	end 
- 	
- 	def frequency_timer(pin, opts={}) # frequency timer routines
-
-    @@frequency_inc ||= FALSE
-    raise ArgumentError, &quot;there can be only one instance of Frequency Timer2&quot; if @@frequency_inc == TRUE
-    @@frequency_inc = TRUE
-    
-    raise ArgumentError, &quot;can only define pin from Fixnum, got #{pin.class}&quot; unless pin.is_a?(Fixnum)
-    raise ArgumentError, &quot;only pin 11 may be used for freq_out, got #{pin}&quot; unless pin == 11
-    
-    if opts[:enable]
-      raise ArgumentError, &quot;enable option must include the frequency or period option&quot; unless opts[:frequency] || opts[:period]
-    end
-    if opts[:frequency]
-      raise ArgumentError, &quot;the frequency option must be an integer, got #{opts[:frequency].class}&quot; unless opts[:frequency].is_a?(Fixnum)
-    end
-    if opts[:period]
-      raise ArgumentError, &quot;the frequency option must be an integer, got #{opts[:period].class}&quot; unless opts[:period].is_a?(Fixnum) 
-    end
-    # refer to: http://www.arduino.cc/playground/Code/FrequencyTimer2
-
-   		if opts[:as]
-   		   
-   		  @declarations &lt;&lt; &quot;FrequencyTimer2 _#{opts[ :as ]} = FrequencyTimer2();&quot;
-   			accessor = []
-   			$load_libraries &lt;&lt; &quot;FrequencyTimer2&quot;	
-   			accessor &lt;&lt; &quot;FrequencyTimer2&amp; #{opts[ :as ]}() {&quot;
-   			accessor &lt;&lt; &quot;\treturn _#{opts[ :as ]};&quot;
-   			accessor &lt;&lt; &quot;}&quot;
-   			accessor &lt;&lt; &quot;void set_frequency( FrequencyTimer2&amp; s, int b ) {&quot;
-   			accessor &lt;&lt; &quot;\treturn s.setPeriod( 1000000L/b );&quot;
-   			accessor &lt;&lt; &quot;}&quot;
-   			accessor &lt;&lt; &quot;void set_period( FrequencyTimer2&amp; s, int b ) {&quot;
-  	 		accessor &lt;&lt; &quot;\treturn s.setPeriod( b );&quot;
-   			accessor &lt;&lt; &quot;}&quot;
-   			accessor &lt;&lt; &quot;void enable( FrequencyTimer2&amp; s ) {&quot;
-   			accessor &lt;&lt; &quot;\treturn s.enable();&quot;
-   			accessor &lt;&lt; &quot;}&quot;
-   			accessor &lt;&lt; &quot;void disable( FrequencyTimer2&amp; s ) {&quot;
-   			accessor &lt;&lt; &quot;\treturn s.disable();&quot;
-   			accessor &lt;&lt; &quot;}&quot;
-
-   			@accessors &lt;&lt; accessor.join( &quot;\n&quot; )
-
-   			@signatures &lt;&lt; &quot;FrequencyTimer2&amp; #{opts[ :as ]}();&quot;
-	
-		    @other_setup &lt;&lt; &quot;\tFrequencyTimer2::setPeriod(0L);&quot; unless opts[:frequency] || opts[:period]
- 			  @other_setup &lt;&lt; &quot;\tFrequencyTimer2::setPeriod(1000000L/#{opts[:frequency]});&quot; if opts[:frequency]
- 			  @other_setup &lt;&lt; &quot;\tFrequencyTimer2::setPeriod(#{opts[:period]});&quot; if opts[:period]
- 			  @other_setup &lt;&lt; &quot;\tFrequencyTimer2::enable();&quot; if opts[:enable] == :true
- 		end
- 	end	
-
 
 
   def compose_setup #:nodoc: also composes headers and signatures</diff>
      <filename>lib/rad/arduino_sketch.rb</filename>
    </modified>
    <modified>
      <diff>@@ -69,7 +69,7 @@ SRC = $(ARDUINO)/pins_arduino.c $(ARDUINO)/wiring.c \
 $(ARDUINO)/wiring_analog.c $(ARDUINO)/wiring_digital.c \
 $(ARDUINO)/wiring_pulse.c $(ARDUINO)/wiring_serial.c \
 $(ARDUINO)/wiring_shift.c $(ARDUINO)/WInterrupts.c &lt;%= params['twi_c'] %&gt;
-CXXSRC = $(ARDUINO)/HardwareSerial.cpp $(SOFTWARE_SERIAL)/SoftwareSerial.cpp&lt;%= params['libraries'].collect{|l| &quot; $(LIBRARY_ROOT)/#{ l }/#{l }.cpp&quot;}.join('') %&gt;
+CXXSRC = $(ARDUINO)/HardwareSerial.cpp $(SOFTWARE_SERIAL)/SoftwareSerial.cpp $(ARDUINO)/Print.cpp&lt;%= params['libraries'].collect{|l| &quot; $(LIBRARY_ROOT)/#{ l }/#{l }.cpp&quot;}.join('') %&gt;
 MCU = &lt;%= params['mcu'] %&gt;
 &lt;% if params['asm_files'] %&gt;ASRC = &lt;%= params['asm_files'].join(' ') %&gt;&lt;% end %&gt;
 F_CPU = 16000000</diff>
      <filename>lib/rad/generators/makefile/makefile.erb</filename>
    </modified>
    <modified>
      <diff>@@ -4,6 +4,547 @@ class HardwareLibrary &lt; ArduinoSketch
     super
   end
   
+  # Treat a pair of digital I/O pins as a serial line. See: http://www.arduino.cc/en/Tutorial/SoftwareSerial
+  def software_serial(rx, tx, opts={})
+    raise ArgumentError, &quot;can only define rx from Fixnum, got #{rx.class}&quot; unless rx.is_a?(Fixnum)
+    raise ArgumentError, &quot;can only define tx from Fixnum, got #{tx.class}&quot; unless tx.is_a?(Fixnum)
+
+    output_pin(tx)
+    input_pin(rx)
+
+    rate = opts[:rate] ? opts[:rate] : 9600
+    if opts[:as]
+      @declarations &lt;&lt; &quot;SoftwareSerial _#{opts[ :as ]} = SoftwareSerial(#{rx}, #{tx});&quot;
+      accessor = &lt;&lt;-STR
+        SoftwareSerial&amp; #{opts[ :as ]}() {
+        return _#{opts[ :as ]};
+        }
+      STR
+      @@swser_inc ||= FALSE
+      if (@@swser_inc == FALSE) # on second instance this stuff can't be repeated
+        @@swser_inc = TRUE
+        accessor += &lt;&lt;-STR
+        int read(SoftwareSerial&amp; s) {
+          return s.read();
+        }
+        void println( SoftwareSerial&amp; s, char* str ) {
+          return s.println( str );
+        }
+        void print( SoftwareSerial&amp; s, char* str ) {
+          return s.print( str );
+        }
+        void println( SoftwareSerial&amp; s, int i ) {
+          return s.println( i );
+        }
+        void print( SoftwareSerial&amp; s, int i ) {
+          return s.print( i );
+        }
+        STR
+      end
+      @accessors &lt;&lt; accessor
+
+      @signatures &lt;&lt; &quot;SoftwareSerial&amp; #{opts[ :as ]}();&quot;
+
+      @other_setup &lt;&lt; &quot;\t_#{opts[ :as ]}.begin(#{rate});&quot;
+    end
+  end 	
+  
+  # use the pa lcd library
+  def pa_lcd_setup(num, opts)
+    if opts[:geometry]
+      raise ArgumentError, &quot;can only define pin from Fixnum, got #{opts[:geometry]}&quot; unless opts[:geometry].is_a?(Fixnum)
+      raise ArgumentError, &quot;pa_lcd geometry must be 216, 220, 224, 240, 416, 420, got #{opts[:geometry]}&quot; unless opts[:geometry].to_s =~ /(216|220|224|240|416|420)/
+    end
+    # move to plugin and load plugin
+    # what's the default?
+     opts[:rate] ||= 9600
+    rate = opts[:rate] ? opts[:rate] : 9600
+    swser_LCDpa(num, opts)
+  end
+
+  def swser_LCDpa(tx, opts={})
+    raise ArgumentError, &quot;can only define tx from Fixnum, got #{tx.class}&quot; unless tx.is_a?(Fixnum)
+
+    rate = opts[:rate] ? opts[:rate] : 9600
+    geometry = opts[:geometry] ? opts[:geometry] : 0
+    if opts[:as] 
+      @declarations &lt;&lt; &quot;SWSerLCDpa _#{opts[ :as ]} = SWSerLCDpa(#{tx}, #{geometry});&quot;
+      $load_libraries &lt;&lt; &quot;SWSerLCDpa&quot;
+      accessor = &lt;&lt;-STR
+        SWSerLCDpa&amp; #{opts[ :as ]}() {
+          return _#{opts[ :as ]};
+        }
+      STR
+      @@slcdpa_inc ||= FALSE
+      if (@@slcdpa_inc == FALSE)	# on second instance this stuff can't be repeated - BBR
+        @@slcdpa_inc = TRUE
+        # ------------------- print generics -------------------------------
+        accessor += &lt;&lt;-STR			  
+        void print( SWSerLCDpa&amp; s, uint8_t b ) {
+          return s.print( b );
+        }
+        void print( SWSerLCDpa&amp; s, const char *str ) {
+          return s.print( str );
+        }
+        void print( SWSerLCDpa&amp; s, char c ) {
+          return s.print( c );
+        }
+        void print( SWSerLCDpa&amp; s, int i ) {
+          return s.print( i );
+        }
+        void print( SWSerLCDpa&amp; s, unsigned int i ) {
+          return s.print( i );
+        }
+        void print( SWSerLCDpa&amp; s, long i ) {
+          return s.print( i );
+        }
+        void print( SWSerLCDpa&amp; s, unsigned long i ) {
+          return s.print( i );
+        }
+        void print( SWSerLCDpa&amp; s, long i, int b ) {
+          return s.print( i, b );
+        }
+        STR
+        # ------------------ PA-LCD specific functions ---------------------------------
+        accessor += &lt;&lt;-STR
+        void clearscr(SWSerLCDpa&amp; s) {
+          return s.clearscr();
+        }
+        void clearscr(SWSerLCDpa&amp; s, const char *str) {
+          return s.clearscr(str);
+        }
+        void clearscr(SWSerLCDpa&amp; s, int n) {
+          return s.clearscr(n);
+        }
+        void clearscr(SWSerLCDpa&amp; s, long n, int b) {
+          return s.clearscr(n, b);
+        }
+        void clearline(SWSerLCDpa&amp; s, int line) {
+          return s.clearline( line );
+        }
+        void clearline(SWSerLCDpa&amp; s, int line, const char *str) {
+          return s.clearline( line, str );
+        }
+        void clearline(SWSerLCDpa&amp; s, int line, int n) {
+          return s.clearline( line, n );
+        }
+        void clearline(SWSerLCDpa&amp; s, int line, long n,  int b) {
+          return s.clearline( line, n, b );
+        }
+        void home( SWSerLCDpa&amp; s) {
+          return s.home();
+        }
+        void home( SWSerLCDpa&amp; s, const char *str) {
+          return s.home( str );
+        }
+        void home( SWSerLCDpa&amp; s, int n) {
+          return s.home( n );
+        }
+        void home( SWSerLCDpa&amp; s, long n, int b) {
+          return s.home( n, b );
+        }
+        void setxy( SWSerLCDpa&amp; s, int x, int y) {
+          return s.setxy( x, y );
+        }
+        void setxy( SWSerLCDpa&amp; s, int x, int y, const char *str) {
+          return s.setxy( x, y, str );
+        }
+        void setxy( SWSerLCDpa&amp; s, int x, int y, long n, int b) {
+          return s.setxy( x, y, n, b );
+        }
+        void setxy( SWSerLCDpa&amp; s, int x, int y, int n) {
+          return s.setxy( x, y, n );
+        }
+        void setgeo( SWSerLCDpa&amp; s, int g) {
+          return s.setgeo( g );
+        }
+        void setintensity( SWSerLCDpa&amp; s, int i ) {
+          return s.setintensity( i );
+        }
+        void intoBignum(SWSerLCDpa&amp; s) {
+          return s.intoBignum();
+        }
+        void outofBignum(SWSerLCDpa&amp; s) {
+          return s.outofBignum();
+        }
+        STR
+      end
+
+      @accessors &lt;&lt; accessor
+
+      @signatures &lt;&lt; &quot;SWSerLCDpa&amp; #{opts[ :as ]}();&quot;
+
+      @other_setup &lt;&lt; &quot;\t_#{opts[ :as ]}.begin(#{rate});&quot;
+      @other_setup &lt;&lt; &quot;\t_#{opts[ :as ]}.clearscr();&quot;     if :clear_screen == :true
+
+    end
+  end 	
+
+  
+  # use the sf (sparkfun) library
+  def sf_lcd_setup(num, opts)
+    if opts[:geometry]
+      raise ArgumentError, &quot;can only define pin from Fixnum, got #{opts[:geometry]}&quot; unless opts[:geometry].is_a?(Fixnum)
+      raise ArgumentError, &quot;sf_lcd geometry must be 216, 220, 416, 420, got #{opts[:geometry]}&quot; unless opts[:geometry].to_s =~ /(216|220|416|420)/
+    end
+    # move to plugin and load plugin
+     opts[:rate] ||= 9600
+    rate = opts[:rate] ? opts[:rate] : 9600
+    swser_LCDsf(num, opts)
+  end
+
+  def swser_LCDsf(tx, opts={})
+    raise ArgumentError, &quot;can only define tx from Fixnum, got #{tx.class}&quot; unless tx.is_a?(Fixnum)    
+
+    rate = opts[:rate] ? opts[:rate] : 9600
+    geometry = opts[:geometry] ? opts[:geometry] : 0
+    if opts[:as] 
+      @declarations &lt;&lt; &quot;SWSerLCDsf _#{opts[ :as ]} = SWSerLCDsf(#{tx}, #{geometry});&quot;
+
+      $load_libraries &lt;&lt; &quot;SWSerLCDsf&quot;
+      accessor = &lt;&lt;-STR
+        SWSerLCDsf&amp; #{opts[ :as ]}() {
+          return _#{opts[ :as ]};
+        }
+      STR
+      @@slcdsf_inc ||= FALSE # assign only if nil
+      if (@@slcdsf_inc == FALSE)	# on second instance this stuff can't be repeated - BBR
+        @@slcdsf_inc = TRUE
+        accessor += &lt;&lt;-STR
+        void print( SWSerLCDsf&amp; s, uint8_t b ) {
+          return s.print( b );
+        }
+        void print( SWSerLCDsf&amp; s, const char *str ) {
+          return s.print( str );
+        }
+        void print( SWSerLCDsf&amp; s, char c ) {
+          return s.print( c );
+        }
+        void print( SWSerLCDsf&amp; s, int i ) {
+          return s.print( i );
+        }
+        void print( SWSerLCDsf&amp; s, unsigned int i ) {
+          return s.print( i );
+        }
+        void print( SWSerLCDsf&amp; s, long i ) {
+          return s.print( i );
+        }
+        void print( SWSerLCDsf&amp; s, unsigned long i ) {
+          return s.print( i );
+        }
+        void print( SWSerLCDsf&amp; s, long i, int b ) {
+          return s.print( i, b );
+        }
+        STR
+        # ------------------ Spark Fun Specific  Functions ---------------------------------
+        accessor += &lt;&lt;-STR
+        void clearscr(SWSerLCDsf&amp; s) {
+          return s.clearscr();
+        }
+        void clearscr(SWSerLCDsf&amp; s, const char *str) {
+          return s.clearscr(str);
+        }
+        void clearscr(SWSerLCDsf&amp; s, int n) {
+          return s.clearscr(n);
+        }
+        void clearscr(SWSerLCDsf&amp; s, long n, int b) {
+          return s.clearscr(n, b);
+        }
+        void home( SWSerLCDsf&amp; s) {
+          return s.home();
+        }
+        void home( SWSerLCDsf&amp; s, const char *str) {
+          return s.home( str );
+        }
+        void home( SWSerLCDsf&amp; s, int n) {
+          return s.home( n );
+        }
+        void home( SWSerLCDsf&amp; s, long n, int b) {
+          return s.home( n, b );
+        }
+        void setxy( SWSerLCDsf&amp; s, int x, int y) {
+          return s.setxy( x, y );
+        }
+        void setxy( SWSerLCDsf&amp; s, int x, int y, const char *str) {
+          return s.setxy( x, y, str );
+        }
+        void setxy( SWSerLCDsf&amp; s, int x, int y, int n) {
+          return s.setxy( x, y, n );
+        }
+        void setxy( SWSerLCDsf&amp; s, int x, int y, long n, int b) {
+          return s.setxy( x, y, n, b );
+        }
+        void setgeo( SWSerLCDsf&amp; s, int g) {
+          return s.setgeo( g );
+        }
+        void setintensity( SWSerLCDsf&amp; s, int i ) {
+          return s.setintensity( i );
+        }
+        void setcmd( SWSerLCDsf&amp; s, uint8_t a, uint8_t b) {
+          return s.setcmd( a, b );
+        }
+        STR
+      end
+      @accessors &lt;&lt; accessor
+
+      @signatures &lt;&lt; &quot;SWSerLCDsf&amp; #{opts[ :as ]}();&quot;
+
+      @other_setup &lt;&lt; &quot;\t_#{opts[ :as ]}.begin(#{rate});&quot;
+      @other_setup &lt;&lt; &quot;\t_#{opts[ :as ]}.clearscr();&quot;     if :clear_screen == :true
+
+    end
+  end 	
+
+
+  def loop_timer(opts={}) # loop timer methods #
+
+    if opts[:as]
+      @declarations &lt;&lt; &quot;LoopTimer _#{opts[ :as ]} = LoopTimer();&quot;
+      $load_libraries &lt;&lt; &quot;LoopTimer&quot;
+      accessor = &lt;&lt;-STR
+        LoopTimer&amp; #{opts[ :as ]}() {
+          return _#{opts[ :as ]};
+        }
+      STR
+      @@loptim_inc ||= FALSE
+      if (@@loptim_inc == FALSE)	# on second instance this stuff can't be repeated - BBR
+        @@limtim_inc = TRUE
+        accessor += &lt;&lt;-STR
+        void track( LoopTimer&amp; s ) {
+          return s.track();
+        }
+        unsigned long get_total( LoopTimer&amp; s ) {
+          return s.get_total();
+        }
+        STR
+      end
+
+      @accessors &lt;&lt; accessor
+
+      @signatures &lt;&lt; &quot;LoopTimer&amp; #{opts[ :as ]}();&quot;
+
+    end
+  end
+
+  # use the servo library
+  def servo_setup(num, opts)
+    if opts[:position]
+      raise ArgumentError, &quot;position must be an integer from 0 to 360, got #{opts[:position].class}&quot; unless opts[:position].is_a?(Fixnum)
+      raise ArgumentError, &quot;position must be an integer from 0 to 360---, got #{opts[:position]}&quot; if opts[:position] &lt; 0 || opts[:position] &gt; 360
+    end
+    servo(num, opts)
+    # move this to better place ... 
+    # should probably go along with servo code into plugin
+    @@servo_dh ||= FALSE
+    if (@@servo_dh == FALSE)	# on second instance this stuff can't be repeated - BBR
+      @@servo_dh = TRUE
+      @declarations &lt;&lt; &quot;void servo_refresh(void);&quot;
+      helper_methods = []
+      helper_methods &lt;&lt; &quot;void servo_refresh(void)&quot;
+      helper_methods &lt;&lt; &quot;{&quot;
+      helper_methods &lt;&lt;  &quot;\tServo::refresh();&quot;
+      helper_methods &lt;&lt; &quot;}&quot;
+      @helper_methods += &quot;\n#{helper_methods.join(&quot;\n&quot;)}&quot;
+    end
+  end
+  
+  def servo(pin, opts={}) # servo motor routines #
+    raise ArgumentError, &quot;can only define pin from Fixnum, got #{pin.class}&quot; unless pin.is_a?(Fixnum)
+
+    minp = opts[:min] ? opts[:min] : 544
+    maxp = opts[:max] ? opts[:max] : 2400
+
+    if opts[:as]
+      @declarations &lt;&lt; &quot;Servo _#{opts[ :as ]} = Servo();&quot;
+      $load_libraries &lt;&lt; &quot;Servo&quot;
+      accessor = &lt;&lt;-STR
+        Servo&amp; #{opts[ :as ]}() {
+          return _#{opts[ :as ]};
+        }
+      STR
+      @@servo_inc ||= FALSE
+      if (@@servo_inc == FALSE)	# on second instance this stuff can't be repeated - BBR
+        @@servo_inc = TRUE
+        accessor += &lt;&lt;-STR
+        uint8_t attach( Servo&amp; s, int p ) {
+          return s.attach(p);
+        }
+        uint8_t attach( Servo&amp; s, int p, int pos ) {
+          return s.attach(p, pos );
+        }
+        uint8_t attach( Servo&amp; s, int p, uint16_t mn, uint16_t mx ) {
+          return s.attach(p, mn, mx);
+        }
+        uint8_t attach( Servo&amp; s, int p, int pos, uint16_t mn, uint16_t mx ) {
+          return s.attach(p, pos, mn, mx);
+        }
+        void detach( Servo&amp; s ) {
+          return s.detach();
+        }
+        void position( Servo&amp; s, int b ) {
+          return s.position( b );
+        }
+        void speed( Servo&amp; s, int b ) {
+          return s.speed( b );
+        }
+        uint8_t read( Servo&amp; s ) {
+          return s.read();
+        }
+        uint8_t attached( Servo&amp; s ) {
+          return s.attached();
+        }
+        static void refresh( Servo&amp; s ) {
+          return s.refresh();
+        }
+        STR
+      end
+
+      @accessors &lt;&lt; accessor
+
+      @signatures &lt;&lt; &quot;Servo&amp; #{opts[ :as ]}();&quot;
+
+      @other_setup &lt;&lt; &quot;\t_#{opts[ :as ]}.attach(#{pin}, #{opts[:position]}, #{minp}, #{maxp});&quot; if opts[:position]
+      @other_setup &lt;&lt; &quot;\t_#{opts[ :as ]}.attach(#{pin}, #{minp}, #{maxp});&quot; unless opts[:position]
+
+    end
+  end
+  
+  def twowire_stepper(pin1, pin2, opts={}) # servo motor routines #
+    raise ArgumentError, &quot;can only define pin1 from Fixnum, got #{pin1.class}&quot; unless pin1.is_a?(Fixnum)
+    raise ArgumentError, &quot;can only define pin2 from Fixnum, got #{pin2.class}&quot; unless pin2.is_a?(Fixnum)
+
+    st_speed = opts[:speed] ? opts[:speed] : 30
+    st_steps = opts[:steps] ? opts[:steps] : 100
+
+    if opts[:as]
+      @declarations &lt;&lt; &quot;Stepper _#{opts[ :as ]} = Stepper(#{st_steps},#{pin1},#{pin2});&quot;
+      $load_libraries &lt;&lt; &quot;Stepper&quot;
+      accessor = &lt;&lt;-STR
+        Stepper&amp; #{opts[ :as ]}() {
+          return _#{opts[ :as ]};
+        }
+      STR
+      @@stepr_inc ||= FALSE
+      if (@@stepr_inc == FALSE)	# on second instance this stuff can't be repeated - BBR
+      @@stepr_inc = TRUE
+      accessor = &lt;&lt;-STR
+        void set_speed( Stepper&amp; s, long sp ) {
+          return s.set_speed( sp );
+        }
+        void set_steps( Stepper&amp; s, int b ) {
+          return s.set_steps( b );
+        }
+        int version( Stepper&amp; s ) {
+          return s.version();
+        }
+        STR
+    end
+
+    @accessors &lt;&lt; accessor
+
+    @signatures &lt;&lt; &quot;Stepper&amp; #{opts[ :as ]}();&quot;
+
+    @other_setup &lt;&lt; &quot;\t_#{opts[ :as ]}.set_speed(#{st_speed});&quot; if opts[:speed]
+
+    end
+  end
+  
+  def fourwire_stepper( pin1, pin2, pin3, pin4, opts={}) # servo motor routines #
+    raise ArgumentError, &quot;can only define pin1 from Fixnum, got #{pin1.class}&quot; unless pin1.is_a?(Fixnum)
+    raise ArgumentError, &quot;can only define pin2 from Fixnum, got #{pin2.class}&quot; unless pin2.is_a?(Fixnum)
+    raise ArgumentError, &quot;can only define pin3 from Fixnum, got #{pin3.class}&quot; unless pin3.is_a?(Fixnum)
+    raise ArgumentError, &quot;can only define pin4 from Fixnum, got #{pin4.class}&quot; unless pin4.is_a?(Fixnum)
+
+    st_speed = opts[:speed] ? opts[:speed] : 30
+    st_steps = opts[:steps] ? opts[:steps] : 100
+
+    if opts[:as]
+      @declarations &lt;&lt; &quot;Stepper _#{opts[ :as ]} = Stepper(#{st_steps},#{pin1},#{pin2},#{pin3},#{pin4});&quot;
+      $load_libraries &lt;&lt; &quot;Stepper&quot;
+      accessor = &lt;&lt;-STR
+        Stepper&amp; #{opts[ :as ]}() {
+          return _#{opts[ :as ]};
+        }
+      STR
+      @@stepr_inc ||= FALSE
+      if (@@stepr_inc == FALSE)	# on second instance this stuff can't be repeated - BBR
+        @@stepr_inc = TRUE
+        accessor += &lt;&lt;-STR
+        void set_speed( Stepper&amp; s, long sp ) {
+          return s.set_speed( sp );
+        }
+        void set_steps( Stepper&amp; s, int b ) {
+          return s.set_steps( b );
+        }
+        int version( Stepper&amp; s ) {
+          return s.version();
+        }
+        STR
+      end
+
+      @accessors &lt;&lt; accessor
+
+      @signatures &lt;&lt; &quot;Stepper&amp; #{opts[ :as ]}();&quot;
+
+      @other_setup &lt;&lt; &quot;\t_#{opts[ :as ]}.set_speed(#{st_speed});&quot; if opts[:speed]
+
+    end
+  end
+ 	
+  def frequency_timer(pin, opts={}) # frequency timer routines
+
+    @@frequency_inc ||= FALSE
+    raise ArgumentError, &quot;there can be only one instance of Frequency Timer2&quot; if @@frequency_inc == TRUE
+    @@frequency_inc = TRUE
+
+    raise ArgumentError, &quot;can only define pin from Fixnum, got #{pin.class}&quot; unless pin.is_a?(Fixnum)
+    raise ArgumentError, &quot;only pin 11 may be used for freq_out, got #{pin}&quot; unless pin == 11
+
+    if opts[:enable]
+      raise ArgumentError, &quot;enable option must include the frequency or period option&quot; unless opts[:frequency] || opts[:period]
+    end
+    if opts[:frequency]
+      raise ArgumentError, &quot;the frequency option must be an integer, got #{opts[:frequency].class}&quot; unless opts[:frequency].is_a?(Fixnum)
+    end
+    if opts[:period]
+      raise ArgumentError, &quot;the frequency option must be an integer, got #{opts[:period].class}&quot; unless opts[:period].is_a?(Fixnum) 
+    end
+    # refer to: http://www.arduino.cc/playground/Code/FrequencyTimer2
+
+    if opts[:as]
+
+      @declarations &lt;&lt; &quot;FrequencyTimer2 _#{opts[ :as ]} = FrequencyTimer2();&quot;
+
+      $load_libraries &lt;&lt; &quot;FrequencyTimer2&quot;
+        accessor = &lt;&lt;-STR
+        FrequencyTimer2&amp; #{opts[ :as ]}() {
+          return _#{opts[ :as ]};
+        }
+        void set_frequency( FrequencyTimer2&amp; s, int b ) {
+          return s.setPeriod( 1000000L/b );
+        }
+        void set_period( FrequencyTimer2&amp; s, int b ) {
+          return s.setPeriod( b );
+        }
+        void enable( FrequencyTimer2&amp; s ) {
+          return s.enable();
+        }
+        void disable( FrequencyTimer2&amp; s ) {
+          return s.disable();
+        }
+      STR
+
+      @accessors &lt;&lt; accessor
+
+      @signatures &lt;&lt; &quot;FrequencyTimer2&amp; #{opts[ :as ]}();&quot;
+
+      @other_setup &lt;&lt; &quot;\tFrequencyTimer2::setPeriod(0L);&quot; unless opts[:frequency] || opts[:period]
+      @other_setup &lt;&lt; &quot;\tFrequencyTimer2::setPeriod(1000000L/#{opts[:frequency]});&quot; if opts[:frequency]
+      @other_setup &lt;&lt; &quot;\tFrequencyTimer2::setPeriod(#{opts[:period]});&quot; if opts[:period]
+      @other_setup &lt;&lt; &quot;\tFrequencyTimer2::enable();&quot; if opts[:enable] == :true
+    end
+  end
+  
   def one_wire(pin, opts={})
     raise ArgumentError, &quot;can only define pin from Fixnum, got #{pin.class}&quot; unless pin.is_a?(Fixnum)
 
@@ -13,34 +554,34 @@ class HardwareLibrary &lt; ArduinoSketch
       $load_libraries &lt;&lt; &quot;OneWire&quot;
       accessor = &lt;&lt;-STR 
         OneWire&amp; #{opts[ :as ]}() {
-        return _#{opts[ :as ]};
+          return _#{opts[ :as ]};
         }
     STR
       @@onewire_inc ||= FALSE
       if (@@onewire_inc == FALSE)     # on second instance this stuff can't be repeated - BBR
         @@onewire_inc = TRUE
         accessor += &lt;&lt;-STR
-          uint8_t reset(OneWire&amp; s) {
-            return s.reset();
-          }
-          void skip(OneWire&amp; s) {
-            return s.skip();
-          }
-          void write(OneWire&amp; s, uint8_t v, uint8_t p = 0) {
-            return s.write( v, p );
-          }
-          uint8_t read(OneWire&amp; s) {
-            return s.read();
-          }
-          void write_bit( OneWire&amp; s, uint8_t b ) {
-            return s.write_bit( b );
-          }
-          uint8_t read_bit(OneWire&amp; s) {
-            return s.read_bit();
-          }
-          void depower(OneWire&amp; s) {
-            return s.depower();
-          }
+        uint8_t reset(OneWire&amp; s) {
+          return s.reset();
+        }
+        void skip(OneWire&amp; s) {
+          return s.skip();
+        }
+        void write(OneWire&amp; s, uint8_t v, uint8_t p = 0) {
+          return s.write( v, p );
+        }
+        uint8_t read(OneWire&amp; s) {
+          return s.read();
+        }
+        void write_bit( OneWire&amp; s, uint8_t b ) {
+          return s.write_bit( b );
+        }
+        uint8_t read_bit(OneWire&amp; s) {
+          return s.read_bit();
+        }
+        void depower(OneWire&amp; s) {
+          return s.depower();
+        }
         STR
       end
       @accessors &lt;&lt; accessor
@@ -118,6 +659,22 @@ class HardwareLibrary &lt; ArduinoSketch
 
   end
   
+  # work in progress
+  def ethernet(pin, opts={})
+    raise ArgumentError, &quot;can only define pin from Fixnum, got #{pin.class}&quot; unless pin.is_a?(Fixnum)
+    if opts[:as]
+      accessor = []
+      $load_libraries &lt;&lt; &quot;AF_XPort&quot;
+      $load_libraries &lt;&lt; &quot;AFSoftSerial&quot;
+      # needs to be more granular:
+      accessor &lt;&lt; &quot;AF_XPort xport = AF_XPort(XPORT_RXPIN, XPORT_TXPIN, XPORT_RESETPIN, XPORT_DTRPIN, XPORT_RTSPIN, XPORT_CTSPIN);&quot;
+      rate = opts[:rate] ? opts[:rate] : 57600
+      @other_setup &lt;&lt; &quot;xport.begin(#{rate});&quot;
+      @accessors &lt;&lt; accessor.join( &quot;\n&quot; )
+    end
+  end
+  
+  
   def i2c_eeprom(pin, opts={}) # i2c serial eeprom routines #
 
     dev_addr = opts[:address] ? opts[:address] : 0
@@ -170,7 +727,7 @@ class HardwareLibrary &lt; ArduinoSketch
         $load_libraries &lt;&lt; &quot;DS1307&quot;
         accessor = &lt;&lt;-STR
         DS1307&amp; #{opts[ :as ]}() {
-        return _#{opts[ :as ]};
+          return _#{opts[ :as ]};
         }
         void get( DS1307&amp; s, byte *buf, boolean r ) {
           return s.get( buf, r );</diff>
      <filename>lib/rad/hardware_library.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,4 @@
+require 'rubygems'
 require 'ruby_to_ansi_c'
 
 class RADProcessor &lt; RubyToAnsiC</diff>
      <filename>lib/rad/rad_processor.rb</filename>
    </modified>
    <modified>
      <diff>@@ -4,14 +4,15 @@ Gem::Specification.new do |s|
   
   s.date = %q{2008-08-18}
   s.default_executable = %q{rad}
-  s.summary = &quot;RAD: Ruby Arduino Development - 0.2.5.2&quot;
+  s.summary = &quot;RAD: Ruby Arduino Development - 0.2.5.5&quot;
   s.email = &quot;greg@grabb.it&quot;
   s.executables = [&quot;rad&quot;]
   s.homepage = &quot;http://github.com/atduskreg/rad&quot;  
   s.description = &quot;Ruby Arduino Development: a framework for programming the Arduino physcial computing platform using Ruby&quot;
   s.has_rdoc = true
   s.authors = [&quot;Greg Borenstein&quot;, &quot;plugins+: JD Barnhart&quot;]
-  s.files = [&quot;History.txt&quot;, &quot;License.txt&quot;, &quot;Manifest.txt&quot;, &quot;README.rdoc&quot;, &quot;Rakefile&quot;, &quot;bin/rad&quot;, &quot;lib/examples/add_hysteresis.rb&quot;, &quot;lib/examples/basic_blink.rb&quot;, &quot;lib/examples/blink_m_address_assignment.rb&quot;, &quot;lib/examples/blink_m_hello.rb&quot;, &quot;lib/examples/blink_m_multi.rb&quot;, &quot;lib/examples/blink_with_serial.rb&quot;, &quot;lib/examples/configure_pa_lcd_boot.rb&quot;, &quot;lib/examples/debounce_methods.rb&quot;, &quot;lib/examples/external_variable_fu.rb&quot;, &quot;lib/examples/external_variables.rb&quot;, &quot;lib/examples/first_sound.rb&quot;, &quot;lib/examples/frequency_generator.rb&quot;, &quot;lib/examples/hello_array.rb&quot;, &quot;lib/examples/hello_array2.rb&quot;, &quot;lib/examples/hello_array_eeprom.rb&quot;, &quot;lib/examples/hello_clock.rb&quot;, &quot;lib/examples/hello_eeprom.rb&quot;, &quot;lib/examples/hello_eeprom_lcdpa.rb&quot;, &quot;lib/examples/hello_format_print.rb&quot;, &quot;lib/examples/hello_lcd_charset.rb&quot;, &quot;lib/examples/hello_pa_lcd.rb&quot;, &quot;lib/examples/hello_servos.rb&quot;, &quot;lib/examples/hello_spectra_sound.rb&quot;, &quot;lib/examples/hello_world.rb&quot;, &quot;lib/examples/hysteresis_duel.rb&quot;, &quot;lib/examples/i2c_with_clock_chip.rb&quot;, &quot;lib/examples/motor_knob.rb&quot;, &quot;lib/examples/servo_buttons.rb&quot;, &quot;lib/examples/servo_calibrate_continuous.rb&quot;, &quot;lib/examples/servo_throttle.rb&quot;, &quot;lib/examples/sparkfun_lcd.rb&quot;, &quot;lib/examples/spectra_soft_pot.rb&quot;, &quot;lib/examples/times_method.rb&quot;, &quot;lib/examples/toggle.rb&quot;, &quot;lib/examples/two_wire.rb&quot;, &quot;lib/libraries/DS1307/DS1307.cpp&quot;, &quot;lib/libraries/DS1307/DS1307.h&quot;, &quot;lib/libraries/DS1307/keywords.txt&quot;, &quot;lib/libraries/FrequencyTimer2/FrequencyTimer2.cpp&quot;, &quot;lib/libraries/FrequencyTimer2/FrequencyTimer2.h&quot;, &quot;lib/libraries/FrequencyTimer2/keywords.txt&quot;, &quot;lib/libraries/I2CEEPROM/I2CEEPROM.cpp&quot;, &quot;lib/libraries/I2CEEPROM/I2CEEPROM.h&quot;, &quot;lib/libraries/I2CEEPROM/keywords.txt&quot;, &quot;lib/libraries/LoopTimer/LoopTimer.cpp&quot;, &quot;lib/libraries/LoopTimer/LoopTimer.h&quot;, &quot;lib/libraries/LoopTimer/keywords.txt&quot;, &quot;lib/libraries/OneWire/OneWire.cpp&quot;, &quot;lib/libraries/OneWire/OneWire.h&quot;, &quot;lib/libraries/OneWire/keywords.txt&quot;, &quot;lib/libraries/OneWire/readme.txt&quot;, &quot;lib/libraries/SWSerLCDpa/SWSerLCDpa.cpp&quot;, &quot;lib/libraries/SWSerLCDpa/SWSerLCDpa.h&quot;, &quot;lib/libraries/SWSerLCDsf/SWSerLCDsf.cpp&quot;, &quot;lib/libraries/SWSerLCDsf/SWSerLCDsf.h&quot;, &quot;lib/libraries/Servo/Servo.cpp&quot;, &quot;lib/libraries/Servo/Servo.h&quot;, &quot;lib/libraries/Stepper/Stepper.cpp&quot;, &quot;lib/libraries/Stepper/Stepper.h&quot;, &quot;lib/libraries/Stepper/keywords.txt&quot;, &quot;lib/libraries/Wire/Wire.cpp&quot;, &quot;lib/libraries/Wire/Wire.h&quot;, &quot;lib/libraries/Wire/keywords.txt&quot;, &quot;lib/libraries/Wire/twi.h&quot;, &quot;lib/libraries/Wire/utility/twi.c&quot;, &quot;lib/libraries/Wire/utility/twi.h&quot;, &quot;lib/plugins/bitwise_ops.rb&quot;, &quot;lib/plugins/blink.rb&quot;, &quot;lib/plugins/blink_m.rb&quot;, &quot;lib/plugins/debounce.rb&quot;, &quot;lib/plugins/debug_output_to_lcd.rb&quot;, &quot;lib/plugins/hysteresis.rb&quot;, &quot;lib/plugins/input_output_state.rb&quot;, &quot;lib/plugins/lcd_padding.rb&quot;, &quot;lib/plugins/mem_test.rb&quot;, &quot;lib/plugins/servo_pulse.rb&quot;, &quot;lib/plugins/servo_setup.rb&quot;, &quot;lib/plugins/smoother.rb&quot;, &quot;lib/plugins/spark_fun_serial_lcd.rb&quot;, &quot;lib/plugins/spectra_symbol.rb&quot;, &quot;lib/rad.rb&quot;, &quot;lib/rad/arduino_plugin.rb&quot;, &quot;lib/rad/arduino_sketch.rb&quot;, &quot;lib/rad/generators/makefile/makefile.erb&quot;, &quot;lib/rad/generators/makefile/makefile.rb&quot;, &quot;lib/rad/hardware_library.rb&quot;, &quot;lib/rad/init.rb&quot;, &quot;lib/rad/rad_processor.rb&quot;, &quot;lib/rad/rad_rewriter.rb&quot;, &quot;lib/rad/rad_type_checker.rb&quot;, &quot;lib/rad/sim/arduino_sketch.rb&quot;, &quot;lib/rad/sketch_compiler.rb&quot;, &quot;lib/rad/tasks/build_and_make.rake&quot;, &quot;lib/rad/tasks/rad.rb&quot;, &quot;lib/rad/todo.txt&quot;, &quot;lib/rad/variable_processing.rb&quot;, &quot;lib/rad/version.rb&quot;, &quot;scripts/txt2html&quot;, &quot;setup.rb&quot;, &quot;spec/examples/hello_world.rb&quot;, &quot;spec/examples/serial_motor.rb&quot;, &quot;spec/models/arduino_sketch_spec.rb&quot;, &quot;spec/models/sketch_compiler_spec.rb&quot;, &quot;spec/models/spec_helper.rb&quot;, &quot;spec/sim/hello_world_spec.rb&quot;, &quot;spec/spec.opts&quot;, &quot;test/test_array_processing.rb&quot;, &quot;test/test_plugin_loading.rb&quot;, &quot;test/test_translation_post_processing.rb&quot;, &quot;test/test_variable_processing.rb&quot;, &quot;website/index.html&quot;, &quot;website/index.txt&quot;, &quot;website/javascripts/rounded_corners_lite.inc.js&quot;, &quot;website/stylesheets/screen.css&quot;, &quot;website/template.rhtml&quot;, &quot;website/examples/assembler_test.rb.html&quot;, &quot;website/examples/gps_reader.rb.html&quot;, &quot;website/examples/hello_world.rb.html&quot;, &quot;website/examples/serial_motor.rb.html&quot;]
+  s.extra_rdoc_files = [&quot;History.txt&quot;, &quot;License.txt&quot;, &quot;Manifest.txt&quot;, &quot;lib/libraries/AFSoftSerial/keywords.txt&quot;, &quot;lib/libraries/DS1307/keywords.txt&quot;, &quot;lib/libraries/FrequencyTimer2/keywords.txt&quot;, &quot;lib/libraries/I2CEEPROM/keywords.txt&quot;, &quot;lib/libraries/LoopTimer/keywords.txt&quot;, &quot;lib/libraries/OneWire/keywords.txt&quot;, &quot;lib/libraries/OneWire/readme.txt&quot;, &quot;lib/libraries/Stepper/keywords.txt&quot;, &quot;lib/libraries/Wire/keywords.txt&quot;, &quot;lib/rad/todo.txt&quot;, &quot;website/index.txt&quot;]
+  s.files = [&quot;History.txt&quot;, &quot;License.txt&quot;, &quot;Manifest.txt&quot;, &quot;README.rdoc&quot;, &quot;Rakefile&quot;, &quot;bin/rad&quot;, &quot;lib/examples/add_hysteresis.rb&quot;, &quot;lib/examples/basic_blink.rb&quot;, &quot;lib/examples/blink_m_address_assignment.rb&quot;, &quot;lib/examples/blink_m_hello.rb&quot;, &quot;lib/examples/blink_m_multi.rb&quot;, &quot;lib/examples/blink_with_serial.rb&quot;, &quot;lib/examples/configure_pa_lcd_boot.rb&quot;, &quot;lib/examples/debounce_methods.rb&quot;, &quot;lib/examples/external_variable_fu.rb&quot;, &quot;lib/examples/external_variables.rb&quot;, &quot;lib/examples/first_sound.rb&quot;, &quot;lib/examples/frequency_generator.rb&quot;, &quot;lib/examples/hello_array.rb&quot;, &quot;lib/examples/hello_array2.rb&quot;, &quot;lib/examples/hello_array_eeprom.rb&quot;, &quot;lib/examples/hello_clock.rb&quot;, &quot;lib/examples/hello_eeprom.rb&quot;, &quot;lib/examples/hello_eeprom_lcdpa.rb&quot;, &quot;lib/examples/hello_format_print.rb&quot;, &quot;lib/examples/hello_lcd_charset.rb&quot;, &quot;lib/examples/hello_pa_lcd.rb&quot;, &quot;lib/examples/hello_servos.rb&quot;, &quot;lib/examples/hello_spectra_sound.rb&quot;, &quot;lib/examples/hello_world.rb&quot;, &quot;lib/examples/hello_xbee.rb&quot;, &quot;lib/examples/hysteresis_duel.rb&quot;, &quot;lib/examples/i2c_with_clock_chip.rb&quot;, &quot;lib/examples/midi_beat_box.rb&quot;, &quot;lib/examples/midi_scales.rb&quot;, &quot;lib/examples/motor_knob.rb&quot;, &quot;lib/examples/servo_buttons.rb&quot;, &quot;lib/examples/servo_calibrate_continuous.rb&quot;, &quot;lib/examples/servo_throttle.rb&quot;, &quot;lib/examples/sparkfun_lcd.rb&quot;, &quot;lib/examples/spectra_soft_pot.rb&quot;, &quot;lib/examples/times_method.rb&quot;, &quot;lib/examples/toggle.rb&quot;, &quot;lib/examples/twitter.rb&quot;, &quot;lib/examples/two_wire.rb&quot;, &quot;lib/libraries/AFSoftSerial/AFSoftSerial.cpp&quot;, &quot;lib/libraries/AFSoftSerial/AFSoftSerial.h&quot;, &quot;lib/libraries/AFSoftSerial/keywords.txt&quot;, &quot;lib/libraries/AF_XPort/AF_XPort.cpp&quot;, &quot;lib/libraries/AF_XPort/AF_XPort.h&quot;, &quot;lib/libraries/DS1307/DS1307.cpp&quot;, &quot;lib/libraries/DS1307/DS1307.h&quot;, &quot;lib/libraries/DS1307/keywords.txt&quot;, &quot;lib/libraries/FrequencyTimer2/FrequencyTimer2.cpp&quot;, &quot;lib/libraries/FrequencyTimer2/FrequencyTimer2.h&quot;, &quot;lib/libraries/FrequencyTimer2/keywords.txt&quot;, &quot;lib/libraries/I2CEEPROM/I2CEEPROM.cpp&quot;, &quot;lib/libraries/I2CEEPROM/I2CEEPROM.h&quot;, &quot;lib/libraries/I2CEEPROM/keywords.txt&quot;, &quot;lib/libraries/LoopTimer/LoopTimer.cpp&quot;, &quot;lib/libraries/LoopTimer/LoopTimer.h&quot;, &quot;lib/libraries/LoopTimer/keywords.txt&quot;, &quot;lib/libraries/OneWire/OneWire.cpp&quot;, &quot;lib/libraries/OneWire/OneWire.h&quot;, &quot;lib/libraries/OneWire/keywords.txt&quot;, &quot;lib/libraries/OneWire/readme.txt&quot;, &quot;lib/libraries/SWSerLCDpa/SWSerLCDpa.cpp&quot;, &quot;lib/libraries/SWSerLCDpa/SWSerLCDpa.h&quot;, &quot;lib/libraries/SWSerLCDsf/SWSerLCDsf.cpp&quot;, &quot;lib/libraries/SWSerLCDsf/SWSerLCDsf.h&quot;, &quot;lib/libraries/Servo/Servo.cpp&quot;, &quot;lib/libraries/Servo/Servo.h&quot;, &quot;lib/libraries/Stepper/Stepper.cpp&quot;, &quot;lib/libraries/Stepper/Stepper.h&quot;, &quot;lib/libraries/Stepper/keywords.txt&quot;, &quot;lib/libraries/Wire/Wire.cpp&quot;, &quot;lib/libraries/Wire/Wire.h&quot;, &quot;lib/libraries/Wire/keywords.txt&quot;, &quot;lib/libraries/Wire/twi.h&quot;, &quot;lib/libraries/Wire/utility/twi.c&quot;, &quot;lib/libraries/Wire/utility/twi.h&quot;, &quot;lib/plugins/bitwise_ops.rb&quot;, &quot;lib/plugins/blink.rb&quot;, &quot;lib/plugins/blink_m.rb&quot;, &quot;lib/plugins/debounce.rb&quot;, &quot;lib/plugins/debug_output_to_lcd.rb&quot;, &quot;lib/plugins/hysteresis.rb&quot;, &quot;lib/plugins/input_output_state.rb&quot;, &quot;lib/plugins/lcd_padding.rb&quot;, &quot;lib/plugins/mem_test.rb&quot;, &quot;lib/plugins/midi.rb&quot;, &quot;lib/plugins/parallax_ping.rb&quot;, &quot;lib/plugins/servo_pulse.rb&quot;, &quot;lib/plugins/servo_setup.rb&quot;, &quot;lib/plugins/smoother.rb&quot;, &quot;lib/plugins/spark_fun_serial_lcd.rb&quot;, &quot;lib/plugins/spectra_symbol.rb&quot;, &quot;lib/plugins/twitter_connect.rb&quot;, &quot;lib/rad.rb&quot;, &quot;lib/rad/README.rdoc&quot;, &quot;lib/rad/arduino_plugin.rb&quot;, &quot;lib/rad/arduino_sketch.rb&quot;, &quot;lib/rad/generators/makefile/makefile.erb&quot;, &quot;lib/rad/generators/makefile/makefile.rb&quot;, &quot;lib/rad/hardware_library.rb&quot;, &quot;lib/rad/init.rb&quot;, &quot;lib/rad/rad_processor.rb&quot;, &quot;lib/rad/rad_rewriter.rb&quot;, &quot;lib/rad/rad_type_checker.rb&quot;, &quot;lib/rad/sim/arduino_sketch.rb&quot;, &quot;lib/rad/sketch_compiler.rb&quot;, &quot;lib/rad/tasks/build_and_make.rake&quot;, &quot;lib/rad/tasks/rad.rb&quot;, &quot;lib/rad/todo.txt&quot;, &quot;lib/rad/variable_processing.rb&quot;, &quot;lib/rad/version.rb&quot;, &quot;scripts/txt2html&quot;, &quot;setup.rb&quot;, &quot;spec/examples/hello_world.rb&quot;, &quot;spec/examples/serial_motor.rb&quot;, &quot;spec/models/arduino_sketch_spec.rb&quot;, &quot;spec/models/sketch_compiler_spec.rb&quot;, &quot;spec/models/spec_helper.rb&quot;, &quot;spec/sim/hello_world_spec.rb&quot;, &quot;spec/spec.opts&quot;, &quot;test/test_array_processing.rb&quot;, &quot;test/test_plugin_loading.rb&quot;, &quot;test/test_translation_post_processing.rb&quot;, &quot;test/test_variable_processing.rb&quot;, &quot;website/index.html&quot;, &quot;website/index.txt&quot;, &quot;website/javascripts/rounded_corners_lite.inc.js&quot;, &quot;website/stylesheets/screen.css&quot;, &quot;website/template.rhtml&quot;, &quot;website/examples/assembler_test.rb.html&quot;, &quot;website/examples/gps_reader.rb.html&quot;, &quot;website/examples/hello_world.rb.html&quot;, &quot;website/examples/serial_motor.rb.html&quot;]
   s.test_files = []
   s.rdoc_options = [&quot;--main&quot;, &quot;README.rdoc&quot;]
   s.require_paths = [&quot;lib&quot;]</diff>
      <filename>rad.gemspec</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>cb8a6c43a6a99428b3a86af92038217aa95980d2</id>
    </parent>
    <parent>
      <id>41e0c18ef92f278beee2d6bd55d3970b1e74a26b</id>
    </parent>
  </parents>
  <author>
    <name>Greg Borenstein</name>
    <email>greg@mfdz.com</email>
  </author>
  <url>http://github.com/atduskgreg/rad/commit/ac37507755f45b2a9358374286e5138c4d140e4e</url>
  <id>ac37507755f45b2a9358374286e5138c4d140e4e</id>
  <committed-date>2008-09-21T17:55:55-07:00</committed-date>
  <authored-date>2008-09-21T17:55:55-07:00</authored-date>
  <message>merging changes to bin/rad, adding software_serial example</message>
  <tree>4496c3abebf89691e278788e146f26688adb20cc</tree>
  <committer>
    <name>Greg Borenstein</name>
    <email>greg@mfdz.com</email>
  </committer>
</commit>
