Skip to content
This repository has been archived by the owner on Oct 1, 2024. It is now read-only.

Commit

Permalink
Add buildMode argument to upload and uploadUsingProgrammer
Browse files Browse the repository at this point in the history
  • Loading branch information
hlovdal authored and adiazulay committed Jan 19, 2021
1 parent 86719a3 commit 76c74cf
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 39 deletions.
82 changes: 47 additions & 35 deletions src/arduino/arduino.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,11 @@ import { UsbDetector } from "../serialmonitor/usbDetector";
import { makeCompilerParserContext } from "./intellisense";
import { ProgrammerManager } from "./programmerManager";

export enum BuildMode {
Upload = "Uploading",
UploadProgrammer = "Uploading (programmer)",
};

/**
* Represent an Arduino application based on the official Arduino IDE.
*/
Expand Down Expand Up @@ -99,9 +104,10 @@ export class ArduinoApp {
* @param {bool} [compile=true] - Indicates whether to compile the code when using the CLI to upload
* @param {bool} [useProgrammer=false] - Indicate whether a specific programmer should be used
*/
public async upload(compile: boolean = true, useProgrammer: boolean = false) {
public async upload(buildMode: BuildMode, compile: boolean = true, useProgrammer: boolean = false) {
const dc = DeviceContext.getInstance();
const args: string[] = [];
let restoreSerialMonitor: boolean = false;
const boardDescriptor = this.getBoardBuildString();
if (!boardDescriptor) {
return;
Expand Down Expand Up @@ -133,38 +139,40 @@ export class ArduinoApp {
return;
}

if ((!dc.configuration || !/upload_method=[^=,]*st[^,]*link/i.test(dc.configuration)) && !dc.port) {
await selectSerial();
return;
}
if (buildMode === BuildMode.Upload) {
if ((!dc.configuration || !/upload_method=[^=,]*st[^,]*link/i.test(dc.configuration)) && !dc.port) {
await selectSerial();
return;
}

if (!compile && !this.useArduinoCli()) {
arduinoChannel.error("This command is only available when using the Arduino CLI");
return;
}
if (!compile && !this.useArduinoCli()) {
arduinoChannel.error("This command is only available when using the Arduino CLI");
return;
}

if (!this.useArduinoCli()) {
args.push("--upload");
} else {
// TODO: add the --clean argument to the cli args when v 0.14 is released (this will clean up the build folder after uploading)
if (compile) {
args.push("compile", "--upload");
if (!this.useArduinoCli()) {
args.push("--upload");
} else {
args.push("upload");
// TODO: add the --clean argument to the cli args when v 0.14 is released (this will clean up the build folder after uploading)
if (compile) {
args.push("compile", "--upload");
} else {
args.push("upload");
}
args.push("-b", boardDescriptor);
}
args.push("-b", boardDescriptor);
}

if (useProgrammer) {
if (this.useArduinoCli()) {
args.push("--programmer", selectProgrammer)
} else {
args.push("--useprogrammer", "--pref", "programmer=arduino:" + selectProgrammer)
if (useProgrammer) {
if (this.useArduinoCli()) {
args.push("--programmer", selectProgrammer)
} else {
args.push("--useprogrammer", "--pref", "programmer=arduino:" + selectProgrammer)
}
}
}

if (dc.port) {
args.push("--port", dc.port);
if (dc.port) {
args.push("--port", dc.port);
}
}

const verbose = VscodeSettings.getInstance().logLevel === "verbose";
Expand All @@ -175,7 +183,7 @@ export class ArduinoApp {
await vscode.workspace.saveAll(false);

arduinoChannel.show();
arduinoChannel.start(`Upload sketch - ${dc.sketch}`);
arduinoChannel.start(`${buildMode} sketch '${dc.sketch}'`);

if (!await this.runPreBuildCommand(dc)) {
return;
Expand Down Expand Up @@ -204,16 +212,20 @@ export class ArduinoApp {

// stop serial monitor when everything is prepared and good
// what makes restoring of its previous state easier
const restoreSerialMonitor = await SerialMonitor.getInstance().closeSerialMonitor(dc.port);
UsbDetector.getInstance().pauseListening();
if (buildMode === BuildMode.Upload || buildMode === BuildMode.UploadProgrammer) {
restoreSerialMonitor = await SerialMonitor.getInstance().closeSerialMonitor(dc.port);
UsbDetector.getInstance().pauseListening();
}

// Push sketch as last argument
args.push(path.join(ArduinoWorkspace.rootPath, dc.sketch));

const cleanup = async () => {
UsbDetector.getInstance().resumeListening();
if (restoreSerialMonitor) {
await SerialMonitor.getInstance().openSerialMonitor();
if (buildMode === BuildMode.Upload || buildMode === BuildMode.UploadProgrammer) {
UsbDetector.getInstance().resumeListening();
if (restoreSerialMonitor) {
await SerialMonitor.getInstance().openSerialMonitor();
}
}
}

Expand All @@ -223,15 +235,15 @@ export class ArduinoApp {
args,
).then(async () => {
await cleanup();
arduinoChannel.end(`Uploaded the sketch: ${dc.sketch}${os.EOL}`);
arduinoChannel.end(`${buildMode} sketch '${dc.sketch}'${os.EOL}`);
}, async (reason) => {
await cleanup();
const msg = reason.code ?
`Exit with code=${reason.code}${os.EOL}` :
`Exit with code=${reason.code}` :
reason.message ?
reason.message :
JSON.stringify(reason);
arduinoChannel.error(msg);
arduinoChannel.error(`${buildMode} sketch '${dc.sketch}': ${msg}${os.EOL}`);
});
}

Expand Down
9 changes: 5 additions & 4 deletions src/extension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ const completionProviderModule = impor("./langService/completionProvider") as ty
import * as Logger from "./logger/logger";
const nsatModule =
impor("./nsat") as typeof import ("./nsat");
import { BuildMode } from "./arduino/arduino";
import { SerialMonitor } from "./serialmonitor/serialMonitor";
const usbDetectorModule = impor("./serialmonitor/usbDetector") as typeof import ("./serialmonitor/usbDetector");

Expand Down Expand Up @@ -144,7 +145,7 @@ export async function activate(context: vscode.ExtensionContext) {
location: vscode.ProgressLocation.Window,
title: "Arduino: Uploading...",
}, async () => {
await arduinoContextModule.default.arduinoApp.upload();
await arduinoContextModule.default.arduinoApp.upload(BuildMode.Upload);
});
} catch (ex) {
}
Expand All @@ -162,7 +163,7 @@ export async function activate(context: vscode.ExtensionContext) {
location: vscode.ProgressLocation.Window,
title: "Arduino: Using CLI to upload...",
}, async () => {
await arduinoContextModule.default.arduinoApp.upload(false);
await arduinoContextModule.default.arduinoApp.upload(BuildMode.Upload, false);
});
} catch (ex) {
}
Expand Down Expand Up @@ -197,7 +198,7 @@ export async function activate(context: vscode.ExtensionContext) {
if (!status.compile) {
status.compile = "upload";
try {
await arduinoContextModule.default.arduinoApp.upload(true, true);
await arduinoContextModule.default.arduinoApp.upload(BuildMode.UploadProgrammer, true, true);
} catch (ex) {
}
delete status.compile;
Expand All @@ -210,7 +211,7 @@ export async function activate(context: vscode.ExtensionContext) {
if (!status.compile) {
status.compile = "cliUpload";
try {
await arduinoContextModule.default.arduinoApp.upload(false, true);
await arduinoContextModule.default.arduinoApp.upload(BuildMode.UploadProgrammer, false, true);
} catch (ex) {
}
delete status.compile;
Expand Down

0 comments on commit 76c74cf

Please sign in to comment.