|
36 | 36 |
|
37 | 37 | var serialPort;
|
38 | 38 | var serialPortReader;
|
39 |
| - var connectionDisconnectCallback; |
40 | 39 |
|
41 | 40 | function init() {
|
42 | 41 | Espruino.Core.Config.add("WEB_SERIAL", {
|
|
101 | 100 | Espruino.Core.Status.setStatus("Connecting to serial port");
|
102 | 101 | serialPort = port;
|
103 | 102 | var br = parseInt(Espruino.Config.BAUD_RATE);
|
104 |
| - return port.open({ |
105 |
| - baudrate: br/*old*/, |
| 103 | + return port.open({ |
| 104 | + baudrate: br/*old*/, |
106 | 105 | baudRate: br/*new*/,
|
107 | 106 | dataBits: 8, databits: 8,
|
108 | 107 | stopBits: 1, stopbits: 8,
|
|
114 | 113 | serialPortReader = serialPort.readable.getReader();
|
115 | 114 | serialPortReader.read().then(function ({ value, done }) {
|
116 | 115 | serialPortReader.releaseLock();
|
| 116 | + serialPortReader = undefined; |
117 | 117 | if (value) {
|
118 | 118 | receiveCallback(value.buffer);
|
119 | 119 | }
|
120 | 120 | if (done) {
|
121 |
| - disconnectCallback(); |
| 121 | + console.log("Serial> serialPortReader done"); |
| 122 | + if (serialPort) { |
| 123 | + console.log("Serial> serialPort.close()"); |
| 124 | + serialPort.close(); |
| 125 | + serialPort = undefined; |
| 126 | + if (disconnectCallback) disconnectCallback(); |
| 127 | + disconnectCallback = undefined; |
| 128 | + } |
122 | 129 | } else {
|
123 | 130 | readLoop();
|
124 | 131 | }
|
125 |
| - }).catch(function() { |
126 |
| - serialPortReader.releaseLock(); |
127 |
| - console.log("Serial> serialPortReader cancelled"); |
| 132 | + }).catch(function(e) { |
| 133 | + serialPortReader.releaseLock(); |
| 134 | + console.log("Serial> serialPortReader rejected", e); |
128 | 135 | });
|
129 | 136 | }
|
130 | 137 | serialPort.addEventListener("disconnect", (event) => {
|
131 |
| - console.log("Serial> Port disconnected"); |
132 |
| - disconnectCallback(); |
| 138 | + console.log("Serial> Port disconnected", event); |
| 139 | + if (serialPort) { |
| 140 | + serialPort.close(); |
| 141 | + serialPort = undefined; |
| 142 | + } |
| 143 | + if (disconnectCallback) disconnectCallback(); |
| 144 | + disconnectCallback = undefined; |
133 | 145 | });
|
134 | 146 | readLoop();
|
135 | 147 | Espruino.Core.Status.setStatus("Serial connected. Receiving data...");
|
|
139 | 151 | openCallback({ portName : getSerialDeviceInfo(serialPort).path });
|
140 | 152 | }).catch(function(error) {
|
141 | 153 | console.log('Serial> ERROR: ' + error);
|
142 |
| - disconnectCallback(); |
| 154 | + pairedDevices = pairedDevices.filter(dev=>getSerialDeviceInfo(dev).path != path); // error connecting, remove from paired devices |
| 155 | + if (disconnectCallback) disconnectCallback(); |
| 156 | + disconnectCallback = undefined; |
143 | 157 | });
|
144 | 158 | }
|
145 | 159 |
|
146 | 160 | function closeSerial() {
|
147 |
| - if (serialPort) { |
148 |
| - serialPortReader.cancel().then(function() { |
149 |
| - serialPort.close(); |
150 |
| - serialPort = undefined; |
151 |
| - serialPortReader = undefined; |
152 |
| - }); |
153 |
| - } |
154 |
| - if (connectionDisconnectCallback) { |
155 |
| - connectionDisconnectCallback(); |
156 |
| - connectionDisconnectCallback = undefined; |
157 |
| - } |
| 161 | + if (serialPortReader) |
| 162 | + serialPortReader.cancel(); |
| 163 | + /* serialPortReader will handle tidying up |
| 164 | + and calling disconnect */ |
158 | 165 | }
|
159 | 166 |
|
160 | 167 | function writeSerial(data, callback) {
|
|
166 | 173 | writer.releaseLock();
|
167 | 174 | console.log('Serial> SEND ERROR: ' + error);
|
168 | 175 | closeSerial();
|
169 |
| - }); |
| 176 | + }); |
170 | 177 | }
|
171 | 178 |
|
172 | 179 | // ----------------------------------------------------------
|
|
0 commit comments