diff options
Diffstat (limited to 'projects/cli-test/mgmt-cli.c')
-rw-r--r-- | projects/cli-test/mgmt-cli.c | 99 |
1 files changed, 22 insertions, 77 deletions
diff --git a/projects/cli-test/mgmt-cli.c b/projects/cli-test/mgmt-cli.c index 073b045..8f5db9d 100644 --- a/projects/cli-test/mgmt-cli.c +++ b/projects/cli-test/mgmt-cli.c @@ -116,19 +116,19 @@ static void uart_cli_print(struct cli_def *cli __attribute__ ((unused)), const c uart_send_string2(STM_UART_MGMT, crlf); } -static int uart_cli_read(struct cli_def *cli __attribute__ ((unused)), void *buf, size_t count) +static ssize_t uart_cli_read(struct cli_def *cli __attribute__ ((unused)), void *buf, size_t count) { for (int i = 0; i < count; ++i) { while (ringbuf_read_char(&uart_ringbuf, (uint8_t *)(buf + i)) == 0) osSemaphoreWait(uart_sem, osWaitForever); } - return count; + return (ssize_t)count; } -static int uart_cli_write(struct cli_def *cli __attribute__ ((unused)), const void *buf, size_t count) +static ssize_t uart_cli_write(struct cli_def *cli __attribute__ ((unused)), const void *buf, size_t count) { uart_send_bytes(STM_UART_MGMT, (uint8_t *) buf, count); - return (int) count; + return (ssize_t)count; } int control_mgmt_uart_dma_rx(mgmt_cli_dma_state_t state) @@ -148,72 +148,16 @@ int control_mgmt_uart_dma_rx(mgmt_cli_dma_state_t state) return 0; } -static int embedded_cli_loop(struct cli_def *cli) +static struct cli_def *mgmt_cli_init(void) { - unsigned char c; - int n = 0; - static struct cli_loop_ctx ctx; - - memset(&ctx, 0, sizeof(ctx)); - ctx.insertmode = 1; - - cli->state = CLI_STATE_LOGIN; - - /* start off in unprivileged mode */ - cli_set_privilege(cli, PRIVILEGE_UNPRIVILEGED); - cli_set_configmode(cli, MODE_EXEC, NULL); - - cli_error(cli, "%s", cli->banner); - - while (1) { - cli_loop_start_new_command(cli, &ctx); - - control_mgmt_uart_dma_rx(DMA_RX_START); - - while (1) { - cli_loop_show_prompt(cli, &ctx); - - n = cli_loop_read_next_char(cli, &ctx, &c); - - /* - cli_print(cli, "Next char: '%c'/%i, ringbuf ridx %i, widx %i", - c, (int) c, - uart_ringbuf.ridx, - RINGBUF_WIDX(uart_ringbuf) - */ - if (n == CLI_LOOP_CTRL_BREAK) - break; - if (n == CLI_LOOP_CTRL_CONTINUE) - continue; - - n = cli_loop_process_char(cli, &ctx, c); - if (n == CLI_LOOP_CTRL_BREAK) - break; - if (n == CLI_LOOP_CTRL_CONTINUE) - continue; - } - - if (ctx.l < 0) - continue; - - /* cli_print(cli, "Process command: '%s'", ctx.cmd); */ - n = cli_loop_process_cmd(cli, &ctx); - if (n == CLI_LOOP_CTRL_BREAK) - break; - } - - return CLI_OK; -} - -static void mgmt_cli_init(struct cli_def *cli) -{ - cli_init(cli); + struct cli_def *cli; + cli = cli_init(); cli_read_callback(cli, uart_cli_read); cli_write_callback(cli, uart_cli_write); cli_print_callback(cli, uart_cli_print); cli_set_banner(cli, "Cryptech Alpha test CLI"); cli_set_hostname(cli, "cryptech"); - cli_telnet_protocol(cli, 0); + return cli; } hal_user_t user; @@ -229,24 +173,25 @@ static int check_auth(const char *username, const char *password) int cli_main(void) { - static struct cli_def cli; - uart_sem = osSemaphoreCreate(osSemaphore(uart_sem), 0); - mgmt_cli_init(&cli); - cli_set_auth_callback(&cli, check_auth); + struct cli_def *cli; + cli = mgmt_cli_init(); + cli_set_auth_callback(cli, check_auth); - configure_cli_show(&cli); - configure_cli_fpga(&cli); - configure_cli_misc(&cli); - configure_cli_test(&cli); - configure_cli_keystore(&cli); - configure_cli_masterkey(&cli); + configure_cli_show(cli); + configure_cli_fpga(cli); + configure_cli_misc(cli); + configure_cli_test(cli); + configure_cli_keystore(cli); + configure_cli_masterkey(cli); while (1) { - embedded_cli_loop(&cli); - /* embedded_cli_loop returns when the user enters 'quit' or 'exit' */ - cli_print(&cli, "\nLogging out...\n"); + control_mgmt_uart_dma_rx(DMA_RX_START); + + cli_loop(cli, 0); + /* cli_loop returns when the user enters 'quit' or 'exit' */ + cli_print(cli, "\nLogging out...\n"); user = HAL_USER_NONE; } |