Adding support for PaPiRus display

This commit is contained in:
James Hooker 2019-09-29 06:23:38 +01:00
parent 000e11869f
commit 395207de7b
4 changed files with 23 additions and 1 deletions
README.md
sdcard/rootfs/root/pwnagotchi
config.yml
scripts/pwnagotchi/ui

@ -50,6 +50,7 @@ The supported models are:
- [Waveshare eInk Display (V2)](https://www.waveshare.com/2.13inch-e-paper-hat.htm)
- [Pimoroni Inky pHAT](https://shop.pimoroni.com/products/inky-phat)
- [PaPiRus eInk Screen](https://www.sparkfun.com/products/14826)
### Software

@ -92,7 +92,7 @@ ui:
display:
enabled: true
rotation: 180
# Possible options inkyphat/inky or waveshare/ws
# Possible options inkyphat/inky, papirus/papi or waveshare/ws
type: 'waveshare'
# Possible options red/yellow/black (black used for monocromatic displays)
color: 'black'

@ -104,6 +104,9 @@ class Display(View):
def _is_inky(self):
return self._display_type in ('inkyphat', 'inky')
def _is_papirus(self):
return self._display_type in ('papirus', 'papi')
def _is_waveshare(self):
return self._display_type in ('waveshare', 'ws')
@ -113,6 +116,12 @@ class Display(View):
self._display = InkyPHAT(self._display_color)
self._display.set_border(InkyPHAT.BLACK)
self._render_cb = self._inky_render
elif self._is_papirus():
from papirus import Papirus
exec(open('/etc/default/epd-fuse').read())
self._display = Papirus()
self._display.clear()
self._render_cb = self._papirus_render
elif self._is_waveshare():
from pwnagotchi.ui.waveshare import EPD
# core.log("display module started")
@ -163,6 +172,10 @@ class Display(View):
self._display.set_image(imgbuf)
self._display.show()
def _papirus_render(self):
self._display.display(self.canvas)
self._display.partial_update()
def _waveshare_render(self):
buf = self._display.getbuffer(self.canvas)
self._display.displayPartial(buf)

@ -31,6 +31,14 @@ def setup_display_specifics(config):
face_pos = (0, int(height / 4))
name_pos = (int(width / 2) - 15, int(height * .15))
status_pos = (int(width / 2) - 15, int(height * .30))
elif config['ui']['display']['type'] in ('papirus', 'papi'):
fonts.setup(10, 8, 10, 23)
width = 200
height = 96
face_pos = (0, int(height / 4))
name_pos = (int(width / 2) - 15, int(height * .15))
status_pos = (int(width / 2) - 15, int(height * .30))
elif config['ui']['display']['type'] in ('ws', 'waveshare'):
fonts.setup(10, 9, 10, 35)