Skip to content

Commit

Permalink
serial: 统一函数异常返回值
Browse files Browse the repository at this point in the history
  • Loading branch information
xychen committed Dec 27, 2023
1 parent 8905bda commit 05c587a
Show file tree
Hide file tree
Showing 7 changed files with 135 additions and 111 deletions.
10 changes: 9 additions & 1 deletion libcskburn_serial/src/cmd.c
Original file line number Diff line number Diff line change
Expand Up @@ -608,6 +608,8 @@ cmd_read_flash(cskburn_serial_device_t *dev, uint32_t address, uint32_t size, ui
bool
cmd_change_baud(cskburn_serial_device_t *dev, uint32_t baud, uint32_t old_baud)
{
int ret;

cmd_change_baud_t *cmd = (cmd_change_baud_t *)dev->req_cmd;
memset(cmd, 0, sizeof(cmd_change_baud_t));
cmd->baud = baud;
Expand All @@ -618,5 +620,11 @@ cmd_change_baud(cskburn_serial_device_t *dev, uint32_t baud, uint32_t old_baud)
return false;
}

return serial_set_speed(dev->serial, baud);
ret = serial_set_speed(dev->serial, baud);
if (ret != 0) {
LOGD("DEBUG: Failed to set baudrate: %d (%s)", ret, strerror(-ret));
return false;
}

return true;
}
17 changes: 9 additions & 8 deletions libcskburn_serial/src/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,15 @@ cskburn_serial_init(int flags)
cskburn_serial_device_t *
cskburn_serial_open(const char *path, uint32_t chip)
{
int ret;

cskburn_serial_device_t *dev =
(cskburn_serial_device_t *)malloc(sizeof(cskburn_serial_device_t));

serial_dev_t *serial = serial_open(path);
if (serial == NULL) {
serial_dev_t *serial = NULL;
ret = serial_open(path, &serial);
if (ret != 0) {
LOGE("ERROR: Failed opening serial device: %d (%s)", ret, strerror(-ret));
goto err_open;
}

Expand Down Expand Up @@ -492,13 +496,10 @@ cskburn_serial_read_logs(cskburn_serial_device_t *dev, uint32_t baud)

while (true) {
r = serial_read(dev->serial, buffer, sizeof(buffer), 100);
#if !defined(_WIN32) && !defined(_WIN64)
if (r == -1 && errno != EAGAIN) {
LOGD("DEBUG: Failed reading logs: %d (%s)", errno, strerror(errno));
if (r < 0) {
LOGD("DEBUG: Failed reading logs: %d (%s)", r, strerror(-r));
return;
}
#endif // !WIN32 && !WIN64
if (r <= 0) {
} else if (r == 0) {
msleep(10);
continue;
}
Expand Down
12 changes: 6 additions & 6 deletions libserial/include/serial.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@
struct _serial_dev_t;
typedef struct _serial_dev_t serial_dev_t;

serial_dev_t *serial_open(const char *path);
int serial_open(const char *path, serial_dev_t **dev);
void serial_close(serial_dev_t **dev);

bool serial_set_speed(serial_dev_t *dev, uint32_t speed);
int serial_set_speed(serial_dev_t *dev, uint32_t speed);

ssize_t serial_read(serial_dev_t *dev, void *buf, size_t count, uint64_t timeout);
ssize_t serial_write(serial_dev_t *dev, const void *buf, size_t count, uint64_t timeout);
Expand All @@ -27,17 +27,17 @@ void serial_discard_output(serial_dev_t *dev);
*
* @param dev serial device
* @param active true to set RTS signal (low), false to clear it (high)
* @return true if succeed, false otherwise
* @return 0 if succeed
*/
bool serial_set_rts(serial_dev_t *dev, bool active);
int serial_set_rts(serial_dev_t *dev, bool active);

/**
* @brief Set DTR signal
*
* @param dev serial device
* @param active true to set DTR signal (low), false to clear it (high)
* @return true if succeed, false otherwise
* @return 0 if succeed
*/
bool serial_set_dtr(serial_dev_t *dev, bool active);
int serial_set_dtr(serial_dev_t *dev, bool active);

#endif // __LIB_SERIAL__
55 changes: 25 additions & 30 deletions libserial/src/serial_posix.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,13 @@ set_interface_attribs(int fd, int speed)
struct termios tty;

ret = ioctl(fd, TIOCEXCL);
if (ret < 0) {
return ret;
if (ret != 0) {
return -errno;
}

ret = tcgetattr(fd, &tty);
if (ret < 0) {
return ret;
if (ret != 0) {
return -errno;
}

tty.c_cflag |= (CLOCAL | CREAD); /* ignore modem controls */
Expand All @@ -46,15 +46,10 @@ set_interface_attribs(int fd, int speed)

ret = tcsetattr(fd, TCSANOW, &tty);
if (ret != 0) {
return ret;
}

ret = set_baud(fd, speed);
if (ret != 0) {
return ret;
return -errno;
}

return 0;
return set_baud(fd, speed);
}

static int
Expand All @@ -65,7 +60,7 @@ set_modem_control(int fd, int flag, int val)

ret = ioctl(fd, TIOCMGET, &bits);
if (ret != 0) {
return ret;
return -errno;
}

if (val) {
Expand All @@ -75,32 +70,32 @@ set_modem_control(int fd, int flag, int val)
}

ret = ioctl(fd, TIOCMSET, &bits);
if (ret == 0) {
return ret;
if (ret != 0) {
return -errno;
}

return 1;
return 0;
}

serial_dev_t *
serial_open(const char *path)
int
serial_open(const char *path, serial_dev_t **dev)
{
int fd, ret;

fd = open(path, O_RDWR | O_NOCTTY | O_NONBLOCK);
if (fd < 0) {
return NULL;
return -errno;
}

ret = set_interface_attribs(fd, 115200);
if (ret != 0) {
return NULL;
return ret;
}

serial_dev_t *dev = (serial_dev_t *)malloc(sizeof(serial_dev_t));
dev->fd = fd;
(*dev) = (serial_dev_t *)calloc(1, sizeof(serial_dev_t));
(*dev)->fd = fd;

return dev;
return 0;
}

void
Expand All @@ -111,10 +106,10 @@ serial_close(serial_dev_t **dev)
*dev = NULL;
}

bool
int
serial_set_speed(serial_dev_t *dev, uint32_t speed)
{
return set_baud(dev->fd, speed) == 0;
return set_baud(dev->fd, speed);
}

static inline void
Expand All @@ -138,12 +133,12 @@ serial_read(serial_dev_t *dev, void *buf, size_t count, uint64_t timeout)

ret = select(dev->fd + 1, &fds, NULL, NULL, &tv);
if (ret < 0) {
return -errno;
return errno == EAGAIN ? 0 : -errno;
}

ret = read(dev->fd, buf, count);
if (ret < 0) {
return errno == ETIMEDOUT ? 0 : -errno;
return errno == EAGAIN ? 0 : -errno;
}

return ret;
Expand All @@ -160,12 +155,12 @@ serial_write(serial_dev_t *dev, const void *buf, size_t count, uint64_t timeout)

ret = select(dev->fd + 1, NULL, &fds, NULL, &tv);
if (ret < 0) {
return -errno;
return errno == EAGAIN ? 0 : -errno;
}

ret = write(dev->fd, buf, count);
if (ret < 0) {
return errno == ETIMEDOUT ? 0 : -errno;
return errno == EAGAIN ? 0 : -errno;
}

return ret;
Expand All @@ -183,13 +178,13 @@ serial_discard_output(serial_dev_t *dev)
tcflush(dev->fd, TCOFLUSH);
}

bool
int
serial_set_rts(serial_dev_t *dev, bool val)
{
return set_modem_control(dev->fd, TIOCM_RTS, val);
}

bool
int
serial_set_dtr(serial_dev_t *dev, bool val)
{
return set_modem_control(dev->fd, TIOCM_DTR, val);
Expand Down
Loading

0 comments on commit 05c587a

Please sign in to comment.