nabaztag_hack_kit 0.1.0.alpha2 → 0.1.0.alpha3
Sign up to get free protection for your applications and to get access to all the features.
- data/bytecode/bin/mtl_merge +16 -2
- data/bytecode/lib/button.mtl +6 -1
- data/bytecode/lib/data_helper.mtl +0 -13
- data/bytecode/lib/logger.mtl +23 -0
- data/bytecode/lib/ping.mtl +6 -0
- data/bytecode/lib/playback.mtl +33 -0
- data/bytecode/lib/record.mtl +6 -0
- data/bytecode/lib/rfid.mtl +4 -1
- data/bytecode/main.mtl +23 -40
- data/examples/record/server.rb +0 -2
- data/lib/nabaztag_hack_kit/server.rb +30 -12
- data/lib/nabaztag_hack_kit/version.rb +1 -1
- data/spec/integration/server_spec.rb +7 -7
- metadata +12 -10
data/bytecode/bin/mtl_merge
CHANGED
@@ -10,12 +10,26 @@ unless ARGV.size == 1
|
|
10
10
|
end
|
11
11
|
|
12
12
|
file = ARGV.first
|
13
|
+
BASE_DIR = File.dirname(file)
|
14
|
+
BASE_DIR_LIB = File.dirname(File.dirname(__FILE__))
|
15
|
+
|
16
|
+
def mtl_file(name)
|
17
|
+
"#{name}.mtl"
|
18
|
+
end
|
19
|
+
|
20
|
+
def src_file(name)
|
21
|
+
[BASE_DIR, BASE_DIR_LIB].each do |dir|
|
22
|
+
if (path = File.join(dir, name)) && File.exists?(path)
|
23
|
+
return path
|
24
|
+
end
|
25
|
+
end
|
26
|
+
raise "LIB FILE #{name} not found"
|
27
|
+
end
|
13
28
|
|
14
|
-
dir = File.dirname(file)
|
15
29
|
File.open(TMP, 'w') do |out|
|
16
30
|
File.open(file).each_line do |line|
|
17
31
|
if line =~ /\A#include "([^"]+)"/
|
18
|
-
line = `cat #{
|
32
|
+
line = `cat #{src_file(mtl_file($1))}`
|
19
33
|
end
|
20
34
|
out.puts line
|
21
35
|
end
|
data/bytecode/lib/button.mtl
CHANGED
@@ -4,7 +4,12 @@
|
|
4
4
|
const BUTTON_REBOOT = 3000;; //ms MIN 50ms
|
5
5
|
var button_pressed = 0;;
|
6
6
|
|
7
|
-
fun
|
7
|
+
fun buttonPressedUrl data=
|
8
|
+
strcatlist confGetServerUrl::apiPath::"/button-pressed.jsp?duration="::(itoa data)::nil;;
|
9
|
+
|
10
|
+
//-------------------------------------------------------------
|
11
|
+
|
12
|
+
fun buttonCheck =
|
8
13
|
if (button2 > 0) then
|
9
14
|
(
|
10
15
|
if button_pressed == 0 then
|
@@ -1,16 +1,3 @@
|
|
1
|
-
var logs = "";;
|
2
|
-
|
3
|
-
fun log t tab=
|
4
|
-
let "|"::nil -> all in
|
5
|
-
(
|
6
|
-
for i = tablen tab; i > 0 ; i - 1 do
|
7
|
-
(
|
8
|
-
let itoa tab.(i - 1) -> data in
|
9
|
-
set all = data::","::all
|
10
|
-
);
|
11
|
-
set logs = strcatlist logs::t::","::(itoa time_ms)::","::all
|
12
|
-
)
|
13
|
-
;;
|
14
1
|
|
15
2
|
fun TLtoS tlist=
|
16
3
|
if tlist == nil then
|
@@ -0,0 +1,23 @@
|
|
1
|
+
//###############################################
|
2
|
+
//------------------ LOGGER ----------------------
|
3
|
+
|
4
|
+
var logs = "";;
|
5
|
+
|
6
|
+
fun logUrl =
|
7
|
+
strcatlist confGetServerUrl::apiPath::"/log.jsp?"::nil;;
|
8
|
+
|
9
|
+
fun log t tab=
|
10
|
+
let "|"::nil -> all in
|
11
|
+
(
|
12
|
+
for i = tablen tab; i > 0 ; i - 1 do
|
13
|
+
(
|
14
|
+
let itoa tab.(i - 1) -> data in
|
15
|
+
set all = data::","::all
|
16
|
+
);
|
17
|
+
set logs = strcatlist logs::t::","::(itoa time_ms)::","::all
|
18
|
+
)
|
19
|
+
;;
|
20
|
+
|
21
|
+
fun sendLogs=
|
22
|
+
httprequest "POST" logUrl (strcat "logs=" logs) #_cbDummyHttp HTTP_NORMAL;
|
23
|
+
set logs = "";;
|
data/bytecode/lib/ping.mtl
CHANGED
@@ -1,10 +1,16 @@
|
|
1
1
|
//###############################################
|
2
2
|
//------------------ PING ----------------------
|
3
|
+
|
3
4
|
const PING_CHECK_FQ = 5000;; //ms -> 5s
|
4
5
|
const PING_PARAMS = "";;
|
5
6
|
|
6
7
|
var ping_last_check = 0;;
|
7
8
|
|
9
|
+
fun pingUrl params=
|
10
|
+
strcatlist confGetServerUrl::apiPath::"/ping.jsp?"::params::nil;;
|
11
|
+
|
12
|
+
//-------------------------------------------------------------
|
13
|
+
|
8
14
|
fun pingCheck=
|
9
15
|
let PING_CHECK_FQ -> ping_check_fq in
|
10
16
|
if ((time_ms - ping_last_check) > ping_check_fq) then
|
@@ -0,0 +1,33 @@
|
|
1
|
+
//###############################################
|
2
|
+
//------------------- Playback --------------------
|
3
|
+
|
4
|
+
fun playbackFinishedUrl =
|
5
|
+
strcatlist confGetServerUrl::apiPath::"/playback-finished.jsp?"::nil;;
|
6
|
+
|
7
|
+
fun playbackLoadFinishedUrl =
|
8
|
+
strcatlist confGetServerUrl::apiPath::"/playback-load-finished.jsp?"::nil;;
|
9
|
+
|
10
|
+
fun streamUrl filename=
|
11
|
+
strcatlist confGetServerUrl::"/streams/"::filename::nil;;
|
12
|
+
|
13
|
+
// var playback_fifo = nil;;
|
14
|
+
|
15
|
+
// fun playbackStart =
|
16
|
+
// ;;
|
17
|
+
|
18
|
+
// fun playbackStop =
|
19
|
+
// ;;
|
20
|
+
|
21
|
+
// fun _playbackLoadCB httpreq req=
|
22
|
+
// if req != nil then
|
23
|
+
// (
|
24
|
+
// set wav_fifo=conc playback_fifo req::nil;
|
25
|
+
// )
|
26
|
+
// ;;
|
27
|
+
|
28
|
+
|
29
|
+
// fun playbackLoad val=
|
30
|
+
// httprequest "GET" (streamUrl val) nil #_playbackLoadCB HTTP_NORMAL //HTTP_STREAM
|
31
|
+
// ;;
|
32
|
+
|
33
|
+
// fun playbackStream val=
|
data/bytecode/lib/record.mtl
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
//###############################################
|
2
|
+
//------------------- Record --------------------
|
3
|
+
|
1
4
|
var lrec;;
|
2
5
|
var recording = 0;;
|
3
6
|
var recordingStartedAt = 0;;
|
@@ -7,6 +10,9 @@ var buff;;
|
|
7
10
|
var buffx;;
|
8
11
|
var buffy;;
|
9
12
|
|
13
|
+
fun recordingFinishedUrl =
|
14
|
+
strcatlist confGetServerUrl::apiPath::"/recording-finished.jsp?"::nil;;
|
15
|
+
|
10
16
|
//-------------------------------------------------------------
|
11
17
|
|
12
18
|
fun sqrt_ i i0 i1=
|
data/bytecode/lib/rfid.mtl
CHANGED
@@ -10,7 +10,10 @@ const RFID_ID_ERROR = "\69\114\114\111\114\0\0\0\v";; // 0x45 72 72 6f 72 00 00
|
|
10
10
|
var rfid_last_check = 0;;
|
11
11
|
var rfid_data = "";;
|
12
12
|
|
13
|
-
fun
|
13
|
+
fun rfidUrl tag=
|
14
|
+
strcatlist confGetServerUrl::apiPath::"/rfid.jsp?id="::(webmac tag)::nil;;
|
15
|
+
|
16
|
+
fun rfidCheck=
|
14
17
|
if ((time_ms - rfid_last_check) > RFID_CHECK_FQ) then
|
15
18
|
(
|
16
19
|
let rfidGet -> rfid in
|
data/bytecode/main.mtl
CHANGED
@@ -14,46 +14,38 @@ proto evalTrame 1;;
|
|
14
14
|
#include "src/lib/http"
|
15
15
|
#include "src/lib/dhcp"
|
16
16
|
#include "src/lib/wav"
|
17
|
-
#include "lib/data_helper"
|
18
|
-
#include "lib/buffer"
|
19
17
|
#include "src/lib/wifi"
|
20
18
|
|
21
|
-
|
22
|
-
fun logUrl=
|
23
|
-
strcatlist confGetServerUrl::"/api/log.jsp"::nil;;
|
24
|
-
|
25
|
-
fun buttonPressedUrl data=
|
26
|
-
strcatlist confGetServerUrl::"/api/button-pressed.jsp?duration="::(itoa data)::nil;;
|
27
|
-
|
28
|
-
fun recordingFinishedUrl =
|
29
|
-
strcatlist confGetServerUrl::"/api/recording-finished.jsp"::nil;;
|
30
|
-
|
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;;
|
19
|
+
#include "lib/data_helper"
|
39
20
|
|
40
|
-
|
41
|
-
|
21
|
+
//-------------------- HTTP Endpoints
|
22
|
+
fun bunnyId =
|
23
|
+
netMac;;
|
42
24
|
|
43
|
-
fun
|
44
|
-
|
25
|
+
fun apiPath =
|
26
|
+
strcatlist "/api/"::(webmac bunnyId)::nil;;
|
45
27
|
|
46
28
|
//-------------------- HTTP
|
47
|
-
|
48
|
-
fun _cbdummyhttp http res=
|
29
|
+
fun _cbDummyHttp http res=
|
49
30
|
0;;
|
50
31
|
|
51
32
|
fun _cbHttp http res=
|
52
33
|
evalTrame res;
|
53
34
|
0;;
|
54
35
|
|
55
|
-
#include "lib/
|
36
|
+
#include "lib/buffer"
|
56
37
|
#include "lib/ping"
|
38
|
+
#include "lib/logger"
|
39
|
+
|
40
|
+
//inputs
|
41
|
+
// #include "lib/rfid"
|
42
|
+
#include "lib/record"
|
43
|
+
#include "lib/button"
|
44
|
+
|
45
|
+
//outputs
|
46
|
+
#include "lib/playback"
|
47
|
+
#include "lib/led"
|
48
|
+
#include "lib/ear"
|
57
49
|
|
58
50
|
fun evalTrame res=
|
59
51
|
let parseResponse httpgetcontent res -> bufferlist in
|
@@ -73,8 +65,7 @@ fun evalTrame res=
|
|
73
65
|
)
|
74
66
|
else if code == 17 then // LOG
|
75
67
|
(
|
76
|
-
|
77
|
-
set logs = "";
|
68
|
+
sendLogs;
|
78
69
|
0
|
79
70
|
)
|
80
71
|
else if code == 18 then // ERROR
|
@@ -141,29 +132,21 @@ fun evalTrame res=
|
|
141
132
|
)
|
142
133
|
;;
|
143
134
|
|
144
|
-
//inputs
|
145
|
-
// #include "lib/rfid"
|
146
|
-
#include "lib/button"
|
147
|
-
|
148
|
-
//outputs
|
149
|
-
#include "lib/led"
|
150
|
-
#include "lib/ear"
|
151
|
-
|
152
135
|
//###############################################
|
153
136
|
//-------------------- LOOP ---------------------
|
154
137
|
fun loop=
|
155
138
|
wifiRun;
|
156
139
|
wifiCheck;
|
157
140
|
|
158
|
-
//
|
159
|
-
|
141
|
+
// rfidCheck;
|
142
|
+
buttonCheck;
|
160
143
|
|
161
144
|
setLeds;
|
162
145
|
earRead 0;
|
163
146
|
earRead 1;
|
164
147
|
|
165
148
|
pingCheck;
|
166
|
-
|
149
|
+
wavtime;
|
167
150
|
|
168
151
|
recordingCheck;
|
169
152
|
0;;
|
data/examples/record/server.rb
CHANGED
@@ -7,12 +7,16 @@ module NabaztagHackKit
|
|
7
7
|
class Server < Sinatra::Base
|
8
8
|
include Message::Api
|
9
9
|
|
10
|
-
|
10
|
+
configure :production, :development do
|
11
|
+
enable :logging
|
12
|
+
end
|
13
|
+
|
14
|
+
REC_FILE = "rec.wav"
|
15
|
+
PREFIX = "/api/:bunnyid"
|
11
16
|
|
12
17
|
def initialize(bytecode_path = nil)
|
13
18
|
super
|
14
|
-
@bytecode_path = bytecode_path ||
|
15
|
-
puts "Serving Bytecode from #{@bytecode_path}"
|
19
|
+
@bytecode_path = bytecode_path || public_file('bytecode.bin')
|
16
20
|
end
|
17
21
|
|
18
22
|
class << self
|
@@ -46,27 +50,26 @@ module NabaztagHackKit
|
|
46
50
|
if callback = self.class.callbacks[action.to_s]
|
47
51
|
instance_exec data, request, &callback
|
48
52
|
else
|
49
|
-
|
53
|
+
logger.warn "no callback found for #{action}"
|
50
54
|
send_nabaztag OK
|
51
55
|
end
|
52
56
|
end
|
53
57
|
|
54
58
|
get "/" do
|
55
|
-
|
56
|
-
puts path
|
57
|
-
File.read(path)
|
59
|
+
File.read public_file("index.html")
|
58
60
|
end
|
59
61
|
|
60
62
|
get "/bc.jsp" do
|
61
|
-
|
63
|
+
logger.info "Serving Bytecode from #{@bytecode_path}"
|
62
64
|
send_file @bytecode_path
|
63
65
|
end
|
64
66
|
|
65
67
|
post "#{PREFIX}/log.jsp" do
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
68
|
+
parse_log(params[:logs]).tap do |logs|
|
69
|
+
logger.info "#########################"
|
70
|
+
logger.info logs.join("\n")
|
71
|
+
logger.info "#########################"
|
72
|
+
end
|
70
73
|
send_nabaztag OK
|
71
74
|
end
|
72
75
|
|
@@ -86,11 +89,26 @@ module NabaztagHackKit
|
|
86
89
|
callback('button-pressed', params[:duration], request)
|
87
90
|
end
|
88
91
|
|
92
|
+
get "/streams/:file.mp3" do
|
93
|
+
File.read public_file("#{params[:file]}.mp3")
|
94
|
+
end
|
95
|
+
|
89
96
|
# generic callback
|
90
97
|
%w(get post).each do |method|
|
91
98
|
send(method, "#{PREFIX}/:action.jsp") do
|
92
99
|
callback(params[:action], params, request)
|
93
100
|
end
|
94
101
|
end
|
102
|
+
|
103
|
+
# generic catchall
|
104
|
+
get "/*" do
|
105
|
+
logger.warn "no route found for #{params[:splat]}"
|
106
|
+
status 404
|
107
|
+
end
|
108
|
+
|
109
|
+
protected
|
110
|
+
def public_file(name)
|
111
|
+
File.expand_path(File.join('..', 'public', name), __FILE__)
|
112
|
+
end
|
95
113
|
end
|
96
114
|
end
|
@@ -21,26 +21,26 @@ describe NabaztagHackKit::Server do
|
|
21
21
|
it_behaves_like :successful_route
|
22
22
|
end
|
23
23
|
|
24
|
-
describe "
|
25
|
-
let(:route) { "/api/log.jsp" }
|
24
|
+
describe "log.jsp" do
|
25
|
+
let(:route) { "/api/bunnyid/log.jsp" }
|
26
26
|
|
27
27
|
it_behaves_like :successful_route
|
28
28
|
end
|
29
29
|
|
30
|
-
describe "
|
31
|
-
let(:route) { "/api/rfid.jsp" }
|
30
|
+
describe "rfid.jsp" do
|
31
|
+
let(:route) { "/api/bunnyid/rfid.jsp" }
|
32
32
|
|
33
33
|
it_behaves_like :successful_route
|
34
34
|
end
|
35
35
|
|
36
|
-
describe "
|
37
|
-
let(:route) { "/api/recording-finished.jsp" }
|
36
|
+
describe "recording-finished.jsp" do
|
37
|
+
let(:route) { "/api/bunnyid/recording-finished.jsp" }
|
38
38
|
|
39
39
|
it_behaves_like :successful_route
|
40
40
|
end
|
41
41
|
|
42
42
|
describe "catch all route" do
|
43
|
-
let(:route) { "/api/custom.jsp" }
|
43
|
+
let(:route) { "/api/bunnyid/custom.jsp" }
|
44
44
|
|
45
45
|
it_behaves_like :successful_route
|
46
46
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nabaztag_hack_kit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.0.
|
4
|
+
version: 0.1.0.alpha3
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bytecode/bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-09-
|
12
|
+
date: 2012-09-20 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sinatra
|
16
|
-
requirement: &
|
16
|
+
requirement: &70172330100880 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70172330100880
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rake
|
27
|
-
requirement: &
|
27
|
+
requirement: &70172330100340 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70172330100340
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rspec
|
38
|
-
requirement: &
|
38
|
+
requirement: &70172330099880 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70172330099880
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rack-test
|
49
|
-
requirement: &
|
49
|
+
requirement: &70172330099420 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,7 +54,7 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70172330099420
|
58
58
|
description: Sinatra server api framework to run custom bytecode on Nabaztag v1/v2.
|
59
59
|
Sources + Compiler included (linux only)
|
60
60
|
email:
|
@@ -84,7 +84,9 @@ files:
|
|
84
84
|
- bytecode/lib/data_helper.mtl
|
85
85
|
- bytecode/lib/ear.mtl
|
86
86
|
- bytecode/lib/led.mtl
|
87
|
+
- bytecode/lib/logger.mtl
|
87
88
|
- bytecode/lib/ping.mtl
|
89
|
+
- bytecode/lib/playback.mtl
|
88
90
|
- bytecode/lib/record.mtl
|
89
91
|
- bytecode/lib/rfid.mtl
|
90
92
|
- bytecode/main.mtl
|