nabaztag_hack_kit 0.0.3 → 0.1.0.alpha1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -0
- data/.travis.yml +1 -1
- data/CHANGELOG.md +7 -1
- data/Rakefile +2 -17
- data/{ext/bytecode → bytecode}/Docs.md +2 -1
- data/bytecode/Rakefile +7 -0
- data/{bin → bytecode/bin}/mtl_comp +9 -0
- data/{bin → bytecode/bin}/mtl_merge +2 -2
- data/{bin → bytecode/bin}/mtl_simu +9 -0
- data/bytecode/lib/buffer.mtl +6 -0
- data/bytecode/lib/button.mtl +18 -12
- data/bytecode/lib/ear.mtl +3 -3
- data/bytecode/lib/led.mtl +1 -1
- data/bytecode/lib/ping.mtl +16 -0
- data/bytecode/lib/record.mtl +87 -0
- data/bytecode/lib/rfid.mtl +3 -21
- data/bytecode/main.mtl +86 -29
- data/{ext/bytecode → bytecode/src}/lib/http.mtl +15 -3
- data/{ext/bytecode → bytecode/src}/lib/udp.mtl +1 -1
- data/{ext/bytecode → bytecode/src}/lib/util.mtl +4 -1
- data/bytecode/src/lib/wav.mtl +223 -0
- data/{ext → bytecode/src}/mtl/README.md +2 -2
- data/{ext/bytecode → bytecode/src}/nominal-ping.mtl +123 -124
- data/{test/bytecode → bytecode/test}/native.mtl +11 -1
- data/{test/bytecode → bytecode/test}/test.mtl +3 -3
- data/examples/record/Gemfile +5 -0
- data/examples/record/config.ru.example +19 -0
- data/examples/record/server.rb +112 -0
- data/examples/simple/Gemfile +6 -0
- data/examples/simple/Procfile +3 -0
- data/{config.ru → examples/simple/config.ru} +3 -1
- data/lib/nabaztag_hack_kit/message/api.rb +8 -0
- data/lib/nabaztag_hack_kit/message/helper.rb +26 -2
- data/lib/nabaztag_hack_kit/message.rb +11 -5
- data/lib/nabaztag_hack_kit/public/index.html +5 -0
- data/lib/nabaztag_hack_kit/server.rb +54 -8
- data/lib/nabaztag_hack_kit/version.rb +1 -1
- data/nabaztag_hack_kit.gemspec +4 -3
- data/spec/integration/server_spec.rb +50 -0
- data/{test → spec}/spec_helper.rb +1 -1
- data/{test → spec}/unit/message_spec.rb +2 -2
- data/spec/unit/server_spec.rb +40 -0
- metadata +140 -119
- data/public/bytecode.bin +0 -0
- /data/{ext/bytecode → bytecode}/Commands.md +0 -0
- /data/{ext/bytecode → bytecode/src}/README.md +0 -0
- /data/{ext/bytecode → bytecode/src}/lib/arp.mtl +0 -0
- /data/{ext/bytecode → bytecode/src}/lib/cfg.mtl +0 -0
- /data/{ext/bytecode → bytecode/src}/lib/choreos.mtl +0 -0
- /data/{ext/bytecode → bytecode/src}/lib/dhcp.mtl +0 -0
- /data/{ext/bytecode → bytecode/src}/lib/dns.mtl +0 -0
- /data/{ext/bytecode → bytecode/src}/lib/tcp.mtl +0 -0
- /data/{ext/bytecode → bytecode/src}/lib/var.mtl +0 -0
- /data/{ext/bytecode → bytecode/src}/lib/wifi.mtl +0 -0
- /data/{ext → bytecode/src}/mtl/Makefile +0 -0
- /data/{ext → bytecode/src}/mtl/bc.cpp +0 -0
- /data/{ext → bytecode/src}/mtl/conf.bin.sans_password +0 -0
- /data/{ext → bytecode/src}/mtl/config.txt +0 -0
- /data/{ext → bytecode/src}/mtl/dumpbc.c +0 -0
- /data/{ext → bytecode/src}/mtl/extconf.rb +0 -0
- /data/{ext → bytecode/src}/mtl/linux_simu.c +0 -0
- /data/{ext → bytecode/src}/mtl/linux_simuaudio.c +0 -0
- /data/{ext → bytecode/src}/mtl/linux_simuaudio.h +0 -0
- /data/{ext → bytecode/src}/mtl/linux_simunet.c +0 -0
- /data/{ext → bytecode/src}/mtl/linux_simunet.h +0 -0
- /data/{ext → bytecode/src}/mtl/log.c +0 -0
- /data/{ext → bytecode/src}/mtl/log.h +0 -0
- /data/{ext → bytecode/src}/mtl/main_compiler.cpp +0 -0
- /data/{ext → bytecode/src}/mtl/main_simu.cpp +0 -0
- /data/{ext → bytecode/src}/mtl/mp3/GTKANAL.H +0 -0
- /data/{ext → bytecode/src}/mtl/mp3/LAYER3.C +0 -0
- /data/{ext → bytecode/src}/mtl/mp3/TABINIT.C +0 -0
- /data/{ext → bytecode/src}/mtl/mp3/common.c +0 -0
- /data/{ext → bytecode/src}/mtl/mp3/dct64_i386.c +0 -0
- /data/{ext → bytecode/src}/mtl/mp3/decode_i386.c +0 -0
- /data/{ext → bytecode/src}/mtl/mp3/huffman.h +0 -0
- /data/{ext → bytecode/src}/mtl/mp3/interface.c +0 -0
- /data/{ext → bytecode/src}/mtl/mp3/mpg123.h +0 -0
- /data/{ext → bytecode/src}/mtl/mp3/mpglib.h +0 -0
- /data/{ext → bytecode/src}/mtl/properties.c +0 -0
- /data/{ext → bytecode/src}/mtl/properties.h +0 -0
- /data/{ext → bytecode/src}/mtl/simu.c +0 -0
- /data/{ext → bytecode/src}/mtl/simuaudio.c +0 -0
- /data/{ext → bytecode/src}/mtl/simuaudio.h +0 -0
- /data/{ext → bytecode/src}/mtl/simunet.c +0 -0
- /data/{ext → bytecode/src}/mtl/simunet.h +0 -0
- /data/{ext → bytecode/src}/mtl/utils/correct_const.sh +0 -0
- /data/{ext → bytecode/src}/mtl/vaudio.c +0 -0
- /data/{ext → bytecode/src}/mtl/vaudio.h +0 -0
- /data/{ext → bytecode/src}/mtl/vbc.h +0 -0
- /data/{ext → bytecode/src}/mtl/vbc_str.h +0 -0
- /data/{ext → bytecode/src}/mtl/vcomp/Makefile +0 -0
- /data/{ext → bytecode/src}/mtl/vcomp/bootstrap.cpp +0 -0
- /data/{ext → bytecode/src}/mtl/vcomp/compiler.cpp +0 -0
- /data/{ext → bytecode/src}/mtl/vcomp/compiler.h +0 -0
- /data/{ext → bytecode/src}/mtl/vcomp/compiler_file.cpp +0 -0
- /data/{ext → bytecode/src}/mtl/vcomp/compiler_prog.cpp +0 -0
- /data/{ext → bytecode/src}/mtl/vcomp/compiler_term.cpp +0 -0
- /data/{ext → bytecode/src}/mtl/vcomp/compiler_type.cpp +0 -0
- /data/{ext → bytecode/src}/mtl/vcomp/compiler_var.cpp +0 -0
- /data/{ext → bytecode/src}/mtl/vcomp/file.cpp +0 -0
- /data/{ext → bytecode/src}/mtl/vcomp/file.h +0 -0
- /data/{ext → bytecode/src}/mtl/vcomp/filesystem.h +0 -0
- /data/{ext → bytecode/src}/mtl/vcomp/interpreter.cpp +0 -0
- /data/{ext → bytecode/src}/mtl/vcomp/interpreter.h +0 -0
- /data/{ext → bytecode/src}/mtl/vcomp/memory.cpp +0 -0
- /data/{ext → bytecode/src}/mtl/vcomp/memory.h +0 -0
- /data/{ext → bytecode/src}/mtl/vcomp/param.h +0 -0
- /data/{ext → bytecode/src}/mtl/vcomp/parser.cpp +0 -0
- /data/{ext → bytecode/src}/mtl/vcomp/parser.h +0 -0
- /data/{ext → bytecode/src}/mtl/vcomp/parser_xml.cpp +0 -0
- /data/{ext → bytecode/src}/mtl/vcomp/prodbuffer.cpp +0 -0
- /data/{ext → bytecode/src}/mtl/vcomp/prodbuffer.h +0 -0
- /data/{ext → bytecode/src}/mtl/vcomp/resource.h +0 -0
- /data/{ext → bytecode/src}/mtl/vcomp/stdlib_core.cpp +0 -0
- /data/{ext → bytecode/src}/mtl/vcomp/terminal.cpp +0 -0
- /data/{ext → bytecode/src}/mtl/vcomp/terminal.h +0 -0
- /data/{ext → bytecode/src}/mtl/vcomp/util.cpp +0 -0
- /data/{ext → bytecode/src}/mtl/vcomp/util.h +0 -0
- /data/{ext → bytecode/src}/mtl/vinterp.c +0 -0
- /data/{ext → bytecode/src}/mtl/vinterp.h +0 -0
- /data/{ext → bytecode/src}/mtl/vloader.c +0 -0
- /data/{ext → bytecode/src}/mtl/vloader.h +0 -0
- /data/{ext → bytecode/src}/mtl/vlog.c +0 -0
- /data/{ext → bytecode/src}/mtl/vlog.h +0 -0
- /data/{ext → bytecode/src}/mtl/vmem.c +0 -0
- /data/{ext → bytecode/src}/mtl/vmem.h +0 -0
- /data/{ext → bytecode/src}/mtl/vnet.c +0 -0
- /data/{ext → bytecode/src}/mtl/vnet.h +0 -0
- /data/{test/bytecode → bytecode/test}/helper.mtl +0 -0
@@ -0,0 +1,223 @@
|
|
1
|
+
// wav playback
|
2
|
+
|
3
|
+
var lastvol;;
|
4
|
+
var forcedvol=0;;
|
5
|
+
fun volfrombutton v=let 255-v -> v in 255-((v*v)>>8);;
|
6
|
+
|
7
|
+
fun updatevol=
|
8
|
+
let button3 -> v in
|
9
|
+
if !forcedvol && v!=lastvol && (lastvol!=255 || v<250) then
|
10
|
+
(
|
11
|
+
set lastvol=v;
|
12
|
+
sndVol volfrombutton v
|
13
|
+
);;
|
14
|
+
|
15
|
+
fun forcevol v=
|
16
|
+
sndVol volfrombutton (button3*v)>>8;
|
17
|
+
set forcedvol=1;
|
18
|
+
0;;
|
19
|
+
fun unforcevol=
|
20
|
+
set forcedvol=0;
|
21
|
+
set lastvol=nil;
|
22
|
+
0;;
|
23
|
+
|
24
|
+
//--------------------------------------------------
|
25
|
+
|
26
|
+
const WAV_IDLE=0;;
|
27
|
+
const WAV_RUN=1;;
|
28
|
+
const WAV_EOF=2;;
|
29
|
+
const WAV_BUFFER_STARTSIZE= 80000;;
|
30
|
+
const WAV_BUFFER_MAXSIZE =400000;;
|
31
|
+
const WAV_END_TIMEOUT=500;;
|
32
|
+
const WAV_NET_TIMEOUT=15000;;
|
33
|
+
|
34
|
+
var wav_end_timeout;;
|
35
|
+
|
36
|
+
var wav_http_cb=nil;;
|
37
|
+
var wav_state=0;;
|
38
|
+
var wav_http;;
|
39
|
+
var wav_fifo;;
|
40
|
+
var wav_buffering=0;;
|
41
|
+
var wav_buffering_since=0;;
|
42
|
+
var wav_index;;
|
43
|
+
var wav_lasttime;;
|
44
|
+
var wav_lastnet;;
|
45
|
+
var wav_zeros;;
|
46
|
+
|
47
|
+
fun wavgetzeros=
|
48
|
+
if wav_zeros==nil then
|
49
|
+
(
|
50
|
+
set wav_zeros=strnew 2048;
|
51
|
+
for i=0;i<2048 do strset wav_zeros i 0
|
52
|
+
);
|
53
|
+
wav_zeros;;
|
54
|
+
|
55
|
+
fun wavstop =
|
56
|
+
Secholn "###wavstop";
|
57
|
+
if wav_state!=WAV_IDLE then
|
58
|
+
(
|
59
|
+
playStop;
|
60
|
+
if wav_http!=nil then httpabort wav_http;
|
61
|
+
set wav_http=nil;
|
62
|
+
set wav_buffering = 0;
|
63
|
+
set wav_state=WAV_IDLE
|
64
|
+
);;
|
65
|
+
|
66
|
+
fun wavrunning =
|
67
|
+
if wav_state==WAV_IDLE then 0
|
68
|
+
else if wav_fifo==nil && wav_state==WAV_EOF && (time_ms-wav_lasttime > wav_end_timeout) then
|
69
|
+
(
|
70
|
+
Secholn "###wav detected end";
|
71
|
+
wavstop;
|
72
|
+
0
|
73
|
+
)
|
74
|
+
else if wav_lasttime==nil then -1 else 1;;
|
75
|
+
|
76
|
+
// The main wav playback callback
|
77
|
+
// reads from wav_fifo and feeds playFeed
|
78
|
+
fun _wavplaycb i =
|
79
|
+
set wav_lasttime=time_ms;
|
80
|
+
if wav_fifo==nil then
|
81
|
+
(
|
82
|
+
// nothing in fifo
|
83
|
+
if wav_state==WAV_EOF then playFeed nil nil nil
|
84
|
+
else if !wav_buffering then (
|
85
|
+
Secho ">>>>buffering";
|
86
|
+
set wav_buffering=1;
|
87
|
+
set wav_buffering_since = time_ms
|
88
|
+
)
|
89
|
+
)
|
90
|
+
else
|
91
|
+
(
|
92
|
+
// was buffering ?
|
93
|
+
if wav_buffering && (wav_state==WAV_EOF || (slistlen wav_fifo)>=WAV_BUFFER_STARTSIZE) then
|
94
|
+
(
|
95
|
+
Secholn "<<<<end_buffering";
|
96
|
+
set wav_buffering=0
|
97
|
+
);
|
98
|
+
if !wav_buffering then
|
99
|
+
let hd wav_fifo -> sample in
|
100
|
+
let strlen sample -> len in
|
101
|
+
(
|
102
|
+
// push sample data
|
103
|
+
// wav_index is the index within the current sample.
|
104
|
+
if wav_index<len then (
|
105
|
+
// send some bytes to the VM buffer.
|
106
|
+
let (playFeed sample /*Iecho*/ wav_index nil) -> pushedbytes in (
|
107
|
+
// this is how many bytes we sent.
|
108
|
+
set wav_index=wav_index+pushedbytes
|
109
|
+
)
|
110
|
+
);
|
111
|
+
if wav_index>=len then
|
112
|
+
(
|
113
|
+
// we sent the whole first sample.
|
114
|
+
// (in fact, wav_index cannot be bigger than len).
|
115
|
+
// reset the counter on the sample and transition to the next sample.
|
116
|
+
set wav_index=0;
|
117
|
+
set wav_fifo=tl wav_fifo;
|
118
|
+
// Secho "[b-:" ; Iecho (slistlen wav_fifo); Secho "]";
|
119
|
+
if wav_http!=nil then if (slistlen wav_fifo)<WAV_BUFFER_MAXSIZE then if !(httpenabledP wav_http) then
|
120
|
+
(
|
121
|
+
Secho "##http restart##";
|
122
|
+
httpenable wav_http 1
|
123
|
+
)
|
124
|
+
)
|
125
|
+
)
|
126
|
+
);
|
127
|
+
0;;
|
128
|
+
|
129
|
+
fun _wavstartnow =
|
130
|
+
set wav_index=0;
|
131
|
+
set wav_buffering=1;
|
132
|
+
set wav_buffering_since = time_ms;
|
133
|
+
playStart 1024 #_wavplaycb;;
|
134
|
+
|
135
|
+
fun wavstartlocalEx l timeout=
|
136
|
+
wavstop;
|
137
|
+
set wav_end_timeout=timeout;
|
138
|
+
set wav_fifo=conc l (wavgetzeros)::nil;
|
139
|
+
set wav_state=WAV_EOF;
|
140
|
+
set wav_lasttime=time_ms;
|
141
|
+
set wav_http=nil;
|
142
|
+
_wavstartnow
|
143
|
+
;;
|
144
|
+
|
145
|
+
fun wavstartlocal l=
|
146
|
+
wavstartlocalEx l WAV_END_TIMEOUT;;
|
147
|
+
|
148
|
+
/*
|
149
|
+
fun itobin4 i=strcatlist (ctoa i)::(ctoa i>>8)::(ctoa i>>16)::(ctoa i>>24)::nil;;
|
150
|
+
fun itobin2 i=strcatlist (ctoa i)::(ctoa i>>8)::nil;;
|
151
|
+
|
152
|
+
fun mkwav freq channel bps=
|
153
|
+
let strcatlist
|
154
|
+
"WAVEfmt "::(itobin4 0x12)::
|
155
|
+
(itobin2 1)::(itobin2 channel)::
|
156
|
+
(itobin4 freq)::(itobin4 freq*channel*bps/8)::
|
157
|
+
(itobin2 channel*bps/8)::(itobin4 bps)::
|
158
|
+
"data"::(itobin4 0)::nil -> c in
|
159
|
+
strcatlist "RIFF"::(itobin4 (strlen c))::c::nil;;
|
160
|
+
*/
|
161
|
+
|
162
|
+
fun _wavcbhttp httpreq req=
|
163
|
+
set wav_lastnet = time_ms;
|
164
|
+
if req == nil then
|
165
|
+
(
|
166
|
+
Secholn ">>>>>>>>>>>>>>>>>>>>>>>>>>>>><end of file";
|
167
|
+
set wav_state=WAV_EOF;
|
168
|
+
if wav_fifo!=nil then
|
169
|
+
set wav_fifo=conc wav_fifo (wavgetzeros)::nil;
|
170
|
+
if wav_index==nil then
|
171
|
+
(
|
172
|
+
// had never started wav playback check if something in fifo. If yes, play it, if not stop wav
|
173
|
+
set wav_fifo = tl wav_fifo;
|
174
|
+
if wav_fifo==nil then
|
175
|
+
wavstop
|
176
|
+
else
|
177
|
+
_wavstartnow
|
178
|
+
);
|
179
|
+
0
|
180
|
+
)
|
181
|
+
else
|
182
|
+
(
|
183
|
+
set wav_fifo=conc wav_fifo req::nil;
|
184
|
+
let (slistlen wav_fifo) -> n in
|
185
|
+
(
|
186
|
+
if wav_index==nil && n>WAV_BUFFER_STARTSIZE then
|
187
|
+
(
|
188
|
+
// had never started wav playback : start it
|
189
|
+
set wav_fifo=tl wav_fifo;
|
190
|
+
_wavstartnow
|
191
|
+
)
|
192
|
+
else if n > WAV_BUFFER_MAXSIZE then
|
193
|
+
(
|
194
|
+
Secho "##http wait##";
|
195
|
+
httpenable httpreq 0
|
196
|
+
);
|
197
|
+
nil
|
198
|
+
)
|
199
|
+
);
|
200
|
+
updatevol;
|
201
|
+
0;;
|
202
|
+
|
203
|
+
fun wavstarthttp url cb=
|
204
|
+
wavstop;
|
205
|
+
set wav_http_cb = cb;
|
206
|
+
set wav_end_timeout = WAV_END_TIMEOUT;
|
207
|
+
set wav_fifo = nil;
|
208
|
+
set wav_state = WAV_RUN;
|
209
|
+
set wav_index = nil;
|
210
|
+
set wav_buffering = 1;
|
211
|
+
set wav_buffering_since = time_ms;
|
212
|
+
set wav_lasttime = nil;
|
213
|
+
set wav_lastnet = time_ms;
|
214
|
+
set wav_http = httprequest "GET" url nil #_wavcbhttp HTTP_STREAM;;
|
215
|
+
|
216
|
+
fun wavtime =
|
217
|
+
// Check timeout against wav_buffering_since
|
218
|
+
if (wav_http!=nil && wav_state==WAV_RUN && wav_buffering && (time_ms - wav_buffering_since > WAV_NET_TIMEOUT)) then (
|
219
|
+
Secho "wavhttp timeout";
|
220
|
+
wavstop;
|
221
|
+
if (wav_http_cb != nil) then call wav_http_cb []
|
222
|
+
);
|
223
|
+
0;;
|
@@ -4,10 +4,10 @@ Nabaztag V1/V2 Compiler for linux
|
|
4
4
|
|
5
5
|
## Install
|
6
6
|
|
7
|
-
|
7
|
+
Simply run `make`
|
8
8
|
|
9
9
|
## Disclamier
|
10
10
|
|
11
11
|
Sources copied from [OpenJabNab](https://github.com/OpenJabNab/OpenJabNab/tree/master/bootcode/compiler/mtl_linux)
|
12
12
|
|
13
|
-
Dummy task 'make install' added to enable gem inline install
|
13
|
+
Dummy task 'make install' added to enable gem inline install
|