From: Jason Wessel Date: Mon, 18 May 2009 15:00:26 +0000 (-0500) Subject: usb-serial: implement break event. X-Git-Tag: 0.10.0-0sb10~1168 X-Git-Url: https://vcs.maemo.org/git/?a=commitdiff_plain;h=7e57f0493a661e57c5a2572a8818d35267482922;hp=0928a95ffe91862938cee997c9e30602fa7884ab;p=qemu usb-serial: implement break event. Implement the serial break via usb serial. The second data byte in ftdi status packet contains the break status. The values were already defined in usb-serial.c so it was a matter of making use of the event_trigger to form a urb to send over to the host controller with the serial break status set. This was tested against a linux development image which enables sysrq via a serial break on the ftdi usb console. Signed-off-by: Jason Wessel --- diff --git a/hw/usb-serial.c b/hw/usb-serial.c index be231f9..19870a5 100644 --- a/hw/usb-serial.c +++ b/hw/usb-serial.c @@ -445,7 +445,15 @@ static int usb_serial_handle_data(USBDevice *dev, USBPacket *p) } *data++ = usb_get_modem_lines(s) | 1; /* We do not have the uart details */ - *data++ = 0; + /* handle serial break */ + if (s->event_trigger && s->event_trigger & FTDI_BI) { + s->event_trigger &= ~FTDI_BI; + *data++ = FTDI_BI; + ret = 2; + break; + } else { + *data++ = 0; + } len -= 2; if (len > s->recv_used) len = s->recv_used; @@ -505,7 +513,7 @@ static void usb_serial_event(void *opaque, int event) switch (event) { case CHR_EVENT_BREAK: - /* TODO: Send Break to USB */ + s->event_trigger |= FTDI_BI; break; case CHR_EVENT_FOCUS: break;