]> sigrok.org Git - libsigrok.git/commitdiff
Add blocking and nonblocking versions of serial_read and serial_write.
authorMartin Ling <redacted>
Mon, 30 Dec 2013 02:52:17 +0000 (03:52 +0100)
committerUwe Hermann <redacted>
Mon, 30 Dec 2013 13:19:39 +0000 (14:19 +0100)
hardware/common/serial.c
libsigrok-internal.h

index a7376af00dc253f663da44f97d55eb7b655674b7..d08f22bdcd981c0a91f111fb777911d5ba3616c3 100644 (file)
@@ -167,17 +167,8 @@ SR_PRIV int serial_flush(struct sr_serial_dev_inst *serial)
        return SR_OK;
 }
 
-/**
- * Write a number of bytes to the specified serial port.
- *
- * @param serial Previously initialized serial port structure.
- * @param buf Buffer containing the bytes to write.
- * @param count Number of bytes to write.
- *
- * @return The number of bytes written, or a negative error code upon failure.
- */
-SR_PRIV int serial_write(struct sr_serial_dev_inst *serial,
-               const void *buf, size_t count)
+static int _serial_write(struct sr_serial_dev_inst *serial,
+               const void *buf, size_t count, int nonblocking)
 {
        ssize_t ret;
        char *error;
@@ -192,7 +183,7 @@ SR_PRIV int serial_write(struct sr_serial_dev_inst *serial,
                return SR_ERR;
        }
 
-       if (serial->nonblocking)
+       if (nonblocking)
                ret = sp_nonblocking_write(serial->data, buf, count);
        else
                ret = sp_blocking_write(serial->data, buf, count, 0);
@@ -214,16 +205,34 @@ SR_PRIV int serial_write(struct sr_serial_dev_inst *serial,
 }
 
 /**
- * Read a number of bytes from the specified serial port.
+ * Write a number of bytes to the specified serial port.
  *
  * @param serial Previously initialized serial port structure.
- * @param buf Buffer where to store the bytes that are read.
- * @param count The number of bytes to read.
+ * @param buf Buffer containing the bytes to write.
+ * @param count Number of bytes to write.
  *
- * @return The number of bytes read, or a negative error code upon failure.
+ * @return The number of bytes written, or a negative error code upon failure.
  */
-SR_PRIV int serial_read(struct sr_serial_dev_inst *serial, void *buf,
-               size_t count)
+SR_PRIV int serial_write(struct sr_serial_dev_inst *serial,
+               const void *buf, size_t count)
+{
+       return _serial_write(serial, buf, count, serial->nonblocking);
+}
+
+SR_PRIV int serial_write_blocking(struct sr_serial_dev_inst *serial,
+               const void *buf, size_t count)
+{
+       return _serial_write(serial, buf, count, 0);
+}
+
+SR_PRIV int serial_write_nonblocking(struct sr_serial_dev_inst *serial,
+               const void *buf, size_t count)
+{
+       return _serial_write(serial, buf, count, 1);
+}
+
+static int _serial_read(struct sr_serial_dev_inst *serial, void *buf,
+               size_t count, int nonblocking)
 {
        ssize_t ret;
        char *error;
@@ -238,7 +247,7 @@ SR_PRIV int serial_read(struct sr_serial_dev_inst *serial, void *buf,
                return SR_ERR;
        }
 
-       if (serial->nonblocking)
+       if (nonblocking)
                ret = sp_nonblocking_read(serial->data, buf, count);
        else
                ret = sp_blocking_read(serial->data, buf, count, 0);
@@ -260,6 +269,33 @@ SR_PRIV int serial_read(struct sr_serial_dev_inst *serial, void *buf,
        return ret;
 }
 
+/**
+ * Read a number of bytes from the specified serial port.
+ *
+ * @param serial Previously initialized serial port structure.
+ * @param buf Buffer where to store the bytes that are read.
+ * @param count The number of bytes to read.
+ *
+ * @return The number of bytes read, or a negative error code upon failure.
+ */
+SR_PRIV int serial_read(struct sr_serial_dev_inst *serial, void *buf,
+               size_t count)
+{
+       return _serial_read(serial, buf, count, serial->nonblocking);
+}
+
+SR_PRIV int serial_read_blocking(struct sr_serial_dev_inst *serial, void *buf,
+               size_t count)
+{
+       return _serial_read(serial, buf, count, 0);
+}
+
+SR_PRIV int serial_read_nonblocking(struct sr_serial_dev_inst *serial, void *buf,
+               size_t count)
+{
+       return _serial_read(serial, buf, count, 1);
+}
+
 /**
  * Set serial parameters for the specified serial port.
  *
index 0805a1a611bc5428bbbf48ee3a0ea9f1b176e460..b3eeb8dbbb5931378e2e186176c0c9b7458206e7 100644 (file)
@@ -290,8 +290,16 @@ SR_PRIV int serial_close(struct sr_serial_dev_inst *serial);
 SR_PRIV int serial_flush(struct sr_serial_dev_inst *serial);
 SR_PRIV int serial_write(struct sr_serial_dev_inst *serial,
                const void *buf, size_t count);
+SR_PRIV int serial_write_blocking(struct sr_serial_dev_inst *serial,
+               const void *buf, size_t count);
+SR_PRIV int serial_write_nonblocking(struct sr_serial_dev_inst *serial,
+               const void *buf, size_t count);
 SR_PRIV int serial_read(struct sr_serial_dev_inst *serial, void *buf,
                size_t count);
+SR_PRIV int serial_read_blocking(struct sr_serial_dev_inst *serial, void *buf,
+               size_t count);
+SR_PRIV int serial_read_nonblocking(struct sr_serial_dev_inst *serial, void *buf,
+               size_t count);
 SR_PRIV int serial_set_params(struct sr_serial_dev_inst *serial, int baudrate,
                int bits, int parity, int stopbits, int flowcontrol, int rts, int dtr);
 SR_PRIV int serial_set_paramstr(struct sr_serial_dev_inst *serial,