forked from btclock/btclock_v3
Compare commits
9 commits
5b0437a2e9
...
087dff98a0
Author | SHA1 | Date | |
---|---|---|---|
087dff98a0 | |||
8b55be1551 | |||
3fe17bc64a | |||
2b90376710 | |||
e15703652a | |||
|
1a4bc9b711 | ||
|
0dcde59fb4 | ||
|
de8fe2e26e | ||
|
af4c466659 |
26 changed files with 1024 additions and 82 deletions
|
@ -1,4 +1,4 @@
|
||||||
name: 'BTClock CI'
|
name: "BTClock CI"
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
|
@ -22,7 +22,7 @@ jobs:
|
||||||
with:
|
with:
|
||||||
node-version: lts/*
|
node-version: lts/*
|
||||||
cache: yarn
|
cache: yarn
|
||||||
cache-dependency-path: '**/yarn.lock'
|
cache-dependency-path: "**/yarn.lock"
|
||||||
- uses: actions/cache@v4
|
- uses: actions/cache@v4
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
|
@ -34,8 +34,8 @@ jobs:
|
||||||
key: ${{ runner.os }}-pio
|
key: ${{ runner.os }}-pio
|
||||||
- uses: actions/setup-python@v5
|
- uses: actions/setup-python@v5
|
||||||
with:
|
with:
|
||||||
python-version: '3.9'
|
python-version: "3.9"
|
||||||
cache: 'pip'
|
cache: "pip"
|
||||||
- name: Get current date
|
- name: Get current date
|
||||||
id: dateAndTime
|
id: dateAndTime
|
||||||
shell: bash
|
shell: bash
|
||||||
|
@ -81,9 +81,9 @@ jobs:
|
||||||
version: esp32s3
|
version: esp32s3
|
||||||
epd_variant: [213epd, 29epd]
|
epd_variant: [213epd, 29epd]
|
||||||
exclude:
|
exclude:
|
||||||
- chip: {name: btclock_rev_b, version: esp32s3}
|
- chip: { name: btclock_rev_b, version: esp32s3 }
|
||||||
epd_variant: 29epd
|
epd_variant: 29epd
|
||||||
- chip: {name: btclock_v8, version: esp32s3}
|
- chip: { name: btclock_v8, version: esp32s3 }
|
||||||
epd_variant: 29epd
|
epd_variant: 29epd
|
||||||
steps:
|
steps:
|
||||||
- uses: https://code.forgejo.org/forgejo/download-artifact@v4
|
- uses: https://code.forgejo.org/forgejo/download-artifact@v4
|
||||||
|
@ -93,9 +93,10 @@ jobs:
|
||||||
- name: Install esptools.py
|
- name: Install esptools.py
|
||||||
run: pip install --upgrade esptool
|
run: pip install --upgrade esptool
|
||||||
- name: Create merged firmware binary
|
- name: Create merged firmware binary
|
||||||
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
|
mkdir -p ${{ matrix.chip.name }}_${{ matrix.epd_variant }}
|
||||||
if [ "${{ matrix.chip.name }}" == "btclock_v8" ]; then
|
if [ "${{ matrix.chip.name }}" == "btclock_v8" ]; then
|
||||||
mkdir -p ${{ matrix.chip.name }}_${{ matrix.epd_variant }} && \
|
|
||||||
esptool.py --chip ${{ matrix.chip.version }} merge_bin \
|
esptool.py --chip ${{ matrix.chip.version }} merge_bin \
|
||||||
-o ${{ matrix.chip.name }}_${{ matrix.epd_variant }}/${{ matrix.chip.name }}_${{ matrix.epd_variant }}.bin \
|
-o ${{ matrix.chip.name }}_${{ matrix.epd_variant }}/${{ matrix.chip.name }}_${{ matrix.epd_variant }}.bin \
|
||||||
--flash_mode dio \
|
--flash_mode dio \
|
||||||
|
@ -105,10 +106,19 @@ jobs:
|
||||||
0x8000 .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/partitions.bin \
|
0x8000 .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/partitions.bin \
|
||||||
0xe000 .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/ota_data_initial.bin \
|
0xe000 .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/ota_data_initial.bin \
|
||||||
0x10000 .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/firmware.bin \
|
0x10000 .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/firmware.bin \
|
||||||
0x810000 .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/littlefs.bin;
|
0xDF0000 .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/littlefs_16MB.bin
|
||||||
|
elif [ "${{ matrix.chip.name }}" == "btclock_rev_b" ]; then
|
||||||
|
esptool.py --chip ${{ matrix.chip.version }} merge_bin \
|
||||||
|
-o ${{ matrix.chip.name }}_${{ matrix.epd_variant }}/${{ matrix.chip.name }}_${{ matrix.epd_variant }}.bin \
|
||||||
|
--flash_mode dio \
|
||||||
|
--flash_freq 80m \
|
||||||
|
--flash_size 8MB \
|
||||||
|
0x0000 .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/bootloader.bin \
|
||||||
|
0x8000 .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/partitions.bin \
|
||||||
|
0xe000 .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/ota_data_initial.bin \
|
||||||
|
0x10000 .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/firmware.bin \
|
||||||
|
0x6F0000 .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/littlefs_8MB.bin;
|
||||||
else
|
else
|
||||||
# Original command for other cases
|
|
||||||
mkdir -p ${{ matrix.chip.name }}_${{ matrix.epd_variant }} && \
|
|
||||||
esptool.py --chip ${{ matrix.chip.version }} merge_bin \
|
esptool.py --chip ${{ matrix.chip.version }} merge_bin \
|
||||||
-o ${{ matrix.chip.name }}_${{ matrix.epd_variant }}/${{ matrix.chip.name }}_${{ matrix.epd_variant }}.bin \
|
-o ${{ matrix.chip.name }}_${{ matrix.epd_variant }}/${{ matrix.chip.name }}_${{ matrix.epd_variant }}.bin \
|
||||||
--flash_mode dio \
|
--flash_mode dio \
|
||||||
|
@ -116,19 +126,23 @@ jobs:
|
||||||
0x8000 .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/partitions.bin \
|
0x8000 .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/partitions.bin \
|
||||||
0xe000 .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/ota_data_initial.bin \
|
0xe000 .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/ota_data_initial.bin \
|
||||||
0x10000 .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/firmware.bin \
|
0x10000 .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/firmware.bin \
|
||||||
0x370000 .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/littlefs.bin
|
0x380000 .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/littlefs_4MB.bin
|
||||||
# Adjust the offset for littlefs or other files as needed for the original case
|
# Adjust the offset for littlefs or other files as needed for the original case
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Create checksum for firmware
|
- name: Create checksum for firmware
|
||||||
|
shell: bash
|
||||||
run: shasum -a 256 .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/firmware.bin | awk '{print $1}' > ${{ matrix.chip.name }}_${{ matrix.epd_variant }}/${{ matrix.chip.name }}_${{ matrix.epd_variant }}_firmware.bin.sha256
|
run: shasum -a 256 .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/firmware.bin | awk '{print $1}' > ${{ matrix.chip.name }}_${{ matrix.epd_variant }}/${{ matrix.chip.name }}_${{ matrix.epd_variant }}_firmware.bin.sha256
|
||||||
|
|
||||||
- name: Create checksum for merged binary
|
- name: Create checksum for merged binary
|
||||||
|
shell: bash
|
||||||
run: shasum -a 256 ${{ matrix.chip.name }}_${{ matrix.epd_variant }}/${{ matrix.chip.name }}_${{ matrix.epd_variant }}.bin | awk '{print $1}' > ${{ matrix.chip.name }}_${{ matrix.epd_variant }}/${{ matrix.chip.name }}_${{ matrix.epd_variant }}.bin.sha256
|
run: shasum -a 256 ${{ matrix.chip.name }}_${{ matrix.epd_variant }}/${{ matrix.chip.name }}_${{ matrix.epd_variant }}.bin | awk '{print $1}' > ${{ matrix.chip.name }}_${{ matrix.epd_variant }}/${{ matrix.chip.name }}_${{ matrix.epd_variant }}.bin.sha256
|
||||||
|
|
||||||
- name: Create checksum for littlefs partition
|
- name: Create checksum for littlefs partition
|
||||||
run: shasum -a 256 .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/littlefs.bin | awk '{print $1}' > ${{ matrix.chip.name }}_${{ matrix.epd_variant }}/littlefs.bin.sha256
|
shell: bash
|
||||||
|
run: |
|
||||||
|
fs_file=$(find .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }} -name "littlefs*.bin")
|
||||||
|
shasum -a 256 "$fs_file" | awk '{print $1}' > "${fs_file}.sha256"
|
||||||
- name: Copy all artifacts to output folder
|
- name: Copy all artifacts to output folder
|
||||||
run: cp .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/*.bin .pio/boot_app0.bin ${{ matrix.chip.name }}_${{ matrix.epd_variant }}
|
run: cp .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/*.bin .pio/boot_app0.bin ${{ matrix.chip.name }}_${{ matrix.epd_variant }}
|
||||||
|
|
||||||
|
@ -161,11 +175,11 @@ jobs:
|
||||||
- name: Create release
|
- name: Create release
|
||||||
uses: https://code.forgejo.org/actions/forgejo-release@v2.4.0
|
uses: https://code.forgejo.org/actions/forgejo-release@v2.4.0
|
||||||
with:
|
with:
|
||||||
url: 'https://git.btclock.dev'
|
url: "https://git.btclock.dev"
|
||||||
repo: '${{ github.repository }}'
|
repo: "${{ github.repository }}"
|
||||||
direction: upload
|
direction: upload
|
||||||
tag: '${{ github.ref_name }}'
|
tag: "${{ github.ref_name }}"
|
||||||
sha: '${{ github.sha }}'
|
sha: "${{ github.sha }}"
|
||||||
release-dir: release
|
release-dir: release
|
||||||
token: ${{ secrets.TOKEN }}
|
token: ${{ secrets.TOKEN }}
|
||||||
override: ${{ github.ref_type != 'tag' && github.ref_name != 'main' }}
|
override: ${{ github.ref_type != 'tag' && github.ref_name != 'main' }}
|
||||||
|
|
2
.gitmodules
vendored
2
.gitmodules
vendored
|
@ -1,3 +1,3 @@
|
||||||
[submodule "data"]
|
[submodule "data"]
|
||||||
path = data
|
path = data
|
||||||
url = https://git.btclock.dev/btclock/webui.git
|
url = https://git.btclock.dev/kdmukai/webui.git
|
||||||
|
|
25
README.md
25
README.md
|
@ -17,7 +17,7 @@ Biggest differences with v2 are:
|
||||||
New features:
|
New features:
|
||||||
- BitAxe integration
|
- BitAxe integration
|
||||||
- Zap notifier
|
- Zap notifier
|
||||||
-
|
- Braiins Pool and Ocean mining stats integration
|
||||||
|
|
||||||
"Steal focus on new block" means that when a new block is mined, the display will switch to the block height screen if it's not on it already.
|
"Steal focus on new block" means that when a new block is mined, the display will switch to the block height screen if it's not on it already.
|
||||||
|
|
||||||
|
@ -28,3 +28,26 @@ Most [information](https://github.com/btclock/btclock_v2/wiki) about BTClock v2
|
||||||
## Building
|
## Building
|
||||||
|
|
||||||
Use PlatformIO to build it yourself. Make sure you fetch the [WebUI](https://github.com/btclock/webui) submodule.
|
Use PlatformIO to build it yourself. Make sure you fetch the [WebUI](https://github.com/btclock/webui) submodule.
|
||||||
|
|
||||||
|
|
||||||
|
## Braiins Pool and Ocean integration
|
||||||
|
Enable mining pool stats by accessing your btclock's web UI (point a web browser at the device's IP address).
|
||||||
|
|
||||||
|
Under Settings -> Extra Features: toggle Enable Mining Pool Stats.
|
||||||
|
|
||||||
|
New options will appear. Select your mining pool and enter your pool username (Ocean) or api key (Braiins).
|
||||||
|
|
||||||
|
|
||||||
|
### Braiins Pool integration
|
||||||
|
Create an API key based on the steps [here](https://academy.braiins.com/en/braiins-pool/monitoring/#api-configuration).
|
||||||
|
|
||||||
|
The key's permissions should be:
|
||||||
|
* Web Access: no
|
||||||
|
* API Access: yes
|
||||||
|
* Access Permissions: Read-only
|
||||||
|
|
||||||
|
Copy the token that is created for the new key. Enter this as your "Mining Pool username or api key" in the btclock web UI.
|
||||||
|
|
||||||
|
|
||||||
|
### Ocean integration
|
||||||
|
Your "Mining Pool username" is just the onchain withdrawal address that you specify when pointing your miners at Ocean.
|
||||||
|
|
132
lib/btclock/mining_pool_stats_handler.cpp
Normal file
132
lib/btclock/mining_pool_stats_handler.cpp
Normal file
|
@ -0,0 +1,132 @@
|
||||||
|
#include "mining_pool_stats_handler.hpp"
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
std::array<std::string, NUM_SCREENS> parseMiningPoolStatsHashRate(std::string miningPoolName, std::string text)
|
||||||
|
{
|
||||||
|
std::array<std::string, NUM_SCREENS> ret;
|
||||||
|
ret.fill(""); // Initialize all elements to empty strings
|
||||||
|
std::string hashrate;
|
||||||
|
std::string label;
|
||||||
|
|
||||||
|
if (text.length() > 21) {
|
||||||
|
// We are massively future-proof!!
|
||||||
|
label = "ZH/S";
|
||||||
|
hashrate = text.substr(0, text.length() - 21);
|
||||||
|
} else if (text.length() > 18) {
|
||||||
|
label = "EH/S";
|
||||||
|
hashrate = text.substr(0, text.length() - 18);
|
||||||
|
} else if (text.length() > 15) {
|
||||||
|
label = "PH/S";
|
||||||
|
hashrate = text.substr(0, text.length() - 15);
|
||||||
|
} else if (text.length() > 12) {
|
||||||
|
label = "TH/S";
|
||||||
|
hashrate = text.substr(0, text.length() - 12);
|
||||||
|
} else if (text.length() > 9) {
|
||||||
|
label = "GH/S";
|
||||||
|
hashrate = text.substr(0, text.length() - 9);
|
||||||
|
} else if (text.length() > 6) {
|
||||||
|
label = "MH/S";
|
||||||
|
hashrate = text.substr(0, text.length() - 6);
|
||||||
|
} else if (text.length() > 3) {
|
||||||
|
label = "KH/S";
|
||||||
|
hashrate = text.substr(0, text.length() - 3);
|
||||||
|
} else {
|
||||||
|
label = "H/S";
|
||||||
|
hashrate = text;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::size_t textLength = hashrate.length();
|
||||||
|
|
||||||
|
// Calculate the position where the digits should start
|
||||||
|
// Account for the position of the mining pool logo and the hashrate label
|
||||||
|
std::size_t startIndex = NUM_SCREENS - 1 - textLength;
|
||||||
|
|
||||||
|
// Insert the pickaxe icon just before the digits
|
||||||
|
if (startIndex > 0)
|
||||||
|
{
|
||||||
|
ret[startIndex - 1] = "mdi:pickaxe";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Place the digits
|
||||||
|
for (std::size_t i = 0; i < textLength; ++i)
|
||||||
|
{
|
||||||
|
ret[startIndex + i] = hashrate.substr(i, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
ret[NUM_SCREENS - 1] = label;
|
||||||
|
|
||||||
|
// Set the mining pool logo
|
||||||
|
if (miningPoolName == "ocean") {
|
||||||
|
ret[0] = "mdi:ocean_logo";
|
||||||
|
} else if (miningPoolName == "braiins") {
|
||||||
|
ret[0] = "mdi:braiins_logo";
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::array<std::string, NUM_SCREENS> parseMiningPoolStatsDailyEarnings(std::string miningPoolName, int sats)
|
||||||
|
{
|
||||||
|
std::array<std::string, NUM_SCREENS> ret;
|
||||||
|
ret.fill(""); // Initialize all elements to empty strings
|
||||||
|
std::string satsDisplay = std::to_string(sats);
|
||||||
|
std::string label;
|
||||||
|
|
||||||
|
if (miningPoolName == "braiins") {
|
||||||
|
// fpps guarantees payout; report current daily earnings
|
||||||
|
label = "sats/earned";
|
||||||
|
} else {
|
||||||
|
// TIDES can only estimate earnings on the next block Ocean finds
|
||||||
|
label = "sats/block";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sats >= 100000000) {
|
||||||
|
// A whale mining 1+ BTC per day! No decimal points; whales scoff at such things.
|
||||||
|
label = "BTC" + label.substr(4);
|
||||||
|
satsDisplay = satsDisplay.substr(0, satsDisplay.length() - 8);
|
||||||
|
} else if (sats >= 10000000) {
|
||||||
|
// 10.0M to 99.9M you get one decimal point
|
||||||
|
satsDisplay = satsDisplay.substr(0, satsDisplay.length() - 6) + "." + satsDisplay[2] + "M";
|
||||||
|
} else if (sats >= 1000000) {
|
||||||
|
// 1.00M to 9.99M you get two decimal points
|
||||||
|
satsDisplay = satsDisplay.substr(0, satsDisplay.length() - 6) + "." + satsDisplay.substr(2, 2) + "M";
|
||||||
|
} else if (sats >= 100000) {
|
||||||
|
// 100K to 999K you get no extra precision
|
||||||
|
satsDisplay = satsDisplay.substr(0, satsDisplay.length() - 3) + "K";
|
||||||
|
} else if (sats >= 10000) {
|
||||||
|
// 10.0K to 99.9K you get one decimal point
|
||||||
|
satsDisplay = satsDisplay.substr(0, satsDisplay.length() - 3) + "." + satsDisplay[2] + "K";
|
||||||
|
} else {
|
||||||
|
// Pleb miner! 4 digit or fewer sats will fit as-is. no-op.
|
||||||
|
}
|
||||||
|
|
||||||
|
std::size_t textLength = satsDisplay.length();
|
||||||
|
|
||||||
|
// Calculate the position where the digits should start
|
||||||
|
// Account for the position of the mining pool logo
|
||||||
|
std::size_t startIndex = NUM_SCREENS - 1 - textLength;
|
||||||
|
|
||||||
|
// Insert the pickaxe icon just before the digits if there's room
|
||||||
|
if (startIndex > 0)
|
||||||
|
{
|
||||||
|
ret[startIndex - 1] = "mdi:pickaxe";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Place the digits
|
||||||
|
for (std::size_t i = 0; i < textLength; ++i)
|
||||||
|
{
|
||||||
|
ret[startIndex + i] = satsDisplay.substr(i, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
ret[NUM_SCREENS - 1] = label;
|
||||||
|
|
||||||
|
// Set the mining pool logo
|
||||||
|
if (miningPoolName == "ocean") {
|
||||||
|
ret[0] = "mdi:ocean_logo";
|
||||||
|
} else if (miningPoolName == "braiins") {
|
||||||
|
ret[0] = "mdi:braiins_logo";
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
5
lib/btclock/mining_pool_stats_handler.hpp
Normal file
5
lib/btclock/mining_pool_stats_handler.hpp
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
#include <array>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
std::array<std::string, NUM_SCREENS> parseMiningPoolStatsHashRate(std::string miningPoolName, std::string text);
|
||||||
|
std::array<std::string, NUM_SCREENS> parseMiningPoolStatsDailyEarnings(std::string miningPoolName, int sats);
|
|
@ -3,5 +3,5 @@ nvs, data, nvs, 0x9000, 0x5000,
|
||||||
otadata, data, ota, 0xe000, 0x2000,
|
otadata, data, ota, 0xe000, 0x2000,
|
||||||
app0, app, ota_0, 0x10000, 0x1b8000,
|
app0, app, ota_0, 0x10000, 0x1b8000,
|
||||||
app1, app, ota_1, , 0x1b8000,
|
app1, app, ota_1, , 0x1b8000,
|
||||||
spiffs, data, spiffs, , 0x66800,
|
spiffs, data, spiffs, , 0x66C00,
|
||||||
coredump, data, coredump,, 0x10000,
|
coredump, data, coredump,, 0x10000,
|
|
|
@ -1,7 +1,7 @@
|
||||||
# Name, Type, SubType, Offset, Size, Flags
|
# Name, Type, SubType, Offset, Size, Flags
|
||||||
nvs, data, nvs, 36K, 20K,
|
nvs, data, nvs, 0x9000, 0x5000,
|
||||||
otadata, data, ota, 56K, 8K,
|
otadata, data, ota, 0xe000, 0x2000,
|
||||||
app0, app, ota_0, 64K, 4096K,
|
app0, app, ota_0, 0x10000, 0x6F0000,
|
||||||
app1, app, ota_1, , 4096K,
|
app1, app, ota_1, , 0x6F0000,
|
||||||
spiffs, data, spiffs, , 410K,
|
spiffs, data, spiffs, , 0x200000,
|
||||||
coredump, data, coredump,, 64K,
|
coredump, data, coredump,, 0x10000,
|
|
|
@ -1,7 +1,7 @@
|
||||||
# Name, Type, SubType, Offset, Size, Flags
|
# Name, Type, SubType, Offset, Size, Flags
|
||||||
nvs, data, nvs, 36K, 20K,
|
nvs, data, nvs, 0x9000, 0x5000,
|
||||||
otadata, data, ota, 56K, 8K,
|
otadata, data, ota, 0xe000, 0x2000,
|
||||||
app0, app, ota_0, 64K, 1760K,
|
app0, app, ota_0, 0x10000, 0x370000,
|
||||||
app1, app, ota_1, , 1760K,
|
app1, app, ota_1, , 0x370000,
|
||||||
spiffs, data, spiffs, , 410K,
|
spiffs, data, spiffs, , 0xCD000,
|
||||||
coredump, data, coredump,, 64K,
|
coredump, data, coredump,, 0x10000,
|
||||||
|
|
|
|
@ -20,8 +20,9 @@ framework = arduino, espidf
|
||||||
monitor_speed = 115200
|
monitor_speed = 115200
|
||||||
monitor_filters = esp32_exception_decoder, colorize
|
monitor_filters = esp32_exception_decoder, colorize
|
||||||
board_build.filesystem = littlefs
|
board_build.filesystem = littlefs
|
||||||
extra_scripts = post:scripts/extra_script.py
|
extra_scripts = pre:scripts/pre_script.py, post:scripts/extra_script.py
|
||||||
board_build.embed_files = x509_crt_bundle
|
board_build.embed_files =
|
||||||
|
x509_crt_bundle
|
||||||
build_flags =
|
build_flags =
|
||||||
!python scripts/git_rev.py
|
!python scripts/git_rev.py
|
||||||
-DLAST_BUILD_TIME=$UNIX_TIME
|
-DLAST_BUILD_TIME=$UNIX_TIME
|
||||||
|
@ -35,10 +36,9 @@ lib_deps =
|
||||||
https://github.com/joltwallet/esp_littlefs.git
|
https://github.com/joltwallet/esp_littlefs.git
|
||||||
bblanchon/ArduinoJson@^7.2.1
|
bblanchon/ArduinoJson@^7.2.1
|
||||||
mathieucarbou/ESPAsyncWebServer @ 3.3.23
|
mathieucarbou/ESPAsyncWebServer @ 3.3.23
|
||||||
adafruit/Adafruit BusIO@^1.16.2
|
robtillaart/MCP23017@^0.8.0
|
||||||
adafruit/Adafruit MCP23017 Arduino Library@^2.3.2
|
|
||||||
adafruit/Adafruit NeoPixel@^1.12.3
|
adafruit/Adafruit NeoPixel@^1.12.3
|
||||||
https://github.com/dsbaars/universal_pin
|
https://github.com/dsbaars/universal_pin#feature/mcp23017_rt
|
||||||
https://github.com/dsbaars/GxEPD2#universal_pin
|
https://github.com/dsbaars/GxEPD2#universal_pin
|
||||||
https://github.com/tzapu/WiFiManager.git#v2.0.17
|
https://github.com/tzapu/WiFiManager.git#v2.0.17
|
||||||
rblb/Nostrduino@1.2.8
|
rblb/Nostrduino@1.2.8
|
||||||
|
@ -64,7 +64,7 @@ build_unflags =
|
||||||
[env:btclock_rev_b]
|
[env:btclock_rev_b]
|
||||||
extends = btclock_base
|
extends = btclock_base
|
||||||
board = btclock_rev_b
|
board = btclock_rev_b
|
||||||
board_build.partitions = partition.csv
|
board_build.partitions = partition_8mb.csv
|
||||||
build_flags =
|
build_flags =
|
||||||
${btclock_base.build_flags}
|
${btclock_base.build_flags}
|
||||||
-D MCP_INT_PIN=8
|
-D MCP_INT_PIN=8
|
||||||
|
@ -96,6 +96,7 @@ build_flags =
|
||||||
|
|
||||||
[env:btclock_rev_b_213epd]
|
[env:btclock_rev_b_213epd]
|
||||||
extends = env:btclock_rev_b
|
extends = env:btclock_rev_b
|
||||||
|
board_build.partitions = partition_8mb.csv
|
||||||
test_framework = unity
|
test_framework = unity
|
||||||
build_flags =
|
build_flags =
|
||||||
${env:btclock_rev_b.build_flags}
|
${env:btclock_rev_b.build_flags}
|
||||||
|
|
|
@ -5,6 +5,9 @@ from shutil import copyfileobj, rmtree
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
revision = (
|
revision = (
|
||||||
subprocess.check_output(["git", "rev-parse", "HEAD"])
|
subprocess.check_output(["git", "rev-parse", "HEAD"])
|
||||||
.strip()
|
.strip()
|
||||||
|
@ -43,5 +46,15 @@ def before_buildfs(source, target, env):
|
||||||
output_directory = 'data/build_gz'
|
output_directory = 'data/build_gz'
|
||||||
process_directory(input_directory, output_directory)
|
process_directory(input_directory, output_directory)
|
||||||
|
|
||||||
|
flash_size = env.BoardConfig().get("upload.flash_size", "4MB")
|
||||||
|
fs_image_name = f"littlefs_{flash_size}"
|
||||||
|
env.Replace(ESP32_FS_IMAGE_NAME=fs_image_name)
|
||||||
|
env.Replace(ESP8266_FS_IMAGE_NAME=fs_image_name)
|
||||||
|
|
||||||
os.environ["PUBLIC_BASE_URL"] = ""
|
os.environ["PUBLIC_BASE_URL"] = ""
|
||||||
env.AddPreAction("$BUILD_DIR/littlefs.bin", before_buildfs)
|
fs_name = env.get("ESP32_FS_IMAGE_NAME", "littlefs.bin")
|
||||||
|
# Or alternatively:
|
||||||
|
# fs_name = env.get("FSTOOLNAME", "littlefs.bin")
|
||||||
|
|
||||||
|
# Use the variable in the pre-action
|
||||||
|
env.AddPreAction(f"$BUILD_DIR/{fs_name}.bin", before_buildfs)
|
||||||
|
|
7
scripts/pre_script.py
Normal file
7
scripts/pre_script.py
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
Import("env")
|
||||||
|
|
||||||
|
flash_size = env.BoardConfig().get("upload.flash_size", "4MB")
|
||||||
|
fs_image_name = f"littlefs_{flash_size}"
|
||||||
|
env.Replace(ESP32_FS_IMAGE_NAME=fs_image_name)
|
||||||
|
env.Replace(ESP8266_FS_IMAGE_NAME=fs_image_name)
|
||||||
|
|
|
@ -1270,12 +1270,524 @@ const unsigned char epd_icons_bitaxe_logo [] PROGMEM = {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// 'ocean_logo', 122x250px
|
||||||
|
const unsigned char epd_icons_ocean_logo [] PROGMEM = {
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x78, 0x00, 0x1f, 0xc0, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xfc, 0x00, 0x3f, 0xf8, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xfe, 0x00, 0x7f, 0xfe, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xfe, 0x00, 0x7f, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0x80, 0x1f, 0xff, 0xfe, 0x00, 0xff, 0xff, 0xfe, 0x00, 0x3f, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xfc, 0x00, 0x3f, 0xff, 0xfc, 0x01, 0xff, 0xff, 0xff, 0x00, 0x0f, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xf0, 0x00, 0x7f, 0xff, 0xfc, 0x01, 0xff, 0xff, 0xff, 0x80, 0x01, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xc0, 0x00, 0xff, 0xff, 0xfc, 0x01, 0xff, 0xff, 0xff, 0xe0, 0x00, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0x80, 0x01, 0xff, 0xff, 0xfc, 0x03, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x3f, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0x00, 0x03, 0xff, 0xff, 0xfc, 0x03, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x1f, 0xff, 0xc0,
|
||||||
|
0xff, 0xfe, 0x00, 0x07, 0xff, 0xff, 0xfc, 0x03, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x0f, 0xff, 0xc0,
|
||||||
|
0xff, 0xfc, 0x00, 0x0f, 0xff, 0xff, 0xfc, 0x07, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x07, 0xff, 0xc0,
|
||||||
|
0xff, 0xf8, 0x00, 0x1f, 0xff, 0xff, 0xfc, 0x07, 0xff, 0xff, 0xff, 0xff, 0x00, 0x03, 0xff, 0xc0,
|
||||||
|
0xff, 0xf0, 0x00, 0x3f, 0xff, 0xff, 0xfc, 0x07, 0xff, 0xff, 0xff, 0xff, 0x00, 0x03, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x7f, 0xff, 0xff, 0xf8, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x80, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x7f, 0xff, 0xff, 0xf8, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0xff, 0xc0,
|
||||||
|
0xff, 0xc0, 0x00, 0xff, 0xff, 0xff, 0xf8, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0xff, 0xc0,
|
||||||
|
0xff, 0xc0, 0x00, 0xff, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x7f, 0xc0,
|
||||||
|
0xff, 0x80, 0x00, 0xff, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x7f, 0xc0,
|
||||||
|
0xff, 0x80, 0x00, 0x7f, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x3f, 0xc0,
|
||||||
|
0xff, 0x80, 0x00, 0x7f, 0xff, 0xff, 0xf8, 0x3f, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x3f, 0xc0,
|
||||||
|
0xff, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xf8, 0x3f, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x3f, 0xc0,
|
||||||
|
0xff, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xf8, 0x3f, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x3f, 0xc0,
|
||||||
|
0xff, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xf8, 0x7f, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x1f, 0xc0,
|
||||||
|
0xff, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xf0, 0x7f, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x1f, 0xc0,
|
||||||
|
0xfe, 0x00, 0x00, 0x07, 0xff, 0xff, 0xf0, 0x7f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x1f, 0xc0,
|
||||||
|
0xfe, 0x00, 0x00, 0x03, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xc0,
|
||||||
|
0xfe, 0x00, 0x00, 0x01, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xc0,
|
||||||
|
0xfe, 0x00, 0x00, 0x01, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xc0, 0x00, 0x00, 0xff, 0x00, 0x1f, 0xc0,
|
||||||
|
0xfe, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf0, 0xff, 0xff, 0x00, 0x00, 0x1f, 0xff, 0x80, 0x1f, 0xc0,
|
||||||
|
0xfe, 0x00, 0x78, 0x00, 0x7f, 0xff, 0xf1, 0xff, 0xfc, 0x00, 0x03, 0xff, 0xff, 0xc0, 0x1f, 0xc0,
|
||||||
|
0xfe, 0x00, 0xfc, 0x00, 0x3f, 0xff, 0xf1, 0xff, 0xf0, 0x00, 0x7f, 0xff, 0xff, 0xc0, 0x1f, 0xc0,
|
||||||
|
0xff, 0x00, 0xff, 0x00, 0x1f, 0xff, 0xf1, 0xff, 0xc0, 0x0f, 0xff, 0xff, 0xff, 0xe0, 0x1f, 0xc0,
|
||||||
|
0xff, 0x01, 0xff, 0x80, 0x1f, 0xff, 0xf3, 0xff, 0x01, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x1f, 0xc0,
|
||||||
|
0xff, 0x01, 0xff, 0xc0, 0x0f, 0xff, 0xe3, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x3f, 0xc0,
|
||||||
|
0xff, 0x01, 0xff, 0xe0, 0x07, 0xff, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x3f, 0xc0,
|
||||||
|
0xff, 0x81, 0xff, 0xf8, 0x03, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x3f, 0xc0,
|
||||||
|
0xff, 0x81, 0xff, 0xfc, 0x01, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x7f, 0xc0,
|
||||||
|
0xff, 0x83, 0xff, 0xfe, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x7f, 0xc0,
|
||||||
|
0xff, 0xc3, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x7f, 0xc0,
|
||||||
|
0xff, 0xc3, 0xff, 0xff, 0xc0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xc0,
|
||||||
|
0xff, 0xe3, 0xff, 0xff, 0xe0, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xc0,
|
||||||
|
0xff, 0xe3, 0xff, 0xff, 0xf0, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xc0,
|
||||||
|
0xff, 0xf3, 0xff, 0xff, 0xf8, 0x0f, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xfe, 0x0f, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0x83, 0xff, 0xff, 0xff, 0xe1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xe1, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xf8, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xf8, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x7f, 0xff, 0xff, 0xfc, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xfe, 0x07, 0xff, 0xff, 0xf9, 0xff, 0xc0,
|
||||||
|
0xff, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xf9, 0xff, 0xc0,
|
||||||
|
0xff, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x81, 0xff, 0xff, 0xf0, 0xff, 0xc0,
|
||||||
|
0xff, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x7f, 0xff, 0xf0, 0xff, 0xc0,
|
||||||
|
0xff, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x3f, 0xff, 0xf0, 0x7f, 0xc0,
|
||||||
|
0xff, 0x83, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x1f, 0xff, 0xf0, 0x7f, 0xc0,
|
||||||
|
0xff, 0x81, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xf0, 0x07, 0xff, 0xf0, 0x7f, 0xc0,
|
||||||
|
0xff, 0x81, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xf8, 0x03, 0xff, 0xf0, 0x3f, 0xc0,
|
||||||
|
0xff, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xf8, 0x01, 0xff, 0xe0, 0x3f, 0xc0,
|
||||||
|
0xff, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xf1, 0xff, 0xfc, 0x00, 0xff, 0xe0, 0x3f, 0xc0,
|
||||||
|
0xff, 0x01, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x3f, 0xf1, 0xff, 0xfe, 0x00, 0x3f, 0xe0, 0x1f, 0xc0,
|
||||||
|
0xff, 0x00, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x7f, 0xf1, 0xff, 0xff, 0x00, 0x1f, 0xe0, 0x1f, 0xc0,
|
||||||
|
0xfe, 0x00, 0xff, 0xff, 0xff, 0x80, 0x01, 0xff, 0xf1, 0xff, 0xff, 0x80, 0x0f, 0xc0, 0x1f, 0xc0,
|
||||||
|
0xfe, 0x00, 0xff, 0xff, 0xf0, 0x00, 0x07, 0xff, 0xe1, 0xff, 0xff, 0x80, 0x07, 0x80, 0x1f, 0xc0,
|
||||||
|
0xfe, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x3f, 0xff, 0xe3, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x1f, 0xc0,
|
||||||
|
0xfe, 0x00, 0x3f, 0xc0, 0x00, 0x00, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x1f, 0xc0,
|
||||||
|
0xfe, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x1f, 0xc0,
|
||||||
|
0xfe, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x1f, 0xc0,
|
||||||
|
0xfe, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x1f, 0xc0,
|
||||||
|
0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x83, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x1f, 0xc0,
|
||||||
|
0xff, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0x83, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x1f, 0xc0,
|
||||||
|
0xff, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0x83, 0xff, 0xff, 0xff, 0x00, 0x00, 0x3f, 0xc0,
|
||||||
|
0xff, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x80, 0x00, 0x3f, 0xc0,
|
||||||
|
0xff, 0x80, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x80, 0x00, 0x3f, 0xc0,
|
||||||
|
0xff, 0x80, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x7f, 0xc0,
|
||||||
|
0xff, 0x80, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xfe, 0x07, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x7f, 0xc0,
|
||||||
|
0xff, 0xc0, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xfe, 0x07, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x7f, 0xc0,
|
||||||
|
0xff, 0xc0, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xfe, 0x07, 0xff, 0xff, 0xff, 0xc0, 0x00, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xfc, 0x07, 0xff, 0xff, 0xff, 0xc0, 0x00, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xfc, 0x07, 0xff, 0xff, 0xff, 0x80, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xf0, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xfc, 0x07, 0xff, 0xff, 0xff, 0x80, 0x03, 0xff, 0xc0,
|
||||||
|
0xff, 0xf8, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xf8, 0x07, 0xff, 0xff, 0xff, 0x00, 0x03, 0xff, 0xc0,
|
||||||
|
0xff, 0xfc, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xf8, 0x07, 0xff, 0xff, 0xfe, 0x00, 0x07, 0xff, 0xc0,
|
||||||
|
0xff, 0xfe, 0x00, 0x07, 0xff, 0xff, 0xff, 0xf8, 0x07, 0xff, 0xff, 0xfc, 0x00, 0x0f, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0x00, 0x03, 0xff, 0xff, 0xff, 0xf0, 0x0f, 0xff, 0xff, 0xf8, 0x00, 0x1f, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0x80, 0x01, 0xff, 0xff, 0xff, 0xf0, 0x0f, 0xff, 0xff, 0xf0, 0x00, 0x3f, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xc0, 0x00, 0xff, 0xff, 0xff, 0xf0, 0x0f, 0xff, 0xff, 0xe0, 0x00, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xf0, 0x00, 0x7f, 0xff, 0xff, 0xe0, 0x0f, 0xff, 0xff, 0x80, 0x03, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xfc, 0x00, 0x3f, 0xff, 0xff, 0xe0, 0x0f, 0xff, 0xff, 0x00, 0x0f, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0x80, 0x1f, 0xff, 0xff, 0xe0, 0x0f, 0xff, 0xfe, 0x00, 0x7f, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0xc0, 0x0f, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0x80, 0x0f, 0xfe, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xff, 0x80, 0x0f, 0xf8, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0x00, 0x07, 0xc0, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// 'braiins_pool', 122x250px
|
||||||
|
const unsigned char epd_icons_braiins_logo [] PROGMEM = {
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xfe, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xf8, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x3f, 0xf0, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x3f, 0xe0, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x3f, 0xe0, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x3f, 0xc0, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x3f, 0xc0, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x3f, 0xc0, 0x38, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x3f, 0x80, 0x7c, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x3f, 0x80, 0xfe, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x3f, 0x80, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x3f, 0x80, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x3f, 0x80, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x3f, 0x00, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x3f, 0x01, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x3f, 0x01, 0xfe, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xf0, 0x1f, 0x01, 0xfe, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xf0, 0x0c, 0x01, 0xfe, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xf0, 0x00, 0x01, 0xfc, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xf8, 0x00, 0x03, 0xfc, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xf8, 0x00, 0x03, 0xf8, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xfc, 0x00, 0x07, 0xf0, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xfe, 0x00, 0x0f, 0xf8, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0x00, 0x1f, 0xfc, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0x80, 0x3f, 0xfe, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xc0, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0x00, 0x07, 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xfc, 0x00, 0x0f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xf0, 0x00, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xc0, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0x00, 0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xfc, 0x00, 0x07, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xf8, 0x00, 0x1f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xe0, 0x00, 0x7f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0x80, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0x00, 0x03, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xfc, 0x00, 0x0f, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xf0, 0x00, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xf8, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xf8, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xf8, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xf8, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xf8, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xf8, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xf8, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xf8, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xfe, 0x07, 0xff, 0x00, 0x00, 0x01, 0xff, 0x80, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xf0, 0x03, 0xff, 0x00, 0x00, 0x0f, 0xff, 0xf0, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0x80, 0x03, 0xff, 0x00, 0x00, 0x3f, 0xff, 0xf8, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xfc, 0x00, 0x03, 0xff, 0x00, 0x00, 0x7f, 0xff, 0xfe, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xc0, 0x00, 0x03, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xfe, 0x00, 0x00, 0x03, 0xff, 0x00, 0x01, 0xff, 0xff, 0xff, 0x80, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xf0, 0x00, 0x00, 0x03, 0xff, 0x00, 0x03, 0xff, 0xff, 0xff, 0xc0, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x07, 0xff, 0x81, 0xff, 0xe0, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x00, 0x01, 0xff, 0xff, 0x00, 0x07, 0xfe, 0x00, 0x7f, 0xe0, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x00, 0x0f, 0xff, 0xff, 0x00, 0x0f, 0xf8, 0x00, 0x1f, 0xf0, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x00, 0x7f, 0xff, 0xff, 0x00, 0x0f, 0xf0, 0x00, 0x0f, 0xf0, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x07, 0xff, 0xff, 0xff, 0x00, 0x1f, 0xe0, 0x00, 0x0f, 0xf8, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x1f, 0xe0, 0x00, 0x07, 0xf8, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x01, 0xff, 0xff, 0xff, 0xff, 0x00, 0x1f, 0xc0, 0x00, 0x03, 0xf8, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x1f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3f, 0xc0, 0x00, 0x03, 0xfc, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3f, 0xc0, 0x00, 0x03, 0xfc, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3f, 0x80, 0x00, 0x03, 0xfc, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3f, 0x80, 0x00, 0x03, 0xfc, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3f, 0x80, 0x00, 0x03, 0xfc, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3f, 0xc0, 0x00, 0x03, 0xfc, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3f, 0xc0, 0x00, 0x03, 0xfc, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3f, 0xc0, 0x00, 0x03, 0xf8, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xfc, 0x03, 0xff, 0x00, 0x1f, 0xe0, 0x00, 0x07, 0xc0, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xc0, 0x03, 0xff, 0x00, 0x1f, 0xe0, 0x00, 0x06, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xfe, 0x00, 0x03, 0xff, 0x00, 0x1f, 0xf0, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xf0, 0x00, 0x03, 0xff, 0x00, 0x0f, 0xf8, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0x00, 0x00, 0x03, 0xff, 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xf8, 0x00, 0x00, 0x03, 0xff, 0x00, 0x07, 0xff, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xc0, 0x00, 0x00, 0x03, 0xff, 0x00, 0x03, 0xfc, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x00, 0x00, 0x7f, 0xff, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x00, 0x07, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x00, 0x3f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x01, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x1f, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x07, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xf0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x03, 0xff, 0xc0, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x0f, 0xff, 0xf0, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x3f, 0xff, 0xfc, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x7f, 0xff, 0xfe, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x01, 0xff, 0xff, 0xff, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x03, 0xff, 0xff, 0xff, 0x80, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x03, 0xff, 0xff, 0xff, 0xc0, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xfe, 0x03, 0xff, 0x00, 0x07, 0xff, 0x00, 0xff, 0xe0, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xf0, 0x03, 0xff, 0x00, 0x0f, 0xfc, 0x00, 0x3f, 0xe0, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0x00, 0x03, 0xff, 0x00, 0x0f, 0xf8, 0x00, 0x1f, 0xf0, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xf8, 0x00, 0x03, 0xff, 0x00, 0x1f, 0xf0, 0x00, 0x0f, 0xf0, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xc0, 0x00, 0x03, 0xff, 0x00, 0x1f, 0xe0, 0x00, 0x07, 0xf8, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xfc, 0x00, 0x00, 0x03, 0xff, 0x00, 0x1f, 0xe0, 0x00, 0x07, 0xf8, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xe0, 0x00, 0x00, 0x03, 0xff, 0x00, 0x3f, 0xc0, 0x00, 0x03, 0xf8, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x3f, 0xc0, 0x00, 0x03, 0xfc, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xf8, 0x00, 0x00, 0x01, 0xff, 0xff, 0x00, 0x3f, 0xc0, 0x00, 0x03, 0xfc, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x00, 0x1f, 0xff, 0xff, 0x00, 0x3f, 0x80, 0x00, 0x03, 0xfc, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x3f, 0x80, 0x00, 0x03, 0xfc, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x07, 0xff, 0xff, 0xff, 0x00, 0x3f, 0x80, 0x00, 0x03, 0xfc, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x7f, 0xff, 0xff, 0xff, 0x00, 0x3f, 0xc0, 0x00, 0x03, 0xfc, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x03, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3f, 0xc0, 0x00, 0x03, 0xf8, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x1f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x1f, 0xc0, 0x00, 0x03, 0xf0, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x3f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x1f, 0xe0, 0x00, 0x07, 0x80, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x07, 0xff, 0xff, 0xff, 0xff, 0x00, 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x1f, 0xff, 0xff, 0xff, 0x00, 0x0f, 0xf8, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x01, 0xff, 0xff, 0xff, 0x00, 0x07, 0xfe, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x00, 0x3f, 0xff, 0xff, 0x00, 0x07, 0xff, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x00, 0x07, 0xff, 0xff, 0x00, 0x03, 0xf8, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xfc, 0x00, 0x00, 0x00, 0x7f, 0xff, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xc0, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xf8, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xf0, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xfe, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xc0, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xfc, 0x03, 0xff, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xe0, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x01, 0xff, 0xf8, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x03, 0xff, 0xfc, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x07, 0xff, 0xfe, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x0f, 0xff, 0xfe, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x1f, 0xff, 0xff, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x1f, 0xff, 0xff, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x1f, 0xff, 0xff, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x1f, 0xff, 0xff, 0x80, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xe0, 0x7f, 0xff, 0xf3, 0xff, 0x00, 0x1f, 0xff, 0xff, 0x80, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0x00, 0x0f, 0xff, 0xc3, 0xff, 0x00, 0x1f, 0xff, 0xff, 0x80, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xfe, 0x00, 0x07, 0xff, 0x03, 0xff, 0x00, 0x1f, 0xff, 0xff, 0x80, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xfc, 0x00, 0x03, 0xfc, 0x03, 0xff, 0x00, 0x1f, 0xff, 0xff, 0x80, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xf8, 0x00, 0x01, 0xf0, 0x03, 0xff, 0x00, 0x1f, 0xff, 0xff, 0x80, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xf0, 0x00, 0x00, 0xc0, 0x03, 0xff, 0x00, 0x1f, 0xff, 0xff, 0x80, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xf0, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x1f, 0xff, 0xff, 0x80, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xf0, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x1f, 0xff, 0xff, 0x80, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x1f, 0x80, 0x00, 0x07, 0xff, 0x00, 0x1f, 0xff, 0xff, 0x80, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x3f, 0xc0, 0x00, 0x1f, 0xff, 0x00, 0x1f, 0xff, 0xff, 0x80, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x3f, 0xe0, 0x00, 0x7f, 0xff, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xf8, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x3f, 0xe0, 0x01, 0xff, 0xff, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xf8, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x3f, 0xe0, 0x0f, 0xff, 0xff, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xf8, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x3f, 0xe0, 0x3f, 0xff, 0xff, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xf8, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x3f, 0xe0, 0x7f, 0xff, 0xff, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xf8, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x3f, 0xe0, 0x7f, 0xff, 0xff, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xf8, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x3f, 0xe0, 0x7f, 0xff, 0xff, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xf8, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x3f, 0xe0, 0x7f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x3f, 0xe0, 0x7f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x3f, 0xc0, 0x3f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xc3, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xfe, 0x00, 0x7f, 0xff, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0x00, 0xfc, 0x00, 0x1f, 0xff, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xfc, 0x00, 0x38, 0x00, 0x0f, 0xff, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xf8, 0x00, 0x10, 0x00, 0x0f, 0xff, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xf0, 0x00, 0x00, 0x00, 0x07, 0xff, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xf0, 0x00, 0x00, 0x00, 0x07, 0xff, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xf0, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x00, 0x7c, 0x03, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x1e, 0x00, 0xfe, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x3f, 0x80, 0xfe, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x3f, 0x80, 0xfe, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x3f, 0x80, 0xfe, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x3f, 0x80, 0xfe, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x3f, 0x80, 0xfe, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x3f, 0x80, 0xfe, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x3f, 0x80, 0xfe, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x3f, 0x80, 0xfe, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x3f, 0x80, 0xfe, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x3f, 0x80, 0xfe, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xe0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
// Array of all bitmaps for convenience. (Total bytes used to store images in PROGMEM = 8032)
|
// Array of all bitmaps for convenience. (Total bytes used to store images in PROGMEM = 8032)
|
||||||
const int epd_icons_allArray_LEN = 5;
|
const int epd_icons_allArray_LEN = 7;
|
||||||
const unsigned char* epd_icons_allArray[epd_icons_allArray_LEN] = {
|
const unsigned char* epd_icons_allArray[epd_icons_allArray_LEN] = {
|
||||||
epd_icons_pickaxe,
|
epd_icons_pickaxe,
|
||||||
epd_icons_rocket_launch,
|
epd_icons_rocket_launch,
|
||||||
epd_icons_lightning,
|
epd_icons_lightning,
|
||||||
epd_icons_flash,
|
epd_icons_flash,
|
||||||
epd_icons_bitaxe_logo
|
epd_icons_bitaxe_logo,
|
||||||
|
epd_icons_ocean_logo,
|
||||||
|
epd_icons_braiins_logo
|
||||||
};
|
};
|
||||||
|
|
|
@ -5,15 +5,15 @@ const TickType_t debounceDelay = pdMS_TO_TICKS(50);
|
||||||
TickType_t lastDebounceTime = 0;
|
TickType_t lastDebounceTime = 0;
|
||||||
|
|
||||||
#ifdef IS_BTCLOCK_V8
|
#ifdef IS_BTCLOCK_V8
|
||||||
#define BTN_1 0
|
#define BTN_1 256
|
||||||
#define BTN_2 1
|
#define BTN_2 512
|
||||||
#define BTN_3 2
|
#define BTN_3 1024
|
||||||
#define BTN_4 3
|
#define BTN_4 2048
|
||||||
#else
|
#else
|
||||||
#define BTN_1 3
|
#define BTN_1 2048
|
||||||
#define BTN_2 2
|
#define BTN_2 1024
|
||||||
#define BTN_3 1
|
#define BTN_3 512
|
||||||
#define BTN_4 0
|
#define BTN_4 256
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void buttonTask(void *parameter) {
|
void buttonTask(void *parameter) {
|
||||||
|
@ -22,11 +22,12 @@ void buttonTask(void *parameter) {
|
||||||
std::lock_guard<std::mutex> lock(mcpMutex);
|
std::lock_guard<std::mutex> lock(mcpMutex);
|
||||||
|
|
||||||
TickType_t currentTime = xTaskGetTickCount();
|
TickType_t currentTime = xTaskGetTickCount();
|
||||||
|
|
||||||
if ((currentTime - lastDebounceTime) >= debounceDelay) {
|
if ((currentTime - lastDebounceTime) >= debounceDelay) {
|
||||||
lastDebounceTime = currentTime;
|
lastDebounceTime = currentTime;
|
||||||
|
|
||||||
if (!digitalRead(MCP_INT_PIN)) {
|
if (!digitalRead(MCP_INT_PIN)) {
|
||||||
uint pin = mcp1.getLastInterruptPin();
|
uint pin = mcp1.getInterruptFlagRegister();
|
||||||
|
|
||||||
switch (pin) {
|
switch (pin) {
|
||||||
case BTN_1:
|
case BTN_1:
|
||||||
|
@ -43,12 +44,12 @@ void buttonTask(void *parameter) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mcp1.clearInterrupts();
|
mcp1.getInterruptCaptureRegister();
|
||||||
} else {
|
} else {
|
||||||
}
|
}
|
||||||
// Very ugly, but for some reason this is necessary
|
// Very ugly, but for some reason this is necessary
|
||||||
while (!digitalRead(MCP_INT_PIN)) {
|
while (!digitalRead(MCP_INT_PIN)) {
|
||||||
mcp1.clearInterrupts();
|
mcp1.getInterruptCaptureRegister();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,10 +2,12 @@
|
||||||
|
|
||||||
#define MAX_ATTEMPTS_WIFI_CONNECTION 20
|
#define MAX_ATTEMPTS_WIFI_CONNECTION 20
|
||||||
|
|
||||||
|
// zlib_turbo zt;
|
||||||
|
|
||||||
Preferences preferences;
|
Preferences preferences;
|
||||||
Adafruit_MCP23X17 mcp1;
|
MCP23017 mcp1(0x20);
|
||||||
#ifdef IS_BTCLOCK_V8
|
#ifdef IS_BTCLOCK_V8
|
||||||
Adafruit_MCP23X17 mcp2;
|
MCP23017 mcp2(0x21);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAS_FRONTLIGHT
|
#ifdef HAS_FRONTLIGHT
|
||||||
|
@ -35,7 +37,7 @@ void setup()
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> lockMcp(mcpMutex);
|
std::lock_guard<std::mutex> lockMcp(mcpMutex);
|
||||||
if (mcp1.digitalRead(3) == LOW)
|
if (mcp1.read1(3) == LOW)
|
||||||
{
|
{
|
||||||
preferences.putBool("wifiConfigured", false);
|
preferences.putBool("wifiConfigured", false);
|
||||||
preferences.remove("txPower");
|
preferences.remove("txPower");
|
||||||
|
@ -46,7 +48,7 @@ void setup()
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
if (mcp1.digitalRead(0) == LOW)
|
if (mcp1.read1(0) == LOW)
|
||||||
{
|
{
|
||||||
// Then loop forever to prevent anything else from writing to the screen
|
// Then loop forever to prevent anything else from writing to the screen
|
||||||
while (true)
|
while (true)
|
||||||
|
@ -54,7 +56,7 @@ void setup()
|
||||||
delay(1000);
|
delay(1000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (mcp1.digitalRead(1) == LOW)
|
else if (mcp1.read1(1) == LOW)
|
||||||
{
|
{
|
||||||
preferences.clear();
|
preferences.clear();
|
||||||
queueLedEffect(LED_EFFECT_WIFI_ERASE_SETTINGS);
|
queueLedEffect(LED_EFFECT_WIFI_ERASE_SETTINGS);
|
||||||
|
@ -66,6 +68,7 @@ void setup()
|
||||||
}
|
}
|
||||||
|
|
||||||
setupWifi();
|
setupWifi();
|
||||||
|
// loadIcons();
|
||||||
|
|
||||||
setupWebserver();
|
setupWebserver();
|
||||||
|
|
||||||
|
@ -92,6 +95,11 @@ void setup()
|
||||||
setupBitaxeFetchTask();
|
setupBitaxeFetchTask();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (preferences.getBool("miningPoolStats", DEFAULT_MINING_POOL_STATS_ENABLED))
|
||||||
|
{
|
||||||
|
setupMiningPoolStatsFetchTask();
|
||||||
|
}
|
||||||
|
|
||||||
setupButtonTask();
|
setupButtonTask();
|
||||||
setupOTA();
|
setupOTA();
|
||||||
|
|
||||||
|
@ -106,6 +114,7 @@ void setup()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
forceFullRefresh();
|
forceFullRefresh();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void setupWifi()
|
void setupWifi()
|
||||||
|
@ -132,7 +141,7 @@ void setupWifi()
|
||||||
bool buttonPress = false;
|
bool buttonPress = false;
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> lockMcp(mcpMutex);
|
std::lock_guard<std::mutex> lockMcp(mcpMutex);
|
||||||
buttonPress = (mcp1.digitalRead(2) == LOW);
|
buttonPress = (mcp1.read1(2) == LOW);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -327,6 +336,12 @@ void setupPreferences()
|
||||||
addScreenMapping(SCREEN_BITAXE_HASHRATE, "BitAxe Hashrate");
|
addScreenMapping(SCREEN_BITAXE_HASHRATE, "BitAxe Hashrate");
|
||||||
addScreenMapping(SCREEN_BITAXE_BESTDIFF, "BitAxe Best Difficulty");
|
addScreenMapping(SCREEN_BITAXE_BESTDIFF, "BitAxe Best Difficulty");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (preferences.getBool("miningPoolStats", DEFAULT_MINING_POOL_STATS_ENABLED))
|
||||||
|
{
|
||||||
|
addScreenMapping(SCREEN_MINING_POOL_STATS_HASHRATE, "Mining Pool Hashrate");
|
||||||
|
addScreenMapping(SCREEN_MINING_POOL_STATS_EARNINGS, "Mining Pool Earnings");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String replaceAmbiguousChars(String input)
|
String replaceAmbiguousChars(String input)
|
||||||
|
@ -507,7 +522,7 @@ void setupHardware()
|
||||||
|
|
||||||
Wire.begin(I2C_SDA_PIN, I2C_SCK_PIN, 400000);
|
Wire.begin(I2C_SDA_PIN, I2C_SCK_PIN, 400000);
|
||||||
|
|
||||||
if (!mcp1.begin_I2C(0x20))
|
if (!mcp1.begin())
|
||||||
{
|
{
|
||||||
Serial.println(F("Error MCP23017 1"));
|
Serial.println(F("Error MCP23017 1"));
|
||||||
|
|
||||||
|
@ -517,17 +532,20 @@ void setupHardware()
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pinMode(MCP_INT_PIN, INPUT_PULLUP);
|
pinMode(MCP_INT_PIN, INPUT_PULLUP);
|
||||||
mcp1.setupInterrupts(false, false, LOW);
|
// mcp1.setupInterrupts(false, false, LOW);
|
||||||
|
mcp1.enableControlRegister(MCP23x17_IOCR_ODR);
|
||||||
|
|
||||||
|
mcp1.mirrorInterrupts(true);
|
||||||
|
|
||||||
for (int i = 0; i < 4; i++)
|
for (int i = 0; i < 4; i++)
|
||||||
{
|
{
|
||||||
mcp1.pinMode(i, INPUT_PULLUP);
|
mcp1.pinMode1(i, INPUT_PULLUP);
|
||||||
mcp1.setupInterruptPin(i, LOW);
|
mcp1.enableInterrupt(i, LOW);
|
||||||
}
|
}
|
||||||
#ifndef IS_BTCLOCK_V8
|
#ifndef IS_BTCLOCK_V8
|
||||||
for (int i = 8; i <= 14; i++)
|
for (int i = 8; i <= 14; i++)
|
||||||
{
|
{
|
||||||
mcp1.pinMode(i, OUTPUT);
|
mcp1.pinMode1(i, OUTPUT);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -538,7 +556,7 @@ void setupHardware()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef IS_BTCLOCK_V8
|
#ifdef IS_BTCLOCK_V8
|
||||||
if (!mcp2.begin_I2C(0x21))
|
if (!mcp2.begin())
|
||||||
{
|
{
|
||||||
Serial.println(F("Error MCP23017 2"));
|
Serial.println(F("Error MCP23017 2"));
|
||||||
|
|
||||||
|
@ -791,3 +809,18 @@ const char* getFirmwareFilename() {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// void loadIcons() {
|
||||||
|
// size_t ocean_logo_size = 886;
|
||||||
|
|
||||||
|
// int iUncompSize = zt.gzip_info((uint8_t *)epd_compress_bitaxe, ocean_logo_size);
|
||||||
|
// Serial.printf("uncompressed size = %d\n", iUncompSize);
|
||||||
|
|
||||||
|
// uint8_t *pUncompressed;
|
||||||
|
// pUncompressed = (uint8_t *)malloc(iUncompSize+4);
|
||||||
|
// int rc = zt.gunzip((uint8_t *)epd_compress_bitaxe, ocean_logo_size, pUncompressed);
|
||||||
|
|
||||||
|
// if (rc == ZT_SUCCESS) {
|
||||||
|
// Serial.println("Decode success");
|
||||||
|
// }
|
||||||
|
// }
|
|
@ -1,6 +1,6 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <Adafruit_MCP23X17.h>
|
#include <MCP23017.h>
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <Preferences.h>
|
#include <Preferences.h>
|
||||||
#include <WiFiClientSecure.h>
|
#include <WiFiClientSecure.h>
|
||||||
|
@ -18,6 +18,7 @@
|
||||||
#include "lib/ota.hpp"
|
#include "lib/ota.hpp"
|
||||||
#include "lib/nostr_notify.hpp"
|
#include "lib/nostr_notify.hpp"
|
||||||
#include "lib/bitaxe_fetch.hpp"
|
#include "lib/bitaxe_fetch.hpp"
|
||||||
|
#include "lib/mining_pool_stats_fetch.hpp"
|
||||||
|
|
||||||
#include "lib/v2_notify.hpp"
|
#include "lib/v2_notify.hpp"
|
||||||
|
|
||||||
|
@ -84,3 +85,5 @@ void addScreenMapping(int value, const char* name);
|
||||||
int findScreenIndexByValue(int value);
|
int findScreenIndexByValue(int value);
|
||||||
String replaceAmbiguousChars(String input);
|
String replaceAmbiguousChars(String input);
|
||||||
const char* getFirmwareFilename();
|
const char* getFirmwareFilename();
|
||||||
|
|
||||||
|
// void loadIcons();
|
|
@ -58,6 +58,13 @@
|
||||||
#define DEFAULT_BITAXE_ENABLED false
|
#define DEFAULT_BITAXE_ENABLED false
|
||||||
#define DEFAULT_BITAXE_HOSTNAME "bitaxe1"
|
#define DEFAULT_BITAXE_HOSTNAME "bitaxe1"
|
||||||
|
|
||||||
|
#define MINING_POOL_NAME_OCEAN "ocean"
|
||||||
|
#define MINING_POOL_NAME_BRAIINS "braiins"
|
||||||
|
|
||||||
|
#define DEFAULT_MINING_POOL_STATS_ENABLED false
|
||||||
|
#define DEFAULT_MINING_POOL_NAME MINING_POOL_NAME_OCEAN
|
||||||
|
#define DEFAULT_MINING_POOL_USER "38Qkkei3SuF1Eo45BaYmRHUneRD54yyTFy" // Random actual Ocean hasher
|
||||||
|
|
||||||
#define DEFAULT_ZAP_NOTIFY_ENABLED false
|
#define DEFAULT_ZAP_NOTIFY_ENABLED false
|
||||||
#define DEFAULT_ZAP_NOTIFY_PUBKEY "b5127a08cf33616274800a4387881a9f98e04b9c37116e92de5250498635c422"
|
#define DEFAULT_ZAP_NOTIFY_PUBKEY "b5127a08cf33616274800a4387881a9f98e04b9c37116e92de5250498635c422"
|
||||||
#define DEFAULT_LED_FLASH_ON_ZAP true
|
#define DEFAULT_LED_FLASH_ON_ZAP true
|
||||||
|
|
|
@ -191,7 +191,7 @@ void setupDisplays()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hold lower button to enable "storage mode" (prevents burn-in of ePaper displays)
|
// Hold lower button to enable "storage mode" (prevents burn-in of ePaper displays)
|
||||||
if (mcp1.digitalRead(0) == LOW)
|
if (mcp1.read1(0) == LOW)
|
||||||
{
|
{
|
||||||
setFgColor(GxEPD_BLACK);
|
setFgColor(GxEPD_BLACK);
|
||||||
setBgColor(GxEPD_WHITE);
|
setBgColor(GxEPD_WHITE);
|
||||||
|
@ -613,11 +613,26 @@ void renderIcon(const uint dispNum, const String &text, bool partial)
|
||||||
else if (text.endsWith("bitaxe")) {
|
else if (text.endsWith("bitaxe")) {
|
||||||
iconIndex = 4;
|
iconIndex = 4;
|
||||||
}
|
}
|
||||||
|
else if (text.endsWith("ocean_logo")) {
|
||||||
|
iconIndex = 5;
|
||||||
|
}
|
||||||
|
else if (text.endsWith("braiins_logo")) {
|
||||||
|
iconIndex = 6;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
displays[dispNum].drawInvertedBitmap(0,0, epd_icons_allArray[iconIndex], 122, 250, getFgColor());
|
displays[dispNum].drawInvertedBitmap(0,0, epd_icons_allArray[iconIndex], 122, 250, getFgColor());
|
||||||
|
|
||||||
|
|
||||||
|
// displays[dispNum].drawInvertedBitmap(0,0, getOceanIcon(), 122, 250, getFgColor());
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void renderQr(const uint dispNum, const String &text, bool partial)
|
void renderQr(const uint dispNum, const String &text, bool partial)
|
||||||
{
|
{
|
||||||
#ifdef USE_QR
|
#ifdef USE_QR
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
#include <Fonts/FreeSansBold9pt7b.h>
|
#include <Fonts/FreeSansBold9pt7b.h>
|
||||||
#include <GxEPD2_BW.h>
|
#include <GxEPD2_BW.h>
|
||||||
|
|
||||||
|
|
||||||
#include <mcp23x17_pin.hpp>
|
#include <mcp23x17_pin.hpp>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
#include <native_pin.hpp>
|
#include <native_pin.hpp>
|
||||||
|
|
112
src/lib/mining_pool_stats_fetch.cpp
Normal file
112
src/lib/mining_pool_stats_fetch.cpp
Normal file
|
@ -0,0 +1,112 @@
|
||||||
|
#include "mining_pool_stats_fetch.hpp"
|
||||||
|
|
||||||
|
TaskHandle_t miningPoolStatsFetchTaskHandle;
|
||||||
|
|
||||||
|
std::string miningPoolStatsHashrate;
|
||||||
|
int miningPoolStatsDailyEarnings;
|
||||||
|
|
||||||
|
std::string getMiningPoolStatsHashRate()
|
||||||
|
{
|
||||||
|
return miningPoolStatsHashrate;
|
||||||
|
}
|
||||||
|
|
||||||
|
int getMiningPoolStatsDailyEarnings()
|
||||||
|
{
|
||||||
|
return miningPoolStatsDailyEarnings;
|
||||||
|
}
|
||||||
|
|
||||||
|
void taskMiningPoolStatsFetch(void *pvParameters)
|
||||||
|
{
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
ulTaskNotifyTake(pdTRUE, portMAX_DELAY);
|
||||||
|
|
||||||
|
HTTPClient http;
|
||||||
|
http.setUserAgent(USER_AGENT);
|
||||||
|
String miningPoolStatsApiUrl;
|
||||||
|
|
||||||
|
std::string httpHeaderKey = "";
|
||||||
|
std::string httpHeaderValue;
|
||||||
|
if (preferences.getString("miningPoolName", DEFAULT_MINING_POOL_NAME) == MINING_POOL_NAME_OCEAN) {
|
||||||
|
miningPoolStatsApiUrl = "https://api.ocean.xyz/v1/statsnap/" + preferences.getString("miningPoolUser", DEFAULT_MINING_POOL_USER);
|
||||||
|
}
|
||||||
|
else if (preferences.getString("miningPoolName", DEFAULT_MINING_POOL_NAME) == MINING_POOL_NAME_BRAIINS) {
|
||||||
|
miningPoolStatsApiUrl = "https://pool.braiins.com/accounts/profile/json/btc/";
|
||||||
|
httpHeaderKey = "Pool-Auth-Token";
|
||||||
|
httpHeaderValue = preferences.getString("miningPoolUser", DEFAULT_MINING_POOL_USER).c_str();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Serial.println("Unknown mining pool: \"" + preferences.getString("miningPoolName", DEFAULT_MINING_POOL_NAME) + "\"");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
http.begin(miningPoolStatsApiUrl.c_str());
|
||||||
|
|
||||||
|
if (httpHeaderKey.length() > 0) {
|
||||||
|
http.addHeader(httpHeaderKey.c_str(), httpHeaderValue.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
int httpCode = http.GET();
|
||||||
|
|
||||||
|
if (httpCode == 200)
|
||||||
|
{
|
||||||
|
String payload = http.getString();
|
||||||
|
JsonDocument doc;
|
||||||
|
deserializeJson(doc, payload);
|
||||||
|
|
||||||
|
Serial.println(doc.as<String>());
|
||||||
|
|
||||||
|
if (preferences.getString("miningPoolName", DEFAULT_MINING_POOL_NAME) == MINING_POOL_NAME_OCEAN) {
|
||||||
|
miningPoolStatsHashrate = doc["result"]["hashrate_300s"].as<std::string>();
|
||||||
|
miningPoolStatsDailyEarnings = int(doc["result"]["estimated_earn_next_block"].as<float>() * 100000000);
|
||||||
|
}
|
||||||
|
else if (preferences.getString("miningPoolName", DEFAULT_MINING_POOL_NAME) == MINING_POOL_NAME_BRAIINS) {
|
||||||
|
// Reports hashrate in specific hashrate units (e.g. Gh/s); we want raw total hashes per second.
|
||||||
|
std::string hashrateUnit = doc["btc"]["hash_rate_unit"].as<std::string>();
|
||||||
|
int multiplier = 0;
|
||||||
|
if (hashrateUnit == "Zh/s") {
|
||||||
|
multiplier = 21;
|
||||||
|
} else if (hashrateUnit == "Eh/s") {
|
||||||
|
multiplier = 18;
|
||||||
|
} else if (hashrateUnit == "Ph/s") {
|
||||||
|
multiplier = 15;
|
||||||
|
} else if (hashrateUnit == "Th/s") {
|
||||||
|
multiplier = 12;
|
||||||
|
} else if (hashrateUnit == "Gh/s") {
|
||||||
|
multiplier = 9;
|
||||||
|
} else if (hashrateUnit == "Mh/s") {
|
||||||
|
multiplier = 6;
|
||||||
|
} else if (hashrateUnit == "Kh/s") {
|
||||||
|
multiplier = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add zeroes to pad to a full h/s output
|
||||||
|
miningPoolStatsHashrate = std::to_string(static_cast<int>(std::round(doc["btc"]["hash_rate_5m"].as<float>()))) + std::string(multiplier, '0');
|
||||||
|
|
||||||
|
miningPoolStatsDailyEarnings = int(doc["btc"]["today_reward"].as<float>() * 100000000);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (workQueue != nullptr && (getCurrentScreen() == SCREEN_MINING_POOL_STATS_HASHRATE || getCurrentScreen() == SCREEN_MINING_POOL_STATS_EARNINGS))
|
||||||
|
{
|
||||||
|
WorkItem priceUpdate = {TASK_MINING_POOL_STATS_UPDATE, 0};
|
||||||
|
xQueueSend(workQueue, &priceUpdate, portMAX_DELAY);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Serial.print(
|
||||||
|
F("Error retrieving mining pool data. HTTP status code: "));
|
||||||
|
Serial.println(httpCode);
|
||||||
|
Serial.println(miningPoolStatsApiUrl);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void setupMiningPoolStatsFetchTask()
|
||||||
|
{
|
||||||
|
xTaskCreate(taskMiningPoolStatsFetch, "miningPoolStatsFetch", (6 * 1024), NULL, tskIDLE_PRIORITY,
|
||||||
|
&miningPoolStatsFetchTaskHandle);
|
||||||
|
|
||||||
|
xTaskNotifyGive(miningPoolStatsFetchTaskHandle);
|
||||||
|
}
|
15
src/lib/mining_pool_stats_fetch.hpp
Normal file
15
src/lib/mining_pool_stats_fetch.hpp
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <Arduino.h>
|
||||||
|
#include <HTTPClient.h>
|
||||||
|
|
||||||
|
#include "lib/config.hpp"
|
||||||
|
#include "lib/shared.hpp"
|
||||||
|
|
||||||
|
extern TaskHandle_t miningPoolStatsFetchTaskHandle;
|
||||||
|
|
||||||
|
void setupMiningPoolStatsFetchTask();
|
||||||
|
void taskMiningPoolStatsFetch(void *pvParameters);
|
||||||
|
|
||||||
|
std::string getMiningPoolStatsHashRate();
|
||||||
|
int getMiningPoolStatsDailyEarnings();
|
|
@ -33,9 +33,19 @@ void workerTask(void *pvParameters) {
|
||||||
parseBitaxeBestDiff(getBitaxeBestDiff());
|
parseBitaxeBestDiff(getBitaxeBestDiff());
|
||||||
}
|
}
|
||||||
setEpdContent(taskEpdContent);
|
setEpdContent(taskEpdContent);
|
||||||
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
case TASK_MINING_POOL_STATS_UPDATE: {
|
||||||
|
if (getCurrentScreen() == SCREEN_MINING_POOL_STATS_HASHRATE) {
|
||||||
|
taskEpdContent =
|
||||||
|
parseMiningPoolStatsHashRate(preferences.getString("miningPoolName", DEFAULT_MINING_POOL_NAME).c_str(), getMiningPoolStatsHashRate());
|
||||||
|
} else if (getCurrentScreen() == SCREEN_MINING_POOL_STATS_EARNINGS) {
|
||||||
|
taskEpdContent =
|
||||||
|
parseMiningPoolStatsDailyEarnings(preferences.getString("miningPoolName", DEFAULT_MINING_POOL_NAME).c_str(), getMiningPoolStatsDailyEarnings());
|
||||||
|
}
|
||||||
|
setEpdContent(taskEpdContent);
|
||||||
|
break;
|
||||||
|
}
|
||||||
case TASK_PRICE_UPDATE: {
|
case TASK_PRICE_UPDATE: {
|
||||||
uint currency = getCurrentCurrency();
|
uint currency = getCurrentCurrency();
|
||||||
uint price = getPrice(currency);
|
uint price = getPrice(currency);
|
||||||
|
@ -179,6 +189,17 @@ void setCurrentScreen(uint newScreen) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
case SCREEN_MINING_POOL_STATS_HASHRATE:
|
||||||
|
case SCREEN_MINING_POOL_STATS_EARNINGS: {
|
||||||
|
if (preferences.getBool("miningPoolStats", DEFAULT_MINING_POOL_STATS_ENABLED)) {
|
||||||
|
WorkItem miningPoolStatsUpdate = {TASK_MINING_POOL_STATS_UPDATE, 0};
|
||||||
|
xQueueSend(workQueue, &miningPoolStatsUpdate, portMAX_DELAY);
|
||||||
|
} else {
|
||||||
|
setCurrentScreen(SCREEN_BLOCK_HEIGHT);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
|
|
||||||
#include <data_handler.hpp>
|
#include <data_handler.hpp>
|
||||||
#include <bitaxe_handler.hpp>
|
#include <bitaxe_handler.hpp>
|
||||||
|
#include <mining_pool_stats_handler.hpp>
|
||||||
|
|
||||||
#include "lib/epd.hpp"
|
#include "lib/epd.hpp"
|
||||||
#include "lib/shared.hpp"
|
#include "lib/shared.hpp"
|
||||||
|
@ -23,7 +24,8 @@ typedef enum {
|
||||||
TASK_BLOCK_UPDATE,
|
TASK_BLOCK_UPDATE,
|
||||||
TASK_FEE_UPDATE,
|
TASK_FEE_UPDATE,
|
||||||
TASK_TIME_UPDATE,
|
TASK_TIME_UPDATE,
|
||||||
TASK_BITAXE_UPDATE
|
TASK_BITAXE_UPDATE,
|
||||||
|
TASK_MINING_POOL_STATS_UPDATE
|
||||||
} TaskType;
|
} TaskType;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
|
@ -144,3 +144,11 @@ String calculateSHA256(WiFiClient *stream, size_t contentLength) {
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// uint8_t* getOceanIcon() {
|
||||||
|
// zlib_turbo zt;
|
||||||
|
// int iUncompSize = zt.gzip_info((uint8_t *)ocean_logo_comp, ocean_logo_size);
|
||||||
|
// uint8_t *pUncompressed;
|
||||||
|
// pUncompressed = (uint8_t *)malloc(iUncompSize+4);
|
||||||
|
// zt.gunzip((uint8_t *)ocean_logo_comp, ocean_logo_size, pUncompressed);
|
||||||
|
// }
|
|
@ -1,6 +1,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <Adafruit_MCP23X17.h>
|
#include "MCP23017.h"
|
||||||
|
// #include <zlib_turbo.h>
|
||||||
#include <ArduinoJson.h>
|
#include <ArduinoJson.h>
|
||||||
#include <WiFiClientSecure.h>
|
#include <WiFiClientSecure.h>
|
||||||
#include <Preferences.h>
|
#include <Preferences.h>
|
||||||
|
@ -17,9 +18,9 @@
|
||||||
|
|
||||||
#include "defaults.hpp"
|
#include "defaults.hpp"
|
||||||
|
|
||||||
extern Adafruit_MCP23X17 mcp1;
|
extern MCP23017 mcp1;
|
||||||
#ifdef IS_BTCLOCK_V8
|
#ifdef IS_BTCLOCK_V8
|
||||||
extern Adafruit_MCP23X17 mcp2;
|
extern MCP23017 mcp2;
|
||||||
#endif
|
#endif
|
||||||
extern Preferences preferences;
|
extern Preferences preferences;
|
||||||
extern std::mutex mcpMutex;
|
extern std::mutex mcpMutex;
|
||||||
|
@ -59,6 +60,9 @@ const PROGMEM int SCREEN_MARKET_CAP = 30;
|
||||||
const PROGMEM int SCREEN_BITAXE_HASHRATE = 80;
|
const PROGMEM int SCREEN_BITAXE_HASHRATE = 80;
|
||||||
const PROGMEM int SCREEN_BITAXE_BESTDIFF = 81;
|
const PROGMEM int SCREEN_BITAXE_BESTDIFF = 81;
|
||||||
|
|
||||||
|
const PROGMEM int SCREEN_MINING_POOL_STATS_HASHRATE = 85;
|
||||||
|
const PROGMEM int SCREEN_MINING_POOL_STATS_EARNINGS = 86;
|
||||||
|
|
||||||
const PROGMEM int SCREEN_COUNTDOWN = 98;
|
const PROGMEM int SCREEN_COUNTDOWN = 98;
|
||||||
const PROGMEM int SCREEN_CUSTOM = 99;
|
const PROGMEM int SCREEN_CUSTOM = 99;
|
||||||
const int SCREEN_COUNT = 7;
|
const int SCREEN_COUNT = 7;
|
||||||
|
@ -73,7 +77,12 @@ const int usPerMinute = 60 * usPerSecond;
|
||||||
extern const char *isrg_root_x1cert;
|
extern const char *isrg_root_x1cert;
|
||||||
|
|
||||||
extern const uint8_t rootca_crt_bundle_start[] asm("_binary_x509_crt_bundle_start");
|
extern const uint8_t rootca_crt_bundle_start[] asm("_binary_x509_crt_bundle_start");
|
||||||
|
// extern const uint8_t ocean_logo_comp[] asm("_binary_ocean_gz_start");
|
||||||
|
// extern const uint8_t ocean_logo_comp_end[] asm("_binary_ocean_gz_end");
|
||||||
|
|
||||||
|
// uint8_t* getOceanIcon();
|
||||||
|
|
||||||
|
// const size_t ocean_logo_size = ocean_logo_comp_end - ocean_logo_comp;
|
||||||
|
|
||||||
const PROGMEM char UPDATE_FIRMWARE = U_FLASH;
|
const PROGMEM char UPDATE_FIRMWARE = U_FLASH;
|
||||||
const PROGMEM char UPDATE_WEBUI = U_SPIFFS;
|
const PROGMEM char UPDATE_WEBUI = U_SPIFFS;
|
||||||
|
|
|
@ -72,6 +72,10 @@ void IRAM_ATTR minuteTimerISR(void *arg) {
|
||||||
vTaskNotifyGiveFromISR(bitaxeFetchTaskHandle, &xHigherPriorityTaskWoken);
|
vTaskNotifyGiveFromISR(bitaxeFetchTaskHandle, &xHigherPriorityTaskWoken);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (miningPoolStatsFetchTaskHandle != NULL) {
|
||||||
|
vTaskNotifyGiveFromISR(miningPoolStatsFetchTaskHandle, &xHigherPriorityTaskWoken);
|
||||||
|
}
|
||||||
|
|
||||||
if (xHigherPriorityTaskWoken == pdTRUE) {
|
if (xHigherPriorityTaskWoken == pdTRUE) {
|
||||||
portYIELD_FROM_ISR();
|
portYIELD_FROM_ISR();
|
||||||
}
|
}
|
||||||
|
|
|
@ -510,7 +510,7 @@ void onApiSettingsPatch(AsyncWebServerRequest *request, JsonVariant &json)
|
||||||
settings["timePerScreen"].as<uint>() * 60);
|
settings["timePerScreen"].as<uint>() * 60);
|
||||||
}
|
}
|
||||||
|
|
||||||
String strSettings[] = {"hostnamePrefix", "mempoolInstance", "nostrPubKey", "nostrRelay", "bitaxeHostname", "nostrZapPubkey", "httpAuthUser", "httpAuthPass", "gitReleaseUrl"};
|
String strSettings[] = {"hostnamePrefix", "mempoolInstance", "nostrPubKey", "nostrRelay", "bitaxeHostname", "miningPoolName", "miningPoolUser", "nostrZapPubkey", "httpAuthUser", "httpAuthPass", "gitReleaseUrl"};
|
||||||
|
|
||||||
for (String setting : strSettings)
|
for (String setting : strSettings)
|
||||||
{
|
{
|
||||||
|
@ -549,7 +549,7 @@ void onApiSettingsPatch(AsyncWebServerRequest *request, JsonVariant &json)
|
||||||
"mowMode", "suffixShareDot", "flOffWhenDark",
|
"mowMode", "suffixShareDot", "flOffWhenDark",
|
||||||
"flAlwaysOn", "flDisable", "flFlashOnUpd",
|
"flAlwaysOn", "flDisable", "flFlashOnUpd",
|
||||||
"mempoolSecure", "useNostr", "bitaxeEnabled",
|
"mempoolSecure", "useNostr", "bitaxeEnabled",
|
||||||
"verticalDesc",
|
"miningPoolStats", "verticalDesc",
|
||||||
"nostrZapNotify", "stagingSource", "httpAuthEnabled"};
|
"nostrZapNotify", "stagingSource", "httpAuthEnabled"};
|
||||||
|
|
||||||
for (String setting : boolSettings)
|
for (String setting : boolSettings)
|
||||||
|
@ -714,6 +714,10 @@ void onApiSettingsGet(AsyncWebServerRequest *request)
|
||||||
root["bitaxeEnabled"] = preferences.getBool("bitaxeEnabled", DEFAULT_BITAXE_ENABLED);
|
root["bitaxeEnabled"] = preferences.getBool("bitaxeEnabled", DEFAULT_BITAXE_ENABLED);
|
||||||
root["bitaxeHostname"] = preferences.getString("bitaxeHostname", DEFAULT_BITAXE_HOSTNAME);
|
root["bitaxeHostname"] = preferences.getString("bitaxeHostname", DEFAULT_BITAXE_HOSTNAME);
|
||||||
|
|
||||||
|
root["miningPoolStats"] = preferences.getBool("miningPoolStats", DEFAULT_MINING_POOL_STATS_ENABLED);
|
||||||
|
root["miningPoolName"] = preferences.getString("miningPoolName", DEFAULT_MINING_POOL_NAME);
|
||||||
|
root["miningPoolUser"] = preferences.getString("miningPoolUser", DEFAULT_MINING_POOL_USER);
|
||||||
|
|
||||||
root["httpAuthEnabled"] = preferences.getBool("httpAuthEnabled", DEFAULT_HTTP_AUTH_ENABLED);
|
root["httpAuthEnabled"] = preferences.getBool("httpAuthEnabled", DEFAULT_HTTP_AUTH_ENABLED);
|
||||||
root["httpAuthUser"] = preferences.getString("httpAuthUser", DEFAULT_HTTP_AUTH_USERNAME);
|
root["httpAuthUser"] = preferences.getString("httpAuthUser", DEFAULT_HTTP_AUTH_USERNAME);
|
||||||
root["httpAuthPass"] = preferences.getString("httpAuthPass", DEFAULT_HTTP_AUTH_PASSWORD);
|
root["httpAuthPass"] = preferences.getString("httpAuthPass", DEFAULT_HTTP_AUTH_PASSWORD);
|
||||||
|
|
Loading…
Reference in a new issue