]> sigrok.org Git - libsigrok.git/commitdiff
scpi_serial: Iterate serial_write as necessary to send full commands.
authorMartin Ling <redacted>
Sat, 7 Dec 2013 16:11:27 +0000 (16:11 +0000)
committerMartin Ling <redacted>
Sat, 7 Dec 2013 19:43:47 +0000 (19:43 +0000)
hardware/common/scpi_serial.c

index e89e7f71a19e71d02aec8edb8705099111456c7b..0b1e30d84dbf7be3cb540dbf5a72a9904b59a6a8 100644 (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;