Skip to content

Commit f2d1c4e

Browse files
author
Alberto Iannaccone
committed
initialize serial monito web app
1 parent a89ed67 commit f2d1c4e

12 files changed

+192
-134
lines changed

arduino-ide-extension/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
"@theia/application-package": "1.18.0",
2323
"@theia/core": "1.18.0",
2424
"@theia/editor": "1.18.0",
25-
"@theia/editor-preview": "1.18.0",
25+
"@theia/editor-preview": "1.18.0",
2626
"@theia/filesystem": "1.18.0",
2727
"@theia/git": "1.18.0",
2828
"@theia/keymaps": "1.18.0",
@@ -77,6 +77,7 @@
7777
"open": "^8.0.6",
7878
"p-queue": "^5.0.0",
7979
"ps-tree": "^1.2.0",
80+
"query-string": "^7.0.1",
8081
"react-disable": "^0.1.0",
8182
"react-select": "^3.0.4",
8283
"react-tabs": "^3.1.2",

arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx

Lines changed: 0 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,13 @@ import {
33
MAIN_MENU_BAR,
44
MenuContribution,
55
MenuModelRegistry,
6-
SelectionService,
76
ILogger,
87
DisposableCollection,
98
} from '@theia/core';
109
import {
11-
ContextMenuRenderer,
1210
FrontendApplication,
1311
FrontendApplicationContribution,
1412
LocalStorageService,
15-
OpenerService,
1613
StatusBar,
1714
StatusBarAlignment,
1815
} from '@theia/core/lib/browser';
@@ -34,7 +31,6 @@ import {
3431
EditorManager,
3532
EditorOpenerOptions,
3633
} from '@theia/editor/lib/browser';
37-
import { FileDialogService } from '@theia/filesystem/lib/browser/file-dialog';
3834
import { ProblemContribution } from '@theia/markers/lib/browser/problem/problem-contribution';
3935
import { MonacoMenus } from '@theia/monaco/lib/browser/monaco-menu';
4036
import { FileNavigatorContribution } from '@theia/navigator/lib/browser/navigator-contribution';
@@ -46,33 +42,25 @@ import { TerminalMenus } from '@theia/terminal/lib/browser/terminal-frontend-con
4642
import { inject, injectable, postConstruct } from 'inversify';
4743
import * as React from 'react';
4844
import { remote } from 'electron';
49-
import { MainMenuManager } from '../common/main-menu-manager';
5045
import {
5146
BoardsService,
52-
CoreService,
5347
Port,
5448
SketchesService,
5549
ExecutableService,
5650
Sketch,
5751
} from '../common/protocol';
58-
import { ArduinoDaemon } from '../common/protocol/arduino-daemon';
5952
import { ConfigService } from '../common/protocol/config-service';
60-
import { FileSystemExt } from '../common/protocol/filesystem-ext';
6153
import { ArduinoCommands } from './arduino-commands';
6254
import { BoardsConfig } from './boards/boards-config';
6355
import { BoardsConfigDialog } from './boards/boards-config-dialog';
64-
import { BoardsDataStore } from './boards/boards-data-store';
6556
import { BoardsServiceProvider } from './boards/boards-service-provider';
6657
import { BoardsToolBarItem } from './boards/boards-toolbar-item';
6758
import { EditorMode } from './editor-mode';
6859
import { ArduinoMenus } from './menu/arduino-menus';
69-
import { MonitorConnection } from './monitor/monitor-connection';
7060
import { MonitorViewContribution } from './monitor/monitor-view-contribution';
71-
import { WorkspaceService } from './theia/workspace/workspace-service';
7261
import { ArduinoToolbar } from './toolbar/arduino-toolbar';
7362
import { HostedPluginSupport } from '@theia/plugin-ext/lib/hosted/browser/hosted-plugin';
7463
import { FileService } from '@theia/filesystem/lib/browser/file-service';
75-
import { ResponseService } from '../common/protocol/response-service';
7664
import { ArduinoPreferences } from './arduino-preferences';
7765
import { SketchesServiceClientImpl } from '../common/protocol/sketches-service-client-impl';
7866
import { SaveAsSketch } from './contributions/save-as-sketch';
@@ -100,24 +88,12 @@ export class ArduinoFrontendContribution
10088
@inject(BoardsService)
10189
protected readonly boardsService: BoardsService;
10290

