beaglebone 1.0.4 → 1.0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2e81b55e60fccf3fe77f817e676d3cb0eefe32e0
4
- data.tar.gz: 0de69ddacb24ca2703ddf2c5192a8d97c12a3fa5
3
+ metadata.gz: 7ebe3395979d7ccd5ddbd563705281820b5ed54d
4
+ data.tar.gz: ef2f2c1bb2f50761e5837472c3777781ff767297
5
5
  SHA512:
6
- metadata.gz: dc992fe711c42c03d70cd62d974659345abe8eadf0ec54e33907447acef4cee6c3523f35d0da1278afd6e1bdb06068f092c74c845592f6427517a262e28a3def
7
- data.tar.gz: e93429663cd19116da5eaa610000843953d58b0b6820384c79ba186e902f00a72b64247df01dafcdc5d05e381098bc8a577e970ba62be7b3017c780969c9c65a
6
+ metadata.gz: 911649b330a3dfbd7ba1f21bfb0b4763b4ba9842513138bc460c71297d34ca63cac7005ce133f9aff2b43b321473ffc711ab02a1b0a63c1ecbe2902ab961e5d3
7
+ data.tar.gz: e9b5b5dd6fd8ebf76c40758fe7a6d44fa9187df710d948cb8007f8aa020b4705a48417b7d8db630188fb0fc5f468b147fc79ff1927e15cef0c28f5bfbfe397c7
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'beaglebone'
3
- s.version = '1.0.4'
3
+ s.version = '1.0.5'
4
4
  s.date = '2014-04-13'
5
5
  s.summary = 'Beaglebone IO Gem'
6
6
  s.description = 'A Full Featured Beaglebone IO Gem'
@@ -12,7 +12,7 @@ i2c = I2CDevice.new(:I2C2)
12
12
  i2c.write(0x1e, [0x02, 0x00].pack("C*"))
13
13
 
14
14
  #enable temperatuer sensor, 15hz register update
15
- i2c.write(0x1e, [0x00, "10010000".to_i(2)].pack("C*") )
15
+ i2c.write(0x1e, [0x00, 0b10010000].pack("C*") )
16
16
 
17
17
  #delay for the settings to take effect
18
18
  sleep(0.1)
@@ -66,7 +66,7 @@ I2C.setup(:I2C2)
66
66
  #put mag into continuous conversation mode
67
67
  I2C.write(:I2C2, 0x1e, [0x02, 0x00].pack("C*"))
68
68
  #enable temperatuer sensor, 15hz register update
69
- I2C.write(:I2C2, 0x1e, [0x00, "10010000".to_i(2)].pack("C*") )
69
+ I2C.write(:I2C2, 0x1e, [0x00, 0b10010000].pack("C*") )
70
70
  #delay for the settings to take effect
71
71
  sleep(0.1)
72
72
 
@@ -1,11 +1,11 @@
1
1
  # == ain.rb
2
2
  # This file contains the Analog Input methods
3
3
  module Beaglebone #:nodoc:
4
- # AIN
4
+ # == AIN
5
5
  # procedural methods for Analog Input
6
6
  # == Summary
7
- # #read is called to get the analog value of a pin
8
- # more advanced polling methods are also available
7
+ # #read is called to get the analog value of a pin.
8
+ # More advanced polling methods are also available
9
9
  module AIN
10
10
  class << self
11
11
 
@@ -45,8 +45,8 @@ module Beaglebone #:nodoc:
45
45
  ain_fd.read.strip.to_i
46
46
  end
47
47
 
48
- # Runs a callback after voltage changes by specified amount
49
- # This creates a new thread that runs in the background and polls at specified interval
48
+ # Runs a callback after voltage changes by specified amount.
49
+ # This creates a new thread that runs in the background and polls at specified interval.
50
50
  #
51
51
  # @param callback A method to call when the change is detected. This method should take 4 arguments: the pin, the previous voltage, the current voltage, and the counter
52
52
  # @param pin should be a symbol representing the header pin, i.e. :P9_11
@@ -99,9 +99,9 @@ module Beaglebone #:nodoc:
99
99
  run_on_change(callback, pin, mv_change, interval, 1)
100
100
  end
101
101
 
