[Cryptech-Commits] [sw/stm32] 01/04: cli_receive_data: re-enable UART DMA before returning. Based on Fredrik's fix to cli-test, commit ae8ebce.

git at cryptech.is git at cryptech.is
Wed Dec 21 00:11:04 UTC 2016


This is an automated email from the git hooks/post-receive script.

paul at psgd.org pushed a commit to branch master
in repository sw/stm32.

commit 0a8d3a24018c00b688691678f566e3a5178791ce
Author: Paul Selkirk <paul at psgd.org>
AuthorDate: Tue Dec 20 19:03:42 2016 -0500

    cli_receive_data: re-enable UART DMA before returning. Based on Fredrik's fix to cli-test, commit ae8ebce.
---
 projects/hsm/mgmt-misc.c | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/projects/hsm/mgmt-misc.c b/projects/hsm/mgmt-misc.c
index 31a1c49..250dc7a 100644
--- a/projects/hsm/mgmt-misc.c
+++ b/projects/hsm/mgmt-misc.c
@@ -51,14 +51,14 @@ int cli_receive_data(struct cli_def *cli, uint8_t *buf, size_t len, cli_data_cal
 
     if (! control_mgmt_uart_dma_rx(DMA_RX_STOP)) {
 	cli_print(cli, "Failed stopping DMA");
-	return CLI_OK;
+	goto okay;
     }
 
     cli_print(cli, "OK, write size (4 bytes), data in %li byte chunks, CRC-32 (4 bytes)", (uint32_t) n);
 
     if (uart_receive_bytes(STM_UART_MGMT, (void *) &filesize, 4, 1000) != HAL_OK) {
 	cli_print(cli, "Receive timed out");
-	return CLI_ERROR;
+	goto fail;
     }
 
     cli_print(cli, "Send %li bytes of data", filesize);
@@ -73,7 +73,7 @@ int cli_receive_data(struct cli_def *cli, uint8_t *buf, size_t len, cli_data_cal
 
 	if (uart_receive_bytes(STM_UART_MGMT, (void *) buf, n, 1000) != HAL_OK) {
 	    cli_print(cli, "Receive timed out");
-	    return CLI_ERROR;
+	    goto fail;
 	}
 	filesize -= n;
 	my_crc = update_crc(my_crc, buf, n);
@@ -83,7 +83,7 @@ int cli_receive_data(struct cli_def *cli, uint8_t *buf, size_t len, cli_data_cal
 	 */
 	if (data_callback != NULL && ! data_callback(buf, (size_t) n)) {
 	    cli_print(cli, "Data processing failed");
-	    return CLI_OK;
+	    goto okay;
 	}
 
 	counter++;
@@ -99,7 +99,13 @@ int cli_receive_data(struct cli_def *cli, uint8_t *buf, size_t len, cli_data_cal
 	cli_print(cli, "CRC checksum did NOT match");
     }
 
+ okay:
+    control_mgmt_uart_dma_rx(DMA_RX_START);
     return CLI_OK;
+
+ fail:
+    control_mgmt_uart_dma_rx(DMA_RX_START);
+    return CLI_ERROR;
 }
 
 static int cmd_reboot(struct cli_def *cli, const char *command, char *argv[], int argc)



More information about the Commits mailing list