Consolidate repeated functions

This commit is contained in:
missionfloyd 2021-02-24 22:31:05 -07:00
commit c586f8d0f7
38 changed files with 2001 additions and 2881 deletions

View file

@ -39,10 +39,7 @@ EPD_HEIGHT = 296
class EPD:
def __init__(self):
self.reset_pin = epdconfig.RST_PIN
self.dc_pin = epdconfig.DC_PIN
self.busy_pin = epdconfig.BUSY_PIN
self.cs_pin = epdconfig.CS_PIN
self.width = EPD_WIDTH
self.height = EPD_HEIGHT
@ -146,37 +143,16 @@ class EPD:
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
]
# Hardware reset
def reset(self):
epdconfig.digital_write(self.reset_pin, 1)
epdconfig.delay_ms(200)
epdconfig.digital_write(self.reset_pin, 0)
epdconfig.delay_ms(5)
epdconfig.digital_write(self.reset_pin, 1)
epdconfig.delay_ms(200)
def send_command(self, command):
epdconfig.digital_write(self.dc_pin, 0)
epdconfig.digital_write(self.cs_pin, 0)
epdconfig.spi_writebyte([command])
epdconfig.digital_write(self.cs_pin, 1)
def send_data(self, data):
epdconfig.digital_write(self.dc_pin, 1)
epdconfig.digital_write(self.cs_pin, 0)
epdconfig.spi_writebyte([data])
epdconfig.digital_write(self.cs_pin, 1)
]
def ReadBusy(self):
logging.debug("e-Paper busy")
while(epdconfig.digital_read(self.busy_pin) == 0): # 0: idle, 1: busy
self.send_command(0x71)
epdconfig.send_command(0x71)
epdconfig.delay_ms(100)
logging.debug("e-Paper busy release")
def TurnOnDisplay(self):
self.send_command(0x12)
epdconfig.send_command(0x12)
epdconfig.delay_ms(10)
self.ReadBusy()
@ -184,82 +160,82 @@ class EPD:
if (epdconfig.module_init() != 0):
return -1
# EPD hardware init start
self.reset()
epdconfig.reset(200, 5, 200)
self.send_command(0x01) # POWER SETTING
self.send_data(0x03)
self.send_data(0x00)
self.send_data(0x2b)
self.send_data(0x2b)
self.send_data(0x03)
epdconfig.send_command(0x01) # POWER SETTING
epdconfig.send_data(0x03)
epdconfig.send_data(0x00)
epdconfig.send_data(0x2b)
epdconfig.send_data(0x2b)
epdconfig.send_data(0x03)
self.send_command(0x06) # boost soft start
self.send_data(0x17) # A
self.send_data(0x17) # B
self.send_data(0x17) # C
epdconfig.send_command(0x06) # boost soft start
epdconfig.send_data(0x17) # A
epdconfig.send_data(0x17) # B
epdconfig.send_data(0x17) # C
self.send_command(0x04)
epdconfig.send_command(0x04)
self.ReadBusy()
self.send_command(0x00) # panel setting
self.send_data(0xbf) # LUT from OTP,128x296
self.send_data(0x0d) # VCOM to 0V fast
epdconfig.send_command(0x00) # panel setting
epdconfig.send_data(0xbf) # LUT from OTP,128x296
epdconfig.send_data(0x0d) # VCOM to 0V fast
self.send_command(0x30) #PLL setting
self.send_data(0x3a) # 3a 100HZ 29 150Hz 39 200HZ 31 171HZ
epdconfig.send_command(0x30) #PLL setting
epdconfig.send_data(0x3a) # 3a 100HZ 29 150Hz 39 200HZ 31 171HZ
self.send_command(0x61) # resolution setting
self.send_data(self.width)
self.send_data((self.height >> 8) & 0xff)
self.send_data(self.height& 0xff)
epdconfig.send_command(0x61) # resolution setting
epdconfig.send_data(self.width)
epdconfig.send_data((self.height >> 8) & 0xff)
epdconfig.send_data(self.height& 0xff)
self.send_command(0x82) # vcom_DC setting
self.send_data(0x28)
epdconfig.send_command(0x82) # vcom_DC setting
epdconfig.send_data(0x28)
return 0
def SetFullReg(self):
self.send_command(0x82)
self.send_data(0x00)
self.send_command(0X50)
self.send_data(0x97)
epdconfig.send_command(0x82)
epdconfig.send_data(0x00)
epdconfig.send_command(0X50)
epdconfig.send_data(0x97)
self.send_command(0x20) # vcom
epdconfig.send_command(0x20) # vcom
for count in range(0, 44):
self.send_data(self.lut_vcomDC[count])
self.send_command(0x21) # ww --
epdconfig.send_data(self.lut_vcomDC[count])
epdconfig.send_command(0x21) # ww --
for count in range(0, 42):
self.send_data(self.lut_ww[count])
self.send_command(0x22) # bw r
epdconfig.send_data(self.lut_ww[count])
epdconfig.send_command(0x22) # bw r
for count in range(0, 42):
self.send_data(self.lut_bw[count])
self.send_command(0x23) # wb w
epdconfig.send_data(self.lut_bw[count])
epdconfig.send_command(0x23) # wb w
for count in range(0, 42):
self.send_data(self.lut_wb[count])
self.send_command(0x24) # bb b
epdconfig.send_data(self.lut_wb[count])
epdconfig.send_command(0x24) # bb b
for count in range(0, 42):
self.send_data(self.lut_bb[count])
epdconfig.send_data(self.lut_bb[count])
def SetPartReg(self):
self.send_command(0x82)
self.send_data(0x03)
self.send_command(0X50)
self.send_data(0x47)
epdconfig.send_command(0x82)
epdconfig.send_data(0x03)
epdconfig.send_command(0X50)
epdconfig.send_data(0x47)
self.send_command(0x20) # vcom
epdconfig.send_command(0x20) # vcom
for count in range(0, 44):
self.send_data(self.lut_vcom1[count])
self.send_command(0x21) # ww --
epdconfig.send_data(self.lut_vcom1[count])
epdconfig.send_command(0x21) # ww --
for count in range(0, 42):
self.send_data(self.lut_ww1[count])
self.send_command(0x22) # bw r
epdconfig.send_data(self.lut_ww1[count])
epdconfig.send_command(0x22) # bw r
for count in range(0, 42):
self.send_data(self.lut_bw1[count])
self.send_command(0x23) # wb w
epdconfig.send_data(self.lut_bw1[count])
epdconfig.send_command(0x23) # wb w
for count in range(0, 42):
self.send_data(self.lut_wb1[count])
self.send_command(0x24) # bb b
epdconfig.send_data(self.lut_wb1[count])
epdconfig.send_command(0x24) # bb b
for count in range(0, 42):
self.send_data(self.lut_bb1[count])
epdconfig.send_data(self.lut_bb1[count])
def getbuffer(self, image):
# logging.debug("bufsiz = ",int(self.width/8) * self.height)
@ -286,14 +262,14 @@ class EPD:
return buf
def display(self, image):
self.send_command(0x10)
epdconfig.send_command(0x10)
for i in range(0, int(self.width * self.height / 8)):
self.send_data(0x00)
epdconfig.send_data(0x00)
epdconfig.delay_ms(10)
self.send_command(0x13)
epdconfig.send_command(0x13)
for i in range(0, int(self.width * self.height / 8)):
self.send_data(image[i])
epdconfig.send_data(image[i])
epdconfig.delay_ms(10)
self.SetFullReg()
@ -301,49 +277,49 @@ class EPD:
def DisplayPartial(self, image):
self.SetPartReg()
self.send_command(0x91)
self.send_command(0x90)
self.send_data(0)
self.send_data(self.width - 1)
epdconfig.send_command(0x91)
epdconfig.send_command(0x90)
epdconfig.send_data(0)
epdconfig.send_data(self.width - 1)
self.send_data(0)
self.send_data(0)
self.send_data(int(self.height / 256))
self.send_data(self.height % 256 - 1)
self.send_data(0x28)
epdconfig.send_data(0)
epdconfig.send_data(0)
epdconfig.send_data(int(self.height / 256))
epdconfig.send_data(self.height % 256 - 1)
epdconfig.send_data(0x28)
self.send_command(0x10)
epdconfig.send_command(0x10)
for i in range(0, int(self.width * self.height / 8)):
self.send_data(image[i])
epdconfig.send_data(image[i])
epdconfig.delay_ms(10)
self.send_command(0x13)
epdconfig.send_command(0x13)
for i in range(0, int(self.width * self.height / 8)):
self.send_data(~image[i])
epdconfig.send_data(~image[i])
epdconfig.delay_ms(10)
self.TurnOnDisplay()
def Clear(self, color):
self.send_command(0x10)
epdconfig.send_command(0x10)
for i in range(0, int(self.width * self.height / 8)):
self.send_data(0x00)
epdconfig.send_data(0x00)
epdconfig.delay_ms(10)
self.send_command(0x13)
epdconfig.send_command(0x13)
for i in range(0, int(self.width * self.height / 8)):
self.send_data(0xFF)
epdconfig.send_data(0xFF)
epdconfig.delay_ms(10)
self.SetFullReg()
self.TurnOnDisplay()
def sleep(self):
self.send_command(0X50)
self.send_data(0xf7)
self.send_command(0X02) #power off
self.send_command(0X07) #deep sleep
self.send_data(0xA5)
epdconfig.send_command(0X50)
epdconfig.send_data(0xf7)
epdconfig.send_command(0X02) #power off
epdconfig.send_command(0X07) #deep sleep
epdconfig.send_data(0xA5)
epdconfig.delay_ms(2000)
epdconfig.module_exit()