Hello, (Cc-ing Aurelien who introduced the support for modem control, and Jason who added the missing THRE and TEMT flags).
Mark Cave-Ayland, le lun. 26 oct. 2020 08:34:00 +0000, a ecrit: > The FTDI_GET_MDM_ST response should only return a single byte indicating the > modem status with bit 0 cleared (as documented in the Linux ftdi_sio.h header > file). > > Signed-off-by: Mark Cave-Ayland <mark.cave-ayl...@ilande.co.uk> > --- > hw/usb/dev-serial.c | 5 ++--- > 1 file changed, 2 insertions(+), 3 deletions(-) > > diff --git a/hw/usb/dev-serial.c b/hw/usb/dev-serial.c > index 4c374d0790..fa734bcf54 100644 > --- a/hw/usb/dev-serial.c > +++ b/hw/usb/dev-serial.c > @@ -360,9 +360,8 @@ static void usb_serial_handle_control(USBDevice *dev, > USBPacket *p, > /* TODO: TX ON/OFF */ > break; > case VendorDeviceRequest | FTDI_GET_MDM_ST: > - data[0] = usb_get_modem_lines(s) | 1; > - data[1] = FTDI_THRE | FTDI_TEMT; > - p->actual_length = 2; > + data[0] = usb_get_modem_lines(s); > + p->actual_length = 1; Err, but Linux' drivers/usb/serial/ftdi_sio.c:ftdi_process_packet() contradicts this: if (len < 2) { dev_dbg(&port->dev, "malformed packet\n"); return 0; } status = buf[0] & FTDI_STATUS_B0_MASK; if (status != priv->prev_status) { char diff_status = status ^ priv->prev_status; if (diff_status & FTDI_RS0_CTS) port->icount.cts++; [...] /* save if the transmitter is empty or not */ if (buf[1] & FTDI_RS_TEMT) priv->transmit_empty = 1; else priv->transmit_empty = 0; Did you actually get an issue with seeing this packet contain two bytes? Samuel