mirror of
https://github.com/espruino/Espruino.git
synced 2025-12-08 19:06:15 +00:00
6 lines
2.6 KiB
JavaScript
6 lines
2.6 KiB
JavaScript
function k(){}function g(a,b){return new Promise(function(c,n){var l="";d.cmd(a+"\r\n",b||1E3,function p(b){if(void 0===b||"ERROR"==b)n(a+": "+b?b:"TIMEOUT");else if("OK"==b)c(l);else return l+=(l?"\n":"")+b,p})})}var d,e=[],f=" ".split(" "),h=!1,q={create:function(a,b){var c=0;if(void 0===a)return k("Server not implemented"),-1;for(;void 0!==e[c];)c++;if(6<=c)throw Error("No free sockets.");e[c]="Wait";f[c]="";h=!0;d.cmd("AT+QIOPEN=1,"+c+',"TCP",'+JSON.stringify(a)+","+b+",0,1\r\n",
|
|
1E4,function(a){"OK"!=a&&(e[c]=void 0,h=!1)});return c},close:function(a){void 0!==e[a]&&d.cmd("AT+QICLOSE="+a+"\r\n",1E3,function(){e[a]=void 0})},accept:function(a){return-1},recv:function(a,b){if(f[a]){if(f[a].length>b){var c=f[a].substr(0,b);f[a]=f[a].substr(b)}else c=f[a],f[a]="";return c}return e[a]?"":-1},send:function(a,b){if(h||d.isBusy()||"Wait"==e[a])return 0;if(!e[a])return-1;h=!0;d.write("AT+QISEND="+a+","+b.length+"\r\n");setTimeout(function(){d.cmd(b,2E3,function(b){k("AT+QISEND response "+
|
|
JSON.stringify(b));"SEND OK"==b&&(h=!1);"SEND FAIL"==b&&(e[a]=null)})},500);return b.length}},m={debug:function(a){k=a||void 0===a?function(a){print("[M35]",a)}:function(){};return{socks:e,sockData:f,busy:h}},getVersion:function(a){g("AT+GMR").then(function(b){a(null,b)})["catch"](function(b){a(b)})},getIP:function(a){var b;d.cmd("AT+QISTATE=0,1\r\n",1E3,function(c){"OK"==c?a(null,b):c.startsWith("+QISTATE")?b=c.split(",")[2]:a(null,c)})}};exports.connect=function(a,b,c){b=b||{};a.removeAllListeners();
|
|
m.at=d=require("AT").connect(a);require("NetworkJS").create(q);d.registerLine('+QIURC: "recv"',function(a){var b=a.split(",");k(b);d.getData(0|b[2],function(a){f[0|b[1]]+=a})});d.registerLine('+QIURC: "closed"',function(a){e[0|a.substr(17)]=null;h=!1});d.registerLine("+QIOPEN: ",function(a){a=a.substr(9).split(",");e[0|a[0]]=0==a[1]?!0:void 0;h=!1});d.registerLine("+CME ERROR",function(a){console.log(a)});g("ATE0").then(function(){return g(b.lte?"AT+CEREG?":"AT+CREG?")}).then(function(a){var b=a.split(",")[1];
|
|
if(1!=b&&5!=b)throw Error("GSM not registered, "+a);k("Forcing GPRS connect");return g("AT+CGATT=1",1E4)}).then(function(){return g("AT+CGREG?")}).then(function(a){var b=a.split(",")[1];if(2==b)throw Error("GPRS still connecting, "+a);if(1!=b&&5!=b)throw Error("GPRS not registered, "+a);return g("AT+COPS?")}).then(function(a){var c=a.split(",")[2];if(!c)throw Error("No Operator, "+a);k("Operator "+c);return g("AT+QICSGP=1,1,"+JSON.stringify(b.apn||"")+","+JSON.stringify(b.username||"")+","+JSON.stringify(b.password||
|
|
""),6E4)}).then(function(){return g("AT+QIACT=1",6E4)}).then(function(){c&&c(null)})["catch"](function(a){c&&c(a)});return m} |