aboutsummaryrefslogtreecommitdiff
path: root/projects/hsm/mgmt-cli.c
diff options
context:
space:
mode:
Diffstat (limited to 'projects/hsm/mgmt-cli.c')
-rw-r--r--projects/hsm/mgmt-cli.c132
1 files changed, 36 insertions, 96 deletions
diff --git a/projects/hsm/mgmt-cli.c b/projects/hsm/mgmt-cli.c
index a610db6..539ba4c 100644
--- a/projects/hsm/mgmt-cli.c
+++ b/projects/hsm/mgmt-cli.c
@@ -47,7 +47,6 @@
#include "mgmt-bootloader.h"
#include "mgmt-fpga.h"
#include "mgmt-misc.h"
-#include "mgmt-show.h"
#include "mgmt-keystore.h"
#include "mgmt-masterkey.h"
@@ -62,7 +61,7 @@
typedef struct {
int ridx;
- volatile int widx;
+ volatile int widx;
mgmt_cli_dma_state_t rx_state;
uint8_t buf[CLI_UART_RECVBUF_SIZE];
} ringbuf_t;
@@ -117,106 +116,38 @@ 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)
{
if (state == DMA_RX_START) {
- if (uart_ringbuf.rx_state != DMA_RX_START) {
+ if (uart_ringbuf.rx_state != DMA_RX_START) {
ringbuf_init(&uart_ringbuf);
- HAL_UART_Receive_DMA(&huart_mgmt, &uart_rx, 1);
- uart_ringbuf.rx_state = DMA_RX_START;
- }
- return 1;
+ HAL_UART_Receive_DMA(&huart_mgmt, &uart_rx, 1);
+ uart_ringbuf.rx_state = DMA_RX_START;
+ }
+ return 1;
} else if (state == DMA_RX_STOP) {
- if (HAL_UART_DMAStop(&huart_mgmt) != CMSIS_HAL_OK) return 0;
- uart_ringbuf.rx_state = DMA_RX_STOP;
- return 1;
+ if (HAL_UART_DMAStop(&huart_mgmt) != CMSIS_HAL_OK) return 0;
+ uart_ringbuf.rx_state = DMA_RX_STOP;
+ return 1;
}
return 0;
}
-static int embedded_cli_loop(struct cli_def *cli)
-{
- 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)
- break;
-
- /* 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);
- 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");
- cli_set_hostname(cli, "cryptech");
- cli_telnet_protocol(cli, 0);
-}
-
hal_user_t user;
static int check_auth(const char *username, const char *password)
@@ -242,27 +173,36 @@ 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 = cli_init();
+ if (cli == NULL)
+ Error_Handler();
+
+ 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");
+ cli_set_hostname(cli, "cryptech");
+ cli_set_auth_callback(cli, check_auth);
/* we don't have any privileged commands at the moment */
- cli_unregister_command(&cli, "enable");
+ cli_unregister_command(cli, "enable");
- configure_cli_fpga(&cli);
- configure_cli_keystore(&cli);
- configure_cli_masterkey(&cli);
- configure_cli_firmware(&cli);
- configure_cli_bootloader(&cli);
- configure_cli_misc(&cli);
+ configure_cli_fpga(cli);
+ configure_cli_keystore(cli);
+ configure_cli_masterkey(cli);
+ configure_cli_firmware(cli);
+ configure_cli_bootloader(cli);
+ configure_cli_misc(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;
}