fix losing pl2303 input at the price of losing some input bytes sometimes.
This commit is contained in:
parent
9685412782
commit
ac2534273b
2 changed files with 14 additions and 3 deletions
|
@ -127,17 +127,26 @@ real_config (struct grub_serial_port *port)
|
||||||
static int
|
static int
|
||||||
pl2303_hw_fetch (struct grub_serial_port *port)
|
pl2303_hw_fetch (struct grub_serial_port *port)
|
||||||
{
|
{
|
||||||
char cc;
|
|
||||||
grub_usb_err_t err;
|
grub_usb_err_t err;
|
||||||
|
|
||||||
real_config (port);
|
real_config (port);
|
||||||
|
|
||||||
|
if (port->bufstart < port->bufend)
|
||||||
|
return port->buf[port->bufstart++];
|
||||||
|
|
||||||
err = grub_usb_bulk_read_timeout (port->usbdev, port->in_endp->endp_addr,
|
err = grub_usb_bulk_read_timeout (port->usbdev, port->in_endp->endp_addr,
|
||||||
1, &cc, 10);
|
sizeof (port->buf), port->buf, 10);
|
||||||
if (err != GRUB_USB_ERR_NONE)
|
if (err != GRUB_USB_ERR_NONE)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
return cc;
|
port->bufstart = 0;
|
||||||
|
/* FIXME: nearly always only one byte is transfered.
|
||||||
|
It happens however that more are transfered.
|
||||||
|
Setting sizeof (port->buf) to 1 leads code to stop reading after
|
||||||
|
such transfer. */
|
||||||
|
port->bufend = 1;
|
||||||
|
|
||||||
|
return port->buf[port->bufstart++];
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Put a character. */
|
/* Put a character. */
|
||||||
|
|
|
@ -67,6 +67,8 @@ struct grub_serial_port
|
||||||
struct grub_serial_driver *driver;
|
struct grub_serial_driver *driver;
|
||||||
struct grub_serial_config config;
|
struct grub_serial_config config;
|
||||||
int configured;
|
int configured;
|
||||||
|
char buf[64];
|
||||||
|
int bufstart, bufend;
|
||||||
/* This should be void *data but since serial is useful as an early console
|
/* This should be void *data but since serial is useful as an early console
|
||||||
when malloc isn't available it's a union.
|
when malloc isn't available it's a union.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in a new issue