subduino 0.2.2 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- 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/*
|