#include #include #include #include "options.h" #include "baud.h" #include "debug.h" int main(int argc, char *argv[]) { struct epoll_event ev; struct plotter_options options; int fd, baud, ret; int epoll_fd; char buf[256]; if (read_args(argc, argv, &options)) return 1; baud = options.baud_rate; fd = open_at_baud(options.device_path, &baud); if (fd < 0) return 1; if (baud != options.baud_rate) { pr_err("Failed to set baudrate to %d, only got %d\n", options.baud_rate, baud); close(fd); return 1; } epoll_fd = epoll_create(1); ev.events = EPOLLIN; ev.data.fd = fd; if (epoll_ctl(epoll_fd, EPOLL_CTL_ADD, fd, &ev) == -1) { pr_err("epoll_ctl: %m\n"); return 1; } while (1) { ret = epoll_wait(epoll_fd, &ev, 1, -1); if (ret == 0) continue; if (ret < 0) { pr_err("epoll: %m\n"); return 1; } ret = read(fd, buf, sizeof(buf)); if (read < 0) { pr_err("read: %m\n"); break; } if (ret == 0) { pr_err("Read EOF, stopping\n"); break; } ret = write(1, buf, ret); if (read < 0) { pr_err("write: %m\n"); break; } } close(fd); return 0; }