diff rvinterf/lowlevel/packettx.c @ 0:e7502631a0f9

initial import from freecalypso-sw rev 1033:5ab737ac3ad7
author Mychaela Falconia <falcon@freecalypso.org>
date Sat, 11 Jun 2016 00:13:35 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rvinterf/lowlevel/packettx.c	Sat Jun 11 00:13:35 2016 +0000
@@ -0,0 +1,49 @@
+/*
+ * This module handles the lowest level of serial packet Tx
+ */
+
+#include <sys/types.h>
+#include <sys/time.h>
+#include <stdio.h>
+#include <string.h>
+#include <strings.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include "../include/pktmux.h"
+#include "../include/limits.h"
+
+extern int target_fd;
+extern int wakeup_after_sec;
+
+static u_char wakeup_shot[64];
+static struct timeval last_tx;
+
+send_pkt_to_target(pkt, pktlen)
+	u_char *pkt;
+{
+	u_char buf[MAX_PKT_TO_TARGET*2+2];
+	u_char *cp, *dp, *endp;
+	int c;
+	struct timeval curtime, timediff;
+
+	gettimeofday(&curtime, 0);
+	if (wakeup_after_sec) {
+		timersub(&curtime, &last_tx, &timediff);
+		if (timediff.tv_sec >= wakeup_after_sec) {
+			write(target_fd, wakeup_shot, sizeof wakeup_shot);
+			usleep(100000);
+		}
+	}
+	endp = pkt + pktlen;
+	dp = buf;
+	*dp++ = STX;
+	for (cp = pkt; cp < endp; cp++) {
+		c = *cp;
+		if (c == STX || c == DLE)
+			*dp++ = DLE;
+		*dp++ = c;
+	}
+	*dp++ = STX;
+	write(target_fd, buf, dp - buf);
+	bcopy(&curtime, &last_tx, sizeof(struct timeval));
+}