Compare commits
20 Commits
1f83efe404
...
3531ca36aa
Author | SHA1 | Date |
---|---|---|
Oliver Kennedy | 3531ca36aa | |
Robert Sorić | 05651f6ee3 | |
Robert Sorić | 68850e9d2b | |
Robert Sorić | 5477f30992 | |
Robert Sorić | a84b3c11bd | |
Robert Sorić | 0c0406f929 | |
Robert Sorić | 1e89648446 | |
Robert Sorić | 103e107195 | |
Robert Sorić | b4008a3677 | |
Robert Sorić | 1f6828f991 | |
Robert Sorić | 1db0e2bcb4 | |
Robert Sorić | 9359125120 | |
Zvonimir Haramustek | 6c18b42af2 | |
Zvonimir Haramustek | a57171f55a | |
Zvonimir Haramustek | 57f6c5001a | |
Zvonimir Haramustek | 01b0d1cd54 | |
Steffen Pankratz | 4b71b63179 | |
Steffen Pankratz | ddade182ce | |
Steffen Pankratz | 75d1068cc0 | |
Martin Samuelsson | 478b7c7436 |
|
@ -3,3 +3,4 @@ board_config_*.py
|
|||
init.mpf
|
||||
lib
|
||||
.vscode
|
||||
i2c_scanner.py
|
||||
|
|
Binary file not shown.
|
@ -0,0 +1,38 @@
|
|||
# This example will show you how to use the onboard RTC to preserve time across reboots
|
||||
|
||||
# Include all the required libraries
|
||||
from inkplate10 import Inkplate
|
||||
import time
|
||||
|
||||
# Create Inkplate object in 1-bit mode, black and white colors only
|
||||
# For 2-bit grayscale, see basicGrayscale.py
|
||||
display = Inkplate(Inkplate.INKPLATE_1BIT)
|
||||
|
||||
# Main function
|
||||
if __name__ == "__main__":
|
||||
|
||||
# Initialize the display, needs to be called only once
|
||||
display.begin()
|
||||
|
||||
# Clear the frame buffer
|
||||
display.clearDisplay()
|
||||
|
||||
# This has to be called every time you want to update the screen
|
||||
# Drawing or printing text will have no effect on the display itself before you call this function
|
||||
display.display()
|
||||
|
||||
# This is how to set the RTC's time
|
||||
# Arguments are hour, minute, seconds
|
||||
display.rtcSetTime(9,39,10)
|
||||
# And this is the date
|
||||
# Arguments are weekday, day in month, month and year
|
||||
display.rtcSetDate(5,9,2,2024)
|
||||
|
||||
# Show the set time
|
||||
print(display.rtcGetData())
|
||||
|
||||
# Let's wait 10 seconds
|
||||
time.sleep(10)
|
||||
|
||||
# Let's see if the time has updated
|
||||
print(display.rtcGetData())
|
|
@ -28,14 +28,14 @@ if __name__ == "__main__":
|
|||
display.drawCircle(178, 16, 9, display.WHITE)
|
||||
display.drawCircle(178, 16, 4, display.RED)
|
||||
|
||||
# Draw a red checkerboard pattern
|
||||
# Draw a red checkerboard pattern with a loop
|
||||
for x in range(30):
|
||||
display.fillRect(0 + (5*x*2), 38, 5, 5, display.RED)
|
||||
|
||||
for x in range(30):
|
||||
display.fillRect(5 + (5*x*2), 42, 5, 5, display.RED)
|
||||
|
||||
# Draw some lines
|
||||
# Draw some horizontal lines
|
||||
display.drawLine(0, 49, 214, 49, display.BLACK)
|
||||
display.drawLine(0, 51, 214, 51, display.RED)
|
||||
display.drawLine(0, 53, 214, 53, display.BLACK)
|
||||
|
@ -45,5 +45,6 @@ if __name__ == "__main__":
|
|||
display.drawBitmap(0, 58, soldered_logo, 211, 44, display.RED)
|
||||
|
||||
# Display everything on Inkplate's display
|
||||
# This function must be called after drawing, or else the display won't update
|
||||
# This function must be called after drawing, or else the display won't update
|
||||
# The display flickers when it updates and it takes a while, this is normal
|
||||
display.display()
|
|
@ -9,7 +9,7 @@ from inkplate2 import Inkplate
|
|||
|
||||
# Import the image
|
||||
# It should also be copied to Inkplate when copying other libraries
|
||||
# Check the README!
|
||||
# Check the README for more info
|
||||
from color_image_inkplate2 import color_image_inkplate2
|
||||
|
||||
# Create Inkplate object
|
||||
|
@ -22,7 +22,7 @@ if __name__ == "__main__":
|
|||
display.begin()
|
||||
|
||||
# color_image_inkplate2 is 212x104px, draw it over the whole screen
|
||||
# Arguments are x start, y start, width, height, and then the image buffer
|
||||
# Arguments are: x start, y start, width, height, and then the image buffer
|
||||
display.drawColorImage(0, 0, 212, 104, color_image_inkplate2)
|
||||
|
||||
# Show it on the display
|
||||
|
|
|
@ -7,8 +7,8 @@ import time
|
|||
from inkplate2 import Inkplate
|
||||
|
||||
# Enter your WiFi credentials here
|
||||
ssid = ""
|
||||
password = ""
|
||||
ssid = "Soldered"
|
||||
password = "dasduino"
|
||||
|
||||
# Function which connects to WiFi
|
||||
# More info here: https://docs.micropython.org/en/latest/esp8266/tutorial/network_basics.html
|
||||
|
@ -60,9 +60,12 @@ if __name__ == "__main__":
|
|||
cnt = 0
|
||||
for x in response.split("\n"):
|
||||
display.printText(
|
||||
10, 20 + cnt, x.upper()
|
||||
2, 2 + cnt, x.upper()
|
||||
) # Default font has only upper case letters
|
||||
cnt += 20
|
||||
cnt += 10
|
||||
|
||||
# Also print to terminal because the screen is small
|
||||
print(x)
|
||||
|
||||
# Display image from buffer
|
||||
display.display()
|
|
@ -0,0 +1,38 @@
|
|||
# This example will show you how to use the onboard RTC to preserve time across reboots
|
||||
|
||||
# Include all the required libraries
|
||||
from inkplate5 import Inkplate
|
||||
import time
|
||||
|
||||
# Create Inkplate object in 1-bit mode, black and white colors only
|
||||
# For 2-bit grayscale, see basicGrayscale.py
|
||||
display = Inkplate(Inkplate.INKPLATE_1BIT)
|
||||
|
||||
# Main function
|
||||
if __name__ == "__main__":
|
||||
|
||||
# Initialize the display, needs to be called only once
|
||||
display.begin()
|
||||
|
||||
# Clear the frame buffer
|
||||
display.clearDisplay()
|
||||
|
||||
# This has to be called every time you want to update the screen
|
||||
# Drawing or printing text will have no effect on the display itself before you call this function
|
||||
display.display()
|
||||
|
||||
# This is how to set the RTC's time
|
||||
# Arguments are hour, minute, seconds
|
||||
display.rtcSetTime(9,39,10)
|
||||
# And this is the date
|
||||
# Arguments are weekday, day in month, month and year
|
||||
display.rtcSetDate(5,9,2,2024)
|
||||
|
||||
# Show the set time
|
||||
print(display.rtcGetData())
|
||||
|
||||
# Let's wait 10 seconds
|
||||
time.sleep(10)
|
||||
|
||||
# Let's see if the time has updated
|
||||
print(display.rtcGetData())
|
|
@ -0,0 +1,38 @@
|
|||
# This example will show you how to use the onboard RTC to preserve time across reboots
|
||||
|
||||
# Include all the required libraries
|
||||
from inkplate6 import Inkplate
|
||||
import time
|
||||
|
||||
# Create Inkplate object in 1-bit mode, black and white colors only
|
||||
# For 2-bit grayscale, see basicGrayscale.py
|
||||
display = Inkplate(Inkplate.INKPLATE_1BIT)
|
||||
|
||||
# Main function
|
||||
if __name__ == "__main__":
|
||||
|
||||
# Initialize the display, needs to be called only once
|
||||
display.begin()
|
||||
|
||||
# Clear the frame buffer
|
||||
display.clearDisplay()
|
||||
|
||||
# This has to be called every time you want to update the screen
|
||||
# Drawing or printing text will have no effect on the display itself before you call this function
|
||||
display.display()
|
||||
|
||||
# This is how to set the RTC's time
|
||||
# Arguments are hour, minute, seconds
|
||||
display.rtcSetTime(9,39,10)
|
||||
# And this is the date
|
||||
# Arguments are weekday, day in month, month and year
|
||||
display.rtcSetDate(5,9,2,2024)
|
||||
|
||||
# Show the set time
|
||||
print(display.rtcGetData())
|
||||
|
||||
# Let's wait 10 seconds
|
||||
time.sleep(10)
|
||||
|
||||
# Let's see if the time has updated
|
||||
print(display.rtcGetData())
|
|
@ -1,5 +1,5 @@
|
|||
# This example shows you how to use the touchpads
|
||||
# Only older models of Inkplate10 (e-Radionica Inkplate 10) have them
|
||||
# Only older models of Inkplate6 (e-Radionica Inkplate 6) have them
|
||||
|
||||
# Include required libraries
|
||||
from inkplate6 import Inkplate
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
# This example will show you how to use the onboard RTC to preserve time across reboots
|
||||
|
||||
# Include all the required libraries
|
||||
from inkplate6COLOR import Inkplate
|
||||
import time
|
||||
|
||||
# Create Inkplate object in 1-bit mode, black and white colors only
|
||||
# For 2-bit grayscale, see basicGrayscale.py
|
||||
display = Inkplate(Inkplate.INKPLATE_1BIT)
|
||||
|
||||
# Main function
|
||||
if __name__ == "__main__":
|
||||
|
||||
# Initialize the display, needs to be called only once
|
||||
display.begin()
|
||||
|
||||
# Clear the frame buffer
|
||||
display.clearDisplay()
|
||||
|
||||
# This has to be called every time you want to update the screen
|
||||
# Drawing or printing text will have no effect on the display itself before you call this function
|
||||
display.display()
|
||||
|
||||
# This is how to set the RTC's time
|
||||
# Arguments are hour, minute, seconds
|
||||
display.rtcSetTime(9,39,10)
|
||||
# And this is the date
|
||||
# Arguments are weekday, day in month, month and year
|
||||
display.rtcSetDate(5,9,2,2024)
|
||||
|
||||
# Show the set time
|
||||
print(display.rtcGetData())
|
||||
|
||||
# Let's wait 10 seconds
|
||||
time.sleep(10)
|
||||
|
||||
# Let's see if the time has updated
|
||||
print(display.rtcGetData())
|
|
@ -0,0 +1,38 @@
|
|||
# This example will show you how to use the onboard RTC to preserve time across reboots
|
||||
|
||||
# Include all the required libraries
|
||||
from inkplate6PLUS import Inkplate
|
||||
import time
|
||||
|
||||
# Create Inkplate object in 1-bit mode, black and white colors only
|
||||
# For 2-bit grayscale, see basicGrayscale.py
|
||||
display = Inkplate(Inkplate.INKPLATE_1BIT)
|
||||
|
||||
# Main function
|
||||
if __name__ == "__main__":
|
||||
|
||||
# Initialize the display, needs to be called only once
|
||||
display.begin()
|
||||
|
||||
# Clear the frame buffer
|
||||
display.clearDisplay()
|
||||
|
||||
# This has to be called every time you want to update the screen
|
||||
# Drawing or printing text will have no effect on the display itself before you call this function
|
||||
display.display()
|
||||
|
||||
# This is how to set the RTC's time
|
||||
# Arguments are hour, minute, seconds
|
||||
display.rtcSetTime(9,39,10)
|
||||
# And this is the date
|
||||
# Arguments are weekday, day in month, month and year
|
||||
display.rtcSetDate(5,9,2,2024)
|
||||
|
||||
# Show the set time
|
||||
print(display.rtcGetData())
|
||||
|
||||
# Let's wait 10 seconds
|
||||
time.sleep(10)
|
||||
|
||||
# Let's see if the time has updated
|
||||
print(display.rtcGetData())
|
|
@ -0,0 +1,38 @@
|
|||
# This example will show you how to use the onboard RTC to preserve time across reboots
|
||||
|
||||
# Include all the required libraries
|
||||
from soldered_inkplate10 import Inkplate
|
||||
import time
|
||||
|
||||
# Create Inkplate object in 1-bit mode, black and white colors only
|
||||
# For 2-bit grayscale, see basicGrayscale.py
|
||||
display = Inkplate(Inkplate.INKPLATE_1BIT)
|
||||
|
||||
# Main function
|
||||
if __name__ == "__main__":
|
||||
|
||||
# Initialize the display, needs to be called only once
|
||||
display.begin()
|
||||
|
||||
# Clear the frame buffer
|
||||
display.clearDisplay()
|
||||
|
||||
# This has to be called every time you want to update the screen
|
||||
# Drawing or printing text will have no effect on the display itself before you call this function
|
||||
display.display()
|
||||
|
||||
# This is how to set the RTC's time
|
||||
# Arguments are hour, minute, seconds
|
||||
display.rtcSetTime(9,39,10)
|
||||
# And this is the date
|
||||
# Arguments are weekday, day in month, month and year
|
||||
display.rtcSetDate(5,9,2,2024)
|
||||
|
||||
# Show the set time
|
||||
print(display.rtcGetData())
|
||||
|
||||
# Let's wait 10 seconds
|
||||
time.sleep(10)
|
||||
|
||||
# Let's see if the time has updated
|
||||
print(display.rtcGetData())
|
|
@ -0,0 +1,38 @@
|
|||
# This example will show you how to use the onboard RTC to preserve time across reboots
|
||||
|
||||
# Include all the required libraries
|
||||
from soldered_inkplate6 import Inkplate
|
||||
import time
|
||||
|
||||
# Create Inkplate object in 1-bit mode, black and white colors only
|
||||
# For 2-bit grayscale, see basicGrayscale.py
|
||||
display = Inkplate(Inkplate.INKPLATE_1BIT)
|
||||
|
||||
# Main function
|
||||
if __name__ == "__main__":
|
||||
|
||||
# Initialize the display, needs to be called only once
|
||||
display.begin()
|
||||
|
||||
# Clear the frame buffer
|
||||
display.clearDisplay()
|
||||
|
||||
# This has to be called every time you want to update the screen
|
||||
# Drawing or printing text will have no effect on the display itself before you call this function
|
||||
display.display()
|
||||
|
||||
# This is how to set the RTC's time
|
||||
# Arguments are hour, minute, seconds
|
||||
display.rtcSetTime(9,39,10)
|
||||
# And this is the date
|
||||
# Arguments are weekday, day in month, month and year
|
||||
display.rtcSetDate(5,9,2,2024)
|
||||
|
||||
# Show the set time
|
||||
print(display.rtcGetData())
|
||||
|
||||
# Let's wait 10 seconds
|
||||
time.sleep(10)
|
||||
|
||||
# Let's see if the time has updated
|
||||
print(display.rtcGetData())
|
|
@ -0,0 +1,38 @@
|
|||
# This example will show you how to use the onboard RTC to preserve time across reboots
|
||||
|
||||
# Include all the required libraries
|
||||
from soldered_inkplate6PLUS import Inkplate
|
||||
import time
|
||||
|
||||
# Create Inkplate object in 1-bit mode, black and white colors only
|
||||
# For 2-bit grayscale, see basicGrayscale.py
|
||||
display = Inkplate(Inkplate.INKPLATE_1BIT)
|
||||
|
||||
# Main function
|
||||
if __name__ == "__main__":
|
||||
|
||||
# Initialize the display, needs to be called only once
|
||||
display.begin()
|
||||
|
||||
# Clear the frame buffer
|
||||
display.clearDisplay()
|
||||
|
||||
# This has to be called every time you want to update the screen
|
||||
# Drawing or printing text will have no effect on the display itself before you call this function
|
||||
display.display()
|
||||
|
||||
# This is how to set the RTC's time
|
||||
# Arguments are hour, minute, seconds
|
||||
display.rtcSetTime(9,39,10)
|
||||
# And this is the date
|
||||
# Arguments are weekday, day in month, month and year
|
||||
display.rtcSetDate(5,9,2,2024)
|
||||
|
||||
# Show the set time
|
||||
print(display.rtcGetData())
|
||||
|
||||
# Let's wait 10 seconds
|
||||
time.sleep(10)
|
||||
|
||||
# Let's see if the time has updated
|
||||
print(display.rtcGetData())
|
|
@ -25,19 +25,14 @@ if __name__ == "__main__":
|
|||
|
||||
# Frontlight strength can be set from values 0 to 64
|
||||
# For example:
|
||||
display.setFrontlight(34)
|
||||
display.setFrontlight(10)
|
||||
|
||||
# Wait 3 seconds
|
||||
time.sleep(3)
|
||||
|
||||
# Slowly gradually increase the frontlight and then decrease it, infinitely
|
||||
# Slowly gradually increase the frontlight, infinitely
|
||||
while(True):
|
||||
# First, increase the brightness gradually
|
||||
for i in range(0, 60):
|
||||
display.setFrontlight(i)
|
||||
time.sleep(0.5) # Wait for 500ms
|
||||
|
||||
# Then, decrease
|
||||
for i in range(60, 0):
|
||||
display.setFrontlight(i)
|
||||
time.sleep(0.5) # Wait for 500ms
|
||||
time.sleep(0.2) # Wait for 200ms
|
|
@ -0,0 +1,48 @@
|
|||
BOARD=soldered_inkplate6PLUS
|
||||
GPIO=PCAL6416A
|
||||
|
||||
all: lib
|
||||
|
||||
lib: installed/ub_sched.py installed/ub_devices.py installed/conf_room_layout.py
|
||||
|
||||
main: lib
|
||||
python3 pyboard.py --device /dev/ttyUSB0 -f cp conf_room/main.py :
|
||||
screen /dev/ttyUSB0 115200
|
||||
|
||||
installed/ub_sched.py: conf_room/ub_sched.py
|
||||
python3 pyboard.py --device /dev/ttyUSB0 -f cp conf_room/ub_sched.py :
|
||||
cp conf_room/ub_sched.py installed/
|
||||
|
||||
installed/ub_devices.py: conf_room/ub_devices.py
|
||||
python3 pyboard.py --device /dev/ttyUSB0 -f cp conf_room/ub_devices.py :
|
||||
cp conf_room/ub_devices.py installed/
|
||||
|
||||
installed/conf_room_layout.py: conf_room/conf_room_layout.py
|
||||
python3 pyboard.py --device /dev/ttyUSB0 -f cp conf_room/conf_room_layout.py :
|
||||
cp conf_room/conf_room_layout.py installed/
|
||||
|
||||
test: lib
|
||||
# ./pyboard.py --device /dev/ttyUSB0 -c 'from ub_sched import RoomSchedule, ROOM_CAPEN_212A; import ub_devices; ub_devices.connect(); print(RoomSchedule(ROOM_CAPEN_212A).fetch())'
|
||||
./pyboard.py --device /dev/ttyUSB0 -c 'from conf_room_layout import refresh; refresh()'
|
||||
|
||||
ping:
|
||||
./pyboard.py --device /dev/ttyUSB0 -c 'print("pong")' #--follow
|
||||
|
||||
connect_wifi: lib
|
||||
./pyboard.py --device /dev/ttyUSB0 -c 'import ub_devices; ub_devices.connect();' #--follow
|
||||
|
||||
setup_board:
|
||||
python3 -m esptool --port /dev/ttyUSB0 erase_flash
|
||||
python3 -m esptool --port /dev/ttyUSB0 write_flash \
|
||||
-z 0x1000 esp32spiram-20220117-v1.18.bin
|
||||
python3 pyboard.py --device /dev/ttyUSB0 -f cp \
|
||||
${GPIO}.py ${BOARD}.py image.py shapes.py gfx.py \
|
||||
gfx_standard_font_01.py soldered_logo.py :
|
||||
|
||||
install_prereqs:
|
||||
pip3 install esptool
|
||||
|
||||
connect_serial:
|
||||
screen /dev/ttyUSB0 115200
|
||||
|
||||
.PHONY: all lib main test ping setup_board install_prereqs connect_serial connect_wifi
|
|
@ -1,6 +1,6 @@
|
|||
# Driver for the PCAL6416A GPIO expander
|
||||
# Used in the drivers for the new Soldered Inkplate boards
|
||||
|
||||
# MicroPython driver for the PCAL6416A GPIO expander
|
||||
# By Soldered Electronics
|
||||
# Based on the original contribution by https://github.com/tve
|
||||
from machine import Pin as mPin
|
||||
from micropython import const
|
||||
|
||||
|
|
52
README.md
52
README.md
|
@ -5,7 +5,7 @@
|
|||
The Micropython modules for the Inkplate product family can befound in this repository. Inkplate is a series of powerful, Wi-Fi and Bluetooth enabled, ESP32-based ePaper display products. Its main feature is simplicity. Just plug in a USB cable, load the MicroPython firmware and the required libraries and run your script on Inkplate itself. The Inkplate product family currently includes Inkplate 10, Inkplate 6 and Inkplate 6PLUS, Inkplate 6COLOR and Inkplate 2.
|
||||
Inkplate 6 was crowdfunded on [Crowd Supply](https://www.crowdsupply.com/e-radionica/inkplate-6), as well as [Inkplate 10](https://www.crowdsupply.com/e-radionica/inkplate-10), [Inkplate 6PLUS](https://www.crowdsupply.com/e-radionica/inkplate-6plus) and [Inkplate 6COLOR](https://www.crowdsupply.com/soldered/inkplate-6color). Inkplate 2 was funded on [Kickstarter](https://www.kickstarter.com/projects/solderedelectronics/inkplate-2-a-easy-to-use-arduino-compatible-e-paper).
|
||||
|
||||
All available to purchase from [soldered.com](https://soldered.com/categories/inkplate/).
|
||||
All available to purchase from [Soldered.com](https://soldered.com/categories/inkplate/).
|
||||
|
||||
Original effort to enable MicroPython support for Inkplate was done by [tve](https://github.com/tve/micropython-inkplate6). Thank you!
|
||||
|
||||
|
@ -14,27 +14,33 @@ Original effort to enable MicroPython support for Inkplate was done by [tve](htt
|
|||
In order to get started with running your code on Inkplate, follow these steps:
|
||||
1. Install esptool - the command line tool used to upload firmware to the ESP32. Get it from [here](https://github.com/espressif/esptool) (https://github.com/espressif/esptool). Also, install PySerial as it's a requirement. You can download PySerial [here](https://pypi.org/project/pyserial/) (https://pypi.org/project/pyserial). Place them in a both in a working directory.
|
||||
|
||||
2. Download or clone this repository by clicking Code -> Download as .zip. Extract to your desired working directory for your MicroPython files, make it a different one than the esptool directory.
|
||||
2. Download this repository by clicking Code -> Download as .zip, or clone it. Extract to your desired working directory for your MicroPython files, make it a different one than the esptool directory.
|
||||
|
||||
3. Copy the esp32spiram-20220117-v1.18.bin file to the esptool directory from the MicroPython directory. Open your terminal/command prompt in the esptool directory.
|
||||
3. Copy the esp32spiram-20220117-v1.18.bin file to the esptool directory from the MicroPython directory. Then,open your terminal/command prompt in the esptool directory.
|
||||
|
||||
4. We need to flash the MicroPython firmware to Inkplate. It is reccomended to flash the one supplied in this repository that you have copied in the previous step, version 1.18. To do this, connect Inkplate via USB-C and first erase the flash memory by running this command:
|
||||
4. Now we need to flash the MicroPython firmware to Inkplate. It is reccomended to flash the one supplied in this repository that you have copied in the previous step, version 1.18. To do this, connect Inkplate via USB-C and first erase the flash memory by running this command:
|
||||
```
|
||||
//Linux/Mac
|
||||
// Linux/Mac
|
||||
python3 esptool.py --port /dev/cu.usbserial-1420 erase_flash
|
||||
|
||||
//Windows
|
||||
// Windows
|
||||
python esptool.py --port COM5 erase_flash
|
||||
```
|
||||
|
||||
If you're having problems on Windows, use:
|
||||
```
|
||||
esptool --port COM5 erase_flash
|
||||
```
|
||||
|
||||
**NOTE:** You should change the serial port listed here to the one which corresponds to your connected Inkplate device.
|
||||
|
||||
Now it's possible to flash MicroPython firmware. Do so by running this command:
|
||||
```
|
||||
//Linux/Mac
|
||||
// Linux/Mac
|
||||
python3 esptool.py --chip esp32 --port /dev/cu.usbserial-1420 write_flash -z 0x1000 esp32spiram-20220117-v1.18.bin
|
||||
// If you're having problems on Mac, use a slower baud rate with the flag "-b 115200"
|
||||
|
||||
//Windows
|
||||
// Windows
|
||||
python esptool.py --chip esp32 --port COM5 write_flash -z 0x1000 esp32spiram-20220117-v1.18.bin
|
||||
```
|
||||
|
||||
|
@ -43,11 +49,11 @@ python esptool.py --chip esp32 --port COM5 write_flash -z 0x1000 esp32spiram-202
|
|||
5. Open a terminal in your MicroPython folder. Now, it's required to copy all the library files and drivers for your Inkplate board, so your MicroPython script can run. Do so with the following command:
|
||||
|
||||
```
|
||||
//Linux/Mac
|
||||
// Linux/Mac
|
||||
python3 pyboard.py --device /dev/ttyUSB0 -f cp mcp23017.py inkplate6.py image.py shapes.py gfx.py gfx_standard_font_01.py soldered_logo.py :
|
||||
|
||||
//Windows
|
||||
//This one might need to be started twice
|
||||
// Windows
|
||||
// This one might need to be started twice
|
||||
python pyboard.py --device COM5 -f cp inkplate6.py gfx.py gfx_standard_font_01.py mcp23017.py PCAL6416A.py image.py shapes.py soldered_logo.py :
|
||||
```
|
||||
|
||||
|
@ -58,10 +64,10 @@ In this command you also need to include all the files your Python script uses (
|
|||
7. Finally, it's time to run the MicroPython script which will actually run on the device. To demonstrate, we will run the basicBW.py example for Inkplate 6. To run the script, execute the following command:
|
||||
|
||||
```
|
||||
//Linux/Mac
|
||||
// Linux/Mac
|
||||
python3 pyboard.py --device /dev/ttyUSB0 "Examples/Inkplate6/basicBW.py"
|
||||
|
||||
//Windows
|
||||
// Windows
|
||||
python pyboard.py --device COM5 "Examples/Inkplate6/basicBW.py"
|
||||
```
|
||||
|
||||
|
@ -71,20 +77,22 @@ You can try other examples which will show you all the features of the device.
|
|||
### Code examples
|
||||
|
||||
There are several examples which will indicate all the functions you can use in your own script:
|
||||
* The basic examples show you drawing shapes, lines and text on the screen in different colors, also a bitmap image in a single color (color image drawing with dithering will be supported soon!)
|
||||
* The basic examples show you drawing shapes, lines and text on the screen in different colors, also a bitmap image in a single color
|
||||
* The network examples show you how to use the network features like doing a GET request and downloading a file
|
||||
* The batteryAndTemperatureRead examples show you how to read the internal battery status and the temperature from the internal sensor
|
||||
* The exampleSD example shows you how to read image files and text from the SD card
|
||||
* The gpio_expander example shows how to use the GPIO expander on new Inkplate models
|
||||
* The touchpad examples show you how to use the touchpad on older Inkplates
|
||||
|
||||
More information is provided in the examples themselves in the shape of comments.
|
||||
|
||||
### Documentation
|
||||
|
||||
Find Inkplate documentation [here](https://inkplate.readthedocs.io/).
|
||||
|
||||
### Battery power
|
||||
|
||||
Inkplate boards has two options for powering it. First one is obvious - USB port at side of the board. Just plug any micro USB cable and you are good to go. Second option is battery. Supported batteries are standard Li-Ion/Li-Poly batteries with 3.7V nominal voltage. Connector for the battery is standard 2.00mm pitch JST connector (except on Inkplate 2, it uses SMD solder pads for battery terminals). The onboard charger will charge the battery with 500mA when USB is plugged at the same time. You can use battery of any size or capacity if you don't have a enclosure. If you are using our enclosure, battery size shouldn't exceed 90mm x 40mm (3.5 x 1.57 inch) and 5mm (0.19 inch) in height (excluding Inkplate 2, it uses [this battery](https://soldered.com/product/li-ion-baterija-600mah-3-7v/). [This battery](https://soldered.com/product/li-ion-battery-1200mah-3-7v/) is good fit for the Inkplate. Also, Inkplate's hardware is specially optimized for low power consumption in deep sleep mode, making it extremely suitable for battery applications.
|
||||
Inkplate boards have two options for powering it. The first one is obvious - USB port at side of the board. Just plug any microUSB/USB-C (depending on your board version) cable and you are good to go. The second option is using a battery. Supported batteries are standard Li-Ion/Li-Poly batteries with a 3.7V nominal voltage. Connector for the battery is standard 2.00mm pitch JST connector (except on Inkplate 2, it uses SMD solder pads for battery terminals). The onboard charger will charge the battery with 500mA when USB is plugged at the same time. You can use battery of any size or capacity if you don't have a enclosure. If you are using our enclosure, battery size shouldn't exceed 90mm x 40mm (3.5 x 1.57 inch) and 5mm (0.19 inch) in height (excluding Inkplate 2, it uses [this battery](https://soldered.com/product/li-ion-baterija-600mah-3-7v/). [This battery](https://soldered.com/product/li-ion-battery-1200mah-3-7v/) is a good fit for all Inkplate models. Also, Inkplate's hardware is specially optimized for low power consumption in deep sleep mode, making it extremely suitable for battery applications.
|
||||
|
||||
#### ⚠️ WARNING
|
||||
Please check the polarity on the battery JST connector! Some batteries that can be purchased from the web have reversed polarity that can damage Inkplate board! You are safe if you are using the pouch battery from [soldered.com](https://soldered.com/categories/power-sources-batteries/batteries/lithium-batteries/) or Inkplate with the built-in battery .
|
||||
|
@ -102,19 +110,17 @@ All of Inkplate-related development is open-sourced:
|
|||
|
||||
- [Arduino library](https://github.com/SolderedElectronics/Inkplate-Arduino-library)
|
||||
- Hardware design:
|
||||
- Soldered Inkplate 2 (comming soon!)
|
||||
- Soldered Inkplate 6 (comming soon!)
|
||||
- Soldered Inkplate 6PLUS (comming soon!)
|
||||
- [Soldered Inkplate 2](https://github.com/SolderedElectronics/Soldered-Inkplate-2-hardware-design)
|
||||
- [Soldered Inkplate 6](https://github.com/SolderedElectronics/Soldered-Inkplate-6-hardware-design)
|
||||
- [Soldered Inkplate 6PLUS](https://github.com/SolderedElectronics/Soldered-Inkplate-6PLUS-hardware-design)
|
||||
- [Soldered Inkplate 10](https://github.com/SolderedElectronics/Soldered-Inkplate-10-hardware-design)
|
||||
- Soldered Inkplate 6COLOR (comming soon!)
|
||||
- [Soldered Inkplate 6COLOR](https://github.com/SolderedElectronics/Soldered-Inkplate-6COLOR-hardware-design)
|
||||
- [e-radionica.com Inkplate 6](https://github.com/SolderedElectronics/Inkplate-6-hardware)
|
||||
- [e-radionica.com Inkplate 10](https://github.com/SolderedElectronics/Inkplate-10-hardware)
|
||||
- [e-radionica.com Inkplate 6PLUS](https://github.com/SolderedElectronics/Inkplate-6PLUS-Hardware)
|
||||
- e-radionica.com Inkplate 6COLOR (comming soon!)
|
||||
- [micropython Inkplate](https://github.com/SolderedElectronics/Inkplate-micropython)
|
||||
- [OSHWA cerfiticates](https://certification.oshwa.org/list.html?q=inkplate)
|
||||
|
||||
### Where to buy & other
|
||||
### Where to buy
|
||||
|
||||
Inkplate boards are available for purchase via:
|
||||
|
||||
|
@ -122,4 +128,4 @@ Inkplate boards are available for purchase via:
|
|||
- [Crowd Supply](https://www.crowdsupply.com/soldered)
|
||||
- [Mouser](https://hr.mouser.com/Search/Refine?Keyword=inkplate)
|
||||
|
||||
For all questions and issues please reach us via [e-mail](mailto:hello@soldered.com) or our [contact form](https://soldered.com/contact/).
|
||||
For all questions and issues please reach us via [e-mail](mailto:hello@soldered.com) or our [contact form](https://soldered.com/contact/).
|
||||
|
|
|
@ -1,105 +1,105 @@
|
|||
color_image_small = bytearray(
|
||||
b"\x55\x15\x51\x55\x45\x54\x54\x55\x15\x54\x54\x55\x45\x55\x15\x51\x10\x44\x44\x10\x42\x04\x20\x10\x44\x44\x81\x04\x10\x41\x08\x10\x44\x55\x55\x54\x55\x54\x55\x55\x55\x55\x51\x55\x15\x55\x55\x55\x55\x55\x55\x55\x55"
|
||||
b"\x44\x51\x15\x11\x54\x45\x45\x45\x44\x45\x45\x44\x51\x11\x51\x14\x44\x10\x41\x04\x10\x41\x04\x04\x10\x41\x10\x41\x04\x10\x41\x04\x11\x04\x44\x45\x44\x45\x45\x11\x11\x11\x15\x11\x51\x44\x51\x11\x44\x45\x11\x11\x45"
|
||||
b"\x55\x15\x45\x44\x45\x45\x14\x51\x55\x51\x51\x55\x15\x54\x54\x44\x01\x04\x11\x10\x41\x04\x11\x11\x04\x44\x44\x10\x41\x21\x10\x41\x10\x44\x55\x51\x55\x54\x54\x55\x55\x55\x51\x55\x15\x55\x15\x54\x55\x51\x55\x55\x51"
|
||||
b"\x45\x44\x51\x55\x44\x51\x51\x54\x44\x54\x54\x45\x51\x15\x14\x41\x10\x41\x04\x44\x10\x41\x00\x00\x40\x44\x44\x44\x10\x41\x04\x10\x44\x44\x44\x54\x51\x45\x45\x44\x51\x44\x55\x15\x51\x15\x54\x55\x45\x15\x14\x51\x15"
|
||||
b"\x51\x55\x14\x44\x55\x15\x15\x15\x15\x15\x15\x51\x15\x45\x11\x10\x04\x10\x48\x04\x10\x41\x11\x10\x11\x04\x11\x04\x44\x10\x41\x10\x10\x44\x55\x15\x45\x14\x54\x55\x15\x55\x11\x51\x15\x45\x15\x11\x51\x51\x55\x15\x51"
|
||||
b"\x45\x11\x55\x55\x11\x51\x45\x45\x45\x45\x44\x55\x44\x51\x44\x04\x42\x04\x11\x11\x04\x10\x10\x44\x40\x41\x11\x10\x41\x04\x11\x04\x44\x44\x04\x51\x51\x55\x45\x45\x51\x15\x55\x55\x51\x51\x51\x55\x15\x15\x15\x51\x55"
|
||||
b"\x51\x55\x11\x11\x54\x54\x51\x51\x58\x91\x55\x11\x55\x14\x41\x00\x10\x41\x01\x01\x11\x04\x04\x04\x10\x44\x10\x44\x10\x41\x04\x41\x01\x04\x44\x51\x15\x11\x54\x54\x55\x44\x51\x11\x15\x15\x15\x11\x51\x55\x45\x15\x11"
|
||||
b"\x55\x11\x55\x54\x55\x15\x54\x54\x46\xa8\x85\x44\x45\x44\x44\x44\x40\x10\x44\x44\x40\x44\x41\x01\x04\x01\x04\x44\x44\x10\x40\x44\x40\x41\x11\x15\x51\x54\x45\x45\x44\x55\x15\x55\x51\x51\x51\x55\x15\x44\x55\x51\x55"
|
||||
b"\x45\x15\x11\x15\x11\x44\x45\x11\x5a\xaa\xa2\x55\x44\x44\x00\x41\x04\x04\x00\x41\x11\x04\x10\x44\x10\x44\x44\x11\x04\x44\x44\x10\x11\x04\x44\x44\x55\x15\x54\x54\x55\x45\x51\x44\x55\x15\x15\x15\x51\x55\x44\x54\x55"
|
||||
b"\x51\x51\x54\x51\x54\x55\x51\x54\x46\xa2\xaa\x28\x54\x41\x11\x04\x11\x01\x10\x10\x44\x41\x04\x10\x41\x00\x11\x11\x11\x04\x11\x04\x41\x04\x04\x44\x45\x44\x45\x45\x45\x51\x54\x55\x45\x51\x51\x51\x14\x51\x55\x15\x11"
|
||||
b"\x54\x55\x15\x14\x45\x44\x54\x45\x5a\x9a\x2a\xa8\x88\x40\x10\x41\x00\x40\x04\x44\x10\x44\x41\x04\x10\x44\x40\x41\x10\x41\x01\x04\x10\x41\x10\x44\x51\x55\x54\x54\x54\x54\x45\x44\x54\x55\x14\x55\x45\x15\x11\x51\x55"
|
||||
b"\x45\x45\x45\x45\x51\x55\x15\x14\x5a\xaa\x8a\x2a\xaa\x28\x40\x10\x44\x11\x04\x01\x04\x41\x10\x41\x04\x20\x10\x10\x44\x44\x44\x41\x04\x41\x04\x11\x14\x45\x15\x15\x45\x45\x54\x55\x45\x45\x55\x11\x51\x51\x55\x15\x14"
|
||||
b"\x51\x51\x51\x51\x15\x12\x8a\xaa\x22\x89\xaa\xa2\xa2\xaa\x28\x41\x01\xa0\x41\x10\x41\x10\x11\x10\x41\x04\x04\x44\x10\x44\x10\x10\x44\x10\x41\x10\x44\x55\x45\x45\x14\x54\x55\x14\x54\x54\x45\x54\x55\x15\x15\x51\x51"
|
||||
b"\x54\x54\x54\x55\x44\x5a\xa2\x22\xaa\xa9\xa2\x6a\x2a\x8a\x8a\x2a\x9a\x99\x99\xa1\x10\x44\x61\x04\x10\x41\x10\x01\x04\x41\x11\x11\x04\x44\x44\x11\x11\x11\x51\x51\x55\x45\x11\x45\x45\x45\x51\x45\x11\x51\x51\x15\x45"
|
||||
b"\x45\x45\x15\x11\x55\x18\xaa\x2a\x28\x99\x9a\x2a\xa8\xa2\xa6\xa6\xaa\x2a\x66\x9a\x86\x05\xa6\x11\x04\x10\x04\x41\x04\x11\x04\x10\x41\x04\x11\x04\x44\x51\x15\x15\x14\x55\x55\x54\x54\x54\x54\x55\x55\x15\x15\x51\x55"
|
||||
b"\x54\x55\x45\x54\x45\x46\x22\xa2\x8a\x2a\x66\xa2\x8a\x99\xaa\x6a\x66\xaa\x69\xa8\xa9\x46\xa1\x90\x41\x04\x40\x10\x41\x10\x44\x44\x10\x44\x40\x44\x11\x14\x51\x45\x45\x44\x44\x45\x45\x45\x45\x44\x45\x51\x51\x15\x11"
|
||||
b"\x45\x44\x51\x14\x51\x5a\xa8\xa8\xaa\x88\xa1\x0a\x99\xa8\xa2\xa6\x66\x25\x9a\xaa\xaa\x66\x1a\xa4\x10\x10\x11\x04\x10\x44\x41\x04\x44\x41\x11\x01\x11\x05\x14\x54\x54\x55\x55\x51\x51\x54\x54\x55\x51\x15\x15\x51\x55"
|
||||
b"\x51\x51\x55\x45\x14\x48\x8a\x2a\x22\xa8\xa8\x80\xa2\x8a\xa6\x59\x9a\xa9\x96\x28\x99\xa9\xa9\x94\x41\x04\x10\x40\x44\x04\x10\x41\x04\x10\x44\x44\x10\x44\x55\x45\x45\x45\x11\x14\x55\x15\x45\x45\x15\x51\x51\x54\x51"
|
||||
b"\x54\x54\x44\x55\x45\x5a\xa2\xa2\xa2\x2a\x2a\xa6\xa8\x0a\x19\x96\x62\xaa\x66\x8a\xaa\x5a\x69\x52\x10\x41\x04\x04\x01\x01\x11\x10\x41\x04\x41\x11\x04\x44\x41\x51\x54\x55\x55\x45\x45\x44\x54\x55\x51\x15\x15\x15\x15"
|
||||
b"\x45\x15\x55\x44\x54\x44\xaa\x28\xa8\x88\x88\x8a\x69\x80\x16\x66\x98\x86\x99\xa8\x69\x99\xa5\x91\x04\x10\x41\x04\x81\x10\x44\x44\x44\x44\x10\x41\x11\x11\x14\x54\x45\x44\x45\x51\x51\x55\x45\x44\x55\x51\x51\x51\x51"
|
||||
b"\x51\x44\x51\x45\x45\x5a\x22\x8a\x2a\xa2\xa8\xa2\xaa\xaa\x02\x69\xaa\xaa\x99\xaa\x95\x9a\x99\x50\x41\x04\x10\x40\x40\x44\x10\x41\x04\x01\x11\x11\x04\x11\x05\x15\x54\x55\x51\x15\x14\x44\x54\x55\x11\x15\x15\x15\x15"
|
||||
b"\x55\x55\x14\x54\x51\x12\xa8\xaa\x88\x8a\x2a\x2a\x66\x4a\xa8\x44\x8a\x2a\xaa\x66\x99\xaa\x66\x24\x10\x41\x04\x10\x44\x01\x04\x11\x11\x11\x01\x04\x41\x10\x44\x44\x45\x45\x15\x51\x55\x55\x15\x45\x55\x51\x51\x51\x45"
|
||||
b"\x44\x45\x45\x45\x15\x58\x8a\x88\xa8\xa2\x88\xa2\xa9\xa2\x8a\xa8\x00\x88\xaa\x69\x96\x58\xa6\xaa\x88\x44\x01\x04\x01\x10\x41\x10\x41\x10\x44\x41\x11\x04\x44\x45\x54\x55\x44\x55\x11\x11\x44\x54\x44\x55\x15\x15\x51"
|
||||
b"\x55\x51\x51\x55\x51\x12\xa2\xaa\x1a\xa8\xa2\x8a\x6a\x2a\xa2\x8a\xa8\x01\x26\x96\x59\x99\xa6\x22\xa8\xa2\x10\x41\x10\x04\x10\x44\x10\x44\x10\x44\x10\x44\x44\x44\x45\x44\x55\x11\x55\x54\x55\x45\x55\x11\x51\x51\x15"
|
||||
b"\x44\x54\x54\x44\x55\x1a\x28\x89\x88\x8a\x28\xa2\x26\x88\xa8\xa2\x22\xa0\x02\x66\x9a\x99\x9a\xa8\x8a\x2a\xa2\x04\x04\x41\x04\x04\x44\x11\x04\x11\x04\x41\x04\x44\x51\x55\x11\x55\x14\x55\x14\x54\x45\x55\x15\x15\x51"
|
||||
b"\x55\x15\x45\x55\x11\x52\x8a\xa2\xaa\xa2\x8a\x2a\x88\xaa\x2a\x2a\xa8\xaa\xa0\x69\xa8\x69\x98\x8a\xaa\x88\xa8\x62\x10\x10\x41\x10\x41\x10\x41\x04\x44\x44\x44\x44\x44\x45\x55\x15\x45\x11\x45\x45\x51\x45\x51\x51\x55"
|
||||
b"\x45\x44\x54\x45\x54\x52\xa2\x28\x88\xaa\xa2\xa2\x2a\x28\xa2\xa2\x22\x22\x28\xa8\x81\x99\xa6\xa8\x88\xaa\x2a\xaa\x89\x04\x04\x04\x11\x04\x44\x40\x41\x04\x10\x44\x45\x51\x45\x44\x55\x55\x54\x54\x54\x54\x55\x15\x11"
|
||||
b"\x51\x55\x45\x51\x15\x18\xa2\x8a\xaa\x22\x2a\x28\xa2\x8a\x8a\x2a\x2a\x8a\x2a\xaa\xa0\x89\x98\xaa\xaa\x22\x8a\x22\xa2\xa0\x41\x01\x11\x11\x04\x44\x10\x41\x04\x44\x44\x45\x14\x55\x44\x44\x45\x45\x45\x45\x11\x51\x55"
|
||||
b"\x54\x44\x51\x15\x45\x52\x28\xa2\x22\xaa\x4a\x8a\x28\xa2\xa2\x8a\x88\xa2\x88\x9a\x4a\x84\x86\x88\x8a\xaa\xa2\xa8\xaa\xaa\x10\x41\x01\x04\x44\x11\x11\x11\x11\x04\x44\x51\x45\x44\x55\x55\x51\x51\x54\x55\x54\x54\x51"
|
||||
b"\x45\x55\x15\x51\x51\x1a\x8a\x2a\x28\x88\xa2\x8a\x8a\x28\xa8\xa2\xaa\x28\x8a\x2a\xa8\xaa\x20\x06\xa2\x21\xa8\xaa\x18\x69\x01\x10\x44\x41\x04\x44\x10\x41\x04\x41\x11\x14\x54\x55\x44\x44\x54\x54\x55\x11\x15\x45\x55"
|
||||
b"\x54\x45\x51\x14\x55\x52\x22\x8a\x8a\xaa\xa8\xa2\x28\xa2\x29\x28\x84\xa2\xa2\xa6\x8a\x22\xaa\x00\x06\xaa\x8a\x89\xaa\xaa\x10\x04\x01\x11\x11\x11\x04\x10\x44\x11\x11\x11\x45\x51\x55\x55\x15\x15\x11\x55\x51\x54\x45"
|
||||
b"\x45\x54\x55\x55\x11\x18\xa8\xa2\x28\x88\x8a\x2a\x8a\x2a\x8a\x8a\x8a\x28\xa2\x2a\xa2\xa8\x88\xa8\x40\x04\x9a\xa8\xa8\xaa\x04\x41\x10\x10\x41\x04\x44\x44\x41\x10\x44\x44\x54\x55\x11\x15\x45\x45\x55\x11\x14\x45\x51"
|
||||
b"\x54\x45\x14\x45\x55\x0a\x2a\x28\xa2\xaa\x2a\x88\xa2\x88\xa2\xa2\xa2\x8a\x2a\x20\x8a\x2a\x8a\x8a\x28\x02\xa2\x8a\xaa\x9a\x10\x10\x04\x04\x44\x44\x44\x10\x11\x04\x44\x45\x15\x11\x55\x44\x54\x54\x45\x55\x45\x51\x15"
|
||||
b"\x45\x55\x51\x51\x11\x12\x88\x8a\x28\x8a\x88\xaa\x28\xa2\x28\x88\xa8\xa8\xa2\x8a\xa2\x88\xa8\xa2\x8a\x88\xaa\xaa\x1a\x29\x04\x41\x11\x04\x11\x11\x11\x11\x10\x44\x11\x11\x11\x54\x44\x55\x15\x15\x51\x11\x51\x15\x51"
|
||||
b"\x54\x51\x15\x15\x44\x08\xa2\xa2\x8a\x88\xaa\x22\x8a\x2a\x22\xaa\x22\x8a\x28\xa2\x28\xa2\x8a\x28\xa2\x2a\x28\x61\xaa\xaa\x10\x10\x00\x41\x04\x44\x44\x44\x04\x11\x11\x11\x14\x45\x55\x45\x45\x45\x15\x54\x55\x51\x55"
|
||||
b"\x45\x45\x45\x44\x41\x1a\x28\x8a\x22\x8a\x4a\xa8\xa2\x88\xa8\x88\xa8\xa2\x8a\x2a\x22\x28\xa2\xaa\x28\xa2\x8a\x2a\xaa\x9a\x04\x44\x44\x10\x41\x11\x11\x04\x44\x41\x04\x44\x44\x51\x11\x14\x54\x54\x54\x45\x11\x14\x44"
|
||||
b"\x54\x54\x54\x54\x40\x08\x8a\xa2\xa2\xa2\x28\x8a\x68\xaa\x22\x2a\x22\x8a\x2a\x88\xaa\x8a\x2a\x22\x8a\x28\xa2\x9a\x8a\x89\x44\x01\x01\x04\x10\x41\x11\x44\x41\x10\x41\x04\x45\x15\x55\x45\x45\x45\x15\x55\x55\x55\x55"
|
||||
b"\x45\x45\x45\x44\x11\x06\xa2\x28\x88\x8a\x8a\xa2\x2a\x22\x8a\x88\xa8\xa2\x88\xaa\x22\x22\x8a\x8a\x8a\x8a\x28\x9a\x9a\xaa\x04\x44\x44\x10\x44\x11\x10\x44\x50\x44\x11\x11\x11\x44\x44\x54\x54\x51\x51\x11\x44\x44\x45"
|
||||
b"\x54\x54\x54\x41\x00\x48\x8a\x22\x8a\x22\x88\xaa\x8a\x8a\x28\x8a\x28\xa8\xa8\x88\xa2\xa8\xa2\xa2\xa2\x8a\x8a\x15\xa8\x6a\x41\x01\x01\x04\x01\x10\x44\x44\x11\x04\x41\x10\x44\x11\x55\x15\x15\x15\x15\x54\x55\x55\x51"
|
||||
b"\x55\x55\x44\x40\x44\x0a\x22\x88\xa2\xa8\xa8\x88\xa2\xa2\x8a\x22\x8a\x2a\x2a\x8a\x28\x8a\x28\x62\x28\xa2\x28\xa6\x6a\xaa\x10\x44\x44\x10\x44\x04\x11\x11\x44\x44\x11\x04\x41\x14\x45\x45\x45\x45\x44\x45\x44\x44\x51"
|
||||
b"\x45\x11\x51\x04\x01\x08\xa8\xaa\x28\x88\x8a\x8a\x28\xa8\xa2\xa8\xa2\x88\x88\xaa\x8a\x22\x8a\x2a\x8a\x28\xa2\x96\x6a\xa6\x04\x40\x41\x04\x10\x41\x11\x11\x14\x44\x41\x10\x44\x44\x51\x11\x11\x51\x55\x54\x55\x55\x15"
|
||||
b"\x51\x54\x40\x41\x10\x4a\x28\x88\x8a\x28\xa2\x2a\x8a\x2a\x28\x8a\x28\xa2\xa8\x88\xa2\xa8\xa2\x88\xa2\x8a\x28\x99\x59\xaa\x10\x44\x10\x41\x04\x10\x41\x11\x11\x11\x11\x04\x10\x44\x45\x55\x54\x54\x44\x45\x44\x44\x51"
|
||||
b"\x54\x44\x41\x00\x00\x06\x22\x8a\xa2\x8a\x28\xa2\x2a\x4a\x86\x88\x8a\x28\x86\xa9\x28\x8a\x28\xa2\x8a\xa2\x8a\x19\x99\x89\x04\x41\x10\x41\x01\x04\x10\x44\x45\x11\x10\x44\x44\x44\x44\x44\x45\x15\x55\x51\x51\x55\x15"
|
||||
b"\x45\x50\x10\x11\x11\x0a\x28\xa2\x22\x22\x8a\x28\xa2\xa2\xa2\xa2\xa2\x8a\x88\x88\xaa\x28\x8a\x28\xa2\x28\xaa\x99\x99\xaa\x44\x11\x04\x10\x44\x41\x04\x10\x44\x51\x14\x41\x04\x11\x14\x55\x51\x45\x11\x14\x54\x51\x51"
|
||||
b"\x54\x44\x04\x04\x00\x48\xa2\x8a\x28\xa8\xa2\x8a\x28\xa2\x28\xa8\x88\xa2\x2a\x8a\x22\x8a\xa2\x8a\x2a\x8a\x88\x99\x66\x5a\x01\x04\x44\x44\x40\x10\x41\x04\x44\x45\x10\x44\x41\x04\x44\x44\x55\x51\x55\x55\x15\x15\x15"
|
||||
b"\x44\x41\x01\x00\x44\x0a\x28\xa2\x8a\x21\x28\x8a\x8a\x2a\x8a\x28\xa8\x8a\x88\xa2\xa8\xa1\x28\xa2\x88\x62\xa2\x99\x99\x9a\x10\x41\x04\x10\x11\x04\x10\x44\x11\x11\x11\x10\x44\x41\x11\x51\x44\x54\x44\x45\x15\x45\x51"
|
||||
b"\x51\x04\x41\x10\x80\x48\x8a\x28\xa2\x8a\x22\x88\xa2\x88\xaa\x2a\x28\xa2\x2a\x28\x8a\x2a\x8a\x28\xaa\x28\xa8\x99\x99\x9a\x11\x10\x41\x05\x04\x41\x04\x41\x11\x11\x14\x44\x10\x44\x11\x15\x51\x45\x51\x51\x44\x51\x15"
|
||||
b"\x10\x40\x10\x04\x10\x0a\xa2\x8a\x22\x22\x88\xa2\x28\xaa\x22\x8a\x22\x28\x48\xa8\xa2\xa2\x22\x8a\x22\x8a\x22\x16\x59\x9a\x01\x04\x11\x10\x41\x10\x44\x10\x44\x45\x11\x11\x04\x44\x44\x51\x15\x51\x15\x15\x45\x54\x51"
|
||||
b"\x04\x04\x04\x80\x04\x48\x88\xa2\x28\xa8\xa8\x8a\x8a\x22\xa8\xa2\xaa\x86\x8a\x22\xa8\xa2\xa8\xa2\x88\xa2\xaa\xa5\x99\x9a\x10\x41\x11\x04\x44\x11\x01\x04\x10\x44\x54\x44\x44\x11\x11\x15\x14\x55\x45\x44\x54\x45\x45"
|
||||
b"\x10\x41\x00\x11\x04\x06\x28\x8a\x28\x8a\x22\xa2\x22\x8a\x2a\x28\x88\x62\x22\x8a\x2a\x28\x8a\x28\xaa\x28\x88\x99\x99\x9a\x55\x50\x40\x44\x11\x04\x44\x41\x04\x44\x45\x14\x44\x44\x44\x51\x45\x11\x51\x55\x15\x54\x54"
|
||||
b"\x08\x10\x44\x10\x40\x48\x8a\x22\x8a\x22\x28\x8a\x28\xa2\x8a\x8a\x86\x22\xa8\xa2\x88\xa2\xa2\x8a\x22\x8a\x2a\x65\x99\x98\x54\x44\x11\x04\x10\x40\x40\x10\x44\x10\x44\x51\x11\x11\x11\x15\x51\x54\x54\x51\x44\x45\x45"
|
||||
b"\x04\x04\x01\x00\x10\x0a\xa2\xa8\xa1\xa2\x88\xa2\x88\x88\xa2\x28\xa2\xa8\x88\xa2\x2a\x28\xa8\xa2\x88\xa2\x88\x66\x66\x6a\x94\x11\x10\x41\x04\x44\x11\x04\x41\x04\x45\x15\x44\x44\x45\x11\x45\x45\x15\x14\x55\x54\x51"
|
||||
b"\x41\x01\x10\x44\x04\x48\x88\x8a\x22\x28\xa2\x28\x4a\x2a\x28\xaa\x28\x8a\x28\x8a\x88\x8a\x2a\x28\xa8\xa2\xa2\x65\x96\x6a\x11\x01\x04\x11\x10\x41\x11\x10\x10\x44\x44\x44\x51\x11\x11\x45\x51\x55\x45\x45\x44\x45\x15"
|
||||
b"\x00\x40\x04\x01\x00\x08\xa2\x88\xa2\x88\x8a\x88\xa2\x88\x8a\x21\xa2\xa2\x8a\x22\x2a\xa2\x88\xaa\x22\x28\x8a\x59\x99\x99\x95\x44\x12\x10\x44\x11\x04\x11\x04\x44\x11\x14\x54\x51\x51\x51\x15\x11\x51\x51\x55\x51\x51"
|
||||
b"\x10\x11\x20\x48\x44\x4a\x28\xa2\x28\x8a\x22\x28\x88\xa2\xa2\xa8\xa8\xa8\xa2\xa2\x88\x8a\x2a\x22\x8a\x8a\x28\x65\x99\x9a\x54\x55\x41\x04\x04\x44\x41\x04\x41\x04\x41\x11\x14\x44\x51\x15\x45\x54\x45\x14\x44\x55\x15"
|
||||
b"\x04\x40\x40\x10\x00\x08\x8a\x2a\x22\x88\xa8\x8a\x2a\x28\x84\x8a\x2a\x22\x28\x88\xa2\x28\xa2\xa1\xa2\x22\x8a\x66\x66\x62\x95\x55\x55\x41\x10\x80\x10\x41\x10\x41\x11\x11\x45\x15\x15\x44\x51\x14\x51\x45\x45\x11\x45"
|
||||
b"\x10\x10\x11\x01\x04\x4a\x88\x88\xa8\xa2\x22\xa2\x88\x88\xa8\xa2\x8a\x2a\x8a\x2a\x22\x8a\x28\xa8\xa2\xa8\xa2\x65\x96\x5a\x95\x51\x54\x55\x21\x11\x11\x04\x10\x44\x11\x11\x11\x45\x44\x55\x15\x45\x54\x51\x51\x54\x51"
|
||||
b"\x01\x04\x00\x40\x40\x04\xa2\x8a\x22\x2a\x28\x88\x8a\x2a\x22\x28\xa2\xa2\xa2\x88\xa8\xa2\x4a\x22\x28\x8a\x28\x59\x99\xaa\x45\x15\x55\x55\x55\x04\x10\x41\x04\x11\x10\x44\x44\x51\x55\x11\x51\x14\x45\x14\x54\x45\x55"
|
||||
b"\x10\x01\x10\x10\x11\x0a\x28\xa2\x28\x88\x8a\x28\xa2\x82\x2a\x28\xa2\x28\x8a\x28\x8a\x28\xa2\x2a\x8a\x8a\x2a\x66\x66\x66\x95\x55\x45\x45\x14\x55\x04\x10\x44\x41\x04\x44\x44\x54\x45\x45\x15\x45\x51\x45\x15\x51\x11"
|
||||
b"\x08\x40\x04\x04\x00\x42\x8a\x28\x8a\x8a\x88\x8a\x28\xa2\x88\x8a\x2a\x8a\xa2\x8a\x22\x22\x2a\x22\x28\xa2\x88\x65\x99\x6a\x95\x55\x55\x55\x55\x51\x51\x04\x10\x10\x41\x10\x45\x11\x14\x51\x51\x51\x15\x51\x44\x55\x15"
|
||||
b"\x04\x11\x01\x04\x44\x08\xa2\x22\xa2\x22\x2a\x22\x88\x88\x8a\x22\x88\xa2\x28\xa2\x8a\x2a\x22\xa2\x8a\x28\xa2\x59\x66\x6a\x55\x51\x55\x45\x14\x55\x44\x41\x04\x44\x10\x44\x41\x15\x45\x15\x14\x45\x44\x51\x15\x11\x51"
|
||||
b"\x01\x00\x41\x00\x02\x0a\x22\x88\x88\xa2\x88\xa8\x8a\x2a\x22\xa2\x28\xa2\x8a\x28\xa2\x88\xa2\x28\xa2\x8a\x28\x99\x99\xaa\x94\x55\x51\x55\x55\x55\x04\x11\x10\x11\x04\x11\x11\x44\x51\x51\x45\x51\x55\x11\x41\x14\x45"
|
||||
b"\x10\x10\x40\x44\x40\x48\xa8\xa8\xa2\x28\x8a\x22\x22\x88\xa2\x22\x8a\x28\xa2\x8a\x28\xa2\x28\x8a\x28\xa2\x8a\x59\x99\x6a\x95\x55\x55\x55\x45\x44\x44\x41\x04\x40\x44\x41\x11\x15\x14\x54\x54\x51\x11\x44\x51\x45\x51"
|
||||
b"\x04\x04\x20\x00\x10\x4a\x22\x22\x2a\x22\x88\x8a\x88\x8a\x28\xa2\x22\x8a\x2a\xa2\x8a\x28\x8a\x8a\x22\x28\xa1\x99\x99\xa6\x95\x55\x15\x51\x54\x54\x41\x04\x10\x11\x04\x10\x45\x45\x45\x15\x11\x51\x54\x54\x44\x51\x14"
|
||||
b"\x01\x01\x04\x44\x04\x04\x8a\x2a\x22\x88\xa2\x88\xa2\x88\x8a\x22\x88\xa2\x88\x8a\xa2\x8a\x88\xa2\x8a\x8a\x2a\x59\x66\x6a\x95\x51\x55\x15\x55\x50\x40\x41\x04\x40\x41\x04\x41\x14\x51\x45\x45\x14\x45\x11\x11\x11\x45"
|
||||
b"\x80\x40\x10\x01\x01\x0a\x22\x88\xa2\x2a\x28\x92\x28\xa2\x88\xa2\x28\x88\xa8\xa2\x28\xa2\x28\x88\xa2\x22\x89\x99\x99\xaa\x15\x15\x55\x55\x55\x44\x11\x10\x42\x10\x10\x44\x15\x51\x45\x44\x51\x45\x51\x51\x44\x44\x54"
|
||||
b"\x10\x11\x01\x10\x40\x42\xa2\x28\x8a\x22\x12\x28\x8a\x28\x62\x28\x8a\x2a\x2a\x2a\x28\x88\x8a\x28\xa2\xa8\xa1\x96\x66\x69\x95\x55\x55\x51\x51\x01\x10\x11\x10\x11\x04\x41\x44\x54\x54\x55\x15\x14\x44\x44\x51\x11\x15"
|
||||
b"\x04\x00\x40\x04\x10\x18\x8a\x88\xa2\x89\x28\x8a\x22\x22\x28\x8a\x22\x88\x88\xa2\x8a\x8a\x88\x8a\x28\x89\x29\x66\x66\x6a\x95\x55\x45\x15\x54\x44\x04\x40\x84\x41\x10\x44\x55\x15\x45\x11\x45\x45\x51\x51\x11\x44\x44"
|
||||
b"\x04\x44\x04\x40\x81\x08\xa2\x28\x88\x92\x8a\x22\x8a\x28\x8a\x22\x88\xa2\x8a\x28\xa2\x62\x2a\x88\x8a\x12\x8a\x66\x66\x62\x95\x55\x55\x55\x51\x01\x10\x11\x04\x10\x04\x45\x11\x44\x51\x55\x14\x51\x14\x45\x11\x14\x44"
|
||||
b"\x40\x00\x40\x10\x10\x0a\x22\x8a\x28\x88\x88\xa2\x22\x8a\x22\x88\xa2\x28\xa2\x8a\x18\x8a\x88\xa2\x88\xa2\x21\x99\x99\xaa\x95\x45\x55\x54\x44\x44\x04\x10\x41\x04\x44\x44\x54\x55\x15\x11\x45\x14\x44\x51\x45\x11\x14"
|
||||
b"\x04\x44\x04\x04\x04\x4a\x28\x88\x86\x28\xa2\x28\xa8\x88\xa2\x28\x8a\x22\x28\x92\x8a\xa2\x28\x84\xa2\x28\xa9\x99\x99\xa6\x91\x55\x51\x55\x41\x04\x41\x04\x10\x44\x41\x15\x14\x45\x45\x14\x51\x51\x45\x11\x11\x14\x45"
|
||||
b"\x04\x02\x10\x41\x00\x04\x8a\x2a\x22\x8a\x2a\x22\x22\x8a\x28\x8a\x22\x8a\x21\x28\xa2\x2a\x8a\x2a\x2a\x2a\x21\x96\x66\x6a\x15\x55\x15\x45\x10\x41\x20\x41\x04\x41\x11\x11\x45\x51\x51\x45\x14\x44\x41\x11\x45\x45\x10"
|
||||
b"\x00\x40\x04\x20\x44\x4a\xa2\x88\xa8\x88\x88\xa8\xa2\x22\x8a\x22\xa2\x22\x4a\x28\xa2\x88\xa2\x88\x88\x88\xa9\x66\x66\x6a\x95\x55\x55\x54\x04\x12\x04\x10\x40\x10\x44\x54\x51\x14\x44\x51\x45\x54\x51\x44\x44\x41\x14"
|
||||
b"\x10\x04\x40\x04\x00\x08\x88\x8a\x22\x8a\x22\x22\x28\xa8\x88\xa2\x28\x92\x22\x8a\x28\xa2\x28\xa2\x8a\x28\x8a\x66\x66\x62\x95\x55\x54\x51\x11\x04\x41\x04\x11\x04\x11\x15\x15\x14\x55\x14\x51\x05\x14\x44\x44\x51\x11"
|
||||
b"\x08\x40\x04\x40\x41\x0a\x28\xa2\x28\xa2\x8a\x28\x8a\x22\x28\xa2\x8a\x28\xa2\x22\x8a\x2a\x8a\x28\xa2\x88\xa1\x99\x99\xa9\x95\x45\x45\x44\x04\x40\x44\x04\x10\x41\x15\x11\x45\x45\x11\x45\x14\x51\x11\x11\x11\x11\x11"
|
||||
b"\x00\x10\x40\x10\x10\x12\x8a\x28\x88\x88\xa2\x8a\x22\x28\x8a\x28\x88\x8a\x22\x88\xa2\x88\xa2\x8a\x22\x28\x89\x96\x66\x6a\x94\x55\x55\x01\x01\x04\x01\x01\x04\x11\x11\x44\x51\x11\x45\x11\x44\x44\x44\x45\x11\x11\x11"
|
||||
b"\x11\x00\x11\x01\x01\x08\x8a\x22\xa2\x8a\x22\x22\x8a\x22\x88\x88\x8a\x22\x28\xa2\x28\xa2\x28\xa2\x28\x8a\x29\x99\x99\xa2\x55\x55\x54\x44\x48\x41\x11\x10\x41\x04\x54\x55\x15\x14\x51\x54\x51\x11\x11\x44\x51\x11\x10"
|
||||
b"\x00\x11\x00\x40\x10\x00\x48\xa8\x88\xa2\x28\xa2\x22\x88\xa2\x8a\x22\x8a\x22\x28\x88\x8a\x8a\x28\x8a\x22\x89\x99\x99\x2a\x95\x54\x54\x10\x10\x11\x04\x10\x10\x41\x11\x44\x51\x45\x14\x44\x44\x44\x44\x44\x44\x44\x45"
|
||||
b"\x11\x00\x84\x04\x02\x10\x08\x22\x8a\x22\x8a\x28\xa8\xa2\x28\x88\xa2\x22\x8a\x22\x8a\x28\xa2\x8a\xa2\x88\xa1\x99\x66\xaa\x15\x45\x50\x41\x04\x40\x40\x44\x01\x11\x14\x45\x11\x44\x51\x14\x44\x44\x44\x44\x44\x44\x41"
|
||||
b"\x00\x48\x00\x40\x80\x04\x01\x00\x62\x88\xa2\x22\x22\x28\x88\xa2\x28\xa2\x22\x28\xa2\x8a\x28\xa2\x28\xa2\x29\x96\x66\xa1\x95\x55\x41\x04\x40\x11\x04\x01\x10\x45\x15\x51\x44\x55\x14\x51\x11\x04\x44\x45\x11\x11\x10"
|
||||
b"\x10\x01\x10\x20\x11\x02\x10\x10\x08\xa8\x8a\x28\x8a\x22\x8a\x28\x8a\x22\x8a\x22\x22\x22\x8a\x28\x8a\x28\x86\x66\x66\x6a\x55\x54\x10\x42\x11\x00\x41\x10\x41\x11\x44\x44\x55\x11\x15\x14\x41\x10\x44\x44\x45\x11\x11"
|
||||
b"\x21\x10\x04\x01\x00\x40\x01\x08\x40\x06\x22\x8a\x22\x28\xa2\x12\x88\xa2\x22\x8a\x28\xa2\x22\x8a\x88\x8a\x26\x66\x9a\xa6\x95\x15\x04\x10\x04\x11\x10\x04\x10\x44\x54\x51\x11\x44\x44\x44\x41\x04\x11\x11\x11\x11\x11"
|
||||
b"\x01\x01\x01\x10\x10\x21\x20\x80\x21\x00\x28\x88\xa2\x88\x86\x28\xa2\x28\xa2\x22\x88\x8a\x28\xa2\x8a\x8a\x29\x99\xa6\x6a\x95\x54\x41\x04\x41\x10\x04\x41\x04\x55\x14\x45\x44\x45\x45\x11\x10\x44\x41\x11\x11\x11\x10"
|
||||
b"\x10\x10\x10\x01\x01\x00\x00\x12\x00\x48\x00\x8a\x28\x8a\x22\x88\x8a\x22\x28\xa2\x22\x88\x8a\x28\xa2\x22\x86\x66\x66\x89\x91\x50\x10\x41\x10\x04\x40\x40\x45\x44\x45\x14\x45\x44\x51\x10\x04\x01\x10\x44\x44\x44\x44"
|
||||
b"\x01\x01\x02\x10\x10\x10\x44\x00\x42\x01\x10\x02\x22\x88\xa2\x28\xa2\x28\x8a\x22\x88\xa2\xa2\x88\x8a\x88\xa6\x59\x9a\x6a\x95\x41\x04\x20\x04\x40\x44\x11\x10\x51\x51\x44\x51\x15\x14\x44\x41\x10\x11\x05\x11\x11\x11"
|
||||
b"\x10\x20\x00\x04\x08\x08\x02\x10\x10\x40\x08\x40\x42\x28\x88\x8a\x22\x8a\x22\x28\x8a\x28\x88\x8a\x12\x8a\x26\x65\x99\xaa\x15\x04\x21\x04\x01\x04\x11\x04\x45\x15\x14\x51\x45\x44\x51\x01\x04\x11\x04\x41\x11\x11\x14"
|
||||
b"\x01\x01\x04\x40\x80\x40\x40\x08\x00\x08\x00\x20\x04\x08\xa2\x88\x88\x88\xa2\x88\xa2\x22\x28\xa2\xa2\x8a\x26\x59\x99\xa1\x94\x12\x00\x41\x10\x11\x00\x44\x45\x44\x45\x14\x50\x45\x14\x44\x41\x00\x41\x11\x11\x14\x44"
|
||||
b"\x10\x10\x80\x01\x04\x04\x08\x41\x21\x01\x21\x04\x00\x41\x22\x22\x8a\x28\x88\x8a\x22\x28\x88\x88\x88\xa2\x85\x96\x59\xaa\x90\x80\x44\x10\x04\x00\x44\x11\x11\x15\x11\x45\x15\x11\x44\x40\x10\x11\x10\x01\x04\x44\x44"
|
||||
b"\x01\x00\x10\x40\x00\x42\x00\x00\x00\x80\x00\x00\x88\x00\x04\x88\xa2\x22\x28\xa2\x22\x88\xa2\x8a\x2a\x28\xa9\x99\x9a\x9a\x81\x04\x01\x01\x01\x10\x04\x11\x44\x45\x14\x44\x44\x51\x11\x04\x04\x40\x04\x44\x41\x11\x11"
|
||||
b"\x20\x11\x00\x10\x40\x00\x44\x10\x48\x12\x12\x10\x00\x48\x00\x02\x22\x8a\x22\x22\x28\x8a\x22\x22\x88\x8a\x25\x99\x9a\xaa\x10\x10\x40\x41\x10\x04\x41\x14\x51\x41\x44\x51\x51\x15\x10\x41\x10\x11\x10\x10\x10\x44\x44"
|
||||
b"\x01\x00\x10\x00\x21\x04\x01\x00\x00\x00\x00\x08\x40\x01\x08\x48\x08\xa2\x28\x8a\x22\x22\x22\x88\x8a\x22\x89\x66\x69\xa4\x04\x04\x10\x10\x04\x40\x10\x44\x44\x54\x45\x11\x14\x45\x10\x10\x41\x01\x04\x11\x04\x11\x11"
|
||||
b"\x10\x21\x01\x21\x00\x40\x80\x20\x44\x10\x44\x00\x12\x10\x80\x04\x04\x12\x88\xa2\x22\x8a\x28\x8a\x22\x88\xa6\x59\x9a\x90\x41\x01\x04\x04\x40\x11\x04\x44\x44\x44\x51\x11\x11\x41\x04\x04\x10\x44\x41\x00\x44\x11\x11"
|
||||
b"\x04\x00\x10\x00\x10\x08\x00\x04\x00\x04\x02\x04\x00\x00\x10\x80\x40\x00\x8a\x22\x88\xa2\x22\x22\x88\xa8\x86\x66\xaa\x41\x00\x40\x41\x00\x04\x00\x01\x11\x45\x14\x44\x51\x44\x50\x41\x11\x04\x10\x10\x44\x01\x04\x41"
|
||||
b"\x41\x11\x00\x10\x02\x00\x44\x40\x08\x40\x81\x02\x04\x20\x00\x04\x21\x08\x41\x22\x28\x88\x88\xa2\x28\x8a\x26\x59\xa4\x10\x20\x11\x00\x44\x41\x11\x11\x11\x45\x44\x51\x11\x14\x44\x10\x04\x04\x04\x04\x01\x10\x40\x44"
|
||||
b"\x00\x00\x08\x01\x10\x40\x00\x08\x40\x08\x10\x20\x02\x01\x20\x40\x00\x81\x00\x04\x88\x8a\x28\x88\x88\xa2\xa5\x9a\xa4\x01\x04\x40\x11\x00\x04\x00\x44\x44\x44\x45\x11\x44\x44\x41\x04\x41\x01\x01\x11\x10\x44\x04\x11"
|
||||
b"\x12\x04\x01\x00\x04\x10\x48\x00\x08\x40\x42\x01\x20\x10\x01\x08\x48\x10\x22\x08\x0a\x22\x88\x89\x22\x22\x26\x6a\x41\x10\x04\x04\x00\x11\x01\x11\x14\x44\x44\x44\x44\x45\x14\x10\x40\x10\x41\x10\x00\x10\x01\x04\x40"
|
||||
b"\x00\x40\x40\x11\x00\x00\x01\x04\x00\x04\x00\x40\x01\x00\x42\x00\x00\x02\x00\x00\x40\x48\x88\xa2\x28\x88\x99\xa6\x11\x08\x00\x40\x44\x00\x40\x04\x11\x14\x44\x51\x11\x11\x44\x44\x04\x04\x10\x04\x44\x04\x44\x40\x11"
|
||||
b"\x21\x00\x10\x80\x81\x04\x10\x00\x44\x80\x84\x01\x00\x48\x20\x44\x04\x20\x11\x10\x04\x00\x62\x22\x22\x28\x99\xa8\x00\x81\x10\x10\x01\x10\x11\x04\x44\x44\x44\x44\x51\x11\x44\x01\x01\x01\x04\x41\x01\x10\x00\x11\x04"
|
||||
b"\x00\x12\x01\x04\x10\x02\x01\x04\x00\x04\x01\x00\x10\x80\x04\x00\x80\x04\x00\x02\x00\x20\x02\x88\x88\x88\x99\xa1\x11\x00\x04\x08\x40\x04\x00\x51\x44\x44\x44\x45\x11\x51\x11\x10\x10\x40\x00\x40\x44\x04\x44\x40\x40"
|
||||
b"\x11\x00\x00\x00\x04\x20\x00\x00\x20\x40\x40\x92\x04\x04\x00\x08\x01\x00\x42\x00\x10\x04\x08\x0a\x22\x88\xa6\x10\x40\x44\x01\x04\x10\x40\x44\x11\x14\x51\x44\x44\x44\x11\x44\x04\x04\x11\x04\x11\x04\x10\x44\x11\x04"
|
||||
b"\x00\x41\x04\x44\x40\x01\x04\x82\x04\x00\x20\x00\x42\x01\x02\x00\x40\x20\x00\x41\x02\x02\x00\x40\x28\x88\x9a\x04\x20\x01\x10\x40\x04\x01\x01\x11\x14\x11\x11\x11\x44\x51\x11\x01\x01\x00\x10\x04\x10\x40\x01\x00\x41"
|
||||
b"\x10\x10\x10\x00\x08\x40\x40\x00\x40\x84\x04\x10\x00\x10\x20\x44\x08\x01\x04\x00\x20\x41\x10\x01\x00\x62\x24\x10\x04\x41\x00\x04\x10\x40\x44\x45\x05\x11\x44\x51\x11\x11\x01\x10\x40\x11\x01\x01\x00\x11\x10\x44\x10"
|
||||
b"\x04\x01\x02\x04\x10\x04\x01\x04\x01\x02\x01\x02\x10\x02\x00\x00\x01\x00\x80\x82\x00\x20\x08\x10\x04\x02\x90\x01\x00\x10\x11\x01\x00\x10\x81\x11\x41\x11\x14\x11\x11\x11\x10\x04\x11\x00\x10\x40\x44\x41\x01\x01\x04"
|
||||
b"\x81\x00\x10\x00\x00\x40\x20\x42\x00\x10\x40\x20\x04\x80\x10\x42\x10\x10\x08\x00\x04\x01\x00\x00\x80\x80\x04\x10\x44\x01\x00\x40\x11\x04\x11\x44\x51\x14\x45\x44\x44\x44\x04\x41\x00\x11\x00\x10\x00\x04\x10\x40\x41")
|
||||
color_image_inkplate2 = bytearray(
|
||||
b"\x55\x15\x51\x55\x45\x54\x54\x55\x15\x54\x54\x55\x45\x55\x15\x51\x10\x44\x44\x10\x42\x04\x20\x10\x44\x44\x81\x04\x10\x41\x08\x10\x44\x55\x55\x54\x55\x54\x55\x55\x55\x55\x51\x55\x15\x55\x55\x55\x55\x55\x55\x55\x55"
|
||||
b"\x44\x51\x15\x11\x54\x45\x45\x45\x44\x45\x45\x44\x51\x11\x51\x14\x44\x10\x41\x04\x10\x41\x04\x04\x10\x41\x10\x41\x04\x10\x41\x04\x11\x04\x44\x45\x44\x45\x45\x11\x11\x11\x15\x11\x51\x44\x51\x11\x44\x45\x11\x11\x45"
|
||||
b"\x55\x15\x45\x44\x45\x45\x14\x51\x55\x51\x51\x55\x15\x54\x54\x44\x01\x04\x11\x10\x41\x04\x11\x11\x04\x44\x44\x10\x41\x21\x10\x41\x10\x44\x55\x51\x55\x54\x54\x55\x55\x55\x51\x55\x15\x55\x15\x54\x55\x51\x55\x55\x51"
|
||||
b"\x45\x44\x51\x55\x44\x51\x51\x54\x44\x54\x54\x45\x51\x15\x14\x41\x10\x41\x04\x44\x10\x41\x00\x00\x40\x44\x44\x44\x10\x41\x04\x10\x44\x44\x44\x54\x51\x45\x45\x44\x51\x44\x55\x15\x51\x15\x54\x55\x45\x15\x14\x51\x15"
|
||||
b"\x51\x55\x14\x44\x55\x15\x15\x15\x15\x15\x15\x51\x15\x45\x11\x10\x04\x10\x48\x04\x10\x41\x11\x10\x11\x04\x11\x04\x44\x10\x41\x10\x10\x44\x55\x15\x45\x14\x54\x55\x15\x55\x11\x51\x15\x45\x15\x11\x51\x51\x55\x15\x51"
|
||||
b"\x45\x11\x55\x55\x11\x51\x45\x45\x45\x45\x44\x55\x44\x51\x44\x04\x42\x04\x11\x11\x04\x10\x10\x44\x40\x41\x11\x10\x41\x04\x11\x04\x44\x44\x04\x51\x51\x55\x45\x45\x51\x15\x55\x55\x51\x51\x51\x55\x15\x15\x15\x51\x55"
|
||||
b"\x51\x55\x11\x11\x54\x54\x51\x51\x58\x91\x55\x11\x55\x14\x41\x00\x10\x41\x01\x01\x11\x04\x04\x04\x10\x44\x10\x44\x10\x41\x04\x41\x01\x04\x44\x51\x15\x11\x54\x54\x55\x44\x51\x11\x15\x15\x15\x11\x51\x55\x45\x15\x11"
|
||||
b"\x55\x11\x55\x54\x55\x15\x54\x54\x46\xa8\x85\x44\x45\x44\x44\x44\x40\x10\x44\x44\x40\x44\x41\x01\x04\x01\x04\x44\x44\x10\x40\x44\x40\x41\x11\x15\x51\x54\x45\x45\x44\x55\x15\x55\x51\x51\x51\x55\x15\x44\x55\x51\x55"
|
||||
b"\x45\x15\x11\x15\x11\x44\x45\x11\x5a\xaa\xa2\x55\x44\x44\x00\x41\x04\x04\x00\x41\x11\x04\x10\x44\x10\x44\x44\x11\x04\x44\x44\x10\x11\x04\x44\x44\x55\x15\x54\x54\x55\x45\x51\x44\x55\x15\x15\x15\x51\x55\x44\x54\x55"
|
||||
b"\x51\x51\x54\x51\x54\x55\x51\x54\x46\xa2\xaa\x28\x54\x41\x11\x04\x11\x01\x10\x10\x44\x41\x04\x10\x41\x00\x11\x11\x11\x04\x11\x04\x41\x04\x04\x44\x45\x44\x45\x45\x45\x51\x54\x55\x45\x51\x51\x51\x14\x51\x55\x15\x11"
|
||||
b"\x54\x55\x15\x14\x45\x44\x54\x45\x5a\x9a\x2a\xa8\x88\x40\x10\x41\x00\x40\x04\x44\x10\x44\x41\x04\x10\x44\x40\x41\x10\x41\x01\x04\x10\x41\x10\x44\x51\x55\x54\x54\x54\x54\x45\x44\x54\x55\x14\x55\x45\x15\x11\x51\x55"
|
||||
b"\x45\x45\x45\x45\x51\x55\x15\x14\x5a\xaa\x8a\x2a\xaa\x28\x40\x10\x44\x11\x04\x01\x04\x41\x10\x41\x04\x20\x10\x10\x44\x44\x44\x41\x04\x41\x04\x11\x14\x45\x15\x15\x45\x45\x54\x55\x45\x45\x55\x11\x51\x51\x55\x15\x14"
|
||||
b"\x51\x51\x51\x51\x15\x12\x8a\xaa\x22\x89\xaa\xa2\xa2\xaa\x28\x41\x01\xa0\x41\x10\x41\x10\x11\x10\x41\x04\x04\x44\x10\x44\x10\x10\x44\x10\x41\x10\x44\x55\x45\x45\x14\x54\x55\x14\x54\x54\x45\x54\x55\x15\x15\x51\x51"
|
||||
b"\x54\x54\x54\x55\x44\x5a\xa2\x22\xaa\xa9\xa2\x6a\x2a\x8a\x8a\x2a\x9a\x99\x99\xa1\x10\x44\x61\x04\x10\x41\x10\x01\x04\x41\x11\x11\x04\x44\x44\x11\x11\x11\x51\x51\x55\x45\x11\x45\x45\x45\x51\x45\x11\x51\x51\x15\x45"
|
||||
b"\x45\x45\x15\x11\x55\x18\xaa\x2a\x28\x99\x9a\x2a\xa8\xa2\xa6\xa6\xaa\x2a\x66\x9a\x86\x05\xa6\x11\x04\x10\x04\x41\x04\x11\x04\x10\x41\x04\x11\x04\x44\x51\x15\x15\x14\x55\x55\x54\x54\x54\x54\x55\x55\x15\x15\x51\x55"
|
||||
b"\x54\x55\x45\x54\x45\x46\x22\xa2\x8a\x2a\x66\xa2\x8a\x99\xaa\x6a\x66\xaa\x69\xa8\xa9\x46\xa1\x90\x41\x04\x40\x10\x41\x10\x44\x44\x10\x44\x40\x44\x11\x14\x51\x45\x45\x44\x44\x45\x45\x45\x45\x44\x45\x51\x51\x15\x11"
|
||||
b"\x45\x44\x51\x14\x51\x5a\xa8\xa8\xaa\x88\xa1\x0a\x99\xa8\xa2\xa6\x66\x25\x9a\xaa\xaa\x66\x1a\xa4\x10\x10\x11\x04\x10\x44\x41\x04\x44\x41\x11\x01\x11\x05\x14\x54\x54\x55\x55\x51\x51\x54\x54\x55\x51\x15\x15\x51\x55"
|
||||
b"\x51\x51\x55\x45\x14\x48\x8a\x2a\x22\xa8\xa8\x80\xa2\x8a\xa6\x59\x9a\xa9\x96\x28\x99\xa9\xa9\x94\x41\x04\x10\x40\x44\x04\x10\x41\x04\x10\x44\x44\x10\x44\x55\x45\x45\x45\x11\x14\x55\x15\x45\x45\x15\x51\x51\x54\x51"
|
||||
b"\x54\x54\x44\x55\x45\x5a\xa2\xa2\xa2\x2a\x2a\xa6\xa8\x0a\x19\x96\x62\xaa\x66\x8a\xaa\x5a\x69\x52\x10\x41\x04\x04\x01\x01\x11\x10\x41\x04\x41\x11\x04\x44\x41\x51\x54\x55\x55\x45\x45\x44\x54\x55\x51\x15\x15\x15\x15"
|
||||
b"\x45\x15\x55\x44\x54\x44\xaa\x28\xa8\x88\x88\x8a\x69\x80\x16\x66\x98\x86\x99\xa8\x69\x99\xa5\x91\x04\x10\x41\x04\x81\x10\x44\x44\x44\x44\x10\x41\x11\x11\x14\x54\x45\x44\x45\x51\x51\x55\x45\x44\x55\x51\x51\x51\x51"
|
||||
b"\x51\x44\x51\x45\x45\x5a\x22\x8a\x2a\xa2\xa8\xa2\xaa\xaa\x02\x69\xaa\xaa\x99\xaa\x95\x9a\x99\x50\x41\x04\x10\x40\x40\x44\x10\x41\x04\x01\x11\x11\x04\x11\x05\x15\x54\x55\x51\x15\x14\x44\x54\x55\x11\x15\x15\x15\x15"
|
||||
b"\x55\x55\x14\x54\x51\x12\xa8\xaa\x88\x8a\x2a\x2a\x66\x4a\xa8\x44\x8a\x2a\xaa\x66\x99\xaa\x66\x24\x10\x41\x04\x10\x44\x01\x04\x11\x11\x11\x01\x04\x41\x10\x44\x44\x45\x45\x15\x51\x55\x55\x15\x45\x55\x51\x51\x51\x45"
|
||||
b"\x44\x45\x45\x45\x15\x58\x8a\x88\xa8\xa2\x88\xa2\xa9\xa2\x8a\xa8\x00\x88\xaa\x69\x96\x58\xa6\xaa\x88\x44\x01\x04\x01\x10\x41\x10\x41\x10\x44\x41\x11\x04\x44\x45\x54\x55\x44\x55\x11\x11\x44\x54\x44\x55\x15\x15\x51"
|
||||
b"\x55\x51\x51\x55\x51\x12\xa2\xaa\x1a\xa8\xa2\x8a\x6a\x2a\xa2\x8a\xa8\x01\x26\x96\x59\x99\xa6\x22\xa8\xa2\x10\x41\x10\x04\x10\x44\x10\x44\x10\x44\x10\x44\x44\x44\x45\x44\x55\x11\x55\x54\x55\x45\x55\x11\x51\x51\x15"
|
||||
b"\x44\x54\x54\x44\x55\x1a\x28\x89\x88\x8a\x28\xa2\x26\x88\xa8\xa2\x22\xa0\x02\x66\x9a\x99\x9a\xa8\x8a\x2a\xa2\x04\x04\x41\x04\x04\x44\x11\x04\x11\x04\x41\x04\x44\x51\x55\x11\x55\x14\x55\x14\x54\x45\x55\x15\x15\x51"
|
||||
b"\x55\x15\x45\x55\x11\x52\x8a\xa2\xaa\xa2\x8a\x2a\x88\xaa\x2a\x2a\xa8\xaa\xa0\x69\xa8\x69\x98\x8a\xaa\x88\xa8\x62\x10\x10\x41\x10\x41\x10\x41\x04\x44\x44\x44\x44\x44\x45\x55\x15\x45\x11\x45\x45\x51\x45\x51\x51\x55"
|
||||
b"\x45\x44\x54\x45\x54\x52\xa2\x28\x88\xaa\xa2\xa2\x2a\x28\xa2\xa2\x22\x22\x28\xa8\x81\x99\xa6\xa8\x88\xaa\x2a\xaa\x89\x04\x04\x04\x11\x04\x44\x40\x41\x04\x10\x44\x45\x51\x45\x44\x55\x55\x54\x54\x54\x54\x55\x15\x11"
|
||||
b"\x51\x55\x45\x51\x15\x18\xa2\x8a\xaa\x22\x2a\x28\xa2\x8a\x8a\x2a\x2a\x8a\x2a\xaa\xa0\x89\x98\xaa\xaa\x22\x8a\x22\xa2\xa0\x41\x01\x11\x11\x04\x44\x10\x41\x04\x44\x44\x45\x14\x55\x44\x44\x45\x45\x45\x45\x11\x51\x55"
|
||||
b"\x54\x44\x51\x15\x45\x52\x28\xa2\x22\xaa\x4a\x8a\x28\xa2\xa2\x8a\x88\xa2\x88\x9a\x4a\x84\x86\x88\x8a\xaa\xa2\xa8\xaa\xaa\x10\x41\x01\x04\x44\x11\x11\x11\x11\x04\x44\x51\x45\x44\x55\x55\x51\x51\x54\x55\x54\x54\x51"
|
||||
b"\x45\x55\x15\x51\x51\x1a\x8a\x2a\x28\x88\xa2\x8a\x8a\x28\xa8\xa2\xaa\x28\x8a\x2a\xa8\xaa\x20\x06\xa2\x21\xa8\xaa\x18\x69\x01\x10\x44\x41\x04\x44\x10\x41\x04\x41\x11\x14\x54\x55\x44\x44\x54\x54\x55\x11\x15\x45\x55"
|
||||
b"\x54\x45\x51\x14\x55\x52\x22\x8a\x8a\xaa\xa8\xa2\x28\xa2\x29\x28\x84\xa2\xa2\xa6\x8a\x22\xaa\x00\x06\xaa\x8a\x89\xaa\xaa\x10\x04\x01\x11\x11\x11\x04\x10\x44\x11\x11\x11\x45\x51\x55\x55\x15\x15\x11\x55\x51\x54\x45"
|
||||
b"\x45\x54\x55\x55\x11\x18\xa8\xa2\x28\x88\x8a\x2a\x8a\x2a\x8a\x8a\x8a\x28\xa2\x2a\xa2\xa8\x88\xa8\x40\x04\x9a\xa8\xa8\xaa\x04\x41\x10\x10\x41\x04\x44\x44\x41\x10\x44\x44\x54\x55\x11\x15\x45\x45\x55\x11\x14\x45\x51"
|
||||
b"\x54\x45\x14\x45\x55\x0a\x2a\x28\xa2\xaa\x2a\x88\xa2\x88\xa2\xa2\xa2\x8a\x2a\x20\x8a\x2a\x8a\x8a\x28\x02\xa2\x8a\xaa\x9a\x10\x10\x04\x04\x44\x44\x44\x10\x11\x04\x44\x45\x15\x11\x55\x44\x54\x54\x45\x55\x45\x51\x15"
|
||||
b"\x45\x55\x51\x51\x11\x12\x88\x8a\x28\x8a\x88\xaa\x28\xa2\x28\x88\xa8\xa8\xa2\x8a\xa2\x88\xa8\xa2\x8a\x88\xaa\xaa\x1a\x29\x04\x41\x11\x04\x11\x11\x11\x11\x10\x44\x11\x11\x11\x54\x44\x55\x15\x15\x51\x11\x51\x15\x51"
|
||||
b"\x54\x51\x15\x15\x44\x08\xa2\xa2\x8a\x88\xaa\x22\x8a\x2a\x22\xaa\x22\x8a\x28\xa2\x28\xa2\x8a\x28\xa2\x2a\x28\x61\xaa\xaa\x10\x10\x00\x41\x04\x44\x44\x44\x04\x11\x11\x11\x14\x45\x55\x45\x45\x45\x15\x54\x55\x51\x55"
|
||||
b"\x45\x45\x45\x44\x41\x1a\x28\x8a\x22\x8a\x4a\xa8\xa2\x88\xa8\x88\xa8\xa2\x8a\x2a\x22\x28\xa2\xaa\x28\xa2\x8a\x2a\xaa\x9a\x04\x44\x44\x10\x41\x11\x11\x04\x44\x41\x04\x44\x44\x51\x11\x14\x54\x54\x54\x45\x11\x14\x44"
|
||||
b"\x54\x54\x54\x54\x40\x08\x8a\xa2\xa2\xa2\x28\x8a\x68\xaa\x22\x2a\x22\x8a\x2a\x88\xaa\x8a\x2a\x22\x8a\x28\xa2\x9a\x8a\x89\x44\x01\x01\x04\x10\x41\x11\x44\x41\x10\x41\x04\x45\x15\x55\x45\x45\x45\x15\x55\x55\x55\x55"
|
||||
b"\x45\x45\x45\x44\x11\x06\xa2\x28\x88\x8a\x8a\xa2\x2a\x22\x8a\x88\xa8\xa2\x88\xaa\x22\x22\x8a\x8a\x8a\x8a\x28\x9a\x9a\xaa\x04\x44\x44\x10\x44\x11\x10\x44\x50\x44\x11\x11\x11\x44\x44\x54\x54\x51\x51\x11\x44\x44\x45"
|
||||
b"\x54\x54\x54\x41\x00\x48\x8a\x22\x8a\x22\x88\xaa\x8a\x8a\x28\x8a\x28\xa8\xa8\x88\xa2\xa8\xa2\xa2\xa2\x8a\x8a\x15\xa8\x6a\x41\x01\x01\x04\x01\x10\x44\x44\x11\x04\x41\x10\x44\x11\x55\x15\x15\x15\x15\x54\x55\x55\x51"
|
||||
b"\x55\x55\x44\x40\x44\x0a\x22\x88\xa2\xa8\xa8\x88\xa2\xa2\x8a\x22\x8a\x2a\x2a\x8a\x28\x8a\x28\x62\x28\xa2\x28\xa6\x6a\xaa\x10\x44\x44\x10\x44\x04\x11\x11\x44\x44\x11\x04\x41\x14\x45\x45\x45\x45\x44\x45\x44\x44\x51"
|
||||
b"\x45\x11\x51\x04\x01\x08\xa8\xaa\x28\x88\x8a\x8a\x28\xa8\xa2\xa8\xa2\x88\x88\xaa\x8a\x22\x8a\x2a\x8a\x28\xa2\x96\x6a\xa6\x04\x40\x41\x04\x10\x41\x11\x11\x14\x44\x41\x10\x44\x44\x51\x11\x11\x51\x55\x54\x55\x55\x15"
|
||||
b"\x51\x54\x40\x41\x10\x4a\x28\x88\x8a\x28\xa2\x2a\x8a\x2a\x28\x8a\x28\xa2\xa8\x88\xa2\xa8\xa2\x88\xa2\x8a\x28\x99\x59\xaa\x10\x44\x10\x41\x04\x10\x41\x11\x11\x11\x11\x04\x10\x44\x45\x55\x54\x54\x44\x45\x44\x44\x51"
|
||||
b"\x54\x44\x41\x00\x00\x06\x22\x8a\xa2\x8a\x28\xa2\x2a\x4a\x86\x88\x8a\x28\x86\xa9\x28\x8a\x28\xa2\x8a\xa2\x8a\x19\x99\x89\x04\x41\x10\x41\x01\x04\x10\x44\x45\x11\x10\x44\x44\x44\x44\x44\x45\x15\x55\x51\x51\x55\x15"
|
||||
b"\x45\x50\x10\x11\x11\x0a\x28\xa2\x22\x22\x8a\x28\xa2\xa2\xa2\xa2\xa2\x8a\x88\x88\xaa\x28\x8a\x28\xa2\x28\xaa\x99\x99\xaa\x44\x11\x04\x10\x44\x41\x04\x10\x44\x51\x14\x41\x04\x11\x14\x55\x51\x45\x11\x14\x54\x51\x51"
|
||||
b"\x54\x44\x04\x04\x00\x48\xa2\x8a\x28\xa8\xa2\x8a\x28\xa2\x28\xa8\x88\xa2\x2a\x8a\x22\x8a\xa2\x8a\x2a\x8a\x88\x99\x66\x5a\x01\x04\x44\x44\x40\x10\x41\x04\x44\x45\x10\x44\x41\x04\x44\x44\x55\x51\x55\x55\x15\x15\x15"
|
||||
b"\x44\x41\x01\x00\x44\x0a\x28\xa2\x8a\x21\x28\x8a\x8a\x2a\x8a\x28\xa8\x8a\x88\xa2\xa8\xa1\x28\xa2\x88\x62\xa2\x99\x99\x9a\x10\x41\x04\x10\x11\x04\x10\x44\x11\x11\x11\x10\x44\x41\x11\x51\x44\x54\x44\x45\x15\x45\x51"
|
||||
b"\x51\x04\x41\x10\x80\x48\x8a\x28\xa2\x8a\x22\x88\xa2\x88\xaa\x2a\x28\xa2\x2a\x28\x8a\x2a\x8a\x28\xaa\x28\xa8\x99\x99\x9a\x11\x10\x41\x05\x04\x41\x04\x41\x11\x11\x14\x44\x10\x44\x11\x15\x51\x45\x51\x51\x44\x51\x15"
|
||||
b"\x10\x40\x10\x04\x10\x0a\xa2\x8a\x22\x22\x88\xa2\x28\xaa\x22\x8a\x22\x28\x48\xa8\xa2\xa2\x22\x8a\x22\x8a\x22\x16\x59\x9a\x01\x04\x11\x10\x41\x10\x44\x10\x44\x45\x11\x11\x04\x44\x44\x51\x15\x51\x15\x15\x45\x54\x51"
|
||||
b"\x04\x04\x04\x80\x04\x48\x88\xa2\x28\xa8\xa8\x8a\x8a\x22\xa8\xa2\xaa\x86\x8a\x22\xa8\xa2\xa8\xa2\x88\xa2\xaa\xa5\x99\x9a\x10\x41\x11\x04\x44\x11\x01\x04\x10\x44\x54\x44\x44\x11\x11\x15\x14\x55\x45\x44\x54\x45\x45"
|
||||
b"\x10\x41\x00\x11\x04\x06\x28\x8a\x28\x8a\x22\xa2\x22\x8a\x2a\x28\x88\x62\x22\x8a\x2a\x28\x8a\x28\xaa\x28\x88\x99\x99\x9a\x55\x50\x40\x44\x11\x04\x44\x41\x04\x44\x45\x14\x44\x44\x44\x51\x45\x11\x51\x55\x15\x54\x54"
|
||||
b"\x08\x10\x44\x10\x40\x48\x8a\x22\x8a\x22\x28\x8a\x28\xa2\x8a\x8a\x86\x22\xa8\xa2\x88\xa2\xa2\x8a\x22\x8a\x2a\x65\x99\x98\x54\x44\x11\x04\x10\x40\x40\x10\x44\x10\x44\x51\x11\x11\x11\x15\x51\x54\x54\x51\x44\x45\x45"
|
||||
b"\x04\x04\x01\x00\x10\x0a\xa2\xa8\xa1\xa2\x88\xa2\x88\x88\xa2\x28\xa2\xa8\x88\xa2\x2a\x28\xa8\xa2\x88\xa2\x88\x66\x66\x6a\x94\x11\x10\x41\x04\x44\x11\x04\x41\x04\x45\x15\x44\x44\x45\x11\x45\x45\x15\x14\x55\x54\x51"
|
||||
b"\x41\x01\x10\x44\x04\x48\x88\x8a\x22\x28\xa2\x28\x4a\x2a\x28\xaa\x28\x8a\x28\x8a\x88\x8a\x2a\x28\xa8\xa2\xa2\x65\x96\x6a\x11\x01\x04\x11\x10\x41\x11\x10\x10\x44\x44\x44\x51\x11\x11\x45\x51\x55\x45\x45\x44\x45\x15"
|
||||
b"\x00\x40\x04\x01\x00\x08\xa2\x88\xa2\x88\x8a\x88\xa2\x88\x8a\x21\xa2\xa2\x8a\x22\x2a\xa2\x88\xaa\x22\x28\x8a\x59\x99\x99\x95\x44\x12\x10\x44\x11\x04\x11\x04\x44\x11\x14\x54\x51\x51\x51\x15\x11\x51\x51\x55\x51\x51"
|
||||
b"\x10\x11\x20\x48\x44\x4a\x28\xa2\x28\x8a\x22\x28\x88\xa2\xa2\xa8\xa8\xa8\xa2\xa2\x88\x8a\x2a\x22\x8a\x8a\x28\x65\x99\x9a\x54\x55\x41\x04\x04\x44\x41\x04\x41\x04\x41\x11\x14\x44\x51\x15\x45\x54\x45\x14\x44\x55\x15"
|
||||
b"\x04\x40\x40\x10\x00\x08\x8a\x2a\x22\x88\xa8\x8a\x2a\x28\x84\x8a\x2a\x22\x28\x88\xa2\x28\xa2\xa1\xa2\x22\x8a\x66\x66\x62\x95\x55\x55\x41\x10\x80\x10\x41\x10\x41\x11\x11\x45\x15\x15\x44\x51\x14\x51\x45\x45\x11\x45"
|
||||
b"\x10\x10\x11\x01\x04\x4a\x88\x88\xa8\xa2\x22\xa2\x88\x88\xa8\xa2\x8a\x2a\x8a\x2a\x22\x8a\x28\xa8\xa2\xa8\xa2\x65\x96\x5a\x95\x51\x54\x55\x21\x11\x11\x04\x10\x44\x11\x11\x11\x45\x44\x55\x15\x45\x54\x51\x51\x54\x51"
|
||||
b"\x01\x04\x00\x40\x40\x04\xa2\x8a\x22\x2a\x28\x88\x8a\x2a\x22\x28\xa2\xa2\xa2\x88\xa8\xa2\x4a\x22\x28\x8a\x28\x59\x99\xaa\x45\x15\x55\x55\x55\x04\x10\x41\x04\x11\x10\x44\x44\x51\x55\x11\x51\x14\x45\x14\x54\x45\x55"
|
||||
b"\x10\x01\x10\x10\x11\x0a\x28\xa2\x28\x88\x8a\x28\xa2\x82\x2a\x28\xa2\x28\x8a\x28\x8a\x28\xa2\x2a\x8a\x8a\x2a\x66\x66\x66\x95\x55\x45\x45\x14\x55\x04\x10\x44\x41\x04\x44\x44\x54\x45\x45\x15\x45\x51\x45\x15\x51\x11"
|
||||
b"\x08\x40\x04\x04\x00\x42\x8a\x28\x8a\x8a\x88\x8a\x28\xa2\x88\x8a\x2a\x8a\xa2\x8a\x22\x22\x2a\x22\x28\xa2\x88\x65\x99\x6a\x95\x55\x55\x55\x55\x51\x51\x04\x10\x10\x41\x10\x45\x11\x14\x51\x51\x51\x15\x51\x44\x55\x15"
|
||||
b"\x04\x11\x01\x04\x44\x08\xa2\x22\xa2\x22\x2a\x22\x88\x88\x8a\x22\x88\xa2\x28\xa2\x8a\x2a\x22\xa2\x8a\x28\xa2\x59\x66\x6a\x55\x51\x55\x45\x14\x55\x44\x41\x04\x44\x10\x44\x41\x15\x45\x15\x14\x45\x44\x51\x15\x11\x51"
|
||||
b"\x01\x00\x41\x00\x02\x0a\x22\x88\x88\xa2\x88\xa8\x8a\x2a\x22\xa2\x28\xa2\x8a\x28\xa2\x88\xa2\x28\xa2\x8a\x28\x99\x99\xaa\x94\x55\x51\x55\x55\x55\x04\x11\x10\x11\x04\x11\x11\x44\x51\x51\x45\x51\x55\x11\x41\x14\x45"
|
||||
b"\x10\x10\x40\x44\x40\x48\xa8\xa8\xa2\x28\x8a\x22\x22\x88\xa2\x22\x8a\x28\xa2\x8a\x28\xa2\x28\x8a\x28\xa2\x8a\x59\x99\x6a\x95\x55\x55\x55\x45\x44\x44\x41\x04\x40\x44\x41\x11\x15\x14\x54\x54\x51\x11\x44\x51\x45\x51"
|
||||
b"\x04\x04\x20\x00\x10\x4a\x22\x22\x2a\x22\x88\x8a\x88\x8a\x28\xa2\x22\x8a\x2a\xa2\x8a\x28\x8a\x8a\x22\x28\xa1\x99\x99\xa6\x95\x55\x15\x51\x54\x54\x41\x04\x10\x11\x04\x10\x45\x45\x45\x15\x11\x51\x54\x54\x44\x51\x14"
|
||||
b"\x01\x01\x04\x44\x04\x04\x8a\x2a\x22\x88\xa2\x88\xa2\x88\x8a\x22\x88\xa2\x88\x8a\xa2\x8a\x88\xa2\x8a\x8a\x2a\x59\x66\x6a\x95\x51\x55\x15\x55\x50\x40\x41\x04\x40\x41\x04\x41\x14\x51\x45\x45\x14\x45\x11\x11\x11\x45"
|
||||
b"\x80\x40\x10\x01\x01\x0a\x22\x88\xa2\x2a\x28\x92\x28\xa2\x88\xa2\x28\x88\xa8\xa2\x28\xa2\x28\x88\xa2\x22\x89\x99\x99\xaa\x15\x15\x55\x55\x55\x44\x11\x10\x42\x10\x10\x44\x15\x51\x45\x44\x51\x45\x51\x51\x44\x44\x54"
|
||||
b"\x10\x11\x01\x10\x40\x42\xa2\x28\x8a\x22\x12\x28\x8a\x28\x62\x28\x8a\x2a\x2a\x2a\x28\x88\x8a\x28\xa2\xa8\xa1\x96\x66\x69\x95\x55\x55\x51\x51\x01\x10\x11\x10\x11\x04\x41\x44\x54\x54\x55\x15\x14\x44\x44\x51\x11\x15"
|
||||
b"\x04\x00\x40\x04\x10\x18\x8a\x88\xa2\x89\x28\x8a\x22\x22\x28\x8a\x22\x88\x88\xa2\x8a\x8a\x88\x8a\x28\x89\x29\x66\x66\x6a\x95\x55\x45\x15\x54\x44\x04\x40\x84\x41\x10\x44\x55\x15\x45\x11\x45\x45\x51\x51\x11\x44\x44"
|
||||
b"\x04\x44\x04\x40\x81\x08\xa2\x28\x88\x92\x8a\x22\x8a\x28\x8a\x22\x88\xa2\x8a\x28\xa2\x62\x2a\x88\x8a\x12\x8a\x66\x66\x62\x95\x55\x55\x55\x51\x01\x10\x11\x04\x10\x04\x45\x11\x44\x51\x55\x14\x51\x14\x45\x11\x14\x44"
|
||||
b"\x40\x00\x40\x10\x10\x0a\x22\x8a\x28\x88\x88\xa2\x22\x8a\x22\x88\xa2\x28\xa2\x8a\x18\x8a\x88\xa2\x88\xa2\x21\x99\x99\xaa\x95\x45\x55\x54\x44\x44\x04\x10\x41\x04\x44\x44\x54\x55\x15\x11\x45\x14\x44\x51\x45\x11\x14"
|
||||
b"\x04\x44\x04\x04\x04\x4a\x28\x88\x86\x28\xa2\x28\xa8\x88\xa2\x28\x8a\x22\x28\x92\x8a\xa2\x28\x84\xa2\x28\xa9\x99\x99\xa6\x91\x55\x51\x55\x41\x04\x41\x04\x10\x44\x41\x15\x14\x45\x45\x14\x51\x51\x45\x11\x11\x14\x45"
|
||||
b"\x04\x02\x10\x41\x00\x04\x8a\x2a\x22\x8a\x2a\x22\x22\x8a\x28\x8a\x22\x8a\x21\x28\xa2\x2a\x8a\x2a\x2a\x2a\x21\x96\x66\x6a\x15\x55\x15\x45\x10\x41\x20\x41\x04\x41\x11\x11\x45\x51\x51\x45\x14\x44\x41\x11\x45\x45\x10"
|
||||
b"\x00\x40\x04\x20\x44\x4a\xa2\x88\xa8\x88\x88\xa8\xa2\x22\x8a\x22\xa2\x22\x4a\x28\xa2\x88\xa2\x88\x88\x88\xa9\x66\x66\x6a\x95\x55\x55\x54\x04\x12\x04\x10\x40\x10\x44\x54\x51\x14\x44\x51\x45\x54\x51\x44\x44\x41\x14"
|
||||
b"\x10\x04\x40\x04\x00\x08\x88\x8a\x22\x8a\x22\x22\x28\xa8\x88\xa2\x28\x92\x22\x8a\x28\xa2\x28\xa2\x8a\x28\x8a\x66\x66\x62\x95\x55\x54\x51\x11\x04\x41\x04\x11\x04\x11\x15\x15\x14\x55\x14\x51\x05\x14\x44\x44\x51\x11"
|
||||
b"\x08\x40\x04\x40\x41\x0a\x28\xa2\x28\xa2\x8a\x28\x8a\x22\x28\xa2\x8a\x28\xa2\x22\x8a\x2a\x8a\x28\xa2\x88\xa1\x99\x99\xa9\x95\x45\x45\x44\x04\x40\x44\x04\x10\x41\x15\x11\x45\x45\x11\x45\x14\x51\x11\x11\x11\x11\x11"
|
||||
b"\x00\x10\x40\x10\x10\x12\x8a\x28\x88\x88\xa2\x8a\x22\x28\x8a\x28\x88\x8a\x22\x88\xa2\x88\xa2\x8a\x22\x28\x89\x96\x66\x6a\x94\x55\x55\x01\x01\x04\x01\x01\x04\x11\x11\x44\x51\x11\x45\x11\x44\x44\x44\x45\x11\x11\x11"
|
||||
b"\x11\x00\x11\x01\x01\x08\x8a\x22\xa2\x8a\x22\x22\x8a\x22\x88\x88\x8a\x22\x28\xa2\x28\xa2\x28\xa2\x28\x8a\x29\x99\x99\xa2\x55\x55\x54\x44\x48\x41\x11\x10\x41\x04\x54\x55\x15\x14\x51\x54\x51\x11\x11\x44\x51\x11\x10"
|
||||
b"\x00\x11\x00\x40\x10\x00\x48\xa8\x88\xa2\x28\xa2\x22\x88\xa2\x8a\x22\x8a\x22\x28\x88\x8a\x8a\x28\x8a\x22\x89\x99\x99\x2a\x95\x54\x54\x10\x10\x11\x04\x10\x10\x41\x11\x44\x51\x45\x14\x44\x44\x44\x44\x44\x44\x44\x45"
|
||||
b"\x11\x00\x84\x04\x02\x10\x08\x22\x8a\x22\x8a\x28\xa8\xa2\x28\x88\xa2\x22\x8a\x22\x8a\x28\xa2\x8a\xa2\x88\xa1\x99\x66\xaa\x15\x45\x50\x41\x04\x40\x40\x44\x01\x11\x14\x45\x11\x44\x51\x14\x44\x44\x44\x44\x44\x44\x41"
|
||||
b"\x00\x48\x00\x40\x80\x04\x01\x00\x62\x88\xa2\x22\x22\x28\x88\xa2\x28\xa2\x22\x28\xa2\x8a\x28\xa2\x28\xa2\x29\x96\x66\xa1\x95\x55\x41\x04\x40\x11\x04\x01\x10\x45\x15\x51\x44\x55\x14\x51\x11\x04\x44\x45\x11\x11\x10"
|
||||
b"\x10\x01\x10\x20\x11\x02\x10\x10\x08\xa8\x8a\x28\x8a\x22\x8a\x28\x8a\x22\x8a\x22\x22\x22\x8a\x28\x8a\x28\x86\x66\x66\x6a\x55\x54\x10\x42\x11\x00\x41\x10\x41\x11\x44\x44\x55\x11\x15\x14\x41\x10\x44\x44\x45\x11\x11"
|
||||
b"\x21\x10\x04\x01\x00\x40\x01\x08\x40\x06\x22\x8a\x22\x28\xa2\x12\x88\xa2\x22\x8a\x28\xa2\x22\x8a\x88\x8a\x26\x66\x9a\xa6\x95\x15\x04\x10\x04\x11\x10\x04\x10\x44\x54\x51\x11\x44\x44\x44\x41\x04\x11\x11\x11\x11\x11"
|
||||
b"\x01\x01\x01\x10\x10\x21\x20\x80\x21\x00\x28\x88\xa2\x88\x86\x28\xa2\x28\xa2\x22\x88\x8a\x28\xa2\x8a\x8a\x29\x99\xa6\x6a\x95\x54\x41\x04\x41\x10\x04\x41\x04\x55\x14\x45\x44\x45\x45\x11\x10\x44\x41\x11\x11\x11\x10"
|
||||
b"\x10\x10\x10\x01\x01\x00\x00\x12\x00\x48\x00\x8a\x28\x8a\x22\x88\x8a\x22\x28\xa2\x22\x88\x8a\x28\xa2\x22\x86\x66\x66\x89\x91\x50\x10\x41\x10\x04\x40\x40\x45\x44\x45\x14\x45\x44\x51\x10\x04\x01\x10\x44\x44\x44\x44"
|
||||
b"\x01\x01\x02\x10\x10\x10\x44\x00\x42\x01\x10\x02\x22\x88\xa2\x28\xa2\x28\x8a\x22\x88\xa2\xa2\x88\x8a\x88\xa6\x59\x9a\x6a\x95\x41\x04\x20\x04\x40\x44\x11\x10\x51\x51\x44\x51\x15\x14\x44\x41\x10\x11\x05\x11\x11\x11"
|
||||
b"\x10\x20\x00\x04\x08\x08\x02\x10\x10\x40\x08\x40\x42\x28\x88\x8a\x22\x8a\x22\x28\x8a\x28\x88\x8a\x12\x8a\x26\x65\x99\xaa\x15\x04\x21\x04\x01\x04\x11\x04\x45\x15\x14\x51\x45\x44\x51\x01\x04\x11\x04\x41\x11\x11\x14"
|
||||
b"\x01\x01\x04\x40\x80\x40\x40\x08\x00\x08\x00\x20\x04\x08\xa2\x88\x88\x88\xa2\x88\xa2\x22\x28\xa2\xa2\x8a\x26\x59\x99\xa1\x94\x12\x00\x41\x10\x11\x00\x44\x45\x44\x45\x14\x50\x45\x14\x44\x41\x00\x41\x11\x11\x14\x44"
|
||||
b"\x10\x10\x80\x01\x04\x04\x08\x41\x21\x01\x21\x04\x00\x41\x22\x22\x8a\x28\x88\x8a\x22\x28\x88\x88\x88\xa2\x85\x96\x59\xaa\x90\x80\x44\x10\x04\x00\x44\x11\x11\x15\x11\x45\x15\x11\x44\x40\x10\x11\x10\x01\x04\x44\x44"
|
||||
b"\x01\x00\x10\x40\x00\x42\x00\x00\x00\x80\x00\x00\x88\x00\x04\x88\xa2\x22\x28\xa2\x22\x88\xa2\x8a\x2a\x28\xa9\x99\x9a\x9a\x81\x04\x01\x01\x01\x10\x04\x11\x44\x45\x14\x44\x44\x51\x11\x04\x04\x40\x04\x44\x41\x11\x11"
|
||||
b"\x20\x11\x00\x10\x40\x00\x44\x10\x48\x12\x12\x10\x00\x48\x00\x02\x22\x8a\x22\x22\x28\x8a\x22\x22\x88\x8a\x25\x99\x9a\xaa\x10\x10\x40\x41\x10\x04\x41\x14\x51\x41\x44\x51\x51\x15\x10\x41\x10\x11\x10\x10\x10\x44\x44"
|
||||
b"\x01\x00\x10\x00\x21\x04\x01\x00\x00\x00\x00\x08\x40\x01\x08\x48\x08\xa2\x28\x8a\x22\x22\x22\x88\x8a\x22\x89\x66\x69\xa4\x04\x04\x10\x10\x04\x40\x10\x44\x44\x54\x45\x11\x14\x45\x10\x10\x41\x01\x04\x11\x04\x11\x11"
|
||||
b"\x10\x21\x01\x21\x00\x40\x80\x20\x44\x10\x44\x00\x12\x10\x80\x04\x04\x12\x88\xa2\x22\x8a\x28\x8a\x22\x88\xa6\x59\x9a\x90\x41\x01\x04\x04\x40\x11\x04\x44\x44\x44\x51\x11\x11\x41\x04\x04\x10\x44\x41\x00\x44\x11\x11"
|
||||
b"\x04\x00\x10\x00\x10\x08\x00\x04\x00\x04\x02\x04\x00\x00\x10\x80\x40\x00\x8a\x22\x88\xa2\x22\x22\x88\xa8\x86\x66\xaa\x41\x00\x40\x41\x00\x04\x00\x01\x11\x45\x14\x44\x51\x44\x50\x41\x11\x04\x10\x10\x44\x01\x04\x41"
|
||||
b"\x41\x11\x00\x10\x02\x00\x44\x40\x08\x40\x81\x02\x04\x20\x00\x04\x21\x08\x41\x22\x28\x88\x88\xa2\x28\x8a\x26\x59\xa4\x10\x20\x11\x00\x44\x41\x11\x11\x11\x45\x44\x51\x11\x14\x44\x10\x04\x04\x04\x04\x01\x10\x40\x44"
|
||||
b"\x00\x00\x08\x01\x10\x40\x00\x08\x40\x08\x10\x20\x02\x01\x20\x40\x00\x81\x00\x04\x88\x8a\x28\x88\x88\xa2\xa5\x9a\xa4\x01\x04\x40\x11\x00\x04\x00\x44\x44\x44\x45\x11\x44\x44\x41\x04\x41\x01\x01\x11\x10\x44\x04\x11"
|
||||
b"\x12\x04\x01\x00\x04\x10\x48\x00\x08\x40\x42\x01\x20\x10\x01\x08\x48\x10\x22\x08\x0a\x22\x88\x89\x22\x22\x26\x6a\x41\x10\x04\x04\x00\x11\x01\x11\x14\x44\x44\x44\x44\x45\x14\x10\x40\x10\x41\x10\x00\x10\x01\x04\x40"
|
||||
b"\x00\x40\x40\x11\x00\x00\x01\x04\x00\x04\x00\x40\x01\x00\x42\x00\x00\x02\x00\x00\x40\x48\x88\xa2\x28\x88\x99\xa6\x11\x08\x00\x40\x44\x00\x40\x04\x11\x14\x44\x51\x11\x11\x44\x44\x04\x04\x10\x04\x44\x04\x44\x40\x11"
|
||||
b"\x21\x00\x10\x80\x81\x04\x10\x00\x44\x80\x84\x01\x00\x48\x20\x44\x04\x20\x11\x10\x04\x00\x62\x22\x22\x28\x99\xa8\x00\x81\x10\x10\x01\x10\x11\x04\x44\x44\x44\x44\x51\x11\x44\x01\x01\x01\x04\x41\x01\x10\x00\x11\x04"
|
||||
b"\x00\x12\x01\x04\x10\x02\x01\x04\x00\x04\x01\x00\x10\x80\x04\x00\x80\x04\x00\x02\x00\x20\x02\x88\x88\x88\x99\xa1\x11\x00\x04\x08\x40\x04\x00\x51\x44\x44\x44\x45\x11\x51\x11\x10\x10\x40\x00\x40\x44\x04\x44\x40\x40"
|
||||
b"\x11\x00\x00\x00\x04\x20\x00\x00\x20\x40\x40\x92\x04\x04\x00\x08\x01\x00\x42\x00\x10\x04\x08\x0a\x22\x88\xa6\x10\x40\x44\x01\x04\x10\x40\x44\x11\x14\x51\x44\x44\x44\x11\x44\x04\x04\x11\x04\x11\x04\x10\x44\x11\x04"
|
||||
b"\x00\x41\x04\x44\x40\x01\x04\x82\x04\x00\x20\x00\x42\x01\x02\x00\x40\x20\x00\x41\x02\x02\x00\x40\x28\x88\x9a\x04\x20\x01\x10\x40\x04\x01\x01\x11\x14\x11\x11\x11\x44\x51\x11\x01\x01\x00\x10\x04\x10\x40\x01\x00\x41"
|
||||
b"\x10\x10\x10\x00\x08\x40\x40\x00\x40\x84\x04\x10\x00\x10\x20\x44\x08\x01\x04\x00\x20\x41\x10\x01\x00\x62\x24\x10\x04\x41\x00\x04\x10\x40\x44\x45\x05\x11\x44\x51\x11\x11\x01\x10\x40\x11\x01\x01\x00\x11\x10\x44\x10"
|
||||
b"\x04\x01\x02\x04\x10\x04\x01\x04\x01\x02\x01\x02\x10\x02\x00\x00\x01\x00\x80\x82\x00\x20\x08\x10\x04\x02\x90\x01\x00\x10\x11\x01\x00\x10\x81\x11\x41\x11\x14\x11\x11\x11\x10\x04\x11\x00\x10\x40\x44\x41\x01\x01\x04"
|
||||
b"\x81\x00\x10\x00\x00\x40\x20\x42\x00\x10\x40\x20\x04\x80\x10\x42\x10\x10\x08\x00\x04\x01\x00\x00\x80\x80\x04\x10\x44\x01\x00\x40\x11\x04\x11\x44\x51\x14\x45\x44\x44\x44\x04\x41\x00\x11\x00\x10\x00\x04\x10\x40\x41")
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
# 600 x 488
|
||||
color_image_inkplate6COLOR = bytearray(
|
||||
b"\x33\x33\x31\x11\x11\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33"
|
||||
b"\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33"
|
||||
|
|
|
@ -1,106 +1,106 @@
|
|||
color_image_ip7 = bytearray(
|
||||
b"\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55"
|
||||
b"\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55"
|
||||
b"\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45"
|
||||
b"\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55"
|
||||
b"\x55\x15\x45\x54\x55\x45\x54\x55\x45\x54\x55\x45\x54\x55\x45\x54\x55\x45\x54\x55\x45\x54\x55\x45\x54\x55\x45\x54\x55\x45\x54\x55\x45\x54\x55\x45\x54\x55\x45\x54\x55\x45\x54\x55\x45\x54\x55\x45\x54\x55\x45\x54\x55"
|
||||
b"\x51\x54\x55\x15\x51\x55\x15\x51\x55\x15\x51\x55\x15\x51\x55\x15\x51\x55\x15\x51\x55\x15\x51\x55\x15\x51\x55\x15\x51\x55\x15\x51\x55\x15\x51\x55\x15\x51\x55\x15\x51\x55\x15\x51\x55\x15\x51\x55\x15\x51\x55\x15\x51"
|
||||
b"\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55"
|
||||
b"\x55\x45\x51\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45"
|
||||
b"\x51\x55\x15\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55"
|
||||
b"\x55\x55\x55\x45\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55"
|
||||
b"\x54\x51\x54\x55\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14"
|
||||
b"\x55\x55\x45\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55"
|
||||
b"\x45\x55\x55\x54\x55\x15\x15\x45\x45\x51\x51\x54\x54\x55\x15\x15\x45\x45\x51\x51\x54\x54\x55\x15\x15\x45\x45\x51\x51\x54\x54\x55\x15\x15\x45\x45\x51\x51\x54\x54\x55\x15\x15\x45\x45\x51\x51\x54\x54\x55\x15\x15\x45"
|
||||
b"\x55\x14\x55\x45\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55"
|
||||
b"\x55\x55\x51\x55\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x55"
|
||||
b"\x51\x55\x15\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x51"
|
||||
b"\x55\x45\x55\x45\x55\x15\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15"
|
||||
b"\x55\x55\x54\x55\x51\x54\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x56\x55\x15\x55\x45\x55\x51\x59\x54\x55\x55\x15\x55\x45\x65\x51\x51\x54\x55\x55\x15\x95\x45\x55\x51\x55\x55"
|
||||
b"\x51\x51\x45\x55\x15\x55\x51\x55\x51\x51\x54\x54\x55\x15\x15\x45\x45\x51\x51\x54\x54\x55\x15\x15\x45\x45\x51\x55\x54\x54\x55\x15\x15\x45\x55\x51\x51\x54\x54\x55\x15\x55\x55\x55\x51\x51\x54\x55\x55\x15\x15\x45\x55"
|
||||
b"\x55\x55\x55\x51\x55\x45\x55\x45\x55\x15\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x45\x45\x55\x55\x55\x55\x55\x15\x15\x55\x55\x65\x55\x54\x54\x55\x45\x55\x95\x55\x51\x51\x55\x55\x55\x15"
|
||||
b"\x54\x55\x55\x15\x55\x55\x15\x55\x15\x55\x45\x45\x51\x51\x54\x54\x55\x15\x15\x45\x45\x51\x51\x54\x54\x55\x15\x54\x55\x45\x51\x64\x54\x55\x51\x55\x15\x45\x55\x51\x55\x55\x51\x55\x15\x55\x45\x55\x15\x51\x54\x55\x51"
|
||||
b"\x55\x51\x45\x55\x51\x55\x54\x55\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x54\x55\x55\x55\x15\x55\x55\x51\x55\x55\x54\x55\x14\x55\x45\x45\x55\x59\x54\x51\x55\x15\x55\x55\x45\x51\x55"
|
||||
b"\x45\x55\x55\x55\x15\x45\x55\x51\x51\x45\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x55\x55\x51\x55\x55\x15\x45\x55\x55\x45\x55\x55\x55\x54\x55\x55\x15\x15\x45\x55\x51\x55\x54\x55\x55\x55\x55"
|
||||
b"\x55\x15\x15\x15\x55\x55\x15\x55\x55\x55\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15\x45\x45\x15\x45\x55\x54\x55\x15\x14\x56\x45\x65\x45\x45\x54\x55\x55\x54\x55\x54\x55\x51\x45\x51\x55\x15\x15"
|
||||
b"\x55\x55\x55\x51\x54\x55\x51\x45\x15\x55\x15\x55\x45\x45\x51\x51\x54\x54\x55\x15\x15\x45\x45\x51\x51\x54\x55\x55\x55\x55\x14\x55\x55\x55\x55\x65\x66\x45\x55\x55\x55\x51\x51\x55\x55\x15\x55\x55\x55\x55\x45\x55\x51"
|
||||
b"\x51\x51\x51\x55\x45\x51\x55\x55\x54\x51\x54\x54\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x54\x55\x54\x55\x55\x51\x51\x51\x58\xa2\x18\x66\x11\x95\x15\x55\x55\x91\x55\x55\x45\x15\x55\x15\x55\x51\x55"
|
||||
b"\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x54\x55\x15\x15\x45\x45\x51\x51\x54\x54\x55\x15\x15\x45\x55\x51\x45\x51\x55\x15\x55\x55\x58\x59\x99\xa1\x56\x15\x54\x54\x64\x65\x85\x45\x55\x54\x51\x54\x54\x55\x55"
|
||||
b"\x55\x15\x15\x14\x55\x15\x14\x51\x45\x45\x45\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x45\x55\x55\x55\x45\x55\x45\x45\x16\xa9\x89\x99\x95\x65\x45\x65\x99\x86\x54\x55\x15\x55\x55\x55\x55\x55\x15"
|
||||
b"\x51\x55\x55\x55\x51\x55\x55\x55\x55\x55\x55\x55\x15\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x54\x55\x15\x95\x96\x55\x54\x55\x55\x6a\x18\x66\x89\x64\x61\x96\x51\x46\x59\x59\x59\x54\x51\x55\x45\x45\x45\x51"
|
||||
b"\x55\x51\x51\x51\x55\x51\x51\x54\x54\x54\x54\x55\x54\x55\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x55\x55\x54\x51\x45\x51\x45\x55\x16\x19\xa9\xa8\x9a\x45\x99\x59\x16\x99\x24\x51\x55\x45\x55\x45\x55\x55\x55\x55"
|
||||
b"\x55\x55\x55\x55\x55\x55\x55\x45\x55\x55\x55\x51\x55\x51\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x45\x51\x55\xa2\x64\x65\x55\x51\x54\xa8\xa2\x59\xa8\x55\x66\x45\x69\x26\x55\x56\x91\x55\x95\x54\x54\x54\x54\x55"
|
||||
b"\x51\x45\x45\x15\x14\x55\x15\x55\x45\x45\x45\x55\x45\x55\x55\x15\x45\x45\x51\x51\x54\x54\x55\x15\x95\x55\x15\x45\x16\x61\x98\x69\x15\x66\x6a\x66\x66\x26\x59\x12\x56\x46\x69\x26\x65\x15\x59\x45\x15\x55\x55\x55\x51"
|
||||
b"\x55\x55\x55\x55\x55\x51\x54\x55\x55\x55\x55\x15\x55\x15\x15\x55\x55\x55\x55\x55\x55\x55\x55\x59\x15\x55\x55\x55\x59\x19\x85\x91\xa6\x56\x28\xa2\x46\x49\x95\x65\x64\x5a\x66\x64\x49\x55\x14\x55\x55\x45\x45\x45\x55"
|
||||
b"\x54\x54\x55\x51\x55\x15\x55\x51\x54\x54\x55\x54\x55\x55\x59\x51\x59\x54\x55\x15\x45\x65\x51\x92\x49\x19\x65\x95\x56\x66\x59\x99\x91\x91\xa6\x9a\x64\xa2\x51\x92\x55\x98\x61\x95\x59\x95\x55\x55\x54\x55\x55\x55\x15"
|
||||
b"\x55\x55\x51\x55\x45\x55\x45\x55\x45\x55\x51\x55\x51\x51\x54\x55\x45\x15\x51\x56\x55\x14\x55\x98\xa2\x62\x44\x54\x51\x48\x64\x99\x1a\x1a\xa2\xa9\x19\x99\x95\x65\x85\x86\x66\x46\x64\x51\x59\x14\x55\x56\x51\x51\x55"
|
||||
b"\x45\x45\x55\x45\x55\x54\x55\x15\x55\x45\x55\x45\x55\x55\x45\x55\x55\x55\x55\x54\x55\x55\x64\x8a\x69\x2a\x19\x99\x65\x56\x66\x46\x65\x99\x29\x82\x59\xa8\x54\x52\x54\x66\x98\x55\x85\x55\x45\x55\x51\x51\x55\x55\x51"
|
||||
b"\x55\x55\x15\x55\x51\x45\x55\x54\x55\x55\x15\x55\x15\x15\x55\x45\x15\x51\x45\x45\x51\x54\x8a\x6a\x2a\x99\xa8\x46\x18\x65\x18\x68\x99\x2a\x6a\xa6\x98\x66\x45\xa6\x56\x69\x26\x64\x56\x54\x56\x55\x15\x55\x45\x15\x55"
|
||||
b"\x54\x55\x54\x54\x55\x55\x55\x55\x51\x59\x54\x55\x55\x54\x54\x55\x54\x55\x55\x55\x55\x46\xa8\x22\x49\x29\x16\xa8\x62\x15\xa5\x96\x21\x56\x24\xa9\x95\x8a\x59\x61\x65\x86\x66\x55\x65\x15\x64\x51\x55\x54\x55\x54\x55"
|
||||
b"\x55\x51\x55\x55\x55\x55\x45\x15\x15\x45\x55\x51\x51\x55\x55\x55\x55\x66\x99\x55\x15\x55\x2a\x86\xaa\xa2\x65\x92\x15\x99\x51\x91\x66\x66\x4a\x62\x12\x61\x95\x99\x51\x96\x49\x19\x19\x56\x55\x55\x54\x65\x55\x65\x51"
|
||||
b"\x55\x55\x45\x45\x45\x14\x55\x51\x55\x55\x15\x55\x55\x45\x95\x51\x46\x11\x21\x45\x54\x56\x48\x9a\xa2\x9a\x49\x98\xa9\x64\x66\x16\x98\x91\xa2\x19\x99\x89\x91\x86\x56\x49\x99\x56\x54\x65\x16\x55\x55\x55\x64\x55\x55"
|
||||
b"\x45\x15\x55\x55\x55\x55\x55\x55\x54\x55\x54\x54\x54\x58\x48\x55\x54\x99\x94\x55\x55\x55\xa6\xa2\xaa\x28\xa1\x66\x21\x91\xa1\x69\x85\x16\x4a\xa6\xa6\x69\x16\x61\x45\x95\x18\x91\x45\x51\x51\x45\x16\x45\x15\x51\x86"
|
||||
b"\x55\x54\x54\x54\x54\x55\x45\x15\x65\x51\x55\x45\x55\x46\xa5\x96\x28\x59\x54\x66\x16\x44\x62\x8a\x86\x8a\x66\x91\x86\x56\x66\x91\x59\x69\xa2\x68\x64\x6a\x65\x15\x59\x19\x69\x96\x56\x55\x95\x55\x54\x55\x59\x59\x55"
|
||||
b"\x55\x45\x55\x55\x55\x51\x55\x54\x55\x55\x45\x55\x45\x49\x45\x89\x99\x96\x62\x25\x45\x55\x66\x1a\x2a\x9a\xa8\x66\x68\x66\x48\x5a\x99\x94\x46\x86\x99\x92\x91\xa5\x96\x64\x56\x64\x65\x16\x15\x51\x65\x54\x54\x45\xa6"
|
||||
b"\x51\x55\x45\x45\x45\x55\x55\x55\x51\x45\x55\x55\x66\x56\x59\x98\xa8\x61\x26\x62\x61\x26\x60\xa9\xa1\xa8\xa6\xa1\x96\x61\x55\x95\x11\x86\x69\xa2\x86\x69\x26\x25\x14\x66\x61\x45\x55\x55\x54\x55\x45\x65\x99\x99\x19"
|
||||
b"\x55\x55\x55\x55\x55\x15\x14\x51\x55\x55\x51\x45\x91\x22\x28\x88\x66\x4a\xa2\x16\x96\x51\x26\x52\x28\x8a\x4a\x1a\x99\xa6\x99\x49\x69\x59\x94\x99\x99\x86\xaa\x95\x56\x49\x56\x5a\x46\x46\x55\x58\x56\x19\x91\x66\x64"
|
||||
b"\x55\x14\x54\x54\x55\x55\x55\x55\x54\x54\x55\x55\x48\xa9\x99\xa6\x86\x66\x64\xa5\x19\x96\x61\x99\x96\x16\xa9\xa9\x24\x18\x94\x58\x58\x66\x49\xa2\x21\x9a\x61\x86\x62\x86\x48\x65\x55\x94\x51\x45\x99\x61\x96\x61\x99"
|
||||
b"\x51\x55\x55\x55\x51\x51\x55\x15\x15\x55\x55\x22\x99\x92\x86\x88\x59\x91\x89\x59\x99\x66\x55\x99\x55\x65\x5a\x62\x69\x68\x19\x9a\x56\x21\x9a\x4a\x69\x8a\x26\xa4\x58\x51\x96\x46\x24\x66\x15\x95\x51\x96\x46\x66\x16"
|
||||
b"\x55\x55\x45\x45\x55\x55\x45\x55\x55\x45\x94\xa4\xa6\xa6\x69\x99\xa6\x66\x58\x64\x61\x14\x61\x51\x19\x91\x14\x64\x92\x65\x95\x91\x85\x65\x91\xa4\x92\x19\xa9\x25\x66\xaa\x58\x66\x59\x61\xa6\x58\x65\xa9\x99\x29\x99"
|
||||
b"\x55\x45\x55\x55\x15\x15\x55\x51\x51\x59\x8a\x8a\x48\x0a\x86\x62\x64\x52\x99\x56\x55\x65\x99\x25\x54\x46\x66\x62\x19\x91\x61\x99\x65\x92\x66\x8a\xa4\xa2\x62\x6a\x22\x14\x66\x61\x91\x9a\x61\x15\x98\x46\x66\x61\x65"
|
||||
b"\x51\x55\x15\x15\x55\x54\x54\x55\x55\x22\x18\x66\xaa\x64\x64\xa6\x86\x65\x09\x85\x64\x59\x56\x56\x65\x59\x85\x19\x96\x46\x5a\x48\x69\x18\x89\x92\x2a\x1a\x26\x21\x64\x69\x59\x99\x64\x98\x98\x66\x46\x65\x18\x96\x45"
|
||||
b"\x55\x51\x55\x55\x45\x45\x55\x55\x19\xa9\xaa\x8a\x1a\xaa\xa9\x61\x99\x1a\x58\x59\x16\x94\x85\x65\x45\x95\x56\x68\x99\x59\x84\x66\x89\x64\xa2\x2a\x11\xa1\x22\x64\x89\x84\x91\x86\x1a\x19\x92\x66\x61\x99\x26\x66\x56"
|
||||
b"\x54\x55\x51\x51\x55\x55\x45\x45\x52\x12\x0a\xaa\xa9\x26\x46\x96\x9a\x65\x99\x96\x65\x25\x56\x44\x56\x45\x15\x56\x24\x64\x69\xa1\x92\x21\x84\x99\x22\x1a\x62\x09\x28\x5a\x65\x61\x99\x86\x69\x92\x19\x92\x69\x91\x65"
|
||||
b"\x55\x55\x55\x55\x54\x55\x55\x55\x58\x2a\x86\x18\x62\x68\xa8\x69\x19\x14\x59\x91\x51\x66\x54\x59\x95\x55\x62\x65\x49\x92\x86\x1a\x62\x9a\x2a\x44\x86\x44\x99\xa6\x85\x92\x48\x86\x46\x66\x26\x26\x56\x26\x62\x16\x61"
|
||||
b"\x45\x45\x15\x15\x15\x51\x51\x51\x55\x62\xa9\xa6\x66\x86\x66\x46\x91\x65\x92\x15\x96\x51\x45\x66\x61\x46\x56\x46\x06\x65\x99\xa4\xa6\x21\x84\x62\x64\x99\x82\x11\x18\x64\x96\x28\x61\x18\x62\x49\x9a\x62\x59\x65\x92"
|
||||
b"\x55\x55\x55\x55\x55\x55\x55\x55\x45\x59\x18\xa8\x98\x99\x91\xa4\x56\x66\x55\x66\x59\x25\x59\x14\x55\x55\x15\x41\x09\x18\x88\x9a\x18\x62\x49\x91\x80\x64\x55\x99\x92\x44\x46\x14\x98\x86\x66\x08\x62\x20\x91\x58\x65"
|
||||
b"\x54\x55\x51\x51\x51\x45\x15\x15\x56\x2a\xaa\x66\x69\x99\x19\x65\x99\x14\x61\x94\x46\x56\x59\x99\x64\x65\x64\x49\x22\x19\x92\x49\x86\x86\x61\x99\x18\x46\x49\x11\x12\x5a\x21\x22\x05\x20\x48\x61\x99\x24\x96\x46\xa6"
|
||||
b"\x55\x51\x55\x55\x55\x55\x55\x54\x59\x86\x26\x86\x19\x99\x66\x59\x45\x99\x55\x55\x55\x64\x51\x55\x45\x51\x55\x89\x89\x98\x8a\x62\x61\x61\x56\x46\x46\x48\x21\x20\x64\x84\x48\x84\x60\x92\x89\x96\x22\xa8\x65\x9a\x59"
|
||||
b"\x55\x55\x45\x45\x15\x55\x51\x55\x50\xa2\x62\x69\xa4\x64\x55\x14\x59\x56\x59\x19\x91\x45\x55\x85\x96\x66\x46\x61\x8a\x66\x62\x21\x18\x86\x45\x44\x40\x81\x10\x46\x08\x12\x16\x10\x92\x08\x42\x26\x59\x99\x98\x64\x86"
|
||||
b"\x45\x15\x55\x55\x54\x51\x55\x45\x65\x56\x16\x1a\x66\x46\xa1\x65\x99\x18\x65\x54\x56\x55\x98\x55\x15\x15\x55\x5a\x48\x91\x84\x62\x89\x18\x64\x84\x48\x52\x06\x10\x41\x10\x40\x1a\x41\x91\x28\x45\x22\x46\x46\x89\x99"
|
||||
b"\x55\x54\x54\x55\x55\x55\x15\x55\x15\x15\x59\xa4\x89\x99\xa6\x66\x52\x65\x91\x45\x99\x59\x15\x59\x59\x51\x86\x12\x61\xa6\x6a\x66\x62\x86\x21\x06\x11\x05\x44\x48\x12\x11\x04\x84\x66\x10\x04\x98\x64\x64\xa8\x66\x22"
|
||||
b"\x55\x45\x55\x51\x45\x45\x54\x55\x55\x59\xa6\x2a\x66\x66\x49\x91\x65\x99\x15\x96\x51\x45\x56\x44\x64\x56\x55\x65\x1a\x18\x96\x16\x16\x62\x86\x60\x06\x44\x61\x51\x04\x48\x61\x12\x11\x22\x28\x88\x99\x66\x19\xa2\x89"
|
||||
b"\x51\x55\x45\x55\x55\x55\x55\x51\x51\x61\x22\x68\x68\x44\xa6\x24\x59\x25\x51\x65\x15\x96\x45\x56\x45\x65\x19\x99\x99\xa9\x85\x65\x92\x29\x28\x54\x80\x61\x14\x86\x11\x11\x00\x08\x42\x04\x04\x86\x44\x49\x91\x19\x9a"
|
||||
b"\x55\x55\x55\x15\x51\x55\x15\x15\x99\x9a\x66\x86\x9a\xaa\x6a\x6a\x91\x91\x9a\x50\x59\x45\x98\x65\x66\x51\x64\x4a\x62\x84\x66\x46\x66\x5a\x85\x88\x66\x18\x88\x51\x18\x62\x12\x01\x24\x80\x82\x22\x12\x56\x1a\x99\x96"
|
||||
b"\x55\x14\x55\x54\x55\x45\x55\x55\x48\x8a\x99\xa9\x86\x66\x24\x91\x19\x66\x64\x66\x64\x59\x55\x59\x15\x16\x59\xa8\xa6\x66\x58\x59\x19\x18\x5a\x66\x21\x86\x61\x22\x21\x20\x25\x52\x48\x48\x18\x65\xa1\xa1\x65\x19\x21"
|
||||
b"\x51\x55\x51\x55\x54\x55\x45\x58\xa6\x64\x88\x62\x92\x49\xa9\xa6\x9a\x48\x66\x58\x55\x94\x51\x91\x69\xa6\x64\x86\x49\x99\x15\x91\x61\x95\x91\x12\x66\x68\x96\x61\x9a\x45\x12\x24\x21\x91\x99\x92\x46\x16\x66\x51\x98"
|
||||
b"\x55\x55\x55\x45\x45\x56\x55\x16\x46\x8a\x66\x99\xa6\xa2\x64\x99\x24\x55\x91\x45\x99\x65\x65\x56\x92\x61\x29\xa6\x99\x11\x99\x1a\x56\x46\x65\x96\x18\x65\x92\x18\x91\x99\x88\x61\x99\x19\x24\x66\xa9\x98\x45\x96\x65"
|
||||
b"\x55\x45\x15\x55\x55\x54\x55\x8a\xa8\x66\x9a\xa8\xa8\x66\x89\x9a\x56\x69\x15\x96\x51\x51\x51\x98\x6a\x1a\x92\x64\x51\x66\x46\x54\x65\x64\x46\x59\x65\x91\x89\xa1\x98\x48\x9a\x9a\x61\xa2\x26\x88\x42\x19\x11\x86\x18"
|
||||
b"\x51\x55\x54\x54\x55\x95\x51\x98\x66\x99\x91\x86\x9a\xa9\x99\x91\x99\x56\x55\x65\x15\x96\x66\x44\xa6\x28\xa6\x15\x9a\x64\x55\x19\x51\x26\x64\x45\x11\x9a\x19\x19\x15\x98\x86\x24\xa6\x19\x91\x99\x99\x65\x99\x59\x86"
|
||||
b"\x55\x54\x55\x55\x51\x45\x68\xaa\x29\x99\x2a\xa8\xa1\x91\x94\x65\x46\x19\x64\x55\x59\x46\x5a\xaa\x22\x99\x99\x86\x64\x95\x99\x66\x16\x19\x98\x64\x19\x21\x89\x66\x66\x59\x66\x61\x85\x65\x99\x19\x19\x99\x96\x66\x59"
|
||||
b"\x54\x55\x55\x15\x95\x55\x06\x26\x64\x64\x92\x19\x99\x26\x45\x96\x59\x54\x55\x86\x54\x69\x24\x66\x66\x8a\x24\x59\x1a\x46\x51\x91\x65\x92\x26\x59\x66\x66\x99\x94\x51\x46\x46\x16\x59\x92\x46\x61\x91\x84\x61\x91\x96"
|
||||
b"\x55\x51\x51\x54\x55\x51\x55\x62\x85\x59\xaa\xaa\x9a\x66\x59\x64\x65\x91\x64\x55\x19\xa6\x9a\x88\xa8\x65\x99\x99\x64\x55\x16\x46\x2a\x29\x55\x16\x59\x28\xa4\x45\x56\x54\x59\x66\x64\xa6\x99\x55\x66\x66\x65\x19\x46"
|
||||
b"\x45\x55\x55\x55\x51\x55\x59\x24\x59\x98\x88\x61\x26\x64\x66\x45\x94\x56\x45\x66\x58\x92\x8a\x2a\x86\x9a\x66\x46\x45\x66\x69\x26\x51\xa6\x45\x59\x22\xa9\x86\x56\x19\x25\x51\x59\x29\x98\x68\x99\x14\x65\x19\x66\x69"
|
||||
b"\x55\x15\x15\x45\x55\x15\x51\x85\x66\x26\x2a\x1a\x61\x86\x91\x59\x45\x99\x56\x59\x64\xaa\x26\x98\x69\xa4\x86\x65\x56\x61\x92\x66\xaa\x45\x55\x14\x66\x49\x99\x91\x59\x65\x96\x45\x52\x45\xa6\x65\x59\x51\x55\x94\x55"
|
||||
b"\x55\x55\x54\x55\x15\x54\x54\x59\x61\x88\x66\x65\x9a\x69\x9a\x9a\x66\x51\x96\x45\x16\x66\x68\xaa\xa8\x66\xa4\x51\x99\x1a\x26\x64\x46\x55\x15\x68\x98\xa6\x19\x15\x91\x14\x59\x56\x55\x99\x86\x14\x56\x55\x64\x55\x51"
|
||||
b"\x51\x51\x55\x55\x55\x45\x59\x9a\x1a\xaa\x19\x5a\x26\xa4\xa9\x28\x68\x55\x45\x59\xaa\x28\xaa\x61\x99\x89\x95\x95\x86\xaa\x19\x88\x99\x51\x51\x45\xaa\x89\xa4\x59\x59\x65\x45\x14\x65\x19\x59\xa6\x64\x59\x95\x45\x95"
|
||||
b"\x55\x55\x45\x51\x51\x55\x55\x22\xaa\x19\x94\xa1\xa8\x8a\xa2\x9a\x95\x98\x66\x92\x49\xaa\x8a\xaa\x86\x99\x19\x66\x69\x18\x64\x66\x54\x55\x55\x9a\x46\x6a\x19\x54\x46\x51\x55\x65\x45\x51\x91\x86\x45\x51\x45\x59\x45"
|
||||
b"\x55\x15\x55\x15\x55\x55\x15\x9a\x21\xa5\x62\x6a\xaa\x6a\x69\xa1\x69\x86\x64\x66\xa6\x24\x9a\x19\xa9\x19\x91\x46\x1a\xa6\x66\x89\x15\x51\x59\x18\xaa\x26\xa4\x66\x99\x15\x64\x54\x55\x55\x16\x59\x96\x55\x56\x54\x55"
|
||||
b"\x51\x54\x55\x55\x45\x45\x58\xa1\xa6\x54\x69\xa1\x86\xaa\x2a\x16\x44\x99\x9a\xa9\x2a\xaa\xa9\xa8\x62\x66\x56\x69\xa2\x61\x98\x95\x55\x15\x85\x66\x62\xa2\x45\x51\x91\x56\x45\x65\x59\x15\x66\x61\x25\x19\x14\x55\x55"
|
||||
b"\x55\x55\x51\x54\x55\x55\x86\x8a\x15\x66\xa2\x2a\xaa\x26\x65\xaa\xa9\xaa\x86\x46\xa4\x8a\x18\x9a\x96\x61\x46\x86\x9a\x2a\x89\x99\x45\x55\x56\x48\xa6\x26\x9a\x65\x65\x64\x55\x46\x51\x55\x51\x56\x69\x65\x65\x65\x91"
|
||||
b"\x55\x45\x55\x45\x54\x55\x68\x69\x59\x12\x1a\x9a\x4a\x62\x61\x98\x6a\x64\x69\x9a\x2a\x98\xaa\xa1\x99\x96\x59\xa8\xa9\x99\x26\x54\x56\x51\x45\x99\xa2\x86\x65\x14\x56\x45\x54\x55\x15\x51\x55\x19\x84\x51\x56\x44\x55"
|
||||
b"\x51\x55\x15\x55\x55\x51\x2a\x15\x56\xaa\xaa\x28\xa6\x16\x6a\x8a\x92\x8a\x98\x66\x62\x8a\x86\x66\x61\xa5\xa2\x99\x8a\x62\x99\x45\x54\x55\x55\x1a\x66\x6a\x19\x59\x45\x55\x45\x91\x55\x55\x15\x99\x62\x96\x45\x55\x55"
|
||||
b"\x55\x55\x54\x55\x95\x56\x89\x65\x12\x4a\x26\xa6\xa1\x66\x28\x99\xaa\x66\x66\xa2\x8a\x21\xaa\x19\x1a\x46\x1a\x2a\x66\x29\x94\x55\x45\x51\x91\x62\x1a\x86\x91\x95\x54\x59\x55\x55\x54\x55\x55\x44\x56\x64\x56\x46\x45"
|
||||
b"\x54\x51\x55\x51\x45\x14\x65\x55\x68\xa9\x8a\x22\x56\x6a\x69\xa8\xa6\x28\xa9\x16\x54\xaa\x46\x66\xa6\x66\xaa\x64\xa2\x99\x45\x56\x55\x95\x55\x66\xa8\x6a\x65\x44\x65\x45\x19\x15\x95\x45\x51\x55\x99\x45\x95\x65\x55"
|
||||
b"\x55\x55\x45\x55\x55\x54\x54\x51\x8a\xa8\xa2\x65\x95\xa2\x8a\x8a\x4a\x66\x61\xa9\x6a\x46\x99\xa1\x98\x68\x62\xaa\x69\xa4\x55\x45\x51\x51\x45\x91\xa6\xa8\x94\x55\x56\x56\x65\x59\x45\x55\x15\x55\x94\x66\x64\x51\x59"
|
||||
b"\x45\x55\x55\x15\x51\x55\x55\x54\xa6\x8a\x9a\x59\x46\x1a\xa8\xaa\xa6\x9a\x99\x96\x92\xa4\x64\x9a\x49\xa6\xaa\x46\x22\x45\x59\x54\x55\x15\x55\x16\x8a\x89\x95\x66\x45\x15\x45\x51\x55\x51\x55\x91\x45\x99\x45\x95\x91"
|
||||
b"\x55\x14\x55\x54\x55\x59\x45\x66\x8a\x98\x65\x15\x5a\xa8\x69\x98\x69\x21\x86\x46\x26\x66\x6a\x66\x9a\x8a\x22\xaa\xa5\x55\x94\x55\x59\x56\x51\x59\x9a\x9a\x46\x54\x55\x64\x55\x15\x51\x55\x54\x55\x56\x54\x69\x65\x15"
|
||||
b"\x55\x55\x51\x55\x55\x14\x55\x12\x08\x89\x91\x54\x62\x8a\x8a\x86\xa2\x66\x56\x69\xa9\x9a\x1a\x29\x29\xa2\xa6\x48\x59\x99\x45\x65\x91\x64\x55\x96\x28\x62\x55\x15\x64\x65\x55\x55\x15\x45\x65\x55\x55\x19\xa2\x51\x55"
|
||||
b"\x51\x55\x15\x45\x45\x55\x55\x52\x9a\x65\x55\x65\xa6\x9a\x98\x6a\x66\x99\x64\xa8\x98\x61\xa6\x5a\x64\x98\x82\x26\x64\x54\x55\x51\x55\x45\x66\x51\x5a\xa6\x65\x66\x55\x95\x64\x55\x55\x55\x15\x45\x15\x56\x59\x95\x59"
|
||||
b"\x55\x45\x55\x55\x55\x55\x45\x4a\x21\x56\x56\x5a\x28\x88\xaa\xaa\x89\x56\x2a\x66\x66\x66\xa1\xa1\xa6\x6a\x0a\x69\x95\x45\x59\x15\x45\x55\x51\x56\x64\x89\x18\x51\x45\x45\x15\x51\x54\x55\x54\x55\x54\x64\x59\x19\x95"
|
||||
b"\x55\x55\x54\x54\x54\x51\x55\x50\x55\x64\x51\x86\xa2\xa9\x86\x46\x56\x46\x66\x28\x66\x2a\x66\x9a\x46\x86\x66\x91\x45\x55\x95\x55\x56\x59\x15\x85\x99\x99\x55\x95\x55\x55\x55\x55\x45\x51\x55\x55\x45\x55\x65\x64\x51"
|
||||
b"\x51\x51\x45\x55\x55\x55\x54\x55\x65\x45\x66\x68\xa6\x2a\xaa\xa4\x65\x58\xa2\x99\x92\x64\x69\x25\x99\x9a\xa1\xa6\x56\x64\x51\x51\x51\x45\x66\x59\x18\xa1\xa5\x59\x64\x54\x51\x45\x55\x55\x45\x51\x55\x51\x46\x45\x55"
|
||||
b"\x55\x55\x55\x51\x45\x54\x55\x55\x54\x55\x92\x8a\x8a\x92\x44\x65\x54\x66\x9a\x66\x6a\xa9\x92\x64\x64\xa8\x9a\x19\x64\x55\x55\x55\x95\x96\x51\x66\x66\x66\x44\x51\x45\x55\x55\x55\x54\x55\x55\x15\x55\x15\x54\x59\x55"
|
||||
b"\x54\x55\x55\x15\x55\x15\x51\x64\x55\x54\xaa\xa4\xa2\x29\xa5\x55\x45\x4a\xa9\x86\x26\x46\xa6\x66\x6a\x9a\x69\x94\x59\x46\x54\x59\x45\x64\x66\x46\x9a\x19\x55\x95\x55\x45\x55\x54\x55\x51\x55\x55\x45\x55\x65\x65\x19"
|
||||
b"\x55\x51\x45\x55\x55\x55\x15\x55\x55\x66\x24\xaa\x26\x62\x59\x45\x55\xa9\x24\x99\xa8\x69\x19\x99\x86\x8a\x8a\x66\x64\x55\x15\x51\x56\x15\x96\x59\x21\xa4\x99\x54\x55\x55\x14\x55\x45\x55\x85\x54\x55\x54\x56\x51\x55"
|
||||
b"\x45\x55\x55\x54\x51\x51\x55\x15\x14\x52\xaa\x88\x88\x95\x45\x55\x16\x2a\xa9\xaa\x45\x9a\x64\x61\xaa\x69\xa4\x99\x19\x65\x59\x95\x55\x66\x46\x4a\x66\x99\x54\x55\x51\x51\x55\x45\x55\x15\x55\x15\x55\x15\x51\x56\x64"
|
||||
b"\x55\x15\x14\x55\x55\x55\x55\x55\x55\x4a\x28\x64\x95\x54\x55\x51\x59\xa4\x6a\x64\x66\xa4\x56\x5a\x92\x8a\x29\x91\x99\x51\x54\x54\x61\x91\x99\x99\xaa\x46\x45\x64\x55\x95\x55\x55\x55\x54\x55\x55\x51\x55\x55\x15\x45"
|
||||
b"\x55\x55\x55\x51\x55\x15\x45\x45\x51\xaa\x62\xa1\x51\x65\x54\x55\x58\xaa\x92\x86\x69\x45\x99\xa1\xaa\x69\xa6\x66\x91\x95\x85\x55\x55\x66\x62\x64\xa4\x99\x59\x45\x55\x55\x45\x15\x14\x55\x51\x51\x55\x51\x45\x58\x56"
|
||||
b"\x51\x51\x55\x15\x45\x54\x55\x55\x15\x22\x26\x16\x55\x55\x55\x55\x5a\x48\xa6\x66\x64\x65\x92\x9a\x24\xa8\xa9\x1a\x15\x55\x55\x86\x45\x46\x19\x8a\x69\x96\x56\x55\x91\x45\x55\x55\x55\x59\x55\x55\x45\x55\x55\x55\x65"
|
||||
b"\x55\x55\x45\x55\x55\x55\x54\x55\x55\xa6\x89\x55\x54\x51\x45\x45\x92\x89\xa8\x66\x46\x59\xa6\x89\x9a\x86\x91\xa9\x66\x46\x59\x55\x56\x56\x6a\x59\x8a\x64\x64\x59\x55\x54\x55\x51\x55\x94\x54\x54\x55\x15\x55\x15\x51"
|
||||
b"\x55\x15\x55\x54\x54\x51\x55\x51\x56\x02\x55\x95\x15\x55\x55\x55\x1a\x18\x66\x64\x65\x99\x29\x99\x4a\xaa\x9a\x61\x95\x54\x51\x91\x95\x54\x64\xaa\x99\x15\x55\x54\x54\x55\x51\x55\x45\x15\x55\x55\x55\x54\x51\x54\x55"
|
||||
b"\x51\x54\x54\x55\x55\x55\x45\x55\x45\x45\x95\x45\x55\x54\x54\x55\x61\xaa\x86\x66\x66\x61\x98\x65\xa4\x98\x66\x99\x51\x45\x96\x65\x45\x15\x86\x61\x29\x65\x85\x85\x55\x55\x55\x15\x55\x55\x15\x15\x51\x55\x55\x55\x66"
|
||||
b"\x55\x55\x55\x51\x51\x55\x55\x15\x55\x55\x45\x55\x51\x45\x55\x51\x6a\x98\x66\x46\x59\x1a\xa6\x54\x6a\xaa\x92\x19\x15\x99\x64\x54\x55\x55\x5a\x66\x92\x51\x55\x55\x45\x45\x15\x54\x55\x45\x55\x54\x55\x45\x55\x45\x55"
|
||||
b"\x55\x45\x45\x55\x55\x45\x55\x54\x54\x55\x54\x54\x55\x55\x45\x55\x46\x26\x99\x99\x19\xa6\x15\x45\x52\x49\xa6\x65\x59\x99\x25\x45\x55\x45\x54\x86\x25\x95\x99\x15\x55\x55\x55\x45\x51\x55\x45\x45\x55\x55\x14\x55\x45"
|
||||
b"\x51\x55\x55\x15\x15\x54\x51\x55\x55\x51\x55\x55\x55\x15\x55\x15\x9a\x98\x64\x65\x92\x61\x54\x55\x6a\xa8\x6a\x65\x94\x61\x99\x55\x51\x55\x19\x69\xa6\x59\x45\x54\x54\x59\x45\x55\x55\x54\x55\x55\x45\x51\x55\x54\x55"
|
||||
)
|
||||
color_image_inkplate7 = bytearray(
|
||||
b"\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55"
|
||||
b"\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55"
|
||||
b"\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45"
|
||||
b"\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55"
|
||||
b"\x55\x15\x45\x54\x55\x45\x54\x55\x45\x54\x55\x45\x54\x55\x45\x54\x55\x45\x54\x55\x45\x54\x55\x45\x54\x55\x45\x54\x55\x45\x54\x55\x45\x54\x55\x45\x54\x55\x45\x54\x55\x45\x54\x55\x45\x54\x55\x45\x54\x55\x45\x54\x55"
|
||||
b"\x51\x54\x55\x15\x51\x55\x15\x51\x55\x15\x51\x55\x15\x51\x55\x15\x51\x55\x15\x51\x55\x15\x51\x55\x15\x51\x55\x15\x51\x55\x15\x51\x55\x15\x51\x55\x15\x51\x55\x15\x51\x55\x15\x51\x55\x15\x51\x55\x15\x51\x55\x15\x51"
|
||||
b"\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55"
|
||||
b"\x55\x45\x51\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45"
|
||||
b"\x51\x55\x15\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55"
|
||||
b"\x55\x55\x55\x45\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55"
|
||||
b"\x54\x51\x54\x55\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14\x51\x45\x14"
|
||||
b"\x55\x55\x45\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55"
|
||||
b"\x45\x55\x55\x54\x55\x15\x15\x45\x45\x51\x51\x54\x54\x55\x15\x15\x45\x45\x51\x51\x54\x54\x55\x15\x15\x45\x45\x51\x51\x54\x54\x55\x15\x15\x45\x45\x51\x51\x54\x54\x55\x15\x15\x45\x45\x51\x51\x54\x54\x55\x15\x15\x45"
|
||||
b"\x55\x14\x55\x45\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55"
|
||||
b"\x55\x55\x51\x55\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x55"
|
||||
b"\x51\x55\x15\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x51"
|
||||
b"\x55\x45\x55\x45\x55\x15\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15"
|
||||
b"\x55\x55\x54\x55\x51\x54\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x56\x55\x15\x55\x45\x55\x51\x59\x54\x55\x55\x15\x55\x45\x65\x51\x51\x54\x55\x55\x15\x95\x45\x55\x51\x55\x55"
|
||||
b"\x51\x51\x45\x55\x15\x55\x51\x55\x51\x51\x54\x54\x55\x15\x15\x45\x45\x51\x51\x54\x54\x55\x15\x15\x45\x45\x51\x55\x54\x54\x55\x15\x15\x45\x55\x51\x51\x54\x54\x55\x15\x55\x55\x55\x51\x51\x54\x55\x55\x15\x15\x45\x55"
|
||||
b"\x55\x55\x55\x51\x55\x45\x55\x45\x55\x15\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x45\x45\x55\x55\x55\x55\x55\x15\x15\x55\x55\x65\x55\x54\x54\x55\x45\x55\x95\x55\x51\x51\x55\x55\x55\x15"
|
||||
b"\x54\x55\x55\x15\x55\x55\x15\x55\x15\x55\x45\x45\x51\x51\x54\x54\x55\x15\x15\x45\x45\x51\x51\x54\x54\x55\x15\x54\x55\x45\x51\x64\x54\x55\x51\x55\x15\x45\x55\x51\x55\x55\x51\x55\x15\x55\x45\x55\x15\x51\x54\x55\x51"
|
||||
b"\x55\x51\x45\x55\x51\x55\x54\x55\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x54\x55\x55\x55\x15\x55\x55\x51\x55\x55\x54\x55\x14\x55\x45\x45\x55\x59\x54\x51\x55\x15\x55\x55\x45\x51\x55"
|
||||
b"\x45\x55\x55\x55\x15\x45\x55\x51\x51\x45\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x55\x55\x51\x55\x55\x15\x45\x55\x55\x45\x55\x55\x55\x54\x55\x55\x15\x15\x45\x55\x51\x55\x54\x55\x55\x55\x55"
|
||||
b"\x55\x15\x15\x15\x55\x55\x15\x55\x55\x55\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x55\x15\x45\x45\x15\x45\x55\x54\x55\x15\x14\x56\x45\x65\x45\x45\x54\x55\x55\x54\x55\x54\x55\x51\x45\x51\x55\x15\x15"
|
||||
b"\x55\x55\x55\x51\x54\x55\x51\x45\x15\x55\x15\x55\x45\x45\x51\x51\x54\x54\x55\x15\x15\x45\x45\x51\x51\x54\x55\x55\x55\x55\x14\x55\x55\x55\x55\x65\x66\x45\x55\x55\x55\x51\x51\x55\x55\x15\x55\x55\x55\x55\x45\x55\x51"
|
||||
b"\x51\x51\x51\x55\x45\x51\x55\x55\x54\x51\x54\x54\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x54\x55\x54\x55\x55\x51\x51\x51\x58\xa2\x18\x66\x11\x95\x15\x55\x55\x91\x55\x55\x45\x15\x55\x15\x55\x51\x55"
|
||||
b"\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x54\x55\x15\x15\x45\x45\x51\x51\x54\x54\x55\x15\x15\x45\x55\x51\x45\x51\x55\x15\x55\x55\x58\x59\x99\xa1\x56\x15\x54\x54\x64\x65\x85\x45\x55\x54\x51\x54\x54\x55\x55"
|
||||
b"\x55\x15\x15\x14\x55\x15\x14\x51\x45\x45\x45\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x45\x55\x55\x55\x45\x55\x45\x45\x16\xa9\x89\x99\x95\x65\x45\x65\x99\x86\x54\x55\x15\x55\x55\x55\x55\x55\x15"
|
||||
b"\x51\x55\x55\x55\x51\x55\x55\x55\x55\x55\x55\x55\x15\x55\x54\x55\x55\x15\x55\x45\x55\x51\x55\x54\x55\x54\x55\x15\x95\x96\x55\x54\x55\x55\x6a\x18\x66\x89\x64\x61\x96\x51\x46\x59\x59\x59\x54\x51\x55\x45\x45\x45\x51"
|
||||
b"\x55\x51\x51\x51\x55\x51\x51\x54\x54\x54\x54\x55\x54\x55\x45\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x55\x55\x54\x51\x45\x51\x45\x55\x16\x19\xa9\xa8\x9a\x45\x99\x59\x16\x99\x24\x51\x55\x45\x55\x45\x55\x55\x55\x55"
|
||||
b"\x55\x55\x55\x55\x55\x55\x55\x45\x55\x55\x55\x51\x55\x51\x55\x51\x55\x54\x55\x55\x15\x55\x45\x55\x51\x45\x51\x55\xa2\x64\x65\x55\x51\x54\xa8\xa2\x59\xa8\x55\x66\x45\x69\x26\x55\x56\x91\x55\x95\x54\x54\x54\x54\x55"
|
||||
b"\x51\x45\x45\x15\x14\x55\x15\x55\x45\x45\x45\x55\x45\x55\x55\x15\x45\x45\x51\x51\x54\x54\x55\x15\x95\x55\x15\x45\x16\x61\x98\x69\x15\x66\x6a\x66\x66\x26\x59\x12\x56\x46\x69\x26\x65\x15\x59\x45\x15\x55\x55\x55\x51"
|
||||
b"\x55\x55\x55\x55\x55\x51\x54\x55\x55\x55\x55\x15\x55\x15\x15\x55\x55\x55\x55\x55\x55\x55\x55\x59\x15\x55\x55\x55\x59\x19\x85\x91\xa6\x56\x28\xa2\x46\x49\x95\x65\x64\x5a\x66\x64\x49\x55\x14\x55\x55\x45\x45\x45\x55"
|
||||
b"\x54\x54\x55\x51\x55\x15\x55\x51\x54\x54\x55\x54\x55\x55\x59\x51\x59\x54\x55\x15\x45\x65\x51\x92\x49\x19\x65\x95\x56\x66\x59\x99\x91\x91\xa6\x9a\x64\xa2\x51\x92\x55\x98\x61\x95\x59\x95\x55\x55\x54\x55\x55\x55\x15"
|
||||
b"\x55\x55\x51\x55\x45\x55\x45\x55\x45\x55\x51\x55\x51\x51\x54\x55\x45\x15\x51\x56\x55\x14\x55\x98\xa2\x62\x44\x54\x51\x48\x64\x99\x1a\x1a\xa2\xa9\x19\x99\x95\x65\x85\x86\x66\x46\x64\x51\x59\x14\x55\x56\x51\x51\x55"
|
||||
b"\x45\x45\x55\x45\x55\x54\x55\x15\x55\x45\x55\x45\x55\x55\x45\x55\x55\x55\x55\x54\x55\x55\x64\x8a\x69\x2a\x19\x99\x65\x56\x66\x46\x65\x99\x29\x82\x59\xa8\x54\x52\x54\x66\x98\x55\x85\x55\x45\x55\x51\x51\x55\x55\x51"
|
||||
b"\x55\x55\x15\x55\x51\x45\x55\x54\x55\x55\x15\x55\x15\x15\x55\x45\x15\x51\x45\x45\x51\x54\x8a\x6a\x2a\x99\xa8\x46\x18\x65\x18\x68\x99\x2a\x6a\xa6\x98\x66\x45\xa6\x56\x69\x26\x64\x56\x54\x56\x55\x15\x55\x45\x15\x55"
|
||||
b"\x54\x55\x54\x54\x55\x55\x55\x55\x51\x59\x54\x55\x55\x54\x54\x55\x54\x55\x55\x55\x55\x46\xa8\x22\x49\x29\x16\xa8\x62\x15\xa5\x96\x21\x56\x24\xa9\x95\x8a\x59\x61\x65\x86\x66\x55\x65\x15\x64\x51\x55\x54\x55\x54\x55"
|
||||
b"\x55\x51\x55\x55\x55\x55\x45\x15\x15\x45\x55\x51\x51\x55\x55\x55\x55\x66\x99\x55\x15\x55\x2a\x86\xaa\xa2\x65\x92\x15\x99\x51\x91\x66\x66\x4a\x62\x12\x61\x95\x99\x51\x96\x49\x19\x19\x56\x55\x55\x54\x65\x55\x65\x51"
|
||||
b"\x55\x55\x45\x45\x45\x14\x55\x51\x55\x55\x15\x55\x55\x45\x95\x51\x46\x11\x21\x45\x54\x56\x48\x9a\xa2\x9a\x49\x98\xa9\x64\x66\x16\x98\x91\xa2\x19\x99\x89\x91\x86\x56\x49\x99\x56\x54\x65\x16\x55\x55\x55\x64\x55\x55"
|
||||
b"\x45\x15\x55\x55\x55\x55\x55\x55\x54\x55\x54\x54\x54\x58\x48\x55\x54\x99\x94\x55\x55\x55\xa6\xa2\xaa\x28\xa1\x66\x21\x91\xa1\x69\x85\x16\x4a\xa6\xa6\x69\x16\x61\x45\x95\x18\x91\x45\x51\x51\x45\x16\x45\x15\x51\x86"
|
||||
b"\x55\x54\x54\x54\x54\x55\x45\x15\x65\x51\x55\x45\x55\x46\xa5\x96\x28\x59\x54\x66\x16\x44\x62\x8a\x86\x8a\x66\x91\x86\x56\x66\x91\x59\x69\xa2\x68\x64\x6a\x65\x15\x59\x19\x69\x96\x56\x55\x95\x55\x54\x55\x59\x59\x55"
|
||||
b"\x55\x45\x55\x55\x55\x51\x55\x54\x55\x55\x45\x55\x45\x49\x45\x89\x99\x96\x62\x25\x45\x55\x66\x1a\x2a\x9a\xa8\x66\x68\x66\x48\x5a\x99\x94\x46\x86\x99\x92\x91\xa5\x96\x64\x56\x64\x65\x16\x15\x51\x65\x54\x54\x45\xa6"
|
||||
b"\x51\x55\x45\x45\x45\x55\x55\x55\x51\x45\x55\x55\x66\x56\x59\x98\xa8\x61\x26\x62\x61\x26\x60\xa9\xa1\xa8\xa6\xa1\x96\x61\x55\x95\x11\x86\x69\xa2\x86\x69\x26\x25\x14\x66\x61\x45\x55\x55\x54\x55\x45\x65\x99\x99\x19"
|
||||
b"\x55\x55\x55\x55\x55\x15\x14\x51\x55\x55\x51\x45\x91\x22\x28\x88\x66\x4a\xa2\x16\x96\x51\x26\x52\x28\x8a\x4a\x1a\x99\xa6\x99\x49\x69\x59\x94\x99\x99\x86\xaa\x95\x56\x49\x56\x5a\x46\x46\x55\x58\x56\x19\x91\x66\x64"
|
||||
b"\x55\x14\x54\x54\x55\x55\x55\x55\x54\x54\x55\x55\x48\xa9\x99\xa6\x86\x66\x64\xa5\x19\x96\x61\x99\x96\x16\xa9\xa9\x24\x18\x94\x58\x58\x66\x49\xa2\x21\x9a\x61\x86\x62\x86\x48\x65\x55\x94\x51\x45\x99\x61\x96\x61\x99"
|
||||
b"\x51\x55\x55\x55\x51\x51\x55\x15\x15\x55\x55\x22\x99\x92\x86\x88\x59\x91\x89\x59\x99\x66\x55\x99\x55\x65\x5a\x62\x69\x68\x19\x9a\x56\x21\x9a\x4a\x69\x8a\x26\xa4\x58\x51\x96\x46\x24\x66\x15\x95\x51\x96\x46\x66\x16"
|
||||
b"\x55\x55\x45\x45\x55\x55\x45\x55\x55\x45\x94\xa4\xa6\xa6\x69\x99\xa6\x66\x58\x64\x61\x14\x61\x51\x19\x91\x14\x64\x92\x65\x95\x91\x85\x65\x91\xa4\x92\x19\xa9\x25\x66\xaa\x58\x66\x59\x61\xa6\x58\x65\xa9\x99\x29\x99"
|
||||
b"\x55\x45\x55\x55\x15\x15\x55\x51\x51\x59\x8a\x8a\x48\x0a\x86\x62\x64\x52\x99\x56\x55\x65\x99\x25\x54\x46\x66\x62\x19\x91\x61\x99\x65\x92\x66\x8a\xa4\xa2\x62\x6a\x22\x14\x66\x61\x91\x9a\x61\x15\x98\x46\x66\x61\x65"
|
||||
b"\x51\x55\x15\x15\x55\x54\x54\x55\x55\x22\x18\x66\xaa\x64\x64\xa6\x86\x65\x09\x85\x64\x59\x56\x56\x65\x59\x85\x19\x96\x46\x5a\x48\x69\x18\x89\x92\x2a\x1a\x26\x21\x64\x69\x59\x99\x64\x98\x98\x66\x46\x65\x18\x96\x45"
|
||||
b"\x55\x51\x55\x55\x45\x45\x55\x55\x19\xa9\xaa\x8a\x1a\xaa\xa9\x61\x99\x1a\x58\x59\x16\x94\x85\x65\x45\x95\x56\x68\x99\x59\x84\x66\x89\x64\xa2\x2a\x11\xa1\x22\x64\x89\x84\x91\x86\x1a\x19\x92\x66\x61\x99\x26\x66\x56"
|
||||
b"\x54\x55\x51\x51\x55\x55\x45\x45\x52\x12\x0a\xaa\xa9\x26\x46\x96\x9a\x65\x99\x96\x65\x25\x56\x44\x56\x45\x15\x56\x24\x64\x69\xa1\x92\x21\x84\x99\x22\x1a\x62\x09\x28\x5a\x65\x61\x99\x86\x69\x92\x19\x92\x69\x91\x65"
|
||||
b"\x55\x55\x55\x55\x54\x55\x55\x55\x58\x2a\x86\x18\x62\x68\xa8\x69\x19\x14\x59\x91\x51\x66\x54\x59\x95\x55\x62\x65\x49\x92\x86\x1a\x62\x9a\x2a\x44\x86\x44\x99\xa6\x85\x92\x48\x86\x46\x66\x26\x26\x56\x26\x62\x16\x61"
|
||||
b"\x45\x45\x15\x15\x15\x51\x51\x51\x55\x62\xa9\xa6\x66\x86\x66\x46\x91\x65\x92\x15\x96\x51\x45\x66\x61\x46\x56\x46\x06\x65\x99\xa4\xa6\x21\x84\x62\x64\x99\x82\x11\x18\x64\x96\x28\x61\x18\x62\x49\x9a\x62\x59\x65\x92"
|
||||
b"\x55\x55\x55\x55\x55\x55\x55\x55\x45\x59\x18\xa8\x98\x99\x91\xa4\x56\x66\x55\x66\x59\x25\x59\x14\x55\x55\x15\x41\x09\x18\x88\x9a\x18\x62\x49\x91\x80\x64\x55\x99\x92\x44\x46\x14\x98\x86\x66\x08\x62\x20\x91\x58\x65"
|
||||
b"\x54\x55\x51\x51\x51\x45\x15\x15\x56\x2a\xaa\x66\x69\x99\x19\x65\x99\x14\x61\x94\x46\x56\x59\x99\x64\x65\x64\x49\x22\x19\x92\x49\x86\x86\x61\x99\x18\x46\x49\x11\x12\x5a\x21\x22\x05\x20\x48\x61\x99\x24\x96\x46\xa6"
|
||||
b"\x55\x51\x55\x55\x55\x55\x55\x54\x59\x86\x26\x86\x19\x99\x66\x59\x45\x99\x55\x55\x55\x64\x51\x55\x45\x51\x55\x89\x89\x98\x8a\x62\x61\x61\x56\x46\x46\x48\x21\x20\x64\x84\x48\x84\x60\x92\x89\x96\x22\xa8\x65\x9a\x59"
|
||||
b"\x55\x55\x45\x45\x15\x55\x51\x55\x50\xa2\x62\x69\xa4\x64\x55\x14\x59\x56\x59\x19\x91\x45\x55\x85\x96\x66\x46\x61\x8a\x66\x62\x21\x18\x86\x45\x44\x40\x81\x10\x46\x08\x12\x16\x10\x92\x08\x42\x26\x59\x99\x98\x64\x86"
|
||||
b"\x45\x15\x55\x55\x54\x51\x55\x45\x65\x56\x16\x1a\x66\x46\xa1\x65\x99\x18\x65\x54\x56\x55\x98\x55\x15\x15\x55\x5a\x48\x91\x84\x62\x89\x18\x64\x84\x48\x52\x06\x10\x41\x10\x40\x1a\x41\x91\x28\x45\x22\x46\x46\x89\x99"
|
||||
b"\x55\x54\x54\x55\x55\x55\x15\x55\x15\x15\x59\xa4\x89\x99\xa6\x66\x52\x65\x91\x45\x99\x59\x15\x59\x59\x51\x86\x12\x61\xa6\x6a\x66\x62\x86\x21\x06\x11\x05\x44\x48\x12\x11\x04\x84\x66\x10\x04\x98\x64\x64\xa8\x66\x22"
|
||||
b"\x55\x45\x55\x51\x45\x45\x54\x55\x55\x59\xa6\x2a\x66\x66\x49\x91\x65\x99\x15\x96\x51\x45\x56\x44\x64\x56\x55\x65\x1a\x18\x96\x16\x16\x62\x86\x60\x06\x44\x61\x51\x04\x48\x61\x12\x11\x22\x28\x88\x99\x66\x19\xa2\x89"
|
||||
b"\x51\x55\x45\x55\x55\x55\x55\x51\x51\x61\x22\x68\x68\x44\xa6\x24\x59\x25\x51\x65\x15\x96\x45\x56\x45\x65\x19\x99\x99\xa9\x85\x65\x92\x29\x28\x54\x80\x61\x14\x86\x11\x11\x00\x08\x42\x04\x04\x86\x44\x49\x91\x19\x9a"
|
||||
b"\x55\x55\x55\x15\x51\x55\x15\x15\x99\x9a\x66\x86\x9a\xaa\x6a\x6a\x91\x91\x9a\x50\x59\x45\x98\x65\x66\x51\x64\x4a\x62\x84\x66\x46\x66\x5a\x85\x88\x66\x18\x88\x51\x18\x62\x12\x01\x24\x80\x82\x22\x12\x56\x1a\x99\x96"
|
||||
b"\x55\x14\x55\x54\x55\x45\x55\x55\x48\x8a\x99\xa9\x86\x66\x24\x91\x19\x66\x64\x66\x64\x59\x55\x59\x15\x16\x59\xa8\xa6\x66\x58\x59\x19\x18\x5a\x66\x21\x86\x61\x22\x21\x20\x25\x52\x48\x48\x18\x65\xa1\xa1\x65\x19\x21"
|
||||
b"\x51\x55\x51\x55\x54\x55\x45\x58\xa6\x64\x88\x62\x92\x49\xa9\xa6\x9a\x48\x66\x58\x55\x94\x51\x91\x69\xa6\x64\x86\x49\x99\x15\x91\x61\x95\x91\x12\x66\x68\x96\x61\x9a\x45\x12\x24\x21\x91\x99\x92\x46\x16\x66\x51\x98"
|
||||
b"\x55\x55\x55\x45\x45\x56\x55\x16\x46\x8a\x66\x99\xa6\xa2\x64\x99\x24\x55\x91\x45\x99\x65\x65\x56\x92\x61\x29\xa6\x99\x11\x99\x1a\x56\x46\x65\x96\x18\x65\x92\x18\x91\x99\x88\x61\x99\x19\x24\x66\xa9\x98\x45\x96\x65"
|
||||
b"\x55\x45\x15\x55\x55\x54\x55\x8a\xa8\x66\x9a\xa8\xa8\x66\x89\x9a\x56\x69\x15\x96\x51\x51\x51\x98\x6a\x1a\x92\x64\x51\x66\x46\x54\x65\x64\x46\x59\x65\x91\x89\xa1\x98\x48\x9a\x9a\x61\xa2\x26\x88\x42\x19\x11\x86\x18"
|
||||
b"\x51\x55\x54\x54\x55\x95\x51\x98\x66\x99\x91\x86\x9a\xa9\x99\x91\x99\x56\x55\x65\x15\x96\x66\x44\xa6\x28\xa6\x15\x9a\x64\x55\x19\x51\x26\x64\x45\x11\x9a\x19\x19\x15\x98\x86\x24\xa6\x19\x91\x99\x99\x65\x99\x59\x86"
|
||||
b"\x55\x54\x55\x55\x51\x45\x68\xaa\x29\x99\x2a\xa8\xa1\x91\x94\x65\x46\x19\x64\x55\x59\x46\x5a\xaa\x22\x99\x99\x86\x64\x95\x99\x66\x16\x19\x98\x64\x19\x21\x89\x66\x66\x59\x66\x61\x85\x65\x99\x19\x19\x99\x96\x66\x59"
|
||||
b"\x54\x55\x55\x15\x95\x55\x06\x26\x64\x64\x92\x19\x99\x26\x45\x96\x59\x54\x55\x86\x54\x69\x24\x66\x66\x8a\x24\x59\x1a\x46\x51\x91\x65\x92\x26\x59\x66\x66\x99\x94\x51\x46\x46\x16\x59\x92\x46\x61\x91\x84\x61\x91\x96"
|
||||
b"\x55\x51\x51\x54\x55\x51\x55\x62\x85\x59\xaa\xaa\x9a\x66\x59\x64\x65\x91\x64\x55\x19\xa6\x9a\x88\xa8\x65\x99\x99\x64\x55\x16\x46\x2a\x29\x55\x16\x59\x28\xa4\x45\x56\x54\x59\x66\x64\xa6\x99\x55\x66\x66\x65\x19\x46"
|
||||
b"\x45\x55\x55\x55\x51\x55\x59\x24\x59\x98\x88\x61\x26\x64\x66\x45\x94\x56\x45\x66\x58\x92\x8a\x2a\x86\x9a\x66\x46\x45\x66\x69\x26\x51\xa6\x45\x59\x22\xa9\x86\x56\x19\x25\x51\x59\x29\x98\x68\x99\x14\x65\x19\x66\x69"
|
||||
b"\x55\x15\x15\x45\x55\x15\x51\x85\x66\x26\x2a\x1a\x61\x86\x91\x59\x45\x99\x56\x59\x64\xaa\x26\x98\x69\xa4\x86\x65\x56\x61\x92\x66\xaa\x45\x55\x14\x66\x49\x99\x91\x59\x65\x96\x45\x52\x45\xa6\x65\x59\x51\x55\x94\x55"
|
||||
b"\x55\x55\x54\x55\x15\x54\x54\x59\x61\x88\x66\x65\x9a\x69\x9a\x9a\x66\x51\x96\x45\x16\x66\x68\xaa\xa8\x66\xa4\x51\x99\x1a\x26\x64\x46\x55\x15\x68\x98\xa6\x19\x15\x91\x14\x59\x56\x55\x99\x86\x14\x56\x55\x64\x55\x51"
|
||||
b"\x51\x51\x55\x55\x55\x45\x59\x9a\x1a\xaa\x19\x5a\x26\xa4\xa9\x28\x68\x55\x45\x59\xaa\x28\xaa\x61\x99\x89\x95\x95\x86\xaa\x19\x88\x99\x51\x51\x45\xaa\x89\xa4\x59\x59\x65\x45\x14\x65\x19\x59\xa6\x64\x59\x95\x45\x95"
|
||||
b"\x55\x55\x45\x51\x51\x55\x55\x22\xaa\x19\x94\xa1\xa8\x8a\xa2\x9a\x95\x98\x66\x92\x49\xaa\x8a\xaa\x86\x99\x19\x66\x69\x18\x64\x66\x54\x55\x55\x9a\x46\x6a\x19\x54\x46\x51\x55\x65\x45\x51\x91\x86\x45\x51\x45\x59\x45"
|
||||
b"\x55\x15\x55\x15\x55\x55\x15\x9a\x21\xa5\x62\x6a\xaa\x6a\x69\xa1\x69\x86\x64\x66\xa6\x24\x9a\x19\xa9\x19\x91\x46\x1a\xa6\x66\x89\x15\x51\x59\x18\xaa\x26\xa4\x66\x99\x15\x64\x54\x55\x55\x16\x59\x96\x55\x56\x54\x55"
|
||||
b"\x51\x54\x55\x55\x45\x45\x58\xa1\xa6\x54\x69\xa1\x86\xaa\x2a\x16\x44\x99\x9a\xa9\x2a\xaa\xa9\xa8\x62\x66\x56\x69\xa2\x61\x98\x95\x55\x15\x85\x66\x62\xa2\x45\x51\x91\x56\x45\x65\x59\x15\x66\x61\x25\x19\x14\x55\x55"
|
||||
b"\x55\x55\x51\x54\x55\x55\x86\x8a\x15\x66\xa2\x2a\xaa\x26\x65\xaa\xa9\xaa\x86\x46\xa4\x8a\x18\x9a\x96\x61\x46\x86\x9a\x2a\x89\x99\x45\x55\x56\x48\xa6\x26\x9a\x65\x65\x64\x55\x46\x51\x55\x51\x56\x69\x65\x65\x65\x91"
|
||||
b"\x55\x45\x55\x45\x54\x55\x68\x69\x59\x12\x1a\x9a\x4a\x62\x61\x98\x6a\x64\x69\x9a\x2a\x98\xaa\xa1\x99\x96\x59\xa8\xa9\x99\x26\x54\x56\x51\x45\x99\xa2\x86\x65\x14\x56\x45\x54\x55\x15\x51\x55\x19\x84\x51\x56\x44\x55"
|
||||
b"\x51\x55\x15\x55\x55\x51\x2a\x15\x56\xaa\xaa\x28\xa6\x16\x6a\x8a\x92\x8a\x98\x66\x62\x8a\x86\x66\x61\xa5\xa2\x99\x8a\x62\x99\x45\x54\x55\x55\x1a\x66\x6a\x19\x59\x45\x55\x45\x91\x55\x55\x15\x99\x62\x96\x45\x55\x55"
|
||||
b"\x55\x55\x54\x55\x95\x56\x89\x65\x12\x4a\x26\xa6\xa1\x66\x28\x99\xaa\x66\x66\xa2\x8a\x21\xaa\x19\x1a\x46\x1a\x2a\x66\x29\x94\x55\x45\x51\x91\x62\x1a\x86\x91\x95\x54\x59\x55\x55\x54\x55\x55\x44\x56\x64\x56\x46\x45"
|
||||
b"\x54\x51\x55\x51\x45\x14\x65\x55\x68\xa9\x8a\x22\x56\x6a\x69\xa8\xa6\x28\xa9\x16\x54\xaa\x46\x66\xa6\x66\xaa\x64\xa2\x99\x45\x56\x55\x95\x55\x66\xa8\x6a\x65\x44\x65\x45\x19\x15\x95\x45\x51\x55\x99\x45\x95\x65\x55"
|
||||
b"\x55\x55\x45\x55\x55\x54\x54\x51\x8a\xa8\xa2\x65\x95\xa2\x8a\x8a\x4a\x66\x61\xa9\x6a\x46\x99\xa1\x98\x68\x62\xaa\x69\xa4\x55\x45\x51\x51\x45\x91\xa6\xa8\x94\x55\x56\x56\x65\x59\x45\x55\x15\x55\x94\x66\x64\x51\x59"
|
||||
b"\x45\x55\x55\x15\x51\x55\x55\x54\xa6\x8a\x9a\x59\x46\x1a\xa8\xaa\xa6\x9a\x99\x96\x92\xa4\x64\x9a\x49\xa6\xaa\x46\x22\x45\x59\x54\x55\x15\x55\x16\x8a\x89\x95\x66\x45\x15\x45\x51\x55\x51\x55\x91\x45\x99\x45\x95\x91"
|
||||
b"\x55\x14\x55\x54\x55\x59\x45\x66\x8a\x98\x65\x15\x5a\xa8\x69\x98\x69\x21\x86\x46\x26\x66\x6a\x66\x9a\x8a\x22\xaa\xa5\x55\x94\x55\x59\x56\x51\x59\x9a\x9a\x46\x54\x55\x64\x55\x15\x51\x55\x54\x55\x56\x54\x69\x65\x15"
|
||||
b"\x55\x55\x51\x55\x55\x14\x55\x12\x08\x89\x91\x54\x62\x8a\x8a\x86\xa2\x66\x56\x69\xa9\x9a\x1a\x29\x29\xa2\xa6\x48\x59\x99\x45\x65\x91\x64\x55\x96\x28\x62\x55\x15\x64\x65\x55\x55\x15\x45\x65\x55\x55\x19\xa2\x51\x55"
|
||||
b"\x51\x55\x15\x45\x45\x55\x55\x52\x9a\x65\x55\x65\xa6\x9a\x98\x6a\x66\x99\x64\xa8\x98\x61\xa6\x5a\x64\x98\x82\x26\x64\x54\x55\x51\x55\x45\x66\x51\x5a\xa6\x65\x66\x55\x95\x64\x55\x55\x55\x15\x45\x15\x56\x59\x95\x59"
|
||||
b"\x55\x45\x55\x55\x55\x55\x45\x4a\x21\x56\x56\x5a\x28\x88\xaa\xaa\x89\x56\x2a\x66\x66\x66\xa1\xa1\xa6\x6a\x0a\x69\x95\x45\x59\x15\x45\x55\x51\x56\x64\x89\x18\x51\x45\x45\x15\x51\x54\x55\x54\x55\x54\x64\x59\x19\x95"
|
||||
b"\x55\x55\x54\x54\x54\x51\x55\x50\x55\x64\x51\x86\xa2\xa9\x86\x46\x56\x46\x66\x28\x66\x2a\x66\x9a\x46\x86\x66\x91\x45\x55\x95\x55\x56\x59\x15\x85\x99\x99\x55\x95\x55\x55\x55\x55\x45\x51\x55\x55\x45\x55\x65\x64\x51"
|
||||
b"\x51\x51\x45\x55\x55\x55\x54\x55\x65\x45\x66\x68\xa6\x2a\xaa\xa4\x65\x58\xa2\x99\x92\x64\x69\x25\x99\x9a\xa1\xa6\x56\x64\x51\x51\x51\x45\x66\x59\x18\xa1\xa5\x59\x64\x54\x51\x45\x55\x55\x45\x51\x55\x51\x46\x45\x55"
|
||||
b"\x55\x55\x55\x51\x45\x54\x55\x55\x54\x55\x92\x8a\x8a\x92\x44\x65\x54\x66\x9a\x66\x6a\xa9\x92\x64\x64\xa8\x9a\x19\x64\x55\x55\x55\x95\x96\x51\x66\x66\x66\x44\x51\x45\x55\x55\x55\x54\x55\x55\x15\x55\x15\x54\x59\x55"
|
||||
b"\x54\x55\x55\x15\x55\x15\x51\x64\x55\x54\xaa\xa4\xa2\x29\xa5\x55\x45\x4a\xa9\x86\x26\x46\xa6\x66\x6a\x9a\x69\x94\x59\x46\x54\x59\x45\x64\x66\x46\x9a\x19\x55\x95\x55\x45\x55\x54\x55\x51\x55\x55\x45\x55\x65\x65\x19"
|
||||
b"\x55\x51\x45\x55\x55\x55\x15\x55\x55\x66\x24\xaa\x26\x62\x59\x45\x55\xa9\x24\x99\xa8\x69\x19\x99\x86\x8a\x8a\x66\x64\x55\x15\x51\x56\x15\x96\x59\x21\xa4\x99\x54\x55\x55\x14\x55\x45\x55\x85\x54\x55\x54\x56\x51\x55"
|
||||
b"\x45\x55\x55\x54\x51\x51\x55\x15\x14\x52\xaa\x88\x88\x95\x45\x55\x16\x2a\xa9\xaa\x45\x9a\x64\x61\xaa\x69\xa4\x99\x19\x65\x59\x95\x55\x66\x46\x4a\x66\x99\x54\x55\x51\x51\x55\x45\x55\x15\x55\x15\x55\x15\x51\x56\x64"
|
||||
b"\x55\x15\x14\x55\x55\x55\x55\x55\x55\x4a\x28\x64\x95\x54\x55\x51\x59\xa4\x6a\x64\x66\xa4\x56\x5a\x92\x8a\x29\x91\x99\x51\x54\x54\x61\x91\x99\x99\xaa\x46\x45\x64\x55\x95\x55\x55\x55\x54\x55\x55\x51\x55\x55\x15\x45"
|
||||
b"\x55\x55\x55\x51\x55\x15\x45\x45\x51\xaa\x62\xa1\x51\x65\x54\x55\x58\xaa\x92\x86\x69\x45\x99\xa1\xaa\x69\xa6\x66\x91\x95\x85\x55\x55\x66\x62\x64\xa4\x99\x59\x45\x55\x55\x45\x15\x14\x55\x51\x51\x55\x51\x45\x58\x56"
|
||||
b"\x51\x51\x55\x15\x45\x54\x55\x55\x15\x22\x26\x16\x55\x55\x55\x55\x5a\x48\xa6\x66\x64\x65\x92\x9a\x24\xa8\xa9\x1a\x15\x55\x55\x86\x45\x46\x19\x8a\x69\x96\x56\x55\x91\x45\x55\x55\x55\x59\x55\x55\x45\x55\x55\x55\x65"
|
||||
b"\x55\x55\x45\x55\x55\x55\x54\x55\x55\xa6\x89\x55\x54\x51\x45\x45\x92\x89\xa8\x66\x46\x59\xa6\x89\x9a\x86\x91\xa9\x66\x46\x59\x55\x56\x56\x6a\x59\x8a\x64\x64\x59\x55\x54\x55\x51\x55\x94\x54\x54\x55\x15\x55\x15\x51"
|
||||
b"\x55\x15\x55\x54\x54\x51\x55\x51\x56\x02\x55\x95\x15\x55\x55\x55\x1a\x18\x66\x64\x65\x99\x29\x99\x4a\xaa\x9a\x61\x95\x54\x51\x91\x95\x54\x64\xaa\x99\x15\x55\x54\x54\x55\x51\x55\x45\x15\x55\x55\x55\x54\x51\x54\x55"
|
||||
b"\x51\x54\x54\x55\x55\x55\x45\x55\x45\x45\x95\x45\x55\x54\x54\x55\x61\xaa\x86\x66\x66\x61\x98\x65\xa4\x98\x66\x99\x51\x45\x96\x65\x45\x15\x86\x61\x29\x65\x85\x85\x55\x55\x55\x15\x55\x55\x15\x15\x51\x55\x55\x55\x66"
|
||||
b"\x55\x55\x55\x51\x51\x55\x55\x15\x55\x55\x45\x55\x51\x45\x55\x51\x6a\x98\x66\x46\x59\x1a\xa6\x54\x6a\xaa\x92\x19\x15\x99\x64\x54\x55\x55\x5a\x66\x92\x51\x55\x55\x45\x45\x15\x54\x55\x45\x55\x54\x55\x45\x55\x45\x55"
|
||||
b"\x55\x45\x45\x55\x55\x45\x55\x54\x54\x55\x54\x54\x55\x55\x45\x55\x46\x26\x99\x99\x19\xa6\x15\x45\x52\x49\xa6\x65\x59\x99\x25\x45\x55\x45\x54\x86\x25\x95\x99\x15\x55\x55\x55\x45\x51\x55\x45\x45\x55\x55\x14\x55\x45"
|
||||
b"\x51\x55\x55\x15\x15\x54\x51\x55\x55\x51\x55\x55\x55\x15\x55\x15\x9a\x98\x64\x65\x92\x61\x54\x55\x6a\xa8\x6a\x65\x94\x61\x99\x55\x51\x55\x19\x69\xa6\x59\x45\x54\x54\x59\x45\x55\x55\x54\x55\x55\x45\x51\x55\x54\x55"
|
||||
)
|
||||
|
|
|
@ -0,0 +1,110 @@
|
|||
from soldered_inkplate6PLUS import Inkplate
|
||||
import time
|
||||
from ub_sched import Event
|
||||
|
||||
START_HOUR = 8
|
||||
END_HOUR = 18
|
||||
|
||||
DISPLAY = Inkplate(Inkplate.INKPLATE_2BIT)
|
||||
DISPLAY.begin()
|
||||
BLACK = 0
|
||||
|
||||
MONTHS = [
|
||||
"???",
|
||||
"Jan.",
|
||||
"Feb.",
|
||||
"Mar.",
|
||||
"Apr.",
|
||||
"May ",
|
||||
"Jun.",
|
||||
"Jul.",
|
||||
"Aug.",
|
||||
"Sep.",
|
||||
"Oct.",
|
||||
"Nov.",
|
||||
"Dec.",
|
||||
]
|
||||
|
||||
WEEKDAYS = [
|
||||
"Mon.",
|
||||
"Tue.",
|
||||
"Wed.",
|
||||
"Thu.",
|
||||
"Fri.",
|
||||
"Sat.",
|
||||
"Sun.",
|
||||
]
|
||||
|
||||
def date_str():
|
||||
(year, month, mday, hour, minute, second, weekday, yearday) = time.localtime()
|
||||
# print(weekday, month, mday, year)
|
||||
return
|
||||
|
||||
def drawText(x, y, s, size = DISPLAY.textSize, color = BLACK):
|
||||
DISPLAY.GFX._very_slow_text(x, y, s, size, color)
|
||||
|
||||
def render_display(events):
|
||||
(year, month, mday, hour, minute, second, weekday, yearday) = time.localtime()
|
||||
display = DISPLAY
|
||||
print("On a display of size", display.width(), display.height())
|
||||
|
||||
print("Xu Li... Do the thing!")
|
||||
display.clearDisplay()
|
||||
|
||||
print("Drawing header")
|
||||
drawText(20, 20, "Capen 212A", size = 4)
|
||||
drawText(680, 30, "{} {} {}, {}".format(WEEKDAYS[weekday], MONTHS[month], mday, year), size = 3)
|
||||
display.drawFastHLine(0, 60, display.width(), BLACK)
|
||||
calendar_top = 60
|
||||
calendar_left = 10
|
||||
calendar_height = display.height() - calendar_top;
|
||||
calendar_width = display.width() - 20;
|
||||
hour_step = calendar_height / (END_HOUR - START_HOUR)
|
||||
|
||||
print("Drawing day planner")
|
||||
for i in range(START_HOUR, END_HOUR):
|
||||
y = int( (i - START_HOUR) * hour_step + calendar_top )
|
||||
display.drawFastHLine(
|
||||
int(calendar_left+40), y,
|
||||
calendar_width-40,
|
||||
BLACK
|
||||
)
|
||||
hour = i
|
||||
ampm = "AM"
|
||||
if hour >= 12:
|
||||
ampm = "PM"
|
||||
if hour > 12:
|
||||
hour -= 12
|
||||
drawText(10, y+2, "{} {}".format(hour, ampm), size = 1)
|
||||
|
||||
print("Drawing events")
|
||||
for event in events:
|
||||
if event.start.is_date(year, month, mday) or event.end.is_date(year, month, mday):
|
||||
print("Drawing {}".format(event.event))
|
||||
if (not event.start.is_date(year, month, mday)) or event.start.hour < START_HOUR:
|
||||
low_hour = 0.0
|
||||
else:
|
||||
low_hour = event.start.hour + (event.start.minute / 60) - START_HOUR
|
||||
|
||||
if (not event.end.is_date(year, month, mday)) or event.end.hour >= END_HOUR:
|
||||
high_hour = float(END_HOUR - START_HOUR)
|
||||
else:
|
||||
high_hour = event.end.hour + (event.end.minute / 60) - START_HOUR
|
||||
|
||||
x0 = calendar_left+50
|
||||
y0 = int(low_hour * hour_step) + calendar_top + 10
|
||||
w = calendar_width-60
|
||||
h = int((high_hour - low_hour) * hour_step) - 20
|
||||
radius = 8
|
||||
|
||||
print(low_hour, high_hour, "//", x0, y0, w, h)
|
||||
|
||||
display.fillRoundRect(x0, y0, w, h, radius, 1)
|
||||
display.drawRoundRect(x0, y0, w, h, radius, 0)
|
||||
drawText(x0+10, y0+10, event.event, size = 2)
|
||||
|
||||
else:
|
||||
print("Skipping {}; not today".format(event.event))
|
||||
|
||||
print("Rendering")
|
||||
display.display()
|
|
@ -0,0 +1,23 @@
|
|||
import ub_devices
|
||||
import ub_sched
|
||||
from conf_room_layout import render_display
|
||||
from time import sleep
|
||||
|
||||
sleep(2)
|
||||
print("Main script!")
|
||||
|
||||
sleep(1)
|
||||
print("Connecting to wifi")
|
||||
ub_devices.connect()
|
||||
|
||||
room = ub_sched.RoomSchedule(ub_sched.ROOM_CAPEN_212A)
|
||||
|
||||
while True:
|
||||
try:
|
||||
print("Fetching events")
|
||||
events = room.fetch()
|
||||
render_display(events)
|
||||
sleep(600)
|
||||
except Exception as e:
|
||||
print(e)
|
||||
sleep(30)
|
|
@ -0,0 +1,24 @@
|
|||
# Connection Settings for UB_Devices
|
||||
# - Oliver Kennedy okennedy@buffalo.edu
|
||||
|
||||
# Based on...
|
||||
# https://www.buffalo.edu/ubit/service-guides/connecting/resnet/boost-gaming.html
|
||||
|
||||
import network
|
||||
import ntptime
|
||||
from time import sleep
|
||||
|
||||
def connect():
|
||||
nic = network.WLAN(network.STA_IF)
|
||||
nic.active(True)
|
||||
while not nic.isconnected():
|
||||
print("Connecting to wifi...")
|
||||
nic.connect('UB_Devices', 'goubbulls')
|
||||
for i in range(1, 10):
|
||||
if nic.isconnected():
|
||||
break
|
||||
sleep(1)
|
||||
if not nic.isconnected():
|
||||
print("Connection failed. Sleeping.")
|
||||
sleep(5)
|
||||
ntptime.settime()
|
|
@ -0,0 +1,104 @@
|
|||
# Room Schedule Lookup
|
||||
# - Oliver Kennedy okennedy@buffalo.edu
|
||||
# - Adapted from a shell script by Grant Iraci
|
||||
# https://gist.github.com/iracigt/181d8f0feafb07ec39b26d4869bffd0d
|
||||
|
||||
import urequests as request
|
||||
import json
|
||||
import time
|
||||
|
||||
# Other useful ROOM_IDs:
|
||||
ROOM_DAVIS_113A = 1768
|
||||
ROOM_DAVIS_338A = 1769
|
||||
ROOM_DAVIS_113Y = 3199
|
||||
ROOM_DAVIS_310 = 2941
|
||||
ROOM_DAVIS_337 = 3065
|
||||
ROOM_DAVIS_101 = 611
|
||||
ROOM_DAVIS_1ST_FLOOR_ATRIUM = 2409
|
||||
ROOM_DAVIS_2ND_FLOOR_LOUNGE = 2410
|
||||
ROOM_CAPEN_212A = 3215
|
||||
ROOM_ANY = -1
|
||||
|
||||
# Other useful BLDG_IDs:
|
||||
BUILDING_DAVIS_HALL = 74
|
||||
BUILDING_ANY_BUILDING = -1
|
||||
|
||||
UB_SCHED_URL = "https://spacerequest.buffalo.edu/EVNTWebApp/AnonymousServersApi.aspx/CustomBrowseEvents"
|
||||
|
||||
def dateoct_to_iso(dateoct):
|
||||
(year, month, mday, hour, minute, second, weekday, yearday) = dateoct
|
||||
return "{:04}-{:02}-{:02}T{:02}:{:02}:{:02}".format(year, month, mday, hour, minute, second)
|
||||
|
||||
def iso_to_datehex(iso):
|
||||
(iday, itime) = iso.split("T")
|
||||
(year, month, mday) = iday.split("-")
|
||||
(hour, minute, second) = itime.split(":")
|
||||
return (int(year), int(month), int(mday), int(hour), int(minute), int(second))
|
||||
|
||||
class EventTime:
|
||||
def __init__(self, iso):
|
||||
(iday, itime) = iso.split("T")
|
||||
(year, month, mday) = iday.split("-")
|
||||
(hour, minute, second) = itime.split(":")
|
||||
self.year = int(year)
|
||||
self.month = int(month)
|
||||
self.mday = int(mday)
|
||||
self.hour = int(hour)
|
||||
self.minute = int(minute)
|
||||
self.second = int(second)
|
||||
|
||||
def is_date(self, year, month, mday):
|
||||
# print("{} == {} / {} == {} / {} == {}".format(self.year, year, self.month, month, self.mday, mday))
|
||||
return (int(self.year) == int(year)) and (int(self.month) == int(month)) and (int(self.mday) == int(mday))
|
||||
|
||||
class Event:
|
||||
def __init__(self, e):
|
||||
self.event = e["EventName"]
|
||||
self.start = EventTime(e["TimeBookingStart"])
|
||||
self.end = EventTime(e["TimeBookingEnd"])
|
||||
self.room = e["Room"]
|
||||
self.creator = e["GroupName"]
|
||||
|
||||
class RoomSchedule:
|
||||
def __init__(self, room, building = BUILDING_ANY_BUILDING):
|
||||
self.BLDG_ID = building
|
||||
self.ROOM_ID = room
|
||||
|
||||
def fetch(self):
|
||||
req = {
|
||||
"date": dateoct_to_iso(time.localtime()),
|
||||
"data": {
|
||||
"BuildingId": self.BLDG_ID,
|
||||
"GroupTypeId": -1,
|
||||
"GroupTypeId": -1,
|
||||
"GroupId":-1,
|
||||
"EventTypeId":-1,
|
||||
"RoomId": self.ROOM_ID,
|
||||
"StatusId":-1,
|
||||
"ZeroDisplayOnWeb":0,
|
||||
"HeaderUrl":"",
|
||||
"Title":"",
|
||||
"Format":1,
|
||||
"Rollup":0,
|
||||
"EncryptD":"https://spacerequest.buffalo.edu/EVNTWebApp/CustomBrowseEvents.aspx",
|
||||
"PageSize":1000,
|
||||
"DropEventsInPast":False
|
||||
}
|
||||
}
|
||||
resp = request.post(
|
||||
url=UB_SCHED_URL,
|
||||
json=req,
|
||||
headers={
|
||||
"Accept": "application/json, text/javascript"
|
||||
}
|
||||
)
|
||||
wrapper = resp.json()["d"]
|
||||
bookings = [
|
||||
Event(e)
|
||||
for e in json.loads(wrapper)["MonthlyBookingResults"]
|
||||
]
|
||||
return bookings
|
||||
|
||||
if __name__ == '__main__':
|
||||
room = RoomSchedule(ROOM_CAPEN_212A)
|
||||
print(room.fetch())
|
|
@ -0,0 +1,18 @@
|
|||
# Scanner i2c en MicroPython | MicroPython i2c scanner
|
||||
# Renvoi l'adresse en decimal et hexa de chaque device connecte sur le bus i2c
|
||||
# Return decimal and hexa adress of each i2c device
|
||||
# https://projetsdiy.fr - https://diyprojects.io (dec. 2017)
|
||||
|
||||
import machine
|
||||
i2c = machine.I2C(scl=machine.Pin(22), sda=machine.Pin(21))
|
||||
|
||||
print('Scan i2c bus...')
|
||||
devices = i2c.scan()
|
||||
|
||||
if len(devices) == 0:
|
||||
print("No i2c device !")
|
||||
else:
|
||||
print('i2c devices found:',len(devices))
|
||||
|
||||
for device in devices:
|
||||
print("Decimal address: ",device," | Hexa address: ",hex(device))
|
102
inkplate10.py
102
inkplate10.py
|
@ -1,4 +1,6 @@
|
|||
# Copyright © 2020 by Thorsten von Eicken.
|
||||
# MicroPython driver for Inkplate 10
|
||||
# Contributed by: https://github.com/tve
|
||||
# Copyright © 2020 by Thorsten von Eicken
|
||||
import time
|
||||
import micropython
|
||||
import framebuf
|
||||
|
@ -20,14 +22,15 @@ D_COLS = const(1200)
|
|||
# Order of 4 values in each tuple: blk, dk-grey, light-grey, white
|
||||
# Meaning of values: 0=dischg, 1=black, 2=white, 3=skip
|
||||
# Uses "colors" 0 (black), 3, 5, and 7 (white) from 3-bit waveforms below
|
||||
WAVE_2B = ( # For Inkplate 10, colors 0, 3, 5-tweaked, and 7 from arduino driver
|
||||
(0, 1, 0, 0), # (arduino color 5 was too light and color 4 too dark)
|
||||
(0, 2, 0, 0),
|
||||
(0, 2, 0, 2),
|
||||
(0, 1, 2, 2),
|
||||
(0, 2, 1, 2),
|
||||
(0, 2, 1, 2),
|
||||
(1, 1, 2, 2),
|
||||
|
||||
WAVE_2B = ( # original mpy driver for Ink 6, differs from arduino driver below
|
||||
(1, 1, 2, 0),
|
||||
(1, 1, 1, 0),
|
||||
(0, 2, 1, 0),
|
||||
(1, 2, 1, 0),
|
||||
(0, 0, 2, 2),
|
||||
(1, 1, 0, 0),
|
||||
(0, 0, 0, 0)
|
||||
)
|
||||
# Ink10 WAVEFORM3BIT from arduino driver
|
||||
# {{0,0,0,0,0,0,1,0},{0,0,2,2,2,1,1,0},{0,2,1,1,2,2,1,0},{1,2,2,1,2,2,1,0},
|
||||
|
@ -56,6 +59,10 @@ EPD_SPH = const(0x00000002) # in W1Tx1
|
|||
# Inkplate provides access to the pins of the Inkplate 6 as well as to low-level display
|
||||
# functions.
|
||||
|
||||
RTC_I2C_ADDR = 0x51
|
||||
RTC_RAM_by = 0x03
|
||||
RTC_DAY_ADDR = 0x07
|
||||
RTC_SECOND_ADDR = 0x04
|
||||
|
||||
class _Inkplate:
|
||||
@classmethod
|
||||
|
@ -174,6 +181,70 @@ class _Inkplate:
|
|||
def _tps65186_read(cls, reg):
|
||||
cls._i2c.readfrom_mem(TPS65186_addr, reg, 1)[0]
|
||||
|
||||
@classmethod
|
||||
def rtc_dec_to_bcd(cls, val):
|
||||
return (val // 10 * 16) + (val % 10)
|
||||
|
||||
@classmethod
|
||||
def rtc_bcd_to_dec(cls, val):
|
||||
return (val // 16 * 10) + (val % 16)
|
||||
|
||||
@classmethod
|
||||
def rtc_set_time(cls, rtc_hour, rtc_minute, rtc_second):
|
||||
data = bytearray([
|
||||
RTC_RAM_by,
|
||||
170, # Write in RAM 170 to know that RTC is set
|
||||
cls.rtc_dec_to_bcd(rtc_second),
|
||||
cls.rtc_dec_to_bcd(rtc_minute),
|
||||
cls.rtc_dec_to_bcd(rtc_hour)
|
||||
])
|
||||
|
||||
cls._i2c.writeto(RTC_I2C_ADDR, data)
|
||||
|
||||
@classmethod
|
||||
def rtc_set_date(cls, rtc_weekday, rtc_day, rtc_month, rtc_yr):
|
||||
rtcYear = rtc_yr - 2000
|
||||
|
||||
data = bytearray([
|
||||
RTC_RAM_by,
|
||||
170, # Write in RAM 170 to know that RTC is set
|
||||
])
|
||||
|
||||
cls._i2c.writeto(RTC_I2C_ADDR, data)
|
||||
|
||||
data = bytearray([
|
||||
RTC_DAY_ADDR,
|
||||
cls.rtc_dec_to_bcd(rtc_day),
|
||||
cls.rtc_dec_to_bcd(rtc_weekday),
|
||||
cls.rtc_dec_to_bcd(rtc_month),
|
||||
cls.rtc_dec_to_bcd(rtcYear),
|
||||
])
|
||||
|
||||
cls._i2c.writeto(RTC_I2C_ADDR, data)
|
||||
|
||||
@classmethod
|
||||
def rtc_get_rtc_data(cls):
|
||||
cls._i2c.writeto(RTC_I2C_ADDR, bytearray([RTC_SECOND_ADDR]))
|
||||
data = cls._i2c.readfrom(RTC_I2C_ADDR, 7)
|
||||
|
||||
rtc_second = cls.rtc_bcd_to_dec(data[0] & 0x7F) # Ignore bit 7
|
||||
rtc_minute = cls.rtc_bcd_to_dec(data[1] & 0x7F)
|
||||
rtc_hour = cls.rtc_bcd_to_dec(data[2] & 0x3F) # Ignore bits 7 & 6
|
||||
rtc_day = cls.rtc_bcd_to_dec(data[3] & 0x3F)
|
||||
rtc_weekday = cls.rtc_bcd_to_dec(data[4] & 0x07) # Ignore bits 7,6,5,4 & 3
|
||||
rtc_month = cls.rtc_bcd_to_dec(data[5] & 0x1F) # Ignore bits 7,6 & 5
|
||||
rtc_year = cls.rtc_bcd_to_dec(data[6]) + 2000
|
||||
|
||||
return {
|
||||
'second': rtc_second,
|
||||
'minute': rtc_minute,
|
||||
'hour': rtc_hour,
|
||||
'day': rtc_day,
|
||||
'weekday': rtc_weekday,
|
||||
'month': rtc_month,
|
||||
'year': rtc_year
|
||||
}
|
||||
|
||||
# power_on turns the voltage regulator on and wakes up the display (GMODE and OE)
|
||||
@classmethod
|
||||
def power_on(cls):
|
||||
|
@ -813,9 +884,13 @@ class Inkplate:
|
|||
def setRotation(self, x):
|
||||
self.rotation = x % 4
|
||||
if self.rotation == 0 or self.rotation == 2:
|
||||
self.GFX.width = D_COLS
|
||||
self.GFX.height = D_ROWS
|
||||
self._width = D_COLS
|
||||
self._height = D_ROWS
|
||||
elif self.rotation == 1 or self.rotation == 3:
|
||||
self.GFX.width = D_ROWS
|
||||
self.GFX.height = D_COLS
|
||||
self._width = D_ROWS
|
||||
self._height = D_COLS
|
||||
|
||||
|
@ -1078,3 +1153,12 @@ class Inkplate:
|
|||
val >>= 1
|
||||
|
||||
self.drawPixel(x + i, y + h - j, val)
|
||||
|
||||
def rtcSetTime(self, rtc_hour, rtc_minute, rtc_second):
|
||||
return _Inkplate.rtc_set_time(rtc_hour, rtc_minute, rtc_second)
|
||||
|
||||
def rtcSetDate(self, rtc_weekday, rtc_day, rtc_month, rtc_yr):
|
||||
return _Inkplate.rtc_set_date(rtc_weekday, rtc_day, rtc_month, rtc_yr)
|
||||
|
||||
def rtcGetData(self):
|
||||
return _Inkplate.rtc_get_rtc_data()
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
# MicroPython driver for Inkplate 2
|
||||
# By Soldered Electronics
|
||||
# Based on the original contribution by https://github.com/tve
|
||||
import time
|
||||
import os
|
||||
from machine import ADC, I2C, SPI, Pin
|
||||
|
@ -212,9 +215,13 @@ class Inkplate:
|
|||
def setRotation(self, x):
|
||||
self.rotation = x % 4
|
||||
if self.rotation == 0 or self.rotation == 2:
|
||||
self.GFX.width = E_INK_WIDTH
|
||||
self.GFX.height = E_INK_HEIGHT
|
||||
self._width = E_INK_WIDTH
|
||||
self._height = E_INK_HEIGHT
|
||||
elif self.rotation == 1 or self.rotation == 3:
|
||||
self.GFX.width = E_INK_HEIGHT
|
||||
self.GFX.height = E_INK_WIDTH
|
||||
self._width = E_INK_HEIGHT
|
||||
self._height = E_INK_WIDTH
|
||||
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
# MicroPython driver for Inkplate 4
|
||||
# By Soldered Electronics
|
||||
# Based on the original contribution by https://github.com/tve
|
||||
import time
|
||||
import os
|
||||
from machine import ADC, I2C, SPI, Pin
|
||||
|
@ -263,9 +266,13 @@ class Inkplate:
|
|||
def setRotation(self, x):
|
||||
self.rotation = x % 4
|
||||
if self.rotation == 0 or self.rotation == 2:
|
||||
self.GFX.width = E_INK_WIDTH
|
||||
self.GFX.height = E_INK_HEIGHT
|
||||
self._width = E_INK_WIDTH
|
||||
self._height = E_INK_HEIGHT
|
||||
elif self.rotation == 1 or self.rotation == 3:
|
||||
self.GFX.width = E_INK_HEIGHT
|
||||
self.GFX.height = E_INK_WIDTH
|
||||
self._width = E_INK_HEIGHT
|
||||
self._height = E_INK_WIDTH
|
||||
|
||||
|
|
113
inkplate5.py
113
inkplate5.py
|
@ -1,3 +1,6 @@
|
|||
# MicroPython driver for Inkplate 5
|
||||
# By Soldered Electronics
|
||||
# Based on the original contribution by https://github.com/tve
|
||||
import time
|
||||
import micropython
|
||||
import framebuf
|
||||
|
@ -55,6 +58,14 @@ EPD_LE = const(0x00000004) # in W1Tx0
|
|||
EPD_CKV = const(0x00000001) # in W1Tx1
|
||||
EPD_SPH = const(0x00000002) # in W1Tx1
|
||||
|
||||
# Some constants for the RTC
|
||||
RTC_I2C_ADDR = 0x51
|
||||
RTC_RAM_by = 0x03
|
||||
RTC_DAY_ADDR = 0x07
|
||||
RTC_SECOND_ADDR = 0x04
|
||||
|
||||
|
||||
|
||||
# Inkplate provides access to the pins of the Inkplate 5 as well as to low-level display
|
||||
# functions.
|
||||
|
||||
|
@ -100,7 +111,7 @@ class _Inkplate:
|
|||
cls.GPIO0_PUP.digitalWrite(0)
|
||||
|
||||
cls.VBAT_EN = gpioPin(cls._PCAL6416A, 9, modeOUTPUT)
|
||||
cls.VBAT_EN.digitalWrite(1)
|
||||
cls.VBAT_EN.digitalWrite(0)
|
||||
|
||||
cls.SD_ENABLE = gpioPin(cls._PCAL6416A, 10, modeOUTPUT)
|
||||
cls.SD_ENABLE.digitalWrite(0)
|
||||
|
@ -154,18 +165,22 @@ class _Inkplate:
|
|||
# Read the battery voltage. Note that the result depends on the ADC calibration, and be a bit off.
|
||||
@classmethod
|
||||
def read_battery(cls):
|
||||
cls.VBAT_EN.digitalWrite(0)
|
||||
cls.VBAT_EN.digitalWrite(1)
|
||||
# Probably don't need to delay since Micropython is slow, but we do it anyway
|
||||
time.sleep_ms(5)
|
||||
value = cls.VBAT.read()
|
||||
print(value)
|
||||
cls.VBAT_EN.digitalWrite(1)
|
||||
cls.VBAT_EN.digitalWrite(0)
|
||||
result = (value / 4095.0) * 1.1 * 3.548133892 * 2
|
||||
return result
|
||||
|
||||
# Read panel temperature. I varies +- 2 degree
|
||||
@classmethod
|
||||
def read_temperature(cls):
|
||||
|
||||
# Power on so TPS is visible on I2C
|
||||
cls.power_on()
|
||||
|
||||
# start temperature measurement and wait 5 ms
|
||||
cls._i2c.writeto_mem(TPS65186_addr, 0x0D, bytes((0x80,)))
|
||||
time.sleep_ms(5)
|
||||
|
@ -173,11 +188,76 @@ class _Inkplate:
|
|||
# request temperature data from panel
|
||||
cls._i2c.writeto(TPS65186_addr, bytearray((0x00,)))
|
||||
cls._temperature = cls._i2c.readfrom(TPS65186_addr, 1)
|
||||
|
||||
# convert data from bytes to integer
|
||||
cls.temperatureInt = int.from_bytes(cls._temperature, "big", True)
|
||||
|
||||
cls.power_off()
|
||||
return cls.temperatureInt
|
||||
|
||||
@classmethod
|
||||
def rtc_dec_to_bcd(cls, val):
|
||||
return (val // 10 * 16) + (val % 10)
|
||||
|
||||
@classmethod
|
||||
def rtc_bcd_to_dec(cls, val):
|
||||
return (val // 16 * 10) + (val % 16)
|
||||
|
||||
@classmethod
|
||||
def rtc_set_time(cls, rtc_hour, rtc_minute, rtc_second):
|
||||
data = bytearray([
|
||||
RTC_RAM_by,
|
||||
170, # Write in RAM 170 to know that RTC is set
|
||||
cls.rtc_dec_to_bcd(rtc_second),
|
||||
cls.rtc_dec_to_bcd(rtc_minute),
|
||||
cls.rtc_dec_to_bcd(rtc_hour)
|
||||
])
|
||||
|
||||
cls._i2c.writeto(RTC_I2C_ADDR, data)
|
||||
|
||||
@classmethod
|
||||
def rtc_set_date(cls, rtc_weekday, rtc_day, rtc_month, rtc_yr):
|
||||
rtcYear = rtc_yr - 2000
|
||||
|
||||
data = bytearray([
|
||||
RTC_RAM_by,
|
||||
170, # Write in RAM 170 to know that RTC is set
|
||||
])
|
||||
|
||||
cls._i2c.writeto(RTC_I2C_ADDR, data)
|
||||
|
||||
data = bytearray([
|
||||
RTC_DAY_ADDR,
|
||||
cls.rtc_dec_to_bcd(rtc_day),
|
||||
cls.rtc_dec_to_bcd(rtc_weekday),
|
||||
cls.rtc_dec_to_bcd(rtc_month),
|
||||
cls.rtc_dec_to_bcd(rtcYear),
|
||||
])
|
||||
|
||||
cls._i2c.writeto(RTC_I2C_ADDR, data)
|
||||
|
||||
@classmethod
|
||||
def rtc_get_rtc_data(cls):
|
||||
cls._i2c.writeto(RTC_I2C_ADDR, bytearray([RTC_SECOND_ADDR]))
|
||||
data = cls._i2c.readfrom(RTC_I2C_ADDR, 7)
|
||||
|
||||
rtc_second = cls.rtc_bcd_to_dec(data[0] & 0x7F) # Ignore bit 7
|
||||
rtc_minute = cls.rtc_bcd_to_dec(data[1] & 0x7F)
|
||||
rtc_hour = cls.rtc_bcd_to_dec(data[2] & 0x3F) # Ignore bits 7 & 6
|
||||
rtc_day = cls.rtc_bcd_to_dec(data[3] & 0x3F)
|
||||
rtc_weekday = cls.rtc_bcd_to_dec(data[4] & 0x07) # Ignore bits 7,6,5,4 & 3
|
||||
rtc_month = cls.rtc_bcd_to_dec(data[5] & 0x1F) # Ignore bits 7,6 & 5
|
||||
rtc_year = cls.rtc_bcd_to_dec(data[6]) + 2000
|
||||
|
||||
return {
|
||||
'second': rtc_second,
|
||||
'minute': rtc_minute,
|
||||
'hour': rtc_hour,
|
||||
'day': rtc_day,
|
||||
'weekday': rtc_weekday,
|
||||
'month': rtc_month,
|
||||
'year': rtc_year
|
||||
}
|
||||
|
||||
# _tps65186_write writes an 8-bit value to a register
|
||||
@classmethod
|
||||
def _tps65186_write(cls, reg, v):
|
||||
|
@ -390,10 +470,10 @@ class InkplateMono(framebuf.FrameBuffer):
|
|||
data = int(fb[ix])
|
||||
ix -= 1
|
||||
w1ts0[0] = lut[data >> 4]
|
||||
#w1tc0[0] = EPD_CL
|
||||
# w1tc0[0] = EPD_CL
|
||||
w1tc0[0] = off
|
||||
w1ts0[0] = lut[data & 0xF]
|
||||
#w1tc0[0] = EPD_CL
|
||||
# w1tc0[0] = EPD_CL
|
||||
w1tc0[0] = off
|
||||
|
||||
# display_mono sends the monochrome buffer to the display, clearing it first
|
||||
|
@ -412,8 +492,8 @@ class InkplateMono(framebuf.FrameBuffer):
|
|||
ip.clean(2, 1)
|
||||
ip.clean(0, 11)
|
||||
|
||||
#w1ts0 = ptr32(int(ESP32_GPIO + 4 * W1TS0))
|
||||
#w1tc0 = ptr32(int(ESP32_GPIO + 4 * W1TC0))
|
||||
# w1ts0 = ptr32(int(ESP32_GPIO + 4 * W1TS0))
|
||||
# w1tc0 = ptr32(int(ESP32_GPIO + 4 * W1TC0))
|
||||
|
||||
# the display gets written N times
|
||||
t1 = time.ticks_ms()
|
||||
|
@ -764,7 +844,7 @@ class Inkplate:
|
|||
None,
|
||||
None,
|
||||
)
|
||||
|
||||
|
||||
def initSDCard(self):
|
||||
_Inkplate.SD_ENABLE.digitalWrite(0)
|
||||
try:
|
||||
|
@ -783,7 +863,7 @@ class Inkplate:
|
|||
def SDCardSleep(self):
|
||||
_Inkplate.SD_ENABLE.digitalWrite(1)
|
||||
time.sleep_ms(5)
|
||||
|
||||
|
||||
def SDCardWake(self):
|
||||
_Inkplate.SD_ENABLE.digitalWrite(0)
|
||||
time.sleep_ms(5)
|
||||
|
@ -827,6 +907,15 @@ class Inkplate:
|
|||
def einkOff(self):
|
||||
_Inkplate.power_off()
|
||||
|
||||
def rtcSetTime(self, rtc_hour, rtc_minute, rtc_second):
|
||||
return _Inkplate.rtc_set_time(rtc_hour, rtc_minute, rtc_second)
|
||||
|
||||
def rtcSetDate(self, rtc_weekday, rtc_day, rtc_month, rtc_yr):
|
||||
return _Inkplate.rtc_set_date(rtc_weekday, rtc_day, rtc_month, rtc_yr)
|
||||
|
||||
def rtcGetData(self):
|
||||
return _Inkplate.rtc_get_rtc_data()
|
||||
|
||||
def readBattery(self):
|
||||
return _Inkplate.read_battery()
|
||||
|
||||
|
@ -843,9 +932,13 @@ class Inkplate:
|
|||
def setRotation(self, x):
|
||||
self.rotation = x % 4
|
||||
if self.rotation == 0 or self.rotation == 2:
|
||||
self.GFX.width = D_COLS
|
||||
self.GFX.height = D_ROWS
|
||||
self._width = D_COLS
|
||||
self._height = D_ROWS
|
||||
elif self.rotation == 1 or self.rotation == 3:
|
||||
self.GFX.width = D_ROWS
|
||||
self.GFX.height = D_COLS
|
||||
self._width = D_ROWS
|
||||
self._height = D_COLS
|
||||
|
||||
|
|
85
inkplate6.py
85
inkplate6.py
|
@ -1,4 +1,6 @@
|
|||
# Copyright © 2020 by Thorsten von Eicken.
|
||||
# MicroPython driver for Inkplate 6
|
||||
# Contributed by: https://github.com/tve
|
||||
# Copyright © 2020 by Thorsten von Eicken
|
||||
import time
|
||||
import micropython
|
||||
import framebuf
|
||||
|
@ -59,6 +61,10 @@ EPD_SPH = const(0x00000002) # in W1Tx1
|
|||
# Inkplate provides access to the pins of the Inkplate 6 as well as to low-level display
|
||||
# functions.
|
||||
|
||||
RTC_I2C_ADDR = 0x51
|
||||
RTC_RAM_by = 0x03
|
||||
RTC_DAY_ADDR = 0x07
|
||||
RTC_SECOND_ADDR = 0x04
|
||||
|
||||
class _Inkplate:
|
||||
@classmethod
|
||||
|
@ -177,6 +183,70 @@ class _Inkplate:
|
|||
def _tps65186_read(cls, reg):
|
||||
cls._i2c.readfrom_mem(TPS65186_addr, reg, 1)[0]
|
||||
|
||||
@classmethod
|
||||
def rtc_dec_to_bcd(cls, val):
|
||||
return (val // 10 * 16) + (val % 10)
|
||||
|
||||
@classmethod
|
||||
def rtc_bcd_to_dec(cls, val):
|
||||
return (val // 16 * 10) + (val % 16)
|
||||
|
||||
@classmethod
|
||||
def rtc_set_time(cls, rtc_hour, rtc_minute, rtc_second):
|
||||
data = bytearray([
|
||||
RTC_RAM_by,
|
||||
170, # Write in RAM 170 to know that RTC is set
|
||||
cls.rtc_dec_to_bcd(rtc_second),
|
||||
cls.rtc_dec_to_bcd(rtc_minute),
|
||||
cls.rtc_dec_to_bcd(rtc_hour)
|
||||
])
|
||||
|
||||
cls._i2c.writeto(RTC_I2C_ADDR, data)
|
||||
|
||||
@classmethod
|
||||
def rtc_set_date(cls, rtc_weekday, rtc_day, rtc_month, rtc_yr):
|
||||
rtcYear = rtc_yr - 2000
|
||||
|
||||
data = bytearray([
|
||||
RTC_RAM_by,
|
||||
170, # Write in RAM 170 to know that RTC is set
|
||||
])
|
||||
|
||||
cls._i2c.writeto(RTC_I2C_ADDR, data)
|
||||
|
||||
data = bytearray([
|
||||
RTC_DAY_ADDR,
|
||||
cls.rtc_dec_to_bcd(rtc_day),
|
||||
cls.rtc_dec_to_bcd(rtc_weekday),
|
||||
cls.rtc_dec_to_bcd(rtc_month),
|
||||
cls.rtc_dec_to_bcd(rtcYear),
|
||||
])
|
||||
|
||||
cls._i2c.writeto(RTC_I2C_ADDR, data)
|
||||
|
||||
@classmethod
|
||||
def rtc_get_rtc_data(cls):
|
||||
cls._i2c.writeto(RTC_I2C_ADDR, bytearray([RTC_SECOND_ADDR]))
|
||||
data = cls._i2c.readfrom(RTC_I2C_ADDR, 7)
|
||||
|
||||
rtc_second = cls.rtc_bcd_to_dec(data[0] & 0x7F) # Ignore bit 7
|
||||
rtc_minute = cls.rtc_bcd_to_dec(data[1] & 0x7F)
|
||||
rtc_hour = cls.rtc_bcd_to_dec(data[2] & 0x3F) # Ignore bits 7 & 6
|
||||
rtc_day = cls.rtc_bcd_to_dec(data[3] & 0x3F)
|
||||
rtc_weekday = cls.rtc_bcd_to_dec(data[4] & 0x07) # Ignore bits 7,6,5,4 & 3
|
||||
rtc_month = cls.rtc_bcd_to_dec(data[5] & 0x1F) # Ignore bits 7,6 & 5
|
||||
rtc_year = cls.rtc_bcd_to_dec(data[6]) + 2000
|
||||
|
||||
return {
|
||||
'second': rtc_second,
|
||||
'minute': rtc_minute,
|
||||
'hour': rtc_hour,
|
||||
'day': rtc_day,
|
||||
'weekday': rtc_weekday,
|
||||
'month': rtc_month,
|
||||
'year': rtc_year
|
||||
}
|
||||
|
||||
# power_on turns the voltage regulator on and wakes up the display (GMODE and OE)
|
||||
@classmethod
|
||||
def power_on(cls):
|
||||
|
@ -816,9 +886,13 @@ class Inkplate:
|
|||
def setRotation(self, x):
|
||||
self.rotation = x % 4
|
||||
if self.rotation == 0 or self.rotation == 2:
|
||||
self.GFX.width = D_COLS
|
||||
self.GFX.height = D_ROWS
|
||||
self._width = D_COLS
|
||||
self._height = D_ROWS
|
||||
elif self.rotation == 1 or self.rotation == 3:
|
||||
self.GFX.width = D_ROWS
|
||||
self.GFX.height = D_COLS
|
||||
self._width = D_ROWS
|
||||
self._height = D_COLS
|
||||
|
||||
|
@ -1042,3 +1116,12 @@ class Inkplate:
|
|||
val >>= 1
|
||||
|
||||
self.drawPixel(x + i, y + h - j, val)
|
||||
|
||||
def rtcSetTime(self, rtc_hour, rtc_minute, rtc_second):
|
||||
return _Inkplate.rtc_set_time(rtc_hour, rtc_minute, rtc_second)
|
||||
|
||||
def rtcSetDate(self, rtc_weekday, rtc_day, rtc_month, rtc_yr):
|
||||
return _Inkplate.rtc_set_date(rtc_weekday, rtc_day, rtc_month, rtc_yr)
|
||||
|
||||
def rtcGetData(self):
|
||||
return _Inkplate.rtc_get_rtc_data()
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
# Copyright © 2020 by Thorsten von Eicken.
|
||||
# MicroPython driver for Inkplate 6COLOR
|
||||
# Contributed by: https://github.com/tve
|
||||
# Copyright © 2020 by Thorsten von Eicken
|
||||
import time
|
||||
import os
|
||||
from machine import ADC, I2C, SPI, Pin, SDCard
|
||||
|
@ -70,15 +72,19 @@ IO_PIN_B5 = const(13)
|
|||
IO_PIN_B6 = const(14)
|
||||
IO_PIN_B7 = const(15)
|
||||
|
||||
RTC_I2C_ADDR = 0x51
|
||||
RTC_RAM_by = 0x03
|
||||
RTC_DAY_ADDR = 0x07
|
||||
RTC_SECOND_ADDR = 0x04
|
||||
|
||||
class Inkplate:
|
||||
BLACK = const(0b00000000) # 0
|
||||
WHITE = const(0b00000001) # 1
|
||||
GREEN = const(0b00000010) # 2
|
||||
BLUE = const(0b00000011) # 3
|
||||
RED = const(0b00000100) # 4
|
||||
YELLOW = const(0b00000101) # 5
|
||||
ORANGE = const(0b00000110) # 6
|
||||
BLACK = const(0b00000000) # 0
|
||||
WHITE = const(0b00000001) # 1
|
||||
GREEN = const(0b00000010) # 2
|
||||
BLUE = const(0b00000011) # 3
|
||||
RED = const(0b00000100) # 4
|
||||
YELLOW = const(0b00000101) # 5
|
||||
ORANGE = const(0b00000110) # 6
|
||||
|
||||
_width = D_COLS
|
||||
_height = D_ROWS
|
||||
|
@ -104,7 +110,7 @@ class Inkplate:
|
|||
self.EPAPER_DC_PIN = Pin(EPAPER_DC_PIN, Pin.OUT)
|
||||
self.EPAPER_CS_PIN = Pin(EPAPER_CS_PIN, Pin.OUT)
|
||||
|
||||
#self.SD_ENABLE = gpioPin(self._PCAL6416A, 10, modeOUTPUT)
|
||||
# self.SD_ENABLE = gpioPin(self._PCAL6416A, 10, modeOUTPUT)
|
||||
|
||||
self.framebuf = bytearray(D_ROWS * D_COLS // 2)
|
||||
|
||||
|
@ -161,7 +167,7 @@ class Inkplate:
|
|||
return True
|
||||
|
||||
def initSDCard(self):
|
||||
#self.SD_ENABLE.digitalWrite(0)
|
||||
# self.SD_ENABLE.digitalWrite(0)
|
||||
try:
|
||||
os.mount(
|
||||
SDCard(
|
||||
|
@ -176,11 +182,11 @@ class Inkplate:
|
|||
print("Sd card could not be read")
|
||||
|
||||
def SDCardSleep(self):
|
||||
#self.SD_ENABLE.digitalWrite(1)
|
||||
# self.SD_ENABLE.digitalWrite(1)
|
||||
time.sleep_ms(5)
|
||||
|
||||
def SDCardWake(self):
|
||||
#self.SD_ENABLE.digitalWrite(0)
|
||||
# self.SD_ENABLE.digitalWrite(0)
|
||||
time.sleep_ms(5)
|
||||
|
||||
@classmethod
|
||||
|
@ -273,6 +279,70 @@ class Inkplate:
|
|||
def gpioExpanderPin(self, pin, mode):
|
||||
return gpioPin(self._PCAL6416A, pin, mode)
|
||||
|
||||
@classmethod
|
||||
def rtc_dec_to_bcd(cls, val):
|
||||
return (val // 10 * 16) + (val % 10)
|
||||
|
||||
@classmethod
|
||||
def rtc_bcd_to_dec(cls, val):
|
||||
return (val // 16 * 10) + (val % 16)
|
||||
|
||||
@classmethod
|
||||
def rtc_set_time(cls, rtc_hour, rtc_minute, rtc_second):
|
||||
data = bytearray([
|
||||
RTC_RAM_by,
|
||||
170, # Write in RAM 170 to know that RTC is set
|
||||
cls.rtc_dec_to_bcd(rtc_second),
|
||||
cls.rtc_dec_to_bcd(rtc_minute),
|
||||
cls.rtc_dec_to_bcd(rtc_hour)
|
||||
])
|
||||
|
||||
cls._i2c.writeto(RTC_I2C_ADDR, data)
|
||||
|
||||
@classmethod
|
||||
def rtc_set_date(cls, rtc_weekday, rtc_day, rtc_month, rtc_yr):
|
||||
rtcYear = rtc_yr - 2000
|
||||
|
||||
data = bytearray([
|
||||
RTC_RAM_by,
|
||||
170, # Write in RAM 170 to know that RTC is set
|
||||
])
|
||||
|
||||
cls._i2c.writeto(RTC_I2C_ADDR, data)
|
||||
|
||||
data = bytearray([
|
||||
RTC_DAY_ADDR,
|
||||
cls.rtc_dec_to_bcd(rtc_day),
|
||||
cls.rtc_dec_to_bcd(rtc_weekday),
|
||||
cls.rtc_dec_to_bcd(rtc_month),
|
||||
cls.rtc_dec_to_bcd(rtcYear),
|
||||
])
|
||||
|
||||
cls._i2c.writeto(RTC_I2C_ADDR, data)
|
||||
|
||||
@classmethod
|
||||
def rtc_get_rtc_data(cls):
|
||||
cls._i2c.writeto(RTC_I2C_ADDR, bytearray([RTC_SECOND_ADDR]))
|
||||
data = cls._i2c.readfrom(RTC_I2C_ADDR, 7)
|
||||
|
||||
rtc_second = cls.rtc_bcd_to_dec(data[0] & 0x7F) # Ignore bit 7
|
||||
rtc_minute = cls.rtc_bcd_to_dec(data[1] & 0x7F)
|
||||
rtc_hour = cls.rtc_bcd_to_dec(data[2] & 0x3F) # Ignore bits 7 & 6
|
||||
rtc_day = cls.rtc_bcd_to_dec(data[3] & 0x3F)
|
||||
rtc_weekday = cls.rtc_bcd_to_dec(data[4] & 0x07) # Ignore bits 7,6,5,4 & 3
|
||||
rtc_month = cls.rtc_bcd_to_dec(data[5] & 0x1F) # Ignore bits 7,6 & 5
|
||||
rtc_year = cls.rtc_bcd_to_dec(data[6]) + 2000
|
||||
|
||||
return {
|
||||
'second': rtc_second,
|
||||
'minute': rtc_minute,
|
||||
'hour': rtc_hour,
|
||||
'day': rtc_day,
|
||||
'weekday': rtc_weekday,
|
||||
'month': rtc_month,
|
||||
'year': rtc_year
|
||||
}
|
||||
|
||||
@classmethod
|
||||
def clean(self):
|
||||
if not self._panelState:
|
||||
|
@ -317,9 +387,13 @@ class Inkplate:
|
|||
def setRotation(self, x):
|
||||
self.rotation = x % 4
|
||||
if self.rotation == 0 or self.rotation == 2:
|
||||
self.GFX.width = D_COLS
|
||||
self.GFX.height = D_ROWS
|
||||
self._width = D_COLS
|
||||
self._height = D_ROWS
|
||||
elif self.rotation == 1 or self.rotation == 3:
|
||||
self.GFX.width = D_ROWS
|
||||
self.GFX.height = D_COLS
|
||||
self._width = D_ROWS
|
||||
self._height = D_COLS
|
||||
|
||||
|
@ -504,3 +578,12 @@ class Inkplate:
|
|||
self.writePixel(x1 + x, y1 + y, pixel_value1)
|
||||
if x2 < width and y2 < height:
|
||||
self.writePixel(x2 + x, y2 + y, pixel_value2)
|
||||
|
||||
def rtcSetTime(self, rtc_hour, rtc_minute, rtc_second):
|
||||
return _Inkplate.rtc_set_time(rtc_hour, rtc_minute, rtc_second)
|
||||
|
||||
def rtcSetDate(self, rtc_weekday, rtc_day, rtc_month, rtc_yr):
|
||||
return _Inkplate.rtc_set_date(rtc_weekday, rtc_day, rtc_month, rtc_yr)
|
||||
|
||||
def rtcGetData(self):
|
||||
return _Inkplate.rtc_get_rtc_data()
|
||||
|
|
156
inkplate6PLUS.py
156
inkplate6PLUS.py
|
@ -1,4 +1,6 @@
|
|||
# Copyright © 2020 by Thorsten von Eicken.
|
||||
# MicroPython driver for Inkplate 6PLUS
|
||||
# Contributed by: https://github.com/tve
|
||||
# Copyright © 2020 by Thorsten von Eicken
|
||||
import time
|
||||
import micropython
|
||||
import framebuf
|
||||
|
@ -22,7 +24,7 @@ D_COLS = const(1024)
|
|||
# Meaning of values: 0=dischg, 1=black, 2=white, 3=skip
|
||||
# Uses "colors" 0 (black), 3, 5, and 7 (white) from 3-bit waveforms below
|
||||
|
||||
#add discharge to waveforms to try to fix them
|
||||
# add discharge to waveforms to try to fix them
|
||||
WAVE_2B = ( # original mpy driver for Ink 6, differs from arduino driver below
|
||||
(0, 0, 0, 0),
|
||||
(0, 0, 0, 0),
|
||||
|
@ -32,12 +34,12 @@ WAVE_2B = ( # original mpy driver for Ink 6, differs from arduino driver below
|
|||
(1, 1, 2, 0),
|
||||
(1, 2, 2, 2),
|
||||
)
|
||||
# Ink6 WAVEFORM3BIT from arduino driver
|
||||
# {{0,1,1,0,0,1,1,0},{0,1,2,1,1,2,1,0},{1,1,1,2,2,1,0,0},{0,0,0,1,1,1,2,0},
|
||||
# {2,1,1,1,2,1,2,0},{2,2,1,1,2,1,2,0},{1,1,1,2,1,2,2,0},{0,0,0,0,0,0,2,0}};
|
||||
# Ink6 WAVEFORM3BIT from arduino driver
|
||||
# {{0,1,1,0,0,1,1,0},{0,1,2,1,1,2,1,0},{1,1,1,2,2,1,0,0},{0,0,0,1,1,1,2,0},
|
||||
# {2,1,1,1,2,1,2,0},{2,2,1,1,2,1,2,0},{1,1,1,2,1,2,2,0},{0,0,0,0,0,0,2,0}};
|
||||
|
||||
TPS65186_addr = const(0x48) # I2C address
|
||||
FRONTLIGHT_ADDRESS = 0x2E
|
||||
FRONTLIGHT_ADDRESS = 0x2E
|
||||
TOUCHSCREEN_EN = 12
|
||||
TS_RTS = 10
|
||||
TS_INT = 36
|
||||
|
@ -65,6 +67,10 @@ EPD_SPH = const(0x00000002) # in W1Tx1
|
|||
# Inkplate provides access to the pins of the Inkplate 6 PLUS as well as to low-level display
|
||||
# functions.
|
||||
|
||||
RTC_I2C_ADDR = 0x51
|
||||
RTC_RAM_by = 0x03
|
||||
RTC_DAY_ADDR = 0x07
|
||||
RTC_SECOND_ADDR = 0x04
|
||||
|
||||
class _Inkplate:
|
||||
@classmethod
|
||||
|
@ -102,18 +108,18 @@ class _Inkplate:
|
|||
cls.VBAT = ADC(Pin(35))
|
||||
cls.VBAT.atten(ADC.ATTN_11DB)
|
||||
cls.VBAT.width(ADC.WIDTH_12BIT)
|
||||
#Frontlight
|
||||
# Frontlight
|
||||
cls.FRONTLIGHT = cls._mcp23017.pin(11, Pin.OUT, value=0)
|
||||
|
||||
#Toucscreen
|
||||
# Toucscreen
|
||||
cls._tsXResolution = 0
|
||||
cls._tsYResolution = 0
|
||||
cls.touchX = 0
|
||||
cls.touchY = 0
|
||||
cls._xPos = [0,0]
|
||||
cls._yPos = [0,0]
|
||||
cls.xraw = [0,0]
|
||||
cls.yraw = [0,0]
|
||||
cls._xPos = [0, 0]
|
||||
cls._yPos = [0, 0]
|
||||
cls.xraw = [0, 0]
|
||||
cls.yraw = [0, 0]
|
||||
cls._on = False # whether panel is powered on or not
|
||||
|
||||
if len(_Inkplate.byte2gpio) == 0:
|
||||
|
@ -167,7 +173,7 @@ class _Inkplate:
|
|||
result = (value / 4095.0) * 1.1 * 3.548133892 * 2
|
||||
return result
|
||||
|
||||
#Frontlight control
|
||||
# Frontlight control
|
||||
@classmethod
|
||||
def frontlight(cls, value):
|
||||
cls.FRONTLIGHT.value(value)
|
||||
|
@ -178,8 +184,73 @@ class _Inkplate:
|
|||
cls._i2c.writeto(FRONTLIGHT_ADDRESS, bytes((0,)))
|
||||
cls._i2c.writeto(FRONTLIGHT_ADDRESS, bytes((value,)))
|
||||
|
||||
# RTC
|
||||
@classmethod
|
||||
def rtc_dec_to_bcd(cls, val):
|
||||
return (val // 10 * 16) + (val % 10)
|
||||
|
||||
@classmethod
|
||||
def rtc_bcd_to_dec(cls, val):
|
||||
return (val // 16 * 10) + (val % 16)
|
||||
|
||||
@classmethod
|
||||
def rtc_set_time(cls, rtc_hour, rtc_minute, rtc_second):
|
||||
data = bytearray([
|
||||
RTC_RAM_by,
|
||||
170, # Write in RAM 170 to know that RTC is set
|
||||
cls.rtc_dec_to_bcd(rtc_second),
|
||||
cls.rtc_dec_to_bcd(rtc_minute),
|
||||
cls.rtc_dec_to_bcd(rtc_hour)
|
||||
])
|
||||
|
||||
cls._i2c.writeto(RTC_I2C_ADDR, data)
|
||||
|
||||
@classmethod
|
||||
def rtc_set_date(cls, rtc_weekday, rtc_day, rtc_month, rtc_yr):
|
||||
rtcYear = rtc_yr - 2000
|
||||
|
||||
data = bytearray([
|
||||
RTC_RAM_by,
|
||||
170, # Write in RAM 170 to know that RTC is set
|
||||
])
|
||||
|
||||
cls._i2c.writeto(RTC_I2C_ADDR, data)
|
||||
|
||||
data = bytearray([
|
||||
RTC_DAY_ADDR,
|
||||
cls.rtc_dec_to_bcd(rtc_day),
|
||||
cls.rtc_dec_to_bcd(rtc_weekday),
|
||||
cls.rtc_dec_to_bcd(rtc_month),
|
||||
cls.rtc_dec_to_bcd(rtcYear),
|
||||
])
|
||||
|
||||
cls._i2c.writeto(RTC_I2C_ADDR, data)
|
||||
|
||||
@classmethod
|
||||
def rtc_get_rtc_data(cls):
|
||||
cls._i2c.writeto(RTC_I2C_ADDR, bytearray([RTC_SECOND_ADDR]))
|
||||
data = cls._i2c.readfrom(RTC_I2C_ADDR, 7)
|
||||
|
||||
rtc_second = cls.rtc_bcd_to_dec(data[0] & 0x7F) # Ignore bit 7
|
||||
rtc_minute = cls.rtc_bcd_to_dec(data[1] & 0x7F)
|
||||
rtc_hour = cls.rtc_bcd_to_dec(data[2] & 0x3F) # Ignore bits 7 & 6
|
||||
rtc_day = cls.rtc_bcd_to_dec(data[3] & 0x3F)
|
||||
rtc_weekday = cls.rtc_bcd_to_dec(data[4] & 0x07) # Ignore bits 7,6,5,4 & 3
|
||||
rtc_month = cls.rtc_bcd_to_dec(data[5] & 0x1F) # Ignore bits 7,6 & 5
|
||||
rtc_year = cls.rtc_bcd_to_dec(data[6]) + 2000
|
||||
|
||||
return {
|
||||
'second': rtc_second,
|
||||
'minute': rtc_minute,
|
||||
'hour': rtc_hour,
|
||||
'day': rtc_day,
|
||||
'weekday': rtc_weekday,
|
||||
'month': rtc_month,
|
||||
'year': rtc_year
|
||||
}
|
||||
|
||||
# Touchscreen
|
||||
|
||||
#Touchscreen
|
||||
@classmethod
|
||||
def touchInArea(cls, x, y, width, height):
|
||||
x2 = x+width
|
||||
|
@ -191,7 +262,7 @@ class _Inkplate:
|
|||
cls.touchX = cls._xPos[0]
|
||||
cls.touchY = cls._yPos[0]
|
||||
|
||||
if(cls.touchX > x and cls.touchX < x2) and (cls.touchY > y and cls.touchY < y2):
|
||||
if (cls.touchX > x and cls.touchX < x2) and (cls.touchY > y and cls.touchY < y2):
|
||||
return True
|
||||
return False
|
||||
|
||||
|
@ -216,7 +287,7 @@ class _Inkplate:
|
|||
@classmethod
|
||||
def tsSoftwareReset(cls):
|
||||
soft_rst_cmd = [0x77, 0x77, 0x77, 0x77]
|
||||
helloPacket =bytearray([0x55, 0x55, 0x55, 0x55])
|
||||
helloPacket = bytearray([0x55, 0x55, 0x55, 0x55])
|
||||
|
||||
try:
|
||||
_Inkplate.tsWriteRegs(TS_ADDR, soft_rst_cmd)
|
||||
|
@ -230,7 +301,7 @@ class _Inkplate:
|
|||
rb = cls._i2c.readfrom(TS_ADDR, 4)
|
||||
cls._tsFlag = False
|
||||
|
||||
if(rb == helloPacket):
|
||||
if (rb == helloPacket):
|
||||
|
||||
return True
|
||||
else:
|
||||
|
@ -250,7 +321,7 @@ class _Inkplate:
|
|||
ts_intr.irq(trigger=Pin.IRQ_FALLING, handler=cls.tsInt)
|
||||
|
||||
_Inkplate.tsHardwareReset()
|
||||
if(_Inkplate.tsSoftwareReset() == False):
|
||||
if (_Inkplate.tsSoftwareReset() == False):
|
||||
cls.ts_intr = Pin(TS_INT, mode=Pin.IN)
|
||||
return False
|
||||
|
||||
|
@ -279,7 +350,7 @@ class _Inkplate:
|
|||
cls.xraw[i] <<= 4
|
||||
cls.xraw[i] |= data[2 + offset]
|
||||
|
||||
cls.yraw[i] = ( data[1 + offset] & 0x0F)
|
||||
cls.yraw[i] = (data[1 + offset] & 0x0F)
|
||||
cls.yraw[i] <<= 8
|
||||
cls.yraw[i] |= data[3 + offset]
|
||||
|
||||
|
@ -291,23 +362,31 @@ class _Inkplate:
|
|||
raw = cls.tsGetRawData()
|
||||
|
||||
for i in range(0, 8):
|
||||
if raw[7] & (1<<i):
|
||||
if raw[7] & (1 << i):
|
||||
fingers += 1
|
||||
for i in range(0, 2):
|
||||
cls.tsGetXY(raw, i)
|
||||
|
||||
if cls.rotation == 0:
|
||||
cls._yPos[i] = (int)((cls.xraw[i] * D_ROWS - 1) / cls._tsXResolution)
|
||||
cls._xPos[i] = (int)(D_COLS - 1 - ((cls.yraw[i] * D_COLS - 1) / cls._tsYResolution))
|
||||
cls._yPos[i] = (int)(
|
||||
(cls.xraw[i] * D_ROWS - 1) / cls._tsXResolution)
|
||||
cls._xPos[i] = (int)(
|
||||
D_COLS - 1 - ((cls.yraw[i] * D_COLS - 1) / cls._tsYResolution))
|
||||
elif cls.rotation == 1:
|
||||
cls._xPos[i] = (int)((cls.xraw[i] * D_ROWS - 1) / cls._tsXResolution)
|
||||
cls._yPos[i] = (int)((cls.yraw[i] * D_COLS - 1) / cls._tsYResolution)
|
||||
cls._xPos[i] = (int)(
|
||||
(cls.xraw[i] * D_ROWS - 1) / cls._tsXResolution)
|
||||
cls._yPos[i] = (int)(
|
||||
(cls.yraw[i] * D_COLS - 1) / cls._tsYResolution)
|
||||
elif cls.rotation == 2:
|
||||
cls._yPos[i] = (int)(D_ROWS - 1 - ((cls.xraw[i] * D_ROWS - 1) / cls._tsXResolution))
|
||||
cls._xPos[i] = (int)((cls.yraw[i] * D_COLS - 1) / cls._tsYResolution)
|
||||
cls._yPos[i] = (int)(
|
||||
D_ROWS - 1 - ((cls.xraw[i] * D_ROWS - 1) / cls._tsXResolution))
|
||||
cls._xPos[i] = (int)(
|
||||
(cls.yraw[i] * D_COLS - 1) / cls._tsYResolution)
|
||||
elif cls.rotation == 3:
|
||||
cls._xPos[i] = (int)(D_ROWS - 1 - ((cls.xraw[i] * D_ROWS - 1) / cls._tsXResolution))
|
||||
cls._yPos[i] = (int)(D_COLS - 1 - ((cls.yraw[i] * D_COLS - 1) / cls._tsYResolution))
|
||||
cls._xPos[i] = (int)(
|
||||
D_ROWS - 1 - ((cls.xraw[i] * D_ROWS - 1) / cls._tsXResolution))
|
||||
cls._yPos[i] = (int)(
|
||||
D_COLS - 1 - ((cls.yraw[i] * D_COLS - 1) / cls._tsYResolution))
|
||||
|
||||
return fingers
|
||||
|
||||
|
@ -326,7 +405,6 @@ class _Inkplate:
|
|||
cls._tsYResolution = ((rec[2])) | ((rec[3] & 0xF0) << 4)
|
||||
cls._tsFlag = False
|
||||
|
||||
|
||||
@classmethod
|
||||
def tsSetPowerState(cls, state):
|
||||
state &= 1
|
||||
|
@ -351,8 +429,8 @@ class _Inkplate:
|
|||
def i2cScan(cls):
|
||||
return cls._i2c.scan()
|
||||
|
||||
|
||||
# Read panel temperature. I varies +- 2 degree
|
||||
|
||||
@classmethod
|
||||
def read_temperature(cls):
|
||||
# start temperature measurement and wait 5 ms
|
||||
|
@ -911,7 +989,6 @@ class InkplatePartial:
|
|||
w1tc0[0] = off
|
||||
|
||||
|
||||
|
||||
# Inkplate wraper to make it more easy for use
|
||||
|
||||
|
||||
|
@ -1018,9 +1095,13 @@ class Inkplate:
|
|||
_Inkplate.rotation = x % 4
|
||||
|
||||
if self.rotation == 0 or self.rotation == 2:
|
||||
self.GFX.width = D_COLS
|
||||
self.GFX.height = D_ROWS
|
||||
self._width = D_COLS
|
||||
self._height = D_ROWS
|
||||
elif self.rotation == 1 or self.rotation == 3:
|
||||
self.GFX.width = D_ROWS
|
||||
self.GFX.height = D_COLS
|
||||
self._width = D_ROWS
|
||||
self._height = D_COLS
|
||||
|
||||
|
@ -1245,14 +1326,14 @@ class Inkplate:
|
|||
|
||||
self.drawPixel(x + i, y + h - j, val)
|
||||
|
||||
#Frontlight
|
||||
# Frontlight
|
||||
def frontlight(self, value):
|
||||
_Inkplate.frontlight(value)
|
||||
|
||||
def setFrontlight(self, value):
|
||||
_Inkplate.setFrontlight(value)
|
||||
|
||||
#Touchscreen
|
||||
# Touchscreen
|
||||
def touchInArea(self, x, y, width, height):
|
||||
return _Inkplate.touchInArea(x, y, width, height)
|
||||
|
||||
|
@ -1261,3 +1342,12 @@ class Inkplate:
|
|||
|
||||
def tsShutdown(self):
|
||||
_Inkplate.tsShutdown()
|
||||
|
||||
def rtcSetTime(self, rtc_hour, rtc_minute, rtc_second):
|
||||
return _Inkplate.rtc_set_time(rtc_hour, rtc_minute, rtc_second)
|
||||
|
||||
def rtcSetDate(self, rtc_weekday, rtc_day, rtc_month, rtc_yr):
|
||||
return _Inkplate.rtc_set_date(rtc_weekday, rtc_day, rtc_month, rtc_yr)
|
||||
|
||||
def rtcGetData(self):
|
||||
return _Inkplate.rtc_get_rtc_data()
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
# MicroPython driver for Inkplate 7
|
||||
# By Soldered Electronics
|
||||
# Based on the original contribution by https://github.com/tve
|
||||
import time
|
||||
import os
|
||||
from machine import ADC, I2C, SPI, Pin, SDCard
|
||||
|
@ -247,9 +250,13 @@ class Inkplate:
|
|||
def setRotation(self, x):
|
||||
self.rotation = x % 4
|
||||
if self.rotation == 0 or self.rotation == 2:
|
||||
self.GFX.width = E_INK_WIDTH
|
||||
self.GFX.height = E_INK_HEIGHT
|
||||
self._width = E_INK_WIDTH
|
||||
self._height = E_INK_HEIGHT
|
||||
elif self.rotation == 1 or self.rotation == 3:
|
||||
self.GFX.width = E_INK_HEIGHT
|
||||
self.GFX.height = E_INK_WIDTH
|
||||
self._width = E_INK_HEIGHT
|
||||
self._height = E_INK_WIDTH
|
||||
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
*
|
|
@ -1,5 +1,6 @@
|
|||
# Copyright © 2020 by Thorsten von Eicken.
|
||||
# Driver for the MCP23017 GPIO expander
|
||||
# MicroPython driver the MCP23017 GPIO expander
|
||||
# Contributed by: https://github.com/tve
|
||||
# Copyright © 2020 by Thorsten von Eicken
|
||||
from machine import Pin as mPin
|
||||
from micropython import const
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# Copyright © 2020 by Thorsten von Eicken.
|
||||
# Modified by Soldered to work for new Inkplate models
|
||||
|
||||
# MicroPython driver for Soldered Inkplate 10
|
||||
# By Soldered Electronics
|
||||
# Based on the original contribution by https://github.com/tve
|
||||
import time
|
||||
import micropython
|
||||
import framebuf
|
||||
|
@ -56,6 +56,10 @@ EPD_SPH = const(0x00000002) # in W1Tx1
|
|||
# Inkplate provides access to the pins of the Inkplate 10 as well as to low-level display
|
||||
# functions.
|
||||
|
||||
RTC_I2C_ADDR = 0x51
|
||||
RTC_RAM_by = 0x03
|
||||
RTC_DAY_ADDR = 0x07
|
||||
RTC_SECOND_ADDR = 0x04
|
||||
|
||||
class _Inkplate:
|
||||
@classmethod
|
||||
|
@ -324,6 +328,70 @@ class _Inkplate:
|
|||
cls.vscan_start()
|
||||
cls.fill_screen(data)
|
||||
|
||||
@classmethod
|
||||
def rtc_dec_to_bcd(cls, val):
|
||||
return (val // 10 * 16) + (val % 10)
|
||||
|
||||
@classmethod
|
||||
def rtc_bcd_to_dec(cls, val):
|
||||
return (val // 16 * 10) + (val % 16)
|
||||
|
||||
@classmethod
|
||||
def rtc_set_time(cls, rtc_hour, rtc_minute, rtc_second):
|
||||
data = bytearray([
|
||||
RTC_RAM_by,
|
||||
170, # Write in RAM 170 to know that RTC is set
|
||||
cls.rtc_dec_to_bcd(rtc_second),
|
||||
cls.rtc_dec_to_bcd(rtc_minute),
|
||||
cls.rtc_dec_to_bcd(rtc_hour)
|
||||
])
|
||||
|
||||
cls._i2c.writeto(RTC_I2C_ADDR, data)
|
||||
|
||||
@classmethod
|
||||
def rtc_set_date(cls, rtc_weekday, rtc_day, rtc_month, rtc_yr):
|
||||
rtcYear = rtc_yr - 2000
|
||||
|
||||
data = bytearray([
|
||||
RTC_RAM_by,
|
||||
170, # Write in RAM 170 to know that RTC is set
|
||||
])
|
||||
|
||||
cls._i2c.writeto(RTC_I2C_ADDR, data)
|
||||
|
||||
data = bytearray([
|
||||
RTC_DAY_ADDR,
|
||||
cls.rtc_dec_to_bcd(rtc_day),
|
||||
cls.rtc_dec_to_bcd(rtc_weekday),
|
||||
cls.rtc_dec_to_bcd(rtc_month),
|
||||
cls.rtc_dec_to_bcd(rtcYear),
|
||||
])
|
||||
|
||||
cls._i2c.writeto(RTC_I2C_ADDR, data)
|
||||
|
||||
@classmethod
|
||||
def rtc_get_rtc_data(cls):
|
||||
cls._i2c.writeto(RTC_I2C_ADDR, bytearray([RTC_SECOND_ADDR]))
|
||||
data = cls._i2c.readfrom(RTC_I2C_ADDR, 7)
|
||||
|
||||
rtc_second = cls.rtc_bcd_to_dec(data[0] & 0x7F) # Ignore bit 7
|
||||
rtc_minute = cls.rtc_bcd_to_dec(data[1] & 0x7F)
|
||||
rtc_hour = cls.rtc_bcd_to_dec(data[2] & 0x3F) # Ignore bits 7 & 6
|
||||
rtc_day = cls.rtc_bcd_to_dec(data[3] & 0x3F)
|
||||
rtc_weekday = cls.rtc_bcd_to_dec(data[4] & 0x07) # Ignore bits 7,6,5,4 & 3
|
||||
rtc_month = cls.rtc_bcd_to_dec(data[5] & 0x1F) # Ignore bits 7,6 & 5
|
||||
rtc_year = cls.rtc_bcd_to_dec(data[6]) + 2000
|
||||
|
||||
return {
|
||||
'second': rtc_second,
|
||||
'minute': rtc_minute,
|
||||
'hour': rtc_hour,
|
||||
'day': rtc_day,
|
||||
'weekday': rtc_weekday,
|
||||
'month': rtc_month,
|
||||
'year': rtc_year
|
||||
}
|
||||
|
||||
|
||||
class InkplateMono(framebuf.FrameBuffer):
|
||||
def __init__(self):
|
||||
|
@ -843,9 +911,13 @@ class Inkplate:
|
|||
def setRotation(self, x):
|
||||
self.rotation = x % 4
|
||||
if self.rotation == 0 or self.rotation == 2:
|
||||
self.GFX.width = D_COLS
|
||||
self.GFX.height = D_ROWS
|
||||
self._width = D_COLS
|
||||
self._height = D_ROWS
|
||||
elif self.rotation == 1 or self.rotation == 3:
|
||||
self.GFX.width = D_ROWS
|
||||
self.GFX.height = D_COLS
|
||||
self._width = D_ROWS
|
||||
self._height = D_COLS
|
||||
|
||||
|
@ -1108,3 +1180,12 @@ class Inkplate:
|
|||
val >>= 1
|
||||
|
||||
self.drawPixel(x + i, y + h - j, val)
|
||||
|
||||
def rtcSetTime(self, rtc_hour, rtc_minute, rtc_second):
|
||||
return _Inkplate.rtc_set_time(rtc_hour, rtc_minute, rtc_second)
|
||||
|
||||
def rtcSetDate(self, rtc_weekday, rtc_day, rtc_month, rtc_yr):
|
||||
return _Inkplate.rtc_set_date(rtc_weekday, rtc_day, rtc_month, rtc_yr)
|
||||
|
||||
def rtcGetData(self):
|
||||
return _Inkplate.rtc_get_rtc_data()
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# Copyright © 2020 by Thorsten von Eicken.
|
||||
# Modified by Soldered to work on new Inkplate models
|
||||
|
||||
# MicroPython driver for Soldered Inkplate 6
|
||||
# By Soldered Electronics
|
||||
# Based on the original contribution by https://github.com/tve
|
||||
import time
|
||||
import micropython
|
||||
import framebuf
|
||||
|
@ -61,6 +61,10 @@ EPD_SPH = const(0x00000002) # in W1Tx1
|
|||
# Inkplate provides access to the pins of the Inkplate 6 as well as to low-level display
|
||||
# functions.
|
||||
|
||||
RTC_I2C_ADDR = 0x51
|
||||
RTC_RAM_by = 0x03
|
||||
RTC_DAY_ADDR = 0x07
|
||||
RTC_SECOND_ADDR = 0x04
|
||||
|
||||
class _Inkplate:
|
||||
@classmethod
|
||||
|
@ -325,6 +329,70 @@ class _Inkplate:
|
|||
cls.vscan_start()
|
||||
cls.fill_screen(data)
|
||||
|
||||
@classmethod
|
||||
def rtc_dec_to_bcd(cls, val):
|
||||
return (val // 10 * 16) + (val % 10)
|
||||
|
||||
@classmethod
|
||||
def rtc_bcd_to_dec(cls, val):
|
||||
return (val // 16 * 10) + (val % 16)
|
||||
|
||||
@classmethod
|
||||
def rtc_set_time(cls, rtc_hour, rtc_minute, rtc_second):
|
||||
data = bytearray([
|
||||
RTC_RAM_by,
|
||||
170, # Write in RAM 170 to know that RTC is set
|
||||
cls.rtc_dec_to_bcd(rtc_second),
|
||||
cls.rtc_dec_to_bcd(rtc_minute),
|
||||
cls.rtc_dec_to_bcd(rtc_hour)
|
||||
])
|
||||
|
||||
cls._i2c.writeto(RTC_I2C_ADDR, data)
|
||||
|
||||
@classmethod
|
||||
def rtc_set_date(cls, rtc_weekday, rtc_day, rtc_month, rtc_yr):
|
||||
rtcYear = rtc_yr - 2000
|
||||
|
||||
data = bytearray([
|
||||
RTC_RAM_by,
|
||||
170, # Write in RAM 170 to know that RTC is set
|
||||
])
|
||||
|
||||
cls._i2c.writeto(RTC_I2C_ADDR, data)
|
||||
|
||||
data = bytearray([
|
||||
RTC_DAY_ADDR,
|
||||
cls.rtc_dec_to_bcd(rtc_day),
|
||||
cls.rtc_dec_to_bcd(rtc_weekday),
|
||||
cls.rtc_dec_to_bcd(rtc_month),
|
||||
cls.rtc_dec_to_bcd(rtcYear),
|
||||
])
|
||||
|
||||
cls._i2c.writeto(RTC_I2C_ADDR, data)
|
||||
|
||||
@classmethod
|
||||
def rtc_get_rtc_data(cls):
|
||||
cls._i2c.writeto(RTC_I2C_ADDR, bytearray([RTC_SECOND_ADDR]))
|
||||
data = cls._i2c.readfrom(RTC_I2C_ADDR, 7)
|
||||
|
||||
rtc_second = cls.rtc_bcd_to_dec(data[0] & 0x7F) # Ignore bit 7
|
||||
rtc_minute = cls.rtc_bcd_to_dec(data[1] & 0x7F)
|
||||
rtc_hour = cls.rtc_bcd_to_dec(data[2] & 0x3F) # Ignore bits 7 & 6
|
||||
rtc_day = cls.rtc_bcd_to_dec(data[3] & 0x3F)
|
||||
rtc_weekday = cls.rtc_bcd_to_dec(data[4] & 0x07) # Ignore bits 7,6,5,4 & 3
|
||||
rtc_month = cls.rtc_bcd_to_dec(data[5] & 0x1F) # Ignore bits 7,6 & 5
|
||||
rtc_year = cls.rtc_bcd_to_dec(data[6]) + 2000
|
||||
|
||||
return {
|
||||
'second': rtc_second,
|
||||
'minute': rtc_minute,
|
||||
'hour': rtc_hour,
|
||||
'day': rtc_day,
|
||||
'weekday': rtc_weekday,
|
||||
'month': rtc_month,
|
||||
'year': rtc_year
|
||||
}
|
||||
|
||||
|
||||
class InkplateMono(framebuf.FrameBuffer):
|
||||
def __init__(self):
|
||||
|
@ -844,9 +912,13 @@ class Inkplate:
|
|||
def setRotation(self, x):
|
||||
self.rotation = x % 4
|
||||
if self.rotation == 0 or self.rotation == 2:
|
||||
self.GFX.width = D_COLS
|
||||
self.GFX.height = D_ROWS
|
||||
self._width = D_COLS
|
||||
self._height = D_ROWS
|
||||
elif self.rotation == 1 or self.rotation == 3:
|
||||
self.GFX.width = D_ROWS
|
||||
self.GFX.height = D_COLS
|
||||
self._width = D_ROWS
|
||||
self._height = D_COLS
|
||||
|
||||
|
@ -1070,3 +1142,12 @@ class Inkplate:
|
|||
val >>= 1
|
||||
|
||||
self.drawPixel(x + i, y + h - j, val)
|
||||
|
||||
def rtcSetTime(self, rtc_hour, rtc_minute, rtc_second):
|
||||
return _Inkplate.rtc_set_time(rtc_hour, rtc_minute, rtc_second)
|
||||
|
||||
def rtcSetDate(self, rtc_weekday, rtc_day, rtc_month, rtc_yr):
|
||||
return _Inkplate.rtc_set_date(rtc_weekday, rtc_day, rtc_month, rtc_yr)
|
||||
|
||||
def rtcGetData(self):
|
||||
return _Inkplate.rtc_get_rtc_data()
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# Copyright © 2020 by Thorsten von Eicken.
|
||||
# Modified by Soldered to work on new Inkplate models
|
||||
|
||||
# MicroPython driver for Soldered Inkplate 6PLUS
|
||||
# By Soldered Electronics
|
||||
# Based on the original contribution by https://github.com/tve
|
||||
import time
|
||||
import micropython
|
||||
import framebuf
|
||||
|
@ -40,6 +40,7 @@ WAVE_2B = ( # original mpy driver for Ink 6, differs from arduino driver below
|
|||
|
||||
TPS65186_addr = const(0x48) # I2C address
|
||||
TOUCHSCREEN_EN = 12
|
||||
FRONTLIGHT_ADDRESS = 0x2E
|
||||
TS_RTS = 10
|
||||
TS_INT = 36
|
||||
TS_ADDR = 0x15
|
||||
|
@ -66,6 +67,10 @@ EPD_SPH = const(0x00000002) # in W1Tx1
|
|||
# Inkplate provides access to the pins of the Inkplate 6 PLUS as well as to low-level display
|
||||
# functions.
|
||||
|
||||
RTC_I2C_ADDR = 0x51
|
||||
RTC_RAM_by = 0x03
|
||||
RTC_DAY_ADDR = 0x07
|
||||
RTC_SECOND_ADDR = 0x04
|
||||
|
||||
class _Inkplate:
|
||||
@classmethod
|
||||
|
@ -107,6 +112,10 @@ class _Inkplate:
|
|||
cls.TPS_INT = gpioPin(cls._PCAL6416A_1, 6, modeINPUT)
|
||||
cls.TPS_PWR_GOOD = gpioPin(cls._PCAL6416A_1, 7, modeINPUT)
|
||||
|
||||
#Frontlight
|
||||
cls.FRONTLIGHT = gpioPin(cls._PCAL6416A_1, 11, modeOUTPUT)
|
||||
cls.FRONTLIGHT.digitalWrite(0)
|
||||
|
||||
# Misc
|
||||
cls.GPIO0_PUP = gpioPin(cls._PCAL6416A_1, 8, modeOUTPUT)
|
||||
cls.GPIO0_PUP.digitalWrite(0)
|
||||
|
@ -180,6 +189,81 @@ class _Inkplate:
|
|||
cls.VBAT_EN.digitalWrite(0)
|
||||
result = (value / 4095.0) * 1.1 * 3.548133892 * 2
|
||||
return result
|
||||
|
||||
#Frontlight control
|
||||
@classmethod
|
||||
def frontlight(cls, value):
|
||||
cls.FRONTLIGHT.digitalWrite(value)
|
||||
|
||||
@classmethod
|
||||
def setFrontlight(cls, value):
|
||||
value = (63 - (value & 0b00111111))
|
||||
data_to_send = bytearray([0, value])
|
||||
cls._i2c.writeto(FRONTLIGHT_ADDRESS, data_to_send)
|
||||
|
||||
@classmethod
|
||||
def rtc_dec_to_bcd(cls, val):
|
||||
return (val // 10 * 16) + (val % 10)
|
||||
|
||||
@classmethod
|
||||
def rtc_bcd_to_dec(cls, val):
|
||||
return (val // 16 * 10) + (val % 16)
|
||||
|
||||
@classmethod
|
||||
def rtc_set_time(cls, rtc_hour, rtc_minute, rtc_second):
|
||||
data = bytearray([
|
||||
RTC_RAM_by,
|
||||
170, # Write in RAM 170 to know that RTC is set
|
||||
cls.rtc_dec_to_bcd(rtc_second),
|
||||
cls.rtc_dec_to_bcd(rtc_minute),
|
||||
cls.rtc_dec_to_bcd(rtc_hour)
|
||||
])
|
||||
|
||||
cls._i2c.writeto(RTC_I2C_ADDR, data)
|
||||
|
||||
@classmethod
|
||||
def rtc_set_date(cls, rtc_weekday, rtc_day, rtc_month, rtc_yr):
|
||||
rtcYear = rtc_yr - 2000
|
||||
|
||||
data = bytearray([
|
||||
RTC_RAM_by,
|
||||
170, # Write in RAM 170 to know that RTC is set
|
||||
])
|
||||
|
||||
cls._i2c.writeto(RTC_I2C_ADDR, data)
|
||||
|
||||
data = bytearray([
|
||||
RTC_DAY_ADDR,
|
||||
cls.rtc_dec_to_bcd(rtc_day),
|
||||
cls.rtc_dec_to_bcd(rtc_weekday),
|
||||
cls.rtc_dec_to_bcd(rtc_month),
|
||||
cls.rtc_dec_to_bcd(rtcYear),
|
||||
])
|
||||
|
||||
cls._i2c.writeto(RTC_I2C_ADDR, data)
|
||||
|
||||
@classmethod
|
||||
def rtc_get_rtc_data(cls):
|
||||
cls._i2c.writeto(RTC_I2C_ADDR, bytearray([RTC_SECOND_ADDR]))
|
||||
data = cls._i2c.readfrom(RTC_I2C_ADDR, 7)
|
||||
|
||||
rtc_second = cls.rtc_bcd_to_dec(data[0] & 0x7F) # Ignore bit 7
|
||||
rtc_minute = cls.rtc_bcd_to_dec(data[1] & 0x7F)
|
||||
rtc_hour = cls.rtc_bcd_to_dec(data[2] & 0x3F) # Ignore bits 7 & 6
|
||||
rtc_day = cls.rtc_bcd_to_dec(data[3] & 0x3F)
|
||||
rtc_weekday = cls.rtc_bcd_to_dec(data[4] & 0x07) # Ignore bits 7,6,5,4 & 3
|
||||
rtc_month = cls.rtc_bcd_to_dec(data[5] & 0x1F) # Ignore bits 7,6 & 5
|
||||
rtc_year = cls.rtc_bcd_to_dec(data[6]) + 2000
|
||||
|
||||
return {
|
||||
'second': rtc_second,
|
||||
'minute': rtc_minute,
|
||||
'hour': rtc_hour,
|
||||
'day': rtc_day,
|
||||
'weekday': rtc_weekday,
|
||||
'month': rtc_month,
|
||||
'year': rtc_year
|
||||
}
|
||||
|
||||
# Touchscreen
|
||||
@classmethod
|
||||
|
@ -962,6 +1046,8 @@ class Inkplate:
|
|||
self.ipm = InkplateMono()
|
||||
self.ipp = InkplatePartial(self.ipm)
|
||||
|
||||
self.FRONTLIGHT = _Inkplate.FRONTLIGHT
|
||||
|
||||
self.GFX = GFX(
|
||||
D_COLS,
|
||||
D_ROWS,
|
||||
|
@ -1056,9 +1142,13 @@ class Inkplate:
|
|||
_Inkplate.rotation = x % 4
|
||||
|
||||
if self.rotation == 0 or self.rotation == 2:
|
||||
self.GFX.width = D_COLS
|
||||
self.GFX.height = D_ROWS
|
||||
self._width = D_COLS
|
||||
self._height = D_ROWS
|
||||
elif self.rotation == 1 or self.rotation == 3:
|
||||
self.GFX.width = D_ROWS
|
||||
self.GFX.height = D_COLS
|
||||
self._width = D_ROWS
|
||||
self._height = D_COLS
|
||||
|
||||
|
@ -1297,4 +1387,19 @@ class Inkplate:
|
|||
# For more info, see https://github.com/SolderedElectronics/Inkplate-micropython/issues/24
|
||||
def activeTouch(cls):
|
||||
return _Inkplate.activeTouch()
|
||||
|
||||
|
||||
#Frontlight
|
||||
def frontlight(self, value):
|
||||
_Inkplate.frontlight(value)
|
||||
|
||||
def setFrontlight(self, value):
|
||||
_Inkplate.setFrontlight(value)
|
||||
|
||||
def rtcSetTime(self, rtc_hour, rtc_minute, rtc_second):
|
||||
return _Inkplate.rtc_set_time(rtc_hour, rtc_minute, rtc_second)
|
||||
|
||||
def rtcSetDate(self, rtc_weekday, rtc_day, rtc_month, rtc_yr):
|
||||
return _Inkplate.rtc_set_date(rtc_weekday, rtc_day, rtc_month, rtc_yr)
|
||||
|
||||
def rtcGetData(self):
|
||||
return _Inkplate.rtc_get_rtc_data()
|
Loading…
Reference in New Issue