void ecmd_lufa_periodic(void) { if (!must_parse) ecmd_lufa_rx(); if (must_parse && write_len == 0) { must_parse = 0; if (recv_len <= 1) { recv_len = 0; return; } write_len = ecmd_parse_command(recv_buffer, write_buffer, sizeof(write_buffer)); if (is_ECMD_AGAIN(write_len)) { /* convert ECMD_AGAIN back to ECMD_FINAL */ write_len = ECMD_AGAIN(write_len); must_parse = 1; } else if (is_ECMD_ERR(write_len)) return; else { recv_len = 0; } write_buffer[write_len++] = '\r'; write_buffer[write_len++] = '\n'; } if (write_len) ecmd_lufa_tx(); }
static void jabber_parse_ecmd(char *message) { int16_t remain = sizeof(STATE->outbuf) - 1; int16_t written = 0; while (remain > 0) { int16_t len = ecmd_parse_command(message, STATE->outbuf + written, remain); if (is_ECMD_AGAIN(len)) { len = ECMD_AGAIN(len); written += len; remain -= len; if (remain) { STATE->outbuf[written++] = '\n'; remain--; } continue; } else if (is_ECMD_ERR(len)) { strncpy_P(STATE->outbuf, PSTR("parse error"), sizeof(STATE->outbuf)); len = 11; } written = len; break; } STATE->outbuf[written] = 0; }
static void irc_handle_ecmd (void) { int16_t len = ecmd_parse_command(STATE->inbuf, STATE->outbuf, ECMD_OUTPUTBUF_LENGTH - 1); if ((STATE->reparse = is_ECMD_AGAIN(len)) != 0) { /* convert ECMD_AGAIN back to ECMD_FINAL */ len = ECMD_AGAIN(len); } if (is_ECMD_ERR(len)) strcpy_P(STATE->outbuf, PSTR("parse error")); else STATE->outbuf[len] = 0; return; }