Skip to content

Commit 6d0fe08

Browse files
committed
Options to flash different boards
1 parent fbc4a6c commit 6d0fe08

File tree

1 file changed

+46
-24
lines changed

1 file changed

+46
-24
lines changed

core/flasherESP8266.js

Lines changed: 46 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,27 @@
2121
function init() {
2222
}
2323

24+
function defaultOptions(options) {
25+
options.serialDevice = options.serialDevice||"Serial2";
26+
options.serialRx = options.serialRx||"A3";
27+
options.serialTx = options.serialTx||"A2";
28+
}
29+
2430
/* options = {
2531
binary : ArrayBuffer,
2632
cbStatus,
27-
cbDone */
33+
cbDone,
34+
serialDevice, // Serial2
35+
serialRx, // A3
36+
serialTx, // A2
37+
chBoot, // A14
38+
chPD, // A13
39+
*/
2840
function flashDevice(options) {
2941
if (!options.binary) throw new Error("Needs binary");
42+
defaultOptions(options);
3043

31-
Espruino.Core.Serial.startListening(function (buffer) {
44+
var prevReader = Espruino.Core.Serial.startListening(function (buffer) {
3245
var bufView = new Uint8Array(buffer);
3346
for (var i=0;i<bufView.length;i++)
3447
uartLine += String.fromCharCode(bufView[i]);
@@ -37,7 +50,7 @@
3750
var a = l.shift();
3851
console.log(">>>",a);
3952
try {
40-
if (packetHandler) packetHandler(JSON.parse(a));
53+
if (packetHandler) packetHandler(Espruino.Core.Utils.parseJSONish(a));
4154
} catch(e) { console.log("Unable to decode"); }
4255
}
4356
uartLine = l[0];
@@ -49,6 +62,7 @@
4962
// ignore keyPress from terminal during flashing
5063
});
5164
function finish() {
65+
Espruino.Core.Serial.startListening(prevReader);
5266
Espruino.Core.Serial.setSlowWrite(hadSlowWrite);
5367
Espruino.Core.Serial.setBinary(false);
5468
Espruino.Core.Terminal.setInputDataHandler(oldHandler);
@@ -66,12 +80,12 @@
6680
}).catch(function(error) {
6781
console.log("Error!", error);
6882
finish();
69-
if (options.cbDone) options.cbDone();
83+
if (options.cbDone) options.cbDone(error);
7084
});
7185
}
7286

7387

