Merge branch 'movement-command-crash' into 'master'
Fix command parsing See merge request filipayazi/sangaboard-firmware!5
This commit is contained in:
commit
0f36232e45
4 changed files with 71 additions and 14 deletions
|
|
@ -8,7 +8,7 @@
|
|||
//general settings
|
||||
#define MAX_COMMANDS 50
|
||||
#define MAX_MODULES 10
|
||||
#define MAX_ARGUMENT_LENGTH 20 //used in argument parsing, takes up ram
|
||||
#define MAX_ARGUMENT_LENGTH 25 //used in argument parsing, takes up ram
|
||||
#define VERSION_STRING "Sangaboard Firmware v1.0.0-dev"
|
||||
#define DEBUG_ON
|
||||
#define EMULATED_EEPROM_SIZE 512
|
||||
|
|
|
|||
22
src/main.cpp
22
src/main.cpp
|
|
@ -113,6 +113,28 @@ uint8_t parse_arguments(char **arguments, String command, uint8_t max_args)
|
|||
return parsed;
|
||||
}
|
||||
|
||||
void print_arg_difference(uint8_t parsed, uint8_t expected)
|
||||
{
|
||||
comPort->print(F("Got "));
|
||||
comPort->print(parsed);
|
||||
comPort->print(F(" but expected "));
|
||||
comPort->print(expected);
|
||||
}
|
||||
|
||||
void free_parsed_arguments(char **arguments, uint8_t parsed)
|
||||
{
|
||||
// free parsed arguments
|
||||
for (uint8_t i = 0; i < parsed; i++)
|
||||
{
|
||||
free(arguments[i]);
|
||||
}
|
||||
}
|
||||
|
||||
bool assert_exact_args(uint8_t parsed, uint8_t num_args)
|
||||
{
|
||||
return parsed == num_args;
|
||||
}
|
||||
|
||||
void get_version(String)
|
||||
{
|
||||
comPort->println(F(VERSION_STRING));
|
||||
|
|
|
|||
|
|
@ -40,6 +40,11 @@ inline bool read_eeprom_bool(uint16_t address, bool default_value)
|
|||
|
||||
const Command end_command = END_COMMAND;
|
||||
uint8_t parse_arguments(char ** arguments, String, uint8_t);
|
||||
bool assert_exact_args(uint8_t parsed, uint8_t num_args);
|
||||
|
||||
void print_arg_difference(uint8_t parsed, uint8_t expected);
|
||||
void free_parsed_arguments(char** arguments, uint8_t parsed);
|
||||
|
||||
extern void register_module(const Command commands[], void (*loop_fn)(void));
|
||||
|
||||
void get_version(String);
|
||||
|
|
|
|||
|
|
@ -206,13 +206,28 @@ void stage_loop()
|
|||
void stage_move_single_axis(uint8_t axis, String command)
|
||||
{
|
||||
char *args[1];
|
||||
parse_arguments(args, command, 1);
|
||||
int move = atoi(args[0]);
|
||||
uint8_t parsed = parse_arguments(args, command, 1);
|
||||
|
||||
// make sure that the exact number of arguments are parsed
|
||||
if(assert_exact_args(parsed, 1))
|
||||
{
|
||||
long move = (long) atof(args[0]);
|
||||
EACH_MOTOR displacement[i] = 0;
|
||||
displacement[axis] = move;
|
||||
start_move(displacement);
|
||||
free(args[0]);
|
||||
}
|
||||
else
|
||||
{
|
||||
// report the error (in a single line)
|
||||
comPort->print(F("Error: stage single axis movement did not receive correct number of arguments. "));
|
||||
print_arg_difference(parsed, n_motors);
|
||||
comPort->println(F(". Skippping command!"));
|
||||
|
||||
// free memory for parsed arguments
|
||||
free_parsed_arguments(args, parsed);
|
||||
}
|
||||
}
|
||||
|
||||
void stage_mrx(String command)
|
||||
{
|
||||
|
|
@ -232,15 +247,30 @@ void stage_mrz(String command)
|
|||
void stage_mr(String command)
|
||||
{
|
||||
char *args[STAGE_MAX_MOTORS];
|
||||
parse_arguments(args, command, n_motors);
|
||||
uint8_t parsed = parse_arguments(args, command, n_motors);
|
||||
|
||||
if (assert_exact_args(parsed, n_motors))
|
||||
{
|
||||
// start executing the movement
|
||||
EACH_MOTOR
|
||||
{
|
||||
displacement[i] = atol(args[i]);
|
||||
displacement[i] = (long) atof(args[i]);
|
||||
free(args[i]);
|
||||
}
|
||||
|
||||
start_move(displacement);
|
||||
}
|
||||
else
|
||||
{
|
||||
// report the error (in a single line)
|
||||
comPort->print(F("Error: stage multi axis movement did not receive correct amount of commands. "));
|
||||
print_arg_difference(parsed, n_motors);
|
||||
comPort->println(F(". Skippping command!"));
|
||||
|
||||
// free memory for parsed arguments
|
||||
free_parsed_arguments(args, parsed);
|
||||
}
|
||||
}
|
||||
|
||||
void stage_release(String command)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue