# HG changeset patch # User Mychaela Falconia # Date 1477259549 0 # Node ID ea061975c883ab3cdc7aa8deab1dc3bdc1e71497 # Parent 5b4e345095c476c196ac40eeb36d6944585ae704 fc-tmsh: implemented sending of ETM audio load and save commands diff -r 5b4e345095c4 -r ea061975c883 rvinterf/tmsh/Makefile --- a/rvinterf/tmsh/Makefile Sun Oct 23 18:38:07 2016 +0000 +++ b/rvinterf/tmsh/Makefile Sun Oct 23 21:52:29 2016 +0000 @@ -4,8 +4,8 @@ INSTBIN=/usr/local/bin LIBS= ../libasync/libasync.a -TMSH_OBJS= abb.o etmbasic.o ffs2.o ffs2resp.o ffs2wr.o init.o main.o \ - misc.o omr.o pktsort.o tmcore.o usercmd.o +TMSH_OBJS= abb.o audiocmd.o etmbasic.o ffs2.o ffs2resp.o ffs2wr.o init.o \ + main.o misc.o omr.o pktsort.o tmcore.o usercmd.o all: ${PROGS} diff -r 5b4e345095c4 -r ea061975c883 rvinterf/tmsh/audiocmd.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rvinterf/tmsh/audiocmd.c Sun Oct 23 21:52:29 2016 +0000 @@ -0,0 +1,89 @@ +/* + * ETM audio commands + */ + +#include +#include +#include +#include +#include +#include "limits.h" +#include "localtypes.h" +#include "etm.h" + +void +cmd_audio_load(argc, argv) + char **argv; +{ + u_char cmdpkt[MAX_PKT_TO_TARGET], *dp; + int slen; + + slen = strlen(argv[1]); + if (slen > 9) { + printf("error: audio config name is limited to 9 chars\n"); + return; + } + dp = cmdpkt + 1; + *dp++ = ETM_AUDIO; + *dp++ = 'L'; + strcpy(dp, argv[1]); + dp += slen + 1; + send_etm_cmd(cmdpkt, dp - cmdpkt - 1); +} + +void +cmd_audio_save(argc, argv) + char **argv; +{ + u_char cmdpkt[MAX_PKT_TO_TARGET], *dp; + int slen; + + slen = strlen(argv[1]); + if (slen > 9) { + printf("error: audio config name is limited to 9 chars\n"); + return; + } + dp = cmdpkt + 1; + *dp++ = ETM_AUDIO; + *dp++ = 'S'; + strcpy(dp, argv[1]); + dp += slen + 1; + send_etm_cmd(cmdpkt, dp - cmdpkt - 1); +} + +static struct cmdtab { + char *cmd; + int minargs; + int maxargs; + void (*func)(); +} audio_cmds[] = { + {"load", 1, 1, cmd_audio_load}, + {"save", 1, 1, cmd_audio_save}, + {0, 0, 0, 0} +}; + +void +cmd_audio(argc, argv) + char **argv; +{ + struct cmdtab *tp; + int extargs; + + for (tp = audio_cmds; tp->cmd; tp++) + if (!strcmp(tp->cmd, argv[1])) + break; + if (!tp->func) { + printf("error: no such audio command\n"); + return; + } + extargs = argc - 2; + if (extargs > tp->maxargs) { + printf("error: too many arguments\n"); + return; + } + if (extargs < tp->minargs) { + printf("error: too few arguments\n"); + return; + } + tp->func(argc - 1, argv + 1); +} diff -r 5b4e345095c4 -r ea061975c883 rvinterf/tmsh/usercmd.c --- a/rvinterf/tmsh/usercmd.c Sun Oct 23 18:38:07 2016 +0000 +++ b/rvinterf/tmsh/usercmd.c Sun Oct 23 21:52:29 2016 +0000 @@ -13,6 +13,7 @@ extern void cmd_abbr(); extern void cmd_abbw(); +extern void cmd_audio(); extern void cmd_check_ffs1(); extern void cmd_dieid(); extern void cmd_etmpkt(); @@ -46,6 +47,7 @@ } cmdtab[] = { {"abbr", 2, 2, cmd_abbr}, {"abbw", 3, 3, cmd_abbw}, + {"audio", 2, 2, cmd_audio}, {"check-ffs1", 0, 0, cmd_check_ffs1}, {"dieid", 0, 0, cmd_dieid}, {"etmpkt", 1, 253, cmd_etmpkt},