+ (prog_void *)&cmd_servo_carry_arg0,
+ (prog_void *)&cmd_servo_carry_arg1,
+ NULL,
+ },
+};
+
+/**********************************************************/
+/* Spickle tests */
+
+/* this structure is filled when cmd_spickle is parsed successfully */
+struct cmd_spickle_result {
+ fixed_string_t arg0;
+ fixed_string_t arg1;
+ fixed_string_t arg2;
+};
+
+/* function called when cmd_spickle is parsed successfully */
+static void cmd_spickle_parsed(void * parsed_result,
+ __attribute__((unused)) void *data)
+{
+ struct cmd_spickle_result * res = parsed_result;
+ uint8_t side;
+
+ if (!strcmp_P(res->arg1, PSTR("left")))
+ side = I2C_LEFT_SIDE;
+ else
+ side = I2C_RIGHT_SIDE;
+
+ if (!strcmp_P(res->arg2, PSTR("deploy"))) {
+ spickle_deploy(side);
+ }
+ else if (!strcmp_P(res->arg2, PSTR("pack"))) {
+ spickle_pack(side);
+ }
+ else if (!strcmp_P(res->arg2, PSTR("mid"))) {
+ spickle_mid(side);
+ }
+ printf_P(PSTR("done\r\n"));
+}
+
+prog_char str_spickle_arg0[] = "spickle";
+parse_pgm_token_string_t cmd_spickle_arg0 =
+ TOKEN_STRING_INITIALIZER(struct cmd_spickle_result, arg0, str_spickle_arg0);
+prog_char str_spickle_arg1[] = "left#right";
+parse_pgm_token_string_t cmd_spickle_arg1 =
+ TOKEN_STRING_INITIALIZER(struct cmd_spickle_result, arg1, str_spickle_arg1);
+prog_char str_spickle_arg2[] = "deploy#pack#mid";
+parse_pgm_token_string_t cmd_spickle_arg2 =
+ TOKEN_STRING_INITIALIZER(struct cmd_spickle_result, arg2, str_spickle_arg2);
+
+prog_char help_spickle[] = "move spickle";
+parse_pgm_inst_t cmd_spickle = {
+ .f = cmd_spickle_parsed, /* function to call */
+ .data = NULL, /* 2nd arg of func */
+ .help_str = help_spickle,
+ .tokens = { /* token list, NULL terminated */
+ (prog_void *)&cmd_spickle_arg0,
+ (prog_void *)&cmd_spickle_arg1,
+ (prog_void *)&cmd_spickle_arg2,
+ NULL,
+ },
+};
+
+/**********************************************************/
+/* Set Spickle Params */
+
+/* this structure is filled when cmd_spickle_params is parsed successfully */
+struct cmd_spickle_params_result {
+ fixed_string_t arg0;
+ fixed_string_t arg1;
+ fixed_string_t arg2;
+ int32_t arg3;
+ int32_t arg4;
+ int32_t arg5;
+};
+
+/* function called when cmd_spickle_params is parsed successfully */
+static void cmd_spickle_params_parsed(void *parsed_result,
+ __attribute__((unused)) void *data)
+{
+ struct cmd_spickle_params_result * res = parsed_result;
+ uint8_t side;
+
+ if (!strcmp_P(res->arg1, PSTR("show"))) {
+ spickle_dump_params();
+ return;
+ }
+
+ if (!strcmp_P(res->arg1, PSTR("left")))
+ side = I2C_LEFT_SIDE;
+ else
+ side = I2C_RIGHT_SIDE;
+
+ if (!strcmp_P(res->arg2, PSTR("pos")))
+ spickle_set_pos(side, res->arg3, res->arg4, res->arg5);
+}
+
+prog_char str_spickle_params_arg0[] = "spickle_params";
+parse_pgm_token_string_t cmd_spickle_params_arg0 =
+ TOKEN_STRING_INITIALIZER(struct cmd_spickle_params_result, arg0, str_spickle_params_arg0);
+prog_char str_spickle_params_arg1[] = "left#right";
+parse_pgm_token_string_t cmd_spickle_params_arg1 =
+ TOKEN_STRING_INITIALIZER(struct cmd_spickle_params_result, arg1, str_spickle_params_arg1);
+prog_char str_spickle_params_arg2[] = "pos";
+parse_pgm_token_string_t cmd_spickle_params_arg2 =
+ TOKEN_STRING_INITIALIZER(struct cmd_spickle_params_result, arg2, str_spickle_params_arg2);
+parse_pgm_token_num_t cmd_spickle_params_arg3 =
+ TOKEN_NUM_INITIALIZER(struct cmd_spickle_params_result, arg3, INT32);
+parse_pgm_token_num_t cmd_spickle_params_arg4 =
+ TOKEN_NUM_INITIALIZER(struct cmd_spickle_params_result, arg4, INT32);
+parse_pgm_token_num_t cmd_spickle_params_arg5 =
+ TOKEN_NUM_INITIALIZER(struct cmd_spickle_params_result, arg5, INT32);
+
+prog_char help_spickle_params[] = "Set spickle pos values: left|right pos INTPACK INTMID INTDEPL";
+parse_pgm_inst_t cmd_spickle_params = {
+ .f = cmd_spickle_params_parsed, /* function to call */
+ .data = NULL, /* 2nd arg of func */
+ .help_str = help_spickle_params,
+ .tokens = { /* token list, NULL terminated */
+ (prog_void *)&cmd_spickle_params_arg0,
+ (prog_void *)&cmd_spickle_params_arg1,
+ (prog_void *)&cmd_spickle_params_arg2,
+ (prog_void *)&cmd_spickle_params_arg3,
+ (prog_void *)&cmd_spickle_params_arg4,
+ (prog_void *)&cmd_spickle_params_arg5,
+ NULL,
+ },
+};
+
+prog_char str_spickle_params_arg1_show[] = "show";
+parse_pgm_token_string_t cmd_spickle_params_arg1_show =
+ TOKEN_STRING_INITIALIZER(struct cmd_spickle_params_result, arg1, str_spickle_params_arg1_show);
+
+prog_char help_spickle_params_show[] = "show spickle params";
+parse_pgm_inst_t cmd_spickle_params_show = {
+ .f = cmd_spickle_params_parsed, /* function to call */
+ .data = NULL, /* 2nd arg of func */
+ .help_str = help_spickle_params_show,
+ .tokens = { /* token list, NULL terminated */
+ (prog_void *)&cmd_spickle_params_arg0,
+ (prog_void *)&cmd_spickle_params_arg1_show,
+ NULL,
+ },
+};
+
+/**********************************************************/
+/* Set Spickle Params */
+
+/* this structure is filled when cmd_spickle_params2 is parsed successfully */
+struct cmd_spickle_params2_result {
+ fixed_string_t arg0;
+ fixed_string_t arg1;
+ int32_t arg2;
+ int32_t arg3;
+};
+
+/* function called when cmd_spickle_params2 is parsed successfully */
+static void cmd_spickle_params2_parsed(void *parsed_result,
+ __attribute__((unused)) void *data)
+{
+ struct cmd_spickle_params2_result * res = parsed_result;
+
+ if (!strcmp_P(res->arg1, PSTR("wcoef"))) {
+ spickle_set_wcoefs(res->arg2, res->arg3);
+ }
+ else if (!strcmp_P(res->arg1, PSTR("scoef"))) {
+ spickle_set_scoefs(res->arg2, res->arg3);
+ }
+
+ /* else show */
+ spickle_dump_params();
+}
+
+prog_char str_spickle_params2_arg0[] = "spickle_params";
+parse_pgm_token_string_t cmd_spickle_params2_arg0 =
+ TOKEN_STRING_INITIALIZER(struct cmd_spickle_params2_result, arg0, str_spickle_params2_arg0);
+prog_char str_spickle_params2_arg1[] = "wcoef#scoef";
+parse_pgm_token_string_t cmd_spickle_params2_arg1 =
+ TOKEN_STRING_INITIALIZER(struct cmd_spickle_params2_result, arg1, str_spickle_params2_arg1);
+parse_pgm_token_num_t cmd_spickle_params2_arg2 =
+ TOKEN_NUM_INITIALIZER(struct cmd_spickle_params2_result, arg2, INT32);
+parse_pgm_token_num_t cmd_spickle_params2_arg3 =
+ TOKEN_NUM_INITIALIZER(struct cmd_spickle_params2_result, arg3, INT32);
+
+prog_char help_spickle_params2[] = "Set spickle_params2 values";
+parse_pgm_inst_t cmd_spickle_params2 = {
+ .f = cmd_spickle_params2_parsed, /* function to call */
+ .data = NULL, /* 2nd arg of func */
+ .help_str = help_spickle_params2,
+ .tokens = { /* token list, NULL terminated */
+ (prog_void *)&cmd_spickle_params2_arg0,
+ (prog_void *)&cmd_spickle_params2_arg1,
+ (prog_void *)&cmd_spickle_params2_arg2,
+ (prog_void *)&cmd_spickle_params2_arg3,
+ NULL,
+ },
+};
+
+prog_char str_spickle_params2_arg1_show[] = "show";
+parse_pgm_token_string_t cmd_spickle_params2_arg1_show =
+ TOKEN_STRING_INITIALIZER(struct cmd_spickle_params2_result, arg1, str_spickle_params2_arg1_show);
+
+prog_char help_spickle_params2_show[] = "show spickle params";
+parse_pgm_inst_t cmd_spickle_params2_show = {
+ .f = cmd_spickle_params2_parsed, /* function to call */
+ .data = NULL, /* 2nd arg of func */
+ .help_str = help_spickle_params2_show,
+ .tokens = { /* token list, NULL terminated */
+ (prog_void *)&cmd_spickle_params2_arg0,
+ (prog_void *)&cmd_spickle_params2_arg1_show,
+ NULL,
+ },
+};
+
+/**********************************************************/
+/* Set Shovel Params */
+
+/* this structure is filled when cmd_shovel_current is parsed successfully */
+struct cmd_shovel_current_result {
+ fixed_string_t arg0;
+ fixed_string_t arg1;
+ int32_t arg2;
+ int32_t arg3;
+};
+
+/* function called when cmd_shovel_current is parsed successfully */
+static void cmd_shovel_current_parsed(void *parsed_result,
+ __attribute__((unused)) void *data)
+{
+ struct cmd_shovel_current_result * res = parsed_result;
+ uint8_t enable;
+ int32_t k1, k2;
+
+ if (!strcmp_P(res->arg1, PSTR("set")))
+ shovel_set_current_limit_coefs(res->arg2, res->arg3);
+ else if (!strcmp_P(res->arg1, PSTR("on")))
+ shovel_current_limit_enable(1);
+ else if (!strcmp_P(res->arg1, PSTR("off")))
+ shovel_current_limit_enable(0);
+
+ /* else show */
+ enable = shovel_get_current_limit_coefs(&k1, &k2);
+ printf_P(PSTR("enabled=%d k1=%"PRIi32" k2=%"PRIi32"\r\n"),
+ enable, k1, k2);
+}
+
+prog_char str_shovel_current_arg0[] = "shovel_current";
+parse_pgm_token_string_t cmd_shovel_current_arg0 =
+ TOKEN_STRING_INITIALIZER(struct cmd_shovel_current_result, arg0, str_shovel_current_arg0);
+prog_char str_shovel_current_arg1[] = "set";
+parse_pgm_token_string_t cmd_shovel_current_arg1 =
+ TOKEN_STRING_INITIALIZER(struct cmd_shovel_current_result, arg1, str_shovel_current_arg1);
+parse_pgm_token_num_t cmd_shovel_current_arg2 =
+ TOKEN_NUM_INITIALIZER(struct cmd_shovel_current_result, arg2, INT32);
+parse_pgm_token_num_t cmd_shovel_current_arg3 =
+ TOKEN_NUM_INITIALIZER(struct cmd_shovel_current_result, arg3, INT32);
+
+prog_char help_shovel_current[] = "Set shovel_current values";
+parse_pgm_inst_t cmd_shovel_current = {
+ .f = cmd_shovel_current_parsed, /* function to call */
+ .data = NULL, /* 2nd arg of func */
+ .help_str = help_shovel_current,
+ .tokens = { /* token list, NULL terminated */
+ (prog_void *)&cmd_shovel_current_arg0,
+ (prog_void *)&cmd_shovel_current_arg1,
+ (prog_void *)&cmd_shovel_current_arg2,
+ (prog_void *)&cmd_shovel_current_arg3,
+ NULL,
+ },
+};
+
+prog_char str_shovel_current_arg1_show[] = "show#on#off";
+parse_pgm_token_string_t cmd_shovel_current_arg1_show =
+ TOKEN_STRING_INITIALIZER(struct cmd_shovel_current_result, arg1, str_shovel_current_arg1_show);
+
+prog_char help_shovel_current_show[] = "show shovel params";
+parse_pgm_inst_t cmd_shovel_current_show = {
+ .f = cmd_shovel_current_parsed, /* function to call */
+ .data = NULL, /* 2nd arg of func */
+ .help_str = help_shovel_current_show,
+ .tokens = { /* token list, NULL terminated */
+ (prog_void *)&cmd_shovel_current_arg0,
+ (prog_void *)&cmd_shovel_current_arg1_show,