mirror of
https://github.com/OpenEPaperLink/OpenEPaperLink.git
synced 2026-03-21 05:06:39 +01:00
Compare commits
23 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
eb0064363f | ||
|
|
c1324c5089 | ||
|
|
df3c615eef | ||
|
|
d5e19d20fa | ||
|
|
e62a1b07bf | ||
|
|
4d06ef546d | ||
|
|
7096f7e756 | ||
|
|
1abedff388 | ||
|
|
8d2546a2aa | ||
|
|
c5a8058d62 | ||
|
|
ef59b87ae0 | ||
|
|
d526c43fd8 | ||
|
|
86abc112dd | ||
|
|
af50f96671 | ||
|
|
46c8b73fa0 | ||
|
|
c65c8b749e | ||
|
|
f61c2e3d04 | ||
|
|
0dc406b865 | ||
|
|
25b185da28 | ||
|
|
496d4d382f | ||
|
|
d09e89c9dd | ||
|
|
0e8e7b5b75 | ||
|
|
e8a92c4fcb |
18
.github/workflows/release.yml
vendored
18
.github/workflows/release.yml
vendored
@@ -196,6 +196,24 @@ jobs:
|
||||
cp ESP32_S3_16_8_LILYGO_AP/firmware.bin espbinaries/ESP32_S3_16_8_LILYGO_AP.bin
|
||||
cp ESP32_S3_16_8_LILYGO_AP/merged-firmware.bin espbinaries/ESP32_S3_16_8_LILYGO_AP_full.bin
|
||||
|
||||
- name: Build firmware for ESP32_S3_16_8_LILYGO_T3
|
||||
run: |
|
||||
cd ESP32_AP-Flasher
|
||||
export PLATFORMIO_BUILD_FLAGS="-D BUILD_VERSION=${{ github.ref_name }} -D SHA=$GITHUB_SHA"
|
||||
pio run --environment ESP32_S3_16_8_LILYGO_T3
|
||||
pio run --target buildfs --environment ESP32_S3_16_8_LILYGO_T3
|
||||
mkdir /home/runner/work/OpenEPaperLink/OpenEPaperLink/ESP32_S3_16_8_LILYGO_T3
|
||||
cp ~/.platformio/packages/framework-arduinoespressif32/tools/partitions/boot_app0.bin /home/runner/work/OpenEPaperLink/OpenEPaperLink/ESP32_S3_16_8_LILYGO_T3/boot_app0.bin
|
||||
cp .pio/build/ESP32_S3_16_8_LILYGO_T3/firmware.bin /home/runner/work/OpenEPaperLink/OpenEPaperLink/ESP32_S3_16_8_LILYGO_T3/firmware.bin
|
||||
cp .pio/build/ESP32_S3_16_8_LILYGO_T3/bootloader.bin /home/runner/work/OpenEPaperLink/OpenEPaperLink/ESP32_S3_16_8_LILYGO_T3/bootloader.bin
|
||||
cp .pio/build/ESP32_S3_16_8_LILYGO_T3/partitions.bin /home/runner/work/OpenEPaperLink/OpenEPaperLink/ESP32_S3_16_8_LILYGO_T3/partitions.bin
|
||||
cp .pio/build/ESP32_S3_16_8_LILYGO_T3/littlefs.bin /home/runner/work/OpenEPaperLink/OpenEPaperLink/ESP32_S3_16_8_LILYGO_T3/littlefs.bin
|
||||
cd /home/runner/work/OpenEPaperLink/OpenEPaperLink/ESP32_S3_16_8_LILYGO_T3
|
||||
esptool.py --chip esp32-s3 merge_bin -o merged-firmware.bin --flash_mode dio --flash_freq 80m --flash_size 16MB 0x0000 bootloader.bin 0x8000 partitions.bin 0xe000 boot_app0.bin 0x10000 firmware.bin 0x00910000 littlefs.bin
|
||||
cd /home/runner/work/OpenEPaperLink/OpenEPaperLink
|
||||
cp ESP32_S3_16_8_LILYGO_T3/firmware.bin espbinaries/ESP32_S3_16_8_LILYGO_T3.bin
|
||||
cp ESP32_S3_16_8_LILYGO_T3/merged-firmware.bin espbinaries/ESP32_S3_16_8_LILYGO_T3_full.bin
|
||||
|
||||
- name: Build firmware for OpenEPaperLink_Nano_TLSR
|
||||
run: |
|
||||
cd ESP32_AP-Flasher
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -56,6 +56,7 @@ class nrfswd : protected swd {
|
||||
|
||||
uint8_t nrf_read_bank(uint32_t address, uint32_t buffer[], int size);
|
||||
uint8_t nrf_write_bank(uint32_t address, uint32_t buffer[], int size);
|
||||
uint8_t nrf_erase_all();
|
||||
uint8_t erase_all_flash();
|
||||
uint8_t erase_uicr();
|
||||
uint8_t erase_page(uint32_t page);
|
||||
|
||||
@@ -287,6 +287,95 @@ board_upload.maximum_ram_size = 327680
|
||||
board_upload.flash_size = 16MB
|
||||
; ----------------------------------------------------------------------------------------
|
||||
; !!! this configuration expects an ESP32-S3 16MB Flash 8MB RAM
|
||||
; !!! Dedicated pinout for using the Lilygo T-Display-S3 board.
|
||||
; ----------------------------------------------------------------------------------------
|
||||
[env:ESP32_S3_16_8_LILYGO_T3]
|
||||
board = esp32-s3-devkitc-1
|
||||
board_build.partitions = large_spiffs_16MB.csv
|
||||
monitor_dtr = 0
|
||||
monitor_rts = 0
|
||||
build_unflags =
|
||||
-std=gnu++11
|
||||
-D CONFIG_MBEDTLS_INTERNAL_MEM_ALLOC=y
|
||||
-D ILI9341_DRIVER
|
||||
lib_deps = ${env.lib_deps}
|
||||
build_flags =
|
||||
-std=gnu++17
|
||||
${env.build_flags}
|
||||
-D HAS_TFT
|
||||
-D CORE_DEBUG_LEVEL=1
|
||||
-D ARDUINO_USB_CDC_ON_BOOT=1
|
||||
-D CONFIG_ESP32S3_SPIRAM_SUPPORT=1
|
||||
-D CONFIG_SPIRAM_USE_MALLOC=1
|
||||
-D POWER_NO_SOFT_POWER
|
||||
-D BOARD_HAS_PSRAM
|
||||
-D CONFIG_MBEDTLS_EXTERNAL_MEM_ALLOC=y
|
||||
-D HAS_BLE_WRITER
|
||||
-D FLASHER_AP_SS=-1
|
||||
-D FLASHER_AP_CLK=-1
|
||||
-D FLASHER_AP_MOSI=-1
|
||||
-D FLASHER_AP_MISO=-1
|
||||
-D FLASHER_AP_RESET=44 ;47 ;purple RST
|
||||
-D FLASHER_AP_POWER={-1}
|
||||
-D FLASHER_AP_TEST=-1
|
||||
-D FLASHER_AP_TXD=17 ;white 2
|
||||
-D FLASHER_AP_RXD=18 ;orange 3
|
||||
-D FLASHER_DEBUG_TXD=12 ;15 ;yellow TX
|
||||
-D FLASHER_DEBUG_RXD=13 ;7 ;blue RX
|
||||
-D FLASHER_DEBUG_PROG=21 ;green 9
|
||||
-D FLASHER_LED=-1
|
||||
-D HAS_RGB_LED
|
||||
-D FLASHER_RGB_LED=48
|
||||
-D ST7789_DRIVER
|
||||
;-D ST7735_DRIVER
|
||||
;-D ST7735_GREENTAB160x80
|
||||
-D TFT_INVERSION_ON
|
||||
-D TFT_PARALLEL_8_BIT
|
||||
-D TFT_WIDTH=170 ;80
|
||||
-D TFT_HEIGHT=320 ;160
|
||||
;-D TFT_MISO=-1
|
||||
;-D TFT_MOSI=13
|
||||
;-D TFT_SCLK=12
|
||||
-D TFT_WR=8
|
||||
-D TFT_RD=9
|
||||
-D TFT_CS=6 ;10
|
||||
-D TFT_DC=7 ;11
|
||||
-D TFT_RST=5 ;1
|
||||
-D TFT_D0=39
|
||||
-D TFT_D1=40
|
||||
-D TFT_D2=41
|
||||
-D TFT_D3=42
|
||||
-D TFT_D4=45
|
||||
-D TFT_D5=46
|
||||
-D TFT_D6=47
|
||||
-D TFT_D7=48
|
||||
-D TFT_BL=38
|
||||
-D TFT_RGB_ORDER=TFT_BGR
|
||||
-D USE_HSPI_PORT
|
||||
-D LOAD_FONT2
|
||||
-D LOAD_FONT4
|
||||
-D LOAD_GLCD
|
||||
;-D LOAD_FONT6
|
||||
;-D LOAD_FONT7
|
||||
;-D LOAD_FONT8
|
||||
;-D LOAD_GFXFF
|
||||
;-D SMOOTH_FONT
|
||||
-D MD5_ENABLED=1
|
||||
-D SERIAL_FLASHER_INTERFACE_UART=1
|
||||
-D SERIAL_FLASHER_BOOT_HOLD_TIME_MS=200
|
||||
-D SERIAL_FLASHER_RESET_HOLD_TIME_MS=200
|
||||
-D C6_OTA_FLASHING
|
||||
-D HAS_SUBGHZ ; previously disabled but now enabled. Disabling causes the Channel chooser to disfunction.
|
||||
build_src_filter =
|
||||
+<*>-<usbflasher.cpp>-<swd.cpp>-<webflasher.cpp>
|
||||
board_build.flash_mode=qio
|
||||
board_build.arduino.memory_type = qio_opi
|
||||
board_build.psram_type=qspi_opi
|
||||
board_upload.maximum_size = 16777216
|
||||
board_upload.maximum_ram_size = 327680
|
||||
board_upload.flash_size = 16MB
|
||||
; ----------------------------------------------------------------------------------------
|
||||
; !!! this configuration expects an ESP32-S3 16MB Flash 8MB RAM
|
||||
; ----------------------------------------------------------------------------------------
|
||||
[env:ESP32_S3_C6_BIG_AP]
|
||||
board = esp32-s3-devkitc-1
|
||||
|
||||
@@ -64,7 +64,7 @@ uint8_t gicToOEPLtype(uint8_t gicType) {
|
||||
}
|
||||
}
|
||||
|
||||
struct BleAdvDataStruct {
|
||||
struct BleAdvDataStructV1 {
|
||||
uint16_t manu_id; // 0x1337 for us
|
||||
uint8_t version;
|
||||
uint16_t hw_type;
|
||||
@@ -73,6 +73,16 @@ struct BleAdvDataStruct {
|
||||
uint16_t battery_mv;
|
||||
uint8_t counter;
|
||||
} __packed;
|
||||
struct BleAdvDataStructV2 {
|
||||
uint16_t manu_id; // 0x1337 for us
|
||||
uint8_t version;
|
||||
uint16_t hw_type;
|
||||
uint16_t fw_version;
|
||||
uint16_t capabilities;
|
||||
uint16_t battery_mv;
|
||||
int8_t temperature;
|
||||
uint8_t counter;
|
||||
} __packed;
|
||||
|
||||
bool BLE_filter_add_device(BLEAdvertisedDevice advertisedDevice) {
|
||||
Serial.print("BLE Advertised Device found: ");
|
||||
@@ -91,16 +101,16 @@ bool BLE_filter_add_device(BLEAdvertisedDevice advertisedDevice) {
|
||||
uint8_t manuData[100];
|
||||
if (manuDatalen > sizeof(manuData))
|
||||
return false; // Manu data too big, could never happen but better make sure here
|
||||
#if ESP_ARDUINO_VERSION_MAJOR == 2
|
||||
memcpy(&manuData, (uint8_t*)advertisedDevice.getManufacturerData().data(), manuDatalen);
|
||||
#else
|
||||
// [Nic] suggested fix for arduino 3.x by copilot, but I cannot test it
|
||||
memcpy(&manuData, (uint8_t*)advertisedDevice.getManufacturerData().c_str(), manuDatalen);
|
||||
#endif
|
||||
Serial.printf(" Address type: %02X Manu data: ", advertisedDevice.getAddressType());
|
||||
for (int i = 0; i < advertisedDevice.getManufacturerData().length(); i++)
|
||||
Serial.printf("%02X", manuData[i]);
|
||||
Serial.printf("\r\n");
|
||||
#if ESP_ARDUINO_VERSION_MAJOR == 2
|
||||
memcpy(&manuData, (uint8_t*)advertisedDevice.getManufacturerData().data(), manuDatalen);
|
||||
#else
|
||||
// [Nic] suggested fix for arduino 3.x by copilot, but I cannot test it
|
||||
memcpy(&manuData, (uint8_t*)advertisedDevice.getManufacturerData().c_str(), manuDatalen);
|
||||
#endif
|
||||
if (manuDatalen == 7 && manuData[0] == 0x53 && manuData[1] == 0x50) { // Lets check for a Gicisky E-Paper display
|
||||
|
||||
struct espAvailDataReq theAdvData;
|
||||
@@ -125,23 +135,63 @@ bool BLE_filter_add_device(BLEAdvertisedDevice advertisedDevice) {
|
||||
|
||||
processDataReq(&theAdvData, true);
|
||||
return true;
|
||||
} else if (manuDatalen >= sizeof(BleAdvDataStruct) && manuData[0] == 0x37 && manuData[1] == 0x13) { // Lets check for a Gicisky E-Paper display
|
||||
} else if (manuDatalen >= 3 && manuData[0] == 0x37 && manuData[1] == 0x13) { // Lets check for a Gicisky E-Paper display
|
||||
Serial.printf("ATC BLE OEPL Detected\r\n");
|
||||
struct espAvailDataReq theAdvData;
|
||||
struct BleAdvDataStruct inAdvData;
|
||||
|
||||
memset((uint8_t*)&theAdvData, 0x00, sizeof(espAvailDataReq));
|
||||
memcpy(&inAdvData, manuData, sizeof(BleAdvDataStruct));
|
||||
/*Serial.printf("manu_id %04X\r\n", inAdvData.manu_id);
|
||||
Serial.printf("version %04X\r\n", inAdvData.version);
|
||||
Serial.printf("hw_type %04X\r\n", inAdvData.hw_type);
|
||||
Serial.printf("fw_version %04X\r\n", inAdvData.fw_version);
|
||||
Serial.printf("capabilities %04X\r\n", inAdvData.capabilities);
|
||||
Serial.printf("battery_mv %u\r\n", inAdvData.battery_mv);
|
||||
Serial.printf("counter %u\r\n", inAdvData.counter);*/
|
||||
if (inAdvData.version != 1) {
|
||||
printf("Version currently not supported!\r\n");
|
||||
return false;
|
||||
uint8_t versionAdvData = manuData[2];
|
||||
|
||||
switch (versionAdvData) {
|
||||
case 1: {
|
||||
if (manuDatalen >= sizeof(BleAdvDataStructV1)) {
|
||||
struct BleAdvDataStructV1 inAdvData;
|
||||
memcpy(&inAdvData, manuData, sizeof(BleAdvDataStructV1));
|
||||
printf("Version 1 ATC_BLE_OEPL Received\r\n");
|
||||
/*Serial.printf("manu_id %04X\r\n", inAdvData.manu_id);
|
||||
Serial.printf("version %02X\r\n", inAdvData.version);
|
||||
Serial.printf("hw_type %04X\r\n", inAdvData.hw_type);
|
||||
Serial.printf("fw_version %04X\r\n", inAdvData.fw_version);
|
||||
Serial.printf("capabilities %04X\r\n", inAdvData.capabilities);
|
||||
Serial.printf("battery_mv %u\r\n", inAdvData.battery_mv);
|
||||
Serial.printf("counter %u\r\n", inAdvData.counter);*/
|
||||
theAdvData.adr.batteryMv = inAdvData.battery_mv;
|
||||
theAdvData.adr.lastPacketRSSI = advertisedDevice.getRSSI();
|
||||
theAdvData.adr.hwType = inAdvData.hw_type & 0xff;
|
||||
theAdvData.adr.tagSoftwareVersion = inAdvData.fw_version;
|
||||
theAdvData.adr.capabilities = inAdvData.capabilities & 0xff;
|
||||
} else {
|
||||
printf("Version 1 data length incorrect!\r\n");
|
||||
return false;
|
||||
}
|
||||
} break;
|
||||
case 2: {
|
||||
if (manuDatalen >= sizeof(BleAdvDataStructV2)) {
|
||||
struct BleAdvDataStructV2 inAdvData;
|
||||
memcpy(&inAdvData, manuData, sizeof(BleAdvDataStructV2));
|
||||
printf("Version 2 ATC_BLE_OEPL Received\r\n");
|
||||
/*Serial.printf("manu_id %04X\r\n", inAdvData.manu_id);
|
||||
Serial.printf("version %02X\r\n", inAdvData.version);
|
||||
Serial.printf("hw_type %04X\r\n", inAdvData.hw_type);
|
||||
Serial.printf("fw_version %04X\r\n", inAdvData.fw_version);
|
||||
Serial.printf("capabilities %04X\r\n", inAdvData.capabilities);
|
||||
Serial.printf("battery_mv %u\r\n", inAdvData.battery_mv);
|
||||
Serial.printf("temperature %i\r\n", inAdvData.temperature);
|
||||
Serial.printf("counter %u\r\n", inAdvData.counter);*/
|
||||
theAdvData.adr.batteryMv = inAdvData.battery_mv;
|
||||
theAdvData.adr.temperature = inAdvData.temperature;
|
||||
theAdvData.adr.lastPacketRSSI = advertisedDevice.getRSSI();
|
||||
theAdvData.adr.hwType = inAdvData.hw_type & 0xff;
|
||||
theAdvData.adr.tagSoftwareVersion = inAdvData.fw_version;
|
||||
theAdvData.adr.capabilities = inAdvData.capabilities & 0xff;
|
||||
} else {
|
||||
printf("Version 2 data length incorrect!\r\n");
|
||||
return false;
|
||||
}
|
||||
} break;
|
||||
default:
|
||||
printf("Version %02X currently not supported!\r\n", versionAdvData);
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
uint8_t macReversed[6];
|
||||
memcpy(&macReversed, (uint8_t*)advertisedDevice.getAddress().getNative(), 6);
|
||||
@@ -153,11 +203,6 @@ bool BLE_filter_add_device(BLEAdvertisedDevice advertisedDevice) {
|
||||
theAdvData.src[5] = macReversed[0];
|
||||
theAdvData.src[6] = manuData[0]; // We use this do find out what type of display we got for compression^^
|
||||
theAdvData.src[7] = manuData[1];
|
||||
theAdvData.adr.batteryMv = inAdvData.battery_mv;
|
||||
theAdvData.adr.lastPacketRSSI = advertisedDevice.getRSSI();
|
||||
theAdvData.adr.hwType = inAdvData.hw_type & 0xff;
|
||||
theAdvData.adr.tagSoftwareVersion = inAdvData.fw_version;
|
||||
theAdvData.adr.capabilities = inAdvData.capabilities & 0xff;
|
||||
processDataReq(&theAdvData, true);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -3135,7 +3135,7 @@ uint32_t convert_tm_to_seconds(struct tm *t) {
|
||||
|
||||
void prepareTIME_RAW(const uint8_t *dst, time_t now) {
|
||||
uint8_t *data;
|
||||
size_t len = 1 + 4 + 4;
|
||||
size_t len = 1 + 4 + 4 + 1;
|
||||
struct tm timeinfo;
|
||||
localtime_r(&now, &timeinfo);
|
||||
uint32_t local_time = convert_tm_to_seconds(&timeinfo) + 20;// Adding 20 seconds for the average of upload time
|
||||
@@ -3151,6 +3151,7 @@ void prepareTIME_RAW(const uint8_t *dst, time_t now) {
|
||||
data[7] = ((uint8_t*)&unix_time)[1];
|
||||
data[8] = ((uint8_t*)&unix_time)[2];
|
||||
data[9] = ((uint8_t*)&unix_time)[3];
|
||||
data[10] = 1; // Design, 1 = Full DateTime 2 = Just Time Segment Style
|
||||
prepareDataAvail(data, len + 1, DATATYPE_TIME_RAW_DATA, dst);
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -461,7 +461,7 @@ void spr2buffer(TFT_eSprite &spr, String &fileout, imgParam &imageParams) {
|
||||
case 1:
|
||||
case 2: {
|
||||
long bufw = spr.width(), bufh = spr.height();
|
||||
size_t buffer_size = (bufw * bufh) / 8;
|
||||
size_t buffer_size = ((bufw * bufh) + 7) / 8; // round up: not all dimensions are multiples of 8
|
||||
#ifdef BOARD_HAS_PSRAM
|
||||
uint8_t *buffer = (uint8_t *)ps_malloc(buffer_size);
|
||||
#else
|
||||
@@ -585,7 +585,7 @@ void spr2buffer(TFT_eSprite &spr, String &fileout, imgParam &imageParams) {
|
||||
case 3:
|
||||
case 4: {
|
||||
long bufw = spr.width(), bufh = spr.height();
|
||||
size_t buffer_size = (bufw * bufh) / 8 * imageParams.bpp;
|
||||
size_t buffer_size = ((bufw * bufh) + 7) / 8 * imageParams.bpp;
|
||||
uint8_t *buffer = (uint8_t *)ps_malloc(buffer_size);
|
||||
if (!buffer) {
|
||||
Serial.println("Failed to allocate buffer");
|
||||
|
||||
@@ -264,7 +264,19 @@ void nrfswd::write_register(uint32_t address, uint32_t value) {
|
||||
bool state3 = DP_Read(DP_RDBUFF, temp);
|
||||
// if (showDebug) Serial.printf("%i%i%i Write Register: 0x%08x : 0x%08x\r\n", state1, state2, state3, address, value);
|
||||
}
|
||||
|
||||
uint8_t nrfswd::nrf_erase_all() {
|
||||
nrf_port_selection(1);
|
||||
nrf_write_port(1, AP_NRF_ERASEALL, 1);
|
||||
long timeout = millis();
|
||||
while (nrf_read_port(1, AP_NRF_ERASEALLSTATUS)) {
|
||||
if (millis() - timeout > 1000) return 1;
|
||||
}
|
||||
nrf_write_port(1, AP_NRF_ERASEALL, 0);
|
||||
nrf_port_selection(0);
|
||||
nrf_soft_reset();
|
||||
init();
|
||||
return 0;
|
||||
}
|
||||
uint8_t nrfswd::erase_all_flash() {
|
||||
write_register(0x4001e504, 2);
|
||||
long timeout = millis();
|
||||
|
||||
@@ -306,6 +306,7 @@ typedef enum {
|
||||
|
||||
CMD_ERASE_FLASH = 26,
|
||||
CMD_ERASE_INFOPAGE = 27,
|
||||
CMD_ERASE_ALL = 28,
|
||||
CMD_SAVE_MAC_FROM_FW = 40,
|
||||
CMD_PASS_THROUGH = 50,
|
||||
|
||||
@@ -420,6 +421,16 @@ void processFlasherCommand(struct flasherCommand* cmd, uint8_t transportType) {
|
||||
}
|
||||
sendFlasherAnswer(CMD_ERASE_INFOPAGE, NULL, 0, transportType);
|
||||
break;
|
||||
case CMD_ERASE_ALL:
|
||||
if (selectedController == CONTROLLER_NRF82511) {
|
||||
if (nrfflasherp == nullptr) return;
|
||||
nrfflasherp->nrf_erase_all();
|
||||
} else if (selectedController == CONTROLLER_CC) {
|
||||
if (ccflasherp == nullptr) return;
|
||||
ccflasherp->erase_chip();
|
||||
}
|
||||
sendFlasherAnswer(CMD_ERASE_ALL, NULL, 0, transportType);
|
||||
break;
|
||||
case CMD_SELECT_PORT:
|
||||
wsSerial("> select port");
|
||||
selectedFlasherPort = cmd->data[0];
|
||||
@@ -453,7 +464,7 @@ void processFlasherCommand(struct flasherCommand* cmd, uint8_t transportType) {
|
||||
break;
|
||||
}
|
||||
nrfflasherp->init();
|
||||
temp_buff[0] = (nrfflasherp->isConnected && !nrfflasherp->isLocked);
|
||||
temp_buff[0] = nrfflasherp->isConnected ? (nrfflasherp->isLocked ? 2 : 1) : 0;
|
||||
sendFlasherAnswer(CMD_SELECT_NRF82511, temp_buff, 1, transportType);
|
||||
currentFlasherOffset = 0;
|
||||
selectedController = CONTROLLER_NRF82511;
|
||||
|
||||
@@ -4,6 +4,13 @@ This is an alternative firmware and protocol for the multiple Electronic Shelf L
|
||||
|
||||
The software in this project consists of two parts: Accesspoint-firmware and Tag firmware.
|
||||
Additionally, there are various hardware designs for accesspoints and flasher-interfaces to program the tags, preferably using programming jigs
|
||||
|
||||
>[!Note]
|
||||
>Please refer to the [Wiki](https://github.com/jjwbruijn/OpenEPaperLink/wiki) for the latest information.
|
||||
>
|
||||
>Much of this README is now obsolete, but it has been retained for historical reference.
|
||||
>
|
||||
>For example the use of tags as RF coprocessors is no longer supported.
|
||||
|
||||
## Aims
|
||||
- Low power (currently around 9µA with a minimum of 40 second latency)
|
||||
|
||||
@@ -120,6 +120,9 @@ python3 OEPL-Flasher.py -e -c -p COM31 read blaat.bin --flash
|
||||
See this [page](https://github.com/OpenEPaperLink/OpenEPaperLink/wiki/Chroma-Series-SubGhz-Tags#flashing-cc1110-based-chroma-tags)
|
||||
on the Wiki for additional information.
|
||||
|
||||
## EFR32-based
|
||||
|
||||
This flasher does **NOT** support tags based on the EFR32. See the [wiki](https://github.com/OpenEPaperLink/OpenEPaperLink/wiki/Flashing-SiLabs-based-M3-Newton-Displays) for information on how to flash those.
|
||||
## Credits
|
||||
|
||||
Much code was reused from ATC1441's various flashers
|
||||
|
||||
25
resources/tagtypes/2B.json
Normal file
25
resources/tagtypes/2B.json
Normal file
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"version": 1,
|
||||
"name": "M3 2.9\" BWRY",
|
||||
"width": 384,
|
||||
"height": 168,
|
||||
"rotatebuffer": 3,
|
||||
"bpp": 2,
|
||||
"colortable": {
|
||||
"white": [ 255, 255, 255 ],
|
||||
"black": [ 0, 0, 0 ],
|
||||
"red": [ 255, 0, 0 ],
|
||||
"yellow": [ 255, 255, 0 ]
|
||||
},
|
||||
"perceptual": {
|
||||
"white": [ 255, 255, 255 ],
|
||||
"black": [ 0, 0, 0 ],
|
||||
"red": [ 255, 0, 0 ],
|
||||
"yellow": [ 200, 200, 0 ]
|
||||
},
|
||||
"shortlut": 0,
|
||||
"zlib_compression": "27",
|
||||
"options": [ "led" ],
|
||||
"contentids": [ 22, 23, 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 14, 16, 17, 18, 19, 20, 21, 27 ],
|
||||
"usetemplate": 51
|
||||
}
|
||||
25
resources/tagtypes/2C.json
Normal file
25
resources/tagtypes/2C.json
Normal file
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"version": 1,
|
||||
"name": "M3 4.3\" BWRY",
|
||||
"width": 522,
|
||||
"height": 152,
|
||||
"rotatebuffer": 3,
|
||||
"bpp": 2,
|
||||
"colortable": {
|
||||
"white": [ 255, 255, 255 ],
|
||||
"black": [ 0, 0, 0 ],
|
||||
"red": [ 255, 0, 0 ],
|
||||
"yellow": [ 255, 255, 0 ]
|
||||
},
|
||||
"perceptual": {
|
||||
"white": [ 255, 255, 255 ],
|
||||
"black": [ 0, 0, 0 ],
|
||||
"red": [ 255, 0, 0 ],
|
||||
"yellow": [ 200, 200, 0 ]
|
||||
},
|
||||
"shortlut": 0,
|
||||
"zlib_compression": "27",
|
||||
"options": [ "led" ],
|
||||
"contentids": [ 22, 23, 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 14, 16, 17, 18, 19, 20, 21, 27 ],
|
||||
"usetemplate": 47
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"version": 3,
|
||||
"version": 4,
|
||||
"name": "M3 4.2\" BWY",
|
||||
"width": 400,
|
||||
"height": 300,
|
||||
@@ -15,6 +15,7 @@
|
||||
"black": [ 0, 0, 0 ],
|
||||
"yellow": [ 200, 200, 0 ]
|
||||
},
|
||||
"highlight_color": 3,
|
||||
"shortlut": 0,
|
||||
"zlib_compression": "27",
|
||||
"options": [ "button", "led" ],
|
||||
|
||||
25
resources/tagtypes/4A.json
Normal file
25
resources/tagtypes/4A.json
Normal file
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"version": 1,
|
||||
"name": "M3 1.6\" 200px BWRY",
|
||||
"width": 200,
|
||||
"height": 200,
|
||||
"rotatebuffer": 0,
|
||||
"bpp": 2,
|
||||
"colortable": {
|
||||
"white": [ 255, 255, 255 ],
|
||||
"black": [ 0, 0, 0 ],
|
||||
"red": [ 255, 0, 0 ],
|
||||
"yellow": [ 255, 255, 0 ]
|
||||
},
|
||||
"perceptual": {
|
||||
"white": [ 255, 255, 255 ],
|
||||
"black": [ 0, 0, 0 ],
|
||||
"red": [ 255, 0, 0 ],
|
||||
"yellow": [ 200, 200, 0 ]
|
||||
},
|
||||
"shortlut": 0,
|
||||
"zlib_compression": "27",
|
||||
"options": [ "led" ],
|
||||
"contentids": [ 22, 23, 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 14, 16, 17, 18, 19, 20, 21, 27 ],
|
||||
"usetemplate": 48
|
||||
}
|
||||
25
resources/tagtypes/4B.json
Normal file
25
resources/tagtypes/4B.json
Normal file
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"version": 1,
|
||||
"name": "M3 2.2\" BWRY",
|
||||
"width": 296,
|
||||
"height": 160,
|
||||
"rotatebuffer": 3,
|
||||
"bpp": 2,
|
||||
"colortable": {
|
||||
"white": [ 255, 255, 255 ],
|
||||
"black": [ 0, 0, 0 ],
|
||||
"red": [ 255, 0, 0 ],
|
||||
"yellow": [ 255, 255, 0 ]
|
||||
},
|
||||
"perceptual": {
|
||||
"white": [ 255, 255, 255 ],
|
||||
"black": [ 0, 0, 0 ],
|
||||
"red": [ 255, 0, 0 ],
|
||||
"yellow": [ 200, 200, 0 ]
|
||||
},
|
||||
"shortlut": 0,
|
||||
"zlib_compression": "27",
|
||||
"options": [ "led" ],
|
||||
"contentids": [ 22, 23, 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 14, 16, 17, 18, 19, 20, 21, 27 ],
|
||||
"usetemplate": 49
|
||||
}
|
||||
25
resources/tagtypes/4C.json
Normal file
25
resources/tagtypes/4C.json
Normal file
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"version": 1,
|
||||
"name": "M3 7.5\" BWRY",
|
||||
"width": 800,
|
||||
"height": 480,
|
||||
"rotatebuffer": 0,
|
||||
"bpp": 2,
|
||||
"colortable": {
|
||||
"white": [ 255, 255, 255 ],
|
||||
"black": [ 0, 0, 0 ],
|
||||
"red": [ 255, 0, 0 ],
|
||||
"yellow": [ 255, 255, 0 ]
|
||||
},
|
||||
"perceptual": {
|
||||
"white": [ 255, 255, 255 ],
|
||||
"black": [ 0, 0, 0 ],
|
||||
"red": [ 255, 0, 0 ],
|
||||
"yellow": [ 200, 200, 0 ]
|
||||
},
|
||||
"shortlut": 0,
|
||||
"zlib_compression": "27",
|
||||
"options": [ "led" ],
|
||||
"contentids": [ 22, 23, 1, 4, 5, 7, 8, 9, 10, 11, 17, 18, 19, 20 ],
|
||||
"usetemplate": 54
|
||||
}
|
||||
25
resources/tagtypes/4D.json
Normal file
25
resources/tagtypes/4D.json
Normal file
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"version": 3,
|
||||
"name": "M3 11.6\" BWRY",
|
||||
"width": 960,
|
||||
"height": 640,
|
||||
"rotatebuffer": 0,
|
||||
"bpp": 2,
|
||||
"colortable": {
|
||||
"white": [ 255, 255, 255 ],
|
||||
"black": [ 0, 0, 0 ],
|
||||
"red": [ 255, 0, 0 ],
|
||||
"yellow": [ 255, 255, 0 ]
|
||||
},
|
||||
"perceptual": {
|
||||
"white": [ 255, 255, 255 ],
|
||||
"black": [ 0, 0, 0 ],
|
||||
"red": [ 255, 0, 0 ],
|
||||
"yellow": [ 200, 200, 0 ]
|
||||
},
|
||||
"shortlut": 0,
|
||||
"zlib_compression": "27",
|
||||
"options": [ "led" ],
|
||||
"contentids": [ 22, 23, 1, 4, 5, 7, 8, 9, 10, 11, 17, 18, 19, 20 ],
|
||||
"usetemplate": 55
|
||||
}
|
||||
18
resources/tagtypes/4E.json
Normal file
18
resources/tagtypes/4E.json
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"version": 2,
|
||||
"name": "M3 2.6\" BW",
|
||||
"width": 360,
|
||||
"height": 184,
|
||||
"rotatebuffer": 3,
|
||||
"bpp": 1,
|
||||
"colortable": {
|
||||
"white": [ 255, 255, 255 ],
|
||||
"black": [ 0, 0, 0 ]
|
||||
},
|
||||
"highlight_color": 5,
|
||||
"shortlut": 0,
|
||||
"zlib_compression": "27",
|
||||
"options": [ "button", "led" ],
|
||||
"contentids": [ 22, 23, 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 16, 17, 18, 19, 20, 26, 27 ],
|
||||
"usetemplate": 1
|
||||
}
|
||||
25
resources/tagtypes/4F.json
Executable file
25
resources/tagtypes/4F.json
Executable file
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"version": 1,
|
||||
"name": "M3 2.6\" BWRY",
|
||||
"width": 360,
|
||||
"height": 184,
|
||||
"rotatebuffer": 3,
|
||||
"bpp": 2,
|
||||
"colortable": {
|
||||
"white": [ 255, 255, 255 ],
|
||||
"black": [ 0, 0, 0 ],
|
||||
"red": [ 255, 0, 0 ],
|
||||
"yellow": [ 255, 255, 0 ]
|
||||
},
|
||||
"perceptual": {
|
||||
"white": [ 255, 255, 255 ],
|
||||
"black": [ 0, 0, 0 ],
|
||||
"red": [ 255, 0, 0 ],
|
||||
"yellow": [ 200, 200, 0 ]
|
||||
},
|
||||
"shortlut": 0,
|
||||
"zlib_compression": "27",
|
||||
"options": [ "button", "led" ],
|
||||
"contentids": [ 22, 23, 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 16, 17, 18, 19, 20, 26, 27 ],
|
||||
"usetemplate": 1
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"version": 2,
|
||||
"version": 4,
|
||||
"name": "HD150 5.83\" BWR",
|
||||
"width": 648,
|
||||
"height": 480,
|
||||
@@ -21,21 +21,44 @@
|
||||
"month": [ 300, 310, "Signika-SB.ttf", 110 ],
|
||||
"day": [ 300, 75, "Signika-SB.ttf", 250 ]
|
||||
},
|
||||
"10": {
|
||||
"title": [ 300, 10, "fonts/bahnschrift30" ],
|
||||
"pos": [ 300, 50 ]
|
||||
"4": {
|
||||
"location": [ 41, 25, "fonts/calibrib80" ],
|
||||
"wind": [ 177, 225, "fonts/calibrib30" ],
|
||||
"temp": [ 46, 300, "fonts/calibrib100" ],
|
||||
"icon": [ 527, 100, 150, 2 ],
|
||||
"dir": [ 122, 75, 180 ],
|
||||
"umbrella": [ 582, 313, 102 ]
|
||||
},
|
||||
"8": {
|
||||
"location": [ 10, 0, "fonts/calibrib80" ],
|
||||
"column": [ 7, 92 ],
|
||||
"day": [ 43, 138, "fonts/calibrib30", 188, 356 ],
|
||||
"rain": [ 49, 425 ],
|
||||
"icon": [ 46, 225, 60 ],
|
||||
"wind": [ 17, 150 ],
|
||||
"line": [ 96, 463 ]
|
||||
},
|
||||
"9": {
|
||||
"title": [ 6, 0, "Signika-SB.ttf", 32 ],
|
||||
"items": 6,
|
||||
"line": [ 9, 40, "calibrib16.vlw" ],
|
||||
"desc": [ 2, 8, "REFSAN12.vlw", 1.2 ]
|
||||
"line": [ 9, 50, "calibrib16.vlw" ],
|
||||
"desc": [ 2, 10, "REFSAN12.vlw", 1.2 ]
|
||||
},
|
||||
"10": {
|
||||
"title": [ 324, 13, "fonts/bahnschrift20" ],
|
||||
"pos": [ 324, 50 ]
|
||||
},
|
||||
"11": {
|
||||
"rotate": 0,
|
||||
"mode": 1,
|
||||
"days": 7,
|
||||
"gridparam": [ 7, 17, 30, "calibrib16.vlw", "tahoma9.vlw", 14 ]
|
||||
"gridparam": [ 3, 21, 38, "calibrib16.vlw", "tahoma9.vlw", 14 ]
|
||||
},
|
||||
"27": {
|
||||
"bars": [ 18, 620, 413, 20, 22 ],
|
||||
"time": [ "calibrib16.vlw" ],
|
||||
"yaxis": [ "calibrib16.vlw", 1, 12 ],
|
||||
"head": [ "calibrib30.vlw" ]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
18
resources/tagtypes/70.json
Normal file
18
resources/tagtypes/70.json
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"version": 1,
|
||||
"name": "HS 2.9\" HighRes",
|
||||
"width": 384,
|
||||
"height": 168,
|
||||
"rotatebuffer": 1,
|
||||
"bpp": 2,
|
||||
"colortable": {
|
||||
"white": [ 255, 255, 255 ],
|
||||
"black": [ 0, 0, 0 ],
|
||||
"red": [ 255, 0, 0 ]
|
||||
},
|
||||
"shortlut": 0,
|
||||
"zlib_compression": "27",
|
||||
"options": [ "button", "led" ],
|
||||
"contentids": [ 22, 23, 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 16, 17, 18, 19, 20, 26, 27 ],
|
||||
"usetemplate": 51
|
||||
}
|
||||
18
resources/tagtypes/71.json
Normal file
18
resources/tagtypes/71.json
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"version": 1,
|
||||
"name": "HS 2.13\" BWR High Res",
|
||||
"width": 296,
|
||||
"height": 144,
|
||||
"rotatebuffer": 1,
|
||||
"bpp": 2,
|
||||
"colortable": {
|
||||
"white": [ 255, 255, 255 ],
|
||||
"black": [ 0, 0, 0 ],
|
||||
"red": [ 255, 0, 0 ]
|
||||
},
|
||||
"zlib_compression": "27",
|
||||
"shortlut": 2,
|
||||
"options": [ "button" ],
|
||||
"contentids": [ 22, 23, 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 16, 17, 18, 19, 20, 21, 27 ],
|
||||
"usetemplate": 1
|
||||
}
|
||||
25
resources/tagtypes/90.json
Normal file
25
resources/tagtypes/90.json
Normal file
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"version": 3,
|
||||
"name": "M3 4.2\" BWRY",
|
||||
"width": 400,
|
||||
"height": 300,
|
||||
"rotatebuffer": 0,
|
||||
"bpp": 2,
|
||||
"colortable": {
|
||||
"white": [ 255, 255, 255 ],
|
||||
"black": [ 0, 0, 0 ],
|
||||
"red": [ 255, 0, 0 ],
|
||||
"yellow": [ 255, 255, 0 ]
|
||||
},
|
||||
"perceptual": {
|
||||
"white": [ 255, 255, 255 ],
|
||||
"black": [ 0, 0, 0 ],
|
||||
"red": [ 255, 0, 0 ],
|
||||
"yellow": [ 200, 200, 0 ]
|
||||
},
|
||||
"shortlut": 0,
|
||||
"zlib_compression": "27",
|
||||
"options": [ "button", "led" ],
|
||||
"contentids": [ 22, 23, 1, 4, 5, 7, 8, 9, 10, 11, 17, 18, 19, 20, 27 ],
|
||||
"usetemplate": 2
|
||||
}
|
||||
24
resources/tagtypes/91.json
Executable file
24
resources/tagtypes/91.json
Executable file
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"version": 1,
|
||||
"name": "M3 1.6\" 200px BWRY",
|
||||
"width": 200,
|
||||
"height": 200,
|
||||
"rotatebuffer": 3,
|
||||
"bpp": 2,
|
||||
"colortable": {
|
||||
"white": [ 255, 255, 255 ],
|
||||
"black": [ 0, 0, 0 ],
|
||||
"red": [ 255, 0, 0 ],
|
||||
"yellow": [ 255, 255, 0 ]
|
||||
},
|
||||
"perceptual": {
|
||||
"white": [ 255, 255, 255 ],
|
||||
"black": [ 0, 0, 0 ],
|
||||
"red": [ 255, 0, 0 ],
|
||||
"yellow": [ 200, 200, 0 ]
|
||||
},
|
||||
"shortlut": 0,
|
||||
"options": [ "button", "led" ],
|
||||
"contentids": [ 22, 23, 1, 2, 3, 4, 5, 7, 10, 14, 17, 18, 19, 20, 21 ],
|
||||
"usetemplate": 48
|
||||
}
|
||||
Reference in New Issue
Block a user