]> sigrok.org Git - libsigrok.git/blobdiff - hardware/common/scpi_serial.c
Route sr_source_remove for all serial devices through a wrapper.
[libsigrok.git] / hardware / common / scpi_serial.c
index e89e7f71a19e71d02aec8edb8705099111456c7b..6c5415c5daeb26ea2693359025f7706c3326b97d 100644 (file)
@@ -53,33 +53,37 @@ SR_PRIV int scpi_serial_source_add(void *priv, int events, int timeout,
 {
        struct sr_serial_dev_inst *serial = priv;
 
-       return sr_source_add(serial->fd, events, timeout, cb, cb_data);
+       return serial_source_add(serial, events, timeout, cb, cb_data);
 }
 
 SR_PRIV int scpi_serial_source_remove(void *priv)
 {
        struct sr_serial_dev_inst *serial = priv;
 
-       return sr_source_remove(serial->fd);
+       return serial_source_remove(serial);
 }
 
 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;