diff target-utils/simagent/tx.c @ 776:fac3176de18d

simagent: bare Tx implemented
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 12 Mar 2021 23:36:46 +0000
parents
children 3ba64341137b
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/target-utils/simagent/tx.c	Fri Mar 12 23:36:46 2021 +0000
@@ -0,0 +1,49 @@
+/*
+ * This module implements transmission of bytes toward the SIM.
+ */
+
+#include "types.h"
+#include "simregs.h"
+
+extern u16 conf1_reg;
+
+send_to_sim(bytes, count)
+	u8 *bytes;
+	unsigned count;
+{
+	unsigned n, timeout;
+
+	SIMREGS.conf1 = conf1_reg |= SIM_CONF1_TXRX;
+	if (count == 1)
+		wait_ARM_cycles(372 * 4);	/* wait 1 etu */
+	for (n = 0; ; ) {
+		SIMREGS.dtx = bytes[n++];
+		if (n == count) {
+			SIMREGS.conf1 = conf1_reg &= ~SIM_CONF1_TXRX;
+			return(0);
+		}
+		for (timeout = 12000; timeout; timeout--)
+			if (SIMREGS.it & SIM_IT_ITTX)
+				break;
+		if (!timeout) {
+			printf("ERROR: SIM interface Tx timeout\n");
+			return(-1);
+		}
+	}
+}
+
+cmd_tx(argstr)
+	char *argstr;
+{
+	u8 bytes[5];
+	int rc;
+
+	rc = decode_hex_string_arg(argstr, bytes, sizeof bytes);
+	if (rc < 0)
+		return;
+	if (rc == 0) {
+		printf("ERROR: empty hex string argument\n");
+		return;
+	}
+	send_to_sim(bytes, rc);
+}