102
- # Runs a callback after voltage changes beyond a certain threshold
103
- # This creates a new thread that runs in the background and polls at specified interval
104
- # When the voltage crosses the specified thresholds the callback is run
102
+ # Runs a callback after voltage changes beyond a certain threshold.
103
+ # This creates a new thread that runs in the background and polls at specified interval.
104
+ # When the voltage crosses the specified thresholds the callback is run.
105
105
  #
106
106
  # @param callback A method to call when the change is detected. This method should take 6 arguments: the pin, the previous voltage, the current voltage, the previous state, the current state, and the counter
107
107
  # @param pin should be a symbol representing the header pin, i.e. :P9_11
@@ -153,7 +153,7 @@ module Beaglebone #:nodoc:
153
153
  Beaglebone::set_pin_status(pin, :thread, thread)
154
154
  end
155
155
 
156
- # Runs a callback once after voltage crosses a specified threshold
156
+ # Runs a callback once after voltage crosses a specified threshold.
157
157
  # Convenience method for run_on_threshold
158
158
  # @see #run_on_threshold
159
159
  def run_once_on_threshold(callback, pin, mv_lower, mv_upper, mv_reset=10, interval=0.01)
@@ -162,9 +162,9 @@ module Beaglebone #:nodoc:
162
162
 
163
163
  # noinspection RubyScope
164
164
 
165
- # Runs a callback after voltage changes beyond a certain threshold
166
- # This creates a new thread that runs in the background and polls at specified interval
167
- # When the voltage crosses the specified thresholds the callback is run
165
+ # Runs a callback after voltage changes beyond a certain threshold.
166
+ # This creates a new thread that runs in the background and polls at specified interval.
167
+ # When the voltage crosses the specified thresholds the callback is run.
168
168
  #
169
169
  # This method should take 6 arguments:
170
170
  # the pin, the previous voltage, the current voltage, the previous state, the current state, and the counter
@@ -374,8 +374,8 @@ module Beaglebone #:nodoc:
374
374
  AIN::read(@pin)
375
375
  end
376
376
 
377
- # Runs a callback after voltage changes by specified amount
378
- # This creates a new thread that runs in the background and polls at specified interval
377
+ # Runs a callback after voltage changes by specified amount.
378
+ # This creates a new thread that runs in the background and polls at specified interval.
379
379
  #
380
380
  # @param callback A method to call when the change is detected
381
381
  # This method should take 4 arguments: the pin, the previous voltage, the current voltage, and the counter
@@ -399,13 +399,11 @@ module Beaglebone #:nodoc:
399
399
  end
400
400
 
401
401
 
402
- # Runs a callback after voltage changes beyond a certain threshold
403
- # This creates a new thread that runs in the background and polls at specified interval
404
- # When the voltage crosses the specified thresholds the callback is run
402
+ # Runs a callback after voltage changes beyond a certain threshold.
403
+ # This creates a new thread that runs in the background and polls at specified interval.
404
+ # When the voltage crosses the specified thresholds the callback is run.
405
405
  #
406
- # @param callback A method to call when the change is detected
407
- # This method should take 6 arguments:
408
- # the pin, the previous voltage, the current voltage, the previous state, the current state, and the counter
406
+ # @param callback A method to call when the change is detected. This method should take 6 arguments: the pin, the previous voltage, the current voltage, the previous state, the current state, and the counter
409
407
  # @param mv_lower an integer specifying the lower threshold voltage
410
408
  # @param mv_upper an integer specifying the upper threshold voltage
411
409
  # @param mv_reset an integer specifying the range in mv required to reset the threshold trigger
@@ -425,7 +423,7 @@ module Beaglebone #:nodoc:
425
423
  end
426
424
 
427
425
 
428
- # Runs a callback once after voltage crosses a specified threshold
426
+ # Runs a callback once after voltage crosses a specified threshold.
429
427
  # Convenience method for run_on_threshold
430
428
  def run_once_on_threshold(callback, mv_lower, mv_upper, mv_reset=10, interval=0.01)
431
429
  AIN::run_once_on_threshold(callback, @pin, mv_lower, mv_upper, mv_reset, interval)
@@ -89,10 +89,8 @@ module Beaglebone
89
89
  :P9_15 => { :gpio => 48 },
