Espruino/libs/js/AT.min.js

4 lines
1.6 KiB
JavaScript

exports.connect=function(n){var m=!1,b="",g,d=0,l,e={},h={},k=[];n.on("data",function q(a){if(d){b&&(a=b+a,b="");if(a.length<=d){d-=a.length;l(a);0==d&&(l=void 0);return}l(a.substr(0,d));a=a.substr(d);d=0;l=void 0}b+=a;m&&console.log("] "+JSON.stringify(a));"\n"==b[0]&&(b=b.substr(1));if(e)for(var c in e)for(;b.substr(0,c.length)==c;)if(a=b,b=e[c](b),a==b)return;for(a=b.indexOf("\r");0<=a;){var f=b.substr(0,a),p=!1;if(0<f.length){for(c in h)f.substr(0,c.length)==c&&(h[c](f),p=!0);p||g&&
g(f)}b=b.substr(a+1);if(p&&d)return q("");"\n"==b[0]&&(b=b.substr(1));if(b.length&&e)for(c in e)b.substr(0,c.length)==c&&(b=e[c](b));a=b.indexOf("\r")}});var f={debug:function(a){m=!1!==a;return{line:b,lineCallback:g,handlers:e,lineHandlers:h,waiting:k,dataCount:d}},cmd:function(a,b,c){if(g)m&&console.log("Queued "+JSON.stringify(a)),k.push([a,b,c]);else if(m&&console.log("["+JSON.stringify(a)),n.write(a),b){var d=setTimeout(function(){g=void 0;c&&c();void 0===g&&0<k.length&&f.cmd.apply(f,k.shift())},
b),e=function(a){g=void 0;var b;c&&(b=c(a))?(g=e,c=b):clearTimeout(d);void 0===g&&0<k.length&&f.cmd.apply(f,k.shift())};g=e}},write:function(a){n.write(a)},cmdReg:function(a,b,c,d,e){f.registerLine(c,d);f.cmd(a,b,function(a){f.unregisterLine(c);e(a)})},registerLine:function(a,b){if(h[a])throw Error(a+" already registered");h[a]=b},unregisterLine:function(a){delete h[a]},register:function(a,b){if(e[a])throw Error(a+" already registered");e[a]=b},unregister:function(a){delete e[a]},isBusy:function(){return void 0!==
g},getData:function(a,b){if(d)throw Error("Already grabbing data");d=a;l=b}};return f}