#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
{
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;