mirror of
https://github.com/OpenEPaperLink/OpenEPaperLink.git
synced 2026-03-21 09:04:24 +01:00
Compare commits
22 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
eb0064363f | ||
|
|
c1324c5089 | ||
|
|
df3c615eef | ||
|
|
d5e19d20fa | ||
|
|
e62a1b07bf | ||
|
|
4d06ef546d | ||
|
|
7096f7e756 | ||
|
|
1abedff388 | ||
|
|
8d2546a2aa | ||
|
|
c5a8058d62 | ||
|
|
ef59b87ae0 | ||
|
|
d526c43fd8 | ||
|
|
86abc112dd | ||
|
|
af50f96671 | ||
|
|
46c8b73fa0 | ||
|
|
c65c8b749e | ||
|
|
f61c2e3d04 | ||
|
|
0dc406b865 | ||
|
|
25b185da28 | ||
|
|
496d4d382f | ||
|
|
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/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
|
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
|
- name: Build firmware for OpenEPaperLink_Nano_TLSR
|
||||||
run: |
|
run: |
|
||||||
cd ESP32_AP-Flasher
|
cd ESP32_AP-Flasher
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ class nrfswd : protected swd {
|
|||||||
|
|
||||||
uint8_t nrf_read_bank(uint32_t address, uint32_t buffer[], int size);
|
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_write_bank(uint32_t address, uint32_t buffer[], int size);
|
||||||
|
uint8_t nrf_erase_all();
|
||||||
uint8_t erase_all_flash();
|
uint8_t erase_all_flash();
|
||||||
uint8_t erase_uicr();
|
uint8_t erase_uicr();
|
||||||
uint8_t erase_page(uint32_t page);
|
uint8_t erase_page(uint32_t page);
|
||||||
|
|||||||
@@ -287,6 +287,95 @@ board_upload.maximum_ram_size = 327680
|
|||||||
board_upload.flash_size = 16MB
|
board_upload.flash_size = 16MB
|
||||||
; ----------------------------------------------------------------------------------------
|
; ----------------------------------------------------------------------------------------
|
||||||
; !!! this configuration expects an ESP32-S3 16MB Flash 8MB RAM
|
; !!! 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]
|
[env:ESP32_S3_C6_BIG_AP]
|
||||||
board = esp32-s3-devkitc-1
|
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
|
uint16_t manu_id; // 0x1337 for us
|
||||||
uint8_t version;
|
uint8_t version;
|
||||||
uint16_t hw_type;
|
uint16_t hw_type;
|
||||||
@@ -73,6 +73,16 @@ struct BleAdvDataStruct {
|
|||||||
uint16_t battery_mv;
|
uint16_t battery_mv;
|
||||||
uint8_t counter;
|
uint8_t counter;
|
||||||
} __packed;
|
} __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) {
|
bool BLE_filter_add_device(BLEAdvertisedDevice advertisedDevice) {
|
||||||
Serial.print("BLE Advertised Device found: ");
|
Serial.print("BLE Advertised Device found: ");
|
||||||
@@ -91,16 +101,16 @@ bool BLE_filter_add_device(BLEAdvertisedDevice advertisedDevice) {
|
|||||||
uint8_t manuData[100];
|
uint8_t manuData[100];
|
||||||
if (manuDatalen > sizeof(manuData))
|
if (manuDatalen > sizeof(manuData))
|
||||||
return false; // Manu data too big, could never happen but better make sure here
|
return false; // Manu data too big, could never happen but better make sure here
|
||||||
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
|
#if ESP_ARDUINO_VERSION_MAJOR == 2
|
||||||
memcpy(&manuData, (uint8_t*)advertisedDevice.getManufacturerData().data(), manuDatalen);
|
memcpy(&manuData, (uint8_t*)advertisedDevice.getManufacturerData().data(), manuDatalen);
|
||||||
#else
|
#else
|
||||||
// [Nic] suggested fix for arduino 3.x by copilot, but I cannot test it
|
// [Nic] suggested fix for arduino 3.x by copilot, but I cannot test it
|
||||||
memcpy(&manuData, (uint8_t*)advertisedDevice.getManufacturerData().c_str(), manuDatalen);
|
memcpy(&manuData, (uint8_t*)advertisedDevice.getManufacturerData().c_str(), manuDatalen);
|
||||||
#endif
|
#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 (manuDatalen == 7 && manuData[0] == 0x53 && manuData[1] == 0x50) { // Lets check for a Gicisky E-Paper display
|
if (manuDatalen == 7 && manuData[0] == 0x53 && manuData[1] == 0x50) { // Lets check for a Gicisky E-Paper display
|
||||||
|
|
||||||
struct espAvailDataReq theAdvData;
|
struct espAvailDataReq theAdvData;
|
||||||
@@ -125,24 +135,64 @@ bool BLE_filter_add_device(BLEAdvertisedDevice advertisedDevice) {
|
|||||||
|
|
||||||
processDataReq(&theAdvData, true);
|
processDataReq(&theAdvData, true);
|
||||||
return 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");
|
Serial.printf("ATC BLE OEPL Detected\r\n");
|
||||||
struct espAvailDataReq theAdvData;
|
struct espAvailDataReq theAdvData;
|
||||||
struct BleAdvDataStruct inAdvData;
|
|
||||||
|
|
||||||
memset((uint8_t*)&theAdvData, 0x00, sizeof(espAvailDataReq));
|
memset((uint8_t*)&theAdvData, 0x00, sizeof(espAvailDataReq));
|
||||||
memcpy(&inAdvData, manuData, sizeof(BleAdvDataStruct));
|
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("manu_id %04X\r\n", inAdvData.manu_id);
|
||||||
Serial.printf("version %04X\r\n", inAdvData.version);
|
Serial.printf("version %02X\r\n", inAdvData.version);
|
||||||
Serial.printf("hw_type %04X\r\n", inAdvData.hw_type);
|
Serial.printf("hw_type %04X\r\n", inAdvData.hw_type);
|
||||||
Serial.printf("fw_version %04X\r\n", inAdvData.fw_version);
|
Serial.printf("fw_version %04X\r\n", inAdvData.fw_version);
|
||||||
Serial.printf("capabilities %04X\r\n", inAdvData.capabilities);
|
Serial.printf("capabilities %04X\r\n", inAdvData.capabilities);
|
||||||
Serial.printf("battery_mv %u\r\n", inAdvData.battery_mv);
|
Serial.printf("battery_mv %u\r\n", inAdvData.battery_mv);
|
||||||
Serial.printf("counter %u\r\n", inAdvData.counter);*/
|
Serial.printf("counter %u\r\n", inAdvData.counter);*/
|
||||||
if (inAdvData.version != 1) {
|
theAdvData.adr.batteryMv = inAdvData.battery_mv;
|
||||||
printf("Version currently not supported!\r\n");
|
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;
|
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];
|
uint8_t macReversed[6];
|
||||||
memcpy(&macReversed, (uint8_t*)advertisedDevice.getAddress().getNative(), 6);
|
memcpy(&macReversed, (uint8_t*)advertisedDevice.getAddress().getNative(), 6);
|
||||||
theAdvData.src[0] = macReversed[5];
|
theAdvData.src[0] = macReversed[5];
|
||||||
@@ -153,11 +203,6 @@ bool BLE_filter_add_device(BLEAdvertisedDevice advertisedDevice) {
|
|||||||
theAdvData.src[5] = macReversed[0];
|
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[6] = manuData[0]; // We use this do find out what type of display we got for compression^^
|
||||||
theAdvData.src[7] = manuData[1];
|
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);
|
processDataReq(&theAdvData, true);
|
||||||
return 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) {
|
void prepareTIME_RAW(const uint8_t *dst, time_t now) {
|
||||||
uint8_t *data;
|
uint8_t *data;
|
||||||
size_t len = 1 + 4 + 4;
|
size_t len = 1 + 4 + 4 + 1;
|
||||||
struct tm timeinfo;
|
struct tm timeinfo;
|
||||||
localtime_r(&now, &timeinfo);
|
localtime_r(&now, &timeinfo);
|
||||||
uint32_t local_time = convert_tm_to_seconds(&timeinfo) + 20;// Adding 20 seconds for the average of upload time
|
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[7] = ((uint8_t*)&unix_time)[1];
|
||||||
data[8] = ((uint8_t*)&unix_time)[2];
|
data[8] = ((uint8_t*)&unix_time)[2];
|
||||||
data[9] = ((uint8_t*)&unix_time)[3];
|
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);
|
prepareDataAvail(data, len + 1, DATATYPE_TIME_RAW_DATA, dst);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -461,7 +461,7 @@ void spr2buffer(TFT_eSprite &spr, String &fileout, imgParam &imageParams) {
|
|||||||
case 1:
|
case 1:
|
||||||
case 2: {
|
case 2: {
|
||||||
long bufw = spr.width(), bufh = spr.height();
|
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
|
#ifdef BOARD_HAS_PSRAM
|
||||||
uint8_t *buffer = (uint8_t *)ps_malloc(buffer_size);
|
uint8_t *buffer = (uint8_t *)ps_malloc(buffer_size);
|
||||||
#else
|
#else
|
||||||
@@ -585,7 +585,7 @@ void spr2buffer(TFT_eSprite &spr, String &fileout, imgParam &imageParams) {
|
|||||||
case 3:
|
case 3:
|
||||||
case 4: {
|
case 4: {
|
||||||
long bufw = spr.width(), bufh = spr.height();
|
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);
|
uint8_t *buffer = (uint8_t *)ps_malloc(buffer_size);
|
||||||
if (!buffer) {
|
if (!buffer) {
|
||||||
Serial.println("Failed to allocate 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);
|
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);
|
// 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() {
|
uint8_t nrfswd::erase_all_flash() {
|
||||||
write_register(0x4001e504, 2);
|
write_register(0x4001e504, 2);
|
||||||
long timeout = millis();
|
long timeout = millis();
|
||||||
|
|||||||
@@ -306,6 +306,7 @@ typedef enum {
|
|||||||
|
|
||||||
CMD_ERASE_FLASH = 26,
|
CMD_ERASE_FLASH = 26,
|
||||||
CMD_ERASE_INFOPAGE = 27,
|
CMD_ERASE_INFOPAGE = 27,
|
||||||
|
CMD_ERASE_ALL = 28,
|
||||||
CMD_SAVE_MAC_FROM_FW = 40,
|
CMD_SAVE_MAC_FROM_FW = 40,
|
||||||
CMD_PASS_THROUGH = 50,
|
CMD_PASS_THROUGH = 50,
|
||||||
|
|
||||||
@@ -420,6 +421,16 @@ void processFlasherCommand(struct flasherCommand* cmd, uint8_t transportType) {
|
|||||||
}
|
}
|
||||||
sendFlasherAnswer(CMD_ERASE_INFOPAGE, NULL, 0, transportType);
|
sendFlasherAnswer(CMD_ERASE_INFOPAGE, NULL, 0, transportType);
|
||||||
break;
|
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:
|
case CMD_SELECT_PORT:
|
||||||
wsSerial("> select port");
|
wsSerial("> select port");
|
||||||
selectedFlasherPort = cmd->data[0];
|
selectedFlasherPort = cmd->data[0];
|
||||||
@@ -453,7 +464,7 @@ void processFlasherCommand(struct flasherCommand* cmd, uint8_t transportType) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
nrfflasherp->init();
|
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);
|
sendFlasherAnswer(CMD_SELECT_NRF82511, temp_buff, 1, transportType);
|
||||||
currentFlasherOffset = 0;
|
currentFlasherOffset = 0;
|
||||||
selectedController = CONTROLLER_NRF82511;
|
selectedController = CONTROLLER_NRF82511;
|
||||||
|
|||||||
@@ -5,6 +5,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.
|
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
|
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
|
## Aims
|
||||||
- Low power (currently around 9µA with a minimum of 40 second latency)
|
- Low power (currently around 9µA with a minimum of 40 second latency)
|
||||||
- Even lower power when there's no AP around
|
- Even lower power when there's no AP around
|
||||||
|
|||||||
@@ -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)
|
See this [page](https://github.com/OpenEPaperLink/OpenEPaperLink/wiki/Chroma-Series-SubGhz-Tags#flashing-cc1110-based-chroma-tags)
|
||||||
on the Wiki for additional information.
|
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
|
## Credits
|
||||||
|
|
||||||
Much code was reused from ATC1441's various flashers
|
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",
|
"name": "M3 4.2\" BWY",
|
||||||
"width": 400,
|
"width": 400,
|
||||||
"height": 300,
|
"height": 300,
|
||||||
@@ -15,6 +15,7 @@
|
|||||||
"black": [ 0, 0, 0 ],
|
"black": [ 0, 0, 0 ],
|
||||||
"yellow": [ 200, 200, 0 ]
|
"yellow": [ 200, 200, 0 ]
|
||||||
},
|
},
|
||||||
|
"highlight_color": 3,
|
||||||
"shortlut": 0,
|
"shortlut": 0,
|
||||||
"zlib_compression": "27",
|
"zlib_compression": "27",
|
||||||
"options": [ "button", "led" ],
|
"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",
|
"name": "HD150 5.83\" BWR",
|
||||||
"width": 648,
|
"width": 648,
|
||||||
"height": 480,
|
"height": 480,
|
||||||
@@ -21,21 +21,44 @@
|
|||||||
"month": [ 300, 310, "Signika-SB.ttf", 110 ],
|
"month": [ 300, 310, "Signika-SB.ttf", 110 ],
|
||||||
"day": [ 300, 75, "Signika-SB.ttf", 250 ]
|
"day": [ 300, 75, "Signika-SB.ttf", 250 ]
|
||||||
},
|
},
|
||||||
"10": {
|
"4": {
|
||||||
"title": [ 300, 10, "fonts/bahnschrift30" ],
|
"location": [ 41, 25, "fonts/calibrib80" ],
|
||||||
"pos": [ 300, 50 ]
|
"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": {
|
"9": {
|
||||||
"title": [ 6, 0, "Signika-SB.ttf", 32 ],
|
"title": [ 6, 0, "Signika-SB.ttf", 32 ],
|
||||||
"items": 6,
|
"items": 6,
|
||||||
"line": [ 9, 40, "calibrib16.vlw" ],
|
"line": [ 9, 50, "calibrib16.vlw" ],
|
||||||
"desc": [ 2, 8, "REFSAN12.vlw", 1.2 ]
|
"desc": [ 2, 10, "REFSAN12.vlw", 1.2 ]
|
||||||
|
},
|
||||||
|
"10": {
|
||||||
|
"title": [ 324, 13, "fonts/bahnschrift20" ],
|
||||||
|
"pos": [ 324, 50 ]
|
||||||
},
|
},
|
||||||
"11": {
|
"11": {
|
||||||
"rotate": 0,
|
"rotate": 0,
|
||||||
"mode": 1,
|
"mode": 1,
|
||||||
"days": 7,
|
"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