diff loadtools/tpinterf3.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/loadtools/tpinterf3.c	Sat Jun 11 00:13:35 2016 +0000
@@ -0,0 +1,60 @@
+/*
+ * The do_r16() and do_w16() functions implemented in this module
+ * provide programmatic access to the r16 and w16 commands on the target.
+ * They will be used to implement some flash operations.
+ */
+
+#include <sys/types.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <string.h>
+#include <strings.h>
+#include <stdlib.h>
+
+extern char target_response_line[];
+
+do_r16(addr, retptr)
+	uint32_t addr;
+	uint16_t *retptr;
+{
+	char addr_arg[10], *argv[3];
+	int stat;
+	char *strtoul_endp;
+
+	sprintf(addr_arg, "%lx", (u_long) addr);
+	argv[0] = "r16";
+	argv[1] = addr_arg;
+	argv[2] = 0;
+	tpinterf_make_cmd(argv);
+	if (tpinterf_send_cmd() < 0)
+		return(-1);
+	stat = tpinterf_capture_output_oneline(1);
+	if (stat != 1) {
+errout:		fprintf(stderr, "error: malformed response to r16 command\n");
+		return(-1);
+	}
+	if (strlen(target_response_line) != 4)
+		goto errout;
+	*retptr = strtoul(target_response_line, &strtoul_endp, 16);
+	if (strtoul_endp != target_response_line + 4)
+		goto errout;
+	return(0);
+}
+
+do_w16(addr, data)
+	uint32_t addr;
+	uint16_t data;
+{
+	char addr_arg[10], data_arg[10], *argv[4];
+
+	sprintf(addr_arg, "%lx", (u_long) addr);
+	sprintf(data_arg, "%lx", (u_long) data);
+	argv[0] = "w16";
+	argv[1] = addr_arg;
+	argv[2] = data_arg;
+	argv[3] = 0;
+	tpinterf_make_cmd(argv);
+	if (tpinterf_send_cmd() < 0)
+		return(-1);
+	return tpinterf_pass_output(1);
+}