Stitch more error codes through tool

This commit is contained in:
Ben V. Brown 2023-05-09 07:46:45 +10:00
parent fced48570a
commit 6e2d40b9c4
4 changed files with 49 additions and 39 deletions

View File

@ -16,6 +16,9 @@ typedef enum {
BLISP_ERR_PENDING = -6, BLISP_ERR_PENDING = -6,
BLISP_ERR_CHIP_ERR = -7, BLISP_ERR_CHIP_ERR = -7,
BLISP_ERR_INVALID_CHIP_TYPE = -8, BLISP_ERR_INVALID_CHIP_TYPE = -8,
BLISP_ERR_OUT_OF_MEMORY = -9,
BLISP_ERR_INVALID_COMMAND = -10,
BLISP_ERR_CANT_OPEN_FILE=-11,
} blisp_return_t; } blisp_return_t;
#endif #endif

View File

@ -3,11 +3,11 @@
#define BLISP_CMD_H #define BLISP_CMD_H
#include <stdint.h> #include <stdint.h>
#include "error_codes.h"
struct cmd { struct cmd {
const char* name; const char* name;
int8_t (*args_init)(); blisp_return_t (*args_init)();
uint8_t (*args_parse_exec)(int argc, char** argv); blisp_return_t (*args_parse_exec)(int argc, char** argv);
void (*args_print_syntax)(); void (*args_print_syntax)();
void (*args_free)(); void (*args_free)();
}; };

View File

