mirror of
https://github.com/logicog/RTLPlayground.git
synced 2026-08-30 14:52:51 +08:00
Introduce global error variable, check during config execution
This commit is contained in:
+21
-13
@@ -67,6 +67,8 @@ __xdata signed char cmd_words_b[N_WORDS];
|
|||||||
__xdata uint8_t cmd_history[CMD_HISTORY_SIZE];
|
__xdata uint8_t cmd_history[CMD_HISTORY_SIZE];
|
||||||
__xdata uint16_t cmd_history_ptr;
|
__xdata uint16_t cmd_history_ptr;
|
||||||
|
|
||||||
|
// Error set by commands
|
||||||
|
__xdata uint8_t err_status;
|
||||||
|
|
||||||
inline uint8_t isletter(uint8_t l)
|
inline uint8_t isletter(uint8_t l)
|
||||||
{
|
{
|
||||||
@@ -860,6 +862,7 @@ uint8_t cmd_tokenize(void) __banked
|
|||||||
print_string_x(&cmd_buffer[0]);
|
print_string_x(&cmd_buffer[0]);
|
||||||
write_char('<'); write_char('\n');
|
write_char('<'); write_char('\n');
|
||||||
#endif
|
#endif
|
||||||
|
err_status = ERR_OK;
|
||||||
line_ptr = 0;
|
line_ptr = 0;
|
||||||
is_white = 1;
|
is_white = 1;
|
||||||
uint8_t word = 0;
|
uint8_t word = 0;
|
||||||
@@ -874,11 +877,14 @@ uint8_t cmd_tokenize(void) __banked
|
|||||||
line_ptr++;
|
line_ptr++;
|
||||||
if (word >= N_WORDS - 1) {
|
if (word >= N_WORDS - 1) {
|
||||||
print_string("\ntoo many arguments, truncated");
|
print_string("\ntoo many arguments, truncated");
|
||||||
|
err_status = ERR_TOO_MANY_ARGUMENTS;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (line_ptr == CMD_BUF_SIZE - 1)
|
if (line_ptr == CMD_BUF_SIZE - 1) {
|
||||||
|
err_status = ERR_CMD_TOO_LONG;
|
||||||
return 1;
|
return 1;
|
||||||
|
}
|
||||||
cmd_words_b[word++] = line_ptr;
|
cmd_words_b[word++] = line_ptr;
|
||||||
cmd_words_b[word++] = -1;
|
cmd_words_b[word++] = -1;
|
||||||
|
|
||||||
@@ -1173,12 +1179,23 @@ void execute_config(void) __banked
|
|||||||
|
|
||||||
__xdata uint8_t cfg_idx = 0;
|
__xdata uint8_t cfg_idx = 0;
|
||||||
uint8_t c = 0;
|
uint8_t c = 0;
|
||||||
while (cmd_idx < (CMD_BUF_SIZE - 1)) {
|
do {
|
||||||
|
if (cmd_idx >= (CMD_BUF_SIZE - 1)) {
|
||||||
|
cmd_buffer[cmd_idx] = '\0';
|
||||||
|
print_string("ERROR: Command too long: ");
|
||||||
|
print_string_x(cmd_buffer);
|
||||||
|
write_char('\n');
|
||||||
|
err_status = ERR_CMD_TOO_LONG;
|
||||||
|
goto config_done;
|
||||||
|
}
|
||||||
c = flash_buf[cfg_idx++];
|
c = flash_buf[cfg_idx++];
|
||||||
if (c == 0 || c == '\n') {
|
if (c == 0 || c == '\n') {
|
||||||
cmd_buffer[cmd_idx] = '\0';
|
cmd_buffer[cmd_idx] = '\0';
|
||||||
if (cmd_idx && !cmd_tokenize())
|
if (cmd_idx && !cmd_tokenize()) {
|
||||||
cmd_parser();
|
cmd_parser();
|
||||||
|
if (err_status)
|
||||||
|
goto config_done;
|
||||||
|
}
|
||||||
if (c == 0)
|
if (c == 0)
|
||||||
goto config_done;
|
goto config_done;
|
||||||
cmd_idx = 0;
|
cmd_idx = 0;
|
||||||
@@ -1187,16 +1204,7 @@ void execute_config(void) __banked
|
|||||||
|
|
||||||
cmd_buffer[cmd_idx] = c;
|
cmd_buffer[cmd_idx] = c;
|
||||||
cmd_idx++;
|
cmd_idx++;
|
||||||
if (!cfg_idx)
|
} while (cfg_idx);
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (cmd_idx >= (CMD_BUF_SIZE - 1)) {
|
|
||||||
cmd_buffer[cmd_idx] = '\0';
|
|
||||||
print_string("ERROR: Command too long: ");
|
|
||||||
print_string_x(cmd_buffer);
|
|
||||||
write_char('\n');
|
|
||||||
goto config_done;
|
|
||||||
}
|
|
||||||
|
|
||||||
len_left -= FLASH_READ_BURST_SIZE;
|
len_left -= FLASH_READ_BURST_SIZE;
|
||||||
pos += FLASH_READ_BURST_SIZE;
|
pos += FLASH_READ_BURST_SIZE;
|
||||||
|
|||||||
@@ -42,6 +42,11 @@ extern __xdata uint8_t sbuf[SBUF_SIZE];
|
|||||||
// Size of the flash buffer used for writing to flash, must be a multiple of the flash page size (0x100)
|
// Size of the flash buffer used for writing to flash, must be a multiple of the flash page size (0x100)
|
||||||
#define FLASH_BUF_SIZE 512
|
#define FLASH_BUF_SIZE 512
|
||||||
|
|
||||||
|
// Errors for commands
|
||||||
|
#define ERR_OK 0
|
||||||
|
#define ERR_TOO_MANY_ARGUMENTS 1
|
||||||
|
#define ERR_CMD_TOO_LONG 2
|
||||||
|
|
||||||
// For RX data, a propriatary RTL FRAME is inserted. Instead of 0x0800 for IPv4,
|
// For RX data, a propriatary RTL FRAME is inserted. Instead of 0x0800 for IPv4,
|
||||||
// the RTL_FRAME_TAG_ID is used as part of an 8-byte tag. When VLAN is activated,
|
// the RTL_FRAME_TAG_ID is used as part of an 8-byte tag. When VLAN is activated,
|
||||||
// the VLAN tag is inserted after the RTL tag
|
// the VLAN tag is inserted after the RTL tag
|
||||||
|
|||||||
Reference in New Issue
Block a user