refactoring
This commit is contained in:
parent
395a8a909a
commit
d3969444af
sdcard/rootfs/root/pwnagotchi
@ -93,7 +93,7 @@ ui:
|
||||
enabled: true
|
||||
rotation: 180
|
||||
# Possible options inkyphat/inky or waveshare/ws
|
||||
type: 'ws'
|
||||
type: 'waveshare'
|
||||
# Possible options red/yellow/black (black used for monocromatic displays)
|
||||
color: 'black'
|
||||
video:
|
||||
|
@ -79,6 +79,7 @@ class Display(View):
|
||||
self._video_address = config['ui']['display']['video']['address']
|
||||
self._display_type = config['ui']['display']['type']
|
||||
self._display_color = config['ui']['display']['color']
|
||||
self._render_cb = None
|
||||
self._display = None
|
||||
self._httpd = None
|
||||
self.canvas = None
|
||||
@ -100,18 +101,26 @@ class Display(View):
|
||||
else:
|
||||
core.log("could not get ip of usb0, video server not starting")
|
||||
|
||||
def _is_inky(self):
|
||||
return self._display_type in ('inkyphat', 'inky')
|
||||
|
||||
def _is_waveshare(self):
|
||||
return self._display_type in ('waveshare', 'ws')
|
||||
|
||||
def _init_display(self):
|
||||
if self._display_type in ('inkyphat', 'inky'):
|
||||
if self._is_inky():
|
||||
from inky import InkyPHAT
|
||||
self._display = InkyPHAT(self._display_color)
|
||||
self._display.set_border(InkyPHAT.BLACK)
|
||||
elif self._display_type in ('waveshare', 'ws'):
|
||||
self._render_cb = self._inky_render
|
||||
elif self._is_waveshare():
|
||||
from pwnagotchi.ui.waveshare import EPD
|
||||
# core.log("display module started")
|
||||
self._display = EPD()
|
||||
self._display.init(self._display.FULL_UPDATE)
|
||||
self._display.Clear(WHITE)
|
||||
self._display.init(self._display.PART_UPDATE)
|
||||
self._render_cb = self._waveshare_render
|
||||
else:
|
||||
core.log("unknown display type %s" % self._display_type)
|
||||
|
||||
@ -125,40 +134,44 @@ class Display(View):
|
||||
img = self.canvas if self._rotation == 0 else self.canvas.rotate(-self._rotation)
|
||||
return img
|
||||
|
||||
def _inky_render(self):
|
||||
if self._display_color != 'mono':
|
||||
display_colors = 3
|
||||
else:
|
||||
display_colors = 2
|
||||
|
||||
imgbuf = self.canvas.convert('RGB').convert('P', palette=1, colors=display_colors)
|
||||
|
||||
if self._display_color == 'red':
|
||||
imgbuf.putpalette([
|
||||
255, 255, 255, # index 0 is white
|
||||
0, 0, 0, # index 1 is black
|
||||
255, 0, 0 # index 2 is red
|
||||
])
|
||||
elif self._display_color == 'yellow':
|
||||
imgbuf.putpalette([
|
||||
255, 255, 255, # index 0 is white
|
||||
0, 0, 0, # index 1 is black
|
||||
255, 255, 0 # index 2 is yellow
|
||||
])
|
||||
else:
|
||||
imgbuf.putpalette([
|
||||
255, 255, 255, # index 0 is white
|
||||
0, 0, 0 # index 1 is black
|
||||
])
|
||||
|
||||
self._display.set_image(imgbuf)
|
||||
self._display.show()
|
||||
|
||||
def _waveshare_render(self):
|
||||
buf = self._display.getbuffer(self.canvas)
|
||||
self._display.displayPartial(buf)
|
||||
|
||||
def _on_view_rendered(self, img):
|
||||
# core.log("display::_on_view_rendered")
|
||||
VideoHandler.render(img)
|
||||
|
||||
if self._enabled:
|
||||
self.canvas = img if self._rotation == 0 else img.rotate(self._rotation)
|
||||
if self._display_type == 'inkyphat':
|
||||
if self._display_color != 'mono':
|
||||
display_colors = 3
|
||||
else:
|
||||
display_colors = 2
|
||||
|
||||
imgbuf = self.canvas.convert('RGB').convert('P', palette=1, colors=display_colors)
|
||||
|
||||
if self._display_color == 'red':
|
||||
imgbuf.putpalette([
|
||||
255, 255, 255, # index 0 is white
|
||||
0, 0, 0, # index 1 is black
|
||||
255, 0, 0 # index 2 is red
|
||||
])
|
||||
elif self._display_color == 'yellow':
|
||||
imgbuf.putpalette([
|
||||
255, 255, 255, # index 0 is white
|
||||
0, 0, 0, # index 1 is black
|
||||
255, 255, 0 #index 2 is yellow
|
||||
])
|
||||
else:
|
||||
imgbuf.putpalette([
|
||||
255, 255, 255, # index 0 is white
|
||||
0, 0, 0 # index 1 is black
|
||||
])
|
||||
|
||||
self._display.set_image(imgbuf)
|
||||
self._display.show()
|
||||
else:
|
||||
buf = self._display.getbuffer(self.canvas)
|
||||
self._display.displayPartial(buf)
|
||||
if self._render_cb is not None:
|
||||
self._render_cb()
|
||||
|
@ -15,6 +15,34 @@ from pwnagotchi.ui.state import State
|
||||
WHITE = 0xff
|
||||
BLACK = 0x00
|
||||
|
||||
|
||||
def setup_display_specifics(config):
|
||||
width = 0
|
||||
height = 0
|
||||
face_pos = (0, 0)
|
||||
name_pos = (0, 0)
|
||||
status_pos = (0, 0)
|
||||
|
||||
if config['ui']['display']['type'] in ('inky', 'inkyphat'):
|
||||
fonts.setup(10, 8, 10, 25)
|
||||
|
||||
width = 212
|
||||
height = 104
|
||||
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)
|
||||
|
||||
width = 250
|
||||
height = 122
|
||||
face_pos = (0, 40)
|
||||
name_pos = (125, 20)
|
||||
status_pos = (125, 35)
|
||||
|
||||
return width, height, face_pos, name_pos, status_pos
|
||||
|
||||
|
||||
class View(object):
|
||||
def __init__(self, config, state={}):
|
||||
self._render_cbs = []
|
||||
@ -22,24 +50,8 @@ class View(object):
|
||||
self._canvas = None
|
||||
self._lock = Lock()
|
||||
|
||||
if config['ui']['display']['type'] in ('inky', 'inkyphat'):
|
||||
self._width = 212
|
||||
self._height = 104
|
||||
|
||||
fonts.setup(10, 8, 10, 25)
|
||||
|
||||
face_pos = (0, int(self._height / 4))
|
||||
name_pos = (int(self._width / 2) - 15, int(self._height * .15))
|
||||
status_pos = (int(self._width /2) - 15, int(self._height * .30))
|
||||
elif config['ui']['display']['type'] in ('ws', 'waveshare'):
|
||||
self._width = 250
|
||||
self._height = 122
|
||||
|
||||
fonts.setup(10, 9, 10, 35)
|
||||
|
||||
face_pos = (0, 40)
|
||||
name_pos = (125, 20)
|
||||
status_pos = (125, 35)
|
||||
self._width, self._height, \
|
||||
face_pos, name_pos, status_pos = setup_display_specifics(config)
|
||||
|
||||
self._state = State(state={
|
||||
'channel': LabeledValue(color=BLACK, label='CH', value='00', position=(0, 0), label_font=fonts.Bold,
|
||||
@ -47,15 +59,18 @@ class View(object):
|
||||
'aps': LabeledValue(color=BLACK, label='APS', value='0 (00)', position=(30, 0), label_font=fonts.Bold,
|
||||
text_font=fonts.Medium),
|
||||
|
||||
#'epoch': LabeledValue(color=BLACK, label='E', value='0000', position=(145, 0), label_font=fonts.Bold,
|
||||
# 'epoch': LabeledValue(color=BLACK, label='E', value='0000', position=(145, 0), label_font=fonts.Bold,
|
||||
# text_font=fonts.Medium),
|
||||
|
||||
'uptime': LabeledValue(color=BLACK, label='UP', value='00:00:00', position=(self._width - 65, 0), label_font=fonts.Bold,
|
||||
'uptime': LabeledValue(color=BLACK, label='UP', value='00:00:00', position=(self._width - 65, 0),
|
||||
label_font=fonts.Bold,
|
||||
text_font=fonts.Medium),
|
||||
|
||||
# 'square': Rect([1, 11, 124, 111]),
|
||||
'line1': Line([0, int(self._height * .12), self._width, int(self._height * .12)], color=BLACK),
|
||||
'line2': Line([0, self._height - int(self._height * .12), self._width, self._height - int(self._height * .12)], color=BLACK),
|
||||
'line2': Line(
|
||||
[0, self._height - int(self._height * .12), self._width, self._height - int(self._height * .12)],
|
||||
color=BLACK),
|
||||
|
||||
# 'histogram': Histogram([4, 94], color = BLACK),
|
||||
|
||||
@ -68,9 +83,11 @@ class View(object):
|
||||
# 'face2': Bitmap( '/root/pwnagotchi/data/images/face_happy.bmp', (0, 20)),
|
||||
'status': Text(value=voice.default(), position=status_pos, color=BLACK, font=fonts.Medium),
|
||||
|
||||
'shakes': LabeledValue(label='PWND ', value='0 (00)', color=BLACK, position=(0, self._height - int(self._height * .12) + 1), label_font=fonts.Bold,
|
||||
'shakes': LabeledValue(label='PWND ', value='0 (00)', color=BLACK,
|
||||
position=(0, self._height - int(self._height * .12) + 1), label_font=fonts.Bold,
|
||||
text_font=fonts.Medium),
|
||||
'mode': Text(value='AUTO', position=(self._width - 25, self._height - int(self._height * .12) + 1), font=fonts.Bold, color=BLACK),
|
||||
'mode': Text(value='AUTO', position=(self._width - 25, self._height - int(self._height * .12) + 1),
|
||||
font=fonts.Bold, color=BLACK),
|
||||
})
|
||||
|
||||
for key, value in state.items():
|
||||
|
Loading…
x
Reference in New Issue
Block a user