90
90
  :P9_16 => { :gpio => 51, :pwm => 'pwm_1b', :pwm_id => 1, :pwm_mux => 6 },
91
91
  #17 and 18 are not currently working for gpio in 3.8
92
- #:P9_17 => { :gpio => 4, :i2c => 'i2c1_scl', :i2c_id => 1, :spi => 'spi0_cs0', :spi_id => 0 },
93
- #:P9_18 => { :gpio => 5, :i2c => 'i2c1_sda', :i2c_id => 1, :spi => 'spi0_d1', :spi_id => 0 },
94
- :P9_17 => { :i2c => 'i2c1_scl', :i2c_id => 1, :spi => 'spi0_cs0', :spi_id => 0 },
95
- :P9_18 => { :i2c => 'i2c1_sda', :i2c_id => 1, :spi => 'spi0_d1', :spi_id => 0 },
92
+ :P9_17 => { :gpio => 4, :i2c => 'i2c1_scl', :i2c_id => 1, :spi => 'spi0_cs0', :spi_id => 0 },
93
+ :P9_18 => { :gpio => 5, :i2c => 'i2c1_sda', :i2c_id => 1, :spi => 'spi0_d1', :spi_id => 0 },
96
94
  :P9_19 => { :i2c => 'i2c2_scl', :i2c_id => 2, :uart => 'uart1_rtsn', :uart_id => 1, :spi => 'spi1_cs1', :spi_id => 1 },
97
95
  :P9_20 => { :i2c => 'i2c2_sda', :i2c_id => 2, :uart => 'uart1_ctsn', :uart_id => 1, :spi => 'spi1_cs0', :spi_id => 1 },
98
96
  :P9_21 => { :gpio => 3, :pwm => 'pwm_0b', :pwm_id => 0, :pwm_mux => 3, :i2c => 'i2c2_scl', :i2c_id => 2, :uart => 'uart2_txd', :uart_id => 2, :spi => 'spi0_d0', :spi_id => 0 },
@@ -175,6 +173,7 @@ module Beaglebone
175
173
  class << self
176
174
  attr_accessor :pinstatus, :pinmutex, :loaded_dtbs
177
175
 
176
+ # @private
178
177
  # get hash entry for pin
179
178
  def get_pin_status(pin, key = nil)
180
179
  pinmutex.synchronize do
@@ -186,6 +185,7 @@ module Beaglebone
186
185
  end
187
186
  end
188
187
 
188
+ # @private
189
189
  # set hash entry for pin
190
190
  def set_pin_status(pin, key, value)
191
191
  pinmutex.synchronize do
@@ -194,6 +194,7 @@ module Beaglebone
194
194
  end
195
195
  end
196
196
 
197
+ # @private
197
198
  # delete pin's hash entry
198
199
  def delete_pin_status(pin, key = nil)
199
200
  pinmutex.synchronize do
@@ -2,7 +2,7 @@
2
2
  # This file contains the GPIO methods
3
3
 
4
4
  module Beaglebone #:nodoc:
5
- # GPIO
5
+ # == GPIO
6
6
  # procedural methods for GPIO control
7
7
  # == Summary
8
8
  # #pin_mode is called to initialize a pin.
@@ -101,7 +101,7 @@ module Beaglebone #:nodoc:
101
101
  Beaglebone::set_pin_status(pin, :state, state)
102
102
  end
103
103
 
104
- # Runs a callback on an edge trigger event
104
+ # Runs a callback on an edge trigger event.
105
105
  # This creates a new thread that runs in the background
106
106
  #
107
107
  # @param callback A method to call when the edge trigger is detected. This method should take 3 arguments, the pin, the edge, and the counter
@@ -139,8 +139,8 @@ module Beaglebone #:nodoc:
139
139
  Beaglebone::set_pin_status(pin, :thread, thread)
140
140
  end
141
141
 
142
- # Runs a callback one time on an edge trigger event
143
- # this is a convenience method for run_on_edge
142
+ # Runs a callback one time on an edge trigger event.
143
+ # This is a convenience method for run_on_edge
144
144
  # @see #run_on_edge
145
145
  def run_once_on_edge(callback, pin, edge, timeout = nil)
146
146
  run_on_edge(callback, pin, edge, timeout, 1)
