Espruino/libs/js/AT.min.js
2023-11-08 13:35:10 +00:00

5 lines
1.6 KiB
JavaScript

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