aboutsummaryrefslogtreecommitdiff
path: root/src/seriallinux.cpp
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/seriallinux.cpp136
1 files changed, 136 insertions, 0 deletions
diff --git a/src/seriallinux.cpp b/src/seriallinux.cpp
new file mode 100644
index 0000000..27ba784
--- /dev/null
+++ b/src/seriallinux.cpp
@@ -0,0 +1,136 @@
+/*
+ Copyright (C) 2014 BARRATERO Laurent
+
+ AeroUp 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 3 of the License, or
+ (at your option) any later version.
+
+ Aeroup 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.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+/*
+ * Filename: seriallinux.cpp
+ *
+ * Description: Serial lib linux (termios version)
+ * used if haven't boost
+ *
+ * Version: 0.2
+ * Created: 17/01/2014 03:31:32
+ * Revision: none
+ * Compiler: gcc
+ *
+ * Author: BARATTERO Laurent, laurentba<at>larueluberlu.net
+ * Organization: La rue Luberlu
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <fcntl.h>
+#include <iostream>
+#include <pthread.h>
+
+#include "seriallinux.hpp"
+
+
+using namespace std;
+
+/*
+ * Class: SerialLinux
+ * Description: open/write to serial port
+ */
+SerialLinux::SerialLinux(std::string dev)
+ {
+ memset(&tio,0,sizeof(tio));
+ tio.c_iflag= IGNPAR ;
+ tio.c_oflag=0;
+ tio.c_cflag= CS8|CREAD|CLOCAL ;
+ tio.c_lflag=0;
+ tio.c_cc[VMIN]=1;
+ tio.c_cc[VTIME]=0;
+
+ fd = open( dev.c_str(), O_RDWR | O_NOCTTY);
+ if(fd < 0)
+ {
+ perror("open");
+ printf("file => %s\n", dev.c_str());
+ exit(EXIT_FAILURE);
+ }
+
+ tcgetattr(fd,&old_tio);
+ tcflush(fd, TCIFLUSH);
+ cfsetospeed(&tio, B19200);
+ cfsetispeed(&tio, B19200);
+ tcsetattr(fd,TCSANOW,&tio);
+
+ }
+
+SerialLinux::~SerialLinux()
+{
+ tcsetattr(fd,TCSANOW,&old_tio);
+ fclose();
+}
+
+ void
+SerialLinux::sendChar(char c)
+{
+ write(fd,&c,1);
+}
+
+ void
+SerialLinux::sendString(uint8_t *c, int n)
+{
+ write(fd, c, n);
+}
+
+ string
+SerialLinux::readLine()
+{
+ char c[] = {0,0};
+ string result;
+ for(;;)
+ {
+ nb_read = read(fd, c, 1);
+ switch(c[0])
+ {
+ case '\r':
+ break;
+ case '\n':
+ return result;
+ default:
+ result+=c[0];
+ }
+ }
+}
+
+ void
+SerialLinux::fclose()
+{
+ if (close(fd)<0)
+ {
+ perror("close");
+ exit(EXIT_FAILURE);
+ }
+}
+
+
+ void
+SerialLinux::setspeed(speed_t vitesse)
+{
+ cfsetospeed(&tio, vitesse);
+ cfsetispeed(&tio, vitesse);
+ tcsetattr(fd,TCSANOW,&tio);
+}
+
+
+
+