obniz-cli
Version:
[日本語はこちら](./README-ja.md)
92 lines • 3.52 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const chalk_1 = __importDefault(require("chalk"));
const child_process_1 = __importDefault(require("child_process"));
const os_1 = __importDefault(require("../obnizio/os"));
const ora_1 = __importDefault(require("ora"));
function flash(obj) {
return new Promise(async (resolve, reject) => {
var _a, _b, _c;
let status = "connecting";
const spinner = ora_1.default(`Flashing obnizOS: preparing file for hardware=${chalk_1.default.green(obj.hardware)} version=${chalk_1.default.green(obj.version)}`).start();
if (obj.debugserial) {
spinner.stop();
}
// prepare files
const files = await os_1.default.prepareLocalFile(obj.hardware, obj.version, (progress) => {
spinner.text = `Flashing obnizOS: ${progress}`;
});
let received = "";
const cmd = `esptool.py --chip esp32 --port "${obj.portname}" --baud ${obj.baud} --before default_reset --after hard_reset` +
` write_flash` +
` -z --flash_mode dio --flash_freq 40m --flash_size detect` +
` 0x1000 "${files.bootloader_path}"` +
` 0x10000 "${files.app_path}"` +
` 0x8000 "${files.partition_path}"`;
const onSuccess = () => {
spinner.succeed(`Flashing obnizOS: Flashed`);
resolve();
};
const onFailed = (err) => {
spinner.fail(`Flashing obnizOS: Fail`);
reject(err);
};
spinner.text = `Flashing obnizOS: Opening Serial Port ${chalk_1.default.green(obj.portname)}`;
const child = child_process_1.default.exec(cmd);
(_a = child.stdout) === null || _a === void 0 ? void 0 : _a.setEncoding("utf8");
(_b = child.stdout) === null || _b === void 0 ? void 0 : _b.on("data", (text) => {
if (obj.debugserial) {
console.log(text);
obj.stdout(text);
}
received += text;
if (status === "connecting" && received.indexOf(`Chip is`) >= 0) {
status = "flashing";
spinner.text = `Flashing obnizOS: Connected. Flashing...`;
}
});
(_c = child.stderr) === null || _c === void 0 ? void 0 : _c.on("data", (text) => {
if (obj.debugserial) {
obj.stdout(text);
}
received += `${chalk_1.default.red(text)}`;
});
child.on("error", (er) => {
onFailed(er);
});
child.on("exit", (code) => {
try {
throwIfFailed(received);
}
catch (e) {
onFailed(e);
return;
}
if (code !== 0) {
reject(new Error(`Failed Flashing.`));
return;
}
onSuccess();
});
});
}
exports.default = flash;
function throwIfFailed(text) {
if (text.indexOf("Leaving...") >= 0) {
// success
return;
}
let err;
if (text.indexOf("Timed out waiting for packet header") >= 0) {
err = new Error(`No Bootload mode ESP32 found. Check connection or Boot Mode.`);
}
else {
err = new Error(`Failed Flashing.`);
}
console.log(text);
throw err;
}
//# sourceMappingURL=_flash.js.map