a125f45b34
Example documentation
237 lines
9.4 KiB
Python
237 lines
9.4 KiB
Python
#!/usr/bin/python
|
|
# -*- coding:utf-8 -*-
|
|
import sys
|
|
import os
|
|
picdir = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), 'pic/2in13')
|
|
fontdir = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), 'pic')
|
|
libdir = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), 'lib')
|
|
if os.path.exists(libdir):
|
|
sys.path.append(libdir)
|
|
|
|
from TP_lib import gt1151
|
|
from TP_lib import epd2in13_V3
|
|
import time
|
|
import logging
|
|
from PIL import Image,ImageDraw,ImageFont
|
|
import traceback
|
|
import threading
|
|
|
|
logging.basicConfig(level=logging.DEBUG)
|
|
flag_t = 1
|
|
|
|
def pthread_irq() :
|
|
print("pthread running")
|
|
while flag_t == 1 :
|
|
if(gt.digital_read(gt.INT) == 0) :
|
|
GT_Dev.Touch = 1
|
|
else :
|
|
GT_Dev.Touch = 0
|
|
print("thread:exit")
|
|
|
|
def Show_Photo_Small(image, small):
|
|
for t in range(1, 5):
|
|
if(small*2+t > 6):
|
|
newimage = Image.open(os.path.join(picdir, PhotoPath_S[0]))
|
|
image.paste(newimage, ((t-1)//2*45+2, (t%2)*124+2))
|
|
else:
|
|
newimage = Image.open(os.path.join(picdir, PhotoPath_S[small*2+t]))
|
|
image.paste(newimage, ((t-1)//2*45+2, (t%2)*124+2))
|
|
|
|
def Show_Photo_Large(image, large):
|
|
if(large > 6):
|
|
newimage = Image.open(os.path.join(picdir, PhotoPath_L[0]))
|
|
image.paste(newimage, (2, 2))
|
|
else:
|
|
newimage = Image.open(os.path.join(picdir, PhotoPath_L[large]))
|
|
image.paste(newimage, (2, 2))
|
|
|
|
def Read_BMP(File, x, y):
|
|
newimage = Image.open(os.path.join(picdir, File))
|
|
image.paste(newimage, (x, y))
|
|
|
|
try:
|
|
logging.info("epd2in13_V3 Touch Demo")
|
|
|
|
epd = epd2in13_V3.EPD()
|
|
gt = gt1151.GT1151()
|
|
GT_Dev = gt1151.GT_Development()
|
|
GT_Old = gt1151.GT_Development()
|
|
|
|
logging.info("init and Clear")
|
|
|
|
epd.init(epd.FULL_UPDATE)
|
|
gt.GT_Init()
|
|
epd.Clear(0xFF)
|
|
|
|
t = threading.Thread(target = pthread_irq)
|
|
t.daemon = True
|
|
t.start()
|
|
|
|
# Drawing on the image
|
|
font15 = ImageFont.truetype(os.path.join(fontdir, 'Font.ttc'), 15)
|
|
font24 = ImageFont.truetype(os.path.join(fontdir, 'Font.ttc'), 24)
|
|
|
|
image = Image.open(os.path.join(picdir, 'Menu.bmp'))
|
|
epd.displayPartBaseImage(epd.getbuffer(image))
|
|
DrawImage = ImageDraw.Draw(image)
|
|
epd.init(epd.PART_UPDATE)
|
|
|
|
i = j = k = ReFlag = SelfFlag = Page = Photo_L = Photo_S = 0
|
|
PhotoPath_S = [ "Photo_1_0.bmp",
|
|
"Photo_1_1.bmp", "Photo_1_2.bmp", "Photo_1_3.bmp", "Photo_1_4.bmp",
|
|
"Photo_1_5.bmp", "Photo_1_6.bmp",
|
|
]
|
|
PhotoPath_L = [ "Photo_2_0.bmp",
|
|
"Photo_2_1.bmp", "Photo_2_2.bmp", "Photo_2_3.bmp", "Photo_2_4.bmp",
|
|
"Photo_2_5.bmp", "Photo_2_6.bmp",
|
|
]
|
|
PagePath = ["Menu.bmp", "White_board.bmp", "Photo_1.bmp", "Photo_2.bmp"]
|
|
|
|
while(1):
|
|
if(i > 12 or ReFlag == 1):
|
|
if(Page == 1 and SelfFlag == 0):
|
|
epd.displayPartial(epd.getbuffer(image))
|
|
else:
|
|
epd.displayPartial_Wait(epd.getbuffer(image))
|
|
i = 0
|
|
k = 0
|
|
j += 1
|
|
ReFlag = 0
|
|
print("*** Draw Refresh ***\r\n")
|
|
elif(k>50000 and i>0 and Page == 1):
|
|
epd.displayPartial(epd.getbuffer(image))
|
|
i = 0
|
|
k = 0
|
|
j += 1
|
|
print("*** Overtime Refresh ***\r\n")
|
|
elif(j > 50 or SelfFlag):
|
|
SelfFlag = 0
|
|
j = 0
|
|
epd.init(epd.FULL_UPDATE)
|
|
epd.displayPartBaseImage(epd.getbuffer(image))
|
|
epd.init(epd.PART_UPDATE)
|
|
print("--- Self Refresh ---\r\n")
|
|
else:
|
|
k += 1
|
|
# Read the touch input
|
|
gt.GT_Scan(GT_Dev, GT_Old)
|
|
if(GT_Old.X[0] == GT_Dev.X[0] and GT_Old.Y[0] == GT_Dev.Y[0] and GT_Old.S[0] == GT_Dev.S[0]):
|
|
continue
|
|
|
|
if(GT_Dev.TouchpointFlag):
|
|
i += 1
|
|
GT_Dev.TouchpointFlag = 0
|
|
|
|
if(Page == 0 and ReFlag == 0): #main menu
|
|
if(GT_Dev.X[0] > 29 and GT_Dev.X[0] < 92 and GT_Dev.Y[0] > 56 and GT_Dev.Y[0] < 95):
|
|
print("Photo ...\r\n")
|
|
Page = 2
|
|
Read_BMP(PagePath[Page], 0, 0)
|
|
Show_Photo_Small(image, Photo_S)
|
|
ReFlag = 1
|
|
elif(GT_Dev.X[0] > 29 and GT_Dev.X[0] < 92 and GT_Dev.Y[0] > 153 and GT_Dev.Y[0] < 193):
|
|
print("Draw ...\r\n")
|
|
Page = 1
|
|
Read_BMP(PagePath[Page], 0, 0)
|
|
ReFlag = 1
|
|
|
|
|
|
if(Page == 1 and ReFlag == 0): #white board
|
|
DrawImage.rectangle([(GT_Dev.X[0], GT_Dev.Y[0]), (GT_Dev.X[0] + GT_Dev.S[0]/8 + 1, GT_Dev.Y[0] + GT_Dev.S[0]/8 + 1)], fill=0)
|
|
if(GT_Dev.X[0] > 96 and GT_Dev.X[0] < 118 and GT_Dev.Y[0] > 6 and GT_Dev.Y[0] < 30):
|
|
print("Home ...\r\n")
|
|
Page = 1
|
|
Read_BMP(PagePath[Page], 0, 0)
|
|
ReFlag = 1
|
|
elif(GT_Dev.X[0] > 96 and GT_Dev.X[0] < 118 and GT_Dev.Y[0] > 113 and GT_Dev.Y[0] < 136):
|
|
print("Clear ...\r\n")
|
|
Page = 0
|
|
Read_BMP(PagePath[Page], 0, 0)
|
|
ReFlag = 1
|
|
elif(GT_Dev.X[0] > 96 and GT_Dev.X[0] < 118 and GT_Dev.Y[0] > 220 and GT_Dev.Y[0] < 242):
|
|
print("Refresh ...\r\n")
|
|
SelfFlag = 1
|
|
ReFlag = 1
|
|
|
|
|
|
if(Page == 2 and ReFlag == 0): #photo menu
|
|
if(GT_Dev.X[0] > 97 and GT_Dev.X[0] < 119 and GT_Dev.Y[0] > 113 and GT_Dev.Y[0] < 136):
|
|
print("Home ...\r\n")
|
|
Page = 0
|
|
Read_BMP(PagePath[Page], 0, 0)
|
|
ReFlag = 1
|
|
elif(GT_Dev.X[0] > 97 and GT_Dev.X[0] < 119 and GT_Dev.Y[0] > 57 and GT_Dev.Y[0] < 78):
|
|
print("Next page ...\r\n")
|
|
Photo_S += 1
|
|
if(Photo_S > 2): # 6 photos is a maximum of three pages
|
|
Photo_S=0
|
|
ReFlag = 2
|
|
elif(GT_Dev.X[0] > 97 and GT_Dev.X[0] < 119 and GT_Dev.Y[0] > 169 and GT_Dev.Y[0] < 190):
|
|
print("Last page ...\r\n")
|
|
if(Photo_S == 0):
|
|
print("Top page ...\r\n")
|
|
else:
|
|
Photo_S -= 1
|
|
ReFlag = 2
|
|
elif(GT_Dev.X[0] > 97 and GT_Dev.X[0] < 119 and GT_Dev.Y[0] > 220 and GT_Dev.Y[0] < 242):
|
|
print("Refresh ...\r\n")
|
|
SelfFlag = 1
|
|
ReFlag = 1
|
|
elif(GT_Dev.X[0] > 2 and GT_Dev.X[0] < 90 and GT_Dev.Y[0] > 2 and GT_Dev.Y[0] < 248 and ReFlag == 0):
|
|
print("Select photo ...\r\n")
|
|
Page = 3
|
|
Read_BMP(PagePath[Page], 0, 0)
|
|
Photo_L = int(GT_Dev.X[0]/46*2 + 2-GT_Dev.Y[0]/124 + Photo_S*2)
|
|
Show_Photo_Large(image, Photo_L)
|
|
ReFlag = 1
|
|
if(ReFlag == 2): # Refresh small photo
|
|
ReFlag = 1
|
|
Read_BMP(PagePath[Page], 0, 0)
|
|
Show_Photo_Small(image, Photo_S) # show small photo
|
|
|
|
|
|
if(Page == 3 and ReFlag == 0): #view the photo
|
|
if(GT_Dev.X[0] > 96 and GT_Dev.X[0] < 117 and GT_Dev.Y[0] > 4 and GT_Dev.Y[0] < 25):
|
|
print("Photo menu ...\r\n")
|
|
Page = 2
|
|
Read_BMP(PagePath[Page], 0, 0)
|
|
Show_Photo_Small(image, Photo_S)
|
|
ReFlag = 1
|
|
elif(GT_Dev.X[0] > 96 and GT_Dev.X[0] < 117 and GT_Dev.Y[0] > 57 and GT_Dev.Y[0] < 78):
|
|
print("Next photo ...\r\n")
|
|
Photo_L += 1
|
|
if(Photo_L > 6):
|
|
Photo_L = 1
|
|
ReFlag = 2
|
|
elif(GT_Dev.X[0] > 96 and GT_Dev.X[0] < 117 and GT_Dev.Y[0] > 113 and GT_Dev.Y[0] < 136):
|
|
print("Home ...\r\n")
|
|
Page = 0
|
|
Read_BMP(PagePath[Page], 0, 0)
|
|
ReFlag = 1
|
|
elif(GT_Dev.X[0] > 96 and GT_Dev.X[0] < 117 and GT_Dev.Y[0] > 169 and GT_Dev.Y[0] < 190):
|
|
print("Last page ...\r\n")
|
|
if(Photo_L == 1):
|
|
print("Top photo ...\r\n")
|
|
else:
|
|
Photo_L -= 1
|
|
ReFlag = 2
|
|
elif(GT_Dev.X[0] > 96 and GT_Dev.X[0] < 117 and GT_Dev.Y[0] > 220 and GT_Dev.Y[0] < 242):
|
|
print("Refresh photo ...\r\n")
|
|
SelfFlag = 1
|
|
ReFlag = 1
|
|
if(ReFlag == 2): # Refresh large photo
|
|
ReFlag = 1
|
|
Show_Photo_Large(image, Photo_L)
|
|
|
|
except IOError as e:
|
|
logging.info(e)
|
|
|
|
except KeyboardInterrupt:
|
|
logging.info("ctrl + c:")
|
|
flag_t = 0
|
|
epd.sleep()
|
|
time.sleep(2)
|
|
t.join()
|
|
epd.Dev_exit()
|
|
exit()
|