GSList *l;
struct sr_serial_dev_inst *serial;
struct sr_dev_inst *sdi;
- char reply[50];
+ char reply[100];
unsigned int i;
struct dev_context *devc;
char channel[10];
if (sscanf(reply, "%1u%1u%1u%1u%1u%1u%1u%1u", &cc_cv_ch1,
&cc_cv_ch2, &track1, &track2, &beep,
&devc->output_enabled, &baud1, &baud2) != 8) {
- sr_err("Invalid reply to STATUS: '%s'.", reply);
- goto error;
+ /* old firmware (< 2.00?) responds with different format */
+ if (sscanf(reply, "%1u %1u %1u %1u %1u X %1u X", &cc_cv_ch1,
+ &cc_cv_ch2, &track1, &track2, &beep,
+ &devc->output_enabled) != 6) {
+ sr_err("Invalid reply to STATUS: '%s'.", reply);
+ goto error;
+ }
+ /* ignore remaining two lines of status message */
+ gpd_receive_reply(serial, reply, sizeof(reply));
+ gpd_receive_reply(serial, reply, sizeof(reply));
}
for (i = 0; i < model->num_channels; ++i) {
{
int l_recv = 0, bufpos = 0, retc, l_startpos = 0, lines = 1;
gint64 start, remaining;
- const int timeout_ms = 100;
+ const int timeout_ms = 250;
if (!serial || !buf || (buflen <= 0))
return SR_ERR_ARG;
if (bufpos == 0 && buf[bufpos] == '\n')
continue;
- if (buf[bufpos] == '\n') {
+ if (buf[bufpos] == '\n' || buf[bufpos] == '\r') {
buf[bufpos] = '\0';
sr_dbg("Received line '%s'.", &buf[l_startpos]);
buf[bufpos] = '\n';