dump/set rc_mode
authorOlivier Matz <zer0@droids-corp.org>
Mon, 28 Apr 2014 20:42:52 +0000 (22:42 +0200)
committerOlivier Matz <zer0@droids-corp.org>
Tue, 6 May 2014 19:12:31 +0000 (21:12 +0200)
commands.c

index c6a4189..ddce65f 100644 (file)
@@ -1613,6 +1613,143 @@ const parse_inst_t PROGMEM cmd_rc_proto_stats = {
 
 /**********************************************************/
 
+/* this structure is filled when cmd_rc_proto_mode is parsed successfully */
+struct cmd_rc_proto_mode_result {
+       fixed_string_t arg0;
+       fixed_string_t cmd;
+       fixed_string_t val;
+};
+
+static void cmd_rc_proto_mode_parsed(void *parsed_result, void *data)
+{
+       struct cmd_rc_proto_mode_result *res = parsed_result;
+       (void)data;
+       uint8_t flags;
+       uint8_t on = 0;
+
+       flags = rc_proto_get_mode();
+       if (!strcmp_P(res->val, PSTR("on")))
+               on = 1;
+
+       if (!strcmp_P(res->cmd, PSTR("rx_copy_spi"))) {
+               if (on == 1)
+                       flags |= RC_PROTO_FLAGS_RX_COPY_SPI;
+               else
+                       flags &= ~RC_PROTO_FLAGS_RX_COPY_SPI;
+       }
+       else if (!strcmp_P(res->cmd, PSTR("rx_autobypass"))) {
+               if (on == 1)
+                       flags |= RC_PROTO_FLAGS_RX_AUTOBYPASS;
+               else
+                       flags &= ~RC_PROTO_FLAGS_RX_AUTOBYPASS;
+       }
+       else if (!strcmp_P(res->cmd, PSTR("tx_stats"))) {
+               if (on == 1)
+                       flags |= RC_PROTO_FLAGS_TX_STATS;
+               else
+                       flags &= ~RC_PROTO_FLAGS_TX_STATS;
+       }
+       else if (!strcmp_P(res->cmd, PSTR("tx_power_probe"))) {
+               if (on == 1)
+                       flags |= RC_PROTO_FLAGS_TX_POW_PROBE;
+               else
+                       flags &= ~RC_PROTO_FLAGS_TX_POW_PROBE;
+       }
+       else if (!strcmp_P(res->cmd, PSTR("tx"))) {
+               flags &= ~RC_PROTO_FLAGS_TX_MASK;
+               if (!strcmp_P(res->val, PSTR("bypass")))
+                       flags |= RC_PROTO_FLAGS_TX_BYPASS;
+               else if (!strcmp_P(res->val, PSTR("copy_spi")))
+                       flags |= RC_PROTO_FLAGS_TX_COPY_SPI;
+       }
+       rc_proto_set_mode(flags);
+
+       /* dump state */
+       if ((flags & RC_PROTO_FLAGS_TX_MASK) == RC_PROTO_FLAGS_TX_OFF)
+               printf_P(PSTR("rc_proto_mode tx off\n"));
+       else if ((flags & RC_PROTO_FLAGS_TX_MASK) == RC_PROTO_FLAGS_TX_BYPASS)
+               printf_P(PSTR("rc_proto_mode tx bypass\n"));
+       else if ((flags & RC_PROTO_FLAGS_TX_MASK) == RC_PROTO_FLAGS_TX_COPY_SPI)
+               printf_P(PSTR("rc_proto_mode tx copy_spi\n"));
+       printf_P(PSTR("rc_proto_mode rx_copy_spi %s\n"),
+               (flags & RC_PROTO_FLAGS_RX_COPY_SPI) ? "on" : "off");
+       printf_P(PSTR("rc_proto_mode rx_autobypass %s\n"),
+               (flags & RC_PROTO_FLAGS_RX_AUTOBYPASS) ? "on" : "off");
+       printf_P(PSTR("rc_proto_mode tx_stats %s\n"),
+               (flags & RC_PROTO_FLAGS_TX_STATS) ? "on" : "off");
+       printf_P(PSTR("rc_proto_mode tx_power_probe %s\n"),
+               (flags & RC_PROTO_FLAGS_TX_POW_PROBE) ? "on" : "off");
+}
+
+const char PROGMEM str_rc_proto_mode_arg0[] = "rc_proto_mode";
+const parse_token_string_t PROGMEM cmd_rc_proto_mode_arg0 =
+       TOKEN_STRING_INITIALIZER(struct cmd_rc_proto_mode_result, arg0,
+                                str_rc_proto_mode_arg0);
+
+const char PROGMEM str_rc_proto_mode_cmd[] =
+       "rx_copy_spi#rx_autobypass#tx_stats#tx_power_probe";
+const parse_token_string_t PROGMEM cmd_rc_proto_mode_cmd =
+       TOKEN_STRING_INITIALIZER(struct cmd_rc_proto_mode_result, cmd,
+               str_rc_proto_mode_cmd);
+
+const char PROGMEM str_rc_proto_mode_onoff[] = "on#off";
+const parse_token_string_t PROGMEM cmd_rc_proto_mode_onoff =
+       TOKEN_STRING_INITIALIZER(struct cmd_rc_proto_mode_result, val,
+                                str_rc_proto_mode_onoff);
+
+const char PROGMEM help_rc_proto_mode[] = "Set rc proto behavior";
+const parse_inst_t PROGMEM cmd_rc_proto_mode = {
+       .f = cmd_rc_proto_mode_parsed,  /* function to call */
+       .data = NULL,      /* 2nd arg of func */
+       .help_str = help_rc_proto_mode,
+       .tokens = {        /* token list, NULL terminated */
+               (PGM_P)&cmd_rc_proto_mode_arg0,
+               (PGM_P)&cmd_rc_proto_mode_cmd,
+               (PGM_P)&cmd_rc_proto_mode_onoff,
+               NULL,
+       },
+};
+
+const char PROGMEM str_rc_proto_mode_cmd2[] = "tx";
+const parse_token_string_t PROGMEM cmd_rc_proto_mode_cmd2 =
+       TOKEN_STRING_INITIALIZER(struct cmd_rc_proto_mode_result, cmd,
+               str_rc_proto_mode_cmd2);
+
+const char PROGMEM str_rc_proto_mode_val[] = "off#bypass#copy_spi";
+const parse_token_string_t PROGMEM cmd_rc_proto_mode_val =
+       TOKEN_STRING_INITIALIZER(struct cmd_rc_proto_mode_result, val,
+                                str_rc_proto_mode_val);
+
+const parse_inst_t PROGMEM cmd_rc_proto_mode2 = {
+       .f = cmd_rc_proto_mode_parsed,  /* function to call */
+       .data = NULL,      /* 2nd arg of func */
+       .help_str = help_rc_proto_mode,
+       .tokens = {        /* token list, NULL terminated */
+               (PGM_P)&cmd_rc_proto_mode_arg0,
+               (PGM_P)&cmd_rc_proto_mode_cmd2,
+               (PGM_P)&cmd_rc_proto_mode_val,
+               NULL,
+       },
+};
+
+const char PROGMEM str_rc_proto_mode_cmd3[] = "show";
+const parse_token_string_t PROGMEM cmd_rc_proto_mode_cmd3 =
+       TOKEN_STRING_INITIALIZER(struct cmd_rc_proto_mode_result, cmd,
+               str_rc_proto_mode_cmd3);
+
+const parse_inst_t PROGMEM cmd_rc_proto_mode3 = {
+       .f = cmd_rc_proto_mode_parsed,  /* function to call */
+       .data = NULL,      /* 2nd arg of func */
+       .help_str = help_rc_proto_mode,
+       .tokens = {        /* token list, NULL terminated */
+               (PGM_P)&cmd_rc_proto_mode_arg0,
+               (PGM_P)&cmd_rc_proto_mode_cmd3,
+               NULL,
+       },
+};
+
+/**********************************************************/
+
 /* this structure is filled when cmd_rc_proto_hello is parsed successfully */
 struct cmd_rc_proto_hello_result {
        fixed_string_t rc_proto_hello;
@@ -2056,6 +2193,9 @@ const parse_ctx_t PROGMEM main_ctx[] = {
        &cmd_test_spi,
        &cmd_dump_xbee_stats,
        &cmd_rc_proto_stats,
+       &cmd_rc_proto_mode,
+       &cmd_rc_proto_mode2,
+       &cmd_rc_proto_mode3,
        &cmd_rc_proto_hello,
        &cmd_rc_proto_hello_name,
        &cmd_rc_proto_echo,