Skip to content

Commit d833d4b

Browse files
committed
rm packet from transport read
1 parent b90de18 commit d833d4b

File tree

5 files changed

+45
-53
lines changed

5 files changed

+45
-53
lines changed

src/esploader.ts

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ export interface LoaderOptions {
104104
* Flag indicating whether to enable SLIP read data formatting.
105105
* @type {boolean}
106106
*/
107-
enableSlipRead: boolean;
107+
enableSlipRead?: boolean;
108108

109109
/**
110110
* Reset functions for connection. If undefined will use default ones.
@@ -139,7 +139,7 @@ export interface LoaderOptions {
139139
* The Trace object to log all communication output.
140140
* @type {ITrace}
141141
*/
142-
tracer: ITrace;
142+
tracer?: ITrace;
143143

144144
/**
145145
* The transport mechanism to communicate with the device.
@@ -306,7 +306,7 @@ export class ESPLoader {
306306
* such as read/write flash memory and registers using a LoaderOptions object.
307307
* @param {LoaderOptions} options - LoaderOptions object argument for ESPLoader.
308308
* ```
309-
* const myLoader = new ESPLoader({ transport: Transport, baudrate: number, terminal?: IEspLoaderTerminal });
309+
* const myLoader = new ESPLoader({ transport: Transport, serialOptions: {baudrate: number}, terminal?: IEspLoaderTerminal });
310310
* ```
311311
*/
312312
constructor(options: LoaderOptions) {
@@ -618,7 +618,7 @@ export class ESPLoader {
618618
let i;
619619
let resp;
620620
this.info("Connecting...", false);
621-
await this.transport.connect({ baudRate: this.romBaudrate });
621+
await this.transport.connect(this.serialOptions);
622622
for (i = 0; i < attempts; i++) {
623623
resp = await this._connectAttempt(mode, false);
624624
if (resp === "success") {
@@ -1479,4 +1479,24 @@ export class ESPLoader {
14791479
await this.command(this.ESP_RUN_USER_CODE, undefined, undefined, false);
14801480
}
14811481
}
1482+
1483+
/**
1484+
* Send reset sequence to the device chip
1485+
*
1486+
* Commands (e.g. R0) are defined by a code (R) and an argument (0).
1487+
*
1488+
* The commands are:
1489+
*
1490+
* D: setDTR - 1=True / 0=False
1491+
*
1492+
* R: setRTS - 1=True / 0=False
1493+
*
1494+
* W: Wait (time delay) - positive integer number (miliseconds)
1495+
*
1496+
* "D0|R1|W100|D1|R0|W50|D0" represents the classic reset strategy
1497+
* @param {string} resetSequence String represetting the reset sequence
1498+
*/
1499+
async resetFromStrSequence(resetSequence: string) {
1500+
await this.resetFunctions.customReset(this.transport, resetSequence);
1501+
}
14821502
}

src/reset.ts

Lines changed: 6 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,8 @@ function sleep(ms: number): Promise<void> {
2828
* @param {ISerialTransport} transport Transport class to perform serial communication.
2929
* @param {number} resetDelay Delay in milliseconds for reset.
3030
*/
31-
export async function classicReset(transport: ISerialTransport, resetDelay = DEFAULT_RESET_DELAY) {
32-
await transport.setDTR(false);
33-
await transport.setRTS(true);
34-
await sleep(100);
35-
await transport.setDTR(true);
36-
await transport.setRTS(false);
37-
await sleep(resetDelay);
38-
await transport.setDTR(false);
31+
export async function classicReset(transport: ISerialTransport, resetDelay: number = DEFAULT_RESET_DELAY) {
32+
await customReset(transport, `D0|R1|W100|D1|R0|W${resetDelay}|D0`);
3933
}
4034

4135
/**
@@ -53,21 +47,7 @@ export async function classicReset(transport: ISerialTransport, resetDelay = DEF
5347
* @param {ISerialTransport} transport Transport class to perform serial communication.
5448
*/
5549
export async function usbJTAGSerialReset(transport: ISerialTransport) {
56-
await transport.setRTS(false);
57-
await transport.setDTR(false);
58-
await sleep(100);
59-
60-
await transport.setDTR(true);
61-
await transport.setRTS(false);
62-
await sleep(100);
63-
64-
await transport.setRTS(true);
65-
await transport.setDTR(false);
66-
await transport.setRTS(true);
67-
68-
await sleep(100);
69-
await transport.setRTS(false);
70-
await transport.setDTR(false);
50+
await customReset(transport, `R0|D0|W100|D1|R0|W100|R1|D0|R1|W100|R0|D0`);
7151
}
7252

7353
/**
@@ -85,16 +65,9 @@ export async function usbJTAGSerialReset(transport: ISerialTransport) {
8565
* @param {ISerialTransport} transport Transport class to perform serial communication.
8666
* @param {boolean} usingUsbOtg is it using USB-OTG ?
8767
*/
88-
export async function hardReset(transport: ISerialTransport, usingUsbOtg = false) {
89-
await transport.setRTS(true);
90-
if (usingUsbOtg) {
91-
await sleep(200);
92-
await transport.setRTS(false);
93-
await sleep(200);
94-
} else {
95-
await sleep(100);
96-
await transport.setRTS(false);
97-
}
68+
export async function hardReset(transport: ISerialTransport, usingUsbOtg: boolean = false) {
69+
const resetSequence = usingUsbOtg ? `R1|W200|R0|W200` : `R1|W100|R0`;
70+
await customReset(transport, resetSequence);
9871
}
9972

10073
type CmdsArgsTypes = {

src/transport/ITransport.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,9 @@ export interface ISerialTransport {
4343
* Read from serial device without formatting.
4444
* @param {number} timeout Read timeout in milliseconds (ms)
4545
* @param {number} minData Minimum packet array length
46-
* @param {Uint8Array} packet Unsigned 8 bit array from the device read stream.
4746
* @returns {Promise<Uint8Array>} 8 bit unsigned data array read from device.
4847
*/
49-
read(timeout?: number, minData?: number, packet?: Uint8Array): Promise<Uint8Array>;
48+
read(timeout?: number, minData?: number): Promise<Uint8Array>;
5049

5150
/**
5251
* Send the dataTerminalReady (DTS) signal to given state

src/transport/WebSerialTransport.ts

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ export interface SerialOptions extends ISerialOptions {
4444
/**
4545
* Wrapper class around Webserial API to communicate with the serial device.
4646
* @param {typeof import("w3c-web-serial").SerialPort} device - Requested device prompted by the browser.
47-
* @param {ITrace} trace Object that log or trace all serial messages.
47+
* @param {ITrace} tracer Object that log or trace all serial messages.
4848
*
4949
* ```
5050
* const port = await navigator.serial.requestPort();
@@ -81,8 +81,10 @@ export class WebSerialTransport implements ISerialTransport {
8181
async write(data: Uint8Array) {
8282
if (this.device.writable) {
8383
const writer = this.device.writable.getWriter();
84-
this.tracer.trace("Write bytes");
85-
this.tracer.trace(`Write ${data.length} bytes: ${hexConvert(data)}`);
84+
if (this.tracer) {
85+
this.tracer.trace("Write bytes");
86+
this.tracer.trace(`Write ${data.length} bytes: ${hexConvert(data)}`);
87+
}
8688
await writer.write(data);
8789
writer.releaseLock();
8890
}
@@ -95,7 +97,7 @@ export class WebSerialTransport implements ISerialTransport {
9597
* @param {Uint8Array} packet Unsigned 8 bit array from the device read stream.
9698
* @returns {Promise<Uint8Array>} 8 bit unsigned data array read from device.
9799
*/
98-
async read(timeout: number = 0, minData: number = 0, packet?: Uint8Array): Promise<Uint8Array> {
100+
async read(timeout: number = 0, minData: number = 0): Promise<Uint8Array> {
99101
if (this.leftOver.length != 0) {
100102
const p = this.leftOver;
101103
this.leftOver = new Uint8Array(0);
@@ -106,9 +108,6 @@ export class WebSerialTransport implements ISerialTransport {
106108
}
107109
this.reader = this.device.readable.getReader();
108110
let t;
109-
if (!packet) {
110-
packet = this.leftOver;
111-
}
112111
try {
113112
if (timeout > 0) {
114113
t = setTimeout(() => {
@@ -117,15 +116,17 @@ export class WebSerialTransport implements ISerialTransport {
117116
}
118117
}, timeout);
119118
}
120-
119+
let packet = this.leftOver;
121120
do {
122121
const { value, done } = await this.reader.read();
123122
if (done) {
124123
this.leftOver = packet;
125124
throw new Error("Timeout");
126125
}
127-
this.tracer.trace("Raw Read bytes");
128-
this.tracer.trace(`Read ${value.length} bytes: ${hexConvert(value)}`);
126+
if (this.tracer) {
127+
this.tracer.trace("Raw Read bytes");
128+
this.tracer.trace(`Read ${value.length} bytes: ${hexConvert(value)}`);
129+
}
129130
const p = appendArray(packet, value);
130131
packet = p;
131132
} while (packet.length < minData);
@@ -145,7 +146,7 @@ export class WebSerialTransport implements ISerialTransport {
145146
*/
146147
async unRead(buffer?: Uint8Array): Promise<Uint8Array> {
147148
const leftOver = this.leftOver;
148-
this.leftOver = buffer ? buffer : new Uint8Array(0);
149+
this.leftOver = buffer ? appendArray(leftOver, buffer) : new Uint8Array(0);
149150
return leftOver;
150151
}
151152

src/utils/slip.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -114,10 +114,9 @@ export class Slip {
114114
if (valFinal.length > 0) {
115115
return valFinal;
116116
}
117-
packet = slipResult.newLeftOver;
118-
await this.transport.unRead();
117+
await this.transport.unRead(slipResult.packet);
119118
}
120-
packet = await this.transport.read(timeout, minData, packet);
119+
packet = await this.transport.read(timeout, minData);
121120

122121
if (this.tracer) {
123122
this.tracer.trace("Read SLIP bytes");

0 commit comments

Comments
 (0)