#include "uart.hpp" #include #include #include #include #include using namespace iflytop; using namespace std; Uart::Uart() {} Uart::~Uart() {} int Uart::open(string path) { int rc; m_name = path; m_fd = ::open(path.c_str(), O_RDWR | O_NOCTTY); if (m_fd < 0) { cout << "open " << path << " failed" << endl; return -1; } memset(&m_tty, 0, sizeof(m_tty)); m_tty.c_cflag |= CLOCAL | CREAD; // 激活本地连接与接受使能 m_tty.c_cflag &= ~CSIZE; // 失能数据位屏蔽 m_tty.c_cflag |= CS8; // 8位数据位 m_tty.c_cflag &= ~CSTOPB; // 1位停止位 m_tty.c_cflag &= ~PARENB; // 无校验位 m_tty.c_cc[VTIME] = 0; m_tty.c_cc[VMIN] = 0; cfsetispeed(&m_tty, B115200); // 设置输入波特率 cfsetospeed(&m_tty, B115200); // 设置输出波特率 tcflush(m_fd, TCIFLUSH); // 刷清未处理的输入和/或输出 /* Apply attributes */ rc = tcsetattr(m_fd, TCSANOW, &m_tty); if (rc) { cout << "tcsetattr failed" << endl; return -3; } return 0; } int Uart::send(char *data, int size) { int sent = 0; sent = write(m_fd, data, size); if (sent > 0) { printf("send success, data is %s\r\n", data); } return sent; } int Uart::receive(char *data, int size_max) { int received = 0; received = read(m_fd, data, size_max); if (received > 0) { printf("recv success,recv size is %d,data is %s\r\n", received, data); } return received; } int Uart::close() { ::close(m_fd); m_fd = -1; return 0; } bool Uart::flush_rx() { if (m_fd < 0) return false; int rc = tcflush(m_fd, TCIFLUSH); return rc == 0; } bool Uart::flush_tx() { if (m_fd < 0) return false; int rc = tcflush(m_fd, TCOFLUSH); return rc == 0; }