From ee265aec9048c30692a474901a10f526fe18a36e Mon Sep 17 00:00:00 2001 From: Silvano Cerza Date: Thu, 10 Mar 2022 16:07:10 +0100 Subject: [PATCH] Changed how connection is handled on upload --- .../browser/contributions/burn-bootloader.ts | 5 ----- .../browser/contributions/upload-sketch.ts | 6 ----- .../browser/contributions/verify-sketch.ts | 7 +++++- .../firmware-uploader-component.tsx | 5 +++-- .../firmware-uploader-dialog.tsx | 3 ++- .../protocol/arduino-firmware-uploader.ts | 4 +++- .../node/arduino-firmware-uploader-impl.ts | 22 ++++++++++--------- 7 files changed, 26 insertions(+), 26 deletions(-) diff --git a/arduino-ide-extension/src/browser/contributions/burn-bootloader.ts b/arduino-ide-extension/src/browser/contributions/burn-bootloader.ts index 96953db7..b79ad079 100644 --- a/arduino-ide-extension/src/browser/contributions/burn-bootloader.ts +++ b/arduino-ide-extension/src/browser/contributions/burn-bootloader.ts @@ -3,7 +3,6 @@ import { OutputChannelManager } from '@theia/output/lib/browser/output-channel'; import { CoreService } from '../../common/protocol'; import { ArduinoMenus } from '../menu/arduino-menus'; import { BoardsDataStore } from '../boards/boards-data-store'; -import { SerialConnectionManager } from '../serial/serial-connection-manager'; import { BoardsServiceProvider } from '../boards/boards-service-provider'; import { SketchContribution, @@ -18,8 +17,6 @@ export class BurnBootloader extends SketchContribution { @inject(CoreService) protected readonly coreService: CoreService; - @inject(SerialConnectionManager) - protected readonly serialConnection: SerialConnectionManager; @inject(BoardsDataStore) protected readonly boardsDataStore: BoardsDataStore; @@ -91,8 +88,6 @@ export class BurnBootloader extends SketchContribution { errorMessage = e.toString(); } this.messageService.error(errorMessage); - } finally { - await this.serialConnection.reconnectAfterUpload(); } } } diff --git a/arduino-ide-extension/src/browser/contributions/upload-sketch.ts b/arduino-ide-extension/src/browser/contributions/upload-sketch.ts index b86949fd..2aa75a1d 100644 --- a/arduino-ide-extension/src/browser/contributions/upload-sketch.ts +++ b/arduino-ide-extension/src/browser/contributions/upload-sketch.ts @@ -4,7 +4,6 @@ import { BoardUserField, CoreService } from '../../common/protocol'; import { ArduinoMenus, PlaceholderMenuNode } from '../menu/arduino-menus'; import { ArduinoToolbar } from '../toolbar/arduino-toolbar'; import { BoardsDataStore } from '../boards/boards-data-store'; -import { SerialConnectionManager } from '../serial/serial-connection-manager'; import { BoardsServiceProvider } from '../boards/boards-service-provider'; import { SketchContribution, @@ -22,9 +21,6 @@ export class UploadSketch extends SketchContribution { @inject(CoreService) protected readonly coreService: CoreService; - @inject(SerialConnectionManager) - protected readonly serialConnection: SerialConnectionManager; - @inject(MenuModelRegistry) protected readonly menuRegistry: MenuModelRegistry; @@ -294,8 +290,6 @@ export class UploadSketch extends SketchContribution { } finally { this.uploadInProgress = false; this.onDidChangeEmitter.fire(); - - setTimeout(() => this.serialConnection.reconnectAfterUpload(), 5000); } } } diff --git a/arduino-ide-extension/src/browser/contributions/verify-sketch.ts b/arduino-ide-extension/src/browser/contributions/verify-sketch.ts index 898953ae..2c060a6e 100644 --- a/arduino-ide-extension/src/browser/contributions/verify-sketch.ts +++ b/arduino-ide-extension/src/browser/contributions/verify-sketch.ts @@ -110,12 +110,17 @@ export class VerifySketch extends SketchContribution { ), this.sourceOverride(), ]); + const board = { + ...boardsConfig.selectedBoard, + name: boardsConfig.selectedBoard?.name || '', + fqbn, + } const verbose = this.preferences.get('arduino.compile.verbose'); const compilerWarnings = this.preferences.get('arduino.compile.warnings'); this.outputChannelManager.getChannel('Arduino').clear(); await this.coreService.compile({ sketchUri: sketch.uri, - fqbn, + board, optimizeForDebug: this.editorMode.compileForDebug, verbose, exportBinaries, diff --git a/arduino-ide-extension/src/browser/dialogs/firmware-uploader/firmware-uploader-component.tsx b/arduino-ide-extension/src/browser/dialogs/firmware-uploader/firmware-uploader-component.tsx index 8e5c6d32..f892cc1b 100644 --- a/arduino-ide-extension/src/browser/dialogs/firmware-uploader/firmware-uploader-component.tsx +++ b/arduino-ide-extension/src/browser/dialogs/firmware-uploader/firmware-uploader-component.tsx @@ -1,5 +1,6 @@ import { nls } from '@theia/core/lib/common'; import * as React from 'react'; +import { Port } from '../../../common/protocol'; import { ArduinoFirmwareUploader, FirmwareInfo, @@ -20,7 +21,7 @@ export const FirmwareUploaderComponent = ({ availableBoards: AvailableBoard[]; firmwareUploader: ArduinoFirmwareUploader; updatableFqbns: string[]; - flashFirmware: (firmware: FirmwareInfo, port: string) => Promise; + flashFirmware: (firmware: FirmwareInfo, port: Port) => Promise; isOpen: any; }): React.ReactElement => { // boolean states for buttons @@ -81,7 +82,7 @@ export const FirmwareUploaderComponent = ({ const installStatus = !!firmwareToFlash && !!selectedBoard?.port && - (await flashFirmware(firmwareToFlash, selectedBoard?.port.address)); + (await flashFirmware(firmwareToFlash, selectedBoard?.port)); setInstallFeedback((installStatus && 'ok') || 'fail'); } catch { diff --git a/arduino-ide-extension/src/browser/dialogs/firmware-uploader/firmware-uploader-dialog.tsx b/arduino-ide-extension/src/browser/dialogs/firmware-uploader/firmware-uploader-dialog.tsx index 759757e3..e9f8149d 100644 --- a/arduino-ide-extension/src/browser/dialogs/firmware-uploader/firmware-uploader-dialog.tsx +++ b/arduino-ide-extension/src/browser/dialogs/firmware-uploader/firmware-uploader-dialog.tsx @@ -15,6 +15,7 @@ import { } from '../../../common/protocol/arduino-firmware-uploader'; import { FirmwareUploaderComponent } from './firmware-uploader-component'; import { UploadFirmware } from '../../contributions/upload-firmware'; +import { Port } from '../../../common/protocol'; @injectable() export class UploadFirmwareDialogWidget extends ReactWidget { @@ -49,7 +50,7 @@ export class UploadFirmwareDialogWidget extends ReactWidget { }); } - protected flashFirmware(firmware: FirmwareInfo, port: string): Promise { + protected flashFirmware(firmware: FirmwareInfo, port: Port): Promise { this.busyCallback(true); return this.arduinoFirmwareUploader .flash(firmware, port) diff --git a/arduino-ide-extension/src/common/protocol/arduino-firmware-uploader.ts b/arduino-ide-extension/src/common/protocol/arduino-firmware-uploader.ts index f1e2a439..3cf9437d 100644 --- a/arduino-ide-extension/src/common/protocol/arduino-firmware-uploader.ts +++ b/arduino-ide-extension/src/common/protocol/arduino-firmware-uploader.ts @@ -1,3 +1,5 @@ +import { Port } from "./boards-service"; + export const ArduinoFirmwareUploaderPath = '/services/arduino-firmware-uploader'; export const ArduinoFirmwareUploader = Symbol('ArduinoFirmwareUploader'); @@ -10,7 +12,7 @@ export type FirmwareInfo = { }; export interface ArduinoFirmwareUploader { list(fqbn?: string): Promise; - flash(firmware: FirmwareInfo, port: string): Promise; + flash(firmware: FirmwareInfo, port: Port): Promise; uploadCertificates(command: string): Promise; updatableBoards(): Promise; availableFirmwares(fqbn: string): Promise; diff --git a/arduino-ide-extension/src/node/arduino-firmware-uploader-impl.ts b/arduino-ide-extension/src/node/arduino-firmware-uploader-impl.ts index d4150ea7..4e5eaa84 100644 --- a/arduino-ide-extension/src/node/arduino-firmware-uploader-impl.ts +++ b/arduino-ide-extension/src/node/arduino-firmware-uploader-impl.ts @@ -3,10 +3,10 @@ import { FirmwareInfo, } from '../common/protocol/arduino-firmware-uploader'; import { injectable, inject, named } from 'inversify'; -import { ExecutableService } from '../common/protocol'; -import { SerialService } from '../common/protocol/serial-service'; +import { ExecutableService, Port } from '../common/protocol'; import { getExecPath, spawnCommand } from './exec-util'; import { ILogger } from '@theia/core/lib/common/logger'; +import { MonitorManager } from './monitor-manager'; @injectable() export class ArduinoFirmwareUploaderImpl implements ArduinoFirmwareUploader { @@ -19,8 +19,8 @@ export class ArduinoFirmwareUploaderImpl implements ArduinoFirmwareUploader { @named('fwuploader') protected readonly logger: ILogger; - @inject(SerialService) - protected readonly serialService: SerialService; + @inject(MonitorManager) + protected readonly monitorManager: MonitorManager; protected onError(error: any): void { this.logger.error(error); @@ -69,26 +69,28 @@ export class ArduinoFirmwareUploaderImpl implements ArduinoFirmwareUploader { return await this.list(fqbn); } - async flash(firmware: FirmwareInfo, port: string): Promise { + async flash(firmware: FirmwareInfo, port: Port): Promise { let output; + const board = { + name: firmware.board_name, + fqbn: firmware.board_fqbn, + } try { - this.serialService.uploadInProgress = true; - await this.serialService.disconnect(); + this.monitorManager.notifyUploadStarted(board, port); output = await this.runCommand([ 'firmware', 'flash', '--fqbn', firmware.board_fqbn, '--address', - port, + port.address, '--module', `${firmware.module}@${firmware.firmware_version}`, ]); } catch (e) { throw e; } finally { - this.serialService.uploadInProgress = false; - this.serialService.connectSerialIfRequired(); + this.monitorManager.notifyUploadFinished(board, port); return output; } }