Author SHA1 Message Date
Marek Kraus 6306a00de7 Include Windows headers for missing data types 2023-08-01 14:38:55 +02:00
Ben V. Brown c87a4a092c Pragma -> ifndef 2023-08-01 21:36:39 +10:00
Ben V. Brown dbd7ee2257 Adjust DFU to avoid goto 2023-08-01 21:31:07 +10:00
Ben V. Brown 05b62d2fa5 Drop extra erase 2023-08-01 21:08:58 +10:00
Ben V. Brown d25bd65f15 Improve logging 2023-08-01 20:59:36 +10:00
Ben V. Brown ec44c2358b Update dfu_file.c 2023-08-01 18:49:14 +10:00
Ben V. Brown c63883bfa7 FIXUP! flash offset 2023-08-01 18:28:55 +10:00
Ben V. Brown 99a30ae9cc stdlib
Update dfu_file.c
2023-08-01 18:11:44 +10:00
Ben V. Brown 11c31d6eed Rebase address 2023-08-01 17:54:17 +10:00
Ben V. Brown 6724a9c682 Print flash address 2023-08-01 17:54:17 +10:00
Ben V. Brown 342a43b071 Pull in the generic parser
Fixup

.
2023-08-01 17:54:17 +10:00
Ben V. Brown d052d2ebe4 Pull out get file util
Update CMakeLists.txt
2023-08-01 17:45:09 +10:00
Ben V. Brown 9893a49376 Generic bin parser 2023-08-01 17:40:59 +10:00
Ben V. Brown cf00bedeaf Scratching out parsers 2023-08-01 08:26:56 +10:00
Ben V. Brown 013c1d0141 Relocate dfu parsing and link in 2023-08-01 08:18:32 +10:00
Ben V. Brown 98343db387 DFU file work
Just grabbing first one for now

Expose crc

Update CMakeLists.txt

Test DFU file

Split crc function

Fixup

Zero init struct
Dont null the pointer 🤦
correct fread

Adding tests

Create dfu_file.h

Format

Scratching out more parsing

Basic port parser

