paparazzi-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[paparazzi-commits] [4756] add simulated uart over stdin and stdout


From: Pascal Brisset
Subject: [paparazzi-commits] [4756] add simulated uart over stdin and stdout
Date: Mon, 29 Mar 2010 15:44:46 +0000

Revision: 4756
          http://svn.sv.gnu.org/viewvc/?view=rev&root=paparazzi&revision=4756
Author:   hecto
Date:     2010-03-29 15:44:46 +0000 (Mon, 29 Mar 2010)
Log Message:
-----------
 add simulated uart over stdin and stdout

Modified Paths:
--------------
    paparazzi3/trunk/sw/airborne/sim/uart_hw.h

Added Paths:
-----------
    paparazzi3/trunk/sw/airborne/sim/sim_uart_hw.c

Added: paparazzi3/trunk/sw/airborne/sim/sim_uart_hw.c
===================================================================
--- paparazzi3/trunk/sw/airborne/sim/sim_uart_hw.c                              
(rev 0)
+++ paparazzi3/trunk/sw/airborne/sim/sim_uart_hw.c      2010-03-29 15:44:46 UTC 
(rev 4756)
@@ -0,0 +1,5 @@
+#include "uart_hw.h"
+
+char stdinout_buffer[STDINOUT_BUFFER_SIZE];
+uint8_t stdinout_rx_insert_idx = 0;
+uint8_t stdinout_rx_extract_idx = 0;

Modified: paparazzi3/trunk/sw/airborne/sim/uart_hw.h
===================================================================
--- paparazzi3/trunk/sw/airborne/sim/uart_hw.h  2010-03-29 15:42:22 UTC (rev 
4755)
+++ paparazzi3/trunk/sw/airborne/sim/uart_hw.h  2010-03-29 15:44:46 UTC (rev 
4756)
@@ -0,0 +1,40 @@
+#include <stdbool.h>
+#include <inttypes.h>
+#include <stdio.h>
+#include <sys/select.h>
+#include <unistd.h>
+#include <assert.h>
+
+#define STDINOUT_BUFFER_SIZE 256
+#define FD_STDIN 0
+
+extern char stdinout_buffer[STDINOUT_BUFFER_SIZE];
+extern uint8_t stdinout_rx_insert_idx;
+extern uint8_t stdinout_rx_extract_idx;
+
+
+static inline bool StdInOutChAvailable(void) {
+  struct timeval tv;
+  fd_set fds;
+  tv.tv_sec = 0;
+  tv.tv_usec = 0;
+  FD_ZERO(&fds);
+  FD_SET(FD_STDIN, &fds);
+  select(1, &fds, NULL, NULL, &tv);
+  if (FD_ISSET(FD_STDIN, &fds)) {
+    char tmp_buf[STDINOUT_BUFFER_SIZE];
+    uint8_t n = read(FD_STDIN, tmp_buf, STDINOUT_BUFFER_SIZE);
+    unsigned int i;
+    for(i = 0; i < n; i++) {
+      stdinout_buffer[stdinout_rx_insert_idx] = tmp_buf[i];
+      stdinout_rx_insert_idx++; /* Auto overflow */
+    }
+  }
+  return (stdinout_rx_insert_idx != stdinout_rx_extract_idx);
+}
+
+#define StdInOutTransmit(_char) putchar(_char)
+#define StdInOutGetch() ({ \
+  assert(stdinout_rx_insert_idx != stdinout_rx_extract_idx); \
+  stdinout_buffer[stdinout_rx_extract_idx++]; \
+})





reply via email to

[Prev in Thread] Current Thread [Next in Thread]