subduino 0.2.2 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/bin/subduino +24 -16
- data/duino/duino.pde +16 -7
- data/examples/duin +45 -0
- data/ext/subduino/Makefile +187 -0
- data/ext/subduino/cubduino.c +242 -0
- data/ext/subduino/cubduino.h +12 -0
- data/ext/subduino/cubduino.o +0 -0
- data/ext/subduino/cubduino.so +0 -0
- data/ext/subduino/extconf.rb +38 -0
- data/lib/subduino/ard_io.rb +17 -6
- data/lib/subduino/ard_ps.rb +5 -2
- data/lib/subduino/scaffold/Makefile +10 -2
- data/lib/subduino/store.rb +3 -4
- data/lib/subduino.rb +8 -3
- data/spec/subduino/ard_io_spec.rb +1 -0
- data/spec/subduino/cubduino_spec.rb +10 -0
- data/spec/subduino/store_spec.rb +2 -2
- data/subduino.gemspec +4 -2
- metadata +20 -17
- data/.gitignore +0 -26
data/Rakefile
CHANGED
@@ -6,7 +6,7 @@ begin
|
|
6
6
|
Jeweler::Tasks.new do |gem|
|
7
7
|
gem.name = "subduino"
|
8
8
|
gem.summary = "Arduino Ruby Helpers"
|
9
|
-
gem.description = "Interface, compile, upload
|
9
|
+
gem.description = "Interface, compile, upload... Play with arduino on ruby!"
|
10
10
|
gem.email = "x@nofxx.com"
|
11
11
|
gem.homepage = "http://github.com/nofxx/subduino"
|
12
12
|
gem.authors = ["Marcos Piccinini"]
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.1
|
data/bin/subduino
CHANGED
@@ -2,45 +2,53 @@
|
|
2
2
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
3
3
|
require 'rubygems'
|
4
4
|
require 'optparse'
|
5
|
-
|
6
|
-
require 'subduino/os'
|
7
|
-
require 'faye'
|
5
|
+
|
8
6
|
|
9
7
|
Debug = false
|
10
8
|
|
9
|
+
if File.exists?(f = ARGV.join)
|
10
|
+
# return unless f =~ /\.yml$/
|
11
|
+
puts "Using config file #{f}"
|
12
|
+
AppConfig = YAML.load(File.read(f))["opts"]
|
13
|
+
else
|
14
|
+
AppConfig = { :log_interval => 30 }
|
15
|
+
end
|
16
|
+
|
11
17
|
OptionParser.new { |op|
|
12
18
|
op.on('-d', '--debug') { |d| Debug = true }
|
19
|
+
op.on('-b', '--bauds=BAUDS', Integer) { |b| AppConfig[:bauds] = b }
|
13
20
|
op.on('-e env') { |val| set :environment, val.to_sym }
|
14
21
|
op.on('-s server') { |val| set :server, val }
|
15
22
|
op.on('-p port') { |val| set :port, val.to_i }
|
16
|
-
|
23
|
+
op.parse!(ARGV)
|
24
|
+
}
|
25
|
+
|
26
|
+
require 'subduino'
|
27
|
+
require 'subduino/os'
|
28
|
+
require 'faye'
|
29
|
+
# Cubduino.write("hahah")
|
30
|
+
# puts Cubduino.read
|
17
31
|
|
18
32
|
# set :run, true
|
19
33
|
|
20
|
-
if Debug
|
21
|
-
puts "Starting on #{OS}"
|
22
|
-
end
|
23
34
|
|
24
35
|
if ARGV.empty? || ARGV.join =~ /yml/
|
25
36
|
LastRun = {:all => 0}
|
26
|
-
if File.exists?(f = ARGV.join)
|
27
|
-
puts "Using config file #{f}"
|
28
|
-
AppConfig = YAML.load(File.read(f))["opts"]
|
29
|
-
else
|
30
|
-
AppConfig = { "log_interval" => 30, "bauds" => 115200 }
|
31
|
-
end
|
32
37
|
|
33
38
|
client = Faye::Client.new('http://localhost:8000/faye')
|
34
39
|
|
35
40
|
EM.run do
|
41
|
+
if Debug
|
42
|
+
puts "Starting on #{OS}"
|
43
|
+
end
|
36
44
|
|
37
45
|
Subduino.start do |read|
|
38
46
|
# Subduino::ArdIO.write("hi")
|
39
47
|
if Debug
|
40
|
-
#
|
41
|
-
p read
|
48
|
+
#puts "--------------------- #{Time.now}"
|
49
|
+
#p read
|
42
50
|
end
|
43
|
-
if LastRun[:all] < (Time.now.to_i - AppConfig[
|
51
|
+
if LastRun[:all] < (Time.now.to_i - AppConfig[:log_interval])
|
44
52
|
LastRun[:all] = Time.now.to_i
|
45
53
|
client.publish('/stats', 'data' => read)
|
46
54
|
Subduino::Store.add_csv_to_store(read, true)
|
data/duino/duino.pde
CHANGED
@@ -112,9 +112,11 @@ void read_commands() {
|
|
112
112
|
while( Serial.available() && c != '\n' ) { // buffer up a line
|
113
113
|
c = Serial.read();
|
114
114
|
if (c == '\n' || c == ',') {
|
115
|
+
Serial.println("<<");
|
115
116
|
int pin; int val;
|
116
117
|
pin = (ctoi(cmdbuf[0])*10) + ctoi(cmdbuf[1]);
|
117
118
|
val = (ctoi(cmdbuf[2])*100) + (ctoi(cmdbuf[3])*10) + ctoi(cmdbuf[4]);
|
119
|
+
Serial.println("<<");
|
118
120
|
analogWrite(pin, val);
|
119
121
|
i = 0;
|
120
122
|
} else if (c == 'x') {
|
@@ -128,13 +130,20 @@ void read_commands() {
|
|
128
130
|
void setup() {
|
129
131
|
// Atmega defaults INPUT
|
130
132
|
pinMode(infoPin, OUTPUT);
|
131
|
-
pinMode(
|
132
|
-
pinMode(
|
133
|
-
|
134
|
-
|
135
|
-
pinMode(
|
136
|
-
pinMode(
|
137
|
-
pinMode(
|
133
|
+
pinMode(rxPin, OUTPUT);
|
134
|
+
pinMode(txPin, OUTPUT);
|
135
|
+
for (int k=0;k<=7;k++)
|
136
|
+
pinMode(k,OUTPUT);
|
137
|
+
// pinMode(d2, OUTPUT);
|
138
|
+
// pinMode(d3, OUTPUT);
|
139
|
+
// pinMode(d4, OUTPUT);
|
140
|
+
// pinMode(d5, OUTPUT);
|
141
|
+
// pinMode(d6, OUTPUT);
|
142
|
+
// pinMode(d7, OUTPUT);
|
143
|
+
// pinMode(d10, OUTPUT);
|
144
|
+
// digitalWrite(rxPin, 0); FAIL
|
145
|
+
// digitalWrite(txPin, 0);
|
146
|
+
|
138
147
|
|
139
148
|
// attachInterrupt(0, btnLed, CHANGE);
|
140
149
|
Serial.begin(115200);
|
data/examples/duin
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# usage: usb-power bus/device port on|off
|
4
|
+
#
|
5
|
+
# example:
|
6
|
+
# usb-power 004/006 2 on
|
7
|
+
# usb-power 004/006 2 off
|
8
|
+
|
9
|
+
require 'usb'
|
10
|
+
require 'optparse'
|
11
|
+
|
12
|
+
USB_RT_PORT = USB::USB_TYPE_CLASS | USB::USB_RECIP_OTHER
|
13
|
+
USB_PORT_FEAT_POWER = 8
|
14
|
+
|
15
|
+
USB.devices.find_all {|d|
|
16
|
+
# p d
|
17
|
+
0x200 <= d.bcdDevice &&
|
18
|
+
d.bDeviceClass == USB::USB_CLASS_HUB
|
19
|
+
}
|
20
|
+
|
21
|
+
# require 'pp'
|
22
|
+
|
23
|
+
# def power_on(h, port)
|
24
|
+
# h.usb_control_msg(USB_RT_PORT, USB::USB_REQ_SET_FEATURE, USB_PORT_FEAT_POWER, port, "", 0)
|
25
|
+
# end
|
26
|
+
|
27
|
+
# def power_off(h, port)
|
28
|
+
# h.usb_control_msg(USB_RT_PORT, USB::USB_REQ_CLEAR_FEATURE, USB_PORT_FEAT_POWER, port, "", 0)
|
29
|
+
# end
|
30
|
+
|
31
|
+
# bus_device = ARGV.shift
|
32
|
+
# port = ARGV.shift.to_i
|
33
|
+
# on_off = ARGV.shift
|
34
|
+
|
35
|
+
# %r{/} =~ bus_device
|
36
|
+
# bus = $`.to_i
|
37
|
+
# device = $'.to_i
|
38
|
+
|
39
|
+
# USB.find_bus(bus).find_device(device).open {|h|
|
40
|
+
# if on_off == 'off'
|
41
|
+
# power_off(h, port)
|
42
|
+
# else
|
43
|
+
# power_on(h, port)
|
44
|
+
# end
|
45
|
+
# }
|
@@ -0,0 +1,187 @@
|
|
1
|
+
|
2
|
+
SHELL = /bin/sh
|
3
|
+
|
4
|
+
#### Start of system configuration section. ####
|
5
|
+
|
6
|
+
srcdir = .
|
7
|
+
topdir = /usr/include/ruby-1.9.1
|
8
|
+
hdrdir = /usr/include/ruby-1.9.1
|
9
|
+
arch_hdrdir = /usr/include/ruby-1.9.1/$(arch)
|
10
|
+
VPATH = $(srcdir):$(arch_hdrdir)/ruby:$(hdrdir)/ruby
|
11
|
+
prefix = $(DESTDIR)/usr
|
12
|
+
rubylibprefix = $(libdir)/$(RUBY_BASE_NAME)
|
13
|
+
exec_prefix = $(prefix)
|
14
|
+
vendorhdrdir = $(rubyhdrdir)/vendor_ruby
|
15
|
+
sitehdrdir = $(rubyhdrdir)/site_ruby
|
16
|
+
rubyhdrdir = $(includedir)/$(RUBY_BASE_NAME)-$(ruby_version)
|
17
|
+
vendordir = $(rubylibprefix)/vendor_ruby
|
18
|
+
sitedir = $(rubylibprefix)/site_ruby
|
19
|
+
ridir = $(datarootdir)/$(RI_BASE_NAME)
|
20
|
+
mandir = $(datarootdir)/man
|
21
|
+
localedir = $(datarootdir)/locale
|
22
|
+
libdir = $(exec_prefix)/lib
|
23
|
+
psdir = $(docdir)
|
24
|
+
pdfdir = $(docdir)
|
25
|
+
dvidir = $(docdir)
|
26
|
+
htmldir = $(docdir)
|
27
|
+
infodir = $(datarootdir)/info
|
28
|
+
docdir = $(datarootdir)/doc/$(PACKAGE)
|
29
|
+
oldincludedir = $(DESTDIR)/usr/include
|
30
|
+
includedir = $(prefix)/include
|
31
|
+
localstatedir = $(prefix)/var
|
32
|
+
sharedstatedir = $(prefix)/com
|
33
|
+
sysconfdir = $(prefix)/etc
|
34
|
+
datadir = $(datarootdir)
|
35
|
+
datarootdir = $(prefix)/share
|
36
|
+
libexecdir = $(exec_prefix)/libexec
|
37
|
+
sbindir = $(exec_prefix)/sbin
|
38
|
+
bindir = $(exec_prefix)/bin
|
39
|
+
rubylibdir = $(rubylibprefix)/$(ruby_version)
|
40
|
+
archdir = $(rubylibdir)/$(arch)
|
41
|
+
sitelibdir = $(sitedir)/$(ruby_version)
|
42
|
+
sitearchdir = $(sitelibdir)/$(sitearch)
|
43
|
+
vendorlibdir = $(vendordir)/$(ruby_version)
|
44
|
+
vendorarchdir = $(vendorlibdir)/$(sitearch)
|
45
|
+
|
46
|
+
CC = gcc
|
47
|
+
CXX = g++
|
48
|
+
LIBRUBY = $(LIBRUBY_SO)
|
49
|
+
LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a
|
50
|
+
LIBRUBYARG_SHARED = -l$(RUBY_SO_NAME)
|
51
|
+
LIBRUBYARG_STATIC = -l$(RUBY_SO_NAME)-static
|
52
|
+
OUTFLAG = -o
|
53
|
+
COUTFLAG = -o
|
54
|
+
|
55
|
+
RUBY_EXTCONF_H =
|
56
|
+
cflags = $(optflags) $(debugflags) $(warnflags)
|
57
|
+
optflags = -O3
|
58
|
+
debugflags = -ggdb
|
59
|
+
warnflags = -Wextra -Wno-unused-parameter -Wno-parentheses -Wpointer-arith -Wwrite-strings -Wno-missing-field-initializers -Wno-long-long
|
60
|
+
CFLAGS = -fPIC -march=x86-64 -mtune=generic -O3 -pipe -fPIC -std=c99 -Wall -I.
|
61
|
+
INCFLAGS = -I. -I$(arch_hdrdir) -I$(hdrdir)/ruby/backward -I$(hdrdir) -I$(srcdir)
|
62
|
+
DEFS =
|
63
|
+
CPPFLAGS = $(DEFS) $(cppflags)
|
64
|
+
CXXFLAGS = $(CFLAGS) -march=x86-64 -mtune=generic -O2 -pipe
|
65
|
+
ldflags = -L. -rdynamic -Wl,-export-dynamic
|
66
|
+
dldflags =
|
67
|
+
ARCH_FLAG =
|
68
|
+
DLDFLAGS = $(ldflags) $(dldflags)
|
69
|
+
LDSHARED = $(CC) -shared
|
70
|
+
LDSHAREDXX = $(CXX) -shared
|
71
|
+
AR = ar
|
72
|
+
EXEEXT =
|
73
|
+
|
74
|
+
RUBY_BASE_NAME = ruby
|
75
|
+
RUBY_INSTALL_NAME = ruby
|
76
|
+
RUBY_SO_NAME = ruby
|
77
|
+
arch = x86_64-linux
|
78
|
+
sitearch = $(arch)
|
79
|
+
ruby_version = 1.9.1
|
80
|
+
ruby = /usr/bin/ruby
|
81
|
+
RUBY = $(ruby)
|
82
|
+
RM = rm -f
|
83
|
+
RM_RF = $(RUBY) -run -e rm -- -rf
|
84
|
+
RMDIRS = $(RUBY) -run -e rmdir -- -p
|
85
|
+
MAKEDIRS = /bin/mkdir -p
|
86
|
+
INSTALL = /bin/install -c
|
87
|
+
INSTALL_PROG = $(INSTALL) -m 0755
|
88
|
+
INSTALL_DATA = $(INSTALL) -m 644
|
89
|
+
COPY = cp
|
90
|
+
|
91
|
+
#### End of system configuration section. ####
|
92
|
+
|
93
|
+
preload =
|
94
|
+
|
95
|
+
libpath = . $(libdir)
|
96
|
+
LIBPATH = -L. -L$(libdir)
|
97
|
+
DEFFILE =
|
98
|
+
|
99
|
+
CLEANFILES = mkmf.log
|
100
|
+
DISTCLEANFILES =
|
101
|
+
DISTCLEANDIRS =
|
102
|
+
|
103
|
+
extout =
|
104
|
+
extout_prefix =
|
105
|
+
target_prefix =
|
106
|
+
LOCAL_LIBS =
|
107
|
+
LIBS = $(LIBRUBYARG_SHARED) -lpthread -lrt -ldl -lcrypt -lm -lc
|
108
|
+
SRCS = cubduino.c
|
109
|
+
OBJS = cubduino.o
|
110
|
+
TARGET = cubduino
|
111
|
+
DLLIB = $(TARGET).so
|
112
|
+
EXTSTATIC =
|
113
|
+
STATIC_LIB =
|
114
|
+
|
115
|
+
BINDIR = $(bindir)
|
116
|
+
RUBYCOMMONDIR = $(sitedir)$(target_prefix)
|
117
|
+
RUBYLIBDIR = $(sitelibdir)$(target_prefix)
|
118
|
+
RUBYARCHDIR = $(sitearchdir)$(target_prefix)
|
119
|
+
HDRDIR = $(rubyhdrdir)/ruby$(target_prefix)
|
120
|
+
ARCHHDRDIR = $(rubyhdrdir)/$(arch)/ruby$(target_prefix)
|
121
|
+
|
122
|
+
TARGET_SO = $(DLLIB)
|
123
|
+
CLEANLIBS = $(TARGET).so
|
124
|
+
CLEANOBJS = *.o *.bak
|
125
|
+
|
126
|
+
all: $(DLLIB)
|
127
|
+
static: $(STATIC_LIB)
|
128
|
+
.PHONY: all install static install-so install-rb
|
129
|
+
.PHONY: clean clean-so clean-rb
|
130
|
+
|
131
|
+
clean-rb-default::
|
132
|
+
clean-rb::
|
133
|
+
clean-so::
|
134
|
+
clean: clean-so clean-rb-default clean-rb
|
135
|
+
@-$(RM) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES)
|
136
|
+
|
137
|
+
distclean-rb-default::
|
138
|
+
distclean-rb::
|
139
|
+
distclean-so::
|
140
|
+
distclean: clean distclean-so distclean-rb-default distclean-rb
|
141
|
+
@-$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log
|
142
|
+
@-$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES)
|
143
|
+
@-$(RMDIRS) $(DISTCLEANDIRS)
|
144
|
+
|
145
|
+
realclean: distclean
|
146
|
+
install: install-so install-rb
|
147
|
+
|
148
|
+
install-so: $(RUBYARCHDIR)
|
149
|
+
install-so: $(RUBYARCHDIR)/$(DLLIB)
|
150
|
+
$(RUBYARCHDIR)/$(DLLIB): $(DLLIB)
|
151
|
+
@-$(MAKEDIRS) $(@D)
|
152
|
+
$(INSTALL_PROG) $(DLLIB) $(@D)
|
153
|
+
install-rb: pre-install-rb install-rb-default
|
154
|
+
install-rb-default: pre-install-rb-default
|
155
|
+
pre-install-rb: Makefile
|
156
|
+
pre-install-rb-default: Makefile
|
157
|
+
$(RUBYARCHDIR):
|
158
|
+
$(MAKEDIRS) $@
|
159
|
+
|
160
|
+
site-install: site-install-so site-install-rb
|
161
|
+
site-install-so: install-so
|
162
|
+
site-install-rb: install-rb
|
163
|
+
|
164
|
+
.SUFFIXES: .c .m .cc .cxx .cpp .C .o
|
165
|
+
|
166
|
+
.cc.o:
|
167
|
+
$(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $<
|
168
|
+
|
169
|
+
.cxx.o:
|
170
|
+
$(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $<
|
171
|
+
|
172
|
+
.cpp.o:
|
173
|
+
$(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $<
|
174
|
+
|
175
|
+
.C.o:
|
176
|
+
$(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $<
|
177
|
+
|
178
|
+
.c.o:
|
179
|
+
$(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $<
|
180
|
+
|
181
|
+
$(DLLIB): $(OBJS) Makefile
|
182
|
+
@-$(RM) $(@)
|
183
|
+
$(LDSHARED) -o $@ $(OBJS) $(LIBPATH) $(DLDFLAGS) $(LOCAL_LIBS) $(LIBS)
|
184
|
+
|
185
|
+
|
186
|
+
|
187
|
+
$(OBJS): $(hdrdir)/ruby.h $(hdrdir)/ruby/defines.h $(arch_hdrdir)/ruby/config.h
|
@@ -0,0 +1,242 @@
|
|
1
|
+
/*
|
2
|
+
* Arduino-serial
|
3
|
+
* --------------
|
4
|
+
*
|
5
|
+
* A simple command-line example program showing how a computer can
|
6
|
+
* communicate with an Arduino board. Works on any POSIX system (Mac/Unix/PC)
|
7
|
+
*
|
8
|
+
*
|
9
|
+
* Compile with something like:
|
10
|
+
* gcc -o arduino-serial arduino-serial.c
|
11
|
+
*
|
12
|
+
* Created 5 December 2006
|
13
|
+
* Copyleft (c) 2006, Tod E. Kurt, tod@todbot.com
|
14
|
+
* http://todbot.com/blog/
|
15
|
+
*
|
16
|
+
*
|
17
|
+
* Updated 8 December 2006:
|
18
|
+
* Justin McBride discoevered B14400 & B28800 aren't in Linux's termios.h.
|
19
|
+
* I've included his patch, but commented out for now. One really needs a
|
20
|
+
* real make system when doing cross-platform C and I wanted to avoid that
|
21
|
+
* for this little program. Those baudrates aren't used much anyway. :)
|
22
|
+
*
|
23
|
+
* Updated 26 December 2007:
|
24
|
+
* Added ability to specify a delay (so you can wait for Arduino Diecimila)
|
25
|
+
* Added ability to send a binary byte number
|
26
|
+
*
|
27
|
+
* Update 31 August 2008:
|
28
|
+
* Added patch to clean up odd baudrates from Andy at hexapodia.org
|
29
|
+
*
|
30
|
+
*/
|
31
|
+
|
32
|
+
#include "cubduino.h"
|
33
|
+
|
34
|
+
|
35
|
+
|
36
|
+
// Ruby 1.x compatibility
|
37
|
+
#ifndef RSTRING_PTR
|
38
|
+
#define RSTRING_PTR(s) (RSTRING(s)->ptr)
|
39
|
+
#endif
|
40
|
+
#ifndef RSTRING_LEN
|
41
|
+
#define RSTRING_LEN(s) (RSTRING(s)->len)
|
42
|
+
#endif
|
43
|
+
|
44
|
+
VALUE Cubduino;
|
45
|
+
|
46
|
+
VALUE sBaud, sDataBits, sStopBits, sParity; /* strings */
|
47
|
+
VALUE sRts, sDtr, sCts, sDsr, sDcd, sRi;
|
48
|
+
|
49
|
+
|
50
|
+
void Init_cubduino();
|
51
|
+
//VALUE method_cwrite(VALUE self);
|
52
|
+
|
53
|
+
|
54
|
+
|
55
|
+
void usage(void);
|
56
|
+
int serialport_init(const char* serialport, int baud);
|
57
|
+
int serialport_writebyte(int fd, uint8_t b);
|
58
|
+
int serialport_write(int fd, const char* str);
|
59
|
+
int serialport_read_until(int fd, char* buf, char until);
|
60
|
+
|
61
|
+
|
62
|
+
int main(int argc, char *argv[])
|
63
|
+
{
|
64
|
+
int rc,n;
|
65
|
+
int fd = 0;
|
66
|
+
int baudrate = B9600; // default
|
67
|
+
char serialport[256];
|
68
|
+
char buf[256];
|
69
|
+
|
70
|
+
/* parse options */
|
71
|
+
int option_index = 0, opt;
|
72
|
+
static struct option loptions[] = {
|
73
|
+
{"help", no_argument, 0, 'h'},
|
74
|
+
{"port", required_argument, 0, 'p'},
|
75
|
+
{"baud", required_argument, 0, 'b'},
|
76
|
+
{"send", required_argument, 0, 's'},
|
77
|
+
{"receive", no_argument, 0, 'r'},
|
78
|
+
{"num", required_argument, 0, 'n'},
|
79
|
+
{"delay", required_argument, 0, 'd'}
|
80
|
+
};
|
81
|
+
|
82
|
+
while(1) {
|
83
|
+
opt = getopt_long (argc, argv, "hp:b:s:rn:d:",
|
84
|
+
loptions, &option_index);
|
85
|
+
if (opt==-1) break;
|
86
|
+
switch (opt) {
|
87
|
+
case '0': break;
|
88
|
+
case 'd':
|
89
|
+
n = strtol(optarg,NULL,10);
|
90
|
+
usleep(n * 1000 ); // sleep milliseconds
|
91
|
+
break;
|
92
|
+
case 'h':
|
93
|
+
usage();
|
94
|
+
break;
|
95
|
+
case 'b':
|
96
|
+
baudrate = strtol(optarg,NULL,10);
|
97
|
+
break;
|
98
|
+
case 'p':
|
99
|
+
strcpy(serialport,optarg);
|
100
|
+
fd = serialport_init(optarg, baudrate);
|
101
|
+
if(fd==-1) return -1;
|
102
|
+
break;
|
103
|
+
case 'n':
|
104
|
+
n = strtol(optarg, NULL, 10); // convert string to number
|
105
|
+
rc = serialport_writebyte(fd, (uint8_t)n);
|
106
|
+
if(rc==-1) return -1;
|
107
|
+
break;
|
108
|
+
case 's':
|
109
|
+
strcpy(buf,optarg);
|
110
|
+
rc = serialport_write(fd, buf);
|
111
|
+
if(rc==-1) return -1;
|
112
|
+
break;
|
113
|
+
case 'r':
|
114
|
+
serialport_read_until(fd, buf, '\n');
|
115
|
+
printf("read: %s\n",buf);
|
116
|
+
break;
|
117
|
+
}
|
118
|
+
}
|
119
|
+
|
120
|
+
exit(EXIT_SUCCESS);
|
121
|
+
} // end main
|
122
|
+
|
123
|
+
int serialport_writebyte( int fd, uint8_t b)
|
124
|
+
{
|
125
|
+
int n = write(fd,&b,1);
|
126
|
+
if( n!=1)
|
127
|
+
return -1;
|
128
|
+
return 0;
|
129
|
+
}
|
130
|
+
|
131
|
+
int serialport_write(int fd, const char* str)
|
132
|
+
{
|
133
|
+
int len = strlen(str);
|
134
|
+
int n = write(fd, str, len);
|
135
|
+
if( n!=len )
|
136
|
+
return -1;
|
137
|
+
return 0;
|
138
|
+
}
|
139
|
+
|
140
|
+
int serialport_read_until(int fd, char* buf, char until)
|
141
|
+
{
|
142
|
+
char b[1];
|
143
|
+
int i=0;
|
144
|
+
do {
|
145
|
+
int n = read(fd, b, 1); // read a char at a time
|
146
|
+
if( n==-1) return -1; // couldn't read
|
147
|
+
if( n==0 ) {
|
148
|
+
usleep( 10 * 1000 ); // wait 10 msec try again
|
149
|
+
continue;
|
150
|
+
}
|
151
|
+
buf[i] = b[0]; i++;
|
152
|
+
} while( b[0] != until );
|
153
|
+
|
154
|
+
buf[i] = 0; // null terminate the string
|
155
|
+
return 0;
|
156
|
+
}
|
157
|
+
|
158
|
+
// takes the string name of the serial port (e.g. "/dev/tty.usbserial","COM1")
|
159
|
+
// and a baud rate (bps) and connects to that port at that speed and 8N1.
|
160
|
+
// opens the port in fully raw mode so you can send binary data.
|
161
|
+
// returns valid fd, or -1 on error
|
162
|
+
int serialport_init(const char* serialport, int baud)
|
163
|
+
{
|
164
|
+
struct termios toptions;
|
165
|
+
int fd;
|
166
|
+
|
167
|
+
//fprintf(stderr,"init_serialport: opening port %s @ %d bps\n",
|
168
|
+
// serialport,baud);
|
169
|
+
|
170
|
+
fd = open(serialport, O_RDWR | O_NOCTTY | O_NDELAY);
|
171
|
+
if (fd == -1) {
|
172
|
+
perror("init_serialport: Unable to open port ");
|
173
|
+
return -1;
|
174
|
+
}
|
175
|
+
|
176
|
+
if (tcgetattr(fd, &toptions) < 0) {
|
177
|
+
perror("init_serialport: Couldn't get term attributes");
|
178
|
+
return -1;
|
179
|
+
}
|
180
|
+
speed_t brate = baud; // let you override switch below if needed
|
181
|
+
switch(baud) {
|
182
|
+
case 4800: brate=B4800; break;
|
183
|
+
case 9600: brate=B9600; break;
|
184
|
+
#ifdef B14400
|
185
|
+
case 14400: brate=B14400; break;
|
186
|
+
#endif
|
187
|
+
case 19200: brate=B19200; break;
|
188
|
+
#ifdef B28800
|
189
|
+
case 28800: brate=B28800; break;
|
190
|
+
#endif
|
191
|
+
case 38400: brate=B38400; break;
|
192
|
+
case 57600: brate=B57600; break;
|
193
|
+
case 115200: brate=B115200; break;
|
194
|
+
}
|
195
|
+
cfsetispeed(&toptions, brate);
|
196
|
+
cfsetospeed(&toptions, brate);
|
197
|
+
|
198
|
+
// 8N1
|
199
|
+
toptions.c_cflag &= ~PARENB;
|
200
|
+
toptions.c_cflag &= ~CSTOPB;
|
201
|
+
toptions.c_cflag &= ~CSIZE;
|
202
|
+
toptions.c_cflag |= CS8;
|
203
|
+
// no flow control
|
204
|
+
toptions.c_cflag &= ~CRTSCTS;
|
205
|
+
|
206
|
+
toptions.c_cflag |= CREAD | CLOCAL; // turn on READ & ignore ctrl lines
|
207
|
+
toptions.c_iflag &= ~(IXON | IXOFF | IXANY); // turn off s/w flow ctrl
|
208
|
+
|
209
|
+
toptions.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); // make raw
|
210
|
+
toptions.c_oflag &= ~OPOST; // make raw
|
211
|
+
|
212
|
+
// see: http://unixwiz.net/techtips/termios-vmin-vtime.html
|
213
|
+
toptions.c_cc[VMIN] = 0;
|
214
|
+
toptions.c_cc[VTIME] = 20;
|
215
|
+
|
216
|
+
if( tcsetattr(fd, TCSANOW, &toptions) < 0) {
|
217
|
+
perror("init_serialport: Couldn't set term attributes");
|
218
|
+
return -1;
|
219
|
+
}
|
220
|
+
|
221
|
+
return fd;
|
222
|
+
}
|
223
|
+
|
224
|
+
static VALUE method_write(VALUE class, VALUE arg) {
|
225
|
+
printf("%s", RSTRING_PTR(arg));
|
226
|
+
return Qnil;
|
227
|
+
}
|
228
|
+
|
229
|
+
static VALUE method_read() {
|
230
|
+
int fd = 0;
|
231
|
+
int baudrate = 9600;
|
232
|
+
fd = serialport_init(optarg, baudrate);
|
233
|
+
char buf[256];
|
234
|
+
serialport_read_until(fd, buf, '\n');
|
235
|
+
return rb_str_new2(buf);
|
236
|
+
}
|
237
|
+
|
238
|
+
void Init_cubduino() {
|
239
|
+
Cubduino = rb_define_module("Cubduino");
|
240
|
+
rb_define_singleton_method(Cubduino, "read", method_write, 0);
|
241
|
+
rb_define_singleton_method(Cubduino, "write", method_write, 1);
|
242
|
+
}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
#include <ruby.h>
|
2
|
+
|
3
|
+
#include <stdio.h> /* Standard input/output definitions */
|
4
|
+
#include <stdlib.h>
|
5
|
+
#include <stdint.h> /* Standard types */
|
6
|
+
#include <string.h> /* String function definitions */
|
7
|
+
#include <unistd.h> /* UNIX standard function definitions */
|
8
|
+
#include <fcntl.h> /* File control definitions */
|
9
|
+
#include <errno.h> /* Error number definitions */
|
10
|
+
#include <termios.h> /* POSIX terminal control definitions */
|
11
|
+
#include <sys/ioctl.h>
|
12
|
+
#include <getopt.h>
|
Binary file
|
Binary file
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'mkmf'
|
2
|
+
|
3
|
+
def crash(s)
|
4
|
+
puts "--------------------------------------------------"
|
5
|
+
puts " extconf failure: #{s}"
|
6
|
+
puts "--------------------------------------------------"
|
7
|
+
exit 1
|
8
|
+
end
|
9
|
+
|
10
|
+
unless find_executable("pkg-config")
|
11
|
+
crash("pkg-config needed")
|
12
|
+
end
|
13
|
+
|
14
|
+
$CFLAGS += " -std=c99 -Wall -I. " #+ `pkg-config --cflags glib-2.0`.strip
|
15
|
+
# $LIBS += " " + `pkg-config --libs glib-2.0`
|
16
|
+
# $CFLAGS += " -DOS_#{os.upcase}"
|
17
|
+
# $CFLAGS += " -DRUBY_1_9" if RUBY_VERSION =~ /^1\.9/
|
18
|
+
|
19
|
+
|
20
|
+
# unless have_library('glib-2.0')
|
21
|
+
# crash "libglib-2.0 needed"
|
22
|
+
# end
|
23
|
+
|
24
|
+
if ARGV.include?("-d")
|
25
|
+
$CFLAGS += " -D CUBDUINO_DEBUG"
|
26
|
+
end
|
27
|
+
|
28
|
+
if ARGV.include?("-O0")
|
29
|
+
$CFLAGS.gsub!(/-O./, "-O0")
|
30
|
+
else
|
31
|
+
$CFLAGS.gsub!(/-O./, "-O3")
|
32
|
+
end
|
33
|
+
|
34
|
+
if ARGV.include?("-gdb")
|
35
|
+
$CFLAGS += " -g -gdwarf-2 -g3"
|
36
|
+
end
|
37
|
+
|
38
|
+
create_makefile("cubduino")
|
data/lib/subduino/ard_io.rb
CHANGED
@@ -9,7 +9,7 @@ module Subduino
|
|
9
9
|
# Direct access to the SerialPort instance.
|
10
10
|
#
|
11
11
|
def sp
|
12
|
-
@sp ||= SerialPort.new(Arduino.find_usb,
|
12
|
+
@sp ||= SerialPort.new(Arduino.find_usb, AppConfig[:bauds] || 57600) #, DATA_BITS, DATA_STOP, parity)
|
13
13
|
# @sp.read_timeout = 10;# @sp.write_timeout = 10
|
14
14
|
end
|
15
15
|
|
@@ -21,18 +21,23 @@ module Subduino
|
|
21
21
|
# Feed it with a block to read the text.
|
22
22
|
#
|
23
23
|
def read(&proc)
|
24
|
-
Log.info "[USB]
|
24
|
+
Log.info "[USB] Found Device...#{Arduino.find_usb}"
|
25
|
+
Log.info "[USB] Starting Connect..." + sp.get_modem_params.map { |k,v| "#{k}: #{v}" }.join(" ")
|
25
26
|
Log.info "[USB] Read Timeout #{sp.read_timeout}" # {sp.write_timeout}"
|
26
27
|
|
28
|
+
if sp
|
27
29
|
@iothread ||= Thread.new do
|
28
|
-
Thread.current.abort_on_exception = false
|
30
|
+
# Thread.current.abort_on_exception = false
|
29
31
|
icache = []
|
30
32
|
loop do
|
31
33
|
begin
|
32
34
|
while char = sp.getc
|
33
35
|
if !char.valid_encoding?
|
34
|
-
|
36
|
+
bytes = char.bytes.to_a
|
37
|
+
hexes = bytes.map { |b| b.to_s(16) }
|
38
|
+
puts " - Bad char #{char} - (Hex: #{char.unpack('H')} | Byte(s) #{bytes} | Hexe(s) #{hexes}"
|
35
39
|
elsif char !~ /\n|\r/
|
40
|
+
# print char if Debug
|
36
41
|
icache << char
|
37
42
|
else
|
38
43
|
data = icache.join(""); icache = []
|
@@ -46,9 +51,13 @@ module Subduino
|
|
46
51
|
rescue => e
|
47
52
|
Log.error "[USB] Error #{e}"
|
48
53
|
Log.error e.backtrace.join("\n")
|
54
|
+
stop!
|
55
|
+
exit 1
|
49
56
|
end
|
50
57
|
end
|
51
58
|
end
|
59
|
+
end
|
60
|
+
|
52
61
|
end
|
53
62
|
|
54
63
|
#
|
@@ -60,8 +69,8 @@ module Subduino
|
|
60
69
|
#
|
61
70
|
def write(msg)
|
62
71
|
Log.info "[IO TX] #{msg}"
|
63
|
-
txt = msg.gsub("\r", "
|
64
|
-
|
72
|
+
txt = msg.gsub("\r|\n", "")
|
73
|
+
# txt += "\n" unless txt =~ /^\\n/
|
65
74
|
puts "=> Sending #{txt.inspect}" if Debug
|
66
75
|
sp.puts(msg)
|
67
76
|
end
|
@@ -72,6 +81,8 @@ module Subduino
|
|
72
81
|
#
|
73
82
|
def stop!
|
74
83
|
sp.close
|
84
|
+
Thread.kill @iothread
|
85
|
+
Log.info "[IO] K.I.A"
|
75
86
|
end
|
76
87
|
|
77
88
|
end
|
data/lib/subduino/ard_ps.rb
CHANGED
@@ -9,7 +9,7 @@ module Subduino
|
|
9
9
|
# Direct access to the Redis instance.
|
10
10
|
#
|
11
11
|
def redis
|
12
|
-
@redis ||= Redis.new(:timeout => 0)
|
12
|
+
@redis ||= Redis.new(:timeout => 0)
|
13
13
|
end
|
14
14
|
|
15
15
|
#
|
@@ -19,7 +19,7 @@ module Subduino
|
|
19
19
|
#
|
20
20
|
def read
|
21
21
|
return Log.warn "[PubSub] Not started..." unless redis
|
22
|
-
Thread.new do
|
22
|
+
@psthread = Thread.new do
|
23
23
|
begin
|
24
24
|
redis.subscribe('subduino') do |on|
|
25
25
|
on.subscribe {|klass, num_subs| Log.info "[PubSub] Subscribed to #{klass} (#{num_subs} subscriptions)" }
|
@@ -33,6 +33,7 @@ module Subduino
|
|
33
33
|
rescue => e
|
34
34
|
Log.error "[PubSub] Error #{e}"
|
35
35
|
Log.error e.backtrace.join("\n")
|
36
|
+
exit 1
|
36
37
|
end
|
37
38
|
|
38
39
|
end
|
@@ -52,7 +53,9 @@ module Subduino
|
|
52
53
|
# Fatality
|
53
54
|
#
|
54
55
|
def stop!
|
56
|
+
Thread.kill @psthread
|
55
57
|
redis.disconnect if redis
|
58
|
+
Log.info "[PubSub] K.I.A"
|
56
59
|
end
|
57
60
|
|
58
61
|
end
|
@@ -139,8 +139,16 @@ ifeq ($(strip $(NO_CORE)),)
|
|
139
139
|
ifdef ARDUINO_CORE_PATH
|
140
140
|
CORE_C_SRCS = $(wildcard $(ARDUINO_CORE_PATH)/*.c)
|
141
141
|
CORE_CPP_SRCS = $(wildcard $(ARDUINO_CORE_PATH)/*.cpp)
|
142
|
-
|
143
|
-
|
142
|
+
|
143
|
+
# FIXME: Dynamic way
|
144
|
+
ifdef ARDUINO_LIBS
|
145
|
+
EXTRA_C_SRCS = $(wildcard $(ARDUINO_LIB_PATH)/ExtraLib/*.c)
|
146
|
+
EXTRA_CPP_SRCS = $(wildcard $(ARDUINO_LIB_PATH)/ExtraLib/*.cpp)
|
147
|
+
CORE_OBJ_FILES = $(CORE_C_SRCS:.c=.o) $(CORE_CPP_SRCS:.cpp=.o) $(EXTRA_C_SRCS:.c=.o) $(EXTRA_CPP_SRCS:.cpp=.o)
|
148
|
+
endif
|
149
|
+
ifndef ARDUINO_LIBS
|
150
|
+
CORE_OBJ_FILES = $(CORE_C_SRCS:.c=.o) $(CORE_CPP_SRCS:.cpp=.o)
|
151
|
+
endif
|
144
152
|
CORE_OBJS = $(patsubst $(ARDUINO_CORE_PATH)/%, $(OBJDIR)/%,$(CORE_OBJ_FILES))
|
145
153
|
endif
|
146
154
|
endif
|
data/lib/subduino/store.rb
CHANGED
@@ -14,7 +14,7 @@ module Subduino
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def read(key)
|
17
|
-
redis.get key
|
17
|
+
redis.get key.to_s
|
18
18
|
end
|
19
19
|
|
20
20
|
def timestamp
|
@@ -23,10 +23,9 @@ module Subduino
|
|
23
23
|
|
24
24
|
def write(k, v, stamp = false)
|
25
25
|
return unless redis #.connected?
|
26
|
-
stamp ? redis.rpush("log:inputs:#{k}", "#{timestamp}:#{v}") : redis.set("now:inputs
|
26
|
+
stamp ? redis.rpush("log:inputs:#{k}", "#{timestamp}:#{v}") : redis.set("now:inputs:#{k}", v)
|
27
27
|
end
|
28
28
|
|
29
|
-
|
30
29
|
def add_to_store(key, val=nil)
|
31
30
|
if val
|
32
31
|
write key, val
|
@@ -38,7 +37,7 @@ module Subduino
|
|
38
37
|
end
|
39
38
|
|
40
39
|
def add_csv_to_store(csv, stamp = false)
|
41
|
-
Log.info "[STORE] CSV #{Time.now.to_i}"
|
40
|
+
# Log.info "[STORE] CSV #{Time.now.to_i}"
|
42
41
|
csv.split(",").each do |d|
|
43
42
|
comm, value = d.split(":")
|
44
43
|
write(comm, value, stamp)
|
data/lib/subduino.rb
CHANGED
@@ -4,6 +4,8 @@
|
|
4
4
|
#
|
5
5
|
#
|
6
6
|
#
|
7
|
+
require File.dirname(__FILE__) + '/../ext/subduino/cubduino'
|
8
|
+
#require "subduino/cubduino"
|
7
9
|
require 'serialport'
|
8
10
|
require 'eventmachine'
|
9
11
|
require 'stringio'
|
@@ -17,11 +19,10 @@ require 'subduino/parse'
|
|
17
19
|
require 'subduino/store'
|
18
20
|
require 'subduino/arduino'
|
19
21
|
|
20
|
-
Thread.current.abort_on_exception = false
|
22
|
+
#Thread.current.abort_on_exception = false
|
21
23
|
|
22
24
|
module Subduino
|
23
|
-
Log = Logger.new("
|
24
|
-
BAUDS = 115200 #BAUDS = 9600
|
25
|
+
Log = Logger.new(const_defined?("DEBUG") ? STDOUT : "subduino-debug.log")
|
25
26
|
# BAUDS = [300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, 115200]
|
26
27
|
Sensors = [:temp, :lux]
|
27
28
|
# DATA_BITS = 8
|
@@ -32,7 +33,9 @@ module Subduino
|
|
32
33
|
trap(:TERM) { stop! }
|
33
34
|
trap(:INT) { stop! }
|
34
35
|
# Start some threads...
|
36
|
+
Log.info "[IO] Boot!"
|
35
37
|
ArdIO.read &proc
|
38
|
+
Log.info "[PubSub] Boot!"
|
36
39
|
ArdPS.read
|
37
40
|
|
38
41
|
# Be a daemon. Should be a better way..
|
@@ -40,7 +43,9 @@ module Subduino
|
|
40
43
|
end
|
41
44
|
|
42
45
|
def self.stop!
|
46
|
+
Log.info "[IO] Shutting I/O down..."
|
43
47
|
ArdIO.stop!
|
48
|
+
Log.info "[PubSub] Shutting PubSub down..."
|
44
49
|
ArdPS.stop!
|
45
50
|
exit 0
|
46
51
|
end
|
data/spec/subduino/store_spec.rb
CHANGED
@@ -5,11 +5,11 @@ describe "Store" do
|
|
5
5
|
it "should write things" do
|
6
6
|
Store.flush
|
7
7
|
Store.write(:temp, 18)
|
8
|
-
Store.count.should eql(
|
8
|
+
Store.count.should eql(1)
|
9
9
|
end
|
10
10
|
|
11
11
|
it "should read" do
|
12
|
-
Store.read(:temp).should eql("18")
|
12
|
+
Store.read("now:inputs:temp").should eql("18")
|
13
13
|
end
|
14
14
|
|
15
15
|
it "should read array"
|
data/subduino.gemspec
CHANGED
@@ -9,10 +9,11 @@ Gem::Specification.new do |s|
|
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Marcos Piccinini"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-10-21}
|
13
13
|
s.description = %q{Interface, compile, upload, play with arduino/ruby}
|
14
14
|
s.email = %q{x@nofxx.com}
|
15
15
|
s.executables = ["subduino-cli", "subduino"]
|
16
|
+
s.extensions = ["ext/subduino/extconf.rb"]
|
16
17
|
s.files = [
|
17
18
|
".document",
|
18
19
|
".gitignore",
|
@@ -65,7 +66,8 @@ Gem::Specification.new do |s|
|
|
65
66
|
"spec/spec_helper.rb",
|
66
67
|
"spec/subduino/ard_io_spec.rb",
|
67
68
|
"spec/subduino/parse_spec.rb",
|
68
|
-
"spec/subduino/store_spec.rb"
|
69
|
+
"spec/subduino/store_spec.rb",
|
70
|
+
"spec/subduino/cubduino_spec.rb"
|
69
71
|
]
|
70
72
|
|
71
73
|
if s.respond_to? :specification_version then
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 0.
|
7
|
+
- 3
|
8
|
+
- 1
|
9
|
+
version: 0.3.1
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Marcos Piccinini
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date:
|
17
|
+
date: 2011-08-29 00:00:00 -03:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -58,18 +58,17 @@ dependencies:
|
|
58
58
|
version: 1.2.9
|
59
59
|
type: :development
|
60
60
|
version_requirements: *id003
|
61
|
-
description: Interface, compile, upload
|
61
|
+
description: Interface, compile, upload... Play with arduino on ruby!
|
62
62
|
email: x@nofxx.com
|
63
63
|
executables:
|
64
|
-
- subduino-cli
|
65
64
|
- subduino
|
66
|
-
|
67
|
-
|
65
|
+
- subduino-cli
|
66
|
+
extensions:
|
67
|
+
- ext/subduino/extconf.rb
|
68
68
|
extra_rdoc_files: []
|
69
69
|
|
70
70
|
files:
|
71
71
|
- .document
|
72
|
-
- .gitignore
|
73
72
|
- Rakefile
|
74
73
|
- Readme.textile
|
75
74
|
- VERSION
|
@@ -80,6 +79,13 @@ files:
|
|
80
79
|
- duino/duino.pde
|
81
80
|
- duino/duino.rb
|
82
81
|
- duino/methods.pde
|
82
|
+
- examples/duin
|
83
|
+
- ext/subduino/Makefile
|
84
|
+
- ext/subduino/cubduino.c
|
85
|
+
- ext/subduino/cubduino.h
|
86
|
+
- ext/subduino/cubduino.o
|
87
|
+
- ext/subduino/cubduino.so
|
88
|
+
- ext/subduino/extconf.rb
|
83
89
|
- lib/subduino.rb
|
84
90
|
- lib/subduino/ard_io.rb
|
85
91
|
- lib/subduino/ard_ps.rb
|
@@ -104,6 +110,7 @@ files:
|
|
104
110
|
- node/vendor/faye.js
|
105
111
|
- spec/spec_helper.rb
|
106
112
|
- spec/subduino/ard_io_spec.rb
|
113
|
+
- spec/subduino/cubduino_spec.rb
|
107
114
|
- spec/subduino/parse_spec.rb
|
108
115
|
- spec/subduino/store_spec.rb
|
109
116
|
- spec/subduino_spec.rb
|
@@ -113,8 +120,8 @@ homepage: http://github.com/nofxx/subduino
|
|
113
120
|
licenses: []
|
114
121
|
|
115
122
|
post_install_message:
|
116
|
-
rdoc_options:
|
117
|
-
|
123
|
+
rdoc_options: []
|
124
|
+
|
118
125
|
require_paths:
|
119
126
|
- lib
|
120
127
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -140,9 +147,5 @@ rubygems_version: 1.3.7
|
|
140
147
|
signing_key:
|
141
148
|
specification_version: 3
|
142
149
|
summary: Arduino Ruby Helpers
|
143
|
-
test_files:
|
144
|
-
|
145
|
-
- spec/spec_helper.rb
|
146
|
-
- spec/subduino/ard_io_spec.rb
|
147
|
-
- spec/subduino/parse_spec.rb
|
148
|
-
- spec/subduino/store_spec.rb
|
150
|
+
test_files: []
|
151
|
+
|
data/.gitignore
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
## MAC OS
|
2
|
-
.DS_Store
|
3
|
-
|
4
|
-
## TEXTMATE
|
5
|
-
*.tmproj
|
6
|
-
tmtags
|
7
|
-
|
8
|
-
## EMACS
|
9
|
-
*~
|
10
|
-
\#*
|
11
|
-
.\#*
|
12
|
-
|
13
|
-
## VIM
|
14
|
-
*.swp
|
15
|
-
|
16
|
-
## PROJECT::GENERAL
|
17
|
-
coverage
|
18
|
-
rdoc
|
19
|
-
pkg
|
20
|
-
|
21
|
-
## PROJECT::SPECIFIC
|
22
|
-
*.log
|
23
|
-
*.gem
|
24
|
-
*.rdb
|
25
|
-
*.cache
|
26
|
-
webapp/.bundle/*
|