Scratching fread wrapper
2023-08-01 07:44:40 +10:00
15 changed files with 23 additions and 179 deletions
+1 -1
View File
@@ -42,7 +42,7 @@ jobs:
- name: Upload results
uses: actions/upload-artifact@v3
with:
name: blips-apple-universal.zip
name: blips-apple-x86_64.zip
path: |
build/tools/blisp/blisp
if-no-files-found: error
-3
View File
@@ -1,7 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CMakePythonSetting">
<option name="pythonIntegrationState" value="YES" />
</component>
<component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$" />
</project>
+5 -12
View File
@@ -1,8 +1,7 @@
cmake_minimum_required(VERSION 3.16)
set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64" CACHE STRING "" FORCE)
cmake_minimum_required(VERSION 3.22)
project(blisp C)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD 23)
option(BLISP_BUILD_CLI "Build CLI Tool" OFF)
option(BLISP_USE_SYSTEM_LIBRARIES "Use system-installed libraries" "${CMAKE_USE_SYSTEM_LIBRARIES}")
@@ -29,14 +28,14 @@ set(BLISP_PUBLIC_HEADERS
set_target_properties(libblisp PROPERTIES
PUBLIC_HEADER "${BLISP_PUBLIC_HEADERS}"
VERSION 0.0.4
VERSION 0.0.3
SOVERSION 1
LIBRARY_OUTPUT_DIRECTORY "shared"
OUTPUT_NAME "blisp")
set_target_properties(libblisp_static PROPERTIES
PUBLIC_HEADER "${BLISP_PUBLIC_HEADERS}"
VERSION 0.0.4
VERSION 0.0.3
SOVERSION 1
ARCHIVE_OUTPUT_DIRECTORY "static"
OUTPUT_NAME "blisp")
@@ -91,13 +90,7 @@ else()
endif()
endif()
include(GNUInstallDirs)
install(TARGETS libblisp libblisp_static
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
install(TARGETS libblisp libblisp_static DESTINATION lib)
if(BLISP_BUILD_CLI)
add_subdirectory(tools/blisp)
+2 -19
View File
@@ -1,7 +1,7 @@
[![Hits](https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fgithub.com%2Fpine64%2Fblisp&count_bg=%235791AC&title_bg=%23555555&icon=airplayaudio.svg&icon_color=%23D2D9DD&title=hits&edge_flat=false)](https://github.com/pine64/blisp/wiki/Update-Pinecil-V2)
[![GitHub all downloads](https://img.shields.io/github/downloads/pine64/blisp/total?color=5791ac&logo=docusign&logoColor=white)](https://github.com/pine64/blisp/releases/tag/v0.0.4)
[![GitHub all downloads](https://img.shields.io/github/downloads/pine64/blisp/total?color=5791ac&logo=docusign&logoColor=white)](https://github.com/pine64/blisp/releases/tag/v0.0.3)
[![Discord](https://img.shields.io/discord/463237927984693259?color=5791ac&logo=discord&logoColor=white)](https://discord.com/invite/pine64)
[![GitHub release](https://img.shields.io/github/v/release/pine64/blisp?color=5791ac)](https://github.com/pine64/blisp/releases/tag/v0.0.4)
[![GitHub release](https://img.shields.io/github/v/release/pine64/blisp?color=5791ac)](https://github.com/pine64/blisp/releases/tag/v0.0.3)
<img src="./img/Gradient-white-blue-03.png" align="left" width="60" > <br clear="left" />
# BLISP
@@ -94,20 +94,3 @@ Because this is done at the lowest level of serial communication, the
displays aren't packet-aware or know about the chip's command set or such.
This is really only useful for debugging systems-level issues withing
the device or blisp itself.
## Troubleshooting
### macOS
Depending on your current system security settings, modern versions of macOS requires all software to be notarised before you are able to execute it. This is specially true for software that is downloaded directly from the internet.
If that is the case, you will get an error that looks like the following:
> **“blisp” cannot be opened because the developer cannot be verified.**
>
> macOS cannot verify that this app is free from malware.
In that case, you will need to remove the *quarantine* flag that macOS adds to the executable. After that you should be able to run **blisp** as normal.
```bash
xattr -d com.apple.quarantine blisp
```
+1 -4
View File
@@ -8,10 +8,7 @@
struct blisp_easy_transport {
uint8_t type; // 0 - memory, 1 - FILE file_handle
union {
struct {
FILE* file_handle;
int64_t file_size;
} file;
FILE* file_handle;
struct {
void* data_location;
uint32_t data_size;
+5 -9
View File
@@ -19,7 +19,7 @@ static blisp_return_t blisp_easy_transport_read(
transport->data.memory.current_position += size;
return size;
} else {
return fread(buffer, size, 1, transport->data.file.file_handle);
return fread(buffer, size, 1, transport->data.file_handle);
}
}
@@ -28,13 +28,9 @@ static blisp_return_t blisp_easy_transport_size(
if (transport->type == 0) {
return transport->data.memory.data_size;
} else {
if (transport->data.file.file_size == -1) {
FILE* handle = transport->data.file.file_handle;
fseek(handle, 0, SEEK_END);
transport->data.file.file_size = ftell(handle);
rewind(handle);
}
return transport->data.file.file_size;
// TODO: Implement
printf("%s() Warning: calling non-implemented function\n", __func__);
return BLISP_ERR_NOT_IMPLEMENTED;
}
}
@@ -47,7 +43,7 @@ static void blisp_easy_report_progress(blisp_easy_progress_callback callback,
}
struct blisp_easy_transport blisp_easy_transport_new_from_file(FILE* file) {
struct blisp_easy_transport transport = {.type = 1, .data.file.file_handle = file, .data.file.file_size = -1};
struct blisp_easy_transport transport = {.type = 1, .data.file_handle = file};
return transport;
}
+1 -1
View File
@@ -2,7 +2,7 @@ set(ARGTABLE3_ENABLE_TESTS OFF CACHE BOOL "Enable unit tests")
set(ARGTABLE3_ENABLE_EXAMPLES OFF CACHE BOOL "Enable examples")
#set(ARGTABLE3_REPLACE_GETOPT OFF CACHE BOOL "Replace getopt in the system C library")
add_executable(blisp src/main.c src/cmd/write.c src/util.c src/common.c src/cmd/iot.c src/cmd/run.c)
add_executable(blisp src/main.c src/cmd/write.c src/util.c src/common.c src/cmd/iot.c)
add_subdirectory(src/file_parsers)
-1
View File
@@ -13,7 +13,6 @@ struct cmd {
};
extern struct cmd cmd_write;
extern struct cmd cmd_run;
extern struct cmd cmd_iot;
#endif // BLISP_CMD_H
+1 -1
View File
@@ -22,7 +22,7 @@ blisp_return_t blisp_single_download() {
if (ret != BLISP_OK) {
return ret;
}
ret = blisp_common_prepare_flash(&device, true);
ret = blisp_common_prepare_flash(&device);
if (ret != BLISP_OK) {
// TODO: Error handling
goto exit1;
-119
View File
@@ -1,119 +0,0 @@
#include <argtable3.h>
#include <blisp_easy.h>
#include "../cmd.h"
#include "../common.h"
#define REG_EXTENDED 1
#define REG_ICASE (REG_EXTENDED << 1)
static struct arg_rex* cmd;
static struct arg_str *port_name, *chip_type; // TODO: Make this common
static struct arg_lit* reset;
static struct arg_end* end;
static struct arg_file* binary_to_run;
static void* cmd_run_argtable[6];
blisp_return_t cmd_run_args_init() {
cmd_run_argtable[0] = cmd =
arg_rex1(NULL, NULL, "run", NULL, REG_ICASE, NULL);
cmd_run_argtable[1] = chip_type =
arg_str1("c", "chip", "<chip_type>", "Chip Type");
cmd_run_argtable[2] = port_name =
arg_str0("p", "port", "<port_name>",
"Name/Path to the Serial Port (empty for search)");
cmd_run_argtable[3] = reset =
arg_lit0(NULL, "reset", "Reset chip after write");
cmd_run_argtable[4] = binary_to_run =
arg_file1(NULL, NULL, "<input>", "Binary to run");
cmd_run_argtable[5] = end = arg_end(10);
if (arg_nullcheck(cmd_run_argtable) != 0) {
fprintf(stderr, "insufficient memory\n");
return BLISP_ERR_OUT_OF_MEMORY;
}
return BLISP_OK;
}
void cmd_run_args_print_glossary() {
fputs("Usage: blisp", stdout);
arg_print_syntax(stdout, cmd_run_argtable, "\n");
puts("Flashes firmware to RAM and then executes it.");
arg_print_glossary(stdout, cmd_run_argtable, " %-25s %s\n");
}
blisp_return_t blisp_run_firmware() {
struct blisp_device device;
blisp_return_t ret;
ret = blisp_common_init_device(&device, port_name, chip_type);
if (ret != BLISP_OK) {
return ret;
}
FILE* data_file = fopen(binary_to_run->filename[0], "rb");
if (data_file == NULL) {
fprintf(stderr, "Failed to open data file \"%s\".\n",
binary_to_run->filename[0]);
ret = BLISP_ERR_CANT_OPEN_FILE;
goto exit1;
}
if (blisp_common_prepare_flash(&device, false) != 0) {
// TODO: Error handling
goto exit1;
}
struct blisp_easy_transport firmware_transport =
blisp_easy_transport_new_from_file(data_file);
ret = blisp_easy_load_ram_app(&device, &firmware_transport,
blisp_common_progress_callback);
if (ret != BLISP_OK) {
fprintf(stderr, "Failed to load firmware, ret: %d\n", ret);
goto exit1;
}
ret = blisp_device_check_image(&device);
if (ret != 0) {
fprintf(stderr, "Failed to check image.\n");
goto exit1;
}
ret = blisp_device_run_image(&device);
if (ret != BLISP_OK) {
fprintf(stderr, "Failed to run image.\n");
goto exit1;
}
exit2:
if (data_file != NULL)
fclose(data_file);
exit1:
blisp_device_close(&device);
return ret;
}
blisp_return_t cmd_run_parse_exec(int argc, char** argv) {
int errors = arg_parse(argc, argv, cmd_run_argtable);
if (errors == 0) {
blisp_run_firmware();
return BLISP_OK;
} else if (cmd->count == 1) {
cmd_run_args_print_glossary();
return BLISP_OK;
}
return BLISP_ERR_INVALID_COMMAND;
}
void cmd_run_args_print_syntax() {
arg_print_syntax(stdout, cmd_run_argtable, "\n");
}
void cmd_run_free() {
arg_freetable(cmd_run_argtable,
sizeof(cmd_run_argtable) / sizeof(cmd_run_argtable[0]));
}
struct cmd cmd_run = {"run", cmd_run_args_init, cmd_run_parse_exec,
cmd_run_args_print_syntax, cmd_run_free};
+1 -1
View File
@@ -174,7 +174,7 @@ blisp_return_t blisp_flash_firmware() {
return ret;
}
if (blisp_common_prepare_flash(&device, true) != 0) {
if (blisp_common_prepare_flash(&device) != 0) {
// TODO: Error handling
goto exit1;
}
+2 -3
View File
@@ -58,8 +58,7 @@ 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.
*/
blisp_return_t blisp_common_prepare_flash(struct blisp_device* device,
bool goto_eflash_loader) {
blisp_return_t blisp_common_prepare_flash(struct blisp_device* device) {
blisp_return_t ret = 0;
printf("Sending a handshake...\n");
@@ -85,7 +84,7 @@ blisp_return_t blisp_common_prepare_flash(struct blisp_device* device,
boot_info.chip_id[3], boot_info.chip_id[4], boot_info.chip_id[5],
boot_info.chip_id[6], boot_info.chip_id[7]);
if (device->chip->load_eflash_loader == NULL || !goto_eflash_loader) {
if (device->chip->load_eflash_loader == NULL) {
return BLISP_OK;
}
+1 -2
View File
@@ -6,8 +6,7 @@
#include <blisp.h>
#include <argtable3.h>
blisp_return_t blisp_common_prepare_flash(struct blisp_device* device,
bool goto_eflash_loader);
int32_t blisp_common_prepare_flash(struct blisp_device* device);
void blisp_common_progress_callback(uint32_t current_value, uint32_t max_value);
int32_t blisp_common_init_device(struct blisp_device* device, struct arg_str* port_name, struct arg_str* chip_type);
+1 -1
View File
@@ -8,7 +8,7 @@ file(GLOB_RECURSE sources
)
list(APPEND ADD_SRCS ${sources})
add_library(file_parsers STATIC
add_library(file_parsers
"${CMAKE_CURRENT_SOURCE_DIR}/bin/bin_file.c"
"${CMAKE_CURRENT_SOURCE_DIR}/dfu/dfu_file.c"
"${CMAKE_CURRENT_SOURCE_DIR}/dfu/dfu_crc.c"
+1 -1
View File
@@ -5,7 +5,7 @@
#include "argtable3.h"
#include "cmd.h"
struct cmd* cmds[] = {&cmd_write, &cmd_run, &cmd_iot};
struct cmd* cmds[] = {&cmd_write, &cmd_iot};
static uint8_t cmds_count = sizeof(cmds) / sizeof(cmds[0]);