diff --git a/tools/blisp/src/common.c b/tools/blisp/src/common.c index 34d70f4..b486daa 100644 --- a/tools/blisp/src/common.c +++ b/tools/blisp/src/common.c @@ -58,21 +58,21 @@ blisp_return_t blisp_common_init_device(struct blisp_device* device, * Prepares chip to access flash * this means performing handshake, and loading eflash_loader if needed. */ -int32_t blisp_common_prepare_flash(struct blisp_device* device) { - int32_t ret = 0; +blisp_return_t blisp_common_prepare_flash(struct blisp_device* device) { + blisp_return_t ret = 0; printf("Sending a handshake...\n"); ret = blisp_device_handshake(device, false); if (ret != BLISP_OK) { fprintf(stderr, "Failed to handshake with device.\n"); - return -1; + return ret; } printf("Handshake successful!\nGetting chip info...\n"); struct blisp_boot_info boot_info; ret = blisp_device_get_boot_info(device, &boot_info); if (ret != BLISP_OK) { fprintf(stderr, "Failed to get boot info.\n"); - return -1; + return ret; } printf( @@ -85,7 +85,7 @@ int32_t blisp_common_prepare_flash(struct blisp_device* device) { boot_info.chip_id[6], boot_info.chip_id[7]); if (device->chip->load_eflash_loader == NULL) { - return 0; + return BLISP_OK; } if (boot_info.boot_rom_version[0] == 255 && @@ -93,7 +93,7 @@ int32_t blisp_common_prepare_flash(struct blisp_device* device) { boot_info.boot_rom_version[2] == 255 && boot_info.boot_rom_version[3] == 255) { printf("Device already in eflash_loader.\n"); - return 0; + return BLISP_OK; } uint8_t* eflash_loader_buffer = NULL; @@ -110,7 +110,7 @@ int32_t blisp_common_prepare_flash(struct blisp_device* device) { if (ret != BLISP_OK) { fprintf(stderr, "Failed to load eflash_loader, ret: %d\n", ret); - ret = -1; + goto exit1; } @@ -120,14 +120,12 @@ int32_t blisp_common_prepare_flash(struct blisp_device* device) { ret = blisp_device_check_image(device); if (ret != 0) { fprintf(stderr, "Failed to check image.\n"); - ret = -1; goto exit1; } ret = blisp_device_run_image(device); if (ret != BLISP_OK) { fprintf(stderr, "Failed to run image.\n"); - ret = -1; goto exit1; } @@ -135,12 +133,12 @@ int32_t blisp_common_prepare_flash(struct blisp_device* device) { ret = blisp_device_handshake(device, true); if (ret != BLISP_OK) { fprintf(stderr, "Failed to handshake with device.\n"); - ret = -1; goto exit1; } printf("Handshake with eflash_loader successful.\n"); exit1: if (eflash_loader_buffer != NULL) free(eflash_loader_buffer); + return ret; } \ No newline at end of file diff --git a/tools/blisp/src/main.c b/tools/blisp/src/main.c index 86aaa7a..566b518 100644 --- a/tools/blisp/src/main.c +++ b/tools/blisp/src/main.c @@ -14,7 +14,7 @@ static struct arg_lit* version; static struct arg_end* end; static void* argtable[3]; -int8_t args_init() { +blisp_return_t args_init() { argtable[0] = help = arg_lit0(NULL, "help", "print this help and exit"); argtable[1] = version = arg_lit0(NULL, "version", "print version information and exit"); @@ -22,10 +22,10 @@ int8_t args_init() { if (arg_nullcheck(argtable) != 0) { fprintf(stderr, "insufficient memory\n"); - return -1; + return BLISP_ERR_OUT_OF_MEMORY; } - return 0; + return BLISP_OK; } void print_help() { @@ -43,14 +43,14 @@ int8_t args_parse_exec(int argc, char** argv) { if (error == 0) { if (help->count) { print_help(); - return 1; + return BLISP_OK; } else if (version->count) { printf("blisp v0.0.3\n"); printf("Copyright (C) 2023 Marek Kraus and PINE64 Community\n"); - return 1; + return BLISP_OK; } } - return 0; + return BLISP_ERR_INVALID_COMMAND; } void args_free() { @@ -58,27 +58,29 @@ void args_free() { } int main(int argc, char** argv) { - int exit_code = 0; - - if (args_init() != 0) { - exit_code = -1; + blisp_return_t ret = args_init(); + if (ret != 0) { goto exit; } for (uint8_t i = 0; i < cmds_count; i++) { - if (cmds[i]->args_init() != 0) { - exit_code = -1; + ret = cmds[i]->args_init(); + if (ret != BLISP_OK) { + goto exit; + } + } + // Try and parse as a help request + { + ret = args_parse_exec(argc, argv); + if (ret == BLISP_OK) { goto exit; } } - if (args_parse_exec(argc, argv)) { - goto exit; - } - uint8_t command_found = false; for (uint8_t i = 0; i < cmds_count; i++) { - if (cmds[i]->args_parse_exec(argc, argv)) { + ret = cmds[i]->args_parse_exec(argc, argv); + if (ret != BLISP_ERR_INVALID_COMMAND) { command_found = true; break; } @@ -93,5 +95,9 @@ exit: cmds[i]->args_free(); } args_free(); - return exit_code; + // Make error codes more intuitive, but converting to +ve mirror + if (ret < 0) { + ret = -ret; + } + return ret; }