FreeCalypso > hg > freecalypso-sw
diff rvinterf/asyncshell/tchcmd.c @ 1026:f511bbac0efa
fc-shell: beginning of TCH code expansion
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 30 May 2016 22:45:48 +0000 |
parents | 9ced8e13cf91 |
children | 1178befeda76 |
line wrap: on
line diff
--- a/rvinterf/asyncshell/tchcmd.c Tue May 03 23:46:54 2016 +0000 +++ b/rvinterf/asyncshell/tchcmd.c Mon May 30 22:45:48 2016 +0000 @@ -9,8 +9,14 @@ #include <strings.h> #include <stdlib.h> #include "pktmux.h" +#include "limits.h" #include "tch_feature.h" +extern u_char rvi_msg[]; +extern int rvi_msg_len; + +static int tch_rawdump_mode; + send_tch_config_req(config) { u_char sendpkt[3]; @@ -60,3 +66,55 @@ { return cmd_tchdl_common(argc - 1, argv + 1); } + +static void +tch_rawdump() +{ + char buf[MAX_PKT_FROM_TARGET*3+5], *dp; + u_char *cp, *endp; + + cp = rvi_msg + 2; + endp = rvi_msg + rvi_msg_len; + strcpy(buf, "TCH:"); + dp = buf + 4; + while (cp < endp) { + sprintf(dp, " %02X", *cp++); + dp += 3; + } + *dp = '\0'; + async_msg_output(buf); +} + +void +tch_packet_rx() +{ + char buf[128]; + + if (tch_rawdump_mode) { + tch_rawdump(); + return; + } + if (rvi_msg_len < 3) { +inv: async_msg_output("Error: invalid TCH packet received"); + return; + } + switch (rvi_msg[2]) { + case TCH_CONFIG_CONF: + if (rvi_msg_len != 4) + goto inv; + if (rvi_msg[3] & 0xFE) + goto inv; + sprintf(buf, "TCH_CONFIG_CONF: DL forwarding is %s", + rvi_msg[3] ? "enabled" : "disabled"); + async_msg_output(buf); + return; + case TCH_ULBITS_CONF: + /* TCH UL play code will hook in here */ + return; + case TCH_DLBITS_IND: + /* TCH DL record code will hook in here */ + return; + default: + goto inv; + } +}