Skip to content

Commit

Permalink
refactoring code shrinking
Browse files Browse the repository at this point in the history
  • Loading branch information
Paciente8159 committed Sep 22, 2024
1 parent 12907ce commit 0caa36f
Show file tree
Hide file tree
Showing 9 changed files with 94 additions and 99 deletions.
23 changes: 11 additions & 12 deletions uCNC/src/cnc.c
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ void cnc_init(void)
mcu_io_reset(); // add custom logic to set pins initial state
io_enable_steppers(~g_settings.step_enable_invert); // disables steppers at start
io_disable_probe(); // forces probe isr disabling
grbl_stream_init(); // serial
grbl_stream_init(); // serial
mod_init(); // modules
settings_init(); // settings
itp_init(); // interpolator
Expand Down Expand Up @@ -1082,7 +1082,8 @@ static void cnc_io_dotasks(void)
stepper_timeout = UINT32_MAX;
}
}
else{
else
{
stepper_timeout = mcu_millis() + g_settings.step_disable_timeout;
}
}
Expand All @@ -1091,18 +1092,16 @@ static void cnc_io_dotasks(void)

void cnc_run_startup_blocks(void)
{
if (settings_check_startup_gcode(STARTUP_BLOCK0_ADDRESS_OFFSET))
{
grbl_stream_eeprom(STARTUP_BLOCK0_ADDRESS_OFFSET);
cnc_parse_cmd();
}

if (settings_check_startup_gcode(STARTUP_BLOCK1_ADDRESS_OFFSET))
for (uint8_t i = 0; i < STARTUP_BLOCKS_COUNT; i++)
{
grbl_stream_eeprom(STARTUP_BLOCK1_ADDRESS_OFFSET);
cnc_parse_cmd();
uint16_t address = STARTUP_BLOCK_ADDRESS_OFFSET(i);
if (settings_check_startup_gcode(address))
{
grbl_stream_eeprom(address);
cnc_parse_cmd();
}
}

// reset streams
grbl_stream_change(NULL);
}
66 changes: 34 additions & 32 deletions uCNC/src/core/parser.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ static float g92permanentoffset[AXIS_COUNT];
static int32_t rt_probe_step_pos[STEPPER_COUNT];
static float parser_last_pos[AXIS_COUNT];

static uint8_t parser_get_next_preprocessed(bool peek);
static unsigned char parser_get_next_preprocessed(bool peek);
FORCEINLINE static void parser_get_comment(uint8_t start_char);
FORCEINLINE static uint8_t parser_get_token(uint8_t *word, float *value);
FORCEINLINE static uint8_t parser_gcode_word(uint8_t code, uint8_t mantissa, parser_state_t *new_state, parser_cmd_explicit_t *cmd);
Expand Down Expand Up @@ -469,40 +469,42 @@ static uint8_t parser_grbl_command(void)
case 'N':
switch (c)
{
case '0':
case '1':
block_address = (!(c - '0') ? STARTUP_BLOCK0_ADDRESS_OFFSET : STARTUP_BLOCK1_ADDRESS_OFFSET);
if (grbl_stream_getc() != '=')
case EOL:
return GRBL_SEND_STARTUP_BLOCKS;
default:
if (c >= '0' && c <= '9')
{
return STATUS_INVALID_STATEMENT;
}
block_address = STARTUP_BLOCK_ADDRESS_OFFSET((uint8_t)(c - '0'));
if (grbl_stream_getc() != '=')
{
return STATUS_INVALID_STATEMENT;
}

settings_save(block_address, NULL, UINT16_MAX);
// run startup block
grbl_stream_broadcast(true);
grbl_stream_eeprom(block_address);
// checks the command validity
error = parser_fetch_command(&next_state, &words, &cmd);
// if uncomment will also check if any gcode rules are violated
// allow bad rules for now to fit UNO. Will be catched when trying to execute the line
// if (error == STATUS_OK)
// {
// error = parser_validate_command(&next_state, &words, &cmd);
// }

grbl_stream_broadcast(false);
// reset streams
grbl_stream_change(NULL);

if (error != STATUS_OK)
{
// the Gcode is not valid then erase the startup block
settings_erase(block_address, NULL, 1);
settings_save(block_address, NULL, UINT16_MAX);
// run startup block
grbl_stream_broadcast(true);
grbl_stream_eeprom(block_address);
// checks the command validity
error = parser_fetch_command(&next_state, &words, &cmd);
// if uncomment will also check if any gcode rules are violated
// allow bad rules for now to fit UNO. Will be catched when trying to execute the line
// if (error == STATUS_OK)
// {
// error = parser_validate_command(&next_state, &words, &cmd);
// }

grbl_stream_broadcast(false);
// reset streams
grbl_stream_change(NULL);

if (error != STATUS_OK)
{
// the Gcode is not valid then erase the startup block
settings_erase(block_address, NULL, 1);
}
}

return error;
case EOL:
return GRBL_SEND_STARTUP_BLOCKS;
}
return STATUS_INVALID_STATEMENT;
#ifdef ENABLE_EXTRA_SYSTEM_CMDS
Expand Down Expand Up @@ -2025,7 +2027,7 @@ static void parser_get_comment(uint8_t start_char)
}
}

static uint8_t parser_get_next_preprocessed(bool peek)
static unsigned char parser_get_next_preprocessed(bool peek)
{
uint8_t c = grbl_stream_peek();

Expand Down Expand Up @@ -2590,8 +2592,8 @@ uint8_t parser_get_expression(float *value)

uint8_t parser_get_float(float *value)
{
uint8_t c = parser_get_next_preprocessed(true);
#ifdef ENABLE_RS274NGC_EXPRESSIONS
unsigned char c = parser_get_next_preprocessed(true);
c = TOUPPER(c);
if (c == '[' || c == '#' || (c >= 'A' && c <= 'Z'))
{
Expand Down
60 changes: 23 additions & 37 deletions uCNC/src/interface/grbl_protocol.c
Original file line number Diff line number Diff line change
Expand Up @@ -258,17 +258,13 @@ void grbl_protocol_alarm(int8_t alarm)
void grbl_protocol_feedback_base(void *arg, uint8_t type)
{
grbl_stream_broadcast(true);
switch (type)
if (type)
{
case 0:
grbl_protocol_printf(MSG_FEEDBACK, arg);
break;
case 1:
grbl_protocol_printf(MSG_FEEDBACK_PRINTF, arg);
break;
case 2:
grbl_protocol_printf(MSG_FEEDBACK_IP, *((uint32_t *)arg));
break;
}
else
{
grbl_protocol_printf(MSG_FEEDBACK, arg);
}
grbl_stream_broadcast(false);
}
Expand Down Expand Up @@ -453,7 +449,7 @@ void grbl_protocol_status(void)
}
}

if ((g_settings.status_report_mask & 1))
if (!(g_settings.status_report_mask & 1))
{
grbl_protocol_printf(MSG_STATUS_MPOS, axis);
}
Expand Down Expand Up @@ -538,7 +534,9 @@ void grbl_protocol_status(void)
grbl_protocol_printf(MSG_STATUS_BUF, planner_get_buffer_freeblocks(), grbl_stream_write_available());
}

grbl_protocol_print(">" MSG_EOL);
grbl_protocol_putc('>');
grbl_protocol_putc('\r');
grbl_protocol_putc('\n');
}

void grbl_protocol_gcode_coordsys(void)
Expand Down Expand Up @@ -676,35 +674,23 @@ void grbl_protocol_start_blocks(void)
{
protocol_busy = true;
uint8_t c = 0;
uint16_t address = STARTUP_BLOCK0_ADDRESS_OFFSET;
grbl_protocol_print("$N0=");
for (;;)
{
settings_load(address++, &c, 1);
if (c > 0 && c < 128)
{
grbl_protocol_putc(c);
}
else
{
grbl_protocol_print(MSG_EOL);
break;
}
}

address = STARTUP_BLOCK1_ADDRESS_OFFSET;
grbl_protocol_print("$N1=");
for (;;)
for (uint8_t i = 0; i < STARTUP_BLOCKS_COUNT; i++)
{
settings_load(address++, &c, 1);
if (c > 0 && c < 128)
uint16_t address = STARTUP_BLOCK0_ADDRESS_OFFSET + i * STARTUP_BLOCK_SIZE;
grbl_protocol_printf("$N%d=", i);
for (;;)
{
grbl_protocol_putc(c);
}
else
{
grbl_protocol_print(MSG_EOL);
break;
settings_load(address++, &c, 1);
if (c > 0 && c < 128)
{
grbl_protocol_putc(c);
}
else
{
grbl_protocol_print(MSG_EOL);
break;
}
}
}

Expand Down
1 change: 0 additions & 1 deletion uCNC/src/interface/grbl_protocol.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@ extern "C"
void grbl_protocol_start_blocks(void);
void grbl_protocol_gcode_setting_line_int(setting_offset_t setting, uint16_t value);
void grbl_protocol_gcode_setting_line_flt(setting_offset_t setting, float value);
#define grbl_protocol_ip(ip) grbl_protocol_feedback_base((&ip), 2)

#ifdef ENABLE_EXTRA_SYSTEM_CMDS
void grbl_protocol_pins_states(void);
Expand Down
8 changes: 5 additions & 3 deletions uCNC/src/interface/print.c
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,9 @@ void print_fmtva(print_putc_cb cb, char *buffer, const char *fmt, va_list *args)
char c = 0, cval = 0;
const char *s;
uint8_t lcount = 0;
#ifndef PRINT_DISABLE_FMT_HEX
bool hexflags = HEX_NONE;
#endif
void *pt = NULL;
int32_t i = 0;
float f, *f_ptr = NULL;
Expand Down Expand Up @@ -259,7 +261,7 @@ void print_fmtva(print_putc_cb cb, char *buffer, const char *fmt, va_list *args)
switch (c)
{
case 'c':
cval = (char)va_arg(*args, char);
cval = (char)va_arg(*args, int);
print_putc(cb, buffer_ref, cval);
/* code */
break;
Expand Down Expand Up @@ -294,7 +296,7 @@ void print_fmtva(print_putc_cb cb, char *buffer, const char *fmt, va_list *args)
switch (lcount)
{
case 0:
i = (int32_t)va_arg(*args, uint8_t);
i = (int32_t)va_arg(*args, int);
break;
case 1:
i = (int32_t)va_arg(*args, uint16_t);
Expand Down Expand Up @@ -355,7 +357,7 @@ void print_fmtva(print_putc_cb cb, char *buffer, const char *fmt, va_list *args)
}
else
{
f = (float)va_arg(*args, float);
f = (float)va_arg(*args, double);
f_ptr = &f;
}
do
Expand Down
2 changes: 1 addition & 1 deletion uCNC/src/interface/print.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ extern "C"
void print_fmtva(print_putc_cb cb, char *buffer, const char *fmt, va_list *args);
void print_fmt(print_putc_cb cb, char *buffer, const char *fmt, ...);
// scaning utilities
typedef char(*print_read_input_cb)(bool);
typedef unsigned char(*print_read_input_cb)(bool);
uint8_t print_itof(print_read_input_cb cb, const char **buffer, float *value);

// string helper functions
Expand Down
10 changes: 6 additions & 4 deletions uCNC/src/interface/settings.c
Original file line number Diff line number Diff line change
Expand Up @@ -89,9 +89,9 @@ const settings_t __rom__ default_settings =
{
.version = SETTINGS_VERSION,
.max_step_rate = F_STEP_MAX,
#ifdef ENABLE_STEPPERS_DISABLE_TIMEOUT
#ifdef ENABLE_STEPPERS_DISABLE_TIMEOUT
.step_disable_timeout = 0,
#endif
#endif
.step_invert_mask = DEFAULT_STEP_INV_MASK,
.dir_invert_mask = DEFAULT_DIR_INV_MASK,
.step_enable_invert = DEFAULT_STEP_ENA_INV,
Expand Down Expand Up @@ -321,8 +321,10 @@ void settings_reset(bool erase_startup_blocks)
settings_save(SETTINGS_ADDRESS_OFFSET, (uint8_t *)&g_settings, (uint8_t)sizeof(settings_t));
if (erase_startup_blocks)
{
settings_erase(STARTUP_BLOCK0_ADDRESS_OFFSET, NULL, 1);
settings_erase(STARTUP_BLOCK1_ADDRESS_OFFSET, NULL, 1);
for (uint8_t i = 0; i < STARTUP_BLOCKS_COUNT; i++)
{
settings_erase(STARTUP_BLOCK_ADDRESS_OFFSET(i), NULL, 1);
}
}
#endif
}
Expand Down
21 changes: 13 additions & 8 deletions uCNC/src/interface/settings.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,10 @@ extern "C"
{
uint8_t version[3];
float max_step_rate;
// step delay not used
#ifdef ENABLE_STEPPERS_DISABLE_TIMEOUT
// step delay not used
#ifdef ENABLE_STEPPERS_DISABLE_TIMEOUT
uint16_t step_disable_timeout;
#endif
#endif
uint8_t step_invert_mask;
uint8_t dir_invert_mask;
uint8_t step_enable_invert;
Expand Down Expand Up @@ -118,14 +118,19 @@ extern "C"
#ifndef SETTINGS_PARSER_PARAMETERS_ADDRESS_OFFSET
#define SETTINGS_PARSER_PARAMETERS_ADDRESS_OFFSET (SETTINGS_ADDRESS_OFFSET + sizeof(settings_t) + 1)
#endif
#ifndef STARTUP_BLOCKS_COUNT
#define STARTUP_BLOCKS_COUNT 2
#endif
#ifndef STARTUP_BLOCK_SIZE
#define STARTUP_BLOCK_SIZE RX_BUFFER_SIZE
#endif
#ifndef STARTUP_BLOCK0_ADDRESS_OFFSET
#define STARTUP_BLOCK0_ADDRESS_OFFSET (SETTINGS_PARSER_PARAMETERS_ADDRESS_OFFSET + (((AXIS_COUNT * sizeof(float)) + 1) * (COORD_SYS_COUNT + 3)))
#endif
#ifndef STARTUP_BLOCK1_ADDRESS_OFFSET
#define STARTUP_BLOCK1_ADDRESS_OFFSET (STARTUP_BLOCK0_ADDRESS_OFFSET + RX_BUFFER_SIZE)
#endif
#define STARTUP_BLOCK_ADDRESS_OFFSET(NBLOCK) (STARTUP_BLOCK0_ADDRESS_OFFSET + NBLOCK * RX_BUFFER_SIZE)

#ifndef MODULES_SETTINGS_ADDRESS_OFFSET
#define MODULES_SETTINGS_ADDRESS_OFFSET (STARTUP_BLOCK1_ADDRESS_OFFSET + RX_BUFFER_SIZE)
#define MODULES_SETTINGS_ADDRESS_OFFSET (STARTUP_BLOCK_ADDRESS_OFFSET(STARTUP_BLOCKS_COUNT - 1))
#endif

#ifndef ENABLE_SETTINGS_MODULES
Expand Down Expand Up @@ -244,7 +249,7 @@ typedef uint16_t setting_offset_t;
settings_load(set##ID##_settings_address, (uint8_t *)var, sizeof(char) * count); \
for (uint8_t i = 0; i < count; i++) \
{ \
char c = grbl_stream_getc(); \
char c = grbl_stream_getc(); \
if (c == EOL || c == '\n') \
{ \
var[i] = EOL; \
Expand Down
2 changes: 1 addition & 1 deletion uCNC/src/modules/file_system.c
Original file line number Diff line number Diff line change
Expand Up @@ -880,7 +880,7 @@ bool system_menu_fs_action(uint8_t action)
system_menu_go_idle();
rom_strcpy(buffer, __romstr__(FS_STR_FILE_RUNNING));
system_menu_show_modal_popup(SYSTEM_MENU_MODAL_POPUP_MS, buffer);
serial_stream_readonly(&running_file_getc, &running_file_available, &running_file_clear);
grbl_stream_readonly(&running_file_getc, &running_file_available, &running_file_clear);
}
else
{
Expand Down

0 comments on commit 0caa36f

Please sign in to comment.