<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, May 24, 2024 at 12:11 AM Rob Landley <<a href="mailto:rob@landley.net" target="_blank">rob@landley.net</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 5/20/24 09:42, Yi-Yo Chiang via Toybox wrote:<br>
> Is there any particular reason to use TCSAFLUSH here?<br>
<br>
Partly because it's what strace said busybox and minicom were doing, and partly<br>
because I've had serial hardware that produced initial static on more than one<br>
occasion.<br>
<br>
In this case, it looks like Elliott also put it in his initial contribution<br>
(commit 12fcf08b5c96).<br>
<br>
> If not, can we change to TCSADRAIN or TCSANOW. I don't think there is good<br>
> reason to _discard received data_ just to set the terminal mode...? Is there<br>
> really a real world case that the device termios is so dirty that all data, from<br>
> before setting raw mode, must be discarded?<br>
<br>
I've seen multiple instances where there was initial noise from the port going<br>
live before the speed stabilized, or static from a physical connection plugging<br>
in or powering up, or truncated bootloader messages that filled up the input<br>
buffer then abruptly cut off.<br></blockquote><div><br></div><div>Fair enough. But I think this kind of behavior would be better as a flag option</div><div>-[f]lush -- flushes the terminal when initializing connection</div><div>or</div><div>-[r]esume -- resume existing connection, don't flush terminal</div><div>or a "flush/reset terminal" escape-menu command or a standalone shell command like `reset`.</div><div>My point being, let the user decide how to handle noise / junk.</div><div>It's possible that the signal is already filtered, or useful signal are mixed together with junk, no? (thus making the noisy "junk" useful for people with a keen eye)</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
> I also tried to modify the microcom code to skip tcsetattr() if the device<br>
> termios is already equal to the mode we are setting it.<br>
> `if (old_termios != new_termios) tcsetattr(new_termios, TCSAFLUSH)`<br>
> However this doesn't work because microcom always tries to set the device baud.<br>
<br>
Hmmm, you're right, it shouldn't mess with that unless we specify -s. I could<br>
also make TCSAFLUSH only happen when we do -s (because otherwise it's an<br>
existing connection and we're not messing with it, but I still need to make sure<br>
it's in raw mode)...<br>
<br>
Note: FLAG(s)*TCSAFLUSH becomes 0 (TCSANOW) in the absence of -s.<br>
<br>
> For example a pty device might be configured to use buad 38400,<br>
<br>
Why set the baud at all on a pty? A pseudo-terminal doesn't have a baud rate,<br>
leave it alone. (You can also inherit a serial port that was set up by the<br>
bootloader and should again just be left alone...)<br></blockquote><div><br></div><div>I didn't set the baud to 38400, it's the default value of my Linux kernel.</div><div>As far as I understand, even if pty does nothing with the baud, it still assigns some _sensible_ number to it. To make it look more like a physical tty.</div><div>I don't know why it's doing this, maybe to maintain some sort of existing contract? </div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
> but microcom<br>
> would want it to be 115200, thus flushing it's data. but pty doesn't really care<br>
> about the baud most of the time AFAIK, so flushing data in this case just seems<br>
> disruptive to the user experience.<br>
<br>
Setting baud rate and flushing are two different switches in the interface, but<br>
in this case flushing only when setting the baud rate seems a good use of the<br>
existing controls.<br>
<br>
Try commit 2043855a4bd5<br></blockquote><div><br></div><div>Works nicely. Thanks!</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
Rob<br>
</blockquote></div></div>