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
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
# Changes
|
2
2
|
|
3
|
+
## v0.1.0 - xx-09-2012
|
4
|
+
|
5
|
+
* files restructured, speration byte & ruby code
|
6
|
+
* update server for generic structure, added callback
|
7
|
+
* mtl binaires respect defaults from local `.mtlrc` file
|
8
|
+
|
3
9
|
## v0.0.2 - 29-01-2012
|
4
10
|
|
5
11
|
* rename to NabaztagHackKit
|
@@ -8,4 +14,4 @@
|
|
8
14
|
|
9
15
|
## v0.0.1 - 28-01-2012
|
10
16
|
|
11
|
-
* inital release
|
17
|
+
* inital release
|
data/Rakefile
CHANGED
@@ -1,21 +1,6 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
|
-
|
3
2
|
require 'rspec/core/rake_task'
|
4
|
-
RSpec::Core::RakeTask.new("unit") do |t|
|
5
|
-
t.pattern = "./test/**/*_spec.rb" # don't need this, it's default.
|
6
|
-
end
|
7
|
-
|
8
|
-
namespace :test do
|
9
|
-
desc "Test bytcode"
|
10
|
-
task :bytecode do
|
11
|
-
puts `bin/mtl_simu test/bytecode/test.mtl`
|
12
|
-
end
|
13
|
-
end
|
14
3
|
|
15
|
-
|
16
|
-
task :default => :test
|
4
|
+
RSpec::Core::RakeTask.new(:spec)
|
17
5
|
|
18
|
-
|
19
|
-
task :run do
|
20
|
-
`rackup -p 9090`
|
21
|
-
end
|
6
|
+
task :default => :spec
|
@@ -433,7 +433,7 @@ On suppose l’existence d’une fonction ‘rand’ qui retourne un nombre alé
|
|
433
433
|
Random notes of stuff I came accross while developing
|
434
434
|
|
435
435
|
### Leds
|
436
|
-
Thank
|
436
|
+
Thank good it's RGB: Led 0 - 4, Color RGB
|
437
437
|
|
438
438
|
led 0 0x000000; //black
|
439
439
|
led 0 0x0000FF; //blue
|
@@ -446,6 +446,7 @@ Thank god it's RGB: Led 0 - 4, Color RGB
|
|
446
446
|
|
447
447
|
|
448
448
|
### Ears
|
449
|
+
One loop is 15 ticks
|
449
450
|
|
450
451
|
### Custom functions
|
451
452
|
|
data/bytecode/Rakefile
ADDED
@@ -1,5 +1,14 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
+
MTL_FILE = ".mtlrc"
|
4
|
+
|
5
|
+
if File.exists?(MTL_FILE)
|
6
|
+
File.read(MTL_FILE).split("\n").each do |line|
|
7
|
+
var, *data = line.split("=")
|
8
|
+
ENV[var] = data.join
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
3
12
|
BIN_NAME = File.basename(__FILE__)
|
4
13
|
BIN_PATH = File.dirname(__FILE__)
|
5
14
|
BIN = File.join( File.expand_path("../ext/mtl", BIN_PATH), BIN_NAME)
|
@@ -14,9 +14,9 @@ file = ARGV.first
|
|
14
14
|
dir = File.dirname(file)
|
15
15
|
File.open(TMP, 'w') do |out|
|
16
16
|
File.open(file).each_line do |line|
|
17
|
-
if line =~
|
17
|
+
if line =~ /\A#include "([^"]+)"/
|
18
18
|
line = `cat #{dir}/#{$1}.mtl`
|
19
19
|
end
|
20
20
|
out.puts line
|
21
21
|
end
|
22
|
-
end
|
22
|
+
end
|
@@ -1,5 +1,14 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
+
MTL_FILE = ".mtlrc"
|
4
|
+
|
5
|
+
if File.exists?(MTL_FILE)
|
6
|
+
File.read(MTL_FILE).split("\n").each do |line|
|
7
|
+
var, *data = line.split("=")
|
8
|
+
ENV[var] = data.join
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
3
12
|
BIN_NAME = File.basename(__FILE__)
|
4
13
|
BIN_PATH = File.dirname(__FILE__)
|
5
14
|
BIN = File.join( File.expand_path("../ext/mtl", BIN_PATH), BIN_NAME)
|
data/bytecode/lib/buffer.mtl
CHANGED
@@ -1,6 +1,12 @@
|
|
1
1
|
//###############################################
|
2
2
|
//---------------------- Buffer -------------------------------
|
3
3
|
|
4
|
+
// #### LEDS
|
5
|
+
// Buffers 0 - 9, where 0-4 are used for onetime, and 5-9 for loop playback.
|
6
|
+
|
7
|
+
// #### EARS
|
8
|
+
// Buffers 10 - 13, where 10 & 11 are used for onetime, and 12 & 13 for loop playback.
|
9
|
+
|
4
10
|
var buffers;;
|
5
11
|
type BUFFER=[valB stepB lenB posB loopB];;
|
6
12
|
|
data/bytecode/lib/button.mtl
CHANGED
@@ -1,27 +1,33 @@
|
|
1
1
|
//###############################################
|
2
2
|
//------------------- Button --------------------
|
3
3
|
|
4
|
-
const BUTTON_REBOOT =
|
4
|
+
const BUTTON_REBOOT = 3000;; //ms MIN 50ms
|
5
5
|
var button_pressed = 0;;
|
6
|
+
|
6
7
|
fun checkButton=
|
7
8
|
if (button2 > 0) then
|
8
9
|
(
|
9
|
-
|
10
|
-
if button_pressed == 1 then
|
10
|
+
if button_pressed == 0 then
|
11
11
|
(
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
set button_pressed = time_ms
|
13
|
+
)
|
14
|
+
else if (time_ms - button_pressed) > BUTTON_REBOOT then
|
15
15
|
(
|
16
|
-
buffersFill 0 4 "\
|
16
|
+
buffersFill 0 4 "\255"
|
17
17
|
)
|
18
18
|
)
|
19
19
|
//reboot only when button not pressed, otherwise we get into setup mode
|
20
|
-
else if button_pressed >
|
20
|
+
else if button_pressed > 0 then
|
21
21
|
(
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
22
|
+
if (time_ms - button_pressed) > BUTTON_REBOOT then
|
23
|
+
(
|
24
|
+
exit;
|
25
|
+
set button_pressed = 0
|
26
|
+
)
|
27
|
+
else
|
28
|
+
(
|
29
|
+
httprequest "GET" buttonPressedUrl (time_ms - button_pressed) "" #_cbHttp HTTP_NORMAL;
|
30
|
+
set button_pressed = 0
|
31
|
+
)
|
26
32
|
)
|
27
33
|
;;
|
data/bytecode/lib/ear.mtl
CHANGED
@@ -46,10 +46,10 @@ fun earRead index=
|
|
46
46
|
if ear.dir != EAR_STOP && lastDuration > 1000 && totalDuration < 1450 then
|
47
47
|
(
|
48
48
|
set ear.pos = earNorm (ear.dir - 1) / 2; // either 0 or 16
|
49
|
-
bufferFill 0 "\100"
|
50
|
-
log "reset" {index lastDuration totalDuration ear.dir ear.pos}
|
49
|
+
bufferFill 0 "\100"
|
50
|
+
// log "reset" {index lastDuration totalDuration ear.dir ear.pos}
|
51
51
|
);
|
52
|
-
log "moved" {index ear.lastTime ear.lastTime2 ear.lastRead ear.pos ear.shouldPos ear.dir };
|
52
|
+
// log "moved" {index ear.lastTime ear.lastTime2 ear.lastRead ear.pos ear.shouldPos ear.dir };
|
53
53
|
|
54
54
|
set ear.lastTime2 = ear.lastTime;
|
55
55
|
set ear.lastTime = currentTime
|
data/bytecode/lib/led.mtl
CHANGED
@@ -0,0 +1,16 @@
|
|
1
|
+
//###############################################
|
2
|
+
//------------------ PING ----------------------
|
3
|
+
const PING_CHECK_FQ = 5000;; //ms -> 5s
|
4
|
+
const PING_PARAMS = "";;
|
5
|
+
|
6
|
+
var ping_last_check = 0;;
|
7
|
+
|
8
|
+
fun pingCheck=
|
9
|
+
let PING_CHECK_FQ -> ping_check_fq in
|
10
|
+
if ((time_ms - ping_last_check) > ping_check_fq) then
|
11
|
+
(
|
12
|
+
httprequest "GET" (pingUrl PING_PARAMS) "" #_cbHttp HTTP_NORMAL;
|
13
|
+
set ping_last_check = time_ms
|
14
|
+
)
|
15
|
+
;;
|
16
|
+
|
@@ -0,0 +1,87 @@
|
|
1
|
+
var lrec;;
|
2
|
+
var recording = 0;;
|
3
|
+
var recordingStartedAt = 0;;
|
4
|
+
var recSeconds = 0;;
|
5
|
+
|
6
|
+
var buff;;
|
7
|
+
var buffx;;
|
8
|
+
var buffy;;
|
9
|
+
|
10
|
+
//-------------------------------------------------------------
|
11
|
+
|
12
|
+
fun sqrt_ i i0 i1=
|
13
|
+
let (i0+i1)>>1 -> m in
|
14
|
+
if m==i0 then i0
|
15
|
+
else if m*m>i then sqrt_ i i0 m else sqrt_ i m i1;;
|
16
|
+
|
17
|
+
fun sqrt i=
|
18
|
+
sqrt_ i 0 256;;
|
19
|
+
|
20
|
+
fun _cbrec s=
|
21
|
+
let 255-(Iecholn sqrt recVol s 0) -> vol in
|
22
|
+
let 255-((vol*vol)>>8) -> vol in
|
23
|
+
let vol<<16 -> vol in
|
24
|
+
(
|
25
|
+
led 1 vol; led 2 vol; led 3 vol
|
26
|
+
);
|
27
|
+
set lrec=s::lrec;
|
28
|
+
0;;
|
29
|
+
|
30
|
+
fun itobin4 i=
|
31
|
+
let strnew 4 -> s in
|
32
|
+
(
|
33
|
+
strset s 0 i;
|
34
|
+
strset s 1 i>>8;
|
35
|
+
strset s 2 i>>16;
|
36
|
+
strset s 3 i>>24;
|
37
|
+
s
|
38
|
+
);;
|
39
|
+
|
40
|
+
fun liststrlen l r= if l==nil then r else liststrlen tl l r+strlen hd l;;
|
41
|
+
|
42
|
+
fun mkriff ldata=
|
43
|
+
let Iecholn liststrlen ldata 0 -> len in
|
44
|
+
(strcatlist "RIFF"::(itobin4 len+52)::"WAVEfmt \$14\0\0\0\$11\0\1\0\$40\$1f\0\0\$d7\$0f\0\0\0\1\4\0\2\0\$f9\01"::
|
45
|
+
"fact\4\0\0\0"::(itobin4 (len>>8)*505)::"data"::(itobin4 len)::nil)::ldata
|
46
|
+
;;
|
47
|
+
|
48
|
+
fun recriff =
|
49
|
+
// rev -> reverse list
|
50
|
+
let mkriff rev lrec nil -> res in
|
51
|
+
(
|
52
|
+
set lrec=nil;
|
53
|
+
res
|
54
|
+
)
|
55
|
+
;;
|
56
|
+
|
57
|
+
fun recordingStart sec=
|
58
|
+
recStop;
|
59
|
+
loopBufferFill 9 "\0\200";
|
60
|
+
set recording = 1;
|
61
|
+
set recSeconds =sec;
|
62
|
+
set lrec = nil;
|
63
|
+
set recordingStartedAt = time_ms;
|
64
|
+
recStart 8000 0 #_cbrec
|
65
|
+
;;
|
66
|
+
|
67
|
+
fun httprequestBinary url postdata cb type=
|
68
|
+
httprequestRaw "POST" url "Content-Type:application/octet-stream\13\nContent-Disposition: attachment;filename=recording\13\nContent-Transfer-Encoding: binary\13\n" postdata cb type
|
69
|
+
;;
|
70
|
+
|
71
|
+
fun recordingStop =
|
72
|
+
set recording = 0;
|
73
|
+
recStop;
|
74
|
+
loopBufferFill 9 "\0";
|
75
|
+
let recriff -> wavfile in
|
76
|
+
(
|
77
|
+
httprequestBinary recordingFinishedUrl strcatlist wavfile #_cbHttp HTTP_NORMAL;
|
78
|
+
0
|
79
|
+
)
|
80
|
+
;;
|
81
|
+
|
82
|
+
fun recordingCheck =
|
83
|
+
if recording == 1 && recSeconds > 0 && (time_ms - recordingStartedAt) > recSeconds then
|
84
|
+
(
|
85
|
+
recordingStop
|
86
|
+
)
|
87
|
+
;;
|
data/bytecode/lib/rfid.mtl
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
//###############################################
|
2
2
|
//--------------- RFID ------------------------
|
3
3
|
|
4
|
-
const RFID_CHECK_FQ =
|
4
|
+
const RFID_CHECK_FQ = 200;; //ms MIN 50ms
|
5
5
|
const RFID_STOP_BYTE = 0xFF;;
|
6
6
|
const RFID_ID_START = "\208\2\26";; // 0xd0 0x02 0x1a
|
7
7
|
const RFID_ID_FALSE = "\0\0\0\0\0\0\0\0\v";;
|
@@ -16,31 +16,13 @@ fun checkRFID=
|
|
16
16
|
let rfidGet -> rfid in
|
17
17
|
if (rfid != nil) then
|
18
18
|
(
|
19
|
-
if ((strstr rfid
|
20
|
-
(
|
21
|
-
httprequest "PUT" playerUrl rfid "" #_cbHttp HTTP_NORMAL;
|
22
|
-
0
|
23
|
-
)
|
24
|
-
else if ((strstr rfid RFID_ID_FALSE 0) == 0) then
|
19
|
+
if ((strstr rfid RFID_ID_FALSE 0) == 0) then
|
25
20
|
(
|
26
21
|
0
|
27
22
|
)
|
28
23
|
else
|
29
24
|
(
|
30
|
-
|
31
|
-
for index = 0; index < len; index + 1 do
|
32
|
-
(
|
33
|
-
let strget rfid index -> data_byte in
|
34
|
-
(
|
35
|
-
if (data_byte != RFID_STOP_BYTE) then
|
36
|
-
set rfid_data = strcat rfid_data ctoh data_byte
|
37
|
-
else if ((strlen rfid_data) > 0) then
|
38
|
-
(
|
39
|
-
httprequest "POST" eventUrl rfid_data "" #_cbHttp HTTP_NORMAL;
|
40
|
-
set rfid_data = ""
|
41
|
-
)
|
42
|
-
)
|
43
|
-
);
|
25
|
+
httprequest "PUT" rfidUrl rfid "" #_cbHttp HTTP_NORMAL;
|
44
26
|
0
|
45
27
|
)
|
46
28
|
);
|
data/bytecode/main.mtl
CHANGED
@@ -2,36 +2,58 @@
|
|
2
2
|
|
3
3
|
proto main 0;;
|
4
4
|
proto earsInit 0;;
|
5
|
-
|
6
|
-
|
7
|
-
#include "
|
8
|
-
#include "
|
9
|
-
#include "
|
10
|
-
#include "
|
11
|
-
#include "
|
12
|
-
#include "
|
13
|
-
#include "
|
14
|
-
#include "
|
5
|
+
proto evalTrame 1;;
|
6
|
+
|
7
|
+
#include "src/lib/var"
|
8
|
+
#include "src/lib/util"
|
9
|
+
#include "src/lib/cfg"
|
10
|
+
#include "src/lib/arp"
|
11
|
+
#include "src/lib/udp"
|
12
|
+
#include "src/lib/tcp"
|
13
|
+
#include "src/lib/dns"
|
14
|
+
#include "src/lib/http"
|
15
|
+
#include "src/lib/dhcp"
|
16
|
+
#include "src/lib/wav"
|
15
17
|
#include "lib/data_helper"
|
16
18
|
#include "lib/buffer"
|
17
|
-
#include "
|
19
|
+
#include "src/lib/wifi"
|
18
20
|
|
19
|
-
//-------------------- HTTP
|
20
|
-
fun
|
21
|
-
strcatlist confGetServerUrl::"/
|
21
|
+
//-------------------- HTTP Endpoints
|
22
|
+
fun logUrl=
|
23
|
+
strcatlist confGetServerUrl::"/api/log.jsp"::nil;;
|
22
24
|
|
23
|
-
fun
|
24
|
-
strcatlist confGetServerUrl::"/
|
25
|
+
fun buttonPressedUrl data=
|
26
|
+
strcatlist confGetServerUrl::"/api/button-pressed.jsp?duration="::(itoa data)::nil;;
|
25
27
|
|
26
|
-
fun
|
27
|
-
strcatlist confGetServerUrl::"/
|
28
|
+
fun recordingFinishedUrl =
|
29
|
+
strcatlist confGetServerUrl::"/api/recording-finished.jsp"::nil;;
|
28
30
|
|
29
|
-
fun
|
30
|
-
strcatlist confGetServerUrl::"/
|
31
|
+
fun playbackFinishedUrl =
|
32
|
+
strcatlist confGetServerUrl::"/api/playback-finished.jsp"::nil;;
|
33
|
+
|
34
|
+
fun playbackLoadFinishedUrl =
|
35
|
+
strcatlist confGetServerUrl::"/api/playback-load-finished.jsp"::nil;;
|
36
|
+
|
37
|
+
fun rfidUrl tag=
|
38
|
+
strcatlist confGetServerUrl::"/api/rfid.jsp?id="::(webmac tag)::nil;;
|
39
|
+
|
40
|
+
fun pingUrl params=
|
41
|
+
strcatlist confGetServerUrl::"/api/ping.jsp?"::params::nil;;
|
42
|
+
|
43
|
+
fun streamUrl filename=
|
44
|
+
strcatlist confGetServerUrl::"/streams/"::filename::nil;;
|
45
|
+
|
46
|
+
//-------------------- HTTP
|
31
47
|
|
32
48
|
fun _cbdummyhttp http res=
|
33
|
-
0
|
34
|
-
|
49
|
+
0;;
|
50
|
+
|
51
|
+
fun _cbHttp http res=
|
52
|
+
evalTrame res;
|
53
|
+
0;;
|
54
|
+
|
55
|
+
#include "lib/record"
|
56
|
+
#include "lib/ping"
|
35
57
|
|
36
58
|
fun evalTrame res=
|
37
59
|
let parseResponse httpgetcontent res -> bufferlist in
|
@@ -81,17 +103,46 @@ fun evalTrame res=
|
|
81
103
|
_bufferFill index+10 step loop val;
|
82
104
|
0
|
83
105
|
)
|
106
|
+
// recording start
|
107
|
+
else if code == 50 then
|
108
|
+
(
|
109
|
+
recordingStart 1000 * (strget val 0) //TODO only 1 - 9 possible??
|
110
|
+
)
|
111
|
+
// recording stop
|
112
|
+
else if code == 51 then
|
113
|
+
(
|
114
|
+
recordingStop
|
115
|
+
)
|
116
|
+
// play start
|
117
|
+
else if code == 60 then
|
118
|
+
(
|
119
|
+
// playbackStart
|
120
|
+
0
|
121
|
+
)
|
122
|
+
// play stop
|
123
|
+
else if code == 61 then
|
124
|
+
(
|
125
|
+
// playbackStop
|
126
|
+
0
|
127
|
+
)
|
128
|
+
// play load
|
129
|
+
else if code == 62 then
|
130
|
+
(
|
131
|
+
// playbackLoad val
|
132
|
+
0
|
133
|
+
)
|
134
|
+
// play stream
|
135
|
+
else if code == 63 then
|
136
|
+
(
|
137
|
+
// playbackStream val
|
138
|
+
0
|
139
|
+
)
|
84
140
|
)
|
85
141
|
)
|
86
142
|
;;
|
87
143
|
|
88
|
-
fun _cbHttp http res=
|
89
|
-
evalTrame res;
|
90
|
-
0
|
91
|
-
;;
|
92
|
-
|
93
144
|
//inputs
|
94
|
-
#include "lib/rfid"
|
145
|
+
// #include "lib/rfid"
|
95
146
|
#include "lib/button"
|
96
147
|
|
97
148
|
//outputs
|
@@ -104,11 +155,17 @@ fun loop=
|
|
104
155
|
wifiRun;
|
105
156
|
wifiCheck;
|
106
157
|
|
107
|
-
checkRFID;
|
158
|
+
// checkRFID;
|
108
159
|
checkButton;
|
160
|
+
|
109
161
|
setLeds;
|
110
162
|
earRead 0;
|
111
163
|
earRead 1;
|
164
|
+
|
165
|
+
pingCheck;
|
166
|
+
// wavtime;
|
167
|
+
|
168
|
+
recordingCheck;
|
112
169
|
0;;
|
113
170
|
|
114
171
|
//###############################################
|
@@ -30,7 +30,9 @@ fun httpsendreq ip x=
|
|
30
30
|
);
|
31
31
|
0;;
|
32
32
|
|
33
|
-
fun
|
33
|
+
fun httprequestRaw verb url header postdata cb type=
|
34
|
+
//set postdata = strcatlist "--AaB03x\13\ncontent-disposition: form-dataContent-Transfer-Encoding: binary\13\n\13\n"::postdata::"\13\n--AaB03x--"::nil;
|
35
|
+
// Content-Type:application/octet-stream\13\nContent-Disposition: attachment;filename=recording\13\nContent-Transfer-Encoding: binary\13\n
|
34
36
|
let cuturl url ->[host port path] in
|
35
37
|
//let if confGetProxy then strcatlist "http://"::host::":"::(itoa port)::path::nil else path -> path in //Icy-MetaData:1\13\n
|
36
38
|
//let if confGetProxy then webip confGetProxyip else host -> host in
|
@@ -38,12 +40,11 @@ fun httprequest verb url postdata cb type=
|
|
38
40
|
|
39
41
|
let strcatlist verb::" "::path::" HTTP/1.0\13\nUser-Agent: MTL\13\nPragma: no-cache\13\nIcy-MetaData:1\13\nHost: "::host::"\13\n"::
|
40
42
|
if postdata==nil then "\13\n"::nil
|
41
|
-
else "Content-length: "::(itoa strlen postdata)::"\13\n\13\n"::postdata::nil
|
43
|
+
else header::"Content-length: "::(itoa strlen postdata)::"\13\n\13\n"::postdata::nil
|
42
44
|
-> request in // création de la chaîne requête
|
43
45
|
|
44
46
|
let [outputH:request indexH:0 cbH:cb typeH:type stateH:HTTP_SOLVE aliveH:time_ms] -> httpreq in // création de la structure requête
|
45
47
|
(
|
46
|
-
// Secho "HTTPREQUEST host =";Secholn host;
|
47
48
|
if isip host 0 then httpsendreq host [port httpreq]
|
48
49
|
else
|
49
50
|
(
|
@@ -53,6 +54,9 @@ fun httprequest verb url postdata cb type=
|
|
53
54
|
httpreq // on retourne la structure requête pour pouvoir éventuellement l'interrompre en cours de route
|
54
55
|
);;
|
55
56
|
|
57
|
+
fun httprequest verb url postdata cb type=
|
58
|
+
httprequestRaw verb url "" postdata cb type
|
59
|
+
;;
|
56
60
|
|
57
61
|
var http_sep="\13\n\13\n";; // séparateur entre l'en-tête et le corps de la réponse à une requête
|
58
62
|
|
@@ -69,6 +73,14 @@ fun httpgetcontent res =
|
|
69
73
|
if i==nil then nil
|
70
74
|
else strsub res i+strlen http_sep strlen res;;
|
71
75
|
|
76
|
+
fun httpabort httpreq=
|
77
|
+
closetcp httpreq.cnxH;; // on ferme la socket de la requête
|
78
|
+
|
79
|
+
fun httpenable httpreq v=
|
80
|
+
enabletcp httpreq.cnxH v;;
|
81
|
+
fun httpenabledP httpreq=
|
82
|
+
enabledtcpP httpreq.cnxH;;
|
83
|
+
|
72
84
|
// Cryptage des trames
|
73
85
|
fun bintoi3 s x=((strget s x)<<16)+((strget s x+1)<<8)+(strget s x+2);;
|
74
86
|
|
@@ -4,6 +4,7 @@ fun setleds col= for i=0;i<5 do led i col;;
|
|
4
4
|
fun strstr s p i=strfind s i p 0 nil;;
|
5
5
|
fun listlen l=if l==nil then 0 else 1+listlen tl l;;
|
6
6
|
fun listrem l x=if l!=nil then if x==hd l then tl l else (hd l)::listrem tl l x;;
|
7
|
+
fun slistlen l= if l==nil then 0 else (strlen hd l)+slistlen tl l;;
|
7
8
|
|
8
9
|
fun listtostr l=
|
9
10
|
let strnew listlen l -> s in
|
@@ -71,4 +72,6 @@ fun useparamip val=
|
|
71
72
|
(
|
72
73
|
_useparamip ip 0 val 0;
|
73
74
|
ip
|
74
|
-
);;
|
75
|
+
);;
|
76
|
+
|
77
|
+
fun conc p q=if p==nil then q else (hd p)::conc tl p q;;
|