X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=hardware%2Fcommon%2Fserial.c;h=05e6f3b4eb4768c4e244582e18d7944c092b49f4;hb=066d42b1c803e3b78b7d34df1f1516f729f81085;hp=66d8b9252a605a043abc6e232b2b9776d8dfc9a1;hpb=c9bc57b6bc0c13d7bf4fef60db3030f88eeebda5;p=libsigrok.git diff --git a/hardware/common/serial.c b/hardware/common/serial.c index 66d8b925..05e6f3b4 100644 --- a/hardware/common/serial.c +++ b/hardware/common/serial.c @@ -22,7 +22,7 @@ #include #include #include -#include +#include #include "libsigrok.h" #include "libsigrok-internal.h" @@ -63,16 +63,15 @@ SR_PRIV int serial_open(struct sr_serial_dev_inst *serial, int flags) ret = sp_open(serial->data, flags); - switch (ret) - { - case SP_ERR_ARG: - sr_err("Attempt to open serial port with invalid parameters."); - return SR_ERR_ARG; - case SP_ERR_FAIL: - error = sp_last_error_message(); - sr_err("Error opening port: %s.", error); - sp_free_error_message(error); - return SR_ERR; + switch (ret) { + case SP_ERR_ARG: + sr_err("Attempt to open serial port with invalid parameters."); + return SR_ERR_ARG; + case SP_ERR_FAIL: + error = sp_last_error_message(); + sr_err("Error opening port: %s.", error); + sp_free_error_message(error); + return SR_ERR; } #ifndef _WIN32 @@ -109,25 +108,24 @@ SR_PRIV int serial_close(struct sr_serial_dev_inst *serial) } sr_spew("Closing serial port %s (fd %d).", serial->port, serial->fd); - ret = SR_OK; ret = sp_close(serial->data); + sp_free_port(serial->data); - switch (ret) - { - case SP_ERR_ARG: - sr_err("Attempt to close an invalid serial port."); - return SR_ERR_ARG; - case SP_ERR_FAIL: - error = sp_last_error_message(); - sr_err("Error closing port: %s.", error); - sp_free_error_message(error); - return SR_ERR; + switch (ret) { + case SP_ERR_ARG: + sr_err("Attempt to close an invalid serial port."); + return SR_ERR_ARG; + case SP_ERR_FAIL: + error = sp_last_error_message(); + sr_err("Error closing port: %s.", error); + sp_free_error_message(error); + return SR_ERR; } serial->fd = -1; - return ret; + return SR_OK; } /** @@ -157,19 +155,18 @@ SR_PRIV int serial_flush(struct sr_serial_dev_inst *serial) ret = sp_flush(serial->data); - switch (ret) - { - case SP_ERR_ARG: - sr_err("Attempt to flush an invalid serial port."); - return SR_ERR_ARG; - case SP_ERR_FAIL: - error = sp_last_error_message(); - sr_err("Error flushing port: %s.", error); - sp_free_error_message(error); - return SR_ERR; + switch (ret) { + case SP_ERR_ARG: + sr_err("Attempt to flush an invalid serial port."); + return SR_ERR_ARG; + case SP_ERR_FAIL: + error = sp_last_error_message(); + sr_err("Error flushing port: %s.", error); + sp_free_error_message(error); + return SR_ERR; } - return ret; + return SR_OK; } /** @@ -179,7 +176,7 @@ SR_PRIV int serial_flush(struct sr_serial_dev_inst *serial) * @param buf Buffer containing the bytes to write. * @param count Number of bytes to write. * - * @return The number of bytes written, or -1 upon failure. + * @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) @@ -189,27 +186,26 @@ SR_PRIV int serial_write(struct sr_serial_dev_inst *serial, if (!serial) { sr_dbg("Invalid serial port."); - return -1; + return SR_ERR; } if (serial->fd == -1) { sr_dbg("Cannot use unopened serial port %s (fd %d).", serial->port, serial->fd); - return -1; + return SR_ERR; } ret = sp_write(serial->data, buf, count); - switch (ret) - { - case SP_ERR_ARG: - sr_err("Attempted serial port write with invalid arguments."); - return SR_ERR_ARG; - case SP_ERR_FAIL: - error = sp_last_error_message(); - sr_err("Write error: %s.", error); - sp_free_error_message(error); - return SR_ERR; + switch (ret) { + case SP_ERR_ARG: + sr_err("Attempted serial port write with invalid arguments."); + return SR_ERR_ARG; + case SP_ERR_FAIL: + error = sp_last_error_message(); + sr_err("Write error: %s.", error); + sp_free_error_message(error); + return SR_ERR; } sr_spew("Wrote %d/%d bytes (fd %d).", ret, count, serial->fd); @@ -224,7 +220,7 @@ SR_PRIV int serial_write(struct sr_serial_dev_inst *serial, * @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 -1 upon failure. + * @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) @@ -234,27 +230,27 @@ SR_PRIV int serial_read(struct sr_serial_dev_inst *serial, void *buf, if (!serial) { sr_dbg("Invalid serial port."); - return -1; + return SR_ERR; } if (serial->fd == -1) { sr_dbg("Cannot use unopened serial port %s (fd %d).", serial->port, serial->fd); - return -1; + return SR_ERR; } ret = sp_read(serial->data, buf, count); - switch (ret) - { - case SP_ERR_ARG: - sr_err("Attempted serial port read with invalid arguments."); - return SR_ERR_ARG; - case SP_ERR_FAIL: - error = sp_last_error_message(); - sr_err("Read error: %s.", error); - sp_free_error_message(error); - return SR_ERR; + switch (ret) { + case SP_ERR_ARG: + sr_err("Attempted serial port read with invalid arguments."); + return SR_ERR_ARG; + // Temporarily disabled, will come back later. + // case SP_ERR_FAIL: + // error = sp_last_error_message(); + // sr_err("Read error: %s.", error); + // sp_free_error_message(error); + // return SR_ERR; } sr_spew("Read %d/%d bytes (fd %d).", ret, count, serial->fd); @@ -299,16 +295,15 @@ SR_PRIV int serial_set_params(struct sr_serial_dev_inst *serial, int baudrate, ret = sp_set_params(serial->data, baudrate, bits, parity, stopbits, flowcontrol, rts, dtr); - switch (ret) - { - case SP_ERR_ARG: - sr_err("Invalid arguments for setting serial port parameters."); - return SR_ERR_ARG; - case SP_ERR_FAIL: - error = sp_last_error_message(); - sr_err("Error setting serial port parameters: %s.", error); - sp_free_error_message(error); - return SR_ERR; + switch (ret) { + case SP_ERR_ARG: + sr_err("Invalid arguments for setting serial port parameters."); + return SR_ERR_ARG; + case SP_ERR_FAIL: + error = sp_last_error_message(); + sr_err("Error setting serial port parameters: %s.", error); + sp_free_error_message(error); + return SR_ERR; } return SR_OK;