
* 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>
Arduino IDE Extension
Arduino IDE is based on Theia, and most of its IDE features, UIs and customizations are implemented in this Theia extension.
IDE Services
IDE services typically have a backend part in src/node/ and a front-end part in src/browser/.
Boards Service
The Boards Service continuously checks the computer's ports, in order to detect when you connect or disconnect an Arduino board.
The Boards Manager lists all the known board types, and allows downloading new cores to get additional board types.
- src/common/protocol/boards-service.ts implements the common classes and interfaces
- src/node/boards-service-impl.ts implements the service backend:
- discovering ports & boards
- searching for compatible board types
- installing new board types
- src/browser/boards/boards-list-widget.ts implements the Boards Manager front-end:
- browsing/searching available board types
- installing new board types
Core Service
The Core Service is responsible for building your sketches and uploading them to a board.
- src/common/protocol/core-service.ts implements the common classes and interfaces
- src/node/core-service-impl.ts implements the service backend:
- compiling a sketch for a selected board type
- uploading a sketch to a connected board
Serial Service
The Serial Service allows getting information back from sketches running on your Arduino boards.
- src/common/protocol/serial-service.ts implements the common classes and interfaces
- src/node/serial/serial-service-impl.ts implements the service backend:
- connecting to / disconnecting from a board
- receiving and sending data
- src/browser/serial/serial-connection-manager.ts handles the serial connection in the frontend
- src/browser/serial/monitor/monitor-widget.tsx implements the serial monitor front-end:
- viewing the output from a connected board
- entering data to send to the board
- src/browser/serial/plotter/plotter-frontend-contribution.ts implements the serial plotter front-end:
- opening a new window running the Serial Plotter Web App
Config Service
The Config Service knows about your system, like for example the default sketch locations.
- src/common/protocol/config-service.ts implements the common classes and interfaces
- src/node/config-service-impl.ts implements the service backend:
- getting the
arduino-cli
version and configuration - checking whether a file is in a data or sketch directory
- getting the
"arduino"
configuration in the package.json
:
"cli"
:"version"
typestring
|{ owner: string, repo: string, commitish?: string }
: if the type is astring
and is a valid semver, it will get the corresponding released CLI. If the type isstring
and is a date inYYYYMMDD
format, it will get a nightly CLI. If the type is an object, a CLI, build from the sources in theowner/repo
will be used. Ifcommitish
is not defined, the HEAD of the default branch will be used. In any other cases an error is thrown.
Rebuild gRPC protocol interfaces
- Some CLI updates can bring changes to the gRPC interfaces, as the API might change. gRPC interfaces can be updated running the command
yarn --cwd arduino-ide-extension generate-protocol
Customize Icons
ArduinoIde uses a customized version of FontAwesome. In order to update/replace icons follow the following steps:
- import the file
arduino-icons.json
in Icomoon - load it
- edit the icons as needed
- !! download the new
arduino-icons.json
file and put it in this repo - Click on "Generate Font" in Icomoon, then download
- place the updated fonts in the
src/style/fonts
directory