X-Git-Url: http://git.droids-corp.org/?p=protos%2Fxbee-avr.git;a=blobdiff_plain;f=commands.c;h=d67b6515ba1bc60b88620f9c798c9f030f399f3c;hp=dc88a0698435615b07c5b7e1169ab3a229a2f87a;hb=HEAD;hpb=6811941dc02f68dd0305a30f3c1cf72a23566b6b diff --git a/commands.c b/commands.c index dc88a06..d67b651 100644 --- a/commands.c +++ b/commands.c @@ -48,6 +48,8 @@ #include "main.h" #include "cmdline.h" #include "beep.h" +#include "../fpv-common/i2c_commands.h" +#include "i2c_protocol.h" #include "eeprom_config.h" /* commands_gen.c */ @@ -1742,6 +1744,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"))) @@ -1766,6 +1774,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"; @@ -1774,7 +1784,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); @@ -2236,6 +2246,54 @@ const parse_inst_t PROGMEM cmd_eeprom_list = { }; +/* ************* */ + +struct cmd_dump_i2c_result { + fixed_string_t cmd; +}; + +static void cmd_dump_i2c_parsed(void *parsed_result, void *data) +{ + struct i2c_ans_imuboard_status imu; + uint8_t irq_flags; + + (void)parsed_result; + (void)data; + + while (!cmdline_keypressed()) { + IRQ_LOCK(irq_flags); + memcpy(&imu, &imuboard_status, sizeof(imu)); + IRQ_UNLOCK(irq_flags); + + if (imu.flags & IMUBOARD_STATUS_GPS_OK) { + printf_P(PSTR("GPS lat=%"PRIi32" long=%"PRIi32 + " alt=%"PRIi32"\n"), + imu.latitude, imu.longitude, imu.altitude); + } + else + printf_P(PSTR("GPS unavailable\n")); + i2c_protocol_debug(); + wait_ms(100); + } +} + +const char PROGMEM str_dump_i2c[] = "dump_i2c"; +const parse_token_string_t PROGMEM cmd_dump_i2c_cmd = + TOKEN_STRING_INITIALIZER(struct cmd_dump_i2c_result, cmd, + str_dump_i2c); + +const char PROGMEM help_dump_i2c[] = "dump_i2c"; +const parse_inst_t PROGMEM cmd_dump_i2c = { + .f = cmd_dump_i2c_parsed, /* function to call */ + .data = NULL, /* 2nd arg of func */ + .help_str = help_dump_i2c, + .tokens = { /* token list, NULL terminated */ + (PGM_P)&cmd_dump_i2c_cmd, + NULL, + }, +}; + + /* ************* */ /* in progmem */ @@ -2293,5 +2351,6 @@ const parse_ctx_t PROGMEM main_ctx[] = { &cmd_eeprom_add, &cmd_eeprom_add2, &cmd_eeprom_list, + &cmd_dump_i2c, NULL, };