74-
function wr(cmd,data) {
88+
function wr(options,cmd,data) {
7589
//console.log("Write",cmd,data.length,data);
7690
if (typeof data !== "string")
7791
data = String.fromCharCode.apply(null,data);
@@ -83,12 +97,12 @@ function wr(cmd,data) {
8397
pk = pk.replace(/\xDB/g,"\xDB\xDD").replace(/\xC0/g,"\xDB\xDC");
8498
pk = "\xC0"+pk+"\xC0";
8599
//console.log("OUT: ",pk.length,pk.split("").map(x=>x.charCodeAt().toString(16).padStart(2,'0')).join(" "));
86-
Espruino.Core.Serial.write(`\x10n="${Espruino.Core.Utils.btoa(pk)}";Serial2.write(atob(n))\n`, false);
100+
Espruino.Core.Serial.write(`\x10n="${Espruino.Core.Utils.btoa(pk)}";${options.serialDevice}.write(atob(n))\n`, false);
87101
}
88102

89-
function sendCmd(cmd, data) {
103+
function sendCmd(options, cmd, data) {
90104
return new Promise((resolve,reject)=>{
91-
wr(cmd, data);
105+
wr(options, cmd, data);
92106
packetHandler = function(d) {
93107
//console.log(d);
94108
packetHandler = undefined;
@@ -104,9 +118,9 @@ function setupEspruino(options) {
104118
Espruino.Core.Serial.write('\x03\x10reset()\n', false, function() {
105119
setTimeout(function() {
106120
console.log("Start Wifi, add handler");
107-
Espruino.Core.Serial.write(`\x10Serial2.setup(74880, { rx: A3, tx : A2 });
108-
\x10var packetHandler, packetData="";
109-
\x10Serial2.on('data', function(d) {
121+
Espruino.Core.Serial.write(`\x10${options.serialDevice}.setup(115200, { rx: ${options.serialRx}, tx : ${options.serialTx} });
122+
\x10var packetHandler, packetData="", OUT=eval(process.env.CONSOLE);
123+
\x10${options.serialDevice}.on('data', function(d) {
110124
packetData+=d;
111125
if (packetData[0]!="\\xc0") {
112126
var i = packetData.indexOf("\\xc0");
@@ -117,7 +131,7 @@ function setupEspruino(options) {
117131
if (e<0) break;
118132
var packet = packetData.substr(1,e-1);
119133
var len = packet.charCodeAt(2)|(packet.charCodeAt(3)<<8);
120-
USB.println(JSON.stringify({
134+
OUT.println(JSON.stringify({
121135
dir : packet.charCodeAt(0),
122136
cmd : packet.charCodeAt(1),
123137
len: len,
@@ -126,9 +140,9 @@ function setupEspruino(options) {
126140
packetData=packetData.substr(e+1);
127141
}
128142
});
129-
\x10digitalWrite(A14, 0); // make sure WiFi starts off
130-
\x10digitalWrite(A13, 0); // into of boot mode
131-
\x10digitalWrite(A14, 1); // turn on wifi
143+
\x10${options.chPD?`digitalWrite(${options.chPD}, 0);`:``/*make sure WiFi starts off*/}
144+
\x10${options.chBoot?`digitalWrite(${options.chBoot}, 0);`:`` /* into of boot mode */}
145+
\x10${options.chPD?`digitalWrite(${options.chPD}, 1);`:`` /* turn on wifi */}
132146
`, false, function() {
133147
console.log("Handler added");
134148
resolve();
@@ -168,7 +182,7 @@ function cmdSync(options) {
168182
}, 500);
169183
}
170184
}
171-
var tries = 5;
185+
var tries = 20;
172186
interval = setInterval(function() {
173187
if (tries-- <= 0) {
174188
clearInterval(interval);
@@ -178,7 +192,7 @@ function cmdSync(options) {
178192
var d = new Uint8Array(36);
179193
d.fill(0x55);
180194
d.set([0x07,0x07,0x12,0x20]);
181-
wr(8 /* SYNC */, d);
195+
wr(options, 8 /* SYNC */, d);
182196
}, 500);
183197
});
184198
}
@@ -196,7 +210,7 @@ function cmdFlash(options) {
196210
0 // flash offset
197211
]);
198212
var idx = 0;
199-
return sendCmd(2 /* FLASH_BEGIN */, new Uint8Array(d.buffer)).then(function flash() {
213+
return sendCmd(options, 2 /* FLASH_BEGIN */, new Uint8Array(d.buffer)).then(function flash() {
200214
console.log("Block "+idx);
201215
if (options.cbStatus) options.cbStatus(`Writing Block ${idx} / ${blockCount}`, idx / blockCount);
202216
if (idx>=blockCount) return true;
@@ -209,27 +223,35 @@ function cmdFlash(options) {
209223
]);
210224
d.set(new Uint8Array(binary.buffer, BLOCK_SIZE*idx, BLOCK_SIZE), 16);
211225
idx++;
212-
return sendCmd(3 /* FLASH_DATA */, d).then(flash);
226+
return sendCmd(options, 3 /* FLASH_DATA */, d).then(flash);
213227
});
214228
}
215229

216-
function getFirmwareVersion(callback) {
230+
function getFirmwareVersion(options, callback) {
231+
defaultOptions(options);
217232
Espruino.Core.Serial.write('\x03\x10reset()\n', false, function() {
218233
setTimeout(function() {
219-
Espruino.Core.Serial.write(`\x10digitalWrite(A14, 0);/*WiFi off*/digitalWrite(A13, 1);/*no boot*/digitalWrite(A14, 1);/*WiFi On*/\n`, false, function() {
234+
var cmd = "\x10\n";
235+
if (options.chPD && options.chBoot)
236+
cmd = `\x10digitalWrite(${options.chPD}, 0);/*WiFi off*/digitalWrite(${options.chBoot}, 1);/*no boot*/digitalWrite(${options.chPD}, 1);/*WiFi On*/\n`;
237+
else if (options.chPD)
238+
cmd = `\x10digitalWrite(${options.chPD}, 1);/*WiFi On*/\n`;
239+
240+
Espruino.Core.Serial.write(cmd, false, function() {
220241
setTimeout(function() {
221242
var result = "";
222-
Espruino.Core.Serial.startListening(function (buffer) {
243+
var prevReader = Espruino.Core.Serial.startListening(function (buffer) {
223244
var bufView = new Uint8Array(buffer);
224245
for (var i=0;i<bufView.length;i++)
225246
result += String.fromCharCode(bufView[i]);
226247
});
227-
Espruino.Core.Serial.write(`\x10Serial2.pipe(USB);Serial2.setup(115200, { rx: A3, tx : A2 });Serial2.print("AT+GMR\\r\\n");\n`, false, function() {
248+
Espruino.Core.Serial.write(`\x10${options.serialDevice}.pipe(eval(process.env.CONSOLE));${options.serialDevice}.setup(115200, { rx: ${options.serialRx}, tx : ${options.serialTx} });${options.serialDevice}.print("AT+GMR\\r\\n");\n`, false, function() {
228249
setTimeout(function() {
229250
Espruino.Core.Serial.write('\x03\x10reset()\n', false, function() {
251+
Espruino.Core.Serial.startListening(prevReader);
230252
callback(result.trim());
231253
});
232-
}, 500);
254+
}, 1500);
233255
});
234256
}, 500);
235257
});

0 commit comments

Comments
 (0)