FreeCalypso > hg > freecalypso-sw
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); +}