103-
@inject(CoreService)
104-
protected readonly coreService: CoreService;
105-
10691
@inject(BoardsServiceProvider)
10792
protected readonly boardsServiceClientImpl: BoardsServiceProvider;
10893

109-
@inject(SelectionService)
110-
protected readonly selectionService: SelectionService;
111-
11294
@inject(EditorManager)
11395
protected readonly editorManager: EditorManager;
11496

115-
@inject(ContextMenuRenderer)
116-
protected readonly contextMenuRenderer: ContextMenuRenderer;
117-
118-
@inject(FileDialogService)
119-
protected readonly fileDialogService: FileDialogService;
120-
12197
@inject(FileService)
12298
protected readonly fileService: FileService;
12399

@@ -127,21 +103,12 @@ export class ArduinoFrontendContribution
127103
@inject(BoardsConfigDialog)
128104
protected readonly boardsConfigDialog: BoardsConfigDialog;
129105

130-
@inject(MenuModelRegistry)
131-
protected readonly menuRegistry: MenuModelRegistry;
132-
133106
@inject(CommandRegistry)
134107
protected readonly commandRegistry: CommandRegistry;
135108

136109
@inject(StatusBar)
137110
protected readonly statusBar: StatusBar;
138111

139-
@inject(WorkspaceService)
140-
protected readonly workspaceService: WorkspaceService;
141-
142-
@inject(MonitorConnection)
143-
protected readonly monitorConnection: MonitorConnection;
144-
145112
@inject(FileNavigatorContribution)
146113
protected readonly fileNavigatorContributions: FileNavigatorContribution;
147114

@@ -166,40 +133,21 @@ export class ArduinoFrontendContribution
166133
@inject(EditorMode)
167134
protected readonly editorMode: EditorMode;
168135

169-
@inject(ArduinoDaemon)
170-
protected readonly daemon: ArduinoDaemon;
171-
172-
@inject(OpenerService)
173-
protected readonly openerService: OpenerService;
174-
175136
@inject(ConfigService)
176137
protected readonly configService: ConfigService;
177138

178-
@inject(BoardsDataStore)
179-
protected readonly boardsDataStore: BoardsDataStore;
180-
181-
@inject(MainMenuManager)
182-
protected readonly mainMenuManager: MainMenuManager;
183-
184-
@inject(FileSystemExt)
185-
protected readonly fileSystemExt: FileSystemExt;
186-
187139
@inject(HostedPluginSupport)
188140
protected hostedPluginSupport: HostedPluginSupport;
189141

190142
@inject(ExecutableService)
191143
protected executableService: ExecutableService;
192144

193-
@inject(ResponseService)
194-
protected readonly responseService: ResponseService;
195-
196145
@inject(ArduinoPreferences)
197146
protected readonly arduinoPreferences: ArduinoPreferences;
198147

199148
@inject(SketchesServiceClientImpl)
200149
protected readonly sketchServiceClient: SketchesServiceClientImpl;
201150

202-
@inject(FrontendApplicationStateService)
203151
protected readonly appStateService: FrontendApplicationStateService;
204152

205153
@inject(LocalStorageService)

arduino-ide-extension/src/browser/arduino-ide-frontend-module.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,11 @@ import {
253253
UploadCertificateDialogProps,
254254
UploadCertificateDialogWidget,
255255
} from './dialogs/certificate-uploader/certificate-uploader-dialog';
256-
import { PlotterContribution } from './plotter/plotter-contribution';
256+
import { PlotterFrontendContribution } from './plotter/plotter-frontend-contribution';
257+
import {
258+
PlotterPath,
259+
PlotterService,
260+
} from '../common/protocol/plotter-service';
257261

258262
const ElementQueries = require('css-element-queries/src/ElementQueries');
259263

@@ -597,7 +601,7 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => {
597601
Contribution.configure(bind, AddFile);
598602
Contribution.configure(bind, ArchiveSketch);
599603
Contribution.configure(bind, AddZipLibrary);
600-
Contribution.configure(bind, PlotterContribution);
604+
Contribution.configure(bind, PlotterFrontendContribution);
601605

602606
bind(ResponseServiceImpl)
603607
.toSelf()
@@ -737,4 +741,9 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => {
737741
bind(UploadCertificateDialogProps).toConstantValue({
738742
title: 'UploadCertificate',
739743
});
744+
bind(PlotterService)
745+
.toDynamicValue((ctx) =>
746+
ctx.container.get(WebSocketConnectionProvider).createProxy(PlotterPath)
747+
)
748+
.inSingletonScope();
740749
});

