# HG changeset patch # User Michael Spacefalcon # Date 1393216917 0 # Node ID f77480d3dd21e74419a7e063a854d606a7c7c311 # Parent e23fc1228efdbba8ab431f19dee88827b5f0df75 fc-fsio: first ffs2ver command implemented diff -r e23fc1228efd -r f77480d3dd21 rvinterf/etmsync/Makefile --- a/rvinterf/etmsync/Makefile Mon Feb 24 03:42:47 2014 +0000 +++ b/rvinterf/etmsync/Makefile Mon Feb 24 04:41:57 2014 +0000 @@ -3,7 +3,8 @@ PROGS= fc-fsio INSTBIN=/usr/local/bin -FSIO_OBJS= connect.o dispatch.o fscmdtab.o fsiomain.o interf.o launchrvif.o +FSIO_OBJS= connect.o dispatch.o fsbasics.o fscmdtab.o fsiomain.o interf.o \ + launchrvif.o all: ${PROGS} diff -r e23fc1228efd -r f77480d3dd21 rvinterf/etmsync/fsbasics.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rvinterf/etmsync/fsbasics.c Mon Feb 24 04:41:57 2014 +0000 @@ -0,0 +1,36 @@ +/* + * Basic FFS2 operations + */ + +#include +#include +#include +#include "etm.h" +#include "ffs.h" +#include "tmffs2.h" +#include "exitcodes.h" + +extern u_char rvi_msg[]; +extern int rvi_msg_len; + +cmd_ffs2ver() +{ + u_char cmdpkt[4]; + int rc; + + cmdpkt[1] = ETM_FFS2; + cmdpkt[2] = TMFFS_VERSION; + rc = etm_pkt_exch(cmdpkt, 2); + if (rc) + return(rc); + if (rvi_msg[3]) { + printf("FFS2 error %d\n", rvi_msg[3]); + return(ERROR_TARGET); + } + if (rvi_msg_len != 7) { + printf("error: FFS2 version response has wrong length\n"); + return(ERROR_TARGET); + } + printf("FFS2 version: %02X.%02X\n", rvi_msg[5], rvi_msg[4]); + return(0); +} diff -r e23fc1228efd -r f77480d3dd21 rvinterf/etmsync/fscmdtab.c --- a/rvinterf/etmsync/fscmdtab.c Mon Feb 24 03:42:47 2014 +0000 +++ b/rvinterf/etmsync/fscmdtab.c Mon Feb 24 04:41:57 2014 +0000 @@ -6,9 +6,11 @@ extern int cmd_exec(); extern int cmd_exit(); +extern int cmd_ffs2ver(); struct cmdtab cmdtab[] = { {"exec", 1, 1, cmd_exec}, {"exit", 0, 0, cmd_exit}, + {"ffs2ver", 0, 0, cmd_ffs2ver}, {0, 0, 0, 0} }; diff -r e23fc1228efd -r f77480d3dd21 rvinterf/etmsync/interf.c --- a/rvinterf/etmsync/interf.c Mon Feb 24 03:42:47 2014 +0000 +++ b/rvinterf/etmsync/interf.c Mon Feb 24 04:41:57 2014 +0000 @@ -121,3 +121,36 @@ } return(0); } + +etm_pkt_exch(outbuf, outlen) + u_char *outbuf; +{ + int i, c; + + outbuf[0] = RVT_TM_HEADER; + c = 0; + for (i = 1; i <= outlen; i++) + c ^= outbuf[i]; + outbuf[i] = c; + target_pkt_exch(outbuf, outlen + 2); + if (rvi_msg[1] != RVT_TM_HEADER) { + printf("error: packet from target is not ETM!\n"); + return(ERROR_TARGET); + } + if (rvi_msg_len < 5) { + printf("error: ETM response packet is too short\n"); + return(ERROR_TARGET); + } + c = 0; + for (i = 2; i < rvi_msg_len; i++) + c ^= rvi_msg[i]; + if (c) { + printf("ETM response checksum error!\n"); + return(ERROR_TARGET); + } + if (rvi_msg[2] != outbuf[1]) { + printf("error: target response is from wrong ETM component\n"); + return(ERROR_TARGET); + } + return(0); +}