X-Git-Url: http://git.droids-corp.org/?p=protos%2Fxbee-avr.git;a=blobdiff_plain;f=commands.c;h=c6a6cc9c9efbdb6cfb7bf0d0f118ad335b06b494;hp=c827001104b97df9a4dc91253454f23a7c9c1c29;hb=859f064e214825eceeef724007a52e96ea1fb407;hpb=c18c4cbfa3c43bc1f4fd1743f77baf82c18437f6 diff --git a/commands.c b/commands.c index c827001..c6a6cc9 100644 --- a/commands.c +++ b/commands.c @@ -1613,6 +1613,93 @@ const parse_inst_t PROGMEM cmd_rc_proto_stats = { /**********************************************************/ +/* this structure is filled when cmd_rc_proto_timers is parsed successfully */ +struct cmd_rc_proto_timers_result { + fixed_string_t arg0; + fixed_string_t arg1; + uint16_t servo_min; + uint16_t servo_max; + uint16_t power_probe; + uint16_t autobypass; +}; + +static void cmd_rc_proto_timers_parsed(void *parsed_result, void *data) +{ + struct cmd_rc_proto_timers_result *res = parsed_result; + (void)data; + + if (!strcmp_P(res->arg1, PSTR("set"))) { + rc_proto_timers.send_servo_min_ms = res->servo_min; + rc_proto_timers.send_servo_max_ms = res->servo_max; + rc_proto_timers.send_power_probe_ms = res->power_probe; + rc_proto_timers.autobypass_ms = res->autobypass; + } + + printf_P(PSTR("rc_proto_timers: min=%d, max=%d, " + "power_probe=%d autobypass=%d\n"), + rc_proto_timers.send_servo_min_ms, + rc_proto_timers.send_servo_max_ms, + rc_proto_timers.send_power_probe_ms, + rc_proto_timers.autobypass_ms); +} + +const char PROGMEM str_rc_proto_timers_arg0[] = "rc_proto_timers"; +const parse_token_string_t PROGMEM cmd_rc_proto_timers_arg0 = + TOKEN_STRING_INITIALIZER(struct cmd_rc_proto_timers_result, arg0, + str_rc_proto_timers_arg0); +const char PROGMEM str_rc_proto_timers_arg1[] = "set"; +const parse_token_string_t PROGMEM cmd_rc_proto_timers_arg1 = + TOKEN_STRING_INITIALIZER(struct cmd_rc_proto_timers_result, arg1, + str_rc_proto_timers_arg1); +const parse_token_num_t PROGMEM cmd_rc_proto_timers_servo_min = + TOKEN_NUM_INITIALIZER(struct cmd_rc_proto_timers_result, servo_min, + UINT16); +const parse_token_num_t PROGMEM cmd_rc_proto_timers_servo_max = + TOKEN_NUM_INITIALIZER(struct cmd_rc_proto_timers_result, servo_max, + UINT16); +const parse_token_num_t PROGMEM cmd_rc_proto_timers_power_probe = + TOKEN_NUM_INITIALIZER(struct cmd_rc_proto_timers_result, power_probe, + UINT16); +const parse_token_num_t PROGMEM cmd_rc_proto_timers_autobypass = + TOKEN_NUM_INITIALIZER(struct cmd_rc_proto_timers_result, autobypass, + UINT16); + +const char PROGMEM help_rc_proto_timers[] = "set rc_proto_timers (servo_min, " + "servo_max, pow_probe, autobypass)"; +const parse_inst_t PROGMEM cmd_rc_proto_timers = { + .f = cmd_rc_proto_timers_parsed, /* function to call */ + .data = NULL, /* 2nd arg of func */ + .help_str = help_rc_proto_timers, + .tokens = { /* token list, NULL terminated */ + (PGM_P)&cmd_rc_proto_timers_arg0, + (PGM_P)&cmd_rc_proto_timers_arg1, + (PGM_P)&cmd_rc_proto_timers_servo_min, + (PGM_P)&cmd_rc_proto_timers_servo_max, + (PGM_P)&cmd_rc_proto_timers_power_probe, + (PGM_P)&cmd_rc_proto_timers_autobypass, + NULL, + }, +}; + +const char PROGMEM str_rc_proto_timers_show_arg1[] = "show"; +const parse_token_string_t PROGMEM cmd_rc_proto_timers_show_arg1 = + TOKEN_STRING_INITIALIZER(struct cmd_rc_proto_timers_result, arg1, + str_rc_proto_timers_show_arg1); + +const char PROGMEM help_rc_proto_timers_show[] = "show rc_proto timers value"; +const parse_inst_t PROGMEM cmd_rc_proto_timers_show = { + .f = cmd_rc_proto_timers_parsed, /* function to call */ + .data = NULL, /* 2nd arg of func */ + .help_str = help_rc_proto_timers_show, + .tokens = { /* token list, NULL terminated */ + (PGM_P)&cmd_rc_proto_timers_arg0, + (PGM_P)&cmd_rc_proto_timers_show_arg1, + NULL, + }, +}; + +/**********************************************************/ + /* this structure is filled when cmd_rc_proto_mode is parsed successfully */ struct cmd_rc_proto_mode_result { fixed_string_t arg0; @@ -1655,6 +1742,12 @@ static void cmd_rc_proto_mode_parsed(void *parsed_result, void *data) else flags &= ~RC_PROTO_FLAGS_TX_POW_PROBE; } + else if (!strcmp_P(res->cmd, PSTR("compute_best_pow"))) { + if (on == 1) + flags |= RC_PROTO_FLAGS_COMPUTE_BEST_POW; + else + flags &= ~RC_PROTO_FLAGS_COMPUTE_BEST_POW; + } else if (!strcmp_P(res->cmd, PSTR("tx"))) { flags &= ~RC_PROTO_FLAGS_TX_MASK; if (!strcmp_P(res->val, PSTR("bypass"))) @@ -1679,6 +1772,8 @@ static void cmd_rc_proto_mode_parsed(void *parsed_result, void *data) (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"); + printf_P(PSTR("rc_proto_mode compute_best_pow %s\n"), + (flags & RC_PROTO_FLAGS_COMPUTE_BEST_POW) ? "on" : "off"); } const char PROGMEM str_rc_proto_mode_arg0[] = "rc_proto_mode"; @@ -1687,7 +1782,7 @@ const parse_token_string_t PROGMEM cmd_rc_proto_mode_arg0 = str_rc_proto_mode_arg0); const char PROGMEM str_rc_proto_mode_cmd[] = - "rx_copy_spi#rx_autobypass#tx_stats#tx_power_probe"; + "rx_copy_spi#rx_autobypass#tx_stats#tx_power_probe#compute_best_pow"; 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); @@ -2192,6 +2287,8 @@ const parse_ctx_t PROGMEM main_ctx[] = { &cmd_test_spi, &cmd_dump_xbee_stats, &cmd_rc_proto_stats, + &cmd_rc_proto_timers, + &cmd_rc_proto_timers_show, &cmd_rc_proto_mode, &cmd_rc_proto_mode2, &cmd_rc_proto_mode3,