mirror of
https://github.com/espruino/Espruino.git
synced 2025-12-08 19:06:15 +00:00
4 lines
1.5 KiB
JavaScript
4 lines
1.5 KiB
JavaScript
exports.connect=function(p){var n=!1,b="",d,f=0,m,c={},k={},l=[];p.on("data",function(a){if(f){if(a.length<=f){f-=a.length;m(a);0==f&&(m=void 0);return}m(a.substr(0,f));a=a.substr(f);f=0;m=void 0}b+=a;n&&console.log("] "+JSON.stringify(a));"\n"==b[0]&&(b=b.substr(1));if(c)for(var e in c)b.substr(0,e.length)==e&&(b=c[e](b));for(a=b.indexOf("\r");0<=a;){var g=b.substr(0,a);if(0<g.length){var h=!1;for(e in k)g.substr(0,e.length)==e&&(k[e](g),h=!0);h||d&&d(g)}b=b.substr(a+1);"\n"==b[0]&&(b=
|
|
b.substr(1));if(b.length&&c)for(e in c[">"]&&">"==b[0]&&(b=c[">"](b)),c)b.substr(0,e.length)==e&&(b=c[e](b));a=b.indexOf("\r")}});var h={debug:function(a){n=!1!==a;return{line:b,lineCallback:d,handlers:c,lineHandlers:k,waiting:l}},cmd:function(a,b,g){if(d)n&&console.log("Queued "+JSON.stringify(a)),l.push([a,b,g]);else if(n&&console.log("["+JSON.stringify(a)),p.write(a),b){var e=setTimeout(function(){d=void 0;g&&g();void 0===d&&0<l.length&&h.cmd.apply(h,l.shift())},b),c=function(a){d=void 0;var b;
|
|
g&&(b=g(a))?(d=c,g=b):clearTimeout(e);void 0===d&&0<l.length&&h.cmd.apply(h,l.shift())};d=c}},write:function(a){p.write(a)},cmdReg:function(a,b,c,d,f){h.registerLine(c,d);h.cmd(a,b,function(a){h.unregisterLine(c);f(a)})},registerLine:function(a,b){if(k[a])throw Error(a+" already registered");k[a]=b},unregisterLine:function(a){delete k[a]},register:function(a,b){if(c[a])throw Error(a+" already registered");c[a]=b},unregister:function(a){delete c[a]},isBusy:function(){return void 0!==d},getData:function(a,
|
|
b){if(f)throw Error("Already grabbing data");f=a;m=b}};return h} |