FreeCalypso > hg > freecalypso-sw
diff rvinterf/asyncshell/rxctl.c @ 874:72d64c172d85
fc-shell: Rx control implemented
author | Space Falcon <falcon@ivan.Harhan.ORG> |
---|---|
date | Sat, 30 May 2015 07:20:50 +0000 |
parents | |
children | c9f353b5d70c |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rvinterf/asyncshell/rxctl.c Sat May 30 07:20:50 2015 +0000 @@ -0,0 +1,89 @@ +/* + * This module contains the code for enabling and disabling the receiving + * of various packet types via rvinterf. + */ + +#include <sys/types.h> +#include <stdio.h> +#include <ctype.h> +#include <string.h> +#include <strings.h> +#include <stdlib.h> +#include "pktmux.h" +#include "localsock.h" + +void +send_rxctl_cmd(channel, enable) +{ + u_char cmdbuf[2]; + + cmdbuf[0] = enable ? CLI2RVI_WANT_MUXPROTO : CLI2RVI_DROP_MUXPROTO; + cmdbuf[1] = channel; + send_init_command(cmdbuf, 2); +} + +void +ati_rx_control(newstate) +{ + static int state = 0; + + if (state == newstate) + return; + send_rxctl_cmd(RVT_AT_HEADER, newstate); + state = newstate; +} + +void +gpf_rx_control(newstate) +{ + static int state = 0; + + if (state == newstate) + return; + send_rxctl_cmd(RVT_L23_HEADER, newstate); + state = newstate; +} + +void +rxctl_user_cmd(args, enable) + char *args; +{ + char *cp, *np; + int gotsome = 0; + + for (cp = args; ; ) { + while (isspace(*cp)) + cp++; + if (!*cp) { + if (!gotsome) + printf("error: argument required\n"); + return; + } + for (np = cp; *cp && !isspace(*cp); cp++) + ; + if (*cp) + *cp++ = '\0'; + if (!strcmp(np, "ati")) + ati_rx_control(enable); + else if (!strcmp(np, "gpf")) + gpf_rx_control(enable); + else { + printf("error: unknown channel \"%s\"\n", np); + return; + } + } +} + +void +cmd_enable(args) + char *args; +{ + rxctl_user_cmd(args, 1); +} + +void +cmd_disable(args) + char *args; +{ + rxctl_user_cmd(args, 0); +}