@ -1,7 +1,7 @@
#include <argtable3.h>
#include <blisp_easy.h> #include <blisp_easy.h>
#include "../cmd.h" #include "../cmd.h"
#include "../common.h" #include "../common.h"
#include <argtable3.h>
#define REG_EXTENDED 1 #define REG_EXTENDED 1
#define REG_ICASE (REG_EXTENDED << 1) #define REG_ICASE (REG_EXTENDED << 1)
@ -14,16 +14,16 @@ static struct arg_lit* reset;
static struct arg_end* end; static struct arg_end* end;
static void* cmd_iot_argtable[7]; static void* cmd_iot_argtable[7];
void blisp_single_download() blisp_return_t blisp_single_download() {
{
struct blisp_device device; struct blisp_device device;
int32_t ret; blisp_return_t ret;
if (blisp_common_init_device(&device, port_name, chip_type) != 0) { ret = blisp_common_init_device(&device, port_name, chip_type);
return; if (ret != BLISP_OK) {
return ret;
} }
ret = blisp_common_prepare_flash(&device);
if (blisp_common_prepare_flash(&device) != 0) { if (ret != BLISP_OK) {
// TODO: Error handling // TODO: Error handling
goto exit1; goto exit1;
} }
@ -32,6 +32,7 @@ void blisp_single_download()
if (data_file == NULL) { if (data_file == NULL) {
fprintf(stderr, "Failed to open data file \"%s\".\n", fprintf(stderr, "Failed to open data file \"%s\".\n",
single_download->filename[0]); single_download->filename[0]);
ret = BLISP_ERR_CANT_OPEN_FILE;
goto exit1; goto exit1;
} }
fseek(data_file, 0, SEEK_END); fseek(data_file, 0, SEEK_END);
@ -39,8 +40,8 @@ void blisp_single_download()
rewind(data_file); rewind(data_file);
printf("Erasing the area, this might take a while...\n"); printf("Erasing the area, this might take a while...\n");
ret = ret = blisp_device_flash_erase(
blisp_device_flash_erase(&device, *single_download_location->ival, &device, *single_download_location->ival,
*single_download_location->ival + data_file_size + 1); *single_download_location->ival + data_file_size + 1);
if (ret != BLISP_OK) { if (ret != BLISP_OK) {
fprintf(stderr, "Failed to erase.\n"); fprintf(stderr, "Failed to erase.\n");
@ -51,8 +52,8 @@ void blisp_single_download()
struct blisp_easy_transport data_transport = struct blisp_easy_transport data_transport =
blisp_easy_transport_new_from_file(data_file); blisp_easy_transport_new_from_file(data_file);
ret = blisp_easy_flash_write(&device, &data_transport, *single_download_location->ival, ret = blisp_easy_flash_write(&device, &data_transport,
data_file_size, *single_download_location->ival, data_file_size,
blisp_common_progress_callback); blisp_common_progress_callback);
if (ret < BLISP_OK) { if (ret < BLISP_OK) {
fprintf(stderr, "Failed to write data to flash.\n"); fprintf(stderr, "Failed to write data to flash.\n");
@ -68,20 +69,27 @@ void blisp_single_download()
printf("Program OK!\n"); printf("Program OK!\n");
if (reset->count > 0) { // TODO: could be common if (reset->count > 0) { // TODO: could be common
blisp_device_reset(&device);
printf("Resetting the chip.\n"); printf("Resetting the chip.\n");
ret = blisp_device_reset(&device);
if (ret != BLISP_OK) {
fprintf(stderr, "Failed to reset chip.\n");
goto exit2;
} }
}
if (ret == BLISP_OK) {
printf("Download complete!\n"); printf("Download complete!\n");
}
exit2: exit2:
if (data_file != NULL) if (data_file != NULL)
fclose(data_file); fclose(data_file);
exit1: exit1:
blisp_device_close(&device); blisp_device_close(&device);
return ret;
} }
int8_t cmd_iot_args_init() { blisp_return_t cmd_iot_args_init() {
cmd_iot_argtable[0] = cmd = cmd_iot_argtable[0] = cmd =
arg_rex1(NULL, NULL, "iot", NULL, REG_ICASE, NULL); arg_rex1(NULL, NULL, "iot", NULL, REG_ICASE, NULL);
cmd_iot_argtable[1] = chip_type = cmd_iot_argtable[1] = chip_type =
@ -99,9 +107,9 @@ int8_t cmd_iot_args_init() {
if (arg_nullcheck(cmd_iot_argtable) != 0) { if (arg_nullcheck(cmd_iot_argtable) != 0) {
fprintf(stderr, "insufficient memory\n"); fprintf(stderr, "insufficient memory\n");
return -1; return BLISP_ERR_OUT_OF_MEMORY;
} }
return 0; return BLISP_OK;
} }
void cmd_iot_args_print_glossary() { void cmd_iot_args_print_glossary() {
@ -111,20 +119,19 @@ void cmd_iot_args_print_glossary() {
arg_print_glossary(stdout, cmd_iot_argtable, " %-25s %s\n"); arg_print_glossary(stdout, cmd_iot_argtable, " %-25s %s\n");
} }
uint8_t cmd_iot_parse_exec(int argc, char** argv) { blisp_return_t cmd_iot_parse_exec(int argc, char** argv) {
int errors = arg_parse(argc, argv, cmd_iot_argtable); int errors = arg_parse(argc, argv, cmd_iot_argtable);
if (errors == 0) { if (errors == 0) {
if (single_download->count == 1 && single_download_location->count == 1) { if (single_download->count == 1 && single_download_location->count == 1) {
blisp_single_download(); return blisp_single_download();
return 1;
} else { } else {
return 0; return BLISP_ERR_INVALID_COMMAND;
} }
} else if (cmd->count == 1) { } else if (cmd->count == 1) {
cmd_iot_args_print_glossary(); cmd_iot_args_print_glossary();
return 1; return BLISP_OK;
} }
return 0; return BLISP_ERR_INVALID_COMMAND;
} }
void cmd_iot_args_print_syntax() { void cmd_iot_args_print_syntax() {

View File

@ -249,7 +249,7 @@ exit1:
blisp_device_close(&device); blisp_device_close(&device);
} }
int8_t cmd_write_args_init() { blisp_return_t cmd_write_args_init() {
cmd_write_argtable[0] = cmd = cmd_write_argtable[0] = cmd =
arg_rex1(NULL, NULL, "write", NULL, REG_ICASE, NULL); arg_rex1(NULL, NULL, "write", NULL, REG_ICASE, NULL);
cmd_write_argtable[1] = chip_type = cmd_write_argtable[1] = chip_type =
@ -265,9 +265,9 @@ int8_t cmd_write_args_init() {
if (arg_nullcheck(cmd_write_argtable) != 0) { if (arg_nullcheck(cmd_write_argtable) != 0) {
fprintf(stderr, "insufficient memory\n"); fprintf(stderr, "insufficient memory\n");
return -1; return BLISP_ERR_OUT_OF_MEMORY;
} }
return 0; return BLISP_OK;
} }
void cmd_write_args_print_glossary() { void cmd_write_args_print_glossary() {
@ -277,16 +277,16 @@ void cmd_write_args_print_glossary() {
arg_print_glossary(stdout, cmd_write_argtable, " %-25s %s\n"); arg_print_glossary(stdout, cmd_write_argtable, " %-25s %s\n");
} }
uint8_t cmd_write_parse_exec(int argc, char** argv) { blisp_return_t cmd_write_parse_exec(int argc, char** argv) {
int errors = arg_parse(argc, argv, cmd_write_argtable); int errors = arg_parse(argc, argv, cmd_write_argtable);
if (errors == 0) { if (errors == 0) {
blisp_flash_firmware(); // TODO: Error code? return blisp_flash_firmware(); // TODO: Error code?
return 1;
} else if (cmd->count == 1) { } else if (cmd->count == 1) {
cmd_write_args_print_glossary(); cmd_write_args_print_glossary();
return 1; return BLISP_OK;
} }
return 0; return BLISP_ERR_INVALID_COMMAND;
} }
void cmd_write_args_print_syntax() { void cmd_write_args_print_syntax() {