Changed how connection is handled on upload

This commit is contained in:
Silvano Cerza 2022-03-10 16:07:10 +01:00 committed by Alberto Iannaccone
parent 9058abb015
commit ee265aec90
7 changed files with 26 additions and 26 deletions

View File

@ -3,7 +3,6 @@ import { OutputChannelManager } from '@theia/output/lib/browser/output-channel';
import { CoreService } from '../../common/protocol'; import { CoreService } from '../../common/protocol';
import { ArduinoMenus } from '../menu/arduino-menus'; import { ArduinoMenus } from '../menu/arduino-menus';
import { BoardsDataStore } from '../boards/boards-data-store'; import { BoardsDataStore } from '../boards/boards-data-store';
import { SerialConnectionManager } from '../serial/serial-connection-manager';
import { BoardsServiceProvider } from '../boards/boards-service-provider'; import { BoardsServiceProvider } from '../boards/boards-service-provider';
import { import {
SketchContribution, SketchContribution,
@ -18,8 +17,6 @@ export class BurnBootloader extends SketchContribution {
@inject(CoreService) @inject(CoreService)
protected readonly coreService: CoreService; protected readonly coreService: CoreService;
@inject(SerialConnectionManager)
protected readonly serialConnection: SerialConnectionManager;
@inject(BoardsDataStore) @inject(BoardsDataStore)
protected readonly boardsDataStore: BoardsDataStore; protected readonly boardsDataStore: BoardsDataStore;
@ -91,8 +88,6 @@ export class BurnBootloader extends SketchContribution {
errorMessage = e.toString(); errorMessage = e.toString();
} }
this.messageService.error(errorMessage); this.messageService.error(errorMessage);
} finally {
await this.serialConnection.reconnectAfterUpload();
} }
} }
} }

View File

@ -4,7 +4,6 @@ import { BoardUserField, CoreService } from '../../common/protocol';
import { ArduinoMenus, PlaceholderMenuNode } from '../menu/arduino-menus'; import { ArduinoMenus, PlaceholderMenuNode } from '../menu/arduino-menus';
import { ArduinoToolbar } from '../toolbar/arduino-toolbar'; import { ArduinoToolbar } from '../toolbar/arduino-toolbar';
import { BoardsDataStore } from '../boards/boards-data-store'; import { BoardsDataStore } from '../boards/boards-data-store';
import { SerialConnectionManager } from '../serial/serial-connection-manager';
import { BoardsServiceProvider } from '../boards/boards-service-provider'; import { BoardsServiceProvider } from '../boards/boards-service-provider';
import { import {
SketchContribution, SketchContribution,
@ -22,9 +21,6 @@ export class UploadSketch extends SketchContribution {
@inject(CoreService) @inject(CoreService)
protected readonly coreService: CoreService; protected readonly coreService: CoreService;
@inject(SerialConnectionManager)
protected readonly serialConnection: SerialConnectionManager;
@inject(MenuModelRegistry) @inject(MenuModelRegistry)
protected readonly menuRegistry: MenuModelRegistry; protected readonly menuRegistry: MenuModelRegistry;
@ -294,8 +290,6 @@ export class UploadSketch extends SketchContribution {
} finally { } finally {
this.uploadInProgress = false; this.uploadInProgress = false;
this.onDidChangeEmitter.fire(); this.onDidChangeEmitter.fire();
setTimeout(() => this.serialConnection.reconnectAfterUpload(), 5000);
} }
} }
} }

View File

