agilent-dmm: make parser deal with input better

This commit is contained in:
Bert Vermeulen 2012-09-09 22:48:22 +02:00
parent 81599cc55b
commit f2e86bbfa6
1 changed files with 12 additions and 10 deletions

View File

@ -83,7 +83,8 @@ static void receive_line(const struct sr_dev_inst *sdi)
recv->recv(sdi, match); recv->recv(sdi, match);
g_match_info_unref(match); g_match_info_unref(match);
g_regex_unref(reg); g_regex_unref(reg);
} } else
sr_dbg("agilent-dmm: unknown line '%s'", devc->buf);
/* Done with this. */ /* Done with this. */
devc->buflen = 0; devc->buflen = 0;
@ -104,15 +105,16 @@ SR_PRIV int agdmm_receive_data(int fd, int revents, void *cb_data)
if (revents == G_IO_IN) { if (revents == G_IO_IN) {
/* Serial data arrived. */ /* Serial data arrived. */
len = AGDMM_BUFSIZE - devc->buflen - 1; while(AGDMM_BUFSIZE - devc->buflen - 1 > 0) {
if (len > 0) { len = serial_read(fd, devc->buf + devc->buflen, 1);
len = serial_read(fd, devc->buf + devc->buflen, len); if (len < 1)
if (len > 0) { break;
devc->buflen += len; devc->buflen += len;
*(devc->buf + devc->buflen) = '\0'; *(devc->buf + devc->buflen) = '\0';
if (devc->buflen > 0 && *(devc->buf + devc->buflen - 1) == '\n') if (*(devc->buf + devc->buflen - 1) == '\n') {
/* End of line */ /* End of line */
receive_line(sdi); receive_line(sdi);
break;
} }
} }
} }