mirror of
https://github.com/arduino/arduino-ide.git
synced 2025-05-14 17:08:42 +00:00

* backend structure WIP * Scaffold interfaces and classes for pluggable monitors * Implement MonitorService to handle pluggable monitor lifetime * Rename WebSocketService to WebSocketProvider and uninjected it * Moved some interfaces * Changed upload settings * Enhance MonitorManager APIs * Fixed WebSocketChange event signature * Add monitor proxy functions for the frontend * Moved settings to MonitorService * Remove several unnecessary serial monitor classes * Changed how connection is handled on upload * Proxied more monitor methods to frontend * WebSocketProvider is not injectable anymore * Add generic monitor settings storaging * More serial classes removal * Remove unused file * Changed plotter contribution to use new manager proxy * Changed MonitorWidget and children to use new monitor proxy * Updated MonitorWidget to use new monitor proxy * Fix backend logger bindings * Delete unnecessary Symbol * coreClientProvider is now set when constructing MonitorService * Add missing binding * Fix `MonitorManagerProxy` DI issue * fix monitor connection * delete duplex when connection is closed * update arduino-cli to 0.22.0 * fix upload when monitor is open * add MonitorSettingsProvider interface * monitor settings provider stub * updated pseudo code * refactor monitor settings interfaces * monitor service provider singleton * add unit tests * change MonitorService providers to injectable deps * fix monitor settings client communication * refactor monitor commands protocol * use monitor settings provider properly * add settings to monitor model * add settings to monitor model * reset serial monitor when port changes * fix serial plotter opening * refine monitor connection settings * fix hanging web socket connections * add serial plotter reset command * send port to web socket clients * monitor service wait for success serial port open * fix reset loop * update serial plotter version * update arduino-cli version to 0.23.0-rc1 and regenerate grpc protocol * remove useless plotter protocol file * localize web socket errors * clean-up code * update translation file * Fix duplicated editor tabs (#1012) * Save dialog for closing temporary sketch and unsaved files (#893) * Use normal `OnWillStop` event * Align `CLOSE` command to rest of app * Fixed FS path vs encoded URL comparision when handling stop request. Ref: https://github.com/eclipse-theia/theia/issues/11226 Signed-off-by: Akos Kitta <a.kitta@arduino.cc> * Fixed the translations. Signed-off-by: Akos Kitta <a.kitta@arduino.cc> * Fixed the translations again. Removed `electron` from the `nls-extract`. It does not contain app code. Signed-off-by: Akos Kitta <a.kitta@arduino.cc> * Aligned the stop handler code to Theia. Signed-off-by: Akos Kitta <a.kitta@arduino.cc> Co-authored-by: Akos Kitta <a.kitta@arduino.cc> * fix serial monitor send line ending * refactor monitor-service poll for test/readability * localize web socket errors * update translation file * Fix duplicated editor tabs (#1012) * i18n:check rerun * Speed up IDE startup time. Signed-off-by: Akos Kitta <a.kitta@arduino.cc> * override coreClientProvider in monitor-service * cleanup merged code Co-authored-by: Francesco Stasi <f.stasi@me.com> Co-authored-by: Silvano Cerza <silvanocerza@gmail.com> Co-authored-by: Mark Sujew <mark.sujew@typefox.io> Co-authored-by: David Simpson <45690499+davegarthsimpson@users.noreply.github.com> Co-authored-by: Akos Kitta <a.kitta@arduino.cc>
96 lines
3.1 KiB
TypeScript
96 lines
3.1 KiB
TypeScript
import { Event, JsonRpcServer } from '@theia/core';
|
|
import {
|
|
PluggableMonitorSettings,
|
|
MonitorSettings,
|
|
} from '../../node/monitor-settings/monitor-settings-provider';
|
|
import { Board, Port } from './boards-service';
|
|
|
|
export const MonitorManagerProxyFactory = Symbol('MonitorManagerProxyFactory');
|
|
export type MonitorManagerProxyFactory = () => MonitorManagerProxy;
|
|
|
|
export const MonitorManagerProxyPath = '/services/monitor-manager-proxy';
|
|
export const MonitorManagerProxy = Symbol('MonitorManagerProxy');
|
|
export interface MonitorManagerProxy
|
|
extends JsonRpcServer<MonitorManagerProxyClient> {
|
|
startMonitor(
|
|
board: Board,
|
|
port: Port,
|
|
settings?: PluggableMonitorSettings
|
|
): Promise<void>;
|
|
changeMonitorSettings(
|
|
board: Board,
|
|
port: Port,
|
|
settings: MonitorSettings
|
|
): Promise<void>;
|
|
stopMonitor(board: Board, port: Port): Promise<void>;
|
|
getCurrentSettings(board: Board, port: Port): Promise<MonitorSettings>;
|
|
}
|
|
|
|
export const MonitorManagerProxyClient = Symbol('MonitorManagerProxyClient');
|
|
export interface MonitorManagerProxyClient {
|
|
onMessagesReceived: Event<{ messages: string[] }>;
|
|
onMonitorSettingsDidChange: Event<MonitorSettings>;
|
|
onMonitorShouldReset: Event<void>;
|
|
connect(addressPort: number): void;
|
|
disconnect(): void;
|
|
getWebSocketPort(): number | undefined;
|
|
isWSConnected(): Promise<boolean>;
|
|
startMonitor(settings?: PluggableMonitorSettings): Promise<void>;
|
|
getCurrentSettings(board: Board, port: Port): Promise<MonitorSettings>;
|
|
send(message: string): void;
|
|
changeSettings(settings: MonitorSettings): void;
|
|
}
|
|
|
|
export interface PluggableMonitorSetting {
|
|
// The setting identifier
|
|
readonly id: string;
|
|
// A human-readable label of the setting (to be displayed on the GUI)
|
|
readonly label: string;
|
|
// The setting type (at the moment only "enum" is avaiable)
|
|
readonly type: string;
|
|
// The values allowed on "enum" types
|
|
readonly values: string[];
|
|
// The selected value
|
|
selectedValue: string;
|
|
}
|
|
|
|
export namespace Monitor {
|
|
// Commands sent by the clients to the web socket server
|
|
export enum ClientCommand {
|
|
SEND_MESSAGE = 'SEND_MESSAGE',
|
|
CHANGE_SETTINGS = 'CHANGE_SETTINGS',
|
|
}
|
|
|
|
// Commands sent by the backend to the clients
|
|
export enum MiddlewareCommand {
|
|
ON_SETTINGS_DID_CHANGE = 'ON_SETTINGS_DID_CHANGE',
|
|
}
|
|
|
|
export type Message = {
|
|
command: Monitor.ClientCommand | Monitor.MiddlewareCommand;
|
|
data: string | MonitorSettings;
|
|
};
|
|
}
|
|
|
|
export interface Status {}
|
|
export type OK = Status;
|
|
export interface ErrorStatus extends Status {
|
|
readonly message: string;
|
|
}
|
|
export namespace Status {
|
|
export function isOK(status: Status & { message?: string }): status is OK {
|
|
return !!status && typeof status.message !== 'string';
|
|
}
|
|
export const OK: OK = {};
|
|
export const NOT_CONNECTED: ErrorStatus = { message: 'Not connected.' };
|
|
export const ALREADY_CONNECTED: ErrorStatus = {
|
|
message: 'Already connected.',
|
|
};
|
|
export const CONFIG_MISSING: ErrorStatus = {
|
|
message: 'Serial Config missing.',
|
|
};
|
|
export const UPLOAD_IN_PROGRESS: ErrorStatus = {
|
|
message: 'Upload in progress.',
|
|
};
|
|
}
|