Merge remote-tracking branch 'upstream/master'
This commit is contained in:
commit
2e0cf9e7d0
1
.gitignore
vendored
1
.gitignore
vendored
@ -7,3 +7,4 @@ Release/*.zip
|
|||||||
Release/*.json
|
Release/*.json
|
||||||
Console/build
|
Console/build
|
||||||
build/*
|
build/*
|
||||||
|
.vscode
|
64
Boards.h
64
Boards.h
@ -39,6 +39,7 @@
|
|||||||
#define BOARD_RNODE_NG_20 0x40
|
#define BOARD_RNODE_NG_20 0x40
|
||||||
#define BOARD_RNODE_NG_21 0x41
|
#define BOARD_RNODE_NG_21 0x41
|
||||||
#define BOARD_T3S3 0x42
|
#define BOARD_T3S3 0x42
|
||||||
|
#define BOARD_TECHO 0x43
|
||||||
#define BOARD_GENERIC_NRF52 0x50
|
#define BOARD_GENERIC_NRF52 0x50
|
||||||
#define BOARD_FREENODE 0x52
|
#define BOARD_FREENODE 0x52
|
||||||
|
|
||||||
@ -50,7 +51,7 @@
|
|||||||
#if defined(ESP32)
|
#if defined(ESP32)
|
||||||
#define PLATFORM PLATFORM_ESP32
|
#define PLATFORM PLATFORM_ESP32
|
||||||
#define MCU_VARIANT MCU_ESP32
|
#define MCU_VARIANT MCU_ESP32
|
||||||
#elif defined(NRF52840_XXAA)
|
#elif defined(NRF52840_XXAA) || defined(_VARIANT_PCA10056_)
|
||||||
#include <variant.h>
|
#include <variant.h>
|
||||||
#define PLATFORM PLATFORM_NRF52
|
#define PLATFORM PLATFORM_NRF52
|
||||||
#define MCU_VARIANT MCU_NRF52
|
#define MCU_VARIANT MCU_NRF52
|
||||||
@ -629,7 +630,66 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#elif MCU_VARIANT == MCU_NRF52
|
#elif MCU_VARIANT == MCU_NRF52
|
||||||
#if BOARD_MODEL == BOARD_FREENODE
|
#if BOARD_MODEL == BOARD_TECHO
|
||||||
|
#define VALIDATE_FIRMWARE false
|
||||||
|
//#define GPS_BAUD_RATE 115200
|
||||||
|
//#define PIN_GPS_TX 41
|
||||||
|
//#define PIN_GPS_RX 40
|
||||||
|
#define EEPROM_SIZE 296
|
||||||
|
#define EEPROM_OFFSET EEPROM_SIZE-EEPROM_RESERVED
|
||||||
|
//#define HAS_EEPROM true
|
||||||
|
//#define HAS_SD true
|
||||||
|
//#define HAS_DISPLAY true
|
||||||
|
//#define HAS_CONSOLE true
|
||||||
|
//#define HAS_TXCO true
|
||||||
|
//#define DISPLAY EINK_BW
|
||||||
|
//#define HAS_BLE true
|
||||||
|
//#define HAS_PMU true
|
||||||
|
#define CONFIG_UART_BUFFER_SIZE 40000
|
||||||
|
#define CONFIG_QUEUE_0_SIZE 6144
|
||||||
|
#define CONFIG_QUEUE_MAX_LENGTH 200
|
||||||
|
#define BLE_MANUFACTURER "LilyGO"
|
||||||
|
#define BLE_MODEL "T-Echo"
|
||||||
|
#define INTERFACE_COUNT 1
|
||||||
|
//#define I2C_SDA 26
|
||||||
|
//#define I2C_SCL 27
|
||||||
|
#define CONFIG_QUEUE_1_SIZE 40000
|
||||||
|
// first interface in list is the primary
|
||||||
|
const uint8_t interfaces[INTERFACE_COUNT] = {SX126X};
|
||||||
|
const bool interface_cfg[INTERFACE_COUNT][3] = {
|
||||||
|
// SX1262
|
||||||
|
{
|
||||||
|
false, // DEFAULT_SPI
|
||||||
|
true, // HAS_TCXO
|
||||||
|
true // DIO2_AS_RF_SWITCH
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const int8_t interface_pins[INTERFACE_COUNT][10] = {
|
||||||
|
// SX1262
|
||||||
|
{
|
||||||
|
24, // pin_ss
|
||||||
|
19, // pin_sclk
|
||||||
|
22, // pin_mosi
|
||||||
|
23, // pin_miso
|
||||||
|
17, // pin_busy
|
||||||
|
20, // pin_dio
|
||||||
|
25, // pin_reset
|
||||||
|
-1, // pin_txen
|
||||||
|
-1, // pin_rxen
|
||||||
|
21 // pin_tcxo_enable
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const int pin_disp_cs = 30;
|
||||||
|
const int pin_disp_dc = 28;
|
||||||
|
const int pin_disp_reset = 2;
|
||||||
|
const int pin_disp_busy = 3;
|
||||||
|
const int pin_disp_en = 43;
|
||||||
|
|
||||||
|
const int pin_led_rx = LED_BLUE;
|
||||||
|
const int pin_led_tx = LED_RED;
|
||||||
|
#elif BOARD_MODEL == BOARD_FREENODE
|
||||||
#define HAS_EEPROM false
|
#define HAS_EEPROM false
|
||||||
#define HAS_DISPLAY true
|
#define HAS_DISPLAY true
|
||||||
#define DISPLAY EINK_BW
|
#define DISPLAY EINK_BW
|
||||||
|
4
Config.h
4
Config.h
@ -78,9 +78,11 @@
|
|||||||
bool pmu_ready = false;
|
bool pmu_ready = false;
|
||||||
bool promisc = false;
|
bool promisc = false;
|
||||||
bool implicit = false;
|
bool implicit = false;
|
||||||
volatile bool packet_ready = false;
|
|
||||||
uint8_t implicit_l = 0;
|
uint8_t implicit_l = 0;
|
||||||
|
|
||||||
|
volatile bool packet_ready = false;
|
||||||
|
volatile uint8_t packet_interface = 0xFF;
|
||||||
|
|
||||||
uint8_t op_mode = MODE_HOST;
|
uint8_t op_mode = MODE_HOST;
|
||||||
uint8_t model = 0x00;
|
uint8_t model = 0x00;
|
||||||
uint8_t hwrev = 0x00;
|
uint8_t hwrev = 0x00;
|
||||||
|
@ -14,10 +14,10 @@ dirs:
|
|||||||
@mkdir -p ./build/images
|
@mkdir -p ./build/images
|
||||||
|
|
||||||
pages:
|
pages:
|
||||||
python ./build.py
|
python3 ./build.py
|
||||||
|
|
||||||
pages-debug:
|
pages-debug:
|
||||||
python ./build.py --no-gz --no-remap
|
python3 ./build.py --no-gz --no-remap
|
||||||
|
|
||||||
sourcepack:
|
sourcepack:
|
||||||
@echo Packing firmware sources...
|
@echo Packing firmware sources...
|
||||||
@ -44,4 +44,4 @@ site: clean external dirs data sourcepack pages
|
|||||||
local: clean external dirs data sourcepack pages-debug
|
local: clean external dirs data sourcepack pages-debug
|
||||||
|
|
||||||
serve:
|
serve:
|
||||||
python -m http.server 7777 --bind 127.0.0.1 --directory ./build
|
python3 -m http.server 7777 --bind 127.0.0.1 --directory ./build
|
||||||
|
9
Device.h
9
Device.h
@ -231,14 +231,12 @@ void device_validate_partitions() {
|
|||||||
// todo, add bootloader, partition table, or softdevice?
|
// todo, add bootloader, partition table, or softdevice?
|
||||||
calculate_region_hash(APPLICATION_START, APPLICATION_START+get_fw_length(), dev_firmware_hash);
|
calculate_region_hash(APPLICATION_START, APPLICATION_START+get_fw_length(), dev_firmware_hash);
|
||||||
#endif
|
#endif
|
||||||
#if VALIDATE_FIRMWARE
|
|
||||||
for (uint8_t i = 0; i < DEV_HASH_LEN; i++) {
|
for (uint8_t i = 0; i < DEV_HASH_LEN; i++) {
|
||||||
if (dev_firmware_hash_target[i] != dev_firmware_hash[i]) {
|
if (dev_firmware_hash_target[i] != dev_firmware_hash[i]) {
|
||||||
fw_signature_validated = false;
|
fw_signature_validated = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool device_firmware_ok() {
|
bool device_firmware_ok() {
|
||||||
@ -247,6 +245,7 @@ bool device_firmware_ok() {
|
|||||||
|
|
||||||
#if MCU_VARIANT == MCU_ESP32 || MCU_VARIANT == MCU_NRF52
|
#if MCU_VARIANT == MCU_ESP32 || MCU_VARIANT == MCU_NRF52
|
||||||
bool device_init() {
|
bool device_init() {
|
||||||
|
#if VALIDATE_FIRMWARE
|
||||||
if (bt_ready) {
|
if (bt_ready) {
|
||||||
#if MCU_VARIANT == MCU_ESP32
|
#if MCU_VARIANT == MCU_ESP32
|
||||||
for (uint8_t i=0; i<EEPROM_SIG_LEN; i++){dev_eeprom_signature[i]=EEPROM.read(eeprom_addr(ADDR_SIGNATURE+i));}
|
for (uint8_t i=0; i<EEPROM_SIG_LEN; i++){dev_eeprom_signature[i]=EEPROM.read(eeprom_addr(ADDR_SIGNATURE+i));}
|
||||||
@ -282,9 +281,9 @@ bool device_init() {
|
|||||||
|
|
||||||
hash.end(dev_hash);
|
hash.end(dev_hash);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
device_load_signature();
|
device_load_signature();
|
||||||
device_validate_signature();
|
device_validate_signature();
|
||||||
|
|
||||||
device_validate_partitions();
|
device_validate_partitions();
|
||||||
|
|
||||||
#if MCU_VARIANT == MCU_NRF52
|
#if MCU_VARIANT == MCU_NRF52
|
||||||
@ -295,5 +294,9 @@ bool device_init() {
|
|||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
// Skip hash comparison and checking BT
|
||||||
|
return true;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -197,7 +197,7 @@ upload-wicked_esp32:
|
|||||||
@sleep 1
|
@sleep 1
|
||||||
rnodeconf /dev/ttyACM0 --firmware-hash $$(./partition_hashes ./build/esp32.esp32.esp32c3/RNode_Firmware_CE.ino.bin)
|
rnodeconf /dev/ttyACM0 --firmware-hash $$(./partition_hashes ./build/esp32.esp32.esp32c3/RNode_Firmware_CE.ino.bin)
|
||||||
@sleep 3
|
@sleep 3
|
||||||
python ./Release/esptool/esptool.py --chip esp32c3 --port /dev/ttyACM0 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x210000 ./Release/console_image.bin
|
python3 ./Release/esptool/esptool.py --chip esp32c3 --port /dev/ttyACM0 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x210000 ./Release/console_image.bin
|
||||||
```
|
```
|
||||||
#### nRF52
|
#### nRF52
|
||||||
```
|
```
|
||||||
|
43
Makefile
43
Makefile
@ -21,7 +21,7 @@ clean:
|
|||||||
-rm -r ./build
|
-rm -r ./build
|
||||||
-rm ./Release/rnode_firmware*
|
-rm ./Release/rnode_firmware*
|
||||||
|
|
||||||
prep: prep-esp32 prep-samd
|
prep: prep-esp32 prep-nrf prep-samd
|
||||||
|
|
||||||
prep-esp32:
|
prep-esp32:
|
||||||
arduino-cli core update-index --config-file arduino-cli.yaml
|
arduino-cli core update-index --config-file arduino-cli.yaml
|
||||||
@ -37,6 +37,7 @@ prep-samd:
|
|||||||
|
|
||||||
prep-nrf:
|
prep-nrf:
|
||||||
arduino-cli core update-index --config-file arduino-cli.yaml
|
arduino-cli core update-index --config-file arduino-cli.yaml
|
||||||
|
arduino-cli core install adafruit:nrf52 --config-file arduino-cli.yaml
|
||||||
arduino-cli core install rakwireless:nrf52 --config-file arduino-cli.yaml
|
arduino-cli core install rakwireless:nrf52 --config-file arduino-cli.yaml
|
||||||
arduino-cli lib install "Crypto"
|
arduino-cli lib install "Crypto"
|
||||||
arduino-cli lib install "Adafruit GFX Library"
|
arduino-cli lib install "Adafruit GFX Library"
|
||||||
@ -50,11 +51,11 @@ console-site:
|
|||||||
spiffs: console-site spiffs-image
|
spiffs: console-site spiffs-image
|
||||||
|
|
||||||
spiffs-image:
|
spiffs-image:
|
||||||
python Release/esptool/spiffsgen.py 1966080 ./Console/build Release/console_image.bin
|
python3 Release/esptool/spiffsgen.py 1966080 ./Console/build Release/console_image.bin
|
||||||
|
|
||||||
upload-spiffs:
|
upload-spiffs:
|
||||||
@echo Deploying SPIFFS image...
|
@echo Deploying SPIFFS image...
|
||||||
python ./Release/esptool/esptool.py --chip esp32 --port $(or $(port), /dev/ttyACM0) --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x210000 ./Release/console_image.bin
|
python3 ./Release/esptool/esptool.py --chip esp32 --port $(or $(port), /dev/ttyACM0) --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x210000 ./Release/console_image.bin
|
||||||
|
|
||||||
firmware-tbeam:
|
firmware-tbeam:
|
||||||
arduino-cli compile --fqbn esp32:esp32:t-beam -e --build-property "build.partitions=no_ota" --build-property "upload.maximum_size=2097152" --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x33\""
|
arduino-cli compile --fqbn esp32:esp32:t-beam -e --build-property "build.partitions=no_ota" --build-property "upload.maximum_size=2097152" --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x33\""
|
||||||
@ -62,6 +63,14 @@ firmware-tbeam:
|
|||||||
firmware-tbeam_sx126x:
|
firmware-tbeam_sx126x:
|
||||||
arduino-cli compile --fqbn esp32:esp32:t-beam -e --build-property "build.partitions=no_ota" --build-property "upload.maximum_size=2097152" --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x33\" \"-DMODEM=0x03\""
|
arduino-cli compile --fqbn esp32:esp32:t-beam -e --build-property "build.partitions=no_ota" --build-property "upload.maximum_size=2097152" --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x33\" \"-DMODEM=0x03\""
|
||||||
|
|
||||||
|
firmware-techo: firmware-techo4 firmware-techo9
|
||||||
|
|
||||||
|
firmware-techo4:
|
||||||
|
arduino-cli compile --fqbn adafruit:nrf52:pca10056 -e --build-property "build.partitions=no_ota" --build-property "upload.maximum_size=2097152" --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x43\" \"-DBOARD_VARIANT=0x16\""
|
||||||
|
|
||||||
|
firmware-techo9:
|
||||||
|
arduino-cli compile --fqbn adafruit:nrf52:pca10056 -e --build-property "build.partitions=no_ota" --build-property "upload.maximum_size=2097152" --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x43\" \"-DBOARD_VARIANT=0x17\""
|
||||||
|
|
||||||
firmware-t3s3_sx1262:
|
firmware-t3s3_sx1262:
|
||||||
arduino-cli compile --fqbn "esp32:esp32:esp32s3:CDCOnBoot=cdc" -e --build-property "build.partitions=no_ota" --build-property "upload.maximum_size=2097152" --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x42\" \"-DBOARD_VARIANT=0xA1\""
|
arduino-cli compile --fqbn "esp32:esp32:esp32s3:CDCOnBoot=cdc" -e --build-property "build.partitions=no_ota" --build-property "upload.maximum_size=2097152" --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x42\" \"-DBOARD_VARIANT=0xA1\""
|
||||||
|
|
||||||
@ -121,56 +130,62 @@ upload-tbeam:
|
|||||||
@sleep 1
|
@sleep 1
|
||||||
rnodeconf $(or $(port), /dev/ttyACM0) --firmware-hash $$(./partition_hashes ./build/esp32.esp32.t-beam/opencom_xl_firmware.ino.bin)
|
rnodeconf $(or $(port), /dev/ttyACM0) --firmware-hash $$(./partition_hashes ./build/esp32.esp32.t-beam/opencom_xl_firmware.ino.bin)
|
||||||
@sleep 3
|
@sleep 3
|
||||||
python ./Release/esptool/esptool.py --chip esp32 --port $(or $(port), /dev/ttyACM0) --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x210000 ./Release/console_image.bin
|
python3 ./Release/esptool/esptool.py --chip esp32 --port $(or $(port), /dev/ttyACM0) --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x210000 ./Release/console_image.bin
|
||||||
|
|
||||||
|
upload-techo:
|
||||||
|
arduino-cli upload -p $(or $(port), /dev/ttyACM0) --fqbn adafruit:nrf52:pca10056
|
||||||
|
unzip -o build/adafruit.nrf52.pca10056/RNode_Firmware_CE.ino.zip -d build/adafruit.nrf52.pca10056
|
||||||
|
#rnodeconf $(or $(port), /dev/ttyACM0) --firmware-hash $$(sha256sum ./build/adafruit.nrf52.pca10056/RNode_Firmware_CE.ino.bin | grep -o '^\S*')
|
||||||
|
../Reticulum/RNS/Utilities/rnodeconf.py $(or $(port), /dev/ttyACM0) --firmware-hash $$(sha256sum ./build/adafruit.nrf52.pca10056/RNode_Firmware_CE.ino.bin | grep -o '^\S*')
|
||||||
|
|
||||||
upload-lora32_v10:
|
upload-lora32_v10:
|
||||||
arduino-cli upload -p $(or $(port), /dev/ttyUSB0) --fqbn esp32:esp32:ttgo-lora32
|
arduino-cli upload -p $(or $(port), /dev/ttyUSB0) --fqbn esp32:esp32:ttgo-lora32
|
||||||
@sleep 1
|
@sleep 1
|
||||||
rnodeconf $(or $(port), /dev/ttyUSB0) --firmware-hash $$(./partition_hashes ./build/esp32.esp32.ttgo-lora32/opencom_xl_firmware.ino.bin)
|
rnodeconf $(or $(port), /dev/ttyUSB0) --firmware-hash $$(./partition_hashes ./build/esp32.esp32.ttgo-lora32/opencom_xl_firmware.ino.bin)
|
||||||
@sleep 3
|
@sleep 3
|
||||||
python ./Release/esptool/esptool.py --chip esp32 --port $(or $(port), /dev/ttyUSB0) --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x210000 ./Release/console_image.bin
|
python3 ./Release/esptool/esptool.py --chip esp32 --port $(or $(port), /dev/ttyUSB0) --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x210000 ./Release/console_image.bin
|
||||||
|
|
||||||
upload-lora32_v20:
|
upload-lora32_v20:
|
||||||
arduino-cli upload -p $(or $(port), /dev/ttyUSB0) --fqbn esp32:esp32:ttgo-lora32
|
arduino-cli upload -p $(or $(port), /dev/ttyUSB0) --fqbn esp32:esp32:ttgo-lora32
|
||||||
@sleep 1
|
@sleep 1
|
||||||
rnodeconf $(or $(port), /dev/ttyUSB0) --firmware-hash $$(./partition_hashes ./build/esp32.esp32.ttgo-lora32/opencom_xl_firmware.ino.bin)
|
rnodeconf $(or $(port), /dev/ttyUSB0) --firmware-hash $$(./partition_hashes ./build/esp32.esp32.ttgo-lora32/opencom_xl_firmware.ino.bin)
|
||||||
@sleep 3
|
@sleep 3
|
||||||
python ./Release/esptool/esptool.py --chip esp32 --port $(or $(port), /dev/ttyUSB0) --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x210000 ./Release/console_image.bin
|
python3 ./Release/esptool/esptool.py --chip esp32 --port $(or $(port), /dev/ttyUSB0) --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x210000 ./Release/console_image.bin
|
||||||
|
|
||||||
upload-lora32_v21:
|
upload-lora32_v21:
|
||||||
arduino-cli upload -p $(or $(port), /dev/ttyACM0) --fqbn esp32:esp32:ttgo-lora32
|
arduino-cli upload -p $(or $(port), /dev/ttyACM0) --fqbn esp32:esp32:ttgo-lora32
|
||||||
@sleep 1
|
@sleep 1
|
||||||
rnodeconf $(or $(port), /dev/ttyACM0) --firmware-hash $$(./partition_hashes ./build/esp32.esp32.ttgo-lora32/opencom_xl_firmware.ino.bin)
|
rnodeconf $(or $(port), /dev/ttyACM0) --firmware-hash $$(./partition_hashes ./build/esp32.esp32.ttgo-lora32/opencom_xl_firmware.ino.bin)
|
||||||
@sleep 3
|
@sleep 3
|
||||||
python ./Release/esptool/esptool.py --chip esp32 --port $(or $(port), /dev/ttyACM0) --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x210000 ./Release/console_image.bin
|
python3 ./Release/esptool/esptool.py --chip esp32 --port $(or $(port), /dev/ttyACM0) --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x210000 ./Release/console_image.bin
|
||||||
|
|
||||||
upload-heltec32_v2:
|
upload-heltec32_v2:
|
||||||
arduino-cli upload -p $(or $(port), /dev/ttyUSB0) --fqbn esp32:esp32:heltec_wifi_lora_32_V2
|
arduino-cli upload -p $(or $(port), /dev/ttyUSB0) --fqbn esp32:esp32:heltec_wifi_lora_32_V2
|
||||||
@sleep 1
|
@sleep 1
|
||||||
rnodeconf $(or $(port), /dev/ttyUSB0) --firmware-hash $$(./partition_hashes ./build/esp32.esp32.heltec_wifi_lora_32_V2/opencom_xl_firmware.ino.bin)
|
rnodeconf $(or $(port), /dev/ttyUSB0) --firmware-hash $$(./partition_hashes ./build/esp32.esp32.heltec_wifi_lora_32_V2/opencom_xl_firmware.ino.bin)
|
||||||
@sleep 3
|
@sleep 3
|
||||||
python ./Release/esptool/esptool.py --chip esp32 --port $(or $(port), /dev/ttyUSB0) --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x210000 ./Release/console_image.bin
|
python3 ./Release/esptool/esptool.py --chip esp32 --port $(or $(port), /dev/ttyUSB0) --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x210000 ./Release/console_image.bin
|
||||||
|
|
||||||
upload-heltec32_v3:
|
upload-heltec32_v3:
|
||||||
arduino-cli upload -p $(or $(port), /dev/ttyUSB0) --fqbn esp32:esp32:heltec_wifi_lora_32_V3
|
arduino-cli upload -p $(or $(port), /dev/ttyUSB0) --fqbn esp32:esp32:heltec_wifi_lora_32_V3
|
||||||
@sleep 1
|
@sleep 1
|
||||||
rnodeconf $(or $(port), /dev/ttyUSB0) --firmware-hash $$(./partition_hashes ./build/esp32.esp32.heltec_wifi_lora_32_V3/opencom_xl_firmware.ino.bin)
|
rnodeconf $(or $(port), /dev/ttyUSB0) --firmware-hash $$(./partition_hashes ./build/esp32.esp32.heltec_wifi_lora_32_V3/opencom_xl_firmware.ino.bin)
|
||||||
@sleep 3
|
@sleep 3
|
||||||
python ./Release/esptool/esptool.py --chip esp32-s3 --port $(or $(port), /dev/ttyUSB0) --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x210000 ./Release/console_image.bin
|
python3 ./Release/esptool/esptool.py --chip esp32-s3 --port $(or $(port), /dev/ttyUSB0) --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x210000 ./Release/console_image.bin
|
||||||
|
|
||||||
upload-rnode_ng_20:
|
upload-rnode_ng_20:
|
||||||
arduino-cli upload -p $(or $(port), /dev/ttyUSB0) --fqbn esp32:esp32:ttgo-lora32
|
arduino-cli upload -p $(or $(port), /dev/ttyUSB0) --fqbn esp32:esp32:ttgo-lora32
|
||||||
@sleep 1
|
@sleep 1
|
||||||
rnodeconf $(or $(port), /dev/ttyUSB0) --firmware-hash $$(./partition_hashes ./build/esp32.esp32.ttgo-lora32/opencom_xl_firmware.ino.bin)
|
rnodeconf $(or $(port), /dev/ttyUSB0) --firmware-hash $$(./partition_hashes ./build/esp32.esp32.ttgo-lora32/opencom_xl_firmware.ino.bin)
|
||||||
@sleep 3
|
@sleep 3
|
||||||
python ./Release/esptool/esptool.py --chip esp32 --port $(or $(port), /dev/ttyUSB0) --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x210000 ./Release/console_image.bin
|
python3 ./Release/esptool/esptool.py --chip esp32 --port $(or $(port), /dev/ttyUSB0) --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x210000 ./Release/console_image.bin
|
||||||
|
|
||||||
upload-rnode_ng_21:
|
upload-rnode_ng_21:
|
||||||
arduino-cli upload -p $(or $(port), /dev/ttyACM0) --fqbn esp32:esp32:ttgo-lora32
|
arduino-cli upload -p $(or $(port), /dev/ttyACM0) --fqbn esp32:esp32:ttgo-lora32
|
||||||
@sleep 1
|
@sleep 1
|
||||||
rnodeconf $(or $(port), /dev/ttyACM0) --firmware-hash $$(./partition_hashes ./build/esp32.esp32.ttgo-lora32/opencom_xl_firmware.ino.bin)
|
rnodeconf $(or $(port), /dev/ttyACM0) --firmware-hash $$(./partition_hashes ./build/esp32.esp32.ttgo-lora32/opencom_xl_firmware.ino.bin)
|
||||||
@sleep 3
|
@sleep 3
|
||||||
python ./Release/esptool/esptool.py --chip esp32 --port $(or $(port), /dev/ttyACM0) --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x210000 ./Release/console_image.bin
|
python3 ./Release/esptool/esptool.py --chip esp32 --port $(or $(port), /dev/ttyACM0) --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x210000 ./Release/console_image.bin
|
||||||
|
|
||||||
upload-t3s3:
|
upload-t3s3:
|
||||||
@echo
|
@echo
|
||||||
@ -178,7 +193,7 @@ upload-t3s3:
|
|||||||
@read
|
@read
|
||||||
arduino-cli upload -p $(or $(port), /dev/ttyACM0) --fqbn esp32:esp32:esp32s3
|
arduino-cli upload -p $(or $(port), /dev/ttyACM0) --fqbn esp32:esp32:esp32s3
|
||||||
@sleep 2
|
@sleep 2
|
||||||
python ./Release/esptool/esptool.py --chip esp32s3 --port $(or $(port), /dev/ttyACM0) --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x210000 ./Release/console_image.bin
|
python3 ./Release/esptool/esptool.py --chip esp32s3 --port $(or $(port), /dev/ttyACM0) --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x210000 ./Release/console_image.bin
|
||||||
@echo
|
@echo
|
||||||
@echo Press the RESET button on the board now, and hit enter
|
@echo Press the RESET button on the board now, and hit enter
|
||||||
@read
|
@read
|
||||||
@ -190,7 +205,7 @@ upload-featheresp32:
|
|||||||
@sleep 1
|
@sleep 1
|
||||||
rnodeconf $(or $(port), /dev/ttyUSB0) --firmware-hash $$(./partition_hashes ./build/esp32.esp32.featheresp32/opencom_xl_firmware.ino.bin)
|
rnodeconf $(or $(port), /dev/ttyUSB0) --firmware-hash $$(./partition_hashes ./build/esp32.esp32.featheresp32/opencom_xl_firmware.ino.bin)
|
||||||
@sleep 3
|
@sleep 3
|
||||||
python ./Release/esptool/esptool.py --chip esp32 --port $(or $(port), /dev/ttyUSB0) --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x210000 ./Release/console_image.bin
|
python3 ./Release/esptool/esptool.py --chip esp32 --port $(or $(port), /dev/ttyUSB0) --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x210000 ./Release/console_image.bin
|
||||||
|
|
||||||
upload-freenode:
|
upload-freenode:
|
||||||
arduino-cli upload -p /dev/ttyACM0 --fqbn rakwireless:nrf52:WisCoreRAK4631Board
|
arduino-cli upload -p /dev/ttyACM0 --fqbn rakwireless:nrf52:WisCoreRAK4631Board
|
||||||
@ -208,7 +223,7 @@ release: release-all
|
|||||||
release-all: console-site spiffs-image release-tbeam release-tbeam_sx1262 release-lora32_v10 release-lora32_v20 release-lora32_v21 release-lora32_v10_extled release-lora32_v20_extled release-lora32_v21_extled release-lora32_v21_tcxo release-featheresp32 release-genericesp32 release-heltec32_v2 release-heltec32_v3 release-heltec32_v2_extled release-rnode_ng_20 release-rnode_ng_21 release-t3s3 release-hashes
|
release-all: console-site spiffs-image release-tbeam release-tbeam_sx1262 release-lora32_v10 release-lora32_v20 release-lora32_v21 release-lora32_v10_extled release-lora32_v20_extled release-lora32_v21_extled release-lora32_v21_tcxo release-featheresp32 release-genericesp32 release-heltec32_v2 release-heltec32_v3 release-heltec32_v2_extled release-rnode_ng_20 release-rnode_ng_21 release-t3s3 release-hashes
|
||||||
|
|
||||||
release-hashes:
|
release-hashes:
|
||||||
python ./release_hashes.py > ./Release/release.json
|
python3 ./release_hashes.py > ./Release/release.json
|
||||||
|
|
||||||
release-tbeam:
|
release-tbeam:
|
||||||
arduino-cli compile --fqbn esp32:esp32:t-beam -e --build-property "build.partitions=no_ota" --build-property "upload.maximum_size=2097152" --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x33\""
|
arduino-cli compile --fqbn esp32:esp32:t-beam -e --build-property "build.partitions=no_ota" --build-property "upload.maximum_size=2097152" --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x33\""
|
||||||
|
3
ROM.h
3
ROM.h
@ -32,6 +32,9 @@
|
|||||||
#define MODEL_12 0x12
|
#define MODEL_12 0x12
|
||||||
#define MODEL_13 0x13 // RAK4631 LF with WisBlock SX1280 module (LIBSYS002)
|
#define MODEL_13 0x13 // RAK4631 LF with WisBlock SX1280 module (LIBSYS002)
|
||||||
#define MODEL_14 0x14 // RAK4631 HF with WisBlock SX1280 module (LIBSYS002)
|
#define MODEL_14 0x14 // RAK4631 HF with WisBlock SX1280 module (LIBSYS002)
|
||||||
|
#define PRODUCT_TECHO 0x15
|
||||||
|
#define MODEL_16 0x16 // T-Echo 433
|
||||||
|
#define MODEL_17 0x17 // T-Echo 915
|
||||||
#define MODEL_21 0x21 // European band, 868MHz
|
#define MODEL_21 0x21 // European band, 868MHz
|
||||||
#define MODEL_A1 0xA1
|
#define MODEL_A1 0xA1
|
||||||
#define MODEL_A5 0xA5 // T3S3 SX1280 PA
|
#define MODEL_A5 0xA5 // T3S3 SX1280 PA
|
||||||
|
@ -744,6 +744,8 @@ void sx126x::enableTCXO() {
|
|||||||
uint8_t buf[4] = {MODE_TCXO_3_3V_6X, 0x00, 0x00, 0xFF};
|
uint8_t buf[4] = {MODE_TCXO_3_3V_6X, 0x00, 0x00, 0xFF};
|
||||||
#elif BOARD_MODEL == BOARD_TBEAM
|
#elif BOARD_MODEL == BOARD_TBEAM
|
||||||
uint8_t buf[4] = {MODE_TCXO_1_8V_6X, 0x00, 0x00, 0xFF};
|
uint8_t buf[4] = {MODE_TCXO_1_8V_6X, 0x00, 0x00, 0xFF};
|
||||||
|
#elif BOARD_MODEL == BOARD_TECHO
|
||||||
|
uint8_t buf[4] = {MODE_TCXO_1_8V_6X, 0x00, 0x00, 0xFF};
|
||||||
#elif BOARD_MODEL == BOARD_T3S3
|
#elif BOARD_MODEL == BOARD_T3S3
|
||||||
uint8_t buf[4] = {MODE_TCXO_1_8V_6X, 0x00, 0x00, 0xFF};
|
uint8_t buf[4] = {MODE_TCXO_1_8V_6X, 0x00, 0x00, 0xFF};
|
||||||
#else
|
#else
|
||||||
@ -2559,9 +2561,12 @@ void sx128x::disableCrc()
|
|||||||
setPacketParams(_preambleLength, _implicitHeaderMode, _payloadLength, _crcMode);
|
setPacketParams(_preambleLength, _implicitHeaderMode, _payloadLength, _crcMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
byte sx128x::random()
|
uint8_t sx128x::random()
|
||||||
{
|
{
|
||||||
// todo: implement
|
// todo: implement
|
||||||
|
return 0x4; //chosen by fair die roll
|
||||||
|
//guarenteed to be random
|
||||||
|
//https://xkcd.com/221/
|
||||||
}
|
}
|
||||||
|
|
||||||
void sx128x::setSPIFrequency(uint32_t frequency)
|
void sx128x::setSPIFrequency(uint32_t frequency)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# SPDX-FileCopyrightText: 2014-2022 Fredrik Ahlberg, Angus Gratton, Espressif Systems (Shanghai) CO LTD, other contributors as noted.
|
# SPDX-FileCopyrightText: 2014-2022 Fredrik Ahlberg, Angus Gratton, Espressif Systems (Shanghai) CO LTD, other contributors as noted.
|
||||||
#
|
#
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# ESP32 partition table generation tool
|
# ESP32 partition table generation tool
|
||||||
#
|
#
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# spiffsgen is a tool used to generate a spiffs image from a directory
|
# spiffsgen is a tool used to generate a spiffs image from a directory
|
||||||
#
|
#
|
||||||
|
20
Utilities.h
20
Utilities.h
@ -217,6 +217,18 @@ uint8_t boot_vector = 0x00;
|
|||||||
void led_tx_on() { analogWrite(pin_led_tx, 1); }
|
void led_tx_on() { analogWrite(pin_led_tx, 1); }
|
||||||
void led_tx_off() { analogWrite(pin_led_tx, 0); }
|
void led_tx_off() { analogWrite(pin_led_tx, 0); }
|
||||||
#endif
|
#endif
|
||||||
|
#if BOARD_MODEL == BOARD_RAK4631
|
||||||
|
void led_rx_on() { digitalWrite(pin_led_rx, HIGH); }
|
||||||
|
void led_rx_off() { digitalWrite(pin_led_rx, LOW); }
|
||||||
|
void led_tx_on() { digitalWrite(pin_led_tx, HIGH); }
|
||||||
|
void led_tx_off() { digitalWrite(pin_led_tx, LOW); }
|
||||||
|
#elif BOARD_MODEL == BOARD_TECHO
|
||||||
|
void led_rx_on() { digitalWrite(pin_led_rx, HIGH); }
|
||||||
|
void led_rx_off() { digitalWrite(pin_led_rx, LOW); }
|
||||||
|
void led_tx_on() { digitalWrite(pin_led_tx, HIGH); }
|
||||||
|
void led_tx_off() { digitalWrite(pin_led_tx, LOW); }
|
||||||
|
#endif
|
||||||
|
>>>>>>> upstream/master
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void hard_reset(void) {
|
void hard_reset(void) {
|
||||||
@ -585,6 +597,7 @@ void serial_write(uint8_t byte) {
|
|||||||
} else {
|
} else {
|
||||||
SerialBT.write(byte);
|
SerialBT.write(byte);
|
||||||
|
|
||||||
|
#if MCU_VARIANT == MCU_NRF52 && HAS_BLE
|
||||||
// This ensures that the TX buffer is flushed after a frame is queued in serial.
|
// This ensures that the TX buffer is flushed after a frame is queued in serial.
|
||||||
// serial_in_frame is used to ensure that the flush only happens at the end of the frame
|
// serial_in_frame is used to ensure that the flush only happens at the end of the frame
|
||||||
if (serial_in_frame && byte == FEND) {
|
if (serial_in_frame && byte == FEND) {
|
||||||
@ -594,6 +607,7 @@ void serial_write(uint8_t byte) {
|
|||||||
else if (!serial_in_frame && byte == FEND) {
|
else if (!serial_in_frame && byte == FEND) {
|
||||||
serial_in_frame = true;
|
serial_in_frame = true;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
Serial.write(byte);
|
Serial.write(byte);
|
||||||
@ -1164,6 +1178,8 @@ uint16_t getQueueSize(uint8_t index) {
|
|||||||
case 11:
|
case 11:
|
||||||
return CONFIG_QUEUE_11_SIZE;
|
return CONFIG_QUEUE_11_SIZE;
|
||||||
#endif
|
#endif
|
||||||
|
default:
|
||||||
|
return CONFIG_QUEUE_0_SIZE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1338,7 +1354,7 @@ bool eeprom_product_valid() {
|
|||||||
#if PLATFORM == PLATFORM_ESP32
|
#if PLATFORM == PLATFORM_ESP32
|
||||||
if (rval == PRODUCT_RNODE || rval == BOARD_RNODE_NG_20 || rval == BOARD_RNODE_NG_21 || rval == PRODUCT_HMBRW || rval == PRODUCT_TBEAM || rval == PRODUCT_T32_10 || rval == PRODUCT_T32_20 || rval == PRODUCT_T32_21 || rval == PRODUCT_H32_V2 || rval == PRODUCT_H32_V3) {
|
if (rval == PRODUCT_RNODE || rval == BOARD_RNODE_NG_20 || rval == BOARD_RNODE_NG_21 || rval == PRODUCT_HMBRW || rval == PRODUCT_TBEAM || rval == PRODUCT_T32_10 || rval == PRODUCT_T32_20 || rval == PRODUCT_T32_21 || rval == PRODUCT_H32_V2 || rval == PRODUCT_H32_V3) {
|
||||||
#elif PLATFORM == PLATFORM_NRF52
|
#elif PLATFORM == PLATFORM_NRF52
|
||||||
if (rval == PRODUCT_RAK4631 || rval == PRODUCT_HMBRW || rval == PRODUCT_FREENODE) {
|
if (rval == PRODUCT_TECHO || rval == PRODUCT_RAK4631 || rval == PRODUCT_HMBRW || rval == PRODUCT_FREENODE) {
|
||||||
#else
|
#else
|
||||||
if (false) {
|
if (false) {
|
||||||
#endif
|
#endif
|
||||||
@ -1366,6 +1382,8 @@ bool eeprom_model_valid() {
|
|||||||
if (model == MODEL_FF || model == MODEL_FE) {
|
if (model == MODEL_FF || model == MODEL_FE) {
|
||||||
#elif BOARD_MODEL == BOARD_TBEAM
|
#elif BOARD_MODEL == BOARD_TBEAM
|
||||||
if (model == MODEL_E4 || model == MODEL_E9 || model == MODEL_E3 || model == MODEL_E8) {
|
if (model == MODEL_E4 || model == MODEL_E9 || model == MODEL_E3 || model == MODEL_E8) {
|
||||||
|
#elif BOARD_MODEL == BOARD_TECHO
|
||||||
|
if (model == MODEL_16 || model == MODEL_17) {
|
||||||
#elif BOARD_MODEL == BOARD_LORA32_V1_0
|
#elif BOARD_MODEL == BOARD_LORA32_V1_0
|
||||||
if (model == MODEL_BA || model == MODEL_BB) {
|
if (model == MODEL_BA || model == MODEL_BB) {
|
||||||
#elif BOARD_MODEL == BOARD_LORA32_V2_0
|
#elif BOARD_MODEL == BOARD_LORA32_V2_0
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
board_manager:
|
board_manager:
|
||||||
additional_urls:
|
additional_urls:
|
||||||
|
- https://adafruit.github.io/arduino-board-index/package_adafruit_index.json
|
||||||
- https://liberatedsystems.co.uk/rnode-firmware-ce/esp-custom-package.json
|
- https://liberatedsystems.co.uk/rnode-firmware-ce/esp-custom-package.json
|
||||||
- https://raw.githubusercontent.com/RAKwireless/RAKwireless-Arduino-BSP-Index/main/package_rakwireless_index.json
|
- https://raw.githubusercontent.com/RAKwireless/RAKwireless-Arduino-BSP-Index/main/package_rakwireless_index.json
|
||||||
- http://unsigned.io/arduino/package_unsignedio_UnsignedBoards_index.json
|
- http://unsigned.io/arduino/package_unsignedio_UnsignedBoards_index.json
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
|
|
||||||
#if MCU_VARIANT == MCU_NRF52
|
#if MCU_VARIANT == MCU_NRF52
|
||||||
#define INTERFACE_SPI
|
#define INTERFACE_SPI
|
||||||
|
#if BOARD_MODEL == BOARD_RAK4631
|
||||||
// Required because on RAK4631, non-default SPI pins must be initialised when class is declared.
|
// Required because on RAK4631, non-default SPI pins must be initialised when class is declared.
|
||||||
SPIClass interface_spi[1] = {
|
SPIClass interface_spi[1] = {
|
||||||
// SX1262
|
// SX1262
|
||||||
@ -29,6 +30,17 @@
|
|||||||
interface_pins[0][2]
|
interface_pins[0][2]
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
|
#elif BOARD_MODEL == BOARD_TECHO
|
||||||
|
SPIClass interface_spi[1] = {
|
||||||
|
// SX1262
|
||||||
|
SPIClass(
|
||||||
|
NRF_SPIM3,
|
||||||
|
interface_pins[0][3],
|
||||||
|
interface_pins[0][1],
|
||||||
|
interface_pins[0][2]
|
||||||
|
)
|
||||||
|
};
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef INTERFACE_SPI
|
#ifndef INTERFACE_SPI
|
||||||
@ -363,6 +375,7 @@ void receive_callback(uint8_t index, int packet_size) {
|
|||||||
getPacketData(selected_radio, packet_size);
|
getPacketData(selected_radio, packet_size);
|
||||||
|
|
||||||
seq = SEQ_UNSET;
|
seq = SEQ_UNSET;
|
||||||
|
packet_interface = index;
|
||||||
packet_ready = true;
|
packet_ready = true;
|
||||||
|
|
||||||
} else if (isSplitPacket(header) && seq != sequence) {
|
} else if (isSplitPacket(header) && seq != sequence) {
|
||||||
@ -388,6 +401,8 @@ void receive_callback(uint8_t index, int packet_size) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getPacketData(selected_radio, packet_size);
|
getPacketData(selected_radio, packet_size);
|
||||||
|
|
||||||
|
packet_interface = index;
|
||||||
packet_ready = true;
|
packet_ready = true;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -396,6 +411,8 @@ void receive_callback(uint8_t index, int packet_size) {
|
|||||||
read_len = 0;
|
read_len = 0;
|
||||||
|
|
||||||
getPacketData(selected_radio, packet_size);
|
getPacketData(selected_radio, packet_size);
|
||||||
|
|
||||||
|
packet_interface = index;
|
||||||
packet_ready = true;
|
packet_ready = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1189,7 +1206,7 @@ void loop() {
|
|||||||
#endif
|
#endif
|
||||||
kiss_indicate_stat_rssi();
|
kiss_indicate_stat_rssi();
|
||||||
kiss_indicate_stat_snr();
|
kiss_indicate_stat_snr();
|
||||||
kiss_write_packet(1);
|
kiss_write_packet(packet_interface);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ready = false;
|
bool ready = false;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
# Copyright (C) 2023, Mark Qvist
|
# Copyright (C) 2023, Mark Qvist
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#!/bin/python
|
#!/bin/python3
|
||||||
|
|
||||||
# Copyright (C) 2023, Mark Qvist
|
# Copyright (C) 2023, Mark Qvist
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user