on a CDC or HID write() error, call setWriteError(). better handling of USB_Send errors in CDC.

This commit is contained in:
Zach Eveland 2011-08-30 17:25:35 -04:00
parent af635024db
commit df068274f4
2 changed files with 14 additions and 4 deletions

View File

@ -166,9 +166,15 @@ size_t Serial_::write(uint8_t c)
// open connection isn't broken cleanly (cable is yanked out, host dies
// or locks up, or host virtual serial port hangs)
if (_usbLineInfo.lineState > 0) {
USB_Send(CDC_TX,&c,1);
return 1;
int r = USB_Send(CDC_TX,&c,1);
if (r > 0) {
return r;
} else {
setWriteError();
return 0;
}
}
setWriteError();
return 0;
}

View File

@ -398,11 +398,15 @@ size_t Keyboard_::write(uint8_t c)
_keyMap->charToKey(c,&keys);
else
{
if (c >= 128)
if (c >= 128) {
setWriteError();
return 0;
}
c = pgm_read_byte(_asciimap + c);
if (!c)
if (!c) {
setWriteError();
return 0;
}
if (c & 0x80)
{
keys.modifiers |= KEY_MODIFIER_LEFT_SHIFT;