Skip to content

Commit

Permalink
Fix it to work under FreeBSD
Browse files Browse the repository at this point in the history
Add sp_drain() where needed. Without it FreeBSD won't pass the handshake
phase.
Also decreate max buffer size.
Tested with Pinecil v2 and it can write and check new firmware.
  • Loading branch information
porsolic committed Feb 8, 2023
1 parent 74edd14 commit 0b9c2ba
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 7 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ Open source tool and library for flashing Bouffalo RISC-V MCUs.
- [x] Windows
- [x] Linux
- [x] Apple
- [x] FreeBSD

# Building

Expand Down
16 changes: 10 additions & 6 deletions lib/blisp.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,12 @@

#define DEBUG

static void drain(struct sp_port* port) {
#if defined(__APPLE__) || defined(__FreeBSD__)
sp_drain(port);
#endif
}

int32_t blisp_device_init(struct blisp_device* device,
struct blisp_chip* chip) {
device->chip = chip;
Expand Down Expand Up @@ -130,9 +136,7 @@ int32_t blisp_send_command(struct blisp_device* device,
blisp_dlog("Received error or not written all data: %d", ret);
return BLISP_ERR_UNKNOWN;
}
#ifdef __APPLE__
sp_drain(serial_port);
#endif
drain(serial_port);

return BLISP_OK;
}
Expand Down Expand Up @@ -195,12 +199,12 @@ int32_t blisp_device_handshake(struct blisp_device* device, bool in_ef_loader) {
if (!in_ef_loader) {
if (device->is_usb) {
sp_blocking_write(serial_port, "BOUFFALOLAB5555RESET\0\0", 22, 100);
#ifdef __APPLE__
sp_drain(serial_port);
#endif
drain(serial_port);
}
}
ret = sp_blocking_write(serial_port, handshake_buffer, bytes_count, 500);
// not sure about Apple part, but FreeBSD needs it
drain(serial_port);
if (ret < 0) {
blisp_dlog("Handshake write failed, ret %d", ret);
return BLISP_ERR_UNKNOWN;
Expand Down
2 changes: 1 addition & 1 deletion lib/blisp_easy.c
Original file line number Diff line number Diff line change
Expand Up @@ -331,7 +331,7 @@ int32_t blisp_easy_flash_write(struct blisp_device* device,
uint32_t data_size,
blisp_easy_progress_callback progress_callback) {
int32_t ret;
#ifdef __APPLE__
#if defined (__APPLE__) || defined (__FreeBSD__)
const uint16_t buffer_max_size = 372 * 1;
#else
const uint16_t buffer_max_size = 2052;
Expand Down

0 comments on commit 0b9c2ba

Please sign in to comment.