DM: add framebuf methods

This commit is contained in:
dean 2018-07-12 13:50:04 -04:00
parent 284c65bfbe
commit 2247330c6d
3 changed files with 65 additions and 13 deletions

View file

@ -74,4 +74,51 @@ class Adafruit_EPD(object):
self._dc.value = True
self.spi_device.write(d)
self._cs.value = True
self.spi_device.unlock()
self.spi_device.unlock()
#framebuf methods
def fill(self, color):
self.format.fill_rect(self, 0, 0, self.width, self.height, color)
def fill_rect(self, x, y, width, height, color):
if width < 1 or height < 1 or (x+width) <= 0 or (y+height) <= 0 or y >= self.height or x >= self.width:
return
xend = min(self.width, x+width)
yend = min(self.height, y+height)
x = max(x, 0)
y = max(y, 0)
for _x in range(xend - x):
for _y in range(yend - y):
self.draw_pixel(x + _x, y + _y, color)
def pixel(self, x, y, color=None):
if x < 0 or x >= self.width or y < 0 or y >= self.height:
return
if color is None:
return self.get_pixel(self, x, y)
else:
self.draw_pixel(self, x, y, color)
def hline(self, x, y, width, color):
self.fill_rect(x, y, width, 1, color)
def vline(self, x, y, height, color):
self.fill_rect(x, y, 1, height, color)
def rect(self, x, y, width, height, color):
self.fill_rect(x, y, width, 1, color)
self.fill_rect(x, y+height, width, 1, color)
self.fill_rect(self, x, y, 1, height, color)
self.fill_rect(self, x+width, y, 1, height, color)
def line(self):
raise NotImplementedError()
def blit(self):
raise NotImplementedError()
def scroll(self):
raise NotImplementedError()
def text(self):
raise NotImplementedError()

View file

@ -149,6 +149,19 @@ class Adafruit_IL0373(Adafruit_EPD):
self.sram.write8(addr, c)
def get_pixel(self, x, y, color):
if (x < 0) or (x >= self.width) or (y < 0) or (y >= self.height):
return
if x == 0:
x = 1
addr = int(((self.width - x) * self.height + y)/8)
if color == Adafruit_EPD.RED:
addr = addr + self.bw_bufsize
c = self.sram.read8(addr)
return c
def clear_buffer(self):
self.sram.erase(0x00, self.bw_bufsize, 0xFF)
self.sram.erase(self.bw_bufsize, self.red_bufsize, 0xFF)

View file

@ -19,17 +19,9 @@ display = Adafruit_IL0373(152, 152, rst, dc, busy, srcs, ecs, spi)
#clear the buffer
display.clear_buffer()
#draw some lines!!
for i in range(152):
display.draw_pixel(i, i, Adafruit_EPD.RED)
display.draw_pixel(152-i, i, Adafruit_EPD.RED)
display.draw_pixel(10, i, Adafruit_EPD.BLACK)
display.draw_pixel(20, i, Adafruit_EPD.BLACK)
display.draw_pixel(30, i, Adafruit_EPD.BLACK)
display.draw_pixel(40, i, Adafruit_EPD.BLACK)
display.draw_pixel(50, i, Adafruit_EPD.BLACK)
display.draw_pixel(60, i, Adafruit_EPD.BLACK)
display.draw_pixel(70, i, Adafruit_EPD.BLACK)
display.draw_pixel(80, i, Adafruit_EPD.BLACK)
#draw some arbitrary lines and shapes!!
display.fill_rect(30, 20, 50, 60, Adafruit_EPD.RED)
display.hline(120, 30, 60, Adafruit_EPD.BLACK)
display.vline(120, 30, 60, Adafruit_EPD.BLACK)
display.display()