diff options
Diffstat (limited to 'sw/programmer/linux/src/flash.c')
-rw-r--r-- | sw/programmer/linux/src/flash.c | 70 |
1 files changed, 0 insertions, 70 deletions
diff --git a/sw/programmer/linux/src/flash.c b/sw/programmer/linux/src/flash.c deleted file mode 100644 index 3527de8..0000000 --- a/sw/programmer/linux/src/flash.c +++ /dev/null @@ -1,70 +0,0 @@ -#include "flash.h" - -static int flash_serial_fd = -1; - -int flash_open(const char *path, unsigned long baudrate) -{ - flash_serial_fd = serial_open(path, baudrate); - - if (flash_serial_fd < 0) - return -1; - - return 0; -} - -int flash_write(const char *romfile, void (*log)(const char *)) -{ - int romfd; - int v; - ssize_t written; - - struct stat romst; - struct flash_blk head; - - uint8_t *buffer = malloc(FLASH_BLOCK_SIZE); - - romfd = open(romfile, O_RDONLY); - - if (fstat(romfd, &romst) != 0) - goto exit_romfd; - - while ((head.size = read(romfd, buffer, FLASH_BLOCK_SIZE))) { - if (head.size < 0) { - log("[!] Error while reading from file\n"); - break; - } - - head.addr = (uint16_t) lseek(romfd, 0, SEEK_CUR) - head.size; - - char logbuf[64]; - sprintf(logbuf, "[@] Writing a block of size %d at addr %d\n", head.size, head.addr); - log(logbuf); - - written = write(flash_serial_fd, &head, sizeof(struct flash_blk)); - if (written != sizeof(struct flash_blk)) { - log("[!] Some bytes of flash_blk haven't been written\n"); - } - - written = write(flash_serial_fd, buffer, head.size); - if (written != head.size) { - log("[#] Some bytes might not have been written\n"); - } - - while (!read(flash_serial_fd, &v, 1)); - - sprintf(logbuf, "[@] Written %d bytes at address %d\n", head.size, head.addr); - log(logbuf); - } - -exit_romfd: - close(romfd); - - free(buffer); - return 0; -} - -void flash_close(void) -{ - if (flash_serial_fd >= 0) - close(flash_serial_fd); -}
\ No newline at end of file |