diff --git a/README.md b/README.md index 13446f79d..3664f6d6a 100644 --- a/README.md +++ b/README.md @@ -93,7 +93,7 @@ Finally, before building, export the IDF_PATH variable This repository contains submodules! Clone using the --recursive option: - $ git clone --recursive https://github.com/pycom/pycom-micropython-sigfox.git + $ git clone --recursive https://github.com/nunomcruz/pycom-micropython-sigfox.git Alternatively checkout the modules manually: @@ -141,7 +141,8 @@ You can change the board type by using the BOARD variable: We currently support the following BOARD types: - WIPY LOPY SIPY GPY FIPY LOPY4 + WIPY LOPY SIPY GPY FIPY LOPY4 TBEAMv1 + For OEM modules, please use the following BOARD type: @@ -152,6 +153,14 @@ L04: LOPY4 G01: GPY ``` +Additionaly we also support a third party BOARD from TTGO, the T-Beam version 1, please use the following BOARD type: + + TBEAMv1 + +More info on this board can be found here: https://github.com/LilyGO/TTGO-T-Beam + +This should also work on other versions of the T-Beam, and other ESP32 boards with 4MB Flash and 4MB PSRAM. + To specify a serial port other than /dev/ttyUSB0, use ESPPORT variable: $ # On MacOS @@ -179,7 +188,7 @@ To create a release package that can be flashed with the Pycom firmware tool: To create a release package for all currently supported Pycom boards: $ cd esp32 - $ for BOARD in WIPY LOPY SIPY GPY FIPY LOPY4; do make BOARD=$BOARD clean && make BOARD=$BOARD release; done + $ for BOARD in WIPY LOPY SIPY GPY FIPY LOPY4 TBEAMv1; do make BOARD=$BOARD clean && make BOARD=$BOARD release; done To specify a directory other than the default build/ directory: @@ -190,7 +199,7 @@ To specify a directory other than the default build/ directory: To create a release package for all currently supported Pycom boards in a directory other than the default build/ directory: $ cd esp32 - $ for BOARD in WIPY LOPY SIPY GPY FIPY LOPY4; do make BOARD=$BOARD clean && make BOARD=$BOARD RELEASE_DIR=~/pycom-packages release; done + $ for BOARD in WIPY LOPY SIPY GPY FIPY LOPY4 TBEAMv1; do make BOARD=$BOARD clean && make BOARD=$BOARD RELEASE_DIR=~/pycom-packages release; done To inclue a step for copying IDF libs from IDF_PATH specify the following variable in the make command @@ -203,6 +212,8 @@ To Buiild the firmware with Pybytes libs use the following make variable To Disable RGB Led control use the following make variable RGB_LED=disable + +The RGB_LED is only enabled by default on Pycom boards ## Steps for using Secure Boot and Flash Encryption diff --git a/esp32/Makefile b/esp32/Makefile index 3e475b713..1b9712433 100644 --- a/esp32/Makefile +++ b/esp32/Makefile @@ -33,14 +33,14 @@ PYGATE_ENABLED ?= 0 MOD_COAP_ENABLED ?= 1 # LORA is enabled by default for supported boards -ifeq ($(BOARD), $(filter $(BOARD), LOPY LOPY4 FIPY)) +ifeq ($(BOARD), $(filter $(BOARD), LOPY LOPY4 FIPY TBEAMv1)) MOD_LORA_ENABLED ?= 1 else MOD_LORA_ENABLED ?= 0 endif # SIGFOX is enabled by default for supported boards -ifeq ($(BOARD), $(filter $(BOARD), SIPY LOPY4 FIPY)) +ifeq ($(BOARD), $(filter $(BOARD), SIPY LOPY4 FIPY TBEAMv1)) MOD_SIGFOX_ENABLED ?= 1 else MOD_SIGFOX_ENABLED ?= 0 @@ -83,7 +83,11 @@ RELEASE_DIR ?= $(BUILD_DIR) COPY_IDF_LIB ?= 0 LTE_LOG_BUFF ?= 0 -RGB_LED ?= enable +ifeq ($(BOARD), $(filter $(BOARD), TBEAMv1)) + RGB_LED ?= disable +else + RGB_LED ?= enable +endif # by default openthread over LoRa is enabled OPENTHREAD = off @@ -132,7 +136,7 @@ CFLAGS_XTENSA = -DESP_PLATFORM -Wpointer-arith -Wall -Werror=all -Wno-error=unus CFLAGS_XTENSA_OPT = -Os CFLAGS_XTENSA_PSRAM = -mfix-esp32-psram-cache-issue -CFLAGS = $(CFLAGS_XTENSA) $(CFLAGS_XTENSA_PSRAM) $(CFLAGS_XTENSA_OPT) -nostdlib -std=gnu99 -g3 -ggdb -fstrict-volatile-bitfields -Iboards/$(BOARD) +CFLAGS = $(CFLAGS_XTENSA) $(CFLAGS_XTENSA_PSRAM) $(CFLAGS_XTENSA_OPT) -nostdlib -std=gnu99 -g3 -ggdb -fstrict-volatile-bitfields -Iboards/$(BOARD) -DBOARD_$(BOARD) CFLAGS += $(CFLAGS_MOD) $(CFLAGS_EXTRA) CFLAGS_SIGFOX = $(CFLAGS_XTENSA) -O2 -nostdlib -std=gnu99 -g3 -ggdb -fstrict-volatile-bitfields -Iboards/$(BOARD) diff --git a/esp32/application.mk b/esp32/application.mk index 189a98b23..7909ffe35 100644 --- a/esp32/application.mk +++ b/esp32/application.mk @@ -394,7 +394,7 @@ ifeq ($(BOARD), $(filter $(BOARD), LOPY FIPY)) OBJ += $(addprefix $(BUILD)/, $(APP_LORA_SRC_C:.c=.o) $(APP_LIB_LORA_SRC_C:.c=.o) $(APP_SX1272_SRC_C:.c=.o) $(APP_MODS_LORA_SRC_C:.c=.o)) endif -ifeq ($(BOARD), $(filter $(BOARD), LOPY4)) +ifeq ($(BOARD), $(filter $(BOARD), LOPY4 TBEAMv1)) OBJ += $(addprefix $(BUILD)/, $(APP_LORA_SRC_C:.c=.o) $(APP_LIB_LORA_SRC_C:.c=.o) $(APP_SX1276_SRC_C:.c=.o) $(APP_MODS_LORA_SRC_C:.c=.o)) endif @@ -406,7 +406,7 @@ ifeq ($(BOARD), $(filter $(BOARD), LOPY FIPY)) OBJ += $(addprefix $(BUILD)/, $(APP_LORA_SRC_C:.c=.o) $(APP_LIB_LORA_SRC_C:.c=.o) $(APP_SX1272_SRC_C:.c=.o) $(APP_MODS_LORA_SRC_C:.c=.o)) endif -ifeq ($(BOARD), $(filter $(BOARD), LOPY4)) +ifeq ($(BOARD), $(filter $(BOARD), LOPY4 TBEAMv1)) OBJ += $(addprefix $(BUILD)/, $(APP_LORA_SRC_C:.c=.o) $(APP_LIB_LORA_SRC_C:.c=.o) $(APP_SX1276_SRC_C:.c=.o) $(APP_MODS_LORA_SRC_C:.c=.o)) endif @@ -416,7 +416,7 @@ ifeq ($(MOD_SIGFOX_ENABLED), 1) ifeq ($(BOARD), $(filter $(BOARD), SIPY)) OBJ += $(addprefix $(BUILD)/, $(APP_SIGFOX_MOD_SRC_C:.c=.o)) endif -ifeq ($(BOARD), $(filter $(BOARD), LOPY4 FIPY)) +ifeq ($(BOARD), $(filter $(BOARD), LOPY4 FIPY TBEAMv1)) OBJ += $(addprefix $(BUILD)/, $(APP_SIGFOX_MOD_SRC_C:.c=.o)) endif endif @@ -427,7 +427,7 @@ endif # add OPENTHREAD code only if flag enabled and for LOPY, LOPY4 and FIPY ifeq ($(OPENTHREAD), on) -ifeq ($(BOARD), $(filter $(BOARD), LOPY LOPY4 FIPY)) +ifeq ($(BOARD), $(filter $(BOARD), LOPY LOPY4 FIPY TBEAMv1)) OBJ += $(addprefix $(BUILD)/, $(APP_LORA_OPENTHREAD_SRC_C:.c=.o) $(APP_MOD_MESH_SRC_C:.c=.o)) endif endif # ifeq ($(OPENTHREAD), on) @@ -454,10 +454,10 @@ BOOT_OBJ = $(addprefix $(BUILD)/, $(BOOT_SRC_C:.c=.o)) # List of sources for qstr extraction SRC_QSTR += $(APP_MODS_SRC_C) $(APP_UTIL_SRC_C) $(APP_STM_SRC_C) $(APP_LIB_SRC_C) $(SRC_MOD) -ifeq ($(BOARD), $(filter $(BOARD), LOPY LOPY4 FIPY)) +ifeq ($(BOARD), $(filter $(BOARD), LOPY LOPY4 FIPY TBEAMv1)) SRC_QSTR += $(APP_MODS_LORA_SRC_C) endif -ifeq ($(BOARD), $(filter $(BOARD), SIPY LOPY4 FIPY)) +ifeq ($(BOARD), $(filter $(BOARD), SIPY LOPY4 FIPY TBEAMv1)) ifeq ($(MOD_SIGFOX_ENABLED), 1) SRC_QSTR += $(APP_SIGFOX_MOD_SRC_C) endif @@ -467,7 +467,7 @@ SRC_QSTR += $(APP_MODS_LTE_SRC_C) endif ifeq ($(OPENTHREAD), on) -ifeq ($(BOARD), $(filter $(BOARD), LOPY LOPY4 FIPY)) +ifeq ($(BOARD), $(filter $(BOARD), LOPY LOPY4 FIPY TBEAMv1)) SRC_QSTR += $(APP_MOD_MESH_SRC_C) endif endif # ifeq ($(OPENTHREAD), on) @@ -535,6 +535,16 @@ endif ifeq ($(BOARD), LOPY) APP_BIN = $(BUILD)/lopy.bin endif +ifeq ($(BOARD), TBEAMv1) + APP_BIN = $(BUILD)/tbeamv1.bin + ifeq ($(MOD_SIGFOX_ENABLED), 1) + $(BUILD)/sigfox/radio_sx127x.o: CFLAGS = $(CFLAGS_SIGFOX) + $(BUILD)/sigfox/timer.o: CFLAGS = $(CFLAGS_SIGFOX) + $(BUILD)/sigfox/transmission.o: CFLAGS = $(CFLAGS_SIGFOX) + $(BUILD)/sigfox/targets/%.o: CFLAGS = $(CFLAGS_SIGFOX) + $(BUILD)/lora/spi-board.o: CFLAGS = $(CFLAGS_SIGFOX) + endif +endif ifeq ($(BOARD), LOPY4) APP_BIN = $(BUILD)/lopy4.bin ifeq ($(MOD_SIGFOX_ENABLED), 1) @@ -754,7 +764,7 @@ else ifeq ($(BOARD), $(filter $(BOARD), SIPY)) $(ECHO) "$(ESPTOOLPY_WRITE_FLASH) 0x0 $(BOOTLOADER_REFLASH_DIGEST_ENC) $(PART_OFFSET) $(PART_BIN_ENCRYPT_8MB) $(APP_OFFSET) $(APP_BIN_ENCRYPT)" $(ECHO) "Generating Encrypted Images for 4MB devices, you can use make flash and it would be handled automatically!" -endif #($(BOARD), $(filter $(BOARD), SIPY)) +endif #($(BOARD), $(filter $(BOARD), SIPY TBEAMv1)) $(ECHO) "$(ESPTOOLPY_WRITE_FLASH) 0x0 $(BOOTLOADER_REFLASH_DIGEST_ENC) $(PART_OFFSET) $(PART_BIN_ENCRYPT_4MB) $(APP_OFFSET) $(APP_BIN_ENCRYPT)" endif #ifeq ($(BOARD), $(filter $(BOARD), FIPY GPY LOPY4)) $(ECHO) $(SEPARATOR) @@ -837,10 +847,10 @@ endif ifeq ($(BOARD), $(filter $(BOARD), FIPY GPY LOPY4)) $(ECHO) "$(ESPTOOLPY_WRITE_FLASH) 0x0 $(BOOTLOADER_REFLASH_DIGEST_ENC) $(PART_OFFSET) $(PART_BIN_ENCRYPT_8MB) $(APP_OFFSET) $(APP_BIN_ENCRYPT)" else -ifeq ($(BOARD), $(filter $(BOARD), SIPY)) +ifeq ($(BOARD), $(filter $(BOARD), SIPY TBEAMv1)) $(ECHO) "$(ESPTOOLPY_WRITE_FLASH) 0x0 $(BOOTLOADER_REFLASH_DIGEST_ENC) $(PART_OFFSET) $(PART_BIN_ENCRYPT_8MB) $(APP_OFFSET) $(APP_BIN_ENCRYPT)" $(ECHO) "Generating Encrypted Images for 4MB devices, you can use make flash and it would be handled automatically!" -endif #($(BOARD), $(filter $(BOARD), SIPY)) +endif #($(BOARD), $(filter $(BOARD), SIPY TBEAMv1)) $(ECHO) "$(ESPTOOLPY_WRITE_FLASH) 0x0 $(BOOTLOADER_REFLASH_DIGEST_ENC) $(PART_OFFSET) $(PART_BIN_ENCRYPT_4MB) $(APP_OFFSET) $(APP_BIN_ENCRYPT)" endif #ifeq ($(BOARD), $(filter $(BOARD), FIPY GPY LOPY4)) $(ECHO) $(SEPARATOR) diff --git a/esp32/boards/TBEAMv1/mpconfigboard.h b/esp32/boards/TBEAMv1/mpconfigboard.h new file mode 100644 index 000000000..ac650c1a2 --- /dev/null +++ b/esp32/boards/TBEAMv1/mpconfigboard.h @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2019, Pycom Limited. + * + * This software is licensed under the GNU GPL version 3 or any + * later version, with permitted additional terms. For more information + * see the Pycom Licence v1.0 document supplied with this file, or + * available at https://www.pycom.io/opensource/licensing + */ + +#define TBEAMv1 + +#define MICROPY_HW_BOARD_NAME "TBEAMv1" +#define MICROPY_PY_SYS_PLATFORM "TBEAMv1" +#define MICROPY_HW_HB_PIN_NUM (0) +#define MICROPY_HW_SAFE_PIN_NUM (25) + +#define DEFAULT_AP_SSID "TBEAMv1-wlan" + +#define MICROPY_LPWAN_DIO_PIN + +extern uint32_t micropy_hw_flash_size; + +extern uint32_t micropy_hw_antenna_diversity_pin_num; + +extern bool micropy_lpwan_use_reset_pin; +extern uint32_t micropy_lpwan_reset_pin_num; +extern uint32_t micropy_lpwan_reset_pin_index; +extern void * micropy_lpwan_reset_pin; + +extern uint32_t micropy_lpwan_dio_pin_num; +extern uint32_t micropy_lpwan_dio_pin_index; +extern void * micropy_lpwan_dio_pin; + +extern uint32_t micropy_lpwan_ncs_pin_num; +extern uint32_t micropy_lpwan_ncs_pin_index; +extern void * micropy_lpwan_ncs_pin; diff --git a/esp32/boards/TBEAMv1/pins.csv b/esp32/boards/TBEAMv1/pins.csv new file mode 100644 index 000000000..26aaf753d --- /dev/null +++ b/esp32/boards/TBEAMv1/pins.csv @@ -0,0 +1,26 @@ +G3,GPIO3,P0 +G1,GPIO1,P1 +G0,GPIO0,P2 +G4,GPIO4,P3 +G15,GPIO15,P4 +G5,GPIO5,P5 +G27,GPIO27,P6 +G19,GPIO19,P7 +G2,GPIO2,P8 +G12,GPIO12,P9 +G13,GPIO13,P10 +G22,GPIO22,P11 +G21,GPIO21,P12 +G36,GPI36,P13 +G37,GPI37,P14 +G38,GPI38,P15 +G39,GPI39,P16 +G35,GPI35,P17 +G34,GPI34,P18 +G32,GPIO32,P19 +G33,GPIO33,P20 +G26,GPIO26,P21 +G25,GPIO25,P22 +G14,GPIO14,P23 +G18,GPIO18,P97 +G23,GPIO23,P98 diff --git a/esp32/boards/TBEAMv1/script b/esp32/boards/TBEAMv1/script new file mode 100644 index 000000000..3a7c1fa5f --- /dev/null +++ b/esp32/boards/TBEAMv1/script @@ -0,0 +1,13 @@ +[ + ["e", "0x1000", "0x40000"], + ["e", "0x41000", "0x40000"], + ["e", "0x81000", "0x40000"], + ["e", "0xC1000", "0x40000"], + ["e", "0x101000", "0x40000"], + ["e", "0x141000", "0x40000"], + ["e", "0x181000", "0x40000"], + ["e", "0x1C1000", "0x40000"], + ["w", "0x1000", "bootloader.bin"], + ["w", "0x8000", "partitions_4MB.bin"], + ["w", "0x10000", "tbeamv1.bin"] +] diff --git a/esp32/boards/TBEAMv1/script2 b/esp32/boards/TBEAMv1/script2 new file mode 100644 index 000000000..2f9852de5 --- /dev/null +++ b/esp32/boards/TBEAMv1/script2 @@ -0,0 +1,13 @@ +{ + "version" : "2.1", + "partitions" : { + "factory" : ["0x10000", "0x1AE000"], + "ota_0" : ["0x210000", "0x1AE000"], + "otadata" : ["0x1FF000", "0x1000"] + }, + "script" : [ + ["w", "bootloader", "bootloader.bin"], + ["w", "partitions", "partitions_4MB.bin"], + ["w", "factory", "tbeamv1.bin"] + ] +} diff --git a/esp32/boards/TBEAMv1/script_4MB b/esp32/boards/TBEAMv1/script_4MB new file mode 100644 index 000000000..adae768f9 --- /dev/null +++ b/esp32/boards/TBEAMv1/script_4MB @@ -0,0 +1,13 @@ +{ + "version" : "2.1", + "partitions" : { + "factory" : ["0x10000", "0x1AE000"], + "ota_0" : ["0x1C0000", "0x1AE000"], + "otadata" : ["0x1BE000", "0x1000"] + }, + "script" : [ + ["w", "bootloader", "bootloader.bin"], + ["w", "partitions", "partitions_4MB.bin"], + ["w", "factory", "tbeamv1.bin"] + ] +} diff --git a/esp32/boards/TBEAMv1/script_4MB_enc b/esp32/boards/TBEAMv1/script_4MB_enc new file mode 100644 index 000000000..514424016 --- /dev/null +++ b/esp32/boards/TBEAMv1/script_4MB_enc @@ -0,0 +1,13 @@ +{ + "version" : "2.1", + "partitions" : { + "factory" : ["0x10000", "0x1AE000"], + "ota_0" : ["0x1C0000", "0x1AE000"], + "otadata" : ["0x1BE000", "0x1000"] + }, + "script" : [ + ["w", "secureboot", "bootloader-reflash-digest.bin_enc"], + ["w", "partitions", "partitions_4MB.bin_enc"], + ["w", "factory", "tbeamv1.bin_enc"] + ] +} diff --git a/esp32/boards/TBEAMv1/script_8MB b/esp32/boards/TBEAMv1/script_8MB new file mode 100644 index 000000000..94bbb89a4 --- /dev/null +++ b/esp32/boards/TBEAMv1/script_8MB @@ -0,0 +1,13 @@ +{ + "version" : "2.1", + "partitions" : { + "factory" : ["0x10000", "0x1EF000"], + "ota_0" : ["0x210000", "0x1EF000"], + "otadata" : ["0x1FF000", "0x1000"] + }, + "script" : [ + ["w", "bootloader", "bootloader.bin"], + ["w", "partitions", "partitions_8MB.bin"], + ["w", "factory", "lopy4.bin"] + ] +} diff --git a/esp32/boards/TBEAMv1/script_8MB_enc b/esp32/boards/TBEAMv1/script_8MB_enc new file mode 100644 index 000000000..65683be9a --- /dev/null +++ b/esp32/boards/TBEAMv1/script_8MB_enc @@ -0,0 +1,13 @@ +{ + "version" : "2.1", + "partitions" : { + "factory" : ["0x10000", "0x1EF000"], + "ota_0" : ["0x210000", "0x1EF000"], + "otadata" : ["0x1FF000", "0x1000"] + }, + "script" : [ + ["w", "secureboot", "bootloader-reflash-digest.bin_enc"], + ["w", "partitions", "partitions_8MB.bin_enc"], + ["w", "factory", "lopy4.bin_enc"] + ] +} diff --git a/esp32/boards/make-pins.py b/esp32/boards/make-pins.py index 69749aff7..b3f23fa71 100644 --- a/esp32/boards/make-pins.py +++ b/esp32/boards/make-pins.py @@ -139,7 +139,7 @@ def parse_af_file(self, filename, pin_col, pinname_col, af_start_col): raise ValueError("Invalid pin number {:s} in row {:s}".format(row[pin_col]), row) pin = Pin(row[pinname_col], pin_num) # FIXME: hack to force the SX1272 pins to be available - if row[pinname_col] == 'GPIO17' or row[pinname_col] == 'GPIO18' or row[pinname_col] == 'GPIO23': + if row[pinname_col] == 'GPIO17' or row[pinname_col] == 'GPIO18' or row[pinname_col] == 'GPIO26' or row[pinname_col] == 'GPIO23' or row[pinname_col] == 'GPIO14': pin.board_pin = True self.cpu_pins.append(NamedPin(row[pinname_col], pin)) # af_idx = 0 diff --git a/esp32/fatfs/src/drivers/sflash_diskio.c b/esp32/fatfs/src/drivers/sflash_diskio.c index 421fb98a7..acd07dfbb 100644 --- a/esp32/fatfs/src/drivers/sflash_diskio.c +++ b/esp32/fatfs/src/drivers/sflash_diskio.c @@ -48,8 +48,13 @@ DRESULT sflash_disk_init (void) { if (!sflash_init_done) { // this is how we diferentiate flash sizes in Pycom modules if (esp32_get_chip_rev() > 0) { +#if defined(BOARD_TBEAMv1) + sflash_start_address = SFLASH_START_ADDR_4MB; + sflash_fs_sector_count = SFLASH_FS_SECTOR_COUNT_4MB; +#else sflash_start_address = SFLASH_START_ADDR_8MB; sflash_fs_sector_count = SFLASH_FS_SECTOR_COUNT_8MB; +#endif } else { sflash_start_address = SFLASH_START_ADDR_4MB; sflash_fs_sector_count = SFLASH_FS_SECTOR_COUNT_4MB; diff --git a/esp32/ftp/updater.c b/esp32/ftp/updater.c index 54c2a3443..f38e6773d 100644 --- a/esp32/ftp/updater.c +++ b/esp32/ftp/updater.c @@ -76,7 +76,11 @@ static bool updater_is_delta_file(void); bool updater_read_boot_info (boot_info_t *boot_info, uint32_t *boot_info_offset) { esp_partition_info_t partition_info[PARTITIONS_COUNT_4MB]; +#if defined(BOARD_TBEAMv1) + uint8_t part_count = PARTITIONS_COUNT_4MB; +#else uint8_t part_count = (esp32_get_chip_rev() > 0 ? PARTITIONS_COUNT_8MB : PARTITIONS_COUNT_4MB); +#endif ESP_LOGV(TAG, "Reading boot info\n"); if (ESP_OK != updater_spi_flash_read(CONFIG_PARTITION_TABLE_OFFSET, (void *)partition_info, (sizeof(esp_partition_info_t) * part_count), true)) { @@ -105,7 +109,11 @@ bool updater_check_path (void *path) { bool updater_start (void) { +#if defined(BOARD_TBEAMv1) + updater_data.size = IMG_SIZE_4MB; +#else updater_data.size = (esp32_get_chip_rev() > 0 ? IMG_SIZE_8MB : IMG_SIZE_4MB); +#endif // check which one should be the next active image updater_data.offset = updater_ota_next_slot_address(); @@ -582,7 +590,11 @@ bool updater_write_boot_info(boot_info_t *boot_info, uint32_t boot_info_offset) int updater_ota_next_slot_address() { +#if defined(BOARD_TBEAMv1) + int ota_offset = IMG_UPDATE1_OFFSET_4MB; +#else int ota_offset = (esp32_get_chip_rev() > 0 ? IMG_UPDATE1_OFFSET_8MB : IMG_UPDATE1_OFFSET_4MB); +#endif // check which one should be the next active image if (updater_read_boot_info (&boot_info, &boot_info_offset)) { @@ -595,7 +607,11 @@ int updater_ota_next_slot_address() { } else { +#if defined(BOARD_TBEAMv1) + ota_offset = IMG_UPDATE1_OFFSET_4MB; +#else ota_offset = (esp32_get_chip_rev() > 0 ? IMG_UPDATE1_OFFSET_8MB : IMG_UPDATE1_OFFSET_4MB); +#endif } } else @@ -603,7 +619,11 @@ int updater_ota_next_slot_address() { if(boot_info.ActiveImg == IMG_ACT_FACTORY) { +#if defined(BOARD_TBEAMv1) + ota_offset = IMG_UPDATE1_OFFSET_4MB; +#else ota_offset = (esp32_get_chip_rev() > 0 ? IMG_UPDATE1_OFFSET_8MB : IMG_UPDATE1_OFFSET_4MB); +#endif } else { diff --git a/esp32/hal/esp32_mphal.c b/esp32/hal/esp32_mphal.c index 78f8324fd..c453ce97e 100644 --- a/esp32/hal/esp32_mphal.c +++ b/esp32/hal/esp32_mphal.c @@ -41,7 +41,7 @@ #include "driver/timer.h" typedef void (*HAL_tick_user_cb_t)(void); -#if defined (LOPY) || defined(LOPY4) || defined(FIPY) +#if defined (LOPY) || defined(LOPY4) || defined(FIPY) || defined (TBEAMv1) DRAM_ATTR static HAL_tick_user_cb_t HAL_tick_user_cb; #define TIMER1_ALARM_TIME_MS 1U @@ -51,7 +51,7 @@ DRAM_ATTR static HAL_tick_user_cb_t HAL_tick_user_cb; #endif -#if defined (LOPY) || defined(LOPY4) || defined(FIPY) +#if defined (LOPY) || defined(LOPY4) || defined(FIPY) || defined (TBEAMv1) IRAM_ATTR static void HAL_TimerCallback (void* arg) { if (HAL_tick_user_cb != NULL) { @@ -72,7 +72,7 @@ void HAL_set_tick_cb (void *cb) { void mp_hal_init(bool soft_reset) { if (!soft_reset) { - #if defined (LOPY) || defined(LOPY4) || defined(FIPY) + #if defined (LOPY) || defined(LOPY4) || defined(FIPY) || defined (TBEAMv1) // setup the HAL timer for LoRa HAL_tick_user_cb = NULL; diff --git a/esp32/hal/esp32_mphal.h b/esp32/hal/esp32_mphal.h index a025aef1d..f24dab124 100644 --- a/esp32/hal/esp32_mphal.h +++ b/esp32/hal/esp32_mphal.h @@ -10,7 +10,7 @@ #ifndef _INCLUDED_MPHAL_H_ #define _INCLUDED_MPHAL_H_ -#if defined (LOPY) || defined(LOPY4) || defined(FIPY) +#if defined (LOPY) || defined(LOPY4) || defined(FIPY) || defined (TBEAMv1) void HAL_set_tick_cb (void *cb); #endif void mp_hal_init(bool soft_reset); diff --git a/esp32/lora/board.c b/esp32/lora/board.c index d250be35b..793292d07 100644 --- a/esp32/lora/board.c +++ b/esp32/lora/board.c @@ -48,7 +48,7 @@ void BoardInitMcu( void ) #if defined(LOPY) || defined (FIPY) SpiInit( &SX1272.Spi, RADIO_MOSI, RADIO_MISO, RADIO_SCLK, NC ); SX1272IoInit( ); - #elif defined(LOPY4) + #elif defined(LOPY4) || defined (TBEAMv1) SpiInit( &SX1276.Spi, RADIO_MOSI, RADIO_MISO, RADIO_SCLK, NC ); SX1276IoInit( ); #endif @@ -64,7 +64,7 @@ void BoardDeInitMcu( void ) #if defined(LOPY) || defined (FIPY) SpiDeInit( &SX1272.Spi ); SX1272IoDeInit( ); -#elif defined(LOPY4) +#elif defined(LOPY4) || defined (TBEAMv1) SpiDeInit( &SX1276.Spi ); SX1276IoDeInit( ); #endif diff --git a/esp32/lora/board.h b/esp32/lora/board.h index 758967bf7..ffba69396 100644 --- a/esp32/lora/board.h +++ b/esp32/lora/board.h @@ -46,7 +46,7 @@ Maintainer: Miguel Luis and Gregory Cristian #if defined(LOPY) || defined (FIPY) #include "sx1272/sx1272.h" #include "sx1272-board.h" -#elif defined(LOPY4) +#elif defined(LOPY4) || defined (TBEAMv1) #include "sx1276/sx1276.h" #include "sx1276-board.h" #endif @@ -63,7 +63,7 @@ Maintainer: Miguel Luis and Gregory Cristian /*! * Board MCU pins definitions */ -#if defined (LOPY) || defined (LOPY4) || defined (FIPY) +#if defined (LOPY) || defined (LOPY4) || defined (FIPY) || defined (TBEAMv1) #define RADIO_RESET micropy_lpwan_reset_pin_index #define RADIO_MOSI GPIO27 diff --git a/esp32/lora/gpio-board.c b/esp32/lora/gpio-board.c index d2ea596fe..0a2247bab 100644 --- a/esp32/lora/gpio-board.c +++ b/esp32/lora/gpio-board.c @@ -37,6 +37,7 @@ pin_obj_t *gpio_board_map[NBR_GP_PINS] = { &pin_GPIO5, &pin_GPIO27, &pin_GPIO19, + &pin_GPIO26, }; /*! diff --git a/esp32/lora/pinName-board.h b/esp32/lora/pinName-board.h index 4ff7e3247..53ed0db64 100644 --- a/esp32/lora/pinName-board.h +++ b/esp32/lora/pinName-board.h @@ -34,6 +34,6 @@ Maintainer: Miguel Luis and Gregory Cristian * ESP32 Pin Names */ #define MCU_PINS \ - GPIO17 = 0, GPIO18, GPIO23, GPIO5, GPIO27, GPIO19, NBR_GP_PINS + GPIO17 = 0, GPIO18, GPIO23, GPIO5, GPIO27, GPIO19, GPIO26, NBR_GP_PINS #endif // __PIN_NAME_MCU_H__ diff --git a/esp32/lora/spi-board.c b/esp32/lora/spi-board.c index 61b51077a..c12958dd5 100644 --- a/esp32/lora/spi-board.c +++ b/esp32/lora/spi-board.c @@ -161,11 +161,11 @@ void SpiFrequency( Spi_t *obj, uint32_t hz ) { * \param [IN] outData Byte to be sent * \retval inData Received byte. */ -#if defined(LOPY) || defined(LOPY4) || defined(FIPY) +#if defined(LOPY) || defined(LOPY4) || defined(FIPY) || defined (TBEAMv1) IRAM_ATTR uint16_t SpiInOut(Spi_t *obj, uint16_t outData) { uint32_t spiNum = (uint32_t)obj->Spi; -#if defined(FIPY) || defined(LOPY4) +#if defined(FIPY) || defined(LOPY4) || defined (TBEAMv1) // set data send buffer length (1 byte) SET_PERI_REG_BITS(SPI_MOSI_DLEN_REG(spiNum), SPI_USR_MOSI_DBITLEN, 7, SPI_USR_MOSI_DBITLEN_S); SET_PERI_REG_BITS(SPI_MISO_DLEN_REG(spiNum), SPI_USR_MISO_DBITLEN, 7, SPI_USR_MISO_DBITLEN_S); @@ -197,7 +197,7 @@ IRAM_ATTR uint8_t SpiInOut(uint32_t spiNum, uint32_t outData) { } #endif -#if defined(SIPY) || defined(LOPY4) || defined(FIPY) +#if defined(SIPY) || defined(LOPY4) || defined(FIPY) || defined (TBEAMv1) /*! * \brief Sends outData * diff --git a/esp32/lora/sx1276-board.c b/esp32/lora/sx1276-board.c index 9bee40d23..0277a61e1 100755 --- a/esp32/lora/sx1276-board.c +++ b/esp32/lora/sx1276-board.c @@ -16,7 +16,7 @@ Maintainer: Miguel Luis and Gregory Cristian #include "board.h" #include "esp_attr.h" -#if defined(LOPY4) +#if defined(LOPY4) || defined (TBEAMv1) #include "radio.h" #include "sx1276/sx1276.h" diff --git a/esp32/lora/sx1276-board.h b/esp32/lora/sx1276-board.h index cd82ad4bf..91c93a783 100755 --- a/esp32/lora/sx1276-board.h +++ b/esp32/lora/sx1276-board.h @@ -20,6 +20,30 @@ Maintainer: Miguel Luis and Gregory Cristian * * \remark Can be automatically generated by the SX1276 GUI (not yet implemented) */ +#if defined(BOARD_TBEAMv1) +#define RADIO_INIT_REGISTERS_VALUE \ +{ \ + { MODEM_FSK , REG_LNA , 0x23 },\ + { MODEM_FSK , REG_RXCONFIG , 0x1E },\ + { MODEM_FSK , REG_RSSICONFIG , 0xD2 },\ + { MODEM_FSK , REG_AFCFEI , 0x01 },\ + { MODEM_FSK , REG_PREAMBLEDETECT , 0xAA },\ + { MODEM_FSK , REG_OSC , 0x07 },\ + { MODEM_FSK , REG_SYNCCONFIG , 0x12 },\ + { MODEM_FSK , REG_SYNCVALUE1 , 0xC1 },\ + { MODEM_FSK , REG_SYNCVALUE2 , 0x94 },\ + { MODEM_FSK , REG_SYNCVALUE3 , 0xC1 },\ + { MODEM_FSK , REG_PACKETCONFIG1 , 0xD8 },\ + { MODEM_FSK , REG_FIFOTHRESH , 0x8F },\ + { MODEM_FSK , REG_IMAGECAL , 0x02 },\ + { MODEM_FSK , REG_DIOMAPPING1 , 0x00 },\ + { MODEM_FSK , REG_DIOMAPPING2 , 0x30 },\ + { MODEM_LORA, REG_LR_TCXO , 0x09 },\ + { MODEM_LORA, REG_LR_PAYLOADMAXLENGTH, 0x40 },\ +} \ + +#else + #define RADIO_INIT_REGISTERS_VALUE \ { \ { MODEM_FSK , REG_LNA , 0x23 },\ @@ -41,6 +65,8 @@ Maintainer: Miguel Luis and Gregory Cristian { MODEM_LORA, REG_LR_PAYLOADMAXLENGTH, 0x40 },\ } \ +#endif + #define RF_MID_BAND_THRESH 525000000 /*! diff --git a/esp32/main.c b/esp32/main.c index 5a6ab0f90..774bd3eeb 100644 --- a/esp32/main.c +++ b/esp32/main.c @@ -59,11 +59,11 @@ TaskHandle_t mpTaskHandle; TaskHandle_t svTaskHandle; TaskHandle_t SmartConfTaskHandle; TaskHandle_t ethernetTaskHandle; -#if defined(LOPY) || defined (LOPY4) || defined (FIPY) +#if defined(LOPY) || defined (LOPY4) || defined (FIPY) || defined (TBEAMv1) TaskHandle_t xLoRaTaskHndl; DRAM_ATTR TaskHandle_t xLoRaTimerTaskHndl; #endif -#if defined(SIPY) || defined (LOPY4) || defined (FIPY) +#if defined(SIPY) || defined (LOPY4) || defined (FIPY) || defined (TBEAMv1) TaskHandle_t xSigfoxTaskHndl; #endif #if defined(GPY) || defined (FIPY) @@ -155,7 +155,11 @@ void app_main(void) { #endif // differentiate the Flash Size (either 8MB or 4MB) based on ESP32 rev id +#if defined(BOARD_TBEAMv1) + micropy_hw_flash_size = 0x400000; +#else micropy_hw_flash_size = (esp32_get_chip_rev() > 0 ? 0x800000 : 0x400000); +#endif // propagating the Flash Size in the global variable (used in multiple IDF modules) g_rom_flashchip.chip_size = micropy_hw_flash_size; @@ -167,11 +171,24 @@ void app_main(void) { micropy_lpwan_ncs_pin_num = 18; micropy_lpwan_ncs_pin = &pin_GPIO18; +#if defined(BOARD_TBEAMv1) + micropy_lpwan_reset_pin_index = 2; + micropy_lpwan_reset_pin_num = 23; + micropy_lpwan_reset_pin = &pin_GPIO23; + micropy_lpwan_use_reset_pin = true; +#else micropy_lpwan_use_reset_pin = false; +#endif +#if defined(BOARD_TBEAMv1) + micropy_lpwan_dio_pin_index = 6; + micropy_lpwan_dio_pin_num = 26; + micropy_lpwan_dio_pin = &pin_GPIO26; +#else micropy_lpwan_dio_pin_index = 2; micropy_lpwan_dio_pin_num = 23; micropy_lpwan_dio_pin = &pin_GPIO23; +#endif mpTaskStack = malloc(MICROPY_TASK_STACK_SIZE_PSRAM); diff --git a/esp32/mods/modlora.c b/esp32/mods/modlora.c index cf6333319..9f8d4b05d 100644 --- a/esp32/mods/modlora.c +++ b/esp32/mods/modlora.c @@ -312,7 +312,7 @@ STATIC mp_obj_t lora_nvram_erase (mp_obj_t self_in); /****************************************************************************** DECLARE PUBLIC DATA ******************************************************************************/ -#if defined(FIPY) || defined(LOPY4) +#if defined(FIPY) || defined(LOPY4) || defined (TBEAMv1) SemaphoreHandle_t xLoRaSigfoxSem; #endif @@ -324,7 +324,7 @@ void modlora_init0(void) { xRxQueue = xQueueCreate(LORA_DATA_QUEUE_SIZE_MAX, sizeof(lora_rx_data_t)); xCbQueue = xQueueCreate(LORA_CB_QUEUE_SIZE_MAX, sizeof(modlora_timerCallback)); LoRaEvents = xEventGroupCreate(); -#if defined(FIPY) || defined(LOPY4) +#if defined(FIPY) || defined(LOPY4) || defined (TBEAMv1) xLoRaSigfoxSem = xSemaphoreCreateMutex(); #endif @@ -559,7 +559,7 @@ static void McpsConfirm (McpsConfirm_t *McpsConfirm) { status |= LORA_STATUS_ERROR; xEventGroupSetBits(LoRaEvents, status); } -#if defined(FIPY) || defined(LOPY4) +#if defined(FIPY) || defined(LOPY4) || defined (TBEAMv1) xSemaphoreGive(xLoRaSigfoxSem); #endif } @@ -753,7 +753,7 @@ static void MlmeConfirm (MlmeConfirm_t *MlmeConfirm) { break; } } -#if defined(FIPY) || defined(LOPY4) +#if defined(FIPY) || defined(LOPY4) || defined (TBEAMv1) xSemaphoreGive(xLoRaSigfoxSem); #endif } @@ -783,7 +783,7 @@ static void MlmeIndication( MlmeIndication_t *mlmeIndication ) { case MLME_SCHEDULE_UPLINK: {// The MAC signals that we shall provide an uplink as soon as possible - printf("Trying to send uplink\n"); + //printf("Trying to send uplink\n"); OnTxNextActReqTimerEvent( ); break; } @@ -983,7 +983,7 @@ static void TASK_LoRa (void *pvParameters) { // taking sigfox semaphore blocks ?!?!? // maybe, in the end of TX sempahore has to be released sooner -// #if defined(FIPY) || defined(LOPY4) +// #if defined(FIPY) || defined(LOPY4) || defined (TBEAMv1) // xSemaphoreTake(xLoRaSigfoxSem, portMAX_DELAY); // #endif Radio.Send(task_cmd_data.info.tx.data, task_cmd_data.info.tx.len); @@ -1045,7 +1045,7 @@ static void TASK_LoRa (void *pvParameters) { mcpsReq.Req.Unconfirmed.Datarate = task_cmd_data.info.tx.dr; } } - #if defined(FIPY) || defined(LOPY4) + #if defined(FIPY) || defined(LOPY4) || defined (TBEAMv1) xSemaphoreTake(xLoRaSigfoxSem, portMAX_DELAY); #endif @@ -1060,7 +1060,7 @@ static void TASK_LoRa (void *pvParameters) { lora_obj.state = E_LORA_STATE_IDLE; status |= LORA_STATUS_ERROR; xEventGroupSetBits(LoRaEvents, status); - #if defined(FIPY) || defined(LOPY4) + #if defined(FIPY) || defined(LOPY4) || defined (TBEAMv1) xSemaphoreGive(xLoRaSigfoxSem); #endif } else { @@ -1072,7 +1072,7 @@ static void TASK_LoRa (void *pvParameters) { Radio.Sleep(); lora_obj.state = E_LORA_STATE_SLEEP; xEventGroupSetBits(LoRaEvents, LORA_STATUS_COMPLETED); - #if defined(FIPY) || defined(LOPY4) + #if defined(FIPY) || defined(LOPY4) || defined (TBEAMv1) xSemaphoreGive(xLoRaSigfoxSem); #endif break; @@ -1081,7 +1081,7 @@ static void TASK_LoRa (void *pvParameters) { Radio.Rx(LORA_RX_TIMEOUT); lora_obj.state = E_LORA_STATE_RX; xEventGroupSetBits(LoRaEvents, LORA_STATUS_COMPLETED); - #if defined(FIPY) || defined(LOPY4) + #if defined(FIPY) || defined(LOPY4) || defined (TBEAMv1) xSemaphoreGive(xLoRaSigfoxSem); #endif break; @@ -1097,7 +1097,7 @@ static void TASK_LoRa (void *pvParameters) { TimerStop( &TxNextActReqTimer ); if (!lora_obj.joined) { if (lora_obj.activation == E_LORA_ACTIVATION_OTAA) { - #if defined(FIPY) || defined(LOPY4) + #if defined(FIPY) || defined(LOPY4) || defined (TBEAMv1) xSemaphoreTake(xLoRaSigfoxSem, portMAX_DELAY); #endif mibReq.Type = MIB_NETWORK_ACTIVATION; @@ -1166,7 +1166,7 @@ static void TASK_LoRa (void *pvParameters) { //lora_obj.state = E_LORA_STATE_IDLE; lora_obj.state = E_LORA_STATE_RX; Radio.Rx(LORA_RX_TIMEOUT); - #if defined(FIPY) || defined(LOPY4) + #if defined(FIPY) || defined(LOPY4) || defined (TBEAMv1) xSemaphoreGive(xLoRaSigfoxSem); #endif break; @@ -1177,7 +1177,7 @@ static void TASK_LoRa (void *pvParameters) { //lora_obj.state = E_LORA_STATE_IDLE; lora_obj.state = E_LORA_STATE_RX; Radio.Rx(LORA_RX_TIMEOUT); - #if defined(FIPY) || defined(LOPY4) + #if defined(FIPY) || defined(LOPY4) || defined (TBEAMv1) xSemaphoreGive(xLoRaSigfoxSem); #endif break; @@ -1349,7 +1349,7 @@ static void lora_validate_frequency (uint32_t frequency) { } break; case LORAMAC_REGION_CN470: - #if defined(LOPY4) + #if defined(LOPY4) || defined (TBEAMv1) if (frequency < 470000000 || frequency > 510000000) { goto freq_error; } @@ -1363,7 +1363,7 @@ static void lora_validate_frequency (uint32_t frequency) { } break; case LORAMAC_REGION_EU433: - #if defined(LOPY4) + #if defined(LOPY4) || defined (TBEAMv1) if (frequency < 433000000 || frequency > 435000000) { // LoRa 433 - 434 goto freq_error; } @@ -1497,7 +1497,7 @@ static void lora_validate_region (LoRaMacRegion_t region) { if (region != LORAMAC_REGION_AS923 && region != LORAMAC_REGION_AU915 && region != LORAMAC_REGION_EU868 && region != LORAMAC_REGION_US915 && region != LORAMAC_REGION_IN865 -#if defined(LOPY4) +#if defined(LOPY4) || defined (TBEAMv1) && region != LORAMAC_REGION_EU433 && region != LORAMAC_REGION_CN470 #endif ) { @@ -1562,7 +1562,7 @@ static int32_t lora_send (const byte *buf, uint32_t len, uint32_t timeout_ms) { lora_cmd_data_t cmd_data; /* -#if defined(FIPY) || defined(LOPY4) +#if defined(FIPY) || defined(LOPY4) || defined (TBEAMv1) xSemaphoreTake(xLoRaSigfoxSem, portMAX_DELAY); lora_get_config (&cmd_data); cmd_data.cmd = E_LORA_CMD_INIT; diff --git a/esp32/mods/modmachine.c b/esp32/mods/modmachine.c index 3dad51c2f..1a254720b 100644 --- a/esp32/mods/modmachine.c +++ b/esp32/mods/modmachine.c @@ -213,10 +213,10 @@ STATIC mp_obj_t machine_info(void) { mp_printf(&mp_plat_print, "---------------------------------------------\n"); mp_printf(&mp_plat_print, "MPTask stack water mark: %d\n", (unsigned int)uxTaskGetStackHighWaterMark((TaskHandle_t)mpTaskHandle)); mp_printf(&mp_plat_print, "ServersTask stack water mark: %d\n", (unsigned int)uxTaskGetStackHighWaterMark((TaskHandle_t)svTaskHandle)); -#if defined (LOPY) || defined (LOPY4) || defined (FIPY) +#if defined (LOPY) || defined (LOPY4) || defined (FIPY) || defined (TBEAMv1) mp_printf(&mp_plat_print, "LoRaTask stack water mark: %d\n", (unsigned int)uxTaskGetStackHighWaterMark((TaskHandle_t)xLoRaTaskHndl)); #endif -#if defined (SIPY) || defined (LOPY4) || defined (FIPY) +#if defined (SIPY) || defined (LOPY4) || defined (FIPY) || defined (TBEAMv1) mp_printf(&mp_plat_print, "SigfoxTask stack water mark: %d\n", (unsigned int)uxTaskGetStackHighWaterMark((TaskHandle_t)xSigfoxTaskHndl)); #endif mp_printf(&mp_plat_print, "TimerTask stack water mark: %d\n", (unsigned int)uxTaskGetStackHighWaterMark(xTimerGetTimerDaemonTaskHandle())); diff --git a/esp32/mods/modnetwork.c b/esp32/mods/modnetwork.c index ea7763d59..06af3f895 100644 --- a/esp32/mods/modnetwork.c +++ b/esp32/mods/modnetwork.c @@ -117,7 +117,7 @@ mp_obj_t mod_network_find_nic(const mod_network_socket_obj_t *s, const uint8_t * return nic; } #endif - #if defined (SIPY) || defined (LOPY4) || defined (FIPY) + #if defined (SIPY) || defined (LOPY4) || defined (FIPY) || defined (TBEAMv1) #if defined (MOD_SIGFOX_ENABLED) if (mp_obj_get_type(nic) == (mp_obj_type_t *)&mod_network_nic_type_sigfox && s->sock_base.u.u_param.domain == AF_SIGFOX) { return nic; @@ -374,7 +374,7 @@ STATIC const mp_map_elem_t mp_module_network_globals_table[] = { #ifdef MOD_LORA_ENABLED { MP_OBJ_NEW_QSTR(MP_QSTR_LoRa), (mp_obj_t)&mod_network_nic_type_lora }, #endif -#if defined (SIPY) || defined (LOPY4) || defined (FIPY) +#if defined (SIPY) || defined (LOPY4) || defined (FIPY) || defined (TBEAMv1) #if defined (MOD_SIGFOX_ENABLED) { MP_OBJ_NEW_QSTR(MP_QSTR_Sigfox), (mp_obj_t)&mod_network_nic_type_sigfox }, #endif diff --git a/esp32/mods/modpycom.c b/esp32/mods/modpycom.c index 8ef265607..eb9483f32 100644 --- a/esp32/mods/modpycom.c +++ b/esp32/mods/modpycom.c @@ -1089,7 +1089,7 @@ STATIC const mp_map_elem_t pycom_module_globals_table[] = { { MP_OBJ_NEW_QSTR(MP_QSTR_create_128bit_le_uuid_from_string), (mp_obj_t)&create_128bit_le_uuid_from_string_obj }, -#if defined(FIPY) || defined(LOPY4) || defined(SIPY) +#if defined(FIPY) || defined(LOPY4) || defined(SIPY) || defined (TBEAMv1) { MP_OBJ_NEW_QSTR(MP_QSTR_sigfox_info), (mp_obj_t)&mod_pycom_sigfox_info_obj }, #endif diff --git a/esp32/mods/modsigfox_api.c b/esp32/mods/modsigfox_api.c index ffe9c5576..deb369e53 100644 --- a/esp32/mods/modsigfox_api.c +++ b/esp32/mods/modsigfox_api.c @@ -32,7 +32,7 @@ STATIC const mp_arg_t sigfox_init_args[] = { { MP_QSTR_id, MP_ARG_INT, {.u_int = 0} }, { MP_QSTR_mode, MP_ARG_INT, {.u_int = E_SIGFOX_MODE_SIGFOX} }, { MP_QSTR_rcz, MP_ARG_INT, {.u_int = E_SIGFOX_RCZ1} }, -#if !defined(FIPY) && !defined(LOPY4) +#if !defined(FIPY) && !defined(LOPY4) && !defined (TBEAMv1) { MP_QSTR_frequency, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} }, #endif }; @@ -107,7 +107,7 @@ STATIC const mp_map_elem_t sigfox_locals_dict_table[] = { { MP_OBJ_NEW_QSTR(MP_QSTR_reset), (mp_obj_t)&sigfox_reset_obj }, { MP_OBJ_NEW_QSTR(MP_QSTR_SIGFOX), MP_OBJ_NEW_SMALL_INT(E_SIGFOX_MODE_SIGFOX) }, -#if !defined(FIPY) && !defined(LOPY4) +#if !defined(FIPY) && !defined(LOPY4) && !defined (TBEAMv1) { MP_OBJ_NEW_QSTR(MP_QSTR_FSK), MP_OBJ_NEW_SMALL_INT(E_SIGFOX_MODE_FSK) }, #endif diff --git a/esp32/mods/moduos.c b/esp32/mods/moduos.c index e9c90611f..b43a235fc 100644 --- a/esp32/mods/moduos.c +++ b/esp32/mods/moduos.c @@ -78,7 +78,7 @@ STATIC const qstr os_uname_info_fields[] = { MP_QSTR_sysname, MP_QSTR_nodename, MP_QSTR_release, MP_QSTR_version, MP_QSTR_machine -#if defined(LOPY) || defined(LOPY4) || defined(FIPY) +#if defined(LOPY) || defined(LOPY4) || defined(FIPY) || defined (TBEAMv1) ,MP_QSTR_lorawan #endif #ifdef MOD_SIGFOX_ENABLED @@ -97,7 +97,7 @@ STATIC const MP_DEFINE_STR_OBJ(os_uname_info_nodename_obj, MICROPY_PY_SYS_PLATFO STATIC const MP_DEFINE_STR_OBJ(os_uname_info_release_obj, SW_VERSION_NUMBER); STATIC const MP_DEFINE_STR_OBJ(os_uname_info_version_obj, MICROPY_GIT_TAG " on " MICROPY_BUILD_DATE); STATIC const MP_DEFINE_STR_OBJ(os_uname_info_machine_obj, MICROPY_HW_BOARD_NAME " with " MICROPY_HW_MCU_NAME); -#if defined(LOPY) || defined(LOPY4) || defined(FIPY) +#if defined(LOPY) || defined(LOPY4) || defined(FIPY) || defined (TBEAMv1) STATIC const MP_DEFINE_STR_OBJ(os_uname_info_lorawan_obj, LORAWAN_VERSION_NUMBER); #endif #ifdef MOD_SIGFOX_ENABLED @@ -114,7 +114,7 @@ STATIC MP_DEFINE_ATTRTUPLE( os_uname_info_obj ,os_uname_info_fields , 5 -#if defined(LOPY) || defined(LOPY4) || defined(FIPY) +#if defined(LOPY) || defined(LOPY4) || defined(FIPY) || defined (TBEAMv1) +1 #endif #ifdef MOD_SIGFOX_ENABLED @@ -131,7 +131,7 @@ STATIC MP_DEFINE_ATTRTUPLE( ,(mp_obj_t)&os_uname_info_release_obj ,(mp_obj_t)&os_uname_info_version_obj ,(mp_obj_t)&os_uname_info_machine_obj -#if defined(LOPY) || defined(LOPY4) || defined(FIPY) +#if defined(LOPY) || defined(LOPY4) || defined(FIPY) || defined (TBEAMv1) ,(mp_obj_t)&os_uname_info_lorawan_obj #endif #ifdef MOD_SIGFOX_ENABLED diff --git a/esp32/mods/modusocket.c b/esp32/mods/modusocket.c index f88a6ba31..5da6be172 100644 --- a/esp32/mods/modusocket.c +++ b/esp32/mods/modusocket.c @@ -812,7 +812,7 @@ STATIC const mp_map_elem_t socket_locals_dict_table[] = { MP_DEFINE_CONST_DICT(socket_locals_dict, socket_locals_dict_table); -#if defined (LOPY) || defined(LOPY4) || defined (FIPY) +#if defined (LOPY) || defined(LOPY4) || defined (FIPY) || defined (TBEAMv1) STATIC const mp_map_elem_t raw_socket_locals_dict_table[] = { { MP_OBJ_NEW_QSTR(MP_QSTR___del__), (mp_obj_t)&socket_close_obj }, { MP_OBJ_NEW_QSTR(MP_QSTR_close), (mp_obj_t)&socket_close_obj }, @@ -1004,17 +1004,17 @@ STATIC const mp_map_elem_t mp_module_usocket_globals_table[] = { // class constants { MP_OBJ_NEW_QSTR(MP_QSTR_AF_INET), MP_OBJ_NEW_SMALL_INT(AF_INET) }, -#if defined (LOPY) || defined (LOPY4) || defined (FIPY) +#if defined (LOPY) || defined (LOPY4) || defined (FIPY) || defined (TBEAMv1) { MP_OBJ_NEW_QSTR(MP_QSTR_AF_LORA), MP_OBJ_NEW_SMALL_INT(AF_LORA) }, #endif -#if defined (SIPY) || defined (LOPY4) || defined (FIPY) +#if defined (SIPY) || defined (LOPY4) || defined (FIPY) || defined (TBEAMv1) { MP_OBJ_NEW_QSTR(MP_QSTR_AF_SIGFOX), MP_OBJ_NEW_SMALL_INT(AF_SIGFOX) }, #endif { MP_OBJ_NEW_QSTR(MP_QSTR_SOCK_STREAM), MP_OBJ_NEW_SMALL_INT(SOCK_STREAM) }, { MP_OBJ_NEW_QSTR(MP_QSTR_SOCK_DGRAM), MP_OBJ_NEW_SMALL_INT(SOCK_DGRAM) }, -#if defined (LOPY) || defined (SIPY) || defined (LOPY4) || defined(FIPY) +#if defined (LOPY) || defined (SIPY) || defined (LOPY4) || defined(FIPY) || defined (TBEAMv1) { MP_OBJ_NEW_QSTR(MP_QSTR_SOCK_RAW), MP_OBJ_NEW_SMALL_INT(SOCK_RAW) }, #endif @@ -1031,18 +1031,18 @@ STATIC const mp_map_elem_t mp_module_usocket_globals_table[] = { { MP_OBJ_NEW_QSTR(MP_QSTR_SOL_LORA), MP_OBJ_NEW_SMALL_INT(SOL_LORA) }, #elif defined(SIPY) { MP_OBJ_NEW_QSTR(MP_QSTR_SOL_SIGFOX), MP_OBJ_NEW_SMALL_INT(SOL_SIGFOX) }, -#elif defined(FIPY) || defined(LOPY4) +#elif defined(FIPY) || defined(LOPY4) || defined (TBEAMv1) { MP_OBJ_NEW_QSTR(MP_QSTR_SOL_LORA), MP_OBJ_NEW_SMALL_INT(SOL_LORA) }, { MP_OBJ_NEW_QSTR(MP_QSTR_SOL_SIGFOX), MP_OBJ_NEW_SMALL_INT(SOL_SIGFOX) }, #endif { MP_OBJ_NEW_QSTR(MP_QSTR_SOL_SOCKET), MP_OBJ_NEW_SMALL_INT(SOL_SOCKET) }, { MP_OBJ_NEW_QSTR(MP_QSTR_SO_REUSEADDR), MP_OBJ_NEW_SMALL_INT(SO_REUSEADDR) }, -#if defined(LOPY) || defined (LOPY4) || defined(FIPY) +#if defined(LOPY) || defined (LOPY4) || defined(FIPY) || defined (TBEAMv1) { MP_OBJ_NEW_QSTR(MP_QSTR_SO_CONFIRMED), MP_OBJ_NEW_SMALL_INT(SO_LORAWAN_CONFIRMED) }, { MP_OBJ_NEW_QSTR(MP_QSTR_SO_DR), MP_OBJ_NEW_SMALL_INT(SO_LORAWAN_DR) }, #endif -#if defined(SIPY) || defined (LOPY4) || defined(FIPY) +#if defined(SIPY) || defined (LOPY4) || defined(FIPY) || defined (TBEAMv1) { MP_OBJ_NEW_QSTR(MP_QSTR_SO_RX), MP_OBJ_NEW_SMALL_INT(SO_SIGFOX_RX) }, { MP_OBJ_NEW_QSTR(MP_QSTR_SO_TX_REPEAT), MP_OBJ_NEW_SMALL_INT(SO_SIGFOX_TX_REPEAT) }, { MP_OBJ_NEW_QSTR(MP_QSTR_SO_OOB), MP_OBJ_NEW_SMALL_INT(SO_SIGFOX_OOB) }, diff --git a/esp32/mptask.c b/esp32/mptask.c index 423bce4c3..22a37b2bb 100644 --- a/esp32/mptask.c +++ b/esp32/mptask.c @@ -115,7 +115,7 @@ STATIC void mptask_init_sflash_filesystem (void); STATIC void mptask_init_sflash_filesystem_fatfs(void); STATIC void mptask_create_main_py (void); STATIC void mptask_init_sflash_filesystem_littlefs(void); -#if defined (LOPY) || defined (SIPY) || defined (LOPY4) || defined (FIPY) +#if defined (LOPY) || defined (SIPY) || defined (LOPY4) || defined (FIPY) || defined (TBEAMv1) STATIC void mptask_update_lpwan_mac_address (void); #endif @@ -613,7 +613,7 @@ STATIC void mptask_init_sflash_filesystem_littlefs(void) { } -#if defined(LOPY) || defined(SIPY) || defined (LOPY4) || defined(FIPY) +#if defined(LOPY) || defined(SIPY) || defined (LOPY4) || defined(FIPY) || defined (TBEAMv1) STATIC void mptask_update_lpwan_mac_address (void) { #define LPWAN_MAC_ADDR_PATH "/sys/lpwan.mac" diff --git a/esp32/sigfox.mk b/esp32/sigfox.mk index 7cb17d6cb..332b4ad67 100644 --- a/esp32/sigfox.mk +++ b/esp32/sigfox.mk @@ -1,7 +1,7 @@ ifeq ($(BOARD), $(filter $(BOARD), SIPY)) SFX_OBJ += $(addprefix $(BUILD)/, $(APP_SIGFOX_SRC_SIPY_C:.c=.o) $(APP_SIGFOX_TARGET_SRC_C:.c=.o) $(APP_SIGFOX_SPI_SRC_C:.c=.o)) endif -ifeq ($(BOARD), $(filter $(BOARD), LOPY4 FIPY)) +ifeq ($(BOARD), $(filter $(BOARD), LOPY4 FIPY TBEAMv1)) SFX_OBJ += $(addprefix $(BUILD)/, $(APP_SIGFOX_SRC_FIPY_LOPY4_C:.c=.o) $(APP_SIGFOX_SPI_SRC_C:.c=.o)) endif diff --git a/esp32/sigfox/modsigfox_TBEAMv1.a b/esp32/sigfox/modsigfox_TBEAMv1.a new file mode 100644 index 000000000..34c56ab98 Binary files /dev/null and b/esp32/sigfox/modsigfox_TBEAMv1.a differ diff --git a/esp32/tools/makepkg.sh b/esp32/tools/makepkg.sh index b7f041f4c..e650c7409 100755 --- a/esp32/tools/makepkg.sh +++ b/esp32/tools/makepkg.sh @@ -22,7 +22,7 @@ if ! [ -d ${BUILD_DIR} ]; then echo >&2 "Build directory for $1 not found! Run m if ! [ -r "pycom_version.h" ]; then echo >&2 "Cannot read pycom_version.h! Aborting."; exit 1; fi if [ "${BOARD}" = "GPY" -o "${BOARD}" = "LOPY4" -o "${BOARD}" = "FIPY" ]; then if ! [ -r "boards/$1/${SCRIPT_NAME_8MB}" ]; then echo >&2 "Cannot read boards/$1/${SCRIPT_NAME_8MB}! Aborting."; exit 1; fi -elif [ "${BOARD}" = "LOPY" -o "${BOARD}" = "WIPY" ]; then +elif [ "${BOARD}" = "LOPY" -o "${BOARD}" = "WIPY" -o "${BOARD}" = "TBEAMv1" ]; then if ! [ -r "boards/$1/${SCRIPT_NAME_4MB}" ]; then echo >&2 "Cannot read boards/$1/${SCRIPT_NAME_4MB}! Aborting."; exit 1; fi if ! [ -r "boards/$1/${SCRIPT_NAME_8MB}" ]; then echo >&2 "Cannot read boards/$1/${SCRIPT_NAME_8MB}! Aborting."; exit 1; fi else @@ -82,7 +82,7 @@ if [ "${BOARD}" != "SIPY" ]; then cp ${BUILD_DIR}/lib/${PART_FILE_8MB} ${PKG_TMP_DIR} cat boards/$1/${SCRIPT_FILE_8MB} > ${PKG_TMP_DIR}/${SCRIPT_FILE_8MB} || { echo >&2 "Cannot create ${SCRIPT_FILE_8MB} file! Aborting."; exit 1; } - if [ "${BOARD}" = "LOPY" -o "${BOARD}" = "WIPY" ]; then + if [ "${BOARD}" = "LOPY" -o "${BOARD}" = "WIPY" -o "${BOARD}" = "TBEAMv1" ]; then if [ $4 ]; then PART_FILE_4MB='partitions_4MB.bin_enc' SCRIPT_FILE_4MB='script_4MB_enc' diff --git a/esp32/tools/mpy-build-check.sh b/esp32/tools/mpy-build-check.sh index 2428d08d8..dc863210d 100644 --- a/esp32/tools/mpy-build-check.sh +++ b/esp32/tools/mpy-build-check.sh @@ -21,8 +21,8 @@ if ! [ $0 = "tools/mpy-build-check.sh" ]; then exit 1 fi -# Check board type -if [ "${BOARD}" != "WIPY" -a "${BOARD}" != "SIPY" -a "${BOARD}" != "LOPY" -a "${BOARD}" != "LOPY4" -a "${BOARD}" != "GPY" -a "${BOARD}" != "FIPY" ] ; then +#Check Board Type +if [ "${BOARD}" != "WIPY" -a "${BOARD}" != "SIPY" -a "${BOARD}" != "LOPY" -a "${BOARD}" != "LOPY4" -a "${BOARD}" != "GPY" -a "${BOARD}" != "FIPY" -a "${BOARD}" != "TBEAMv1" ] ; then echo "Invalid Board name for MPY build!" >&2 exit 1 fi diff --git a/esp32/tools/size_check.sh b/esp32/tools/size_check.sh index 9a9d7afca..d89c68d10 100644 --- a/esp32/tools/size_check.sh +++ b/esp32/tools/size_check.sh @@ -22,7 +22,7 @@ if ! [ $0 = "tools/size_check.sh" ]; then fi #Check Board Type -if [ "${BOARD}" != "WIPY" -a "${BOARD}" != "SIPY" -a "${BOARD}" != "LOPY" -a "${BOARD}" != "LOPY4" -a "${BOARD}" != "GPY" -a "${BOARD}" != "FIPY" ] ; then +if [ "${BOARD}" != "WIPY" -a "${BOARD}" != "SIPY" -a "${BOARD}" != "LOPY" -a "${BOARD}" != "LOPY4" -a "${BOARD}" != "GPY" -a "${BOARD}" != "FIPY" -a "${BOARD}" != "TBEAMv1" ] ; then echo "Invalid Board name for MPY build!" >&2 exit 1 fi diff --git a/lib/lora/system/spi.h b/lib/lora/system/spi.h index 62e570c30..96ab26cda 100644 --- a/lib/lora/system/spi.h +++ b/lib/lora/system/spi.h @@ -72,7 +72,7 @@ void SpiFrequency( Spi_t *obj, uint32_t hz ); * \param [IN] outData Byte to be sent * \retval inData Received byte. */ -#if defined(LOPY) || defined (LOPY4) || defined(FIPY) +#if defined(LOPY) || defined (LOPY4) || defined(FIPY) || defined(TBEAMv1) uint16_t SpiInOut( Spi_t *obj, uint16_t outData ); #elif defined(SIPY) uint8_t SpiInOut(uint32_t spiNum, uint32_t outData); @@ -84,7 +84,7 @@ uint8_t SpiInOut(uint32_t spiNum, uint32_t outData); * \retval void */ #endif -#if defined(SIPY) || defined (LOPY4) || defined(FIPY) +#if defined(SIPY) || defined (LOPY4) || defined(FIPY) || defined(TBEAMv1) void SpiOut(uint32_t spiNum, uint32_t outData ); #endif diff --git a/py/obj.h b/py/obj.h index a0f6483fc..aceca85a9 100644 --- a/py/obj.h +++ b/py/obj.h @@ -787,7 +787,7 @@ size_t mp_obj_dict_len(mp_obj_t self_in); mp_obj_t mp_obj_dict_get(mp_obj_t self_in, mp_obj_t index); mp_obj_t mp_obj_dict_store(mp_obj_t self_in, mp_obj_t key, mp_obj_t value); mp_obj_t mp_obj_dict_delete(mp_obj_t self_in, mp_obj_t key); -#if defined(LOPY) || defined (WIPY) || defined(SIPY) || defined (LOPY4) || defined(GPY) || defined(FIPY) +#if defined(LOPY) || defined (WIPY) || defined(SIPY) || defined (LOPY4) || defined(GPY) || defined(FIPY) || defined(TBEAMv1) IRAM_ATTR #endif static inline mp_map_t *mp_obj_dict_get_map(mp_obj_t dict) { diff --git a/py/objdict.c b/py/objdict.c index 20f258098..7ac1d001f 100644 --- a/py/objdict.c +++ b/py/objdict.c @@ -33,7 +33,7 @@ #include "py/builtin.h" #include "py/objtype.h" -#if defined(LOPY) || defined (WIPY) || defined(SIPY) || defined (LOPY4) || defined(GPY) || defined(FIPY) +#if defined(LOPY) || defined (WIPY) || defined(SIPY) || defined (LOPY4) || defined(GPY) || defined(FIPY) || defined(TBEAMv1) #include "esp_attr.h" #endif