diff --git a/cpp/a.out b/cpp/a.out index c42e6c4..1ec3e0d 100755 Binary files a/cpp/a.out and b/cpp/a.out differ diff --git a/cpp/main.cpp b/cpp/main.cpp index 1bf0f9d..3cd7fda 100644 --- a/cpp/main.cpp +++ b/cpp/main.cpp @@ -15,25 +15,66 @@ using namespace iflytop; class Uart g_uart; +int g_rec_len; + +void *thread_uart_send(void *arg) { + while (1) { + if (g_rec_len > 0) { + g_uart.send((char *)arg, g_rec_len); + g_rec_len = 0; + } + usleep(1000); + } +} + +void *thread_uart_receive(void *arg) { + while (1) { + if (g_rec_len == 0) { + g_rec_len = g_uart.receive((char *)arg, 128); + } + usleep(1000); + } +} int main(int argc, char *argv[]) { - int rec_len; - char buffer[128]; + char share_buffer[128]; + + pthread_t pid1, pid2; + pthread_attr_t *pthread_arr1, *pthread_arr2; + pthread_arr1 = NULL; + pthread_arr2 = NULL; if (argc != 3) { cout << "input error,please input ttyS and baudrate" << endl; - return 0; + return -1; + } + + if (g_uart.open(argv[1], argv[2]) < 0) { + cout << "open uart error" << endl; + return -2; + } else { + cout << "open uart success" << endl; } - g_uart.open(argv[1], argv[2]); + if (pthread_create(&pid1, pthread_arr1, thread_uart_send, (void *)&share_buffer) != 0) { + cout << "create uart send thread error" << endl; + return -3; + } else { + cout << "create uart send thread success" << endl; + } + + if (pthread_create(&pid2, pthread_arr2, thread_uart_receive, (void *)&share_buffer) != 0) { + cout << "create uart receive thread error" << endl; + return -4; + } else { + cout << "create uart receive thread success" << endl; + } 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); + usleep(100000); } + + pthread_join(pid1, NULL); + pthread_join(pid2, NULL); return 0; } diff --git a/cpp/uart.cpp b/cpp/uart.cpp index 9cb3c92..0bc3305 100644 --- a/cpp/uart.cpp +++ b/cpp/uart.cpp @@ -35,7 +35,7 @@ int Uart::open(string path, string ratestr) { } if (s_baudratemap.find(ratestr) == s_baudratemap.end()) { - return -1; + return -2; } m_rate = ratestr;