@ -110,12 +110,17 @@ export class VerifySketch extends SketchContribution {
), ),
this.sourceOverride(), this.sourceOverride(),
]); ]);
const board = {
...boardsConfig.selectedBoard,
name: boardsConfig.selectedBoard?.name || '',
fqbn,
}
const verbose = this.preferences.get('arduino.compile.verbose'); const verbose = this.preferences.get('arduino.compile.verbose');
const compilerWarnings = this.preferences.get('arduino.compile.warnings'); const compilerWarnings = this.preferences.get('arduino.compile.warnings');
this.outputChannelManager.getChannel('Arduino').clear(); this.outputChannelManager.getChannel('Arduino').clear();
await this.coreService.compile({ await this.coreService.compile({
sketchUri: sketch.uri, sketchUri: sketch.uri,
fqbn, board,
optimizeForDebug: this.editorMode.compileForDebug, optimizeForDebug: this.editorMode.compileForDebug,
verbose, verbose,
exportBinaries, exportBinaries,

View File

@ -1,5 +1,6 @@
import { nls } from '@theia/core/lib/common'; import { nls } from '@theia/core/lib/common';
import * as React from 'react'; import * as React from 'react';
import { Port } from '../../../common/protocol';
import { import {
ArduinoFirmwareUploader, ArduinoFirmwareUploader,
FirmwareInfo, FirmwareInfo,
@ -20,7 +21,7 @@ export const FirmwareUploaderComponent = ({
availableBoards: AvailableBoard[]; availableBoards: AvailableBoard[];
firmwareUploader: ArduinoFirmwareUploader; firmwareUploader: ArduinoFirmwareUploader;
updatableFqbns: string[]; updatableFqbns: string[];
flashFirmware: (firmware: FirmwareInfo, port: string) => Promise<any>; flashFirmware: (firmware: FirmwareInfo, port: Port) => Promise<any>;
isOpen: any; isOpen: any;
}): React.ReactElement => { }): React.ReactElement => {
// boolean states for buttons // boolean states for buttons
@ -81,7 +82,7 @@ export const FirmwareUploaderComponent = ({
const installStatus = const installStatus =
!!firmwareToFlash && !!firmwareToFlash &&
!!selectedBoard?.port && !!selectedBoard?.port &&
(await flashFirmware(firmwareToFlash, selectedBoard?.port.address)); (await flashFirmware(firmwareToFlash, selectedBoard?.port));
setInstallFeedback((installStatus && 'ok') || 'fail'); setInstallFeedback((installStatus && 'ok') || 'fail');
} catch { } catch {

View File

@ -15,6 +15,7 @@ import {
} from '../../../common/protocol/arduino-firmware-uploader'; } from '../../../common/protocol/arduino-firmware-uploader';
import { FirmwareUploaderComponent } from './firmware-uploader-component'; import { FirmwareUploaderComponent } from './firmware-uploader-component';
import { UploadFirmware } from '../../contributions/upload-firmware'; import { UploadFirmware } from '../../contributions/upload-firmware';
import { Port } from '../../../common/protocol';
@injectable() @injectable()
export class UploadFirmwareDialogWidget extends ReactWidget { export class UploadFirmwareDialogWidget extends ReactWidget {
@ -49,7 +50,7 @@ export class UploadFirmwareDialogWidget extends ReactWidget {
}); });
} }
protected flashFirmware(firmware: FirmwareInfo, port: string): Promise<any> { protected flashFirmware(firmware: FirmwareInfo, port: Port): Promise<any> {
this.busyCallback(true); this.busyCallback(true);
return this.arduinoFirmwareUploader return this.arduinoFirmwareUploader
.flash(firmware, port) .flash(firmware, port)

View File

@ -1,3 +1,5 @@
import { Port } from "./boards-service";
export const ArduinoFirmwareUploaderPath = export const ArduinoFirmwareUploaderPath =
'/services/arduino-firmware-uploader'; '/services/arduino-firmware-uploader';
export const ArduinoFirmwareUploader = Symbol('ArduinoFirmwareUploader'); export const ArduinoFirmwareUploader = Symbol('ArduinoFirmwareUploader');
@ -10,7 +12,7 @@ export type FirmwareInfo = {
}; };
export interface ArduinoFirmwareUploader { export interface ArduinoFirmwareUploader {
list(fqbn?: string): Promise<FirmwareInfo[]>; list(fqbn?: string): Promise<FirmwareInfo[]>;
flash(firmware: FirmwareInfo, port: string): Promise<string>; flash(firmware: FirmwareInfo, port: Port): Promise<string>;
uploadCertificates(command: string): Promise<any>; uploadCertificates(command: string): Promise<any>;
updatableBoards(): Promise<string[]>; updatableBoards(): Promise<string[]>;
availableFirmwares(fqbn: string): Promise<FirmwareInfo[]>; availableFirmwares(fqbn: string): Promise<FirmwareInfo[]>;

View File

@ -3,10 +3,10 @@ import {
FirmwareInfo, FirmwareInfo,
} from '../common/protocol/arduino-firmware-uploader'; } from '../common/protocol/arduino-firmware-uploader';
import { injectable, inject, named } from 'inversify'; import { injectable, inject, named } from 'inversify';
import { ExecutableService } from '../common/protocol'; import { ExecutableService, Port } from '../common/protocol';
import { SerialService } from '../common/protocol/serial-service';
import { getExecPath, spawnCommand } from './exec-util'; import { getExecPath, spawnCommand } from './exec-util';
import { ILogger } from '@theia/core/lib/common/logger'; import { ILogger } from '@theia/core/lib/common/logger';
import { MonitorManager } from './monitor-manager';
@injectable() @injectable()
export class ArduinoFirmwareUploaderImpl implements ArduinoFirmwareUploader { export class ArduinoFirmwareUploaderImpl implements ArduinoFirmwareUploader {
@ -19,8 +19,8 @@ export class ArduinoFirmwareUploaderImpl implements ArduinoFirmwareUploader {
@named('fwuploader') @named('fwuploader')
protected readonly logger: ILogger; protected readonly logger: ILogger;
@inject(SerialService) @inject(MonitorManager)
protected readonly serialService: SerialService; protected readonly monitorManager: MonitorManager;
protected onError(error: any): void { protected onError(error: any): void {
this.logger.error(error); this.logger.error(error);
@ -69,26 +69,28 @@ export class ArduinoFirmwareUploaderImpl implements ArduinoFirmwareUploader {
return await this.list(fqbn); return await this.list(fqbn);
} }
async flash(firmware: FirmwareInfo, port: string): Promise<string> { async flash(firmware: FirmwareInfo, port: Port): Promise<string> {
let output; let output;
const board = {
name: firmware.board_name,
fqbn: firmware.board_fqbn,
}
try { try {
this.serialService.uploadInProgress = true; this.monitorManager.notifyUploadStarted(board, port);
await this.serialService.disconnect();
output = await this.runCommand([ output = await this.runCommand([
'firmware', 'firmware',
'flash', 'flash',
'--fqbn', '--fqbn',
firmware.board_fqbn, firmware.board_fqbn,
'--address', '--address',
port, port.address,
'--module', '--module',
`${firmware.module}@${firmware.firmware_version}`, `${firmware.module}@${firmware.firmware_version}`,
]); ]);
} catch (e) { } catch (e) {
throw e; throw e;
} finally { } finally {
this.serialService.uploadInProgress = false; this.monitorManager.notifyUploadFinished(board, port);
this.serialService.connectSerialIfRequired();
return output; return output;
} }
} }