From 7e57f0493a661e57c5a2572a8818d35267482922 Mon Sep 17 00:00:00 2001 From: Jason Wessel Date: Mon, 18 May 2009 10:00:26 -0500 Subject: 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 --- hw/usb-serial.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'hw') diff --git a/hw/usb-serial.c b/hw/usb-serial.c index be231f91ed..19870a53cc 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; -- cgit v1.2.3