arduino-ide-extension/src/browser/plotter/plotter-contribution.ts

Lines changed: 0 additions & 69 deletions
This file was deleted.
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
import { injectable, inject } from 'inversify';
2+
import {
3+
Command,
4+
CommandRegistry,
5+
MaybePromise,
6+
MenuModelRegistry,
7+
} from '@theia/core';
8+
import { MonitorModel } from '../monitor/monitor-model';
9+
import { ArduinoMenus } from '../menu/arduino-menus';
10+
import { Contribution } from '../contributions/contribution';
11+
import { PlotterService } from '../../common/protocol/plotter-service';
12+
import { Endpoint, FrontendApplication } from '@theia/core/lib/browser';
13+
import { ipcRenderer } from '@theia/core/shared/electron';
14+
import { SerialPlotter } from './protocol';
15+
import { MonitorConfig } from '../../common/protocol';
16+
const queryString = require('query-string');
17+
18+
export namespace SerialPlotterContribution {
19+
export namespace Commands {
20+
export const OPEN: Command = {
21+
id: 'serial-plotter-open',
22+
label: 'Serial Plotter',
23+
category: 'Arduino',
24+
};
25+
}
26+
}
27+
28+
@injectable()
29+
export class PlotterFrontendContribution extends Contribution {
30+
protected window: Window | null;
31+
protected url: string;
32+
protected initConfig: SerialPlotter.Config;
33+
34+
@inject(MonitorModel)
35+
protected readonly model: MonitorModel;
36+
37+
@inject(PlotterService)
38+
protected readonly plotter: PlotterService;
39+
40+
onStart(app: FrontendApplication): MaybePromise<void> {
41+
this.url = new Endpoint({ path: '/plotter' }).getRestUrl().toString();
42+
43+
this.initConfig = {
44+
baudrates: MonitorConfig.BaudRates.map((b) => b),
45+
currentBaudrate: this.model.baudRate,
46+
darkTheme: true,
47+
wsPort: 0,
48+
generate: true,
49+
};
50+
51+
ipcRenderer.on('CLOSE_CHILD_WINDOW', () => {
52+
if (this.window) {
53+
if (!this.window.closed) this.window?.close();
54+
this.window = null;
55+
}
56+
});
57+
58+
return super.onStart(app);
59+
}
60+
61+
registerCommands(registry: CommandRegistry): void {
62+
registry.registerCommand(SerialPlotterContribution.Commands.OPEN, {
63+
execute: async () => this.open(),
64+
});
65+
}
66+
67+
registerMenus(menus: MenuModelRegistry): void {
68+
menus.registerMenuAction(ArduinoMenus.TOOLS__MAIN_GROUP, {
69+
commandId: SerialPlotterContribution.Commands.OPEN.id,
70+
label: SerialPlotterContribution.Commands.OPEN.label,
71+
order: '7',
72+
});
73+
}
74+
75+
protected async open(): Promise<void> {
76+
if (this.window) {
77+
this.window.focus();
78+
} else {
79+
const urlWithParams = queryString.stringifyUrl(
80+
{
81+
url: this.url,
82+
query: this.initConfig,
83+
},
84+
{ arrayFormat: 'comma' }
85+
);
86+
this.window = window.open(urlWithParams, 'serialPlotter');
87+
}
88+
}
89+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
export namespace SerialPlotter {
2+
export type Config = {
3+
currentBaudrate: number;
4+
baudrates: number[];
5+
darkTheme: boolean;
6+
wsPort: number;
7+
generate: boolean;
8+
};
9+
export namespace Protocol {
10+
export enum Command {
11+
PLOTTER_REQUEST_CONFIG = 'PLOTTER_REQUEST_CONFIG',
12+
PLOTTER_READY = 'PLOTTER_READY',
13+
PLOTTER_SET_BAUDRATE = 'PLOTTER_SET_BAUDRATE',
14+
PLOTTER_SET_LINE_ENDING = 'PLOTTER_SET_LINE_ENDING',
15+
PLOTTER_SEND_MESSAGE = 'PLOTTER_SEND_MESSAGE',
16+
PARENT_SET_CONFIG = 'PARENT_SET_CONFIG',
17+
}
18+
export type Message = {
19+
command: SerialPlotter.Protocol.Command;
20+
data?: any;
21+
};
22+
}
23+
}

0 commit comments

Comments
 (0)