scpi_serial: Iterate serial_write as necessary to send full commands.

This commit is contained in:
Martin Ling 2013-12-07 16:11:27 +00:00
parent bb9d6116f8
commit 721fc2272e
1 changed files with 12 additions and 8 deletions

View File

@ -65,21 +65,25 @@ SR_PRIV int scpi_serial_source_remove(void *priv)
SR_PRIV int scpi_serial_send(void *priv, const char *command)
{
int len, out;
int len, result, written;
gchar *terminated_command;
struct sr_serial_dev_inst *serial = priv;
terminated_command = g_strconcat(command, "\n", NULL);
len = strlen(terminated_command);
out = serial_write(serial, terminated_command, len);
g_free(terminated_command);
if (out != len) {
sr_dbg("Only sent %d/%d bytes of SCPI command: '%s'.", out,
len, command);
return SR_ERR;
written = 0;
while (written < len) {
result = serial_write(serial, terminated_command + written, len - written);
if (result < 0) {
sr_err("Error while sending SCPI command: '%s'.", command);
g_free(terminated_command);
return SR_ERR;
}
written += result;
}
g_free(terminated_command);
sr_spew("Successfully sent SCPI command: '%s'.", command);
return SR_OK;