diff --git a/arduino-ide-extension/src/browser/contributions/upload-sketch.ts b/arduino-ide-extension/src/browser/contributions/upload-sketch.ts index 01e1c489..178d8637 100644 --- a/arduino-ide-extension/src/browser/contributions/upload-sketch.ts +++ b/arduino-ide-extension/src/browser/contributions/upload-sketch.ts @@ -30,6 +30,9 @@ export class UploadSketch extends SketchContribution { registry.registerCommand(UploadSketch.Commands.UPLOAD_SKETCH, { execute: () => this.uploadSketch() }); + registry.registerCommand(UploadSketch.Commands.UPLOAD_SKETCH_USING_PROGRAMMER, { + execute: () => this.uploadSketch(true) + }); registry.registerCommand(UploadSketch.Commands.UPLOAD_SKETCH_TOOLBAR, { isVisible: widget => ArduinoToolbar.is(widget) && widget.side === 'left', execute: () => registry.executeCommand(UploadSketch.Commands.UPLOAD_SKETCH.id) @@ -42,6 +45,11 @@ export class UploadSketch extends SketchContribution { label: 'Upload', order: '0' }); + registry.registerMenuAction(ArduinoMenus.SKETCH__MAIN_GROUP, { + commandId: UploadSketch.Commands.UPLOAD_SKETCH_USING_PROGRAMMER.id, + label: 'Upload Using Programmer', + order: '1' + }); } registerKeybindings(registry: KeybindingRegistry): void { @@ -49,6 +57,10 @@ export class UploadSketch extends SketchContribution { command: UploadSketch.Commands.UPLOAD_SKETCH.id, keybinding: 'CtrlCmd+U' }); + registry.registerKeybinding({ + command: UploadSketch.Commands.UPLOAD_SKETCH_USING_PROGRAMMER.id, + keybinding: 'CtrlCmd+Shift+U' + }); } registerToolbarItems(registry: TabBarToolbarRegistry): void { @@ -60,7 +72,7 @@ export class UploadSketch extends SketchContribution { }); } - async uploadSketch(): Promise { + async uploadSketch(usingProgrammer: boolean = false): Promise { const uri = await this.currentSketchFile(); if (!uri) { return; @@ -86,12 +98,13 @@ export class UploadSketch extends SketchContribution { this.boardsDataStore.getData(boardsConfig.selectedBoard.fqbn) ]); this.outputChannelManager.getChannel('Arduino: upload').clear(); + const programmer = usingProgrammer ? data.selectedProgrammer : undefined; await this.coreService.upload({ sketchUri: uri, fqbn, port: selectedPort.address, optimizeForDebug: this.editorMode.compileForDebug, - programmer: data.selectedProgrammer + programmer }); this.messageService.info('Done uploading.', { timeout: 1000 }); } catch (e) { @@ -110,6 +123,9 @@ export namespace UploadSketch { export const UPLOAD_SKETCH: Command = { id: 'arduino-upload-sketch' }; + export const UPLOAD_SKETCH_USING_PROGRAMMER: Command = { + id: 'arduino-upload-sketch-using-programmer' + }; export const UPLOAD_SKETCH_TOOLBAR: Command = { id: 'arduino-upload-sketch--toolbar' }; diff --git a/arduino-ide-extension/src/browser/contributions/verify-sketch.ts b/arduino-ide-extension/src/browser/contributions/verify-sketch.ts index b10730f4..954233dc 100644 --- a/arduino-ide-extension/src/browser/contributions/verify-sketch.ts +++ b/arduino-ide-extension/src/browser/contributions/verify-sketch.ts @@ -36,7 +36,7 @@ export class VerifySketch extends SketchContribution { registry.registerMenuAction(ArduinoMenus.SKETCH__MAIN_GROUP, { commandId: VerifySketch.Commands.VERIFY_SKETCH.id, label: 'Verify/Compile', - order: '0' + order: '2' }); } diff --git a/arduino-ide-extension/src/common/protocol/boards-service.ts b/arduino-ide-extension/src/common/protocol/boards-service.ts index f3c01dd7..0abbe29f 100644 --- a/arduino-ide-extension/src/common/protocol/boards-service.ts +++ b/arduino-ide-extension/src/common/protocol/boards-service.ts @@ -287,15 +287,6 @@ export namespace Programmer { return left.id === right.id && left.name === right.name && left.platform === right.platform; } - export function toString({ id, platform }: Programmer): string { - // tslint:disable-next-line: whitespace - const [vendor,] = platform.split(':'); - if (!vendor) { - throw new Error(`Could not extract vendor from platform: '${platform}'.`); - } - return `${vendor}:${id}`; - } - } export namespace Board { diff --git a/arduino-ide-extension/src/common/protocol/core-service.ts b/arduino-ide-extension/src/common/protocol/core-service.ts index 4debb868..a6baa0b4 100644 --- a/arduino-ide-extension/src/common/protocol/core-service.ts +++ b/arduino-ide-extension/src/common/protocol/core-service.ts @@ -20,7 +20,7 @@ export namespace CoreService { readonly sketchUri: string; readonly fqbn: string; readonly optimizeForDebug: boolean; - readonly programmer?: Programmer; + readonly programmer?: Programmer | undefined; } } diff --git a/arduino-ide-extension/src/node/core-service-impl.ts b/arduino-ide-extension/src/node/core-service-impl.ts index 0e4ace21..c19da8d6 100644 --- a/arduino-ide-extension/src/node/core-service-impl.ts +++ b/arduino-ide-extension/src/node/core-service-impl.ts @@ -2,7 +2,7 @@ import { inject, injectable, postConstruct } from 'inversify'; import { FileSystem } from '@theia/filesystem/lib/common/filesystem'; import { CoreService, CoreServiceClient } from '../common/protocol/core-service'; import { CompileReq, CompileResp } from './cli-protocol/commands/compile_pb'; -import { BoardsService, Programmer } from '../common/protocol/boards-service'; +import { BoardsService } from '../common/protocol/boards-service'; import { CoreClientProvider } from './core-client-provider'; import * as path from 'path'; import { ToolOutputServiceServer } from '../common/protocol/tool-output-service'; @@ -62,7 +62,7 @@ export class CoreServiceImpl implements CoreService { compilerReq.setVerbose(true); compilerReq.setQuiet(false); if (options.programmer) { - compilerReq.setProgrammer(Programmer.toString(options.programmer)); + compilerReq.setProgrammer(options.programmer.id); } const result = client.compile(compilerReq); @@ -108,7 +108,7 @@ export class CoreServiceImpl implements CoreService { uploadReq.setFqbn(fqbn); uploadReq.setPort(options.port); if (options.programmer) { - uploadReq.setProgrammer(Programmer.toString(options.programmer)); + uploadReq.setProgrammer(options.programmer.id); } const result = client.upload(uploadReq);