beep when GPS ready
[protos/xbee-avr.git] / commands.c
index dc88a06..d67b651 100644 (file)
@@ -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,
 };