From c97b3821b124bfe3ef070bd322bc8affeb4e58c0 Mon Sep 17 00:00:00 2001 From: tianjialong Date: Mon, 17 Apr 2023 19:25:41 +0800 Subject: [PATCH] update --- cpp/a.out | Bin 50424 -> 60152 bytes cpp/main.cpp | 8 +++++++- cpp/uart.cpp | 35 +++++++++++++++++++++++------------ cpp/uart.hpp | 21 ++++++++++++++++++--- 4 files changed, 48 insertions(+), 16 deletions(-) diff --git a/cpp/a.out b/cpp/a.out index 52c5bcdbcaad79a997a420a22047e4fc06b64a5f..c42e6c4cbef05bdea839b729c52b06c8ac8487ec 100755 GIT binary patch literal 60152 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 Qt9MDROl2qw*^=7-1(9sn9{>OV diff --git a/cpp/main.cpp b/cpp/main.cpp index c332876..1bf0f9d 100644 --- a/cpp/main.cpp +++ b/cpp/main.cpp @@ -20,12 +20,18 @@ int main(int argc, char *argv[]) { int rec_len; char buffer[128]; - g_uart.open(argv[1]); + if (argc != 3) { + cout << "input error,please input ttyS and baudrate" << endl; + return 0; + } + + g_uart.open(argv[1], argv[2]); while (1) { rec_len = g_uart.receive(buffer, sizeof(buffer)); if (rec_len > 0) { g_uart.send(buffer, rec_len); + memset(buffer, 0, sizeof(buffer)); } usleep(1000); } diff --git a/cpp/uart.cpp b/cpp/uart.cpp index d015ad3..9cb3c92 100644 --- a/cpp/uart.cpp +++ b/cpp/uart.cpp @@ -10,12 +10,22 @@ using namespace iflytop; using namespace std; +static map s_baudratemap = { + {"0", B0}, {"50", B50}, {"75", B75}, {"110", B110}, // + {"134", B134}, {"150", B150}, {"200", B200}, {"300", B300}, // + {"600", B600}, {"1200", B1200}, {"1800", B1800}, {"2400", B2400}, // + {"4800", B4800}, {"9600", B9600}, {"19200", B19200}, {"38400", B38400}, // + {"57600", B57600}, {"115200", B115200}, {"230400", B230400}, {"460800", B460800}, // + {"500000", B500000}, {"576000", B576000}, {"921600", B921600}, {"1000000", B1000000}, // + {"1152000", B1152000}, {"1500000", B1500000}, {"2000000", B2000000}, {"2500000", B2500000}, // + {"3000000", B3000000}, {"3500000", B3500000}, {"4000000", B4000000}, +}; + Uart::Uart() {} Uart::~Uart() {} -int Uart::open(string path) { +int Uart::open(string path, string ratestr) { int rc; - m_name = path; m_fd = ::open(path.c_str(), O_RDWR | O_NOCTTY); @@ -24,22 +34,23 @@ int Uart::open(string path) { return -1; } + if (s_baudratemap.find(ratestr) == s_baudratemap.end()) { + return -1; + } + m_rate = ratestr; + 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_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); // 设置输出波特率 + cfsetispeed(&m_tty, s_baudratemap[ratestr]); // 设置输入波特率 + cfsetospeed(&m_tty, s_baudratemap[ratestr]); // 设置输出波特率 tcflush(m_fd, TCIFLUSH); // 刷清未处理的输入和/或输出 diff --git a/cpp/uart.hpp b/cpp/uart.hpp index 5915501..4cf4168 100644 --- a/cpp/uart.hpp +++ b/cpp/uart.hpp @@ -19,14 +19,29 @@ class Uart { private: int m_fd = 0; string m_name; - int m_rate = B115200; + string m_rate; struct termios m_tty; public: Uart(); ~Uart(); - - int open(string path); + /** + * @brief 打开串口 + * + * @param path + * @param rate + * "0" "50" "75" "110" + * "134" "150" "200" "300" + * "600" "1200" "1800" "2400" + * "4800" "9600" "19200" "38400" + * "57600" "115200" "230400" "460800" + * "500000" "576000" "921600" "1000000" + * "1152000" "1500000" "2000000" "2500000" + * "3000000" "3500000" "4000000" + * + * @return int + */ + int open(string path, string ratestr); int send(char *data, int size); int receive(char *data, int size_max); int close();