# HG changeset patch # User Michael Spacefalcon # Date 1391585562 0 # Node ID b5b54feb111a050ba5ad4f3b0d56ef4e613cbb18 # Parent 577291a2ad761de7ef685b1698b3984674e1665e fc-tmsh: set-imeisv command implemented diff -r 577291a2ad76 -r b5b54feb111a rvinterf/tmsh/Makefile --- a/rvinterf/tmsh/Makefile Wed Feb 05 06:51:09 2014 +0000 +++ b/rvinterf/tmsh/Makefile Wed Feb 05 07:32:42 2014 +0000 @@ -3,8 +3,9 @@ PROGS= fc-tmsh INSTBIN=/usr/local/bin -TMSH_OBJS= abb.o etmbasic.o ffs2.o ffs2resp.o init.o interf.o launchrvif.o\ - main.o misc.o pktsort.o tmcore.o ttymagic.o usercmd.o +TMSH_OBJS= abb.o etmbasic.o ffs2.o ffs2resp.o ffs2wr.o init.o interf.o \ + launchrvif.o main.o misc.o pktsort.o tmcore.o ttymagic.o \ + usercmd.o all: ${PROGS} diff -r 577291a2ad76 -r b5b54feb111a rvinterf/tmsh/ffs2.c --- a/rvinterf/tmsh/ffs2.c Wed Feb 05 06:51:09 2014 +0000 +++ b/rvinterf/tmsh/ffs2.c Wed Feb 05 07:32:42 2014 +0000 @@ -7,7 +7,6 @@ #include #include #include -#include "pktmux.h" #include "limits.h" #include "localtypes.h" #include "etm.h" diff -r 577291a2ad76 -r b5b54feb111a rvinterf/tmsh/ffs2wr.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rvinterf/tmsh/ffs2wr.c Wed Feb 05 07:32:42 2014 +0000 @@ -0,0 +1,68 @@ +/* + * In this module we are going to implement some high-level FFS write + * operations, using the TMFFS2 protocol. + */ + +#include +#include +#include +#include +#include +#include +#include "limits.h" +#include "localtypes.h" +#include "etm.h" +#include "ffs.h" +#include "tmffs2.h" + +void +cmd_set_imeisv(argc, argv) + char **argv; +{ + char *filename, *cp, digits[16]; + u_char bytes[8], cmdpkt[MAX_PKT_TO_TARGET], *dp; + int pcm_order, i; + + if (!strcmp(argv[1], "pcm")) { + filename = "/pcm/IMEI"; + pcm_order = 1; + } else if (!strcmp(argv[1], "fc")) { + filename = "/etc/IMEISV"; + pcm_order = 0; + } else { + printf( + "error: IMEISV storage type argument must be \"pcm\" or \"fc\"\n"); + return; + } + cp = argv[2]; + if (!isdigit(*cp)) { +inv: printf("error: 2nd argument must have 16 decimal digits\n"); + return; + } + for (i = 0; i < 16; i++) { + if (ispunct(*cp)) + cp++; + if (!isdigit(*cp)) + goto inv; + digits[i] = *cp++ - '0'; + } + if (*cp) + goto inv; + for (i = 0; i < 8; i++) + bytes[i] = pcm_order ? digits[i*2+1] << 4 | digits[i*2] + : digits[i*2] << 4 | digits[i*2+1]; + printf("Writing \"%02X %02X %02X %02X %02X %02X %02X %02X\" into %s\n", + bytes[0], bytes[1], bytes[2], bytes[3], bytes[4], bytes[5], + bytes[6], bytes[7], filename); + dp = cmdpkt + 1; + *dp++ = ETM_FFS2; + *dp++ = TMFFS_FILE_WRITE; + *dp++ = strlen(filename) + 1; + strcpy(dp, filename); + dp += strlen(filename) + 1; + *dp++ = 8; /* data size in bytes */ + bcopy(bytes, dp, 8); + dp += 8; + *dp++ = FFS_O_CREATE | FFS_O_TRUNC; + send_etm_cmd(cmdpkt, dp - cmdpkt - 1); +} diff -r 577291a2ad76 -r b5b54feb111a rvinterf/tmsh/usercmd.c --- a/rvinterf/tmsh/usercmd.c Wed Feb 05 06:51:09 2014 +0000 +++ b/rvinterf/tmsh/usercmd.c Wed Feb 05 07:32:42 2014 +0000 @@ -21,6 +21,7 @@ extern void cmd_r8(); extern void cmd_r16(); extern void cmd_r32(); +extern void cmd_set_imeisv(); extern void cmd_tgtreset(); extern void cmd_version(); extern void cmd_w8(); @@ -52,6 +53,7 @@ {"r8", 1, 2, cmd_r8}, {"r16", 1, 2, cmd_r16}, {"r32", 1, 2, cmd_r32}, + {"set-imeisv", 2, 2, cmd_set_imeisv}, {"tgtreset", 0, 0, cmd_tgtreset}, {"version", 1, 1, cmd_version}, {"w8", 2, 246, cmd_w8},