# HG changeset patch # User Mychaela Falconia # Date 1621040452 0 # Node ID 9706832b740b6303e32ed6c48610a75105382979 # Parent b3724fe6c5818edcfa9fcacb8e1124066a2640c9 fc-tmsh: ETM_BSIM response handling implemented diff -r b3724fe6c581 -r 9706832b740b rvinterf/tmsh/Makefile --- a/rvinterf/tmsh/Makefile Fri May 14 17:16:43 2021 +0000 +++ b/rvinterf/tmsh/Makefile Sat May 15 01:00:52 2021 +0000 @@ -2,9 +2,9 @@ CFLAGS= -O2 CPPFLAGS=-I../include PROG= fc-tmsh -OBJS= abb.o abbtm3.o audiocmd.o audioresp.o bsimcmd.o etmbasic.o ffs2.o \ - ffs2resp.o init.o l1cmd.o l1resp.o main.o misc.o omr.o omw.o oneshot.o \ - pktsort.o rftablechk.o saverftab.o tmcore.o usercmd.o +OBJS= abb.o abbtm3.o audiocmd.o audioresp.o bsimcmd.o bsimresp.o etmbasic.o \ + ffs2.o ffs2resp.o init.o l1cmd.o l1resp.o main.o misc.o omr.o omw.o \ + oneshot.o pktsort.o rftablechk.o saverftab.o tmcore.o usercmd.o LIBS= ../libasync/libasync.a ../libinterf/libinterf.a \ ../../librftab/librftab.a diff -r b3724fe6c581 -r 9706832b740b rvinterf/tmsh/bsimresp.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rvinterf/tmsh/bsimresp.c Sat May 15 01:00:52 2021 +0000 @@ -0,0 +1,80 @@ +/* + * Handling of ETM_BSIM responses (FreeCalypso addition to fw) + */ + +#include +#include +#include "bsim_etm_cmd.h" + +extern u_char rvi_msg[]; +extern int rvi_msg_len; + +static char *cmd_names[] = { + "query", "disch", "start", "ci2cv", "complete", "ichg", "start-enable" +}; + +static void +handle_bsim_error() +{ + char *errstr; + char msg[80]; + + if (rvi_msg_len != 6) { + print_etm_pkt_raw("ETM_BSIM long error packet"); + return; + } + switch (rvi_msg[3]) { + case BSIM_ERR_BAD_CMD: + errstr = "bad command opcode"; + break; + case BSIM_ERR_WRONG_STATE: + errstr = "wrong state"; + break; + case BSIM_ERR_INV_PERCENT: + errstr = "invalid percent"; + break; + case BSIM_ERR_INV_DISCHARGE: + errstr = "invalid discharge"; + break; + default: + errstr = "unknown"; + } + sprintf(msg, "bsim %s error 0x%02X (%s)", cmd_names[rvi_msg[4]], + rvi_msg[3], errstr); + async_msg_output(msg); +} + +void +handle_bsim_response() +{ + char msg[80]; + + if (rvi_msg_len == 5 && rvi_msg[3] == 0x3C) { + async_msg_output("bsim: ETM_NOSYS response"); + return; + } + if (rvi_msg_len < 6) { + print_etm_pkt_raw("ETM_BSIM response too short"); + return; + } + if (rvi_msg[4] > BSIM_CMD_START_ENABLE) { + print_etm_pkt_raw("ETM_BSIM unknown opcode"); + return; + } + if (rvi_msg[3]) { + handle_bsim_error(); + return; + } + if (rvi_msg_len == 6) { + sprintf(msg, "bsim %s OK", cmd_names[rvi_msg[4]]); + async_msg_output(msg); + return; + } + if (rvi_msg[4] == BSIM_CMD_QUERY && rvi_msg_len == 9) { + sprintf(msg, "bsim: state=%u percent=%u start_enable=%u", + rvi_msg[5], rvi_msg[6], rvi_msg[7]); + async_msg_output(msg); + return; + } + print_etm_pkt_raw("ETM_BSIM response wrong length"); +} diff -r b3724fe6c581 -r 9706832b740b rvinterf/tmsh/etmbasic.c --- a/rvinterf/tmsh/etmbasic.c Fri May 14 17:16:43 2021 +0000 +++ b/rvinterf/tmsh/etmbasic.c Sat May 15 01:00:52 2021 +0000 @@ -67,6 +67,11 @@ goto runt; etm_audio_msg_rx(); return; + case ETM_BSIM: + if (rvi_msg_len < 5) + goto runt; + handle_bsim_response(); + return; /* TM3 */ case MEM_READ: if (rvi_msg_len < 5)