Add basic change for v1453
Change-Id: I9497a61bbc3717f66413794a4e7dee0347c0bc33
diff --git a/mbtk/test/others/uart_read_demo.c b/mbtk/test/others/uart_read_demo.c
new file mode 100755
index 0000000..1b7eea4
--- /dev/null
+++ b/mbtk/test/others/uart_read_demo.c
@@ -0,0 +1,185 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <termios.h>
+#include <string.h>
+
+#include "mbtk_type.h"
+#include "mbtk_log.h"
+
+#define DATABITS CS8
+#define STOPBITS 0
+#define PARITYON 0
+#define PARITY 0
+
+int uart_baud_get(int baud)
+{
+ int rate = 0;
+ switch(baud)
+ {
+ case 300:
+ rate = B300;
+ break;
+ case 600:
+ rate = B600;
+ break;
+ case 1200:
+ rate = B1200;
+ break;
+ case 2400:
+ rate = B2400;
+ break;
+ case 4800:
+ rate = B4800;
+ break;
+ case 9600:
+ rate = B9600;
+ break;
+ case 19200:
+ rate = B19200;
+ break;
+ case 38400:
+ rate = B38400;
+ break;
+ case 57600:
+ rate = B57600;
+ break;
+ case 115200:
+ rate = B115200;
+ break;
+ case 230400:
+ rate = B230400;
+ break;
+ case 460800:
+ rate = B460800;
+ break;
+ case 921600:
+ rate = B921600;
+ break;
+ case 1500000:
+ rate = B1500000;
+ break;
+ case 2000000:
+ rate = B2000000;
+ break;
+ case 3000000:
+ rate = B3000000;
+ break;
+ case 4000000:
+ rate = B4000000;
+ break;
+ default:
+ rate = B115200;
+ break;
+ }
+
+ return rate;
+}
+
+int gnss_port_open(const char *dev, int flag, int baud, bool tty)
+{
+
+ int fd = -1;
+ if((fd = open(dev, flag)) < 0)
+ {
+ printf("Open %s fail errno = [%d].\n", dev, errno);
+ return -1;
+ }
+
+ printf("Open %s success.\n", dev);
+ if (tty)
+ {
+ int rate = uart_baud_get(baud);
+ /* set newtio */
+ struct termios newtio;
+ memset(&newtio, 0, sizeof(newtio));
+ //(void)fcntl(fd, F_SETFL, 0);
+ /* no flow control for uart by default */
+ newtio.c_cflag = rate | DATABITS | STOPBITS | PARITYON | PARITY | CLOCAL | CREAD;
+ newtio.c_iflag = IGNPAR;
+ //newtio.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON);
+ newtio.c_oflag = 0;
+ newtio.c_lflag = 0; /* disable ECHO, ICANON, etc... */
+
+ newtio.c_cc[VERASE] = 0x8; /* del */
+ newtio.c_cc[VEOF] = 4; /* Ctrl-d */
+ newtio.c_cc[VMIN] = 1; /* blocking read until 1 character arrives */
+ newtio.c_cc[VEOL] = 0xD; /* '\0' */
+
+ tcflush(fd, TCIOFLUSH);
+ tcsetattr(fd, TCSANOW, &newtio);
+ }
+
+ return fd;
+}
+
+int main(int argc, char *argv[])
+{
+ if(argc != 2) {
+ printf("%s <dev>\n", argv[1]);
+ return -1;
+ }
+
+ int fd = gnss_port_open(argv[1], O_RDWR | O_NONBLOCK | O_NOCTTY, 115200, TRUE);
+ if(fd < 0) {
+ printf("gnss_port_open(%s) fail:%d\n", argv[1], errno);
+ return -1;
+ }
+
+ char buff[1024];
+ int len, ret;
+ fd_set fdr;
+ FD_ZERO(&fdr);
+ FD_SET(fd, &fdr);
+
+ while(1) {
+ ret = select(fd + 1, &fdr, NULL, 0, NULL);
+ if (ret < 0)
+ {
+ if (errno == EINTR)
+ {
+ continue;
+ }
+ printf("select error, errno = %d (%s)\n", errno, strerror(errno));
+ break;
+ }
+ else if (ret == 0)
+ {
+ printf("select ret == 0\n");
+ break;
+ }
+
+ if (FD_ISSET(fd, &fdr))
+ {
+ memset(buff, 0, sizeof(buff));
+ len = read(fd, buff, sizeof(buff));
+ if(len > 0) {
+
+
+ } else if(len ==0 ){
+ printf("Read end : len = 0\n");
+ break;
+ } else {
+ if(EAGAIN == errno) {
+ usleep(50000);
+ continue;
+ } else {
+ printf("Read ret = -1 ,errno = %d\n", errno);
+ break;
+ }
+ }
+ }
+ else
+ {
+ printf("Unknown select event.\n");
+ continue;
+ }
+ }
+
+ printf("exit.\n");
+ return 0;
+}
+
+