nabaztag_hack_kit 0.0.2
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/.gitignore +7 -0
- data/.travis.yml +3 -0
- data/CHANGELOG.md +11 -0
- data/Gemfile +4 -0
- data/README.md +119 -0
- data/Rakefile +21 -0
- data/bin/mtl_comp +41 -0
- data/bin/mtl_merge +22 -0
- data/bin/mtl_simu +40 -0
- data/bytecode/lib/buffer.mtl +109 -0
- data/bytecode/lib/button.mtl +27 -0
- data/bytecode/lib/data_helper.mtl +88 -0
- data/bytecode/lib/ear.mtl +90 -0
- data/bytecode/lib/led.mtl +33 -0
- data/bytecode/lib/rfid.mtl +50 -0
- data/bytecode/main.mtl +129 -0
- data/config.ru +6 -0
- data/ext/bytecode/Commands.md +172 -0
- data/ext/bytecode/Docs.md +488 -0
- data/ext/bytecode/README.md +5 -0
- data/ext/bytecode/lib/arp.mtl +159 -0
- data/ext/bytecode/lib/cfg.mtl +74 -0
- data/ext/bytecode/lib/choreos.mtl +1487 -0
- data/ext/bytecode/lib/dhcp.mtl +152 -0
- data/ext/bytecode/lib/dns.mtl +89 -0
- data/ext/bytecode/lib/http.mtl +84 -0
- data/ext/bytecode/lib/tcp.mtl +340 -0
- data/ext/bytecode/lib/udp.mtl +49 -0
- data/ext/bytecode/lib/util.mtl +74 -0
- data/ext/bytecode/lib/var.mtl +15 -0
- data/ext/bytecode/lib/wifi.mtl +243 -0
- data/ext/bytecode/nominal-ping.mtl +5828 -0
- data/ext/mtl/Makefile +42 -0
- data/ext/mtl/README.md +13 -0
- data/ext/mtl/bc.cpp +1891 -0
- data/ext/mtl/conf.bin.sans_password +0 -0
- data/ext/mtl/config.txt +5 -0
- data/ext/mtl/dumpbc.c +2566 -0
- data/ext/mtl/extconf.rb +1 -0
- data/ext/mtl/linux_simu.c +271 -0
- data/ext/mtl/linux_simuaudio.c +16 -0
- data/ext/mtl/linux_simuaudio.h +18 -0
- data/ext/mtl/linux_simunet.c +620 -0
- data/ext/mtl/linux_simunet.h +7 -0
- data/ext/mtl/log.c +297 -0
- data/ext/mtl/log.h +20 -0
- data/ext/mtl/main_compiler.cpp +104 -0
- data/ext/mtl/main_simu.cpp +221 -0
- data/ext/mtl/mp3/GTKANAL.H +97 -0
- data/ext/mtl/mp3/LAYER3.C +2090 -0
- data/ext/mtl/mp3/TABINIT.C +82 -0
- data/ext/mtl/mp3/common.c +265 -0
- data/ext/mtl/mp3/dct64_i386.c +316 -0
- data/ext/mtl/mp3/decode_i386.c +155 -0
- data/ext/mtl/mp3/huffman.h +332 -0
- data/ext/mtl/mp3/interface.c +258 -0
- data/ext/mtl/mp3/mpg123.h +182 -0
- data/ext/mtl/mp3/mpglib.h +44 -0
- data/ext/mtl/properties.c +293 -0
- data/ext/mtl/properties.h +10 -0
- data/ext/mtl/simu.c +750 -0
- data/ext/mtl/simuaudio.c +662 -0
- data/ext/mtl/simuaudio.h +74 -0
- data/ext/mtl/simunet.c +400 -0
- data/ext/mtl/simunet.h +30 -0
- data/ext/mtl/utils/correct_const.sh +34 -0
- data/ext/mtl/vaudio.c +677 -0
- data/ext/mtl/vaudio.h +46 -0
- data/ext/mtl/vbc.h +160 -0
- data/ext/mtl/vbc_str.h +166 -0
- data/ext/mtl/vcomp/Makefile +29 -0
- data/ext/mtl/vcomp/bootstrap.cpp +89 -0
- data/ext/mtl/vcomp/compiler.cpp +470 -0
- data/ext/mtl/vcomp/compiler.h +200 -0
- data/ext/mtl/vcomp/compiler_file.cpp +929 -0
- data/ext/mtl/vcomp/compiler_prog.cpp +250 -0
- data/ext/mtl/vcomp/compiler_term.cpp +1053 -0
- data/ext/mtl/vcomp/compiler_type.cpp +872 -0
- data/ext/mtl/vcomp/compiler_var.cpp +289 -0
- data/ext/mtl/vcomp/file.cpp +79 -0
- data/ext/mtl/vcomp/file.h +39 -0
- data/ext/mtl/vcomp/filesystem.h +14 -0
- data/ext/mtl/vcomp/interpreter.cpp +85 -0
- data/ext/mtl/vcomp/interpreter.h +121 -0
- data/ext/mtl/vcomp/memory.cpp +241 -0
- data/ext/mtl/vcomp/memory.h +326 -0
- data/ext/mtl/vcomp/param.h +95 -0
- data/ext/mtl/vcomp/parser.cpp +427 -0
- data/ext/mtl/vcomp/parser.h +97 -0
- data/ext/mtl/vcomp/parser_xml.cpp +124 -0
- data/ext/mtl/vcomp/prodbuffer.cpp +125 -0
- data/ext/mtl/vcomp/prodbuffer.h +42 -0
- data/ext/mtl/vcomp/resource.h +17 -0
- data/ext/mtl/vcomp/stdlib_core.cpp +122 -0
- data/ext/mtl/vcomp/terminal.cpp +73 -0
- data/ext/mtl/vcomp/terminal.h +30 -0
- data/ext/mtl/vcomp/util.cpp +48 -0
- data/ext/mtl/vcomp/util.h +31 -0
- data/ext/mtl/vinterp.c +1349 -0
- data/ext/mtl/vinterp.h +11 -0
- data/ext/mtl/vloader.c +127 -0
- data/ext/mtl/vloader.h +31 -0
- data/ext/mtl/vlog.c +589 -0
- data/ext/mtl/vlog.h +69 -0
- data/ext/mtl/vmem.c +424 -0
- data/ext/mtl/vmem.h +107 -0
- data/ext/mtl/vnet.c +255 -0
- data/ext/mtl/vnet.h +19 -0
- data/lib/nabaztag_hack_kit/message/api.rb +39 -0
- data/lib/nabaztag_hack_kit/message/helper.rb +39 -0
- data/lib/nabaztag_hack_kit/message.rb +36 -0
- data/lib/nabaztag_hack_kit/server.rb +50 -0
- data/lib/nabaztag_hack_kit/version.rb +3 -0
- data/lib/nabaztag_hack_kit.rb +4 -0
- data/nabaztag_hack_kit.gemspec +29 -0
- data/public/bytecode.bin +0 -0
- data/test/bytecode/helper.mtl +60 -0
- data/test/bytecode/native.mtl +28 -0
- data/test/bytecode/test.mtl +221 -0
- data/test/spec_helper.rb +5 -0
- data/test/unit/message_spec.rb +56 -0
- metadata +209 -0
data/ext/mtl/vnet.c
ADDED
@@ -0,0 +1,255 @@
|
|
1
|
+
// VLISP Virtual Machine - 2006 - by Sylvain Huet
|
2
|
+
// Lowcost IS Powerfull
|
3
|
+
#include"vmem.h"
|
4
|
+
#include"properties.h"
|
5
|
+
|
6
|
+
#ifdef VSIMU
|
7
|
+
#include <string.h>
|
8
|
+
#include<stdio.h>
|
9
|
+
#include<time.h>
|
10
|
+
#include "log.h"
|
11
|
+
int netstatesimu=1;
|
12
|
+
#endif
|
13
|
+
#ifdef VREAL
|
14
|
+
#include "rt2501usb.h"
|
15
|
+
#endif
|
16
|
+
#include"vloader.h"
|
17
|
+
#include"vnet.h"
|
18
|
+
#include"vlog.h"
|
19
|
+
#include"vinterp.h"
|
20
|
+
int netState()
|
21
|
+
{
|
22
|
+
#ifdef VSIMU
|
23
|
+
return netstatesimu;
|
24
|
+
#endif
|
25
|
+
#ifdef VREAL
|
26
|
+
return rt2501_state();
|
27
|
+
#endif
|
28
|
+
}
|
29
|
+
|
30
|
+
int netSend(char* src,int indexsrc,int lentosend,int lensrc,char* macdst,int inddst,int lendst,int speed)
|
31
|
+
{
|
32
|
+
#ifdef VSIMU
|
33
|
+
my_printf(LOG_SIMUNET, "xxxx netSend\n");
|
34
|
+
return -1;
|
35
|
+
#endif
|
36
|
+
#ifdef VREAL
|
37
|
+
if (indexsrc<0) return -1;
|
38
|
+
if (indexsrc+lentosend>lensrc) lentosend=lensrc-indexsrc;
|
39
|
+
if (lentosend<=0) return -1;
|
40
|
+
if (inddst<0) return -1;
|
41
|
+
if (inddst+6>lendst) return -1;
|
42
|
+
return rt2501_send((const unsigned char *)(src+indexsrc),lentosend,(const unsigned char *)(macdst+inddst),speed,1);
|
43
|
+
#endif
|
44
|
+
}
|
45
|
+
|
46
|
+
int netCb(char* src,int lensrc,char* macsrc)
|
47
|
+
{
|
48
|
+
VPUSH(PNTTOVAL(VMALLOCSTR(src,lensrc)));
|
49
|
+
VPUSH(PNTTOVAL(VMALLOCSTR(macsrc,6)));
|
50
|
+
VPUSH(VCALLSTACKGET(sys_start,SYS_CBTCP));
|
51
|
+
if (VSTACKGET(0)!=NIL) interpGo();
|
52
|
+
else { VPULL();VPULL();}
|
53
|
+
VPULL();
|
54
|
+
return 0;
|
55
|
+
}
|
56
|
+
|
57
|
+
extern unsigned char rt2501_mac[6];
|
58
|
+
|
59
|
+
#ifdef VSIMU
|
60
|
+
int htoi2(char* src)
|
61
|
+
{
|
62
|
+
char buf[3];
|
63
|
+
buf[0]=src[0];
|
64
|
+
buf[1]=src[1];
|
65
|
+
buf[2]=0;
|
66
|
+
return sysHtoi(buf);
|
67
|
+
}
|
68
|
+
#endif
|
69
|
+
|
70
|
+
char mac[6];
|
71
|
+
|
72
|
+
char* netMac()
|
73
|
+
{
|
74
|
+
#ifdef VSIMU
|
75
|
+
int i;
|
76
|
+
char *p=PropGet("MAC");
|
77
|
+
for(i=0;i<6;i++) mac[i]=htoi2(&p[i*2]);
|
78
|
+
return mac;
|
79
|
+
// return "abcdef";
|
80
|
+
#endif
|
81
|
+
#ifdef VREAL
|
82
|
+
return (char*) rt2501_mac;
|
83
|
+
#endif
|
84
|
+
}
|
85
|
+
|
86
|
+
int netChk(char* src,int indexsrc,int lentosend,int lensrc,unsigned int val)
|
87
|
+
{
|
88
|
+
unsigned short* p;
|
89
|
+
|
90
|
+
if (indexsrc<0) return val;
|
91
|
+
if (indexsrc+lentosend>lensrc) lentosend=lensrc-indexsrc;
|
92
|
+
if (lentosend<=0) return val;
|
93
|
+
|
94
|
+
src+=indexsrc;
|
95
|
+
p=(unsigned short*)src;
|
96
|
+
|
97
|
+
val=((val<<8)&0xff00)+((val>>8)&0xff);
|
98
|
+
while(lentosend>1)
|
99
|
+
{
|
100
|
+
val+=*(p++);
|
101
|
+
lentosend-=2;
|
102
|
+
}
|
103
|
+
if (lentosend) val+=*(unsigned char*)p;
|
104
|
+
|
105
|
+
val=(val>>16)+(val&0xffff);
|
106
|
+
val=(val>>16)+(val&0xffff);
|
107
|
+
val=((val<<8)&0xff00)+((val>>8)&0xff);
|
108
|
+
return val;
|
109
|
+
}
|
110
|
+
|
111
|
+
void netSetmode(int mode,char* ssid,int chn)
|
112
|
+
{
|
113
|
+
#ifdef VSIMU
|
114
|
+
my_printf(LOG_SIMUNET, "xxxx netSetmode %d %s %d\n",mode,ssid,chn);
|
115
|
+
netstatesimu=(mode)?5:4;
|
116
|
+
#endif
|
117
|
+
#ifdef VREAL
|
118
|
+
rt2501_setmode(mode,ssid,chn);
|
119
|
+
#endif
|
120
|
+
}
|
121
|
+
|
122
|
+
|
123
|
+
int nscan;
|
124
|
+
#ifdef VREAL
|
125
|
+
void netScan_(struct rt2501_scan_result *scan_result, void *userparam)
|
126
|
+
{
|
127
|
+
char buf[256];
|
128
|
+
sprintf(buf,">>> %s %d %d %d %d\n",scan_result->ssid,scan_result->rssi,scan_result->channel,scan_result->rateset,scan_result->encryption);
|
129
|
+
consolestr((UBYTE*)buf);
|
130
|
+
VPUSH(PNTTOVAL(VMALLOCSTR(scan_result->ssid,strlen(scan_result->ssid))));
|
131
|
+
VPUSH(PNTTOVAL(VMALLOCSTR((char*)scan_result->mac,6)));
|
132
|
+
VPUSH(PNTTOVAL(VMALLOCSTR((char*)scan_result->bssid,6)));
|
133
|
+
VPUSH(INTTOVAL(scan_result->rssi));
|
134
|
+
VPUSH(INTTOVAL(scan_result->channel));
|
135
|
+
VPUSH(INTTOVAL(scan_result->rateset));
|
136
|
+
VPUSH(INTTOVAL(scan_result->encryption));
|
137
|
+
VMKTAB(7);
|
138
|
+
nscan++;
|
139
|
+
}
|
140
|
+
#endif
|
141
|
+
|
142
|
+
void netScan(char* ssid)
|
143
|
+
{
|
144
|
+
nscan=0;
|
145
|
+
#ifdef VSIMU
|
146
|
+
VPUSH(PNTTOVAL(VMALLOCSTR("foo",3)));
|
147
|
+
VPUSH(PNTTOVAL(VMALLOCSTR("xyzxyz",6)));
|
148
|
+
VPUSH(PNTTOVAL(VMALLOCSTR("765432",6)));
|
149
|
+
VPUSH(INTTOVAL(-20));
|
150
|
+
VPUSH(INTTOVAL(11));
|
151
|
+
VPUSH(INTTOVAL(1));
|
152
|
+
VPUSH(INTTOVAL(0));
|
153
|
+
VMKTAB(7);
|
154
|
+
nscan++;
|
155
|
+
VPUSH(PNTTOVAL(VMALLOCSTR("foo",3)));
|
156
|
+
VPUSH(PNTTOVAL(VMALLOCSTR("xyzxyz",6)));
|
157
|
+
VPUSH(PNTTOVAL(VMALLOCSTR("765432",6)));
|
158
|
+
VPUSH(INTTOVAL(-10));
|
159
|
+
VPUSH(INTTOVAL(11));
|
160
|
+
VPUSH(INTTOVAL(1));
|
161
|
+
VPUSH(INTTOVAL(0));
|
162
|
+
VMKTAB(7);
|
163
|
+
nscan++;
|
164
|
+
VPUSH(PNTTOVAL(VMALLOCSTR("zzzz",3)));
|
165
|
+
VPUSH(PNTTOVAL(VMALLOCSTR("xyzxyz",6)));
|
166
|
+
VPUSH(PNTTOVAL(VMALLOCSTR("765432",6)));
|
167
|
+
VPUSH(INTTOVAL(-10));
|
168
|
+
VPUSH(INTTOVAL(11));
|
169
|
+
VPUSH(INTTOVAL(1));
|
170
|
+
VPUSH(INTTOVAL(0));
|
171
|
+
VMKTAB(7);
|
172
|
+
nscan++;
|
173
|
+
VPUSH(PNTTOVAL(VMALLOCSTR("",3)));
|
174
|
+
VPUSH(PNTTOVAL(VMALLOCSTR("xyzxyz",6)));
|
175
|
+
VPUSH(PNTTOVAL(VMALLOCSTR("765432",6)));
|
176
|
+
VPUSH(INTTOVAL(-10));
|
177
|
+
VPUSH(INTTOVAL(11));
|
178
|
+
VPUSH(INTTOVAL(1));
|
179
|
+
VPUSH(INTTOVAL(0));
|
180
|
+
VMKTAB(7);
|
181
|
+
nscan++;
|
182
|
+
VPUSH(PNTTOVAL(VMALLOCSTR("a\"a<a'a a\\a",strlen("a\"a<a'a a\\a"))));
|
183
|
+
VPUSH(PNTTOVAL(VMALLOCSTR("xyzxyz",6)));
|
184
|
+
VPUSH(PNTTOVAL(VMALLOCSTR("765432",6)));
|
185
|
+
VPUSH(INTTOVAL(-10));
|
186
|
+
VPUSH(INTTOVAL(11));
|
187
|
+
VPUSH(INTTOVAL(1));
|
188
|
+
VPUSH(INTTOVAL(3));
|
189
|
+
VMKTAB(7);
|
190
|
+
nscan++;
|
191
|
+
VPUSH(PNTTOVAL(VMALLOCSTR("foo",3)));
|
192
|
+
VPUSH(PNTTOVAL(VMALLOCSTR("xyzxyz",6)));
|
193
|
+
VPUSH(PNTTOVAL(VMALLOCSTR("765432",6)));
|
194
|
+
VPUSH(INTTOVAL(-30));
|
195
|
+
VPUSH(INTTOVAL(11));
|
196
|
+
VPUSH(INTTOVAL(1));
|
197
|
+
VPUSH(INTTOVAL(0));
|
198
|
+
VMKTAB(7);
|
199
|
+
nscan++;
|
200
|
+
#endif
|
201
|
+
#ifdef VREAL
|
202
|
+
rt2501_scan(ssid, netScan_, NULL);
|
203
|
+
#endif
|
204
|
+
VPUSH(NIL);
|
205
|
+
while(nscan--) VMKTAB(2);
|
206
|
+
}
|
207
|
+
|
208
|
+
void netAuth(char* ssid,char* mac,char* bssid,int chn,int rate,int authmode,int encrypt,char* key)
|
209
|
+
{
|
210
|
+
#ifdef VSIMU
|
211
|
+
my_printf(LOG_SIMUNET, "xxxx netAuth %s %d %d %d %d\n",ssid,chn,rate,authmode,encrypt);
|
212
|
+
netstatesimu=4;
|
213
|
+
#endif
|
214
|
+
#ifdef VREAL
|
215
|
+
rt2501_auth((const char*)ssid,(const unsigned char*)mac,(const unsigned char*)bssid,chn,rate,authmode,encrypt,(const unsigned char*)key);
|
216
|
+
#endif
|
217
|
+
}
|
218
|
+
|
219
|
+
void netSeqAdd(unsigned char* seq,int n)
|
220
|
+
{
|
221
|
+
unsigned char res[4];
|
222
|
+
unsigned int val;
|
223
|
+
val=(seq[0]<<24)+(seq[1]<<16)+(seq[2]<<8)+seq[3];
|
224
|
+
val+=n;
|
225
|
+
res[3]=val; val>>=8;
|
226
|
+
res[2]=val; val>>=8;
|
227
|
+
res[1]=val; val>>=8;
|
228
|
+
res[0]=val;
|
229
|
+
VPUSH(PNTTOVAL(VMALLOCSTR((char*)res,4)));
|
230
|
+
}
|
231
|
+
|
232
|
+
void mypassword_to_pmk(const char *password, char *ssid, int ssidlength, unsigned char *pmk);
|
233
|
+
|
234
|
+
void netPmk(char* ssid,char* key,char* buf)
|
235
|
+
{
|
236
|
+
#ifdef VSIMU
|
237
|
+
my_printf(LOG_SIMUNET, "xxxx netPmk %s %s\n",ssid,key);
|
238
|
+
strcpy(buf,"01234567012345670123456701234567");
|
239
|
+
#endif
|
240
|
+
#ifdef VREAL
|
241
|
+
// strcpy(buf,"01234567012345670123456701234567");
|
242
|
+
mypassword_to_pmk(key,ssid,strlen(ssid), (unsigned char*)buf);
|
243
|
+
#endif
|
244
|
+
}
|
245
|
+
|
246
|
+
int netRssi()
|
247
|
+
{
|
248
|
+
#ifdef VSIMU
|
249
|
+
return -20;
|
250
|
+
#endif
|
251
|
+
#ifdef VREAL
|
252
|
+
return rt2501_rssi_average();
|
253
|
+
#endif
|
254
|
+
}
|
255
|
+
|
data/ext/mtl/vnet.h
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
// VLISP Virtual Machine - 2006 - by Sylvain Huet
|
2
|
+
// Lowcost IS Powerfull
|
3
|
+
|
4
|
+
#ifndef _NET_
|
5
|
+
#define _NET_
|
6
|
+
|
7
|
+
int netState();
|
8
|
+
int netSend(char* src,int indexsrc,int lentosend,int lensrc,char* macdst,int inddst,int lendst,int speed);
|
9
|
+
int netCb(char* src,int lensrc,char* macsrc);
|
10
|
+
char* netMac();
|
11
|
+
int netChk(char* src,int indexsrc,int lentosend,int lensrc,unsigned int val);
|
12
|
+
void netSetmode(int mode,char* ssid,int chn);
|
13
|
+
void netScan(char* ssid);
|
14
|
+
void netAuth(char* ssid,char* mac,char* bssid,int chn,int rate,int authmode,int encrypt,char* key);
|
15
|
+
void netSeqAdd(unsigned char* seq,int n);
|
16
|
+
void netPmk(char* ssid,char* key,char* buf);
|
17
|
+
int netRssi();
|
18
|
+
#endif
|
19
|
+
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module NabaztagHackKit
|
2
|
+
module Message
|
3
|
+
module Api
|
4
|
+
# 0 - 10 reserved for violet backwards compatibility
|
5
|
+
|
6
|
+
OK = 12
|
7
|
+
INIT = 16
|
8
|
+
LOG = 17
|
9
|
+
ERROR = 18
|
10
|
+
REBOOT = 19
|
11
|
+
|
12
|
+
LED_0 = 20
|
13
|
+
LED_1 = 21
|
14
|
+
LED_2 = 22
|
15
|
+
LED_3 = 23
|
16
|
+
LED_4 = 24
|
17
|
+
LED_L0 = 25
|
18
|
+
LED_L1 = 26
|
19
|
+
LED_L2 = 27
|
20
|
+
LED_L3 = 28
|
21
|
+
LED_L4 = 29
|
22
|
+
|
23
|
+
EAR_L = 40
|
24
|
+
EAR_R = 41
|
25
|
+
EAR_LL = 42
|
26
|
+
EAR_LR = 43
|
27
|
+
|
28
|
+
F = 1
|
29
|
+
B = 2
|
30
|
+
|
31
|
+
def rgb(values)
|
32
|
+
values.map do |value|
|
33
|
+
Message.to_3b(value)
|
34
|
+
end.flatten
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module NabaztagHackKit
|
2
|
+
module Message
|
3
|
+
module Helper
|
4
|
+
#blink
|
5
|
+
def bl(loops = 1, color_on = 0xFF, color_off = 0x00)
|
6
|
+
repeat(loops, [color_on, color_off])
|
7
|
+
end
|
8
|
+
|
9
|
+
#repeat
|
10
|
+
def rp(loops, pattern = 0)
|
11
|
+
Array.new(loops, pattern).flatten
|
12
|
+
end
|
13
|
+
alias_method :sl, :rp #sleep
|
14
|
+
|
15
|
+
#knight rider
|
16
|
+
def kr(color = 0xFF, led1 = Api::LED_L1, led2 = Api::LED_L2, led3 = Api::LED_L3)
|
17
|
+
{
|
18
|
+
led1 => [color,0,0,0],
|
19
|
+
led2 => [0,color],
|
20
|
+
led3 => [0,0,color,0]
|
21
|
+
}
|
22
|
+
end
|
23
|
+
|
24
|
+
def fire(color = 0x110000, led1 = Api::LED_L1, led2 = Api::LED_L2, led3 = Api::LED_L3)
|
25
|
+
data = Array.new(16) do |i|
|
26
|
+
Message.to_3b(i * color)
|
27
|
+
end + Array.new(8) do |i|
|
28
|
+
Message.to_3b((15-i) * 2 * color)
|
29
|
+
end
|
30
|
+
|
31
|
+
{
|
32
|
+
(led1+10) => data + [0,0,0] + [0,0,0],
|
33
|
+
(led2+10) => [0,0,0] + data + [0,0,0],
|
34
|
+
(led3+10) => [0,0,0] + [0,0,0] + data
|
35
|
+
}
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module NabaztagHackKit
|
2
|
+
module Message
|
3
|
+
|
4
|
+
def build(*commands)
|
5
|
+
commands = if commands.first.is_a?(Hash)
|
6
|
+
commands.first
|
7
|
+
elsif !commands.first.is_a?(Array)
|
8
|
+
[commands]
|
9
|
+
else
|
10
|
+
commands
|
11
|
+
end
|
12
|
+
|
13
|
+
pack full_message commands.map { |cmd, *data|
|
14
|
+
[cmd] + to_3b(data.flatten.size) + data.flatten
|
15
|
+
}
|
16
|
+
end
|
17
|
+
module_function(:build)
|
18
|
+
|
19
|
+
def to_3b(int)
|
20
|
+
[int >> 16, int >> 8, int].map { |i| i & 0xFF }
|
21
|
+
end
|
22
|
+
module_function(:to_3b)
|
23
|
+
|
24
|
+
private
|
25
|
+
def full_message(*data)
|
26
|
+
[0x7F] + data.flatten + [0xFF, 0x0A]
|
27
|
+
end
|
28
|
+
module_function(:full_message)
|
29
|
+
|
30
|
+
def pack(message)
|
31
|
+
message.pack('c*')
|
32
|
+
end
|
33
|
+
module_function(:pack)
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'sinatra/base'
|
2
|
+
|
3
|
+
require 'nabaztag_hack_kit/message'
|
4
|
+
require 'nabaztag_hack_kit/message/api'
|
5
|
+
|
6
|
+
module NabaztagHackKit
|
7
|
+
class Server < Sinatra::Base
|
8
|
+
include Message::Api
|
9
|
+
|
10
|
+
def initialize(bytecode_path = nil)
|
11
|
+
super
|
12
|
+
@bytecode_path = bytecode_path || File.join('public', 'bytecode.bin')
|
13
|
+
end
|
14
|
+
|
15
|
+
def send_nabaztag(*data)
|
16
|
+
Message.build(*data)
|
17
|
+
end
|
18
|
+
|
19
|
+
def parse_log(logs)
|
20
|
+
logs.to_s.split("|").map do |line|
|
21
|
+
type, time, *values = line.split(",")
|
22
|
+
time = time.to_i
|
23
|
+
values = values.map &:to_i
|
24
|
+
|
25
|
+
if type == "moved"
|
26
|
+
values << (time - values[1]) << (values[1] - values[2]) << (time - values[2]) << (time - values[3])
|
27
|
+
end
|
28
|
+
"#{type}-#{time}: #{values.join("\t")}"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
get '/bc.jsp' do
|
33
|
+
# TODO recompile if changed
|
34
|
+
send_file @bytecode_path
|
35
|
+
end
|
36
|
+
|
37
|
+
get '/vl/button.jsp' do
|
38
|
+
send_nabaztag EAR_L => [12,0,16,0,16,0,16,0]
|
39
|
+
end
|
40
|
+
|
41
|
+
post '/vl/log.jsp' do
|
42
|
+
@logs = parse_log params[:logs]
|
43
|
+
puts "#########################"
|
44
|
+
puts @logs.join("\n")
|
45
|
+
puts "#########################"
|
46
|
+
send_nabaztag OK
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "nabaztag_hack_kit/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "nabaztag_hack_kit"
|
7
|
+
s.version = NabaztagHackKit::VERSION
|
8
|
+
s.authors = ["RngTng - Tobias Bielohlawek"]
|
9
|
+
s.email = ["tobi@soundcloud.com"]
|
10
|
+
s.homepage = "https://github.com/rngtng/nabaztag_hack_kit"
|
11
|
+
s.summary = %q{Sinatra server to run custom Nabaztag bytecode}
|
12
|
+
s.description = %q{Sinatra server api framework to run custom bytecode on Nabaztag v1/v2. Sources + Compiler included (linux only)}
|
13
|
+
|
14
|
+
s.files = `git ls-files`.split("\n")
|
15
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
16
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
17
|
+
s.extensions = ['ext/mtl/extconf.rb']
|
18
|
+
s.executables = ['mtl_comp', 'mtl_simu', 'mtl_merge']
|
19
|
+
|
20
|
+
s.require_paths = ["lib"]
|
21
|
+
|
22
|
+
["sinatra"].each do |gem|
|
23
|
+
s.add_dependency *gem.split(' ')
|
24
|
+
end
|
25
|
+
|
26
|
+
["rake", "rspec"].each do |gem|
|
27
|
+
s.add_development_dependency *gem.split(' ')
|
28
|
+
end
|
29
|
+
end
|
data/public/bytecode.bin
ADDED
Binary file
|
@@ -0,0 +1,60 @@
|
|
1
|
+
//----- asserts
|
2
|
+
fun test name=
|
3
|
+
SLecholn "\n"::name::": "::nil
|
4
|
+
;;
|
5
|
+
|
6
|
+
fun ok should=
|
7
|
+
SLecholn " "::should::" is valid"::nil
|
8
|
+
;;
|
9
|
+
|
10
|
+
fun failed should is=
|
11
|
+
SLecholn "!! "::" "::should::" expected but got "::is::nil
|
12
|
+
;;
|
13
|
+
|
14
|
+
fun assert_nil should=
|
15
|
+
if(should == nil) then
|
16
|
+
ok ""
|
17
|
+
else
|
18
|
+
failed "nil" "not nil"
|
19
|
+
;;
|
20
|
+
|
21
|
+
fun assert_equal should=
|
22
|
+
if(should == 1) then
|
23
|
+
ok ""
|
24
|
+
else
|
25
|
+
failed "true" "false"
|
26
|
+
;;
|
27
|
+
|
28
|
+
fun assert_not_equal should=
|
29
|
+
if(should != 1) then
|
30
|
+
ok ""
|
31
|
+
else
|
32
|
+
failed "false" "true"
|
33
|
+
;;
|
34
|
+
|
35
|
+
fun assert_equalI should is=
|
36
|
+
if(should == is) then
|
37
|
+
ok itoa should
|
38
|
+
else
|
39
|
+
failed itoa should itoa is
|
40
|
+
;;
|
41
|
+
|
42
|
+
fun assert_equalS should is=
|
43
|
+
let strcat should "\v" -> shouldn in
|
44
|
+
if(strcmp should is) == 0 then
|
45
|
+
ok should
|
46
|
+
else
|
47
|
+
failed should is
|
48
|
+
;;
|
49
|
+
|
50
|
+
fun assert_equalIL should is=
|
51
|
+
assert_equalS listtostr should listtostr is
|
52
|
+
;;
|
53
|
+
|
54
|
+
fun assert_equalSL should is=
|
55
|
+
assert_equalS strcatlist should strcatlist is
|
56
|
+
;;
|
57
|
+
|
58
|
+
fun assert_equalTL should is=
|
59
|
+
assert_equalS TLtoS should TLtoS is
|
60
|
+
;;
|
@@ -0,0 +1,28 @@
|
|
1
|
+
//-------- test for native function
|
2
|
+
|
3
|
+
let test "listlen" -> t in
|
4
|
+
(
|
5
|
+
assert_equalI 0 listlen nil ;
|
6
|
+
assert_equalI 1 listlen "test"::nil
|
7
|
+
);
|
8
|
+
|
9
|
+
let test "listtostr" -> t in
|
10
|
+
(
|
11
|
+
assert_equalS "\49" listtostr 49::nil;
|
12
|
+
assert_equalS "\51\52\53" listtostr 51::52::53::nil
|
13
|
+
);
|
14
|
+
|
15
|
+
let test "strcatlist" -> t in
|
16
|
+
(
|
17
|
+
assert_equalS "\54" strcatlist "\54"::nil;
|
18
|
+
assert_equalS "313233" strcatlist "31"::"32"::"33"::nil
|
19
|
+
);
|
20
|
+
|
21
|
+
// remfromlist same as listrem!!!
|
22
|
+
//let test "remfromlist" -> t in
|
23
|
+
//(
|
24
|
+
// let "asd"::"a"::nil -> l in
|
25
|
+
// Lecho (remfromlist l (listlen l) - 1)
|
26
|
+
// //assert_equalS "0A000"
|
27
|
+
// assert_equalL 48::49::50::nil listrem 48::49::50::nil 49
|
28
|
+
//);
|