diff --git a/demo/app.jsx b/demo/app.jsx
index b4c59b1e..536b016f 100644
--- a/demo/app.jsx
+++ b/demo/app.jsx
@@ -44,6 +44,11 @@ const handleUpload = () => {
daemon.uploadSerial(target, 'serial_mirror', { bin: HEX });
};
+const handleBootloaderMode = (e, port) => {
+ e.preventDefault();
+ daemon.setBootloaderMode(port);
+};
+
const handleDownloadTool = e => {
e.preventDefault();
const toolname = document.getElementById('toolname');
@@ -171,6 +176,8 @@ class App extends React.Component {
open
- this.handleClose(e, device.Name)}>
close
+ - handleBootloaderMode(e, device.Name)}>
+ bootloader mode
);
diff --git a/package-lock.json b/package-lock.json
index ea509188..3574eaf4 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "arduino-create-agent-js-client",
- "version": "2.1.9",
+ "version": "2.1.10",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
diff --git a/package.json b/package.json
index 9a5a69de..07f8713a 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "arduino-create-agent-js-client",
- "version": "2.1.9",
+ "version": "2.1.10",
"description": "JS module providing discovery of the Arduino Create Plugin and communication with it",
"main": "lib/index.js",
"module": "es/index.js",
diff --git a/src/daemon.js b/src/daemon.js
index 448d5521..4e4c508b 100644
--- a/src/daemon.js
+++ b/src/daemon.js
@@ -18,8 +18,12 @@
*
*/
-import { Subject, BehaviorSubject, interval } from 'rxjs';
-import { takeUntil, filter, startWith, first, distinctUntilChanged } from 'rxjs/operators';
+import {
+ Subject, BehaviorSubject, interval, timer
+} from 'rxjs';
+import {
+ takeUntil, filter, startWith, first, distinctUntilChanged
+} from 'rxjs/operators';
const POLLING_INTERVAL = 1500;
@@ -161,4 +165,16 @@ export default class Daemon {
throw new Error('Stop Upload not supported on Chrome OS');
}
}
+
+ /**
+ * Set the board in bootloader mode. This is needed to bo 100% sure to receive the correct vid/pid from the board.
+ * To do that we just touch the port at 1200 bps and then close it. The sketch on the board will be erased.
+ * @param {String} port the port name
+ */
+ setBootloaderMode(port) {
+ this.serialMonitorOpened.pipe(filter(open => open)).pipe(first()).subscribe(() => {
+ timer(1000).subscribe(() => this.closeSerialMonitor(port));
+ });
+ this.openSerialMonitor(port, 1200);
+ }
}