diff rvinterf/lowlevel/format_fc.c @ 1009:009d5bf2ff4c

rvinterf/lowlevel: formatting of FC-specific packet types split off into format_fc.c
author Mychaela Falconia <falcon@ivan.Harhan.ORG>
date Sun, 20 Mar 2016 20:23:54 +0000
parents rvinterf/lowlevel/format.c@0d7cc054ef72
children 658fe6f1880f
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rvinterf/lowlevel/format_fc.c	Sun Mar 20 20:23:54 2016 +0000
@@ -0,0 +1,82 @@
+/*
+ * This module has been split off from format.c; it implements the decoding
+ * of those Rx packet types which have been invented in FreeCalypso.
+ */
+
+#include <sys/types.h>
+#include <stdio.h>
+#include <string.h>
+#include <strings.h>
+#include "../include/pktmux.h"
+#include "../include/limits.h"
+
+extern u_char rxpkt[];
+extern size_t rxpkt_len;
+
+static char fmtbuf[MAX_PKT_FROM_TARGET*8];	/* size it generously */
+
+void
+print_ati_output()
+{
+	int i, c;
+	char *dp;
+
+	dp = fmtbuf;
+	strcpy(dp, "ATI: ");
+	dp += 5;
+	for (i = 1; i < rxpkt_len; i++) {
+		c = rxpkt[i];
+		if (c & 0x80) {
+			*dp++ = 'M';
+			*dp++ = '-';
+			c &= 0x7F;
+		}
+		if (c < 0x20) {
+			*dp++ = '^';
+			*dp++ = c + '@';
+		} else if (c == 0x7F) {
+			*dp++ = '^';
+			*dp++ = '?';
+		} else
+			*dp++ = c;
+	}
+	*dp = '\0';
+	output_line(fmtbuf);
+}
+
+void
+print_fc_lld_msg()
+{
+	int i, c;
+	char *dp;
+
+	dp = fmtbuf;
+	strcpy(dp, "LLD: ");
+	dp += 5;
+	for (i = 1; i < rxpkt_len; i++) {
+		c = rxpkt[i];
+		if (c & 0x80) {
+			*dp++ = 'M';
+			*dp++ = '-';
+			c &= 0x7F;
+		}
+		if (c < 0x20) {
+			*dp++ = '^';
+			*dp++ = c + '@';
+		} else if (c == 0x7F) {
+			*dp++ = '^';
+			*dp++ = '?';
+		} else
+			*dp++ = c;
+	}
+	*dp = '\0';
+	output_line(fmtbuf);
+}
+
+void
+report_extui_packet()
+{
+	sprintf(fmtbuf, "LCD OUT: row %u col %u-%u", rxpkt[1], rxpkt[2],
+		rxpkt[2] + (rxpkt_len - 3) / 2 - 1);
+	output_line(fmtbuf);
+}