diff options
Diffstat (limited to 'teensy')
| -rw-r--r-- | teensy/Makefile | 26 | ||||
| -rw-r--r-- | teensy/import.c | 17 | ||||
| -rw-r--r-- | teensy/lexermemzip.c | 17 | ||||
| -rw-r--r-- | teensy/memzip.c | 106 | ||||
| -rw-r--r-- | teensy/memzip.h | 83 |
5 files changed, 16 insertions, 233 deletions
diff --git a/teensy/Makefile b/teensy/Makefile index 42cb5123e..9db22918c 100644 --- a/teensy/Makefile +++ b/teensy/Makefile @@ -78,12 +78,12 @@ SRC_C = \ hal_ftm.c \ hal_gpio.c \ help.c \ - import.c \ main.c \ lcd.c \ led.c \ - lexermemzip.c \ - memzip.c \ + lib/memzip/import.c \ + lib/memzip/lexermemzip.c \ + lib/memzip/memzip.c \ modpyb.c \ pin_defs_teensy.c \ reg.c \ @@ -92,6 +92,7 @@ SRC_C = \ uart.c \ usb.c \ + STM_SRC_C = $(addprefix stmhal/,\ gccollect.c \ input.c \ @@ -126,12 +127,13 @@ SRC_TEENSY = $(addprefix core/,\ OBJ = $(PY_O) $(addprefix $(BUILD)/, $(SRC_C:.c=.o) $(STM_SRC_C:.c=.o) $(STM_SRC_S:.s=.o) $(SRC_TEENSY:.c=.o)) OBJ += $(addprefix $(BUILD)/, $(LIB_SRC_C:.c=.o)) OBJ += $(BUILD)/pins_gen.o +OBJ += $(BUILD)/memzip-files.o all: hex -hex: $(BUILD)/micropython-mz.hex +hex: $(BUILD)/micropython.hex ifeq ($(ARDUINO),) -post_compile: $(BUILD)/micropython-mz.hex +post_compile: $(BUILD)/micropython.hex $(ECHO) "Please define ARDUINO (where TeensyDuino is installed)" exit 1 @@ -142,7 +144,7 @@ reboot: else TOOLS_PATH = $(ARDUINO)/hardware/tools -post_compile: $(BUILD)/micropython-mz.hex +post_compile: $(BUILD)/micropython.hex $(ECHO) "Preparing $@ for upload" $(Q)$(TOOLS_PATH)/teensy_post_compile -file="$(basename $(<F))" -path="$(abspath $(<D))" -tools="$(TOOLS_PATH)" @@ -163,15 +165,12 @@ ifeq ($(MEMZIP_DIR),) MEMZIP_DIR = memzip_files endif -$(BUILD)/micropython-mz.hex: $(BUILD)/micropython.hex $(shell find ${MEMZIP_DIR} -type f) - @$(ECHO) "Creating $@" - $(Q)./add-memzip.sh $< $@ ${MEMZIP_DIR} - $(BUILD)/%.hex: $(BUILD)/%.elf $(ECHO) "HEX $<" $(Q)$(OBJCOPY) -O ihex -R .eeprom "$<" "$@" MAKE_PINS = make-pins.py +MAKE_MEMZIP = ../lib/memzip/make-memzip.py BOARD_PINS = teensy_pins.csv AF_FILE = mk20dx256_af.csv PREFIX_FILE = mk20dx256_prefix.c @@ -197,6 +196,13 @@ $(BUILD)/%_gen.c $(HEADER_BUILD)/%.h $(HEADER_BUILD)/%_af_const.h $(BUILD)/%_qst $(BUILD)/pins_gen.o: $(BUILD)/pins_gen.c $(call compile_c) +$(BUILD)/memzip-files.o: $(BUILD)/memzip-files.c + $(call compile_c) + +$(BUILD)/memzip-files.c: $(shell find ${MEMZIP_DIR} -type f) + @$(ECHO) "Creating $@" + $(Q)$(PYTHON) $(MAKE_MEMZIP) --zip-file $(BUILD)/memzip-files.zip --c-file $@ $(MEMZIP_DIR) + $(BUILD)/%.pp: $(BUILD)/%.c $(ECHO) "PreProcess $<" $(Q)$(CC) $(CFLAGS) -E -Wp,-C,-dD,-dI -o $@ $< diff --git a/teensy/import.c b/teensy/import.c deleted file mode 100644 index 2d5225b88..000000000 --- a/teensy/import.c +++ /dev/null @@ -1,17 +0,0 @@ -#include <stdio.h> - -#include "py/lexer.h" -#include "memzip.h" - -mp_import_stat_t mp_import_stat(const char *path) { - MEMZIP_FILE_INFO info; - - if (memzip_stat(path, &info) != MZ_OK) { - return MP_IMPORT_STAT_NO_EXIST; - } - - if (info.is_dir) { - return MP_IMPORT_STAT_DIR; - } - return MP_IMPORT_STAT_FILE; -} diff --git a/teensy/lexermemzip.c b/teensy/lexermemzip.c deleted file mode 100644 index 72fe6b1c6..000000000 --- a/teensy/lexermemzip.c +++ /dev/null @@ -1,17 +0,0 @@ -#include <stdlib.h> - -#include "py/lexer.h" -#include "memzip.h" - -mp_lexer_t *mp_lexer_new_from_file(const char *filename) -{ - void *data; - size_t len; - - if (memzip_locate(filename, &data, &len) != MZ_OK) { - return NULL; - } - - return mp_lexer_new_from_str_len(qstr_from_str(filename), (const char *)data, (mp_uint_t)len, 0); -} - diff --git a/teensy/memzip.c b/teensy/memzip.c deleted file mode 100644 index 88c084381..000000000 --- a/teensy/memzip.c +++ /dev/null @@ -1,106 +0,0 @@ -#include <stdint.h> -#include <stdlib.h> -#include <string.h> -#include "py/mpconfig.h" -#include "py/misc.h" -#include "memzip.h" - -extern uint8_t _staticfs[]; - -const MEMZIP_FILE_HDR *memzip_find_file_header(const char *filename) { - - const MEMZIP_FILE_HDR *file_hdr = (const MEMZIP_FILE_HDR *)_staticfs; - uint8_t *mem_data; - - /* Zip file filenames don't have a leading /, so we strip it off */ - - if (*filename == '/') { - filename++; - } - while (file_hdr->signature == MEMZIP_FILE_HEADER_SIGNATURE) { - const char *file_hdr_filename = (const char *)&file_hdr[1]; - mem_data = (uint8_t *)file_hdr_filename; - mem_data += file_hdr->filename_len; - mem_data += file_hdr->extra_len; - if (!strncmp(file_hdr_filename, filename, file_hdr->filename_len)) { - /* We found a match */ - return file_hdr; - } - mem_data += file_hdr->uncompressed_size; - file_hdr = (const MEMZIP_FILE_HDR *)mem_data; - } - return NULL; -} - -bool memzip_is_dir(const char *filename) { - const MEMZIP_FILE_HDR *file_hdr = (const MEMZIP_FILE_HDR *)_staticfs; - uint8_t *mem_data; - - if (strcmp(filename, "/") == 0) { - // The root directory is a directory. - return true; - } - - // Zip filenames don't have a leading /, so we strip it off - if (*filename == '/') { - filename++; - } - size_t filename_len = strlen(filename); - - while (file_hdr->signature == MEMZIP_FILE_HEADER_SIGNATURE) { - const char *file_hdr_filename = (const char *)&file_hdr[1]; - if (filename_len < file_hdr->filename_len && - strncmp(file_hdr_filename, filename, filename_len) == 0 && - file_hdr_filename[filename_len] == '/') { - return true; - } - - mem_data = (uint8_t *)file_hdr_filename; - mem_data += file_hdr->filename_len; - mem_data += file_hdr->extra_len; - mem_data += file_hdr->uncompressed_size; - file_hdr = (const MEMZIP_FILE_HDR *)mem_data; - } - return NULL; - -} - -MEMZIP_RESULT memzip_locate(const char *filename, void **data, size_t *len) -{ - const MEMZIP_FILE_HDR *file_hdr = memzip_find_file_header(filename); - if (file_hdr == NULL) { - return MZ_NO_FILE; - } - if (file_hdr->compression_method != 0) { - return MZ_FILE_COMPRESSED; - } - - uint8_t *mem_data; - mem_data = (uint8_t *)&file_hdr[1]; - mem_data += file_hdr->filename_len; - mem_data += file_hdr->extra_len; - - *data = mem_data; - *len = file_hdr->uncompressed_size; - return MZ_OK; -} - -MEMZIP_RESULT memzip_stat(const char *path, MEMZIP_FILE_INFO *info) { - const MEMZIP_FILE_HDR *file_hdr = memzip_find_file_header(path); - if (file_hdr == NULL) { - if (memzip_is_dir(path)) { - info->file_size = 0; - info->last_mod_date = 0; - info->last_mod_time = 0; - info->is_dir = 1; - return MZ_OK; - } - return MZ_NO_FILE; - } - info->file_size = file_hdr->uncompressed_size; - info->last_mod_date = file_hdr->last_mod_date; - info->last_mod_time = file_hdr->last_mod_time; - info->is_dir = 0; - - return MZ_OK; -} diff --git a/teensy/memzip.h b/teensy/memzip.h deleted file mode 100644 index 667e2df7e..000000000 --- a/teensy/memzip.h +++ /dev/null @@ -1,83 +0,0 @@ -#pragma pack(push, 1) - -#define MEMZIP_FILE_HEADER_SIGNATURE 0x04034b50 -typedef struct -{ - uint32_t signature; - uint16_t version; - uint16_t flags; - uint16_t compression_method; - uint16_t last_mod_time; - uint16_t last_mod_date; - uint32_t crc32; - uint32_t compressed_size; - uint32_t uncompressed_size; - uint16_t filename_len; - uint16_t extra_len; - - /* char filename[filename_len] */ - /* uint8_t extra[extra_len] */ - -} MEMZIP_FILE_HDR; - -#define MEMZIP_CENTRAL_DIRECTORY_SIGNATURE 0x02014b50 -typedef struct -{ - uint32_t signature; - uint16_t version_made_by; - uint16_t version_read_with; - uint16_t flags; - uint16_t compression_method; - uint16_t last_mod_time; - uint16_t last_mod_date; - uint32_t crc32; - uint32_t compressed_size; - uint32_t uncompressed_size; - uint16_t filename_len; - uint16_t extra_len; - uint16_t disk_num; - uint16_t internal_file_attributes; - uint32_t external_file_attributes; - uint32_t file_header_offset; - - /* char filename[filename_len] */ - /* uint8_t extra[extra_len] */ - -} MEMZIP_CENTRAL_DIRECTORY_HDR; - -#define MEMZIP_END_OF_CENTRAL_DIRECTORY_SIGNATURE 0x06054b50 -typedef struct -{ - uint32_t signature; - uint16_t disk_num; - uint16_t central_directory_disk; - uint16_t num_central_directories_this_disk; - uint16_t total_central_directories; - uint32_t central_directory_size; - uint32_t central_directory_offset; - uint16_t comment_len; - - /* char comment[comment_len] */ - -} MEMZIP_END_OF_CENTRAL_DIRECTORY; - -#pragma pack(pop) - -typedef enum { - MZ_OK = 0, /* (0) Succeeded */ - MZ_NO_FILE, /* (1) Could not find the file. */ - MZ_FILE_COMPRESSED, /* (2) File is compressed (expecting uncompressed) */ - -} MEMZIP_RESULT; - -typedef struct { - uint32_t file_size; - uint16_t last_mod_date; - uint16_t last_mod_time; - uint8_t is_dir; - -} MEMZIP_FILE_INFO; - -MEMZIP_RESULT memzip_locate(const char *filename, void **data, size_t *len); - -MEMZIP_RESULT memzip_stat(const char *path, MEMZIP_FILE_INFO *info); |
