diff loadtools/tpinterf3.c @ 62:6fb41cfa773d

fc-loadtool: flash erase implemented, compiles
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Thu, 27 Jun 2013 04:56:17 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/loadtools/tpinterf3.c	Thu Jun 27 04:56:17 2013 +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);
+}