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.
Files changed (130) hide show
  1. data/.gitignore +2 -0
  2. data/.travis.yml +1 -1
  3. data/CHANGELOG.md +7 -1
  4. data/Rakefile +2 -17
  5. data/{ext/bytecode → bytecode}/Docs.md +2 -1
  6. data/bytecode/Rakefile +7 -0
  7. data/{bin → bytecode/bin}/mtl_comp +9 -0
  8. data/{bin → bytecode/bin}/mtl_merge +2 -2
  9. data/{bin → bytecode/bin}/mtl_simu +9 -0
  10. data/bytecode/lib/buffer.mtl +6 -0
  11. data/bytecode/lib/button.mtl +18 -12
  12. data/bytecode/lib/ear.mtl +3 -3
  13. data/bytecode/lib/led.mtl +1 -1
  14. data/bytecode/lib/ping.mtl +16 -0
  15. data/bytecode/lib/record.mtl +87 -0
  16. data/bytecode/lib/rfid.mtl +3 -21
  17. data/bytecode/main.mtl +86 -29
  18. data/{ext/bytecode → bytecode/src}/lib/http.mtl +15 -3
  19. data/{ext/bytecode → bytecode/src}/lib/udp.mtl +1 -1
  20. data/{ext/bytecode → bytecode/src}/lib/util.mtl +4 -1
  21. data/bytecode/src/lib/wav.mtl +223 -0
  22. data/{ext → bytecode/src}/mtl/README.md +2 -2
  23. data/{ext/bytecode → bytecode/src}/nominal-ping.mtl +123 -124
  24. data/{test/bytecode → bytecode/test}/native.mtl +11 -1
  25. data/{test/bytecode → bytecode/test}/test.mtl +3 -3
  26. data/examples/record/Gemfile +5 -0
  27. data/examples/record/config.ru.example +19 -0
  28. data/examples/record/server.rb +112 -0
  29. data/examples/simple/Gemfile +6 -0
  30. data/examples/simple/Procfile +3 -0
  31. data/{config.ru → examples/simple/config.ru} +3 -1
  32. data/lib/nabaztag_hack_kit/message/api.rb +8 -0
  33. data/lib/nabaztag_hack_kit/message/helper.rb +26 -2
  34. data/lib/nabaztag_hack_kit/message.rb +11 -5
  35. data/lib/nabaztag_hack_kit/public/index.html +5 -0
  36. data/lib/nabaztag_hack_kit/server.rb +54 -8
  37. data/lib/nabaztag_hack_kit/version.rb +1 -1
  38. data/nabaztag_hack_kit.gemspec +4 -3
  39. data/spec/integration/server_spec.rb +50 -0
  40. data/{test → spec}/spec_helper.rb +1 -1
  41. data/{test → spec}/unit/message_spec.rb +2 -2
  42. data/spec/unit/server_spec.rb +40 -0
  43. metadata +140 -119
  44. data/public/bytecode.bin +0 -0
  45. /data/{ext/bytecode → bytecode}/Commands.md +0 -0
  46. /data/{ext/bytecode → bytecode/src}/README.md +0 -0
  47. /data/{ext/bytecode → bytecode/src}/lib/arp.mtl +0 -0
  48. /data/{ext/bytecode → bytecode/src}/lib/cfg.mtl +0 -0
  49. /data/{ext/bytecode → bytecode/src}/lib/choreos.mtl +0 -0
  50. /data/{ext/bytecode → bytecode/src}/lib/dhcp.mtl +0 -0
  51. /data/{ext/bytecode → bytecode/src}/lib/dns.mtl +0 -0
  52. /data/{ext/bytecode → bytecode/src}/lib/tcp.mtl +0 -0
  53. /data/{ext/bytecode → bytecode/src}/lib/var.mtl +0 -0
  54. /data/{ext/bytecode → bytecode/src}/lib/wifi.mtl +0 -0
  55. /data/{ext → bytecode/src}/mtl/Makefile +0 -0
  56. /data/{ext → bytecode/src}/mtl/bc.cpp +0 -0
  57. /data/{ext → bytecode/src}/mtl/conf.bin.sans_password +0 -0
  58. /data/{ext → bytecode/src}/mtl/config.txt +0 -0
  59. /data/{ext → bytecode/src}/mtl/dumpbc.c +0 -0
  60. /data/{ext → bytecode/src}/mtl/extconf.rb +0 -0
  61. /data/{ext → bytecode/src}/mtl/linux_simu.c +0 -0
  62. /data/{ext → bytecode/src}/mtl/linux_simuaudio.c +0 -0
  63. /data/{ext → bytecode/src}/mtl/linux_simuaudio.h +0 -0
  64. /data/{ext → bytecode/src}/mtl/linux_simunet.c +0 -0
  65. /data/{ext → bytecode/src}/mtl/linux_simunet.h +0 -0
  66. /data/{ext → bytecode/src}/mtl/log.c +0 -0
  67. /data/{ext → bytecode/src}/mtl/log.h +0 -0
  68. /data/{ext → bytecode/src}/mtl/main_compiler.cpp +0 -0
  69. /data/{ext → bytecode/src}/mtl/main_simu.cpp +0 -0
  70. /data/{ext → bytecode/src}/mtl/mp3/GTKANAL.H +0 -0
  71. /data/{ext → bytecode/src}/mtl/mp3/LAYER3.C +0 -0
  72. /data/{ext → bytecode/src}/mtl/mp3/TABINIT.C +0 -0
  73. /data/{ext → bytecode/src}/mtl/mp3/common.c +0 -0
  74. /data/{ext → bytecode/src}/mtl/mp3/dct64_i386.c +0 -0
  75. /data/{ext → bytecode/src}/mtl/mp3/decode_i386.c +0 -0
  76. /data/{ext → bytecode/src}/mtl/mp3/huffman.h +0 -0
  77. /data/{ext → bytecode/src}/mtl/mp3/interface.c +0 -0
  78. /data/{ext → bytecode/src}/mtl/mp3/mpg123.h +0 -0
  79. /data/{ext → bytecode/src}/mtl/mp3/mpglib.h +0 -0
  80. /data/{ext → bytecode/src}/mtl/properties.c +0 -0
  81. /data/{ext → bytecode/src}/mtl/properties.h +0 -0
  82. /data/{ext → bytecode/src}/mtl/simu.c +0 -0
  83. /data/{ext → bytecode/src}/mtl/simuaudio.c +0 -0
  84. /data/{ext → bytecode/src}/mtl/simuaudio.h +0 -0
  85. /data/{ext → bytecode/src}/mtl/simunet.c +0 -0
  86. /data/{ext → bytecode/src}/mtl/simunet.h +0 -0
  87. /data/{ext → bytecode/src}/mtl/utils/correct_const.sh +0 -0
  88. /data/{ext → bytecode/src}/mtl/vaudio.c +0 -0
  89. /data/{ext → bytecode/src}/mtl/vaudio.h +0 -0
  90. /data/{ext → bytecode/src}/mtl/vbc.h +0 -0
  91. /data/{ext → bytecode/src}/mtl/vbc_str.h +0 -0
  92. /data/{ext → bytecode/src}/mtl/vcomp/Makefile +0 -0
  93. /data/{ext → bytecode/src}/mtl/vcomp/bootstrap.cpp +0 -0
  94. /data/{ext → bytecode/src}/mtl/vcomp/compiler.cpp +0 -0
  95. /data/{ext → bytecode/src}/mtl/vcomp/compiler.h +0 -0
  96. /data/{ext → bytecode/src}/mtl/vcomp/compiler_file.cpp +0 -0
  97. /data/{ext → bytecode/src}/mtl/vcomp/compiler_prog.cpp +0 -0
  98. /data/{ext → bytecode/src}/mtl/vcomp/compiler_term.cpp +0 -0
  99. /data/{ext → bytecode/src}/mtl/vcomp/compiler_type.cpp +0 -0
  100. /data/{ext → bytecode/src}/mtl/vcomp/compiler_var.cpp +0 -0
  101. /data/{ext → bytecode/src}/mtl/vcomp/file.cpp +0 -0
  102. /data/{ext → bytecode/src}/mtl/vcomp/file.h +0 -0
  103. /data/{ext → bytecode/src}/mtl/vcomp/filesystem.h +0 -0
  104. /data/{ext → bytecode/src}/mtl/vcomp/interpreter.cpp +0 -0
  105. /data/{ext → bytecode/src}/mtl/vcomp/interpreter.h +0 -0
  106. /data/{ext → bytecode/src}/mtl/vcomp/memory.cpp +0 -0
  107. /data/{ext → bytecode/src}/mtl/vcomp/memory.h +0 -0
  108. /data/{ext → bytecode/src}/mtl/vcomp/param.h +0 -0
  109. /data/{ext → bytecode/src}/mtl/vcomp/parser.cpp +0 -0
  110. /data/{ext → bytecode/src}/mtl/vcomp/parser.h +0 -0
  111. /data/{ext → bytecode/src}/mtl/vcomp/parser_xml.cpp +0 -0
  112. /data/{ext → bytecode/src}/mtl/vcomp/prodbuffer.cpp +0 -0
  113. /data/{ext → bytecode/src}/mtl/vcomp/prodbuffer.h +0 -0
  114. /data/{ext → bytecode/src}/mtl/vcomp/resource.h +0 -0
  115. /data/{ext → bytecode/src}/mtl/vcomp/stdlib_core.cpp +0 -0
  116. /data/{ext → bytecode/src}/mtl/vcomp/terminal.cpp +0 -0
  117. /data/{ext → bytecode/src}/mtl/vcomp/terminal.h +0 -0
  118. /data/{ext → bytecode/src}/mtl/vcomp/util.cpp +0 -0
  119. /data/{ext → bytecode/src}/mtl/vcomp/util.h +0 -0
  120. /data/{ext → bytecode/src}/mtl/vinterp.c +0 -0
  121. /data/{ext → bytecode/src}/mtl/vinterp.h +0 -0
  122. /data/{ext → bytecode/src}/mtl/vloader.c +0 -0
  123. /data/{ext → bytecode/src}/mtl/vloader.h +0 -0
  124. /data/{ext → bytecode/src}/mtl/vlog.c +0 -0
  125. /data/{ext → bytecode/src}/mtl/vlog.h +0 -0
  126. /data/{ext → bytecode/src}/mtl/vmem.c +0 -0
  127. /data/{ext → bytecode/src}/mtl/vmem.h +0 -0
  128. /data/{ext → bytecode/src}/mtl/vnet.c +0 -0
  129. /data/{ext → bytecode/src}/mtl/vnet.h +0 -0
  130. /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
- Simlie run `make`
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