FreeCalypso > hg > freecalypso-tools
view rvinterf/tmsh/bsimresp.c @ 924:d452188587b4
rvinterf: begin change to backslash escape output format
Right now throughout the rvinterf suite, any time we emit output that
is expected to be ASCII, but may contain non-printable garbage, we use
'cat -v' form of garbage character representation. Unfortunately, this
transformation is lossy (can't be reversed 100% reliably in the user's
wetware), hence we would like to migrate to C-style backslash escapes,
including doubling of any already-present backslashes - this escape
mechanism is lossless. Begin this change by converting the output
of RV and L1 traces in rvinterf and rvtdump.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Tue, 23 May 2023 03:10:50 +0000 |
parents | 9706832b740b |
children |
line wrap: on
line source
/* * Handling of ETM_BSIM responses (FreeCalypso addition to fw) */ #include <sys/types.h> #include <stdio.h> #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"); }