@@ -156,7 +156,7 @@ module Beaglebone #:nodoc:
156
156
  thread.join if thread
157
157
  end
158
158
 
159
- # Wait for an edge trigger
159
+ # Wait for an edge trigger.
160
160
  # Returns the type that triggered the event, e.g. :RISING, :FALLING, :BOTH
161
161
  #
162
162
  # @returns [Symbol] :RISING, :FALLING, or :BOTH
@@ -221,8 +221,8 @@ module Beaglebone #:nodoc:
221
221
  # Sends data to a shift register
222
222
  #
223
223
  # @param latch_pin should be a symbol representing the header pin, i.e. :P9_12
224
- # @param clock_pin should be a symbol representing the header pin, i.e. :P9_12
225
- # @param data_pin should be a symbol representing the header pin, i.e. :P9_12
224
+ # @param clock_pin should be a symbol representing the header pin, i.e. :P9_13
225
+ # @param data_pin should be a symbol representing the header pin, i.e. :P9_14
226
226
  # @param data Integer value to write to the shift register
227
227
  # @param lsb optional, send least significant bit first if set
228
228
  #
@@ -505,7 +505,7 @@ module Beaglebone #:nodoc:
505
505
  GPIO::digital_read(@pin)
506
506
  end
507
507
 
508
- # Runs a callback on an edge trigger event
508
+ # Runs a callback on an edge trigger event.
509
509
  # This creates a new thread that runs in the background
510
510
  #
511
511
  # @param callback A method to call when the edge trigger is detected. This method should take 3 arguments, the pin, the edge, and the counter
@@ -520,7 +520,7 @@ module Beaglebone #:nodoc:
520
520
  GPIO::run_on_edge(callback, @pin, edge, timeout, repeats)
521
521
  end
522
522
 
523
- # Runs a callback one time on an edge trigger event
523
+ # Runs a callback one time on an edge trigger event.
524
524
  # this is a convenience method for run_on_edge
525
525
  # @see #run_on_edge
526
526
  def run_once_on_edge(callback, edge, timeout=nil)
@@ -533,7 +533,7 @@ module Beaglebone #:nodoc:
533
533
  GPIO::stop_edge_wait(@pin)
534
534
  end
535
535
 
536
- # Wait for an edge trigger
536
+ # Wait for an edge trigger.
537
537
  # Returns the type that triggered the event, e.g. :RISING, :FALLING, :BOTH
538
538
  #
539
539
  # @return [Symbol] :RISING, :FALLING, or :BOTH
@@ -1,5 +1,10 @@
1
- module Beaglebone
2
-
1
+ # == i2c.rb
2
+ # This file contains I2C methods
3
+ module Beaglebone #:nodoc:
4
+ # == I2C
5
+ # Procedural methods for I2C control
6
+ # == Summary
7
+ # #setup is called to initialize an I2C device
3
8
  module I2C
4
9
 
5
10
  I2C_SLAVE = 0x0703
@@ -10,6 +15,48 @@ module Beaglebone
10
15
  class << self
11
16
  attr_accessor :i2cstatus, :i2cmutex
12
17
 
18
+ # Initialize an I2C device
19
+ #
20
+ # @param i2c should be a symbol representing the I2C device
21
+ #
22
+ # @example
23
+ # I2C.setup(:I2C2)
24
+ def setup(i2c)
25
+ check_i2c_valid(i2c)
26
+
27
+ #make sure i2c not already enabled
28
+ return if get_i2c_status(i2c)
29
+
30
+ i2cinfo = I2CS[i2c]
31
+
32
+ #ensure dtb is loaded
33
+ Beaglebone::device_tree_load("#{i2cinfo[:devicetree]}") if i2cinfo[:devicetree]
34
+
35
+ #open the i2c device
36
+ i2c_fd = File.open(i2cinfo[:dev], 'r+')
37
+
38
+ Beaglebone::set_pin_status(i2cinfo[:scl], :i2c, i2cinfo[:id])
39
+ Beaglebone::set_pin_status(i2cinfo[:scl], :type, :i2c)
40
+ Beaglebone::set_pin_status(i2cinfo[:scl], :fd_i2c, i2c_fd)
41
+
42
+ Beaglebone::set_pin_status(i2cinfo[:sda], :i2c, i2cinfo[:id])
43
+ Beaglebone::set_pin_status(i2cinfo[:sda], :type, :i2c)
44
+ Beaglebone::set_pin_status(i2cinfo[:sda], :fd_i2c, i2c_fd)
45
+
46
+ set_i2c_status(i2c, :fd_i2c, i2c_fd)
47
+ set_i2c_status(i2c, :mutex, Mutex.new)
48
+ end
49
+
50
+ # Write data to an I2C device
51
+ #
52
+ # @param i2c should be a symbol representing the I2C device
53
+ # @param address the address of the slave device
54
+ # @param data the data to write
55
+ #
56
+ # @return Integer the number of bytes written
57
+ #
58
+ # @example
59
+ # I2C.write(:I2C2, 0x1e, [0x00, 0b10010000].pack("C*") )
13
60
  def write(i2c, address, data)
14
61
  check_i2c_enabled(i2c)
15
62
 
@@ -21,9 +68,19 @@ module Beaglebone
21
68
 
22
69
  i2c_fd.syswrite(data)
23
70
  end
24
-
25
71
  end
26
72
 
73
+ # Read data from an I2C device
74
+ #
75
+ # @param i2c should be a symbol representing the I2C device
76
+ # @param address the address of the slave device
77
+ # @param bytes bytes to read
78
+ # @param register optional register to read from
79
+ #
80
+ # @example
81
+ # # read 3 big endian signed shorts starting at register 0x03
82
+ # data = I2C.read(:I2C2, 0x1e, 6, [0x03].pack("C*"))
83
+ # x,z,y = raw.unpack("s>*")
27
84
  def read(i2c, address, bytes=1, register=nil)
28
85
  check_i2c_enabled(i2c)
29
86
 
@@ -42,37 +99,19 @@ module Beaglebone
42
99
  data
43
100
  end
44
101
 
102
+ # Return the file descriptor to the open I2C device
103
+ #
104
+ # @param i2c should be a symbol representing the I2C device
45
105
  def file(i2c)
46
106
  check_i2c_enabled(i2c)
47
107
  get_i2c_status(i2c, :fd_i2c)
48
108
  end
49
109
 
50
- def setup(i2c)
51
- check_i2c_valid(i2c)
52
-
53
- #make sure i2c not already enabled
54
- return if get_i2c_status(i2c)
55
-
56
- i2cinfo = I2CS[i2c]
57
-
58
- #ensure dtb is loaded
59
- Beaglebone::device_tree_load("#{i2cinfo[:devicetree]}") if i2cinfo[:devicetree]
60
-
61
- #open the i2c device
62
- i2c_fd = File.open(i2cinfo[:dev], 'r+')
63
-
64
- Beaglebone::set_pin_status(i2cinfo[:scl], :i2c, i2cinfo[:id])
65
- Beaglebone::set_pin_status(i2cinfo[:scl], :type, :i2c)
66
- Beaglebone::set_pin_status(i2cinfo[:scl], :fd_i2c, i2c_fd)
67
-
68
- Beaglebone::set_pin_status(i2cinfo[:sda], :i2c, i2cinfo[:id])
69
- Beaglebone::set_pin_status(i2cinfo[:sda], :type, :i2c)
70
- Beaglebone::set_pin_status(i2cinfo[:sda], :fd_i2c, i2c_fd)
71
-
72
- set_i2c_status(i2c, :fd_i2c, i2c_fd)
73
- set_i2c_status(i2c, :mutex, Mutex.new)
74
- end
75
-
110
+ # Disable the specified I2C device.
111
+ #
112
+ # @note device trees cannot be unloaded at this time without kernel panic.
113
+ #
114
+ # @param i2c should be a symbol representing the I2C device
76
115
  def disable(i2c)
77
116
  check_i2c_valid(i2c)
78
117
  check_i2c_enabled(i2c)
@@ -87,6 +126,7 @@ module Beaglebone
87
126
 
88
127
  end
89
128
 
129
+ # Disable all active I2C interfaces
90
130
  def cleanup
91
131
  #reset all i2cs we've used and unload the device tree
92
132
  i2cstatus.clone.keys.each { |i2c| disable(i2c)}
@@ -94,12 +134,14 @@ module Beaglebone
94
134
 
95
135
  private
96
136
 
137
+ # disable i2c pin
97
138
  def disable_i2c_pin(pin)
98
139
  Beaglebone::check_valid_pin(pin, :i2c)
99
140
 
100
141
  Beaglebone::delete_pin_status(pin)
101
142
  end
102
143
 
144
+ # ensure valid i2c device
103
145
  def check_i2c_valid(i2c)
104
146
  raise ArgumentError, "Invalid i2c Specified #{i2c.to_s}" unless I2CS[i2c] && I2CS[i2c][:sda]
105
147
  i2cinfo = I2CS[i2c.to_sym.upcase]
@@ -114,10 +156,12 @@ module Beaglebone
114
156
 
115
157
  end
116
158
 
159
+ # ensure i2c device is enabled
117
160
  def check_i2c_enabled(i2c)
118
161
  raise ArgumentError, "i2c not enabled #{i2c.to_s}" unless get_i2c_status(i2c)
119
162
  end
120
163
 
164
+ # lock i2c device
121
165
  def lock_i2c(i2c)
122
166
  check_i2c_enabled(i2c)
123
167
  mutex = get_i2c_status(i2c, :mutex)
@@ -127,6 +171,7 @@ module Beaglebone
127
171
  end
128
172
  end
129
173
 
174
+ # i2c hash getter
130
175
  def get_i2c_status(i2c, key = nil)
131
176
  i2cmutex.synchronize do
132
177
  if key
@@ -137,6 +182,7 @@ module Beaglebone
137
182
  end
138
183
  end
139
184
 
185
+ # i2c hash setter
140
186
  def set_i2c_status(i2c, key, value)
141
187
  i2cmutex.synchronize do
142
188
  i2cstatus[i2c] ||= {}
@@ -144,6 +190,7 @@ module Beaglebone
144
190
  end
145
191
  end
146
192
 
193
+ # i2c hash delete
147
194
  def delete_i2c_status(i2c, key = nil)
148
195
  i2cmutex.synchronize do
149
196
  if key.nil?
@@ -157,30 +204,57 @@ module Beaglebone
157
204
  end
158
205
  end
159
206
 
160
- #oo interface
207
+ # Object Oriented I2C Implementation.
208
+ # This treats the I2C device as an object.
161
209
  class I2CDevice
162
-
210
+ # Initialize an I2C device. Returns an I2CDevice object
211
+ #
212
+ # @param i2c should be a symbol representing the I2C device
213
+ #
214
+ # @example
215
+ # i2c = I2CDevice.new(:I2C2)
163
216
  def initialize(i2c)
164
217
  @i2c = i2c
165
218
  I2C::setup(@i2c)
166
219
  end
167
220
 
168
- def read(address, bytes=1, register=nil)
169
- I2C::read(@i2c, address, bytes, register)
170
- end
171
-
221
+ # Write data to an I2C device
222
+ #
223
+ # @param address the address of the slave device
224
+ # @param data the data to write
225
+ #
226
+ # @return Integer the number of bytes written
227
+ #
228
+ # @example
229
+ # i2c.write(0x1e, [0x00, 0b10010000].pack("C*") )
172
230
  def write(address, data)
173
231
  I2C::write(@i2c, address, data)
174
232
  end
175
233
 
234
+ # Read data from an I2C device
235
+ #
236
+ # @param address the address of the slave device
237
+ # @param bytes bytes to read
238
+ # @param register optional register to read from
239
+ #
240
+ # @example
241
+ # # read 3 big endian signed shorts starting at register 0x03
242
+ # data = i2c.read(0x1e, 6, [0x03].pack("C*"))
243
+ # x,z,y = raw.unpack("s>*")
244
+ def read(address, bytes=1, register=nil)
245
+ I2C::read(@i2c, address, bytes, register)
246
+ end
247
+
248
+ # Disable the specified I2C device.
249
+ #
250
+ # @note device trees cannot be unloaded at this time without kernel panic.
176
251
  def disable
177
252
  I2C::disable(@i2c)
178
253
  end
179
254
 
255
+ # Return the file descriptor to the open I2C device
180
256
  def file
181
257
  I2C::file(@i2c)
182
258
  end
183
-
184
259
  end
185
-
186
260
  end