beaglebone 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,322 @@
1
+ module Beaglebone
2
+
3
+ module SPI
4
+ #some ioctl defines
5
+ IOC_NONE = 0
6
+ IOC_WRITE = 1
7
+ IOC_READ = 2
8
+
9
+ IOC_NRBITS = 8
10
+ IOC_TYPEBITS = 8
11
+ IOC_SIZEBITS = 14
12
+ IOC_DIRBITS = 2
13
+
14
+ IOC_NRSHIFT = 0
15
+ IOC_TYPESHIFT = IOC_NRSHIFT+IOC_NRBITS
16
+ IOC_SIZESHIFT = IOC_TYPESHIFT+IOC_TYPEBITS
17
+ IOC_DIRSHIFT = IOC_SIZESHIFT+IOC_SIZEBITS
18
+
19
+ #spi defines
20
+ SPI_CPHA = 0x01
21
+ SPI_CPOL = 0x02
22
+
23
+ SPI_MODE_0 = (0|0)
24
+ SPI_MODE_1 = (0|SPI_CPHA)
25
+ SPI_MODE_2 = (SPI_CPOL|0)
26
+ SPI_MODE_3 = (SPI_CPOL|SPI_CPHA)
27
+
28
+ SPI_CS_HIGH = 0x04
29
+ SPI_LSB_FIRST = 0x08
30
+ SPI_3WIRE = 0x10
31
+ SPI_LOOP = 0x20
32
+ SPI_NO_CS = 0x40
33
+ SPI_READY = 0x80
34
+
35
+ SPI_IOC_MAGIC = 'k'.ord
36
+
37
+ SPI_IOC_RD_MODE = 2147576577 #ior(SPI_IOC_MAGIC, 1, 1)
38
+ SPI_IOC_WR_MODE = 1073834753 #iow(SPI_IOC_MAGIC, 1, 1)
39
+
40
+ SPI_IOC_RD_LSB_FIRST = 2147576578 #ior(SPI_IOC_MAGIC, 2, 1)
41
+ SPI_IOC_WR_LSB_FIRST = 1073834754 #iow(SPI_IOC_MAGIC, 2, 1)
42
+
43
+ SPI_IOC_RD_BITS_PER_WORD = 2147576579 #ior(SPI_IOC_MAGIC, 3, 1)
44
+ SPI_IOC_WR_BITS_PER_WORD = 1073834755 #iow(SPI_IOC_MAGIC, 3, 1)
45
+
46
+ SPI_IOC_RD_MAX_SPEED_HZ = 2147773188 #ior(SPI_IOC_MAGIC, 4, 4)
47
+ SPI_IOC_WR_MAX_SPEED_HZ = 1074031364 #iow(SPI_IOC_MAGIC, 4, 4)
48
+
49
+ SPI_IOC_MESSAGE_1 = 1075866368
50
+
51
+ SPI_IOC_TRANSFER_STRUCT_SIZE = 32
52
+
53
+ @spistatus = {}
54
+ @spimutex = Mutex.new
55
+
56
+ class << self
57
+
58
+ attr_accessor :spistatus, :spimutex
59
+ def xfer(spi, tx_data, readbytes=0, speed=nil, delay=nil, bpw=nil)
60
+ check_spi_enabled(spi)
61
+
62
+ speed = speed || get_spi_status(spi, :speed)
63
+ delay = delay || 0
64
+ bpw = bpw || get_spi_status(spi, :bpw)
65
+
66
+ if tx_data.size > readbytes
67
+ readbytes = tx_data.size
68
+ end
69
+
70
+ rx_data = ' ' * readbytes
71
+
72
+ lock_spi(spi) do
73
+ spi_fd = get_spi_status(spi, :fd_spi)
74
+
75
+ ### SPI IOC transfer structure
76
+ # __u64 tx_buf;
77
+ # __u64 rx_buf;
78
+ #
79
+ # __u32 len;
80
+ # __u32 speed_hz;
81
+ #
82
+ # __u16 delay_usecs;
83
+ # __u8 bits_per_word;
84
+ # __u8 cs_change;
85
+ # __u32 pad;
86
+ ###
87
+
88
+ msg = [ tx_data, 0,
89
+ rx_data, 0,
90
+ readbytes,
91
+ speed,
92
+ delay,
93
+ bpw,
94
+ 0,
95
+ 0].pack('pLpLLLSCCL')
96
+
97
+ #ioctl call to begin data transfer
98
+ spi_fd.ioctl(SPI_IOC_MESSAGE_1, msg)
99
+ #speedup with defined int
100
+ #spi_fd.ioctl(spi_ioc_message(1), msg)
101
+
102
+ end
103
+ rx_data
104
+ end
105
+
106
+ def file(spi)
107
+ check_spi_enabled(spi)
108
+ get_spi_status(spi, :fd_spi)
109
+ end
110
+
111
+ def set_speed(spi, speed)
112
+ speed = speed.to_i
113
+ raise ArgumentError, "Speed (#{speed.to_s}) must be a positive integer" unless speed > 0
114
+
115
+ check_spi_enabled(spi)
116
+ spi_fd = get_spi_status(spi, :fd_spi)
117
+
118
+ spi_fd.ioctl(SPI_IOC_WR_MAX_SPEED_HZ, [speed].pack('L'))
119
+ spi_fd.ioctl(SPI_IOC_RD_MAX_SPEED_HZ, [speed].pack('L'))
120
+ set_spi_status(spi, :speed, speed)
121
+ end
122
+
123
+ def set_mode(spi, mode)
124
+ check_spi_enabled(spi)
125
+ raise ArgumentError, "Mode (#{mode.to_s}) is unknown" unless [SPI_MODE_0, SPI_MODE_1, SPI_MODE_2, SPI_MODE_3].include?(mode)
126
+ spi_fd = get_spi_status(spi, :fd_spi)
127
+
128
+ spi_fd.ioctl(SPI_IOC_WR_MODE, [mode].pack('C'))
129
+ spi_fd.ioctl(SPI_IOC_RD_MODE, [mode].pack('C'))
130
+ end
131
+
132
+ def set_bpw(spi, bpw)
133
+ bpw = bpw.to_i
134
+ raise ArgumentError, "BPW (#{bpw.to_s}) must be a positive integer" unless bpw > 0
135
+
136
+ check_spi_enabled(spi)
137
+ spi_fd = get_spi_status(spi, :fd_spi)
138
+
139
+ spi_fd.ioctl(SPI_IOC_WR_BITS_PER_WORD, [bpw].pack('C'))
140
+ spi_fd.ioctl(SPI_IOC_RD_BITS_PER_WORD, [bpw].pack('C'))
141
+ set_spi_status(spi, :bpw, bpw)
142
+ end
143
+
144
+ def setup(spi, mode=nil, speed=1000000, bpw=8)
145
+ check_spi_valid(spi)
146
+
147
+ #make sure spi not already enabled
148
+ return if get_spi_status(spi)
149
+
150
+ mode = mode || SPI_MODE_0
151
+
152
+ spiinfo = SPIS[spi]
153
+
154
+ #ensure dtb is loaded
155
+ Beaglebone::device_tree_load("#{spiinfo[:devicetree]}") if spiinfo[:devicetree]
156
+
157
+ #open the spi device.
158
+ spi_fd = File.open("#{spiinfo[:dev]}#{SPIS[:counter]}.0", 'r+')
159
+
160
+ set_spi_status(spi, :fd_spi, spi_fd)
161
+ set_spi_status(spi, :mutex, Mutex.new)
162
+
163
+ set_mode(spi, mode)
164
+ set_bpw(spi, bpw)
165
+ set_speed(spi, speed)
166
+
167
+ SPIS[:counter] += 1
168
+
169
+ spiinfo[:pins].each do |pin|
170
+ Beaglebone::set_pin_status(pin, :spi, spiinfo[:id])
171
+ Beaglebone::set_pin_status(pin, :type, :spi)
172
+ Beaglebone::set_pin_status(pin, :fd_spi, spi_fd)
173
+ end
174
+
175
+ end
176
+
177
+ def disable(spi)
178
+ check_spi_valid(spi)
179
+ check_spi_enabled(spi)
180
+
181
+ SPIS[spi][:pins].each do |pin|
182
+ disable_spi_pin(pin)
183
+ end
184
+
185
+ delete_spi_status(spi)
186
+
187
+ #removing spi tree causes a crash... can't really disable.
188
+ #Beaglebone::device_tree_unload("#{SPIS[spi][:devicetree]}") if SPIS[spi][:devicetree]
189
+
190
+ end
191
+
192
+ def cleanup
193
+ #reset all spis we've used and unload the device tree
194
+ spistatus.clone.keys.each { |spi| disable(spi)}
195
+ end
196
+
197
+ private
198
+
199
+ def check_spi_valid(spi)
200
+ raise ArgumentError, "Invalid spi Specified #{spi.to_s}" unless SPIS[spi] && SPIS[spi][:sclk]
201
+ spiinfo = SPIS[spi.to_sym.upcase]
202
+
203
+ unless spiinfo[:sclk] && [nil,:spi].include?(Beaglebone::get_pin_status(spiinfo[:sclk], :type))
204
+ raise StandardError, "SCLK Pin for #{spi.to_s} in use"
205
+ end
206
+
207
+ unless spiinfo[:d0] && [nil,:spi].include?(Beaglebone::get_pin_status(spiinfo[:d0], :type))
208
+ raise StandardError, "D0 Pin for #{spi.to_s} in use"
209
+ end
210
+
211
+ unless spiinfo[:d1] && [nil,:spi].include?(Beaglebone::get_pin_status(spiinfo[:d1], :type))
212
+ raise StandardError, "D1 Pin for #{spi.to_s} in use"
213
+ end
214
+
215
+ unless spiinfo[:cs0] && [nil,:spi].include?(Beaglebone::get_pin_status(spiinfo[:cs0], :type))
216
+ raise StandardError, "CS0 Pin for #{spi.to_s} in use"
217
+ end
218
+ end
219
+
220
+ def lock_spi(spi)
221
+ check_spi_enabled(spi)
222
+ mutex = get_spi_status(spi, :mutex)
223
+
224
+ mutex.synchronize do
225
+ yield
226
+ end
227
+ end
228
+
229
+ def check_spi_enabled(spi)
230
+ raise ArgumentError, "spi not enabled #{spi.to_s}" unless get_spi_status(spi)
231
+ end
232
+
233
+ def disable_spi_pin(pin)
234
+ Beaglebone::check_valid_pin(pin, :spi)
235
+
236
+ Beaglebone::delete_pin_status(pin)
237
+ end
238
+
239
+ #ports of ioctl definitions
240
+ def ioc(dir,type,nr,size)
241
+ (((dir) << IOC_DIRSHIFT) |
242
+ ((type) << IOC_TYPESHIFT) |
243
+ ((nr) << IOC_NRSHIFT) |
244
+ ((size) << IOC_SIZESHIFT))
245
+ end
246
+
247
+ def ior(type,nr,size)
248
+ ioc(IOC_READ,(type),(nr),size)
249
+ end
250
+
251
+ def iow(type,nr,size)
252
+ ioc(IOC_WRITE,(type),(nr),size)
253
+ end
254
+
255
+ def spi_msgsize(n)
256
+ n*SPI_IOC_TRANSFER_STRUCT_SIZE < 1<<IOC_SIZEBITS ? n*SPI_IOC_TRANSFER_STRUCT_SIZE : 0
257
+ end
258
+
259
+ def spi_ioc_message(n)
260
+ iow(SPI_IOC_MAGIC, 0, spi_msgsize(n))
261
+ end
262
+
263
+ def get_spi_status(spi, key = nil)
264
+ spimutex.synchronize do
265
+ if key
266
+ spistatus[spi] ? spistatus[spi][key] : nil
267
+ else
268
+ spistatus[spi]
269
+ end
270
+ end
271
+ end
272
+
273
+ def set_spi_status(spi, key, value)
274
+ spimutex.synchronize do
275
+ spistatus[spi] ||= {}
276
+ spistatus[spi][key] = value
277
+ end
278
+ end
279
+
280
+ def delete_spi_status(spi, key = nil)
281
+ spimutex.synchronize do
282
+ if key.nil?
283
+ spistatus.delete(spi)
284
+ else
285
+ spistatus[spi].delete(key) if spistatus[spi]
286
+ end
287
+ end
288
+ end
289
+
290
+ end
291
+ end
292
+
293
+ #oo interface
294
+ class SPIDevice
295
+ def initialize(spi, mode=nil, speed=1000000, bpw=8)
296
+ @spi = spi
297
+ SPI::setup(@spi, mode, speed, bpw)
298
+ end
299
+
300
+ def xfer(tx_data, readbytes=0, speed=nil, delay=nil, bpw=nil)
301
+ SPI::xfer(@spi, tx_data, readbytes, speed, delay, bpw)
302
+ end
303
+
304
+ def disable
305
+ SPI::disable(@spi)
306
+ end
307
+
308
+ def set_speed(speed)
309
+ SPI::set_speed(@spi, speed)
310
+ end
311
+
312
+ def set_mode(mode)
313
+ SPI::set_mode(@spi, mode)
314
+ end
315
+
316
+ def set_bpw(bpw)
317
+ SPI::set_bpw(@spi, bpw)
318
+ end
319
+
320
+ end
321
+
322
+ end
@@ -0,0 +1,388 @@
1
+ module Beaglebone
2
+ module UART
3
+ SPEEDS = [ 110, 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 56000, 57600, 115200 ]
4
+ @uartstatus = {}
5
+ @uartmutex = Mutex.new
6
+
7
+ class << self
8
+ attr_accessor :uartstatus, :uartmutex
9
+
10
+ def readchar(uart)
11
+ readchars(uart, 1)
12
+ end
13
+
14
+ def readchars(uart, bytes)
15
+ check_uart_enabled(uart)
16
+ ensure_read_lock(uart)
17
+
18
+ buffer = ''
19
+
20
+ pin_rx = UARTS[uart][:rx]
21
+
22
+ Beaglebone::check_valid_pin(pin_rx, :uart)
23
+
24
+ fd = Beaglebone::get_pin_status(pin_rx, :fd_uart)
25
+
26
+ set_uart_status(uart, :waiting, true)
27
+
28
+ while bytes > 0 do
29
+ buffer << fd.readchar
30
+ bytes -= 1
31
+ end
32
+ set_uart_status(uart, :waiting, false)
33
+
34
+ buffer
35
+ end
36
+
37
+ def readline(uart)
38
+ check_uart_enabled(uart)
39
+ ensure_read_lock(uart)
40
+
41
+ pin_rx = UARTS[uart][:rx]
42
+
43
+ Beaglebone::check_valid_pin(pin_rx, :uart)
44
+
45
+ fd = Beaglebone::get_pin_status(pin_rx, :fd_uart)
46
+
47
+ set_uart_status(uart, :waiting, true)
48
+
49
+ data = fd.readline.strip
50
+
51
+ set_uart_status(uart, :waiting, false)
52
+
53
+ data
54
+ end
55
+
56
+ def each_char(uart)
57
+ loop do
58
+ data = readchars(uart, 1)
59
+ yield data
60
+ end
61
+
62
+ end
63
+
64
+ def each_chars(uart, chars)
65
+ loop do
66
+ data = readchars(uart, chars)
67
+ yield data
68
+ end
69
+ end
70
+
71
+ def each_line(uart)
72
+ loop do
73
+ data = readline(uart)
74
+ yield data
75
+ end
76
+ end
77
+
78
+ def writeln(uart, data)
79
+ write(uart, data + "\n")
80
+ end
81
+
82
+ def write(uart, data)
83
+ check_uart_enabled(uart)
84
+
85
+ pin_tx = UARTS[uart][:tx]
86
+
87
+ Beaglebone::check_valid_pin(pin_tx, :uart)
88
+
89
+ fd = Beaglebone::get_pin_status(pin_tx, :fd_uart)
90
+
91
+ ret = fd.write(data)
92
+ fd.flush
93
+
94
+ ret
95
+ end
96
+
97
+ def run_once_on_each_line(callback, uart)
98
+ run_on_each_line(callback, uart, 1)
99
+ end
100
+
101
+ def run_on_each_line(callback, uart, repeats=nil)
102
+ check_uart_enabled(uart)
103
+
104
+ raise StandardError, "Already waiting for data on uart: #{uart}" if get_uart_status(uart, :waiting)
105
+ raise StandardError, "Already waiting for data on uart: #{uart}" if get_uart_status(uart, :thread)
106
+
107
+ thread = Thread.new(callback, uart, repeats) do |c, u, r|
108
+ begin
109
+ count = 0
110
+ each_line(u) do |line|
111
+
112
+ c.call(u, line, count) if c
113
+
114
+ count += 1
115
+ break if r && count >= r
116
+ end
117
+ rescue => ex
118
+ puts ex
119
+ puts ex.backtrace
120
+ ensure
121
+ delete_uart_status(u, :thread)
122
+ set_uart_status(uart, :waiting, false)
123
+ end
124
+ end
125
+ set_uart_status(uart, :thread, thread)
126
+ end
127
+
128
+ def run_once_on_each_char(callback, uart)
129
+ run_once_on_each_chars(callback, uart, 1)
130
+ end
131
+
132
+ def run_once_on_each_chars(callback, uart, chars=1)
133
+ run_on_each_chars(callback, uart, chars, 1)
134
+ end
135
+
136
+ def run_on_each_char(callback, uart, repeats=nil)
137
+ run_on_each_chars(callback, uart, 1, repeats)
138
+ end
139
+
140
+ def run_on_each_chars(callback, uart, chars=1, repeats=nil)
141
+ check_uart_enabled(uart)
142
+
143
+ raise StandardError, "Already waiting for data on uart: #{uart}" if get_uart_status(uart, :waiting)
144
+ raise StandardError, "Already waiting for data on uart: #{uart}" if get_uart_status(uart, :thread)
145
+
146
+ thread = Thread.new(callback, uart, chars, repeats) do |c, u, ch, r|
147
+ begin
148
+ count = 0
149
+ each_chars(u, ch) do |line|
150
+
151
+ c.call(u, line, count) if c
152
+
153
+ count += 1
154
+ break if r && count >= r
155
+ end
156
+ rescue => ex
157
+ puts ex
158
+ puts ex.backtrace
159
+ ensure
160
+ delete_uart_status(u, :thread)
161
+ set_uart_status(uart, :waiting, false)
162
+ end
163
+ end
164
+ set_uart_status(uart, :thread, thread)
165
+ end
166
+
167
+ def set_speed(uart, speed)
168
+ check_uart_valid(uart)
169
+ check_speed_valid(speed)
170
+
171
+ uartinfo = UARTS[uart]
172
+ system("stty -F #{uartinfo[:dev]} #{speed}")
173
+ end
174
+
175
+ def setup(uart, speed=9600)
176
+ check_uart_valid(uart)
177
+ check_speed_valid(speed)
178
+
179
+ #make sure uart not already enabled
180
+ return if get_uart_status(uart)
181
+
182
+ uartinfo = UARTS[uart]
183
+
184
+ #ensure dtb is loaded
185
+ Beaglebone::device_tree_load("#{TREES[:UART][:pin]}#{uartinfo[:id]}")
186
+
187
+ #open the uart device
188
+ uart_fd = File.open(uartinfo[:dev], 'r+')
189
+
190
+ if uartinfo[:tx]
191
+ Beaglebone::set_pin_status(uartinfo[:tx], :uart, uartinfo[:id])
192
+ Beaglebone::set_pin_status(uartinfo[:tx], :type, :uart)
193
+ Beaglebone::set_pin_status(uartinfo[:tx], :fd_uart, uart_fd)
194
+ end
195
+
196
+ if uartinfo[:rx]
197
+ Beaglebone::set_pin_status(uartinfo[:rx], :uart, uartinfo[:id])
198
+ Beaglebone::set_pin_status(uartinfo[:tx], :type, :uart)
199
+ Beaglebone::set_pin_status(uartinfo[:rx], :fd_uart, uart_fd)
200
+ end
201
+
202
+ system("stty -F #{uartinfo[:dev]} raw")
203
+ system("stty -F #{uartinfo[:dev]} #{speed}")
204
+
205
+ set_uart_status(uart, :fd_uart, uart_fd)
206
+ end
207
+
208
+ def disable(uart)
209
+ check_uart_valid(uart)
210
+ check_uart_enabled(uart)
211
+
212
+ stop_read_wait(uart)
213
+
214
+ disable_uart_pin(UARTS[uart][:rx]) if UARTS[uart][:rx]
215
+ disable_uart_pin(UARTS[uart][:tx]) if UARTS[uart][:tx]
216
+
217
+ delete_uart_status(uart)
218
+ end
219
+
220
+ #stop background read
221
+ def stop_read_wait(uart)
222
+ thread = get_uart_status(uart, :thread)
223
+
224
+ thread.exit if thread
225
+ thread.join if thread
226
+ end
227
+
228
+ def cleanup
229
+ #reset all UARTs we've used and unload the device tree
230
+ uartstatus.clone.keys.each { |uart| disable(uart)}
231
+ end
232
+
233
+ private
234
+
235
+ def get_uart_status(uart, key = nil)
236
+ uartmutex.synchronize do
237
+ if key
238
+ uartstatus[uart] ? uartstatus[uart][key] : nil
239
+ else
240
+ uartstatus[uart]
241
+ end
242
+ end
243
+ end
244
+
245
+ def set_uart_status(uart, key, value)
246
+ uartmutex.synchronize do
247
+ uartstatus[uart] ||= {}
248
+ uartstatus[uart][key] = value
249
+ end
250
+ end
251
+
252
+ def delete_uart_status(uart, key = nil)
253
+ uartmutex.synchronize do
254
+ if key.nil?
255
+ uartstatus.delete(uart)
256
+ else
257
+ uartstatus[uart].delete(key) if uartstatus[uart]
258
+ end
259
+ end
260
+ end
261
+
262
+ def check_uart_valid(uart)
263
+ raise ArgumentError, "Invalid UART Specified #{uart.to_s}" unless UARTS[uart]
264
+ uartinfo = UARTS[uart.to_sym.upcase]
265
+
266
+ unless uartinfo[:tx] && [nil,:uart].include?(Beaglebone::get_pin_status(uartinfo[:tx], :type))
267
+ raise StandardError, "TX Pin for #{uart.to_s} in use"
268
+ end
269
+
270
+ unless uartinfo[:rx] && [nil,:uart].include?(Beaglebone::get_pin_status(uartinfo[:rx], :type))
271
+ raise StandardError, "RX Pin for #{uart.to_s} in use"
272
+ end
273
+
274
+ end
275
+
276
+ def check_uart_enabled(uart)
277
+ raise ArgumentError, "UART not enabled #{uart.to_s}" unless get_uart_status(uart)
278
+ end
279
+
280
+ def ensure_read_lock(uart)
281
+ #ensure we're the only ones reading
282
+ if get_uart_status(uart, :thread) && get_uart_status(uart, :thread) != Thread.current
283
+ raise StandardError, "Already waiting for data on uart: #{uart}"
284
+ end
285
+
286
+ if get_uart_status(uart, :waiting) && get_uart_status(uart, :thread) != Thread.current
287
+ raise StandardError, "Already waiting for data on uart: #{uart}"
288
+ end
289
+ end
290
+
291
+ def check_speed_valid(speed)
292
+ raise ArgumentError, "Invalid speed specified: #{speed}" unless SPEEDS.include?(speed)
293
+ end
294
+
295
+ def disable_uart_pin(pin)
296
+ Beaglebone::check_valid_pin(pin, :uart)
297
+
298
+ id = Beaglebone::get_pin_status(pin, :uart)
299
+
300
+ Beaglebone::delete_pin_status(pin)
301
+
302
+ #removing uart tree causes a crash... can't really disable.
303
+ return if true
304
+
305
+ Beaglebone::device_tree_unload("#{TREES[:UART][:pin]}#{id}")
306
+
307
+ end
308
+
309
+ end
310
+ end
311
+
312
+ #oo interface
313
+ class UARTDevice
314
+ def initialize(uart, speed=9600)
315
+ @uart = uart
316
+ UART::setup(@uart, speed)
317
+ end
318
+
319
+ def set_speed(speed)
320
+ UART::set_speed(@uart, speed)
321
+ end
322
+
323
+ def write(data)
324
+ UART::write(@uart, data)
325
+ end
326
+
327
+ def writeln(data)
328
+ UART::writeln(@uart, data)
329
+ end
330
+
331
+ def readchar
332
+ UART::readchar(@uart)
333
+ end
334
+
335
+ def readchars(bytes)
336
+ UART::readchars(@uart, bytes)
337
+ end
338
+
339
+ def readline
340
+ UART::readline(@uart)
341
+ end
342
+
343
+ def each_char(&block)
344
+ UART::each_char(@uart, &block)
345
+ end
346
+
347
+ def each_chars(chars, &block)
348
+ UART::each_chars(@uart, chars, &block)
349
+ end
350
+
351
+ def each_line(&block)
352
+ UART::each_line(@uart, &block)
353
+ end
354
+
355
+ def run_on_each_line(callback, repeats=nil)
356
+ UART::run_on_each_line(callback, @uart, repeats)
357
+ end
358
+
359
+ def run_once_on_each_line(callback)
360
+ UART::run_once_on_each_line(callback, @uart)
361
+ end
362
+
363
+ def run_on_each_char(callback, repeats=nil)
364
+ UART::run_on_each_char(callback, @uart, repeats)
365
+ end
366
+
367
+ def run_once_on_each_char(callback)
368
+ UART::run_once_on_each_char(callback, @uart)
369
+ end
370
+
371
+ def run_on_each_chars(callback, chars=1, repeats=nil)
372
+ UART::run_on_each_chars(callback, @uart, chars, repeats)
373
+ end
374
+
375
+ def run_once_on_each_chars(callback, chars=1)
376
+ UART::run_once_on_each_chars(callback, @uart, chars)
377
+ end
378
+
379
+ def stop_read_wait
380
+ UART::stop_read_wait(@uart)
381
+ end
382
+
383
+ def disable
384
+ UART::disable(@uart)
385
+ end
386
+
387
+ end
388
+ end
data/lib/beaglebone.rb ADDED
@@ -0,0 +1,8 @@
1
+ require 'beaglebone/beaglebone'
2
+ require 'beaglebone/spi'
3
+ require 'beaglebone/i2c'
4
+ require 'beaglebone/uart'
5
+ require 'beaglebone/pwm'
6
+ require 'beaglebone/ain'
7
+ require 'beaglebone/gpio'
8
+ require 'beaglebone/shiftregister'