Osamu Nakamura / GR-PEACH_mbed-os-iotjs
Committer:
Osamu Nakamura
Date:
Thu Jul 11 18:49:37 2019 +0900
Revision:
1:c3d69f309845
Initial commit of sample app and document

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Osamu Nakamura 1:c3d69f309845 1 ■テストケースについて
Osamu Nakamura 1:c3d69f309845 2
Osamu Nakamura 1:c3d69f309845 3 次の行で囲まれた部分がそれぞれのテストケースになります。
Osamu Nakamura 1:c3d69f309845 4 //boc ---------- (BeginOfCode)
Osamu Nakamura 1:c3d69f309845 5 //eoc ---------- (EndOfCode)
Osamu Nakamura 1:c3d69f309845 6
Osamu Nakamura 1:c3d69f309845 7 ・使用例)
Osamu Nakamura 1:c3d69f309845 8
Osamu Nakamura 1:c3d69f309845 9 1)下記の //boc の *前行* から //eoc の *次行* までをクリップボードにコピーしておきます。
Osamu Nakamura 1:c3d69f309845 10
Osamu Nakamura 1:c3d69f309845 11 //boc ---------- (BeginOfCode)
Osamu Nakamura 1:c3d69f309845 12 console.log("001");
Osamu Nakamura 1:c3d69f309845 13 //eoc ---------- (EndOfCode)
Osamu Nakamura 1:c3d69f309845 14
Osamu Nakamura 1:c3d69f309845 15 2)GR-Peach をリセット(or BREAK信号を送信)します。
Osamu Nakamura 1:c3d69f309845 16 ※ GR-Peach には *必ず* microSD カードをセットしておいてください。
Osamu Nakamura 1:c3d69f309845 17
Osamu Nakamura 1:c3d69f309845 18 IoT.js for mbed-os...
Osamu Nakamura 1:c3d69f309845 19 mbed-os version: 5.9.3
Osamu Nakamura 1:c3d69f309845 20 build timestamp: MMM DD YYYY HH:MM:SS
Osamu Nakamura 1:c3d69f309845 21
Osamu Nakamura 1:c3d69f309845 22 input js fullpath here:
Osamu Nakamura 1:c3d69f309845 23
Osamu Nakamura 1:c3d69f309845 24 3)[Enter]キーを送信して、コードの入力モードに移行します。
Osamu Nakamura 1:c3d69f309845 25
Osamu Nakamura 1:c3d69f309845 26 input javascript code here:
Osamu Nakamura 1:c3d69f309845 27
Osamu Nakamura 1:c3d69f309845 28 4)クリップボードの内容を貼り付けると処理が始まります。(手入力でもOK)
Osamu Nakamura 1:c3d69f309845 29
Osamu Nakamura 1:c3d69f309845 30 input javascript code here:
Osamu Nakamura 1:c3d69f309845 31 //boc ---------- (BeginOfCode)
Osamu Nakamura 1:c3d69f309845 32 console.log("001");
Osamu Nakamura 1:c3d69f309845 33 //eoc ---------- (EndOfCode)
Osamu Nakamura 1:c3d69f309845 34
Osamu Nakamura 1:c3d69f309845 35 ------- POSIX[ 1][thr0] -->clock_getres(clk_id=6, res=0x2005aae4)
Osamu Nakamura 1:c3d69f309845 36 ------- POSIX[ 2][thr0] <--clock_getres(clk_id=6, res={0.001000000}) = 0(errno:0)
Osamu Nakamura 1:c3d69f309845 37 ------- POSIX[ 3][thr0] -->clock_gettime(clk_id=6, tp=0x2005aae4)
Osamu Nakamura 1:c3d69f309845 38 :
Osamu Nakamura 1:c3d69f309845 39 :
Osamu Nakamura 1:c3d69f309845 40
Osamu Nakamura 1:c3d69f309845 41
Osamu Nakamura 1:c3d69f309845 42
Osamu Nakamura 1:c3d69f309845 43 ■いくつかのテストケース
Osamu Nakamura 1:c3d69f309845 44
Osamu Nakamura 1:c3d69f309845 45
Osamu Nakamura 1:c3d69f309845 46
Osamu Nakamura 1:c3d69f309845 47 //boc ---------- (BeginOfCode)
Osamu Nakamura 1:c3d69f309845 48 //■ process.platform が "mbedos" か確認
Osamu Nakamura 1:c3d69f309845 49 console.log( 'platform = ' + process.platform );
Osamu Nakamura 1:c3d69f309845 50 //eoc ---------- (EndOfCode)
Osamu Nakamura 1:c3d69f309845 51
Osamu Nakamura 1:c3d69f309845 52
Osamu Nakamura 1:c3d69f309845 53
Osamu Nakamura 1:c3d69f309845 54
Osamu Nakamura 1:c3d69f309845 55
Osamu Nakamura 1:c3d69f309845 56 //boc ---------- (BeginOfCode)
Osamu Nakamura 1:c3d69f309845 57 //■ process 環境表示テスト
Osamu Nakamura 1:c3d69f309845 58 console.log( 'platform' + JSON.stringify( process, null, " " ) );
Osamu Nakamura 1:c3d69f309845 59 //eoc ---------- (EndOfCode)
Osamu Nakamura 1:c3d69f309845 60
Osamu Nakamura 1:c3d69f309845 61
Osamu Nakamura 1:c3d69f309845 62
Osamu Nakamura 1:c3d69f309845 63
Osamu Nakamura 1:c3d69f309845 64
Osamu Nakamura 1:c3d69f309845 65 //boc ---------- (BeginOfCode)
Osamu Nakamura 1:c3d69f309845 66 //■ カレントパスのテスト
Osamu Nakamura 1:c3d69f309845 67 console.log('current path: "' + process.cwd() + '"');
Osamu Nakamura 1:c3d69f309845 68 //eoc ---------- (EndOfCode)
Osamu Nakamura 1:c3d69f309845 69
Osamu Nakamura 1:c3d69f309845 70
Osamu Nakamura 1:c3d69f309845 71
Osamu Nakamura 1:c3d69f309845 72
Osamu Nakamura 1:c3d69f309845 73
Osamu Nakamura 1:c3d69f309845 74 //boc ---------- (BeginOfCode)
Osamu Nakamura 1:c3d69f309845 75 //■ console 表示テスト (UTF8)
Osamu Nakamura 1:c3d69f309845 76 console.log("001");
Osamu Nakamura 1:c3d69f309845 77 console.log("002", "002");
Osamu Nakamura 1:c3d69f309845 78 var val = "string";
Osamu Nakamura 1:c3d69f309845 79 console.log("003", val);
Osamu Nakamura 1:c3d69f309845 80 val = 123;
Osamu Nakamura 1:c3d69f309845 81 console.log("004", val);
Osamu Nakamura 1:c3d69f309845 82 val = 3.14;
Osamu Nakamura 1:c3d69f309845 83 console.log("005", val);
Osamu Nakamura 1:c3d69f309845 84 console.log("nihongo", "UTF8");
Osamu Nakamura 1:c3d69f309845 85 console.log("nihongo", "日本語", "UTF8");
Osamu Nakamura 1:c3d69f309845 86 //eoc ---------- (EndOfCode)
Osamu Nakamura 1:c3d69f309845 87
Osamu Nakamura 1:c3d69f309845 88
Osamu Nakamura 1:c3d69f309845 89
Osamu Nakamura 1:c3d69f309845 90
Osamu Nakamura 1:c3d69f309845 91
Osamu Nakamura 1:c3d69f309845 92 //boc ---------- (BeginOfCode)
Osamu Nakamura 1:c3d69f309845 93 //■ JSON.stringify、JSON.parse のテスト
Osamu Nakamura 1:c3d69f309845 94 var obj = {abc:10, pi:3.14, str:"moji"};
Osamu Nakamura 1:c3d69f309845 95 var json = JSON.stringify(obj);
Osamu Nakamura 1:c3d69f309845 96 console.log( json );
Osamu Nakamura 1:c3d69f309845 97 var copy = JSON.parse(json);
Osamu Nakamura 1:c3d69f309845 98 console.log( copy );
Osamu Nakamura 1:c3d69f309845 99 console.log( JSON.stringify(copy) );
Osamu Nakamura 1:c3d69f309845 100 //eoc ---------- (EndOfCode)
Osamu Nakamura 1:c3d69f309845 101
Osamu Nakamura 1:c3d69f309845 102
Osamu Nakamura 1:c3d69f309845 103
Osamu Nakamura 1:c3d69f309845 104
Osamu Nakamura 1:c3d69f309845 105
Osamu Nakamura 1:c3d69f309845 106 //boc ---------- (BeginOfCode)
Osamu Nakamura 1:c3d69f309845 107 //■ chdir のテスト
Osamu Nakamura 1:c3d69f309845 108 function CHECK( number, val, must_be)
Osamu Nakamura 1:c3d69f309845 109 {
Osamu Nakamura 1:c3d69f309845 110 console.log( 'check', number, ': must be', must_be, ':', val == must_be ? 'OK' : 'NG' );
Osamu Nakamura 1:c3d69f309845 111 }
Osamu Nakamura 1:c3d69f309845 112
Osamu Nakamura 1:c3d69f309845 113 var currentPath = process.cwd();
Osamu Nakamura 1:c3d69f309845 114 console.log('currentPath', process.cwd());
Osamu Nakamura 1:c3d69f309845 115
Osamu Nakamura 1:c3d69f309845 116 try {
Osamu Nakamura 1:c3d69f309845 117 process.chdir('/sd');
Osamu Nakamura 1:c3d69f309845 118 } catch(err) {
Osamu Nakamura 1:c3d69f309845 119 console.log('invalid path');
Osamu Nakamura 1:c3d69f309845 120 }
Osamu Nakamura 1:c3d69f309845 121
Osamu Nakamura 1:c3d69f309845 122 console.log('currentPath', process.cwd());
Osamu Nakamura 1:c3d69f309845 123 CHECK(1, process.cwd(), '/sd');
Osamu Nakamura 1:c3d69f309845 124
Osamu Nakamura 1:c3d69f309845 125 process.chdir(currentPath);
Osamu Nakamura 1:c3d69f309845 126 console.log('currentPath', process.cwd());
Osamu Nakamura 1:c3d69f309845 127
Osamu Nakamura 1:c3d69f309845 128 //eoc ---------- (EndOfCode)
Osamu Nakamura 1:c3d69f309845 129
Osamu Nakamura 1:c3d69f309845 130
Osamu Nakamura 1:c3d69f309845 131
Osamu Nakamura 1:c3d69f309845 132
Osamu Nakamura 1:c3d69f309845 133
Osamu Nakamura 1:c3d69f309845 134 //boc ---------- (BeginOfCode)
Osamu Nakamura 1:c3d69f309845 135 //■ Buffer のテスト (linux版と結果が同じであること)
Osamu Nakamura 1:c3d69f309845 136 var buf = new Buffer('hello world', 'ascii');
Osamu Nakamura 1:c3d69f309845 137 console.log(buf.toString('hex')); // Prints: 68656c6c6f20776f726c64
Osamu Nakamura 1:c3d69f309845 138 console.log(buf.toString('base64')); // Prints: aGVsbG8gd29ybGQ=
Osamu Nakamura 1:c3d69f309845 139 //eoc ---------- (EndOfCode)
Osamu Nakamura 1:c3d69f309845 140
Osamu Nakamura 1:c3d69f309845 141
Osamu Nakamura 1:c3d69f309845 142
Osamu Nakamura 1:c3d69f309845 143
Osamu Nakamura 1:c3d69f309845 144
Osamu Nakamura 1:c3d69f309845 145 //boc ---------- (BeginOfCode)
Osamu Nakamura 1:c3d69f309845 146 //■ setTimeout() のテスト
Osamu Nakamura 1:c3d69f309845 147 setTimeout( function() {
Osamu Nakamura 1:c3d69f309845 148 console.log( new Date().getTime(), 'kita' );
Osamu Nakamura 1:c3d69f309845 149 }, 3000);
Osamu Nakamura 1:c3d69f309845 150 console.log( new Date().getTime(), 'setTimeout started');
Osamu Nakamura 1:c3d69f309845 151 //eoc ---------- (EndOfCode)
Osamu Nakamura 1:c3d69f309845 152
Osamu Nakamura 1:c3d69f309845 153
Osamu Nakamura 1:c3d69f309845 154
Osamu Nakamura 1:c3d69f309845 155
Osamu Nakamura 1:c3d69f309845 156
Osamu Nakamura 1:c3d69f309845 157 //boc ---------- (BeginOfCode)
Osamu Nakamura 1:c3d69f309845 158 //■ setInterval() のテスト
Osamu Nakamura 1:c3d69f309845 159 var count = 0;
Osamu Nakamura 1:c3d69f309845 160 var tid = setInterval( function() {
Osamu Nakamura 1:c3d69f309845 161 console.log( new Date().getTime(), 'setInterval kita' );
Osamu Nakamura 1:c3d69f309845 162 if( ++ count >= 5 ) clearInterval( tid );
Osamu Nakamura 1:c3d69f309845 163 }, 1000);
Osamu Nakamura 1:c3d69f309845 164 console.log( new Date().getTime(), 'setInterval started');
Osamu Nakamura 1:c3d69f309845 165 //eoc ---------- (EndOfCode)
Osamu Nakamura 1:c3d69f309845 166
Osamu Nakamura 1:c3d69f309845 167
Osamu Nakamura 1:c3d69f309845 168
Osamu Nakamura 1:c3d69f309845 169
Osamu Nakamura 1:c3d69f309845 170
Osamu Nakamura 1:c3d69f309845 171 //boc ---------- (BeginOfCode)
Osamu Nakamura 1:c3d69f309845 172 //■ setTimeout(), setInterval() のテスト
Osamu Nakamura 1:c3d69f309845 173 setTimeout( function() {
Osamu Nakamura 1:c3d69f309845 174 console.log( new Date().getTime(), 'setTimeout1 kita' );
Osamu Nakamura 1:c3d69f309845 175 }, 3500);
Osamu Nakamura 1:c3d69f309845 176 console.log( new Date(), 'setTimeout1 started');
Osamu Nakamura 1:c3d69f309845 177
Osamu Nakamura 1:c3d69f309845 178 setTimeout( function() {
Osamu Nakamura 1:c3d69f309845 179 console.log( new Date().getTime(), 'setTimeout2 kita' );
Osamu Nakamura 1:c3d69f309845 180 }, 5500);
Osamu Nakamura 1:c3d69f309845 181 console.log( new Date().getTime(), 'setTimeout2 started');
Osamu Nakamura 1:c3d69f309845 182
Osamu Nakamura 1:c3d69f309845 183 var count = 0;
Osamu Nakamura 1:c3d69f309845 184 var tid = setInterval( function() {
Osamu Nakamura 1:c3d69f309845 185 console.log( new Date().getTime(), 'setInterval kita' );
Osamu Nakamura 1:c3d69f309845 186 if( ++ count >= 5 ) clearInterval( tid );
Osamu Nakamura 1:c3d69f309845 187 }, 2000);
Osamu Nakamura 1:c3d69f309845 188 console.log( new Date().getTime(), 'setInterval started');
Osamu Nakamura 1:c3d69f309845 189 //eoc ---------- (EndOfCode)
Osamu Nakamura 1:c3d69f309845 190
Osamu Nakamura 1:c3d69f309845 191
Osamu Nakamura 1:c3d69f309845 192
Osamu Nakamura 1:c3d69f309845 193
Osamu Nakamura 1:c3d69f309845 194
Osamu Nakamura 1:c3d69f309845 195 //boc ---------- (BeginOfCode)
Osamu Nakamura 1:c3d69f309845 196 //■ fs モジュールのテスト (同期)
Osamu Nakamura 1:c3d69f309845 197 var fs = require('fs');
Osamu Nakamura 1:c3d69f309845 198 var fname = "/sd/_temp_code.js";
Osamu Nakamura 1:c3d69f309845 199 var stat = fs.statSync(fname);
Osamu Nakamura 1:c3d69f309845 200 console.log( JSON.stringify(stat) );
Osamu Nakamura 1:c3d69f309845 201 console.log( fs.readFileSync(fname) );
Osamu Nakamura 1:c3d69f309845 202 //eoc ---------- (EndOfCode)
Osamu Nakamura 1:c3d69f309845 203
Osamu Nakamura 1:c3d69f309845 204
Osamu Nakamura 1:c3d69f309845 205
Osamu Nakamura 1:c3d69f309845 206
Osamu Nakamura 1:c3d69f309845 207
Osamu Nakamura 1:c3d69f309845 208 //boc ---------- (BeginOfCode)
Osamu Nakamura 1:c3d69f309845 209 //■ 正規表現のテスト
Osamu Nakamura 1:c3d69f309845 210 var re = /(\w+)\s(\w+)/;
Osamu Nakamura 1:c3d69f309845 211 var str = 'John Smith';
Osamu Nakamura 1:c3d69f309845 212 var newstr = str.replace(re, '$2, $1');
Osamu Nakamura 1:c3d69f309845 213 console.log(newstr);
Osamu Nakamura 1:c3d69f309845 214 //eoc ---------- (EndOfCode)
Osamu Nakamura 1:c3d69f309845 215
Osamu Nakamura 1:c3d69f309845 216
Osamu Nakamura 1:c3d69f309845 217
Osamu Nakamura 1:c3d69f309845 218
Osamu Nakamura 1:c3d69f309845 219
Osamu Nakamura 1:c3d69f309845 220 //boc ---------- (BeginOfCode)
Osamu Nakamura 1:c3d69f309845 221 //■ 文字列分割テスト
Osamu Nakamura 1:c3d69f309845 222 var text = 'Some text\nAnd some more\r\nAnd yet\rThis is the end';
Osamu Nakamura 1:c3d69f309845 223 var lines = text.split(/\r\n|\r|\n/);
Osamu Nakamura 1:c3d69f309845 224 console.log(lines); // logs [ 'Some text', 'And some more', 'And yet', 'This is the end' ]
Osamu Nakamura 1:c3d69f309845 225 //eoc ---------- (EndOfCode)
Osamu Nakamura 1:c3d69f309845 226
Osamu Nakamura 1:c3d69f309845 227
Osamu Nakamura 1:c3d69f309845 228
Osamu Nakamura 1:c3d69f309845 229
Osamu Nakamura 1:c3d69f309845 230
Osamu Nakamura 1:c3d69f309845 231 //boc ---------- (BeginOfCode)
Osamu Nakamura 1:c3d69f309845 232 //■ 多国語テスト
Osamu Nakamura 1:c3d69f309845 233 var text = 'Образец text на русском языке';
Osamu Nakamura 1:c3d69f309845 234 var regex = /[\u0400-\u04FF]+/g;
Osamu Nakamura 1:c3d69f309845 235
Osamu Nakamura 1:c3d69f309845 236 var match = regex.exec(text);
Osamu Nakamura 1:c3d69f309845 237 console.log(match[0]); // logs 'Образец'
Osamu Nakamura 1:c3d69f309845 238 console.log(regex.lastIndex); // logs '7'
Osamu Nakamura 1:c3d69f309845 239
Osamu Nakamura 1:c3d69f309845 240 var match2 = regex.exec(text);
Osamu Nakamura 1:c3d69f309845 241 console.log(match2[0]); // logs 'на' [did not log 'text']
Osamu Nakamura 1:c3d69f309845 242 console.log(regex.lastIndex); // logs '15'
Osamu Nakamura 1:c3d69f309845 243
Osamu Nakamura 1:c3d69f309845 244 // and so on
Osamu Nakamura 1:c3d69f309845 245 //eoc ---------- (EndOfCode)
Osamu Nakamura 1:c3d69f309845 246
Osamu Nakamura 1:c3d69f309845 247
Osamu Nakamura 1:c3d69f309845 248
Osamu Nakamura 1:c3d69f309845 249
Osamu Nakamura 1:c3d69f309845 250
Osamu Nakamura 1:c3d69f309845 251 //boc ---------- (BeginOfCode)
Osamu Nakamura 1:c3d69f309845 252 //■ 文字列操作テスト
Osamu Nakamura 1:c3d69f309845 253 var url = 'http://xxx.domain.com';
Osamu Nakamura 1:c3d69f309845 254 console.log(/[^.]+/.exec(url)[0].substr(7)); // logs 'xxx'
Osamu Nakamura 1:c3d69f309845 255 //eoc ---------- (EndOfCode)
Osamu Nakamura 1:c3d69f309845 256
Osamu Nakamura 1:c3d69f309845 257
Osamu Nakamura 1:c3d69f309845 258
Osamu Nakamura 1:c3d69f309845 259
Osamu Nakamura 1:c3d69f309845 260
Osamu Nakamura 1:c3d69f309845 261 //boc ---------- (BeginOfCode)
Osamu Nakamura 1:c3d69f309845 262 // ■EventEmitterテスト
Osamu Nakamura 1:c3d69f309845 263 var EventEmitter = require('events').EventEmitter;
Osamu Nakamura 1:c3d69f309845 264
Osamu Nakamura 1:c3d69f309845 265 function asyncFunc() {
Osamu Nakamura 1:c3d69f309845 266 var ev = new EventEmitter;
Osamu Nakamura 1:c3d69f309845 267 console.log('in asyncFunc');
Osamu Nakamura 1:c3d69f309845 268 setTimeout(function () {
Osamu Nakamura 1:c3d69f309845 269 ev.emit('done', 'foo', 'bar');
Osamu Nakamura 1:c3d69f309845 270 }, 1000);
Osamu Nakamura 1:c3d69f309845 271 return ev;
Osamu Nakamura 1:c3d69f309845 272 }
Osamu Nakamura 1:c3d69f309845 273
Osamu Nakamura 1:c3d69f309845 274 var async = asyncFunc();
Osamu Nakamura 1:c3d69f309845 275 async.on('done', function(arg1, arg2) {
Osamu Nakamura 1:c3d69f309845 276 console.log(arg1, arg2);
Osamu Nakamura 1:c3d69f309845 277 });
Osamu Nakamura 1:c3d69f309845 278 //eoc ---------- (EndOfCode)
Osamu Nakamura 1:c3d69f309845 279
Osamu Nakamura 1:c3d69f309845 280
Osamu Nakamura 1:c3d69f309845 281
Osamu Nakamura 1:c3d69f309845 282
Osamu Nakamura 1:c3d69f309845 283
Osamu Nakamura 1:c3d69f309845 284 //boc ---------- (BeginOfCode)
Osamu Nakamura 1:c3d69f309845 285 // ■streamテスト
Osamu Nakamura 1:c3d69f309845 286
Osamu Nakamura 1:c3d69f309845 287 var Readable = require('stream').Readable;
Osamu Nakamura 1:c3d69f309845 288
Osamu Nakamura 1:c3d69f309845 289 function CHECK( number, val, must_be)
Osamu Nakamura 1:c3d69f309845 290 {
Osamu Nakamura 1:c3d69f309845 291 console.log( 'check', number, ': must be', must_be, ':', val == must_be ? 'OK' : 'NG' );
Osamu Nakamura 1:c3d69f309845 292 }
Osamu Nakamura 1:c3d69f309845 293
Osamu Nakamura 1:c3d69f309845 294 var readable1 = new Readable();
Osamu Nakamura 1:c3d69f309845 295 var d = "";
Osamu Nakamura 1:c3d69f309845 296 var e = "";
Osamu Nakamura 1:c3d69f309845 297
Osamu Nakamura 1:c3d69f309845 298
Osamu Nakamura 1:c3d69f309845 299 readable1.on('error', function(err) {
Osamu Nakamura 1:c3d69f309845 300 e += ".";
Osamu Nakamura 1:c3d69f309845 301 });
Osamu Nakamura 1:c3d69f309845 302
Osamu Nakamura 1:c3d69f309845 303 readable1.on('data', function(data) {
Osamu Nakamura 1:c3d69f309845 304 d += data.toString();
Osamu Nakamura 1:c3d69f309845 305 });
Osamu Nakamura 1:c3d69f309845 306
Osamu Nakamura 1:c3d69f309845 307 readable1.on('end', function() {
Osamu Nakamura 1:c3d69f309845 308 e += 'e';
Osamu Nakamura 1:c3d69f309845 309 });
Osamu Nakamura 1:c3d69f309845 310
Osamu Nakamura 1:c3d69f309845 311
Osamu Nakamura 1:c3d69f309845 312 readable1.pause();
Osamu Nakamura 1:c3d69f309845 313 readable1.push('abcde');
Osamu Nakamura 1:c3d69f309845 314 readable1.push('12345');
Osamu Nakamura 1:c3d69f309845 315 CHECK(1, d, '');
Osamu Nakamura 1:c3d69f309845 316 CHECK(2, e, '');
Osamu Nakamura 1:c3d69f309845 317
Osamu Nakamura 1:c3d69f309845 318 readable1.resume();
Osamu Nakamura 1:c3d69f309845 319 CHECK(3, d, 'abcde12345');
Osamu Nakamura 1:c3d69f309845 320 CHECK(4, e, '');
Osamu Nakamura 1:c3d69f309845 321
Osamu Nakamura 1:c3d69f309845 322 readable1.push('a');
Osamu Nakamura 1:c3d69f309845 323 readable1.push('1');
Osamu Nakamura 1:c3d69f309845 324 readable1.push('b');
Osamu Nakamura 1:c3d69f309845 325 readable1.push('2');
Osamu Nakamura 1:c3d69f309845 326 CHECK(5, d, 'abcde12345a1b2');
Osamu Nakamura 1:c3d69f309845 327 CHECK(6, e, '');
Osamu Nakamura 1:c3d69f309845 328
Osamu Nakamura 1:c3d69f309845 329 CHECK(7, readable1.isPaused(), false);
Osamu Nakamura 1:c3d69f309845 330 readable1.pause();
Osamu Nakamura 1:c3d69f309845 331 CHECK(8, d, 'abcde12345a1b2');
Osamu Nakamura 1:c3d69f309845 332 CHECK(9, e, '');
Osamu Nakamura 1:c3d69f309845 333 CHECK(10, readable1.isPaused(), true);
Osamu Nakamura 1:c3d69f309845 334
Osamu Nakamura 1:c3d69f309845 335 // Pause the readable again. This should do nothing.
Osamu Nakamura 1:c3d69f309845 336 readable1.pause();
Osamu Nakamura 1:c3d69f309845 337 CHECK(11, readable1.isPaused(), true);
Osamu Nakamura 1:c3d69f309845 338
Osamu Nakamura 1:c3d69f309845 339 readable1.push('c');
Osamu Nakamura 1:c3d69f309845 340 readable1.push('3');
Osamu Nakamura 1:c3d69f309845 341 readable1.push('d');
Osamu Nakamura 1:c3d69f309845 342 readable1.push('4');
Osamu Nakamura 1:c3d69f309845 343 CHECK(12, d, 'abcde12345a1b2');
Osamu Nakamura 1:c3d69f309845 344 CHECK(13, e, '');
Osamu Nakamura 1:c3d69f309845 345
Osamu Nakamura 1:c3d69f309845 346 readable1.resume();
Osamu Nakamura 1:c3d69f309845 347 CHECK(14, d, 'abcde12345a1b2c3d4');
Osamu Nakamura 1:c3d69f309845 348 CHECK(15, e, '');
Osamu Nakamura 1:c3d69f309845 349
Osamu Nakamura 1:c3d69f309845 350 readable1.push(null);
Osamu Nakamura 1:c3d69f309845 351 CHECK(16, d, 'abcde12345a1b2c3d4');
Osamu Nakamura 1:c3d69f309845 352 CHECK(17, e, 'e');
Osamu Nakamura 1:c3d69f309845 353
Osamu Nakamura 1:c3d69f309845 354 readable1.push('push after eof');
Osamu Nakamura 1:c3d69f309845 355 CHECK(18, d, 'abcde12345a1b2c3d4');
Osamu Nakamura 1:c3d69f309845 356 CHECK(19, e, 'e.');
Osamu Nakamura 1:c3d69f309845 357
Osamu Nakamura 1:c3d69f309845 358
Osamu Nakamura 1:c3d69f309845 359 // Create a readable stream without the new keyword.
Osamu Nakamura 1:c3d69f309845 360 var readable2 = Readable({encoding: 'utf8'});
Osamu Nakamura 1:c3d69f309845 361
Osamu Nakamura 1:c3d69f309845 362 // Read with irregular parameters from an empty stream.
Osamu Nakamura 1:c3d69f309845 363 CHECK(20, readable2.read(-2), null);
Osamu Nakamura 1:c3d69f309845 364 CHECK(21, readable2.read(0), null);
Osamu Nakamura 1:c3d69f309845 365
Osamu Nakamura 1:c3d69f309845 366 readable2.push('qwerty');
Osamu Nakamura 1:c3d69f309845 367 CHECK(22, readable2.read(6), 'qwerty');
Osamu Nakamura 1:c3d69f309845 368
Osamu Nakamura 1:c3d69f309845 369 // Throw not implemented Error when we trying to read less length data.
Osamu Nakamura 1:c3d69f309845 370 readable2.push('new-data');
Osamu Nakamura 1:c3d69f309845 371
Osamu Nakamura 1:c3d69f309845 372 var readable3 = new Readable();
Osamu Nakamura 1:c3d69f309845 373 var readable3End = false;
Osamu Nakamura 1:c3d69f309845 374 var paused = false;
Osamu Nakamura 1:c3d69f309845 375 var str = 'test';
Osamu Nakamura 1:c3d69f309845 376
Osamu Nakamura 1:c3d69f309845 377 readable3.on('data', function(data) {
Osamu Nakamura 1:c3d69f309845 378 CHECK(23, paused, true);
Osamu Nakamura 1:c3d69f309845 379 CHECK(24, data, str);
Osamu Nakamura 1:c3d69f309845 380 });
Osamu Nakamura 1:c3d69f309845 381
Osamu Nakamura 1:c3d69f309845 382 readable3.on('end', function() {
Osamu Nakamura 1:c3d69f309845 383 readable3End = true;
Osamu Nakamura 1:c3d69f309845 384 });
Osamu Nakamura 1:c3d69f309845 385
Osamu Nakamura 1:c3d69f309845 386 readable3.pause();
Osamu Nakamura 1:c3d69f309845 387 readable3.push(str);
Osamu Nakamura 1:c3d69f309845 388 readable3.push(null);
Osamu Nakamura 1:c3d69f309845 389
Osamu Nakamura 1:c3d69f309845 390 setTimeout(function() {
Osamu Nakamura 1:c3d69f309845 391 paused = true;
Osamu Nakamura 1:c3d69f309845 392 readable3.resume();
Osamu Nakamura 1:c3d69f309845 393 }, 1000);
Osamu Nakamura 1:c3d69f309845 394
Osamu Nakamura 1:c3d69f309845 395
Osamu Nakamura 1:c3d69f309845 396 process.on('exit', function() {
Osamu Nakamura 1:c3d69f309845 397 CHECK(25, readable2 instanceof Readable, true);
Osamu Nakamura 1:c3d69f309845 398 CHECK(26, readable3End, true);
Osamu Nakamura 1:c3d69f309845 399 });
Osamu Nakamura 1:c3d69f309845 400
Osamu Nakamura 1:c3d69f309845 401 //eoc ---------- (EndOfCode)
Osamu Nakamura 1:c3d69f309845 402
Osamu Nakamura 1:c3d69f309845 403
Osamu Nakamura 1:c3d69f309845 404
Osamu Nakamura 1:c3d69f309845 405
Osamu Nakamura 1:c3d69f309845 406
Osamu Nakamura 1:c3d69f309845 407 //boc ---------- (BeginOfCode)
Osamu Nakamura 1:c3d69f309845 408 // ■ dns モジュールの簡易テスト
Osamu Nakamura 1:c3d69f309845 409 var dns = require('dns');
Osamu Nakamura 1:c3d69f309845 410 dns.lookup('www.google.co.jp', function(err, address, family) {
Osamu Nakamura 1:c3d69f309845 411 console.log('www.google.co.jp -> address: %j family: IPv%s', address, family);
Osamu Nakamura 1:c3d69f309845 412 });
Osamu Nakamura 1:c3d69f309845 413 //eoc ---------- (EndOfCode)
Osamu Nakamura 1:c3d69f309845 414
Osamu Nakamura 1:c3d69f309845 415
Osamu Nakamura 1:c3d69f309845 416
Osamu Nakamura 1:c3d69f309845 417
Osamu Nakamura 1:c3d69f309845 418
Osamu Nakamura 1:c3d69f309845 419 //boc ---------- (BeginOfCode)
Osamu Nakamura 1:c3d69f309845 420 // ■ nic モジュールの簡易テスト
Osamu Nakamura 1:c3d69f309845 421 var nic = require('nic');
Osamu Nakamura 1:c3d69f309845 422 // 一覧取得
Osamu Nakamura 1:c3d69f309845 423 var nics = nic.enumerate();
Osamu Nakamura 1:c3d69f309845 424 // 一覧確認
Osamu Nakamura 1:c3d69f309845 425 console.log( Object.keys( nics ).length + "個のNICが搭載されています" );
Osamu Nakamura 1:c3d69f309845 426 var index = 0;
Osamu Nakamura 1:c3d69f309845 427 Object.keys( nics ).forEach( function(key) {
Osamu Nakamura 1:c3d69f309845 428 console.log( ++ index + "個目は:" + key );
Osamu Nakamura 1:c3d69f309845 429 });
Osamu Nakamura 1:c3d69f309845 430 // 使い方
Osamu Nakamura 1:c3d69f309845 431 var eth0 = nics["ETHERNET"];
Osamu Nakamura 1:c3d69f309845 432 if( eth0 ) {
Osamu Nakamura 1:c3d69f309845 433 eth0.ifup(); // use DHCP
Osamu Nakamura 1:c3d69f309845 434 eth0.ntpdate({ server:"ntp.nict.jp" });
Osamu Nakamura 1:c3d69f309845 435 console.log( JSON.stringify( eth0.ifconfig() ) );
Osamu Nakamura 1:c3d69f309845 436 console.log( new Date().toString() );
Osamu Nakamura 1:c3d69f309845 437 }
Osamu Nakamura 1:c3d69f309845 438 var wifi = nics["WIFI_BP3595"];
Osamu Nakamura 1:c3d69f309845 439 if( wifi ) {
Osamu Nakamura 1:c3d69f309845 440 wifi.ifup( {
Osamu Nakamura 1:c3d69f309845 441 wifi: {
Osamu Nakamura 1:c3d69f309845 442 ssid: "<SSID>",
Osamu Nakamura 1:c3d69f309845 443 password: "<PASSWORD>",
Osamu Nakamura 1:c3d69f309845 444 security: "WPA_WPA2" // 候補:WEP, WPA, WPA2, WPA_WPA2
Osamu Nakamura 1:c3d69f309845 445 },
Osamu Nakamura 1:c3d69f309845 446 ip: "192.168.10.123",
Osamu Nakamura 1:c3d69f309845 447 netmask: "255.255.255.0",
Osamu Nakamura 1:c3d69f309845 448 gateway: "192.168.10.1",
Osamu Nakamura 1:c3d69f309845 449 dns: "8.8.8.8"
Osamu Nakamura 1:c3d69f309845 450 });
Osamu Nakamura 1:c3d69f309845 451 wifi.ntpdate();
Osamu Nakamura 1:c3d69f309845 452 console.log( JSON.stringify( wifi.ifconfig() ) );
Osamu Nakamura 1:c3d69f309845 453 console.log( new Date().toString() );
Osamu Nakamura 1:c3d69f309845 454 }
Osamu Nakamura 1:c3d69f309845 455 //eoc ---------- (EndOfCode)
Osamu Nakamura 1:c3d69f309845 456
Osamu Nakamura 1:c3d69f309845 457
Osamu Nakamura 1:c3d69f309845 458
Osamu Nakamura 1:c3d69f309845 459
Osamu Nakamura 1:c3d69f309845 460
Osamu Nakamura 1:c3d69f309845 461 //boc ---------- (BeginOfCode)
Osamu Nakamura 1:c3d69f309845 462 // ■ http クライアントのテスト
Osamu Nakamura 1:c3d69f309845 463
Osamu Nakamura 1:c3d69f309845 464 var cli = require('http');
Osamu Nakamura 1:c3d69f309845 465 require('fixup')('http');
Osamu Nakamura 1:c3d69f309845 466 cli.get({ host: 'www.google.com' }, function(res) {
Osamu Nakamura 1:c3d69f309845 467 console.log( 'res.statusCode', res.statusCode);
Osamu Nakamura 1:c3d69f309845 468 res.on('data', function(chunk) {
Osamu Nakamura 1:c3d69f309845 469 console.log( chunk.toString() );
Osamu Nakamura 1:c3d69f309845 470 });
Osamu Nakamura 1:c3d69f309845 471 res.on('end', function() {
Osamu Nakamura 1:c3d69f309845 472 console.log( 'end' );
Osamu Nakamura 1:c3d69f309845 473 });
Osamu Nakamura 1:c3d69f309845 474 });
Osamu Nakamura 1:c3d69f309845 475
Osamu Nakamura 1:c3d69f309845 476 //eoc ---------- (EndOfCode)
Osamu Nakamura 1:c3d69f309845 477
Osamu Nakamura 1:c3d69f309845 478
Osamu Nakamura 1:c3d69f309845 479
Osamu Nakamura 1:c3d69f309845 480
Osamu Nakamura 1:c3d69f309845 481
Osamu Nakamura 1:c3d69f309845 482 //boc ---------- (BeginOfCode)
Osamu Nakamura 1:c3d69f309845 483 // ■ https クライアントのテスト
Osamu Nakamura 1:c3d69f309845 484
Osamu Nakamura 1:c3d69f309845 485 var cli = require('https');
Osamu Nakamura 1:c3d69f309845 486 require('fixup')('https');
Osamu Nakamura 1:c3d69f309845 487 cli.get({ host: 'www.google.com' }, function(res) {
Osamu Nakamura 1:c3d69f309845 488 console.log( 'res.statusCode', res.statusCode);
Osamu Nakamura 1:c3d69f309845 489 res.on('data', function(chunk) {
Osamu Nakamura 1:c3d69f309845 490 console.log( chunk.toString() );
Osamu Nakamura 1:c3d69f309845 491 });
Osamu Nakamura 1:c3d69f309845 492 res.on('end', function() {
Osamu Nakamura 1:c3d69f309845 493 console.log( 'end' );
Osamu Nakamura 1:c3d69f309845 494 });
Osamu Nakamura 1:c3d69f309845 495 });
Osamu Nakamura 1:c3d69f309845 496
Osamu Nakamura 1:c3d69f309845 497 //eoc ---------- (EndOfCode)
Osamu Nakamura 1:c3d69f309845 498
Osamu Nakamura 1:c3d69f309845 499
Osamu Nakamura 1:c3d69f309845 500
Osamu Nakamura 1:c3d69f309845 501
Osamu Nakamura 1:c3d69f309845 502
Osamu Nakamura 1:c3d69f309845 503 //boc ---------- (BeginOfCode)
Osamu Nakamura 1:c3d69f309845 504 // ■ カメラ入力をJPEGファイルに保存する
Osamu Nakamura 1:c3d69f309845 505 var video = require('video');
Osamu Nakamura 1:c3d69f309845 506 var jpeg = require('jpeg');
Osamu Nakamura 1:c3d69f309845 507 var fs = require('fs');
Osamu Nakamura 1:c3d69f309845 508 var AlignedBuffer = require('aligned_buffer').AlignedBuffer;
Osamu Nakamura 1:c3d69f309845 509
Osamu Nakamura 1:c3d69f309845 510 var width = 480;
Osamu Nakamura 1:c3d69f309845 511 var height = 272;
Osamu Nakamura 1:c3d69f309845 512 var video_format = 'ycbcr422';
Osamu Nakamura 1:c3d69f309845 513 var pixel_bytes = 2;
Osamu Nakamura 1:c3d69f309845 514 var alignment = 32;
Osamu Nakamura 1:c3d69f309845 515 var video_buf = new AlignedBuffer(width * height * pixel_bytes, alignment);
Osamu Nakamura 1:c3d69f309845 516
Osamu Nakamura 1:c3d69f309845 517 var camera_config = {
Osamu Nakamura 1:c3d69f309845 518 width : width,
Osamu Nakamura 1:c3d69f309845 519 height : height,
Osamu Nakamura 1:c3d69f309845 520 format : video_format,
Osamu Nakamura 1:c3d69f309845 521 type : 'ov7725'
Osamu Nakamura 1:c3d69f309845 522 };
Osamu Nakamura 1:c3d69f309845 523 var jpeg_config = {
Osamu Nakamura 1:c3d69f309845 524 width : width,
Osamu Nakamura 1:c3d69f309845 525 height : height,
Osamu Nakamura 1:c3d69f309845 526 format : video_format
Osamu Nakamura 1:c3d69f309845 527 };
Osamu Nakamura 1:c3d69f309845 528
Osamu Nakamura 1:c3d69f309845 529 var interval = 1*1000; // 画像保存周期(ms)
Osamu Nakamura 1:c3d69f309845 530 var count = 10; // 保存する画像ファイル数
Osamu Nakamura 1:c3d69f309845 531
Osamu Nakamura 1:c3d69f309845 532 // カメラの初期化
Osamu Nakamura 1:c3d69f309845 533 video.openCMOSCamera(camera_config, function(err, video_source){
Osamu Nakamura 1:c3d69f309845 534 if(err) {
Osamu Nakamura 1:c3d69f309845 535 console.log(err);
Osamu Nakamura 1:c3d69f309845 536 return;
Osamu Nakamura 1:c3d69f309845 537 }
Osamu Nakamura 1:c3d69f309845 538 // 映像の取り込み開始
Osamu Nakamura 1:c3d69f309845 539 video_source.start(video_buf, function(err) {
Osamu Nakamura 1:c3d69f309845 540 if(err) {
Osamu Nakamura 1:c3d69f309845 541 console.log(err);
Osamu Nakamura 1:c3d69f309845 542 return;
Osamu Nakamura 1:c3d69f309845 543 }
Osamu Nakamura 1:c3d69f309845 544 // interval の周期で count 数のJPEG画像を保存
Osamu Nakamura 1:c3d69f309845 545 var i = 0;
Osamu Nakamura 1:c3d69f309845 546 var timer = setInterval(function() {
Osamu Nakamura 1:c3d69f309845 547 if(i >= count) {
Osamu Nakamura 1:c3d69f309845 548 clearInterval(timer);
Osamu Nakamura 1:c3d69f309845 549 video_source.stopSync(); // 映像の取り込み停止
Osamu Nakamura 1:c3d69f309845 550 video_source.closeSync(); // カメラリソースの解放
Osamu Nakamura 1:c3d69f309845 551 return;
Osamu Nakamura 1:c3d69f309845 552 }
Osamu Nakamura 1:c3d69f309845 553 jpeg_config.bitmap = new AlignedBuffer(video_buf, alignment);
Osamu Nakamura 1:c3d69f309845 554 var jpeg_data = jpeg.encodeSync(jpeg_config);
Osamu Nakamura 1:c3d69f309845 555 fs.writeFileSync('/sd/image' + i + '.jpg', jpeg_data.toBuffer());
Osamu Nakamura 1:c3d69f309845 556 console.log('/sd/image' + i + '.jpg');
Osamu Nakamura 1:c3d69f309845 557 i++;
Osamu Nakamura 1:c3d69f309845 558 }, interval);
Osamu Nakamura 1:c3d69f309845 559 });
Osamu Nakamura 1:c3d69f309845 560 });
Osamu Nakamura 1:c3d69f309845 561 //eoc ---------- (EndOfCode)
Osamu Nakamura 1:c3d69f309845 562
Osamu Nakamura 1:c3d69f309845 563
Osamu Nakamura 1:c3d69f309845 564
Osamu Nakamura 1:c3d69f309845 565
Osamu Nakamura 1:c3d69f309845 566
Osamu Nakamura 1:c3d69f309845 567 //boc ---------- (BeginOfCode)
Osamu Nakamura 1:c3d69f309845 568 // ■ LCDのグラフィックス描画テスト
Osamu Nakamura 1:c3d69f309845 569 var display = require('display');
Osamu Nakamura 1:c3d69f309845 570 var Graphics = require('graphics').Graphics;
Osamu Nakamura 1:c3d69f309845 571 var AlignedBuffer = require('aligned_buffer').AlignedBuffer;
Osamu Nakamura 1:c3d69f309845 572
Osamu Nakamura 1:c3d69f309845 573 var width = 480;
Osamu Nakamura 1:c3d69f309845 574 var height = 272;
Osamu Nakamura 1:c3d69f309845 575 var pixel_bytes = 2;
Osamu Nakamura 1:c3d69f309845 576 var alignment = 32;
Osamu Nakamura 1:c3d69f309845 577
Osamu Nakamura 1:c3d69f309845 578 var buf_size = width * height * pixel_bytes;
Osamu Nakamura 1:c3d69f309845 579
Osamu Nakamura 1:c3d69f309845 580 var lcd_config = {
Osamu Nakamura 1:c3d69f309845 581 type : '4.3inch'
Osamu Nakamura 1:c3d69f309845 582 };
Osamu Nakamura 1:c3d69f309845 583
Osamu Nakamura 1:c3d69f309845 584 // レイヤー0用フレームバッファ初期化
Osamu Nakamura 1:c3d69f309845 585 var format0 = 'rgb565';
Osamu Nakamura 1:c3d69f309845 586 var buf0 = new AlignedBuffer(buf_size, alignment);
Osamu Nakamura 1:c3d69f309845 587 var graphics0 = new Graphics({buf:buf0, width:width, height:height, format:format0});
Osamu Nakamura 1:c3d69f309845 588 graphics0.drawRect(0,0,width,height,0xFFFF,true); // 全領域を白で塗りつぶし
Osamu Nakamura 1:c3d69f309845 589
Osamu Nakamura 1:c3d69f309845 590 // レイヤー1用フレームバッファ初期化
Osamu Nakamura 1:c3d69f309845 591 var format1 = 'argb4444';
Osamu Nakamura 1:c3d69f309845 592 var buf1 = new AlignedBuffer(buf_size, alignment);
Osamu Nakamura 1:c3d69f309845 593 var graphics1 = new Graphics({buf:buf1, width:width, height:height, format:format1});
Osamu Nakamura 1:c3d69f309845 594 graphics1.drawRect(0,0,width,height,0x0000,true); // 全領域を完全透過
Osamu Nakamura 1:c3d69f309845 595
Osamu Nakamura 1:c3d69f309845 596 var interval = 1*1000; // LCD表示切り替え周期(ms)
Osamu Nakamura 1:c3d69f309845 597
Osamu Nakamura 1:c3d69f309845 598 // LCDの初期化
Osamu Nakamura 1:c3d69f309845 599 display.openLCD(lcd_config, function(err, lcd) {
Osamu Nakamura 1:c3d69f309845 600 if(err) {
Osamu Nakamura 1:c3d69f309845 601 console.log(err);
Osamu Nakamura 1:c3d69f309845 602 return;
Osamu Nakamura 1:c3d69f309845 603 }
Osamu Nakamura 1:c3d69f309845 604
Osamu Nakamura 1:c3d69f309845 605 var i = 0;
Osamu Nakamura 1:c3d69f309845 606 var timer = setInterval(function(){
Osamu Nakamura 1:c3d69f309845 607 switch(i) {
Osamu Nakamura 1:c3d69f309845 608 case 0:
Osamu Nakamura 1:c3d69f309845 609 // レイヤー0の表示を開始(白背景)
Osamu Nakamura 1:c3d69f309845 610 lcd.startSync(0, graphics0.frameBuffer, format0);
Osamu Nakamura 1:c3d69f309845 611 break;
Osamu Nakamura 1:c3d69f309845 612 case 1:
Osamu Nakamura 1:c3d69f309845 613 // レイヤー1の表示を開始(白背景に赤の円)
Osamu Nakamura 1:c3d69f309845 614 graphics1.drawCircle(100,100,50,0xFF00,true);
Osamu Nakamura 1:c3d69f309845 615 lcd.startSync(1, graphics1.frameBuffer, format1);
Osamu Nakamura 1:c3d69f309845 616 break;
Osamu Nakamura 1:c3d69f309845 617 case 2:
Osamu Nakamura 1:c3d69f309845 618 // レイヤー0のフレームバッファを切り替え(青背景に赤の円)
Osamu Nakamura 1:c3d69f309845 619 var new_buf0 = new AlignedBuffer(buf_size, alignment);
Osamu Nakamura 1:c3d69f309845 620 var new_graphics0 = new Graphics({buf:new_buf0, width:width, height:height, format:format0});
Osamu Nakamura 1:c3d69f309845 621 new_graphics0.drawRect(0,0,width,height,0x001F,true); // 全領域を青で塗りつぶし
Osamu Nakamura 1:c3d69f309845 622 lcd.updateSync(0, new_graphics0.frameBuffer);
Osamu Nakamura 1:c3d69f309845 623 break;
Osamu Nakamura 1:c3d69f309845 624 case 3:
Osamu Nakamura 1:c3d69f309845 625 // レイヤー0の表示を停止(黒背景に赤の円)
Osamu Nakamura 1:c3d69f309845 626 lcd.stopSync(0);
Osamu Nakamura 1:c3d69f309845 627 break;
Osamu Nakamura 1:c3d69f309845 628 case 4:
Osamu Nakamura 1:c3d69f309845 629 // レイヤー1の表示を停止(黒背景)
Osamu Nakamura 1:c3d69f309845 630 lcd.stopSync(1);
Osamu Nakamura 1:c3d69f309845 631 break;
Osamu Nakamura 1:c3d69f309845 632 default:
Osamu Nakamura 1:c3d69f309845 633 // LCDリソースの解放
Osamu Nakamura 1:c3d69f309845 634 lcd.closeSync();
Osamu Nakamura 1:c3d69f309845 635 clearInterval(timer);
Osamu Nakamura 1:c3d69f309845 636 break;
Osamu Nakamura 1:c3d69f309845 637 }
Osamu Nakamura 1:c3d69f309845 638 i++;
Osamu Nakamura 1:c3d69f309845 639 }, interval);
Osamu Nakamura 1:c3d69f309845 640 });
Osamu Nakamura 1:c3d69f309845 641 //eoc ---------- (EndOfCode)
Osamu Nakamura 1:c3d69f309845 642
Osamu Nakamura 1:c3d69f309845 643
Osamu Nakamura 1:c3d69f309845 644
Osamu Nakamura 1:c3d69f309845 645
Osamu Nakamura 1:c3d69f309845 646
Osamu Nakamura 1:c3d69f309845 647 //boc ---------- (BeginOfCode)
Osamu Nakamura 1:c3d69f309845 648 // ■ カメラ入力をGoogle Vision APIに送信し、検出結果をLCDに描画するテスト
Osamu Nakamura 1:c3d69f309845 649 var display = require('display');
Osamu Nakamura 1:c3d69f309845 650 var video = require('video');
Osamu Nakamura 1:c3d69f309845 651 var jpeg = require('jpeg');
Osamu Nakamura 1:c3d69f309845 652 var https = require('https');
Osamu Nakamura 1:c3d69f309845 653 var AlignedBuffer = require('aligned_buffer').AlignedBuffer;
Osamu Nakamura 1:c3d69f309845 654 var Graphics = require('graphics').Graphics;
Osamu Nakamura 1:c3d69f309845 655 require('fixup')('https');
Osamu Nakamura 1:c3d69f309845 656
Osamu Nakamura 1:c3d69f309845 657 var width = 480;
Osamu Nakamura 1:c3d69f309845 658 var height = 272;
Osamu Nakamura 1:c3d69f309845 659 var video_format = 'ycbcr422';
Osamu Nakamura 1:c3d69f309845 660 var pixel_bytes = 2;
Osamu Nakamura 1:c3d69f309845 661 var alignment = 32;
Osamu Nakamura 1:c3d69f309845 662 var video_buf = new AlignedBuffer(width * height * pixel_bytes, alignment);
Osamu Nakamura 1:c3d69f309845 663
Osamu Nakamura 1:c3d69f309845 664 var result_format = 'argb4444';
Osamu Nakamura 1:c3d69f309845 665 var result_color = 0xF00F;
Osamu Nakamura 1:c3d69f309845 666 var result_pixel_bytes = 2;
Osamu Nakamura 1:c3d69f309845 667
Osamu Nakamura 1:c3d69f309845 668 var lcd_config = {
Osamu Nakamura 1:c3d69f309845 669 type : '4.3inch'
Osamu Nakamura 1:c3d69f309845 670 };
Osamu Nakamura 1:c3d69f309845 671 var camera_config = {
Osamu Nakamura 1:c3d69f309845 672 width : width,
Osamu Nakamura 1:c3d69f309845 673 height : height,
Osamu Nakamura 1:c3d69f309845 674 format : video_format,
Osamu Nakamura 1:c3d69f309845 675 type : 'ov7725'
Osamu Nakamura 1:c3d69f309845 676 };
Osamu Nakamura 1:c3d69f309845 677 var jpeg_config = {
Osamu Nakamura 1:c3d69f309845 678 width : width,
Osamu Nakamura 1:c3d69f309845 679 height : height,
Osamu Nakamura 1:c3d69f309845 680 format : video_format
Osamu Nakamura 1:c3d69f309845 681 };
Osamu Nakamura 1:c3d69f309845 682
Osamu Nakamura 1:c3d69f309845 683 var key = 'key=<your APIKey>';
Osamu Nakamura 1:c3d69f309845 684 var timeout = 10*1000;
Osamu Nakamura 1:c3d69f309845 685 var detection_type = 'FACE_DETECTION';
Osamu Nakamura 1:c3d69f309845 686 //var detection_type = 'OBJECT_LOCALIZATION';
Osamu Nakamura 1:c3d69f309845 687
Osamu Nakamura 1:c3d69f309845 688 var lcd;
Osamu Nakamura 1:c3d69f309845 689 display.openLCD(lcd_config, function(err, lcd_) {
Osamu Nakamura 1:c3d69f309845 690 console.log('LCD Open Callback');
Osamu Nakamura 1:c3d69f309845 691
Osamu Nakamura 1:c3d69f309845 692 if(!err) {
Osamu Nakamura 1:c3d69f309845 693 lcd = lcd_;
Osamu Nakamura 1:c3d69f309845 694 lcd.start(0, video_buf, video_format, function(err){
Osamu Nakamura 1:c3d69f309845 695 if(!err) console.log('LCD Layer 0 Start');
Osamu Nakamura 1:c3d69f309845 696 else console.log(err);
Osamu Nakamura 1:c3d69f309845 697 });
Osamu Nakamura 1:c3d69f309845 698
Osamu Nakamura 1:c3d69f309845 699 console.log('Camera Open Start');
Osamu Nakamura 1:c3d69f309845 700 video.openCMOSCamera(camera_config, function(err, video_source){
Osamu Nakamura 1:c3d69f309845 701 if(!err) {
Osamu Nakamura 1:c3d69f309845 702 video_source.start(video_buf, function(){
Osamu Nakamura 1:c3d69f309845 703 console.log('Camera Start');
Osamu Nakamura 1:c3d69f309845 704
Osamu Nakamura 1:c3d69f309845 705 // 10秒後にJPEGエンコード開始
Osamu Nakamura 1:c3d69f309845 706 setTimeout(function() {
Osamu Nakamura 1:c3d69f309845 707 console.log('JPEG Encode Start');
Osamu Nakamura 1:c3d69f309845 708 video_source.stopSync();
Osamu Nakamura 1:c3d69f309845 709 jpeg_config.bitmap = new AlignedBuffer(video_buf, alignment);
Osamu Nakamura 1:c3d69f309845 710 jpeg.encode(jpeg_config, function(err, data) {
Osamu Nakamura 1:c3d69f309845 711 console.log('JPEG Encode Callback');
Osamu Nakamura 1:c3d69f309845 712 if(!err && data) {
Osamu Nakamura 1:c3d69f309845 713 use_google_vision_api(data.toBuffer().toString('base64'));
Osamu Nakamura 1:c3d69f309845 714 } else {
Osamu Nakamura 1:c3d69f309845 715 console.log(err);
Osamu Nakamura 1:c3d69f309845 716 }
Osamu Nakamura 1:c3d69f309845 717 });
Osamu Nakamura 1:c3d69f309845 718 }, timeout);
Osamu Nakamura 1:c3d69f309845 719 });
Osamu Nakamura 1:c3d69f309845 720 }
Osamu Nakamura 1:c3d69f309845 721 else {
Osamu Nakamura 1:c3d69f309845 722 console.log(err);
Osamu Nakamura 1:c3d69f309845 723 }
Osamu Nakamura 1:c3d69f309845 724 });
Osamu Nakamura 1:c3d69f309845 725 }
Osamu Nakamura 1:c3d69f309845 726 else {
Osamu Nakamura 1:c3d69f309845 727 console.log(err);
Osamu Nakamura 1:c3d69f309845 728 }
Osamu Nakamura 1:c3d69f309845 729 });
Osamu Nakamura 1:c3d69f309845 730
Osamu Nakamura 1:c3d69f309845 731 console.log('LCD Open Start');
Osamu Nakamura 1:c3d69f309845 732
Osamu Nakamura 1:c3d69f309845 733 function use_google_vision_api(image) {
Osamu Nakamura 1:c3d69f309845 734 var host = 'vision.googleapis.com';
Osamu Nakamura 1:c3d69f309845 735 var port = 443;
Osamu Nakamura 1:c3d69f309845 736 var path = '/v1/images:annotate';
Osamu Nakamura 1:c3d69f309845 737
Osamu Nakamura 1:c3d69f309845 738 var data = '{"requests":[{"image":{"content":"'
Osamu Nakamura 1:c3d69f309845 739 + image
Osamu Nakamura 1:c3d69f309845 740 + '"},"features":[{"type":"' + detection_type + '"}]},]}';
Osamu Nakamura 1:c3d69f309845 741
Osamu Nakamura 1:c3d69f309845 742 var options = {
Osamu Nakamura 1:c3d69f309845 743 host: host,
Osamu Nakamura 1:c3d69f309845 744 port: port,
Osamu Nakamura 1:c3d69f309845 745 path: path + '?' + key,
Osamu Nakamura 1:c3d69f309845 746 method: 'POST',
Osamu Nakamura 1:c3d69f309845 747 headers: {
Osamu Nakamura 1:c3d69f309845 748 'Host': host + ':' + port,
Osamu Nakamura 1:c3d69f309845 749 'Content-Type': 'application/json',
Osamu Nakamura 1:c3d69f309845 750 'Content-Length': data.length
Osamu Nakamura 1:c3d69f309845 751 }
Osamu Nakamura 1:c3d69f309845 752 };
Osamu Nakamura 1:c3d69f309845 753
Osamu Nakamura 1:c3d69f309845 754 var req = https.request(options, function(res) {
Osamu Nakamura 1:c3d69f309845 755 var body = '';
Osamu Nakamura 1:c3d69f309845 756 console.log( 'res.statusCode', res.statusCode);
Osamu Nakamura 1:c3d69f309845 757
Osamu Nakamura 1:c3d69f309845 758 res.on('data',function(chunk) {
Osamu Nakamura 1:c3d69f309845 759 body += chunk;
Osamu Nakamura 1:c3d69f309845 760 });
Osamu Nakamura 1:c3d69f309845 761 res.on('end',function() {
Osamu Nakamura 1:c3d69f309845 762 console.log(body);
Osamu Nakamura 1:c3d69f309845 763 drawResult(JSON.parse(body));
Osamu Nakamura 1:c3d69f309845 764 });
Osamu Nakamura 1:c3d69f309845 765 });
Osamu Nakamura 1:c3d69f309845 766 req.on( 'error', function( e ) {
Osamu Nakamura 1:c3d69f309845 767 console.log( 'error' );
Osamu Nakamura 1:c3d69f309845 768 console.log( e.message );
Osamu Nakamura 1:c3d69f309845 769 });
Osamu Nakamura 1:c3d69f309845 770
Osamu Nakamura 1:c3d69f309845 771 req.writeEntire = function(data, block_size) {
Osamu Nakamura 1:c3d69f309845 772 block_size = block_size || 1024;
Osamu Nakamura 1:c3d69f309845 773 for(var i = 0; i < data.length; i += block_size) {
Osamu Nakamura 1:c3d69f309845 774 this.write(data.slice(i, i + block_size));
Osamu Nakamura 1:c3d69f309845 775 }
Osamu Nakamura 1:c3d69f309845 776 };
Osamu Nakamura 1:c3d69f309845 777 req.writeEntire(data);
Osamu Nakamura 1:c3d69f309845 778 req.end();
Osamu Nakamura 1:c3d69f309845 779 }
Osamu Nakamura 1:c3d69f309845 780
Osamu Nakamura 1:c3d69f309845 781 function drawResult(res) {
Osamu Nakamura 1:c3d69f309845 782 switch(detection_type) {
Osamu Nakamura 1:c3d69f309845 783 case 'FACE_DETECTION':
Osamu Nakamura 1:c3d69f309845 784 drawFace(res);
Osamu Nakamura 1:c3d69f309845 785 break;
Osamu Nakamura 1:c3d69f309845 786 case 'OBJECT_LOCALIZATION':
Osamu Nakamura 1:c3d69f309845 787 drawObject(res);
Osamu Nakamura 1:c3d69f309845 788 break;
Osamu Nakamura 1:c3d69f309845 789 default:
Osamu Nakamura 1:c3d69f309845 790 break;
Osamu Nakamura 1:c3d69f309845 791 }
Osamu Nakamura 1:c3d69f309845 792 }
Osamu Nakamura 1:c3d69f309845 793
Osamu Nakamura 1:c3d69f309845 794 function drawObject(res) {
Osamu Nakamura 1:c3d69f309845 795 var result_buf = new AlignedBuffer(width*height*result_pixel_bytes, alignment);
Osamu Nakamura 1:c3d69f309845 796 var result = new Graphics({buf:result_buf, width:width, height:height, format:result_format});
Osamu Nakamura 1:c3d69f309845 797 result.drawRect(0, 0, width, height, 0x0000, true);
Osamu Nakamura 1:c3d69f309845 798
Osamu Nakamura 1:c3d69f309845 799 // response format
Osamu Nakamura 1:c3d69f309845 800 // https://cloud.google.com/vision/docs/reference/rest/v1/images/annotate?hl=ja#LocalizedObjectAnnotation
Osamu Nakamura 1:c3d69f309845 801 var objects = res.responses[0].localizedObjectAnnotations;
Osamu Nakamura 1:c3d69f309845 802 objects.forEach(function(e, index){
Osamu Nakamura 1:c3d69f309845 803 var rect = e.boundingPoly.normalizedVertices;
Osamu Nakamura 1:c3d69f309845 804 rect.forEach(function(e) {
Osamu Nakamura 1:c3d69f309845 805 e.x *= width;
Osamu Nakamura 1:c3d69f309845 806 e.y *= height;
Osamu Nakamura 1:c3d69f309845 807 });
Osamu Nakamura 1:c3d69f309845 808 result.drawRect(rect[0].x,
Osamu Nakamura 1:c3d69f309845 809 rect[0].y,
Osamu Nakamura 1:c3d69f309845 810 rect[1].x - rect[0].x,
Osamu Nakamura 1:c3d69f309845 811 rect[3].y - rect[0].y,
Osamu Nakamura 1:c3d69f309845 812 result_color, false);
Osamu Nakamura 1:c3d69f309845 813 result.drawText(e.name, rect[0].x + 1, rect[0].y + 1, 1, result_color, 0x0000);
Osamu Nakamura 1:c3d69f309845 814 });
Osamu Nakamura 1:c3d69f309845 815
Osamu Nakamura 1:c3d69f309845 816 lcd.startSync(2, result.frameBuffer, result_format);
Osamu Nakamura 1:c3d69f309845 817 }
Osamu Nakamura 1:c3d69f309845 818
Osamu Nakamura 1:c3d69f309845 819 function drawFace(res) {
Osamu Nakamura 1:c3d69f309845 820 var result_buf = new AlignedBuffer(width*height*result_pixel_bytes, alignment);
Osamu Nakamura 1:c3d69f309845 821 var result = new Graphics({buf:result_buf, width:width, height:height, format:result_format});
Osamu Nakamura 1:c3d69f309845 822 result.drawRect(0, 0, width, height, 0x0000, true);
Osamu Nakamura 1:c3d69f309845 823
Osamu Nakamura 1:c3d69f309845 824 var background_buf = new AlignedBuffer(width*height*result_pixel_bytes, alignment);
Osamu Nakamura 1:c3d69f309845 825 var background_format = 'rgb565';
Osamu Nakamura 1:c3d69f309845 826 var background = new Graphics({buf : background_buf, width:width, height:height, format:background_format});
Osamu Nakamura 1:c3d69f309845 827 background.drawRect(0, 0, width, height, 0xFFFF, true);
Osamu Nakamura 1:c3d69f309845 828
Osamu Nakamura 1:c3d69f309845 829 result.drawPolyline = function ( positions, close, color ) {
Osamu Nakamura 1:c3d69f309845 830 for(var i = 0; i < positions.length - 1; i++) {
Osamu Nakamura 1:c3d69f309845 831 this.drawLine(positions[i].x,
Osamu Nakamura 1:c3d69f309845 832 positions[i].y,
Osamu Nakamura 1:c3d69f309845 833 positions[i+1].x,
Osamu Nakamura 1:c3d69f309845 834 positions[i+1].y,
Osamu Nakamura 1:c3d69f309845 835 color);
Osamu Nakamura 1:c3d69f309845 836 }
Osamu Nakamura 1:c3d69f309845 837 if(close) {
Osamu Nakamura 1:c3d69f309845 838 this.drawLine(positions[positions.length-1].x,
Osamu Nakamura 1:c3d69f309845 839 positions[positions.length-1].y,
Osamu Nakamura 1:c3d69f309845 840 positions[0].x,
Osamu Nakamura 1:c3d69f309845 841 positions[0].y,
Osamu Nakamura 1:c3d69f309845 842 color);
Osamu Nakamura 1:c3d69f309845 843 }
Osamu Nakamura 1:c3d69f309845 844 };
Osamu Nakamura 1:c3d69f309845 845
Osamu Nakamura 1:c3d69f309845 846 // response format
Osamu Nakamura 1:c3d69f309845 847 // https://cloud.google.com/vision/docs/reference/rest/v1/images/annotate?hl=ja#FaceAnnotation
Osamu Nakamura 1:c3d69f309845 848
Osamu Nakamura 1:c3d69f309845 849 res.responses[0].faceAnnotations.forEach(function(faceAnnotation){
Osamu Nakamura 1:c3d69f309845 850
Osamu Nakamura 1:c3d69f309845 851 var landmarks = faceAnnotation.landmarks;
Osamu Nakamura 1:c3d69f309845 852 landmarks.findIndex = function(type) {
Osamu Nakamura 1:c3d69f309845 853 var ret;
Osamu Nakamura 1:c3d69f309845 854 this.forEach(function(e, index) {
Osamu Nakamura 1:c3d69f309845 855 if(e.type == type) ret = index;
Osamu Nakamura 1:c3d69f309845 856 });
Osamu Nakamura 1:c3d69f309845 857 return ret;
Osamu Nakamura 1:c3d69f309845 858 };
Osamu Nakamura 1:c3d69f309845 859
Osamu Nakamura 1:c3d69f309845 860 var outline = [];
Osamu Nakamura 1:c3d69f309845 861 outline.push(landmarks[landmarks.findIndex('LEFT_EAR_TRAGION')].position);
Osamu Nakamura 1:c3d69f309845 862 outline.push(landmarks[landmarks.findIndex('CHIN_LEFT_GONION')].position);
Osamu Nakamura 1:c3d69f309845 863 outline.push(landmarks[landmarks.findIndex('CHIN_GNATHION')].position);
Osamu Nakamura 1:c3d69f309845 864 outline.push(landmarks[landmarks.findIndex('CHIN_RIGHT_GONION')].position);
Osamu Nakamura 1:c3d69f309845 865 outline.push(landmarks[landmarks.findIndex('RIGHT_EAR_TRAGION')].position);
Osamu Nakamura 1:c3d69f309845 866 result.drawPolyline(outline, false, result_color);
Osamu Nakamura 1:c3d69f309845 867
Osamu Nakamura 1:c3d69f309845 868 var left_eyeblow = [];
Osamu Nakamura 1:c3d69f309845 869 left_eyeblow.push(landmarks[landmarks.findIndex('LEFT_OF_LEFT_EYEBROW')].position);
Osamu Nakamura 1:c3d69f309845 870 left_eyeblow.push(landmarks[landmarks.findIndex('LEFT_EYEBROW_UPPER_MIDPOINT')].position);
Osamu Nakamura 1:c3d69f309845 871 left_eyeblow.push(landmarks[landmarks.findIndex('RIGHT_OF_LEFT_EYEBROW')].position);
Osamu Nakamura 1:c3d69f309845 872 result.drawPolyline(left_eyeblow, false, result_color);
Osamu Nakamura 1:c3d69f309845 873
Osamu Nakamura 1:c3d69f309845 874 var right_eyeblow = [];
Osamu Nakamura 1:c3d69f309845 875 right_eyeblow.push(landmarks[landmarks.findIndex('LEFT_OF_RIGHT_EYEBROW')].position);
Osamu Nakamura 1:c3d69f309845 876 right_eyeblow.push(landmarks[landmarks.findIndex('RIGHT_EYEBROW_UPPER_MIDPOINT')].position);
Osamu Nakamura 1:c3d69f309845 877 right_eyeblow.push(landmarks[landmarks.findIndex('RIGHT_OF_RIGHT_EYEBROW')].position);
Osamu Nakamura 1:c3d69f309845 878 result.drawPolyline(right_eyeblow, false, result_color);
Osamu Nakamura 1:c3d69f309845 879
Osamu Nakamura 1:c3d69f309845 880 var left_eye = [];
Osamu Nakamura 1:c3d69f309845 881 left_eye.push(landmarks[landmarks.findIndex('LEFT_EYE_TOP_BOUNDARY')].position);
Osamu Nakamura 1:c3d69f309845 882 left_eye.push(landmarks[landmarks.findIndex('LEFT_EYE_RIGHT_CORNER')].position);
Osamu Nakamura 1:c3d69f309845 883 left_eye.push(landmarks[landmarks.findIndex('LEFT_EYE_BOTTOM_BOUNDARY')].position);
Osamu Nakamura 1:c3d69f309845 884 left_eye.push(landmarks[landmarks.findIndex('LEFT_EYE_LEFT_CORNER')].position);
Osamu Nakamura 1:c3d69f309845 885 result.drawPolyline(left_eye, true, result_color);
Osamu Nakamura 1:c3d69f309845 886
Osamu Nakamura 1:c3d69f309845 887 var eye = landmarks[landmarks.findIndex('LEFT_EYE')].position
Osamu Nakamura 1:c3d69f309845 888 result.drawCircle(eye.x, eye.y, 2, result_color, true);
Osamu Nakamura 1:c3d69f309845 889 eye = landmarks[landmarks.findIndex('RIGHT_EYE')].position
Osamu Nakamura 1:c3d69f309845 890 result.drawCircle(eye.x, eye.y, 2, result_color, true);
Osamu Nakamura 1:c3d69f309845 891
Osamu Nakamura 1:c3d69f309845 892 var right_eye = [];
Osamu Nakamura 1:c3d69f309845 893 right_eye.push(landmarks[landmarks.findIndex('RIGHT_EYE_TOP_BOUNDARY')].position);
Osamu Nakamura 1:c3d69f309845 894 right_eye.push(landmarks[landmarks.findIndex('RIGHT_EYE_RIGHT_CORNER')].position);
Osamu Nakamura 1:c3d69f309845 895 right_eye.push(landmarks[landmarks.findIndex('RIGHT_EYE_BOTTOM_BOUNDARY')].position);
Osamu Nakamura 1:c3d69f309845 896 right_eye.push(landmarks[landmarks.findIndex('RIGHT_EYE_LEFT_CORNER')].position);
Osamu Nakamura 1:c3d69f309845 897 result.drawPolyline(right_eye, true, result_color);
Osamu Nakamura 1:c3d69f309845 898
Osamu Nakamura 1:c3d69f309845 899 var nose = [];
Osamu Nakamura 1:c3d69f309845 900 nose.push(landmarks[landmarks.findIndex('NOSE_BOTTOM_LEFT')].position);
Osamu Nakamura 1:c3d69f309845 901 nose.push(landmarks[landmarks.findIndex('NOSE_TIP')].position);
Osamu Nakamura 1:c3d69f309845 902 nose.push(landmarks[landmarks.findIndex('NOSE_BOTTOM_RIGHT')].position);
Osamu Nakamura 1:c3d69f309845 903 nose.push(landmarks[landmarks.findIndex('NOSE_BOTTOM_CENTER')].position);
Osamu Nakamura 1:c3d69f309845 904 nose.push(landmarks[landmarks.findIndex('NOSE_BOTTOM_LEFT')].position);
Osamu Nakamura 1:c3d69f309845 905 nose.push(landmarks[landmarks.findIndex('MIDPOINT_BETWEEN_EYES')].position);
Osamu Nakamura 1:c3d69f309845 906 nose.push(landmarks[landmarks.findIndex('NOSE_BOTTOM_RIGHT')].position);
Osamu Nakamura 1:c3d69f309845 907 result.drawPolyline(nose, false, result_color);
Osamu Nakamura 1:c3d69f309845 908
Osamu Nakamura 1:c3d69f309845 909 var mouth = [];
Osamu Nakamura 1:c3d69f309845 910 mouth.push(landmarks[landmarks.findIndex('MOUTH_LEFT')].position);
Osamu Nakamura 1:c3d69f309845 911 mouth.push(landmarks[landmarks.findIndex('UPPER_LIP')].position);
Osamu Nakamura 1:c3d69f309845 912 mouth.push(landmarks[landmarks.findIndex('MOUTH_RIGHT')].position);
Osamu Nakamura 1:c3d69f309845 913 mouth.push(landmarks[landmarks.findIndex('LOWER_LIP')].position);
Osamu Nakamura 1:c3d69f309845 914 mouth.push(landmarks[landmarks.findIndex('MOUTH_LEFT')].position);
Osamu Nakamura 1:c3d69f309845 915 mouth.push(landmarks[landmarks.findIndex('MOUTH_CENTER')].position);
Osamu Nakamura 1:c3d69f309845 916 mouth.push(landmarks[landmarks.findIndex('MOUTH_RIGHT')].position);
Osamu Nakamura 1:c3d69f309845 917 result.drawPolyline(mouth, false, result_color);
Osamu Nakamura 1:c3d69f309845 918
Osamu Nakamura 1:c3d69f309845 919 });
Osamu Nakamura 1:c3d69f309845 920
Osamu Nakamura 1:c3d69f309845 921 lcd.start(2, result.frameBuffer, result_format, function(){
Osamu Nakamura 1:c3d69f309845 922 console.log('lcd start callback');
Osamu Nakamura 1:c3d69f309845 923 setTimeout(function(){
Osamu Nakamura 1:c3d69f309845 924 lcd.startSync(1, background.frameBuffer, background_format);
Osamu Nakamura 1:c3d69f309845 925 lcd.stopSync(0);
Osamu Nakamura 1:c3d69f309845 926 }, timeout);
Osamu Nakamura 1:c3d69f309845 927 });
Osamu Nakamura 1:c3d69f309845 928 }
Osamu Nakamura 1:c3d69f309845 929 //eoc ---------- (EndOfCode)
Osamu Nakamura 1:c3d69f309845 930
Osamu Nakamura 1:c3d69f309845 931
Osamu Nakamura 1:c3d69f309845 932
Osamu Nakamura 1:c3d69f309845 933
Osamu Nakamura 1:c3d69f309845 934
Osamu Nakamura 1:c3d69f309845 935 //boc ---------- (BeginOfCode)
Osamu Nakamura 1:c3d69f309845 936 // ■ ランダムグラフィックス描画テスト
Osamu Nakamura 1:c3d69f309845 937 var display = require('display');
Osamu Nakamura 1:c3d69f309845 938 var Graphics = require('graphics').Graphics;
Osamu Nakamura 1:c3d69f309845 939 var AlignedBuffer = require('aligned_buffer').AlignedBuffer;
Osamu Nakamura 1:c3d69f309845 940
Osamu Nakamura 1:c3d69f309845 941 var width = 480;
Osamu Nakamura 1:c3d69f309845 942 var height = 272;
Osamu Nakamura 1:c3d69f309845 943 var graphics_format = 'rgb565';
Osamu Nakamura 1:c3d69f309845 944 var text_format = 'argb4444';
Osamu Nakamura 1:c3d69f309845 945 var pixel_bytes = 2;
Osamu Nakamura 1:c3d69f309845 946 var alignment = 32;
Osamu Nakamura 1:c3d69f309845 947 var color_mask = 0xFFFF;
Osamu Nakamura 1:c3d69f309845 948 var text_color = 0xF000;
Osamu Nakamura 1:c3d69f309845 949 var text_background = 0xFFFF;
Osamu Nakamura 1:c3d69f309845 950
Osamu Nakamura 1:c3d69f309845 951 var buf_size = width * height * pixel_bytes;
Osamu Nakamura 1:c3d69f309845 952 var interval = 10;
Osamu Nakamura 1:c3d69f309845 953 var count = 500;
Osamu Nakamura 1:c3d69f309845 954
Osamu Nakamura 1:c3d69f309845 955 var lcd_config = {
Osamu Nakamura 1:c3d69f309845 956 type : '4.3inch'
Osamu Nakamura 1:c3d69f309845 957 };
Osamu Nakamura 1:c3d69f309845 958
Osamu Nakamura 1:c3d69f309845 959 var graphcis_buf = new AlignedBuffer(buf_size, alignment);
Osamu Nakamura 1:c3d69f309845 960 var canvas = new Graphics({buf:graphcis_buf, width:width, height:height, format:graphics_format});
Osamu Nakamura 1:c3d69f309845 961 canvas.drawRect(0,0,width,height,0xFFFF,true);
Osamu Nakamura 1:c3d69f309845 962 var text_buf = new AlignedBuffer(buf_size, alignment);
Osamu Nakamura 1:c3d69f309845 963 var text = new Graphics({buf:text_buf, width:width, height:height, format:text_format});
Osamu Nakamura 1:c3d69f309845 964 text.drawRect(0,0,width,height,0x0000,true);
Osamu Nakamura 1:c3d69f309845 965
Osamu Nakamura 1:c3d69f309845 966 var start_index = 0;
Osamu Nakamura 1:c3d69f309845 967 var drawRandomGraphics = [
Osamu Nakamura 1:c3d69f309845 968 { type : "Line", func : drawRandomLine },
Osamu Nakamura 1:c3d69f309845 969 { type : "Rectangle", func : drawRandomRect },
Osamu Nakamura 1:c3d69f309845 970 { type : "Arc", func : drawRandomArc },
Osamu Nakamura 1:c3d69f309845 971 { type : "Circle", func : drawRandomCircle },
Osamu Nakamura 1:c3d69f309845 972 { type : "Ellipse", func : drawRandomEllipse },
Osamu Nakamura 1:c3d69f309845 973 { type : "Polygon", func : drawRandomPolygon }
Osamu Nakamura 1:c3d69f309845 974 ];
Osamu Nakamura 1:c3d69f309845 975
Osamu Nakamura 1:c3d69f309845 976 function drawRandomLine(g) {
Osamu Nakamura 1:c3d69f309845 977 var sx = Math.floor(Math.random() * width);
Osamu Nakamura 1:c3d69f309845 978 var sy = Math.floor(Math.random() * height);
Osamu Nakamura 1:c3d69f309845 979 var ex = Math.floor(Math.random() * width);
Osamu Nakamura 1:c3d69f309845 980 var ey = Math.floor(Math.random() * height);
Osamu Nakamura 1:c3d69f309845 981 var color = Math.floor(Math.random() * color_mask);
Osamu Nakamura 1:c3d69f309845 982 g.drawLine(sx, sy, ex, ey, color);
Osamu Nakamura 1:c3d69f309845 983 }
Osamu Nakamura 1:c3d69f309845 984
Osamu Nakamura 1:c3d69f309845 985 function drawRandomRect(g) {
Osamu Nakamura 1:c3d69f309845 986 var x = Math.floor(Math.random() * width);
Osamu Nakamura 1:c3d69f309845 987 var y = Math.floor(Math.random() * height);
Osamu Nakamura 1:c3d69f309845 988 var w = Math.floor(Math.random() * width);
Osamu Nakamura 1:c3d69f309845 989 var h = Math.floor(Math.random() * height);
Osamu Nakamura 1:c3d69f309845 990 var color = Math.floor(Math.random() * color_mask);
Osamu Nakamura 1:c3d69f309845 991 var fill = Math.round(Math.random());
Osamu Nakamura 1:c3d69f309845 992 g.drawRect(x, y, w, h, color, fill);
Osamu Nakamura 1:c3d69f309845 993 }
Osamu Nakamura 1:c3d69f309845 994
Osamu Nakamura 1:c3d69f309845 995 function drawRandomArc(g) {
Osamu Nakamura 1:c3d69f309845 996 var x = Math.floor(Math.random() * width);
Osamu Nakamura 1:c3d69f309845 997 var y = Math.floor(Math.random() * height);
Osamu Nakamura 1:c3d69f309845 998 var radius = Math.floor(Math.random() * height);
Osamu Nakamura 1:c3d69f309845 999 var start = Math.floor(Math.random() * 360);
Osamu Nakamura 1:c3d69f309845 1000 var end = Math.floor(Math.random() * 360);
Osamu Nakamura 1:c3d69f309845 1001 var color = Math.floor(Math.random() * color_mask);
Osamu Nakamura 1:c3d69f309845 1002 g.drawArc(x, y, radius, start, end, color);
Osamu Nakamura 1:c3d69f309845 1003 }
Osamu Nakamura 1:c3d69f309845 1004
Osamu Nakamura 1:c3d69f309845 1005 function drawRandomCircle(g) {
Osamu Nakamura 1:c3d69f309845 1006 var x = Math.floor(Math.random() * width);
Osamu Nakamura 1:c3d69f309845 1007 var y = Math.floor(Math.random() * height);
Osamu Nakamura 1:c3d69f309845 1008 var radius = Math.floor(Math.random() * height);
Osamu Nakamura 1:c3d69f309845 1009 var color = Math.floor(Math.random() * color_mask);
Osamu Nakamura 1:c3d69f309845 1010 var fill = Math.round(Math.random());
Osamu Nakamura 1:c3d69f309845 1011 g.drawCircle(x, y, radius, color, fill);
Osamu Nakamura 1:c3d69f309845 1012 }
Osamu Nakamura 1:c3d69f309845 1013
Osamu Nakamura 1:c3d69f309845 1014 function drawRandomEllipse(g) {
Osamu Nakamura 1:c3d69f309845 1015 var cx = Math.floor(Math.random() * width);
Osamu Nakamura 1:c3d69f309845 1016 var cy = Math.floor(Math.random() * height);
Osamu Nakamura 1:c3d69f309845 1017 var rx = Math.floor(Math.random() * height);
Osamu Nakamura 1:c3d69f309845 1018 var ry = Math.floor(Math.random() * height);
Osamu Nakamura 1:c3d69f309845 1019 var color = Math.floor(Math.random() * color_mask);
Osamu Nakamura 1:c3d69f309845 1020 var fill = Math.round(Math.random());
Osamu Nakamura 1:c3d69f309845 1021 g.drawEllipse(cx, cy, rx, ry, color, fill);
Osamu Nakamura 1:c3d69f309845 1022 }
Osamu Nakamura 1:c3d69f309845 1023
Osamu Nakamura 1:c3d69f309845 1024 function drawRandomPolygon(g) {
Osamu Nakamura 1:c3d69f309845 1025 var x = Math.floor(Math.random() * width);
Osamu Nakamura 1:c3d69f309845 1026 var y = Math.floor(Math.random() * height);
Osamu Nakamura 1:c3d69f309845 1027 var radius = Math.floor(Math.random() * height);
Osamu Nakamura 1:c3d69f309845 1028 var sides = Math.floor(Math.random() * 10) + 3;
Osamu Nakamura 1:c3d69f309845 1029 var color = Math.floor(Math.random() * color_mask);
Osamu Nakamura 1:c3d69f309845 1030 var fill = Math.round(Math.random());
Osamu Nakamura 1:c3d69f309845 1031 g.drawPolygon(x, y, radius, sides, color, fill);
Osamu Nakamura 1:c3d69f309845 1032 }
Osamu Nakamura 1:c3d69f309845 1033
Osamu Nakamura 1:c3d69f309845 1034 display.openLCD(lcd_config, function(err, lcd) {
Osamu Nakamura 1:c3d69f309845 1035 if(!err) {
Osamu Nakamura 1:c3d69f309845 1036 lcd.startSync(0, canvas.frameBuffer, graphics_format);
Osamu Nakamura 1:c3d69f309845 1037 lcd.startSync(1, text.frameBuffer, text_format);
Osamu Nakamura 1:c3d69f309845 1038
Osamu Nakamura 1:c3d69f309845 1039 var draw = function(index) {
Osamu Nakamura 1:c3d69f309845 1040 var type = drawRandomGraphics[index].type;
Osamu Nakamura 1:c3d69f309845 1041 canvas.drawRect(0, 0, width, height, 0xFFFF, true);
Osamu Nakamura 1:c3d69f309845 1042 text.drawRect(0, 0, width, height, 0x0000, true);
Osamu Nakamura 1:c3d69f309845 1043 text.drawText('Draw Random ' + type, 0, 0, 2, text_color, text_background);
Osamu Nakamura 1:c3d69f309845 1044
Osamu Nakamura 1:c3d69f309845 1045 var timer = setInterval(function() {
Osamu Nakamura 1:c3d69f309845 1046 drawRandomGraphics[index].func(canvas);
Osamu Nakamura 1:c3d69f309845 1047 }, interval);
Osamu Nakamura 1:c3d69f309845 1048
Osamu Nakamura 1:c3d69f309845 1049 setTimeout(function() {
Osamu Nakamura 1:c3d69f309845 1050 clearInterval(timer);
Osamu Nakamura 1:c3d69f309845 1051 if(++index < drawRandomGraphics.length) {
Osamu Nakamura 1:c3d69f309845 1052 draw(index);
Osamu Nakamura 1:c3d69f309845 1053 }
Osamu Nakamura 1:c3d69f309845 1054 }, interval * count);
Osamu Nakamura 1:c3d69f309845 1055 }
Osamu Nakamura 1:c3d69f309845 1056 draw(start_index);
Osamu Nakamura 1:c3d69f309845 1057 }
Osamu Nakamura 1:c3d69f309845 1058 });
Osamu Nakamura 1:c3d69f309845 1059 //eoc ---------- (EndOfCode)
Osamu Nakamura 1:c3d69f309845 1060
Osamu Nakamura 1:c3d69f309845 1061
Osamu Nakamura 1:c3d69f309845 1062
Osamu Nakamura 1:c3d69f309845 1063
Osamu Nakamura 1:c3d69f309845 1064
Osamu Nakamura 1:c3d69f309845 1065 //boc ---------- (BeginOfCode)
Osamu Nakamura 1:c3d69f309845 1066 // ■ JPEG画像の連続表示テスト
Osamu Nakamura 1:c3d69f309845 1067 // 事前に contents_microSD.zip を解凍し、frames フォルダを microSD カード直下に
Osamu Nakamura 1:c3d69f309845 1068 // コピーしてください
Osamu Nakamura 1:c3d69f309845 1069 var display = require('display');
Osamu Nakamura 1:c3d69f309845 1070 var jpeg = require('jpeg');
Osamu Nakamura 1:c3d69f309845 1071 var fs = require('fs');
Osamu Nakamura 1:c3d69f309845 1072 var AlignedBuffer = require('aligned_buffer').AlignedBuffer;
Osamu Nakamura 1:c3d69f309845 1073 var Graphics = require('graphics').Graphics;
Osamu Nakamura 1:c3d69f309845 1074
Osamu Nakamura 1:c3d69f309845 1075 var width = 480;
Osamu Nakamura 1:c3d69f309845 1076 var height = 272;
Osamu Nakamura 1:c3d69f309845 1077 var format = 'rgb565';
Osamu Nakamura 1:c3d69f309845 1078 var pixel_bytes = 2;
Osamu Nakamura 1:c3d69f309845 1079 var alignment = 32;
Osamu Nakamura 1:c3d69f309845 1080 var buf = new AlignedBuffer(width * height * pixel_bytes, alignment);
Osamu Nakamura 1:c3d69f309845 1081 var canvas = new Graphics({buf:buf, width:width, height:height, format:format});
Osamu Nakamura 1:c3d69f309845 1082 canvas.drawRect(0,0,width,height,0xFFFF,true);
Osamu Nakamura 1:c3d69f309845 1083
Osamu Nakamura 1:c3d69f309845 1084 var lcd_config = {
Osamu Nakamura 1:c3d69f309845 1085 type : '4.3inch'
Osamu Nakamura 1:c3d69f309845 1086 };
Osamu Nakamura 1:c3d69f309845 1087
Osamu Nakamura 1:c3d69f309845 1088 var file_num = 14315;
Osamu Nakamura 1:c3d69f309845 1089
Osamu Nakamura 1:c3d69f309845 1090 display.openLCD(lcd_config, function(err, lcd) {
Osamu Nakamura 1:c3d69f309845 1091 if(!err) {
Osamu Nakamura 1:c3d69f309845 1092 lcd.start(0, canvas.frameBuffer, format, function() {
Osamu Nakamura 1:c3d69f309845 1093 var i = 1;
Osamu Nakamura 1:c3d69f309845 1094 var interval = setInterval(function() {
Osamu Nakamura 1:c3d69f309845 1095 if(i > file_num) {
Osamu Nakamura 1:c3d69f309845 1096 clearInterval(interval);
Osamu Nakamura 1:c3d69f309845 1097 return;
Osamu Nakamura 1:c3d69f309845 1098 }
Osamu Nakamura 1:c3d69f309845 1099 body(i++);
Osamu Nakamura 1:c3d69f309845 1100 }, 1);
Osamu Nakamura 1:c3d69f309845 1101 });
Osamu Nakamura 1:c3d69f309845 1102 } else {
Osamu Nakamura 1:c3d69f309845 1103 console.log(err);
Osamu Nakamura 1:c3d69f309845 1104 }
Osamu Nakamura 1:c3d69f309845 1105 });
Osamu Nakamura 1:c3d69f309845 1106
Osamu Nakamura 1:c3d69f309845 1107 function body(i) {
Osamu Nakamura 1:c3d69f309845 1108 var dir = ('000' + Math.floor(i / 100)).slice(-3);
Osamu Nakamura 1:c3d69f309845 1109 var file = ('00000' + i).slice(-5) + '.jpg';
Osamu Nakamura 1:c3d69f309845 1110 var path = '/sd/frames/' + dir + '/' + file;
Osamu Nakamura 1:c3d69f309845 1111 var jpeg_data = new AlignedBuffer(fs.readFileSync(path), alignment);
Osamu Nakamura 1:c3d69f309845 1112
Osamu Nakamura 1:c3d69f309845 1113 var decode_config = {
Osamu Nakamura 1:c3d69f309845 1114 width : 384,
Osamu Nakamura 1:c3d69f309845 1115 height : 216,
Osamu Nakamura 1:c3d69f309845 1116 format : format
Osamu Nakamura 1:c3d69f309845 1117 };
Osamu Nakamura 1:c3d69f309845 1118
Osamu Nakamura 1:c3d69f309845 1119 var image = jpeg.decodeSync(jpeg_data, decode_config);
Osamu Nakamura 1:c3d69f309845 1120 canvas.drawImage(image, 48, 28);
Osamu Nakamura 1:c3d69f309845 1121 }
Osamu Nakamura 1:c3d69f309845 1122 //eoc ---------- (EndOfCode)