Skip to content

Commit 99e6071

Browse files
author
Alberto Iannaccone
committed
serial monitor read
1 parent 2389afd commit 99e6071

File tree

3 files changed

+51
-11
lines changed

3 files changed

+51
-11
lines changed

src/reader-writer.js

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ export default class ReaderWriter {
55
this.socket = null;
66
this.pluginURL = null;
77
this.messageSubject = new Subject();
8+
this.serialMonitorSubject = new Subject();
89
this.devicesList = {
910
serial: [],
1011
network: []
@@ -32,7 +33,6 @@ export default class ReaderWriter {
3233
else {
3334
this.devicesList.serial = devicesInfo.Ports;
3435
}
35-
console.log(this.devicesList);
3636
}
3737
}
3838

@@ -65,6 +65,7 @@ export default class ReaderWriter {
6565
this.openingSerial = new Promise((resolve, reject) => {
6666
checkOpen = message => {
6767
if (message.Cmd === 'Open') {
68+
this.readSerial();
6869
return resolve();
6970
}
7071
if (message.Cmd === 'OpenFail') {
@@ -89,6 +90,9 @@ export default class ReaderWriter {
8990
return Promise.reject(new Error('No board found'));
9091
}
9192
if (!serialPort.IsOpen) {
93+
if (!this.readSerialSubscription) {
94+
this.readSerialSubscription.unsubscribe();
95+
}
9296
return Promise.resolve();
9397
}
9498
let checkClosed = null;
@@ -109,4 +113,15 @@ export default class ReaderWriter {
109113
this.socket.emit('command', `close ${port}`);
110114
return this.closingSerial;
111115
}
116+
117+
readSerial() {
118+
const onMessage = message => {
119+
if (message.D) {
120+
this.serialMonitorSubject.next(message.D);
121+
}
122+
};
123+
if (!this.readSerialSubscription) {
124+
this.readSerialSubscription = this.messageSubject.subscribe(onMessage);
125+
}
126+
}
112127
}

test/app.jsx

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,10 @@ import React from 'react';
22
import Daemon from '../src';
33
import { WS_STATUS_CONNECTED, AGENT_STATUS_FOUND } from '../src/socket-daemon';
44

5-
const handleOpen = (e, port) => {
6-
e.preventDefault();
7-
Daemon.readerWriter.openSerialMonitor(port);
8-
};
9-
10-
const handleClose = (e, port) => {
11-
e.preventDefault();
12-
Daemon.readerWriter.closeSerialMonitor(port);
5+
const scrollToBottom = (target) => {
6+
if (target) {
7+
target.scrollTop = target.scrollHeight; // eslint-disable-line no-param-reassign
8+
}
139
};
1410

1511
class App extends React.Component {
@@ -21,9 +17,13 @@ class App extends React.Component {
2117
wsStatus: '-',
2218
serialDevices: [],
2319
networkDevices: [],
24-
agentInfo: ''
20+
agentInfo: '',
21+
serialMonitorContent: ''
2522
};
23+
2624
this.connect = this.connect.bind(this);
25+
this.handleOpen = this.handleOpen.bind(this);
26+
this.handleClose = this.handleClose.bind(this);
2727
}
2828

2929
componentDidMount() {
@@ -46,6 +46,12 @@ class App extends React.Component {
4646
networkDevices: Daemon.readerWriter.devicesList.network
4747
});
4848
});
49+
50+
const serialTextarea = document.getElementById('serial-textarea');
51+
Daemon.readerWriter.serialMonitorSubject.subscribe(message => {
52+
this.setState({ serialMonitorContent: this.state.serialMonitorContent + message });
53+
scrollToBottom(serialTextarea);
54+
});
4955
}
5056

5157
showError(err) {
@@ -62,8 +68,19 @@ class App extends React.Component {
6268
.catch(this.showError);
6369
}
6470

71+
handleOpen(e, port) {
72+
this.setState({ serialMonitorContent: '' });
73+
e.preventDefault();
74+
Daemon.readerWriter.openSerialMonitor(port);
75+
}
76+
77+
handleClose(e, port) {
78+
e.preventDefault();
79+
Daemon.readerWriter.closeSerialMonitor(port);
80+
}
81+
6582
render() {
66-
const listSerialDevices = this.state.serialDevices.map((device, i) => (<li key={i}>{device.Name} - IsOpen: {device.IsOpen ? 'true' : 'false'} - <a href="#" onClick={(e) => handleOpen(e, device.Name)}>open</a> - <a href="#" onClick={(e) => handleClose(e, device.Name)}>close</a></li>));
83+
const listSerialDevices = this.state.serialDevices.map((device, i) => (<li key={i}>{device.Name} - IsOpen: {device.IsOpen ? 'true' : 'false'} - <a href="#" onClick={(e) => this.handleOpen(e, device.Name)}>open</a> - <a href="#" onClick={(e) => this.handleClose(e, device.Name)}>close</a></li>));
6784
const listNetworkDevices = this.state.networkDevices.map((device, i) => <li key={i}>{device.Name}</li>);
6885

6986
return (
@@ -91,6 +108,10 @@ class App extends React.Component {
91108
<p id="error"></p>
92109
</div>
93110
<button id="connect" onClick={ this.connect }>Connect</button>
111+
<div className="serial-monitor">
112+
<h2>Serial Monitor</h2>
113+
<textarea id="serial-textarea" value={ this.state.serialMonitorContent }/>
114+
</div>
94115
</div>
95116
);
96117
}

test/index.html

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@
2020
pre {
2121
background: #f9f9f9;
2222
}
23+
24+
#serial-textarea {
25+
height: 300px;
26+
}
2327
</style>
2428
</head>
2529
<body>

0 commit comments

Comments
 (0)