[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[paparazzi-commits] [4815] Add serial_port_open_raw and serial_port_flus
From: |
Allen Ibara |
Subject: |
[paparazzi-commits] [4815] Add serial_port_open_raw and serial_port_flush_output functions to fms_serial_port |
Date: |
Tue, 20 Apr 2010 00:47:42 +0000 |
Revision: 4815
http://svn.sv.gnu.org/viewvc/?view=rev&root=paparazzi&revision=4815
Author: aibara
Date: 2010-04-20 00:47:42 +0000 (Tue, 20 Apr 2010)
Log Message:
-----------
Add serial_port_open_raw and serial_port_flush_output functions to
fms_serial_port
Modified Paths:
--------------
paparazzi3/trunk/sw/airborne/fms/fms_serial_port.c
paparazzi3/trunk/sw/airborne/fms/fms_serial_port.h
Modified: paparazzi3/trunk/sw/airborne/fms/fms_serial_port.c
===================================================================
--- paparazzi3/trunk/sw/airborne/fms/fms_serial_port.c 2010-04-20 00:47:11 UTC
(rev 4814)
+++ paparazzi3/trunk/sw/airborne/fms/fms_serial_port.c 2010-04-20 00:47:42 UTC
(rev 4815)
@@ -33,7 +33,51 @@
}
}
+void serial_port_flush_output(struct FmsSerialPort* me) {
+ /*
+ * flush any input that might be on the port so we start fresh.
+ */
+ if (tcflush(me->fd, TCOFLUSH)) {
+ TRACE(TRACE_ERROR,"%s, set term attr failed: %s (%d)\n", device,
strerror(errno), errno);
+ fprintf(stderr, "flush (%d) failed: %s (%d)\n", me->fd, strerror(errno),
errno);
+ }
+}
+int serial_port_open_raw(struct FmsSerialPort* me, const char* device,
speed_t speed) {
+ if ((me->fd = open(device, O_RDWR | O_NONBLOCK | O_NOCTTY)) < 0) {
+ TRACE(TRACE_ERROR,"%s, open failed: %s (%d)\n", device, strerror(errno),
errno);
+ return -1;
+ }
+ if (tcgetattr(me->fd, &me->orig_termios) < 0) {
+ TRACE(TRACE_ERROR,"%s, get term settings failed: %s (%d)\n", device,
strerror(errno), errno);
+ close(me->fd);
+ return -1;
+ }
+ me->cur_termios = me->orig_termios;
+ /* input modes */
+ me->cur_termios.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|INPCK|ISTRIP|INLCR|IGNCR
+ |ICRNL |IUCLC|IXON|IXANY|IXOFF|IMAXBEL);
+ me->cur_termios.c_iflag |= IGNPAR;
+ /* control modes*/
+ me->cur_termios.c_cflag &= ~(CSIZE|PARENB|CRTSCTS|PARODD|HUPCL|CSTOPB);
+ me->cur_termios.c_cflag |= CREAD|CS8|CLOCAL;
+ /* local modes */
+ me->cur_termios.c_lflag &= ~(ISIG|ICANON|IEXTEN|ECHO|FLUSHO|PENDIN);
+ me->cur_termios.c_lflag |= NOFLSH;
+ if (cfsetispeed(&me->cur_termios, speed)) {
+ TRACE(TRACE_ERROR,"%s, set term speed failed: %s (%d)\n", device,
strerror(errno), errno);
+ close(me->fd);
+ return -1;
+ }
+ if (tcsetattr(me->fd, TCSADRAIN, &me->cur_termios)) {
+ TRACE(TRACE_ERROR,"%s, set term attr failed: %s (%d)\n", device,
strerror(errno), errno);
+ close(me->fd);
+ return -1;
+ }
+ serial_port_flush(me);
+ return 0;
+}
+
int serial_port_open(struct FmsSerialPort* me, const char* device,
void(*term_conf_callback)(struct termios*, speed_t*)) {
Modified: paparazzi3/trunk/sw/airborne/fms/fms_serial_port.h
===================================================================
--- paparazzi3/trunk/sw/airborne/fms/fms_serial_port.h 2010-04-20 00:47:11 UTC
(rev 4814)
+++ paparazzi3/trunk/sw/airborne/fms/fms_serial_port.h 2010-04-20 00:47:42 UTC
(rev 4815)
@@ -12,6 +12,8 @@
extern struct FmsSerialPort* serial_port_new(void);
extern void serial_port_free(struct FmsSerialPort* me);
extern void serial_port_flush(struct FmsSerialPort* me);
+extern void serial_port_flush_output(struct FmsSerialPort* me);
+int serial_port_open_raw(struct FmsSerialPort* me, const char* device,
speed_t speed);
extern int serial_port_open(struct FmsSerialPort* me, const char* device,
void(*term_conf_callback)(struct termios*,
speed_t*));
extern void serial_port_close(struct FmsSerialPort* me);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [paparazzi-commits] [4815] Add serial_port_open_raw and serial_port_flush_output functions to fms_serial_port,
Allen Ibara <=