{
do {
uint8_t byte = UDR0;
if (!m_recv_overrun) {
RecvSizeType new_end = (RecvSizeType)(m_recv_end + 1) % recv_buffer_mod;
if (new_end != m_recv_start) {
m_recv_buffer[m_recv_end] = byte;
m_recv_end = new_end;
} else {
m_recv_overrun = true;
}
}
} while ((UCSR0A & (1 << RXC0)));
m_recv_queued_event.triggerFromInterrupt(c);
}
ICAgIHsKICAgICAgICBkbyB7CiAgICAgICAgICAgIHVpbnQ4X3QgYnl0ZSA9IFVEUjA7CiAgICAgICAgICAgIGlmICghbV9yZWN2X292ZXJydW4pIHsKICAgICAgICAgICAgICAgIFJlY3ZTaXplVHlwZSBuZXdfZW5kID0gKFJlY3ZTaXplVHlwZSkobV9yZWN2X2VuZCArIDEpICUgcmVjdl9idWZmZXJfbW9kOwogICAgICAgICAgICAgICAgaWYgKG5ld19lbmQgIT0gbV9yZWN2X3N0YXJ0KSB7CiAgICAgICAgICAgICAgICAgICAgbV9yZWN2X2J1ZmZlclttX3JlY3ZfZW5kXSA9IGJ5dGU7CiAgICAgICAgICAgICAgICAgICAgbV9yZWN2X2VuZCA9IG5ld19lbmQ7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIG1fcmVjdl9vdmVycnVuID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0gd2hpbGUgKChVQ1NSMEEgJiAoMSA8PCBSWEMwKSkpOwogICAgICAgIAogICAgICAgIG1fcmVjdl9xdWV1ZWRfZXZlbnQudHJpZ2dlckZyb21JbnRlcnJ1cHQoYyk7CiAgICB9