]> sigrok.org Git - libsigrok.git/blobdiff - hardware/common/scpi_serial.c
Centralise duplicated logging helper defines.
[libsigrok.git] / hardware / common / scpi_serial.c
index e89e7f71a19e71d02aec8edb8705099111456c7b..dc0996349937a181aef67b71012ed23abe61fddc 100644 (file)
 #include <glib.h>
 #include <string.h>
 
-/* Message logging helpers with subsystem-specific prefix string. */
-#define LOG_PREFIX "scpi_serial: "
-#define sr_log(l, s, args...) sr_log(l, LOG_PREFIX s, ## args)
-#define sr_spew(s, args...) sr_spew(LOG_PREFIX s, ## args)
-#define sr_dbg(s, args...) sr_dbg(LOG_PREFIX s, ## args)
-#define sr_info(s, args...) sr_info(LOG_PREFIX s, ## args)
-#define sr_warn(s, args...) sr_warn(LOG_PREFIX s, ## args)
+#define LOG_PREFIX "scpi_serial"
 
 #define SCPI_READ_RETRIES 100
 #define SCPI_READ_RETRY_TIMEOUT 10000
@@ -53,33 +47,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;