nabaztag_hack_kit 0.1.0.alpha2 → 0.1.0.alpha3
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/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
|