FreeCalypso > hg > freecalypso-tools
view loadtools/tpinterf3.c @ 196:47d56330609d
fc-cmu200d: skeleton complete, ready to start adding meat
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 24 Apr 2017 02:17:04 +0000 |
parents | e7502631a0f9 |
children |
line wrap: on
line source
/* * 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); }