zte's code,first commit
Change-Id: I9a04da59e459a9bc0d67f101f700d9d7dc8d681b
diff --git a/ap/hostapp/zlogtrace_ref/netcom_rserial/comm_stty.c b/ap/hostapp/zlogtrace_ref/netcom_rserial/comm_stty.c
new file mode 100755
index 0000000..9229ee0
--- /dev/null
+++ b/ap/hostapp/zlogtrace_ref/netcom_rserial/comm_stty.c
@@ -0,0 +1,275 @@
+/*
+ * remserial
+ * Copyright (C) 2000 Paul Davis
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <stdlib.h>
+#include <termios.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdio.h>
+#include "../zlog_com.h"
+
+/**
+ * ºê¶¨Òå
+ */
+#define CFLG 0
+#define IFLG 1
+#define OFLG 2
+#define LFLG 3
+#define RFLG 4
+#define BFLG 5
+
+
+/**
+ * Íⲿ±äÁ¿ÒýÓÃ
+ */
+extern int errno;
+
+/**
+ * È«¾Ö±äÁ¿¶¨Òå
+ */
+static struct sttyset {
+ char *name;
+ int which;
+ int mask;
+ int value;
+} sttynames[] = {
+ { "raw", RFLG, 0, 0},
+ { "0", BFLG, 0, B0},
+ { "50", BFLG, 0, B50},
+ { "75", BFLG, 0, B75},
+ { "110", BFLG, 0, B110},
+ { "134", BFLG, 0, B134},
+ { "150", BFLG, 0, B150},
+ { "200", BFLG, 0, B200},
+ { "300", BFLG, 0, B300},
+ { "600", BFLG, 0, B600},
+ { "1200", BFLG, 0, B1200},
+ { "1800", BFLG, 0, B1800},
+ { "2400", BFLG, 0, B2400},
+ { "4800", BFLG, 0, B4800},
+ { "9600", BFLG, 0, B9600},
+ { "19200", BFLG, 0, B19200},
+ { "38400", BFLG, 0, B38400},
+#ifdef B57600
+ { "57600", BFLG, 0, B57600},
+#endif
+#ifdef B115200
+ { "115200", BFLG, 0, B115200},
+#endif
+#ifdef B230400
+ { "230400", BFLG, 0, B230400},
+#endif
+ { "cs7", CFLG, CSIZE, CS7},
+ { "cs8", CFLG, CSIZE, CS8},
+ { "cstopb", CFLG, CSTOPB, CSTOPB},
+ { "cread", CFLG, CREAD, CREAD},
+ { "parenb", CFLG, PARENB, PARENB},
+ { "parodd", CFLG, PARODD, PARODD},
+ { "hubcl", CFLG, HUPCL, HUPCL},
+ { "clocal", CFLG, CLOCAL, CLOCAL},
+#ifdef CRTSCTS
+ { "crtscts", CFLG, CRTSCTS, CRTSCTS},
+#endif
+#ifdef ORTSFL
+ { "ortsfl", CFLG, ORTSFL, ORTSFL},
+#endif
+#ifdef CTSFLOW
+ { "ctsflow", CFLG, CTSFLOW, CTSFLOW},
+#endif
+#ifdef RTSFLOW
+ { "rtsflow", CFLG, RTSFLOW, RTSFLOW},
+#endif
+ { "ignbrk", IFLG, IGNBRK, IGNBRK},
+ { "brkint", IFLG, BRKINT, BRKINT},
+ { "ignpar", IFLG, IGNPAR, IGNPAR},
+ { "parmrk", IFLG, PARMRK, PARMRK},
+ { "inpck", IFLG, INPCK, INPCK},
+ { "istrip", IFLG, ISTRIP, ISTRIP},
+ { "inlcr", IFLG, INLCR, INLCR},
+ { "igncr", IFLG, IGNCR, IGNCR},
+ { "icrnl", IFLG, ICRNL, ICRNL},
+#ifdef IUCLC // Missing on OSX, FreeBSD
+ { "iuclc", IFLG, IUCLC, IUCLC},
+#endif
+ { "ixon", IFLG, IXON, IXON},
+ { "ixany", IFLG, IXANY, IXANY},
+ { "ixoff", IFLG, IXOFF, IXOFF},
+#ifdef IMAXBEL
+ { "imaxbel", IFLG, IMAXBEL, IMAXBEL},
+#endif
+ { "opost", OFLG, OPOST, OPOST},
+#ifdef ILCUC // Missing on OSX, FreeBSD
+ { "olcuc", OFLG, OLCUC, OLCUC},
+#endif
+ { "onlcr", OFLG, ONLCR, ONLCR},
+ { "ocrnl", OFLG, OCRNL, OCRNL},
+ { "onocr", OFLG, ONOCR, ONOCR},
+ { "onlret", OFLG, ONLRET, ONLRET},
+ { "ofil", OFLG, OFILL, OFILL},
+ { "ofdel", OFLG, OFDEL, OFDEL},
+ { "nl0", OFLG, NLDLY, NL0},
+ { "nl1", OFLG, NLDLY, NL1},
+ { "cr0", OFLG, CRDLY, CR0},
+ { "cr1", OFLG, CRDLY, CR1},
+ { "cr2", OFLG, CRDLY, CR2},
+ { "cr3", OFLG, CRDLY, CR3},
+ { "tab0", OFLG, TABDLY, TAB0},
+ { "tab1", OFLG, TABDLY, TAB1},
+ { "tab2", OFLG, TABDLY, TAB2},
+ { "tab3", OFLG, TABDLY, TAB3},
+ { "bs0", OFLG, BSDLY, BS0},
+ { "bs1", OFLG, BSDLY, BS1},
+ { "vt0", OFLG, VTDLY, VT0},
+ { "vt1", OFLG, VTDLY, VT1},
+ { "ff0", OFLG, FFDLY, FF0},
+ { "ff1", OFLG, FFDLY, FF1},
+ { "isig", LFLG, ISIG, ISIG},
+ { "icanon", LFLG, ICANON, ICANON},
+#ifdef XCASE // Missing on OSX, FreeBSD
+ { "xcase", LFLG, XCASE, XCASE},
+#endif
+ { "echo", LFLG, ECHO, ECHO},
+ { "echoe", LFLG, ECHOE, ECHOE},
+ { "echok", LFLG, ECHOK, ECHOK},
+ { "echonl", LFLG, ECHONL, ECHONL},
+ { "noflsh", LFLG, NOFLSH, NOFLSH},
+ { "tostop", LFLG, TOSTOP, TOSTOP},
+#ifdef ECHOCTL
+ { "echoctl", LFLG, ECHOCTL, ECHOCTL},
+#endif
+#ifdef ECHOPRT
+ { "echoprt", LFLG, ECHOPRT, ECHOPRT},
+#endif
+#ifdef ECHOKE
+ { "echoke", LFLG, ECHOKE, ECHOKE},
+#endif
+#ifdef FLUSHO
+ { "flusho", LFLG, FLUSHO, FLUSHO},
+#endif
+#ifdef PENDIN
+ { "pendin", LFLG, PENDIN, PENDIN},
+#endif
+ { "iexten", LFLG, IEXTEN, IEXTEN},
+#ifdef TOSTOP
+ { "tostop", LFLG, TOSTOP, TOSTOP},
+#endif
+ { NULL, 0, 0, 0}
+};
+
+/**
+ * @brief ÉèÖÃttyÉ豸µÄ²¨ÌØÂÊ
+ * @param[in] term¡¢p¡¢turnon
+ * @return void
+ * @note
+ * @see
+ */
+static void set_this_tty(struct termios *term, struct sttyset *p, int turnon)
+{
+ /*
+ pdebug(5,"set_this_tty: setting %s on? %d\n",p->name,turnon);
+ */
+ switch (p->which) {
+ case CFLG:
+ term->c_cflag &= ~(p->mask);
+ if (turnon)
+ term->c_cflag |= p->value;
+ break;
+ case IFLG:
+ term->c_iflag &= ~(p->mask);
+ if (turnon)
+ term->c_iflag |= p->value;
+ break;
+ case OFLG:
+ term->c_oflag &= ~(p->mask);
+ if (turnon)
+ term->c_oflag |= p->value;
+ break;
+ case LFLG:
+ term->c_lflag &= ~(p->mask);
+ if (turnon)
+ term->c_lflag |= p->value;
+ break;
+ case RFLG:
+ term->c_iflag = 0;
+ term->c_oflag = 0;
+ term->c_lflag = 0;
+ term->c_cc[VMIN] = 1;
+ term->c_cc[VTIME] = 0;
+ break;
+ case BFLG:
+ cfsetispeed(term, p->value);
+ cfsetospeed(term, p->value);
+ break;
+ }
+}
+
+/**
+ * @brief ÉèÖÃttyÉ豸µÄ²¨ÌØÂÊ
+ * @param[in] fdÉ豸ÎļþÃèÊö·û
+ * @param[in] settings ²¨ÌØÂÊÖµ
+ * @return ³É¹¦·µ»Ø0£¬Ê§°Ü·µ»Ø-1
+ * @note
+ * @see
+ */
+int set_tty(int fd, char *settings)
+{
+ register char *p;
+ register char *s;
+ struct termios term;
+ register int i;
+ int mode;
+
+ printf("set_tty: baud rate is %s, and the default baud is %s\n", settings, ZLOG_DEFAULT_TTYBAUD);
+
+ if (tcgetattr(fd,&term) == -1) {
+ /*
+ pdebug(4,"set_tty: cannot get settings for fd %d, error %d\n",
+ fd,errno);
+ */
+ return -1;
+ }
+
+ s = strdup(settings);
+ p = strtok(s, " \t\n");
+ while (p) {
+ mode = 1;
+ if (*p == '-') {
+ mode = 0;
+ p++;
+ }
+ for (i=0; sttynames[i].name; i++) {
+ if (!strcmp(p,sttynames[i].name)) {
+ set_this_tty(&term,&sttynames[i],mode);
+ break;
+ }
+ }
+ p = strtok(NULL, " \t\n");
+ }
+ free(s);
+ if (tcsetattr(fd, TCSANOW, &term) == -1) {
+ /*
+ pdebug(4,"set_tty: cannot get settings for fd %d error %d\n",
+ fd,errno);
+ */
+ return -1;
+ }
+ else
+ return 0;
+}
+