Skip to content

Commit

Permalink
WIP: add uart command parser and stubs
Browse files Browse the repository at this point in the history
  • Loading branch information
r2axz committed Nov 16, 2020
1 parent 1444148 commit fa678d5
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 1 deletion.
40 changes: 40 additions & 0 deletions cdc_shell.c
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@ static const char *cdc_shell_err_uart_missing_output_type = "Error, missing ou
static const char *cdc_shell_err_uart_invalid_output_type = "Error, invalid output type.\r\n";
static const char *cdc_shell_err_uart_missing_polarity = "Error, missing polarity.\r\n";
static const char *cdc_shell_err_uart_invalid_polarity = "Error, invalid polarity.\r\n";
static const char *cdc_shell_err_uart_missing_pull_type = "Error, missing pull type.\r\n";
static const char *cdc_shell_err_uart_invalid_pull_type = "Error, invalid pull type.\r\n";

static void cdc_shell_cmd_uart_show(int port) {
for (int port_index = ((port == -1) ? 0 : port);
Expand All @@ -80,6 +82,14 @@ static void cdc_shell_cmd_uart_set_polarity(int port, usb_cdc_signal_t uart_sign
}
}

static void cdc_shell_cmd_uart_set_pull_type(int port, usb_cdc_signal_t uart_signal, usb_cdc_pull_type_t polarity) {
for (int port_index = ((port == -1) ? 0 : port);
port_index < ((port == -1) ? USB_CDC_NUM_PORTS : port + 1);
port_index++) {
cdc_shell_write("set pull stub\r\n", strlen("set pull stub\r\n"));
}
}

static const char *_cdc_uart_signal_names[usb_cdc_signal_last] = {
"rx", "tx", "rts", "cts", "dsr", "dtr", "dcd",
};
Expand Down Expand Up @@ -119,6 +129,19 @@ static usb_cdc_polarity_t _cdc_uart_polarity_by_name(char *name) {
return usb_cdc_polarity_last;
}

static const char *_cdc_uart_pull_types[usb_cdc_pull_last] = {
"floating", "up", "down",
};

static usb_cdc_pull_type_t _cdc_uart_pull_type_by_name(char *name) {
for (int i = 0; i< sizeof(_cdc_uart_pull_types)/sizeof(*_cdc_uart_pull_types); i++) {
if (strcmp(name, _cdc_uart_pull_types[i]) == 0) {
return (usb_cdc_pull_type_t)i;
}
}
return usb_cdc_pull_last;
}

static void cdc_shell_cmd_uart(int argc, char *argv[]) {
if (argc--) {
int port;
Expand Down Expand Up @@ -177,6 +200,23 @@ static void cdc_shell_cmd_uart(int argc, char *argv[]) {
cdc_shell_write(cdc_shell_err_uart_missing_polarity, strlen(cdc_shell_err_uart_missing_polarity));
return;
}
} else if (strcmp(*argv, "pull") == 0) {
argc--;
argv++;
if (argc) {
usb_cdc_pull_type_t pull = _cdc_uart_pull_type_by_name(*argv);
if (pull != usb_cdc_pull_last) {
argc--;
argv++;
cdc_shell_cmd_uart_set_pull_type(port, uart_signal, pull);
} else {
cdc_shell_write(cdc_shell_err_uart_invalid_pull_type, strlen(cdc_shell_err_uart_invalid_pull_type));
return;
}
} else {
cdc_shell_write(cdc_shell_err_uart_missing_pull_type, strlen(cdc_shell_err_uart_missing_pull_type));
return;
}
} else {
break;
}
Expand Down
2 changes: 1 addition & 1 deletion usb_cdc.h
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,6 @@ typedef enum {
usb_cdc_pull_up = 0x01,
usb_cdc_pull_down = 0x02,
usb_cdc_pull_last
} __attribute__ ((packed)) usb_cdc_pull_t;
} __attribute__ ((packed)) usb_cdc_pull_type_t;

#endif /* USB_CDC_H */

0 comments on commit fa678d5

Please sign in to comment.