/
Wifi.min.js
16 lines (16 loc) · 7.53 KB
/
Wifi.min.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function G(a){return{ip:a.charCodeAt(0)+"."+a.charCodeAt(1)+"."+a.charCodeAt(2)+"."+a.charCodeAt(3),port:a.charCodeAt(5)<<8|a.charCodeAt(4),len:a.charCodeAt(7)<<8|a.charCodeAt(6)}}function J(a){var b=a.indexOf(":");if(0>b)return a;var d=a.substring(5,b).split(",");d[1]|=0;var c=a.length-(b+1),g=d[0];if(w[g]){var l=(d[2]||"0.0.0.0").split(".").map(function(m){return 0|m}),h=0|d[3];k[g]+=String.fromCharCode(l[0],l[1],l[2],l[3],h&255,h>>8,c&255,c>>8)}if(c>=d[1])return k[g]+=
a.substr(b+1,d[1]),a.substr(b+d[1]+1);k[g]+=a.substr(b+1,c);e.getData(d[1]-c,function(m){k[g]+=m});return""}function x(a,b){if(b)return a(b);e.cmd("AT+CWMODE="+q+"\r\n",2E3,function(d){"no change"!=d&&"OK"!=d&&"WIFI DISCONNECT"!=d?a("CWMODE failed: "+(d?d:"Timeout")):a(null)})}function r(a){var b=a[0];void 0===f[b]&&f[5]?f[b]="Accept":"Wait"==f[b]?f[b]=!0:e.cmd("AT+CIPCLOSE="+b+"\r\n",1E3,function(){f[b]=void 0})}function t(a){f[a[0]]=""!=k[a[0]]?"DataClose":void 0}function v(a,b){var d=0==q;q|=a;
d?("1v91"==process.version?(y.reset(),u.setup(115200,{rx:A3,tx:A2})):u.setup(115200,{rx:A3,tx:A2,cts:y}),e=require("AT").connect(u),e.register("+IPD",J),e.registerLine("0,CONNECT",r),e.registerLine("1,CONNECT",r),e.registerLine("2,CONNECT",r),e.registerLine("3,CONNECT",r),e.registerLine("4,CONNECT",r),e.registerLine("0,CLOSED",t),e.registerLine("1,CLOSED",t),e.registerLine("2,CLOSED",t),e.registerLine("3,CLOSED",t),e.registerLine("4,CLOSED",t),e.registerLine("WIFI CONNECTED",function(){p|=n.CLIENT;
exports.emit("associated")}),e.registerLine("WIFI GOT IP",function(){exports.emit("connected")}),e.registerLine("WIFI DISCONNECTED",function(){p&=~n.CLIENT;exports.emit("disconnected")}),exports.at=e,require("NetworkJS").create(H),e.cmd("\r\nAT+RST\r\n",1E4,function l(g){if("ready"==g||"Ready."==g)setTimeout(function(){e.cmd("ATE0\r\n",1E3,function z(m){if("ATE0"==m)return z;"OK"==m?e.cmd("AT+CIPDINFO=1\r\n",1E3,function(A){if("OK"!=A)return b("CIPDINFO failed: "+(A?A:"Timeout"));e.cmd("AT+CIPMUX=1\r\n",
1E3,function(B){if("OK"!=B)return b("CIPMUX failed: "+(B?B:"Timeout"));e.cmd("AT+UART_CUR=115200,8,1,0,2\r\n",500,function(C){if("OK"!=C)return b("UART_CUR failed: "+(C?C:"Timeout"));setTimeout(function(){x(b)},500)})})}):b("ATE0 failed: "+(m?m:"Timeout"))})},500);else if(void 0===g)b("No 'ready' after AT+RST");else return l}),digitalWrite(D,1),digitalWrite(F,1)):x(b)}function I(a,b){b=b||function(){};(q&=~a)?x(b,null):(u.removeAllListeners(),e=void 0,exports.at=void 0,digitalWrite(F,0),digitalRead(D),
f=[],setTimeout(b,1))}var D=A13,F=A14,y=A15,u=Serial2;digitalRead(D);digitalWrite(F,0);var n={CLIENT:1,AP:2},K=["open","wep","wpa_psk","wpa2_psk","wpa_wpa2_psk"],q=0,p=0,e,f=[],w=[],k=["","","","",""],H={create:function(a,b,d){if(!e||!p)return-1;if(void 0===a&&2!=d){var c=5;f[c]="Wait";k[c]="";e.cmd("AT+CIPSERVER=1,"+b+"\r\n",1E4,function(l){"OK"==l?f[c]=!0:(f[c]=void 0,setTimeout(function(){throw Error("CIPSERVER failed ("+(l?l:"Timeout")+")");},0))});return 5}for(c=0;void 0!==f[c];)c++;if(5<=c)return-7;
k[c]="";f[c]="Wait";var g;2==d?(b?g="AT+CIPSTART="+c+',"UDP","255.255.255.255",'+b+","+b+",2\r\n":f[c]="UDP",w[c]=!0):(g="AT+CIPSTART="+c+',"TCP",'+JSON.stringify(a)+","+b+"\r\n",delete w[c]);g&&e.cmd(g,1E4,function m(h){if("ALREADY CONNECTED"==h)return m;if("OK"!=h||!0!==f[c])f[c]=-6});return c},close:function(a){"Wait"==f[a]?f[a]="WaitClose":void 0!==f[a]&&(0>f[a]||"UDP"==f[a]?f[a]=void 0:e.cmd((5==a?"AT+CIPSERVER=0":"AT+CIPCLOSE="+a)+"\r\n",1E3,function(){f[a]=void 0}))},accept:function(){for(var a=
0;5>a;a++)if("Accept"==f[a])return f[a]=!0,a;return-1},recv:function(a,b){if(k[a]){if(k[a].length>b){var d=k[a].substr(0,b);k[a]=k[a].substr(b)}else d=k[a],k[a]="","DataClose"==f[a]&&(f[a]=void 0);return d}return 0>f[a]?f[a]:f[a]?"":-1},send:function(a,b,d){if(!e)return-1;if(e.isBusy()||"Wait"==f[a])return 0;if(0>f[a])return f[a];if(!f[a])return-1;if("UDP"==f[a])return d=G(b),f[a]="Wait",e.cmd("AT+CIPSTART="+a+',"UDP","'+d.ip+'",'+d.port+","+d.port+",2\r\n",1E4,function(l){"OK"!=l&&(f[a]=-6)}),0;
var c=b.length,g="";2==d&&(d=G(b),g=',"'+d.ip+'",'+d.port,b=b.substr(8,d.len),c=8+d.len);e.cmd("AT+CIPSEND="+a+","+b.length+g+"\r\n",2E3,function m(h){if("OK"==h)e.register("> ",function(z){e.unregister("> ");e.write(b);return z.substr(2)});else if(h!="Recv "+b.length+" bytes"&&"busy s..."!=h){"SEND OK"==h?("WaitClose"==f[a]&&H.close(a),f[a]=!0):(f[a]=void 0,e.unregister("> "));return}return m});f[a]="Wait";return c}};exports.connect=function(a,b,d){var c="";d=d||function(){};void 0!==b.password&&
(c=b.password);v(n.CLIENT,function(g){if(g)return d(g);e.cmd("AT+CWJAP="+JSON.stringify(a)+","+JSON.stringify(c)+"\r\n",2E4,function m(h){if(0<=["WIFI DISCONNECT","WIFI CONNECTED","WIFI GOT IP","+CWJAP:1"].indexOf(h))return m;"OK"!=h?setTimeout(d,0,"WiFi connect failed: "+(h?h:"Timeout")):setTimeout(d,0,null)})})};exports.disconnect=function(a){I(n.CLIENT,a)};exports.startAP=function(a,b,d){d=d||function(){};b=b||{};var c=b.password?3:0;if(b.authMode&&(c={open:0,wpa:2,wpa2:3,wpa_wpa2:4}[b.authMode],
void 0===c))throw Error("Unknown authMode "+b.authMode);if(c){if(!b.password||8>b.password.length)throw Error("Password must be at least 8 characters");}else b.password="";void 0===b.channel&&(b.channel=5);v(n.AP,function(g){if(g)return d(g);e.cmd("AT+CWSAP="+JSON.stringify(a)+","+JSON.stringify(b.password)+","+b.channel+","+c+"\r\n",5E3,function(l){"OK"!=l?d("CWSAP failed: "+(l?l:"Timeout")):(p|=n.AP,d(null))})})};exports.stopAP=function(a){p&=~n.AP;I(n.AP,a)};exports.scan=function(a){var b=[];v(n.CLIENT,
function(d){if(d)return a(d);e.cmdReg("AT+CWLAP\r\n",5E3,"+CWLAP:",function(c){c=c.slice(8,-1).split(",");b.push({ssid:JSON.parse(c[1]),authMode:K[c[0]],rssi:parseInt(c[2]),mac:JSON.parse(c[3]),channel:JSON.parse(c[4])})},function(){a(null,b)})})};exports.getIP=function(a){var b={};e.cmd("AT+CIFSR\r\n",1E3,function g(c){if(void 0===c)a("Timeout");else{if("+CIFSR:STAIP"==c.substr(0,12))b.ip=c.slice(14,-1);else if("+CIFSR:STAMAC"==c.substr(0,13))b.mac=c.slice(15,-1);else if("OK"==c){a(null,b);return}return g}})};
exports.setIP=function(a,b){if("object"==typeof a&&a.ip){var d=[JSON.stringify(a.ip)];a.gw&&(d.push(JSON.stringify(a.gw)),d.push(JSON.stringify(a.netmask||"255.255.255.0")));a="AT+CIPSTA_CUR="+d.join(",")+"\r\n";d=3E3}else a="AT+CWDHCP_CUR=1,1\r\n",d=2E4;e.cmd(a,d,function(c){if("OK"==c)b(null);else return b("setIP failed: "+(c?c:"Timeout"))})};exports.getAPIP=function(a){var b={};e.cmd("AT+CIPAP_CUR?\r\n",1E3,function g(c){if(void 0===c)a("Timeout");else if("OK"==c)e.cmd("AT+CIPAPMAC_CUR?\r\n",1E3,
function m(h){if(void 0===h)a("Timeout");else if("OK"==h)a(null,b);else return"+CIPAPMAC_CUR"==h.substr(0,14)&&(b.mac=JSON.parse(h.substr(10))),m});else return"+CIPAP_CUR"==c.substr(0,10)&&(c=c.split(":"),"gateway"==c[1]&&(c[1]="gw"),b[c[1]]=JSON.parse(c[2])),g})};exports.setAPIP=function(a,b){var d=[JSON.stringify(a.ip)];a.gw&&(d.push(JSON.stringify(a.gw)),d.push(JSON.stringify(a.netmask||"255.255.255.0")));e.cmd("AT+CIPAP_CUR="+d.join(",")+"\r\n",3E3,function(c){if("OK"==c)b(null);else return b("setAPIP failed: "+
(c?c:"Timeout"))})};exports.setHostname=function(a,b){v(n.CLIENT,function(d){if(d)return b(d);e.cmd("AT+CWHOSTNAME="+JSON.stringify(a)+"\r\n",500,function(c){b("OK"==c?null:c)})})};exports.ping=function(a,b){var d;e.cmd('AT+PING="'+a+'"\r\n',1E3,function l(g){if(g&&"+"==g[0])return d=g.substr(1),l;"OK"==g?b(d):b()})};exports.turbo=function(a,b){var d=a?!0===a?921600:a:115200;e.cmd("AT+UART_CUR="+d+",8,1,0,2\r\n",500,function(c){"OK"!=c?b&&b("Baud rate switch to "+d+" failed: "+(c?c:"Timeout")):(u.setup(d,
{rx:A3,tx:A2,cts:y}),b&&b(null))})};exports.debug=function(){return{wifiMode:q,connected:p,socks:f,sockData:k}}