Small typo's

Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
This commit is contained in:
jayofelony
2024-03-24 12:58:07 +01:00
parent 9e3324221d
commit 2f5ddb492a
5 changed files with 140 additions and 121 deletions

View File

@ -253,7 +253,6 @@ class Logtail(plugins.Plugin):
""" """
logging.info("Logtail plugin loaded.") logging.info("Logtail plugin loaded.")
def on_webhook(self, path, request): def on_webhook(self, path, request):
if not self.ready: if not self.ready:
return "Plugin not ready" return "Plugin not ready"

View File

@ -93,6 +93,7 @@ ILI9341_GMCTRN1 = 0xE1
ILI9341_PWCTR6 = 0xFC ILI9341_PWCTR6 = 0xFC
class ILI9341(object): class ILI9341(object):
"""Representation of an ILI9341 TFT LCD.""" """Representation of an ILI9341 TFT LCD."""
@ -349,7 +350,6 @@ class ILI9341(object):
# Rotate the image # Rotate the image
pb = np.rot90(image, rotation // 90).astype('uint16') pb = np.rot90(image, rotation // 90).astype('uint16')
# Mask and shift the 888 RGB into 565 RGB # Mask and shift the 888 RGB into 565 RGB
red = (pb[..., [0]] & 0xf8) << 8 red = (pb[..., [0]] & 0xf8) << 8
green = (pb[..., [1]] & 0xfc) << 3 green = (pb[..., [1]] & 0xfc) << 3

View File

@ -1,144 +1,164 @@
FBIOGET_VSCREENINFO=0x4600 FBIOGET_VSCREENINFO = 0x4600
FBIOPUT_VSCREENINFO=0x4601 FBIOPUT_VSCREENINFO = 0x4601
FBIOGET_FSCREENINFO=0x4602 FBIOGET_FSCREENINFO = 0x4602
FBIOGETCMAP=0x4604 FBIOGETCMAP = 0x4604
FBIOPUTCMAP=0x4605 FBIOPUTCMAP = 0x4605
FBIOPAN_DISPLAY=0x4606 FBIOPAN_DISPLAY = 0x4606
FBIOGET_CON2FBMAP=0x460F FBIOGET_CON2FBMAP = 0x460F
FBIOPUT_CON2FBMAP=0x4610 FBIOPUT_CON2FBMAP = 0x4610
FBIOBLANK=0x4611 FBIOBLANK = 0x4611
FBIO_ALLOC=0x4613 FBIO_ALLOC = 0x4613
FBIO_FREE=0x4614 FBIO_FREE = 0x4614
FBIOGET_GLYPH=0x4615 FBIOGET_GLYPH = 0x4615
FBIOGET_HWCINFO=0x4616 FBIOGET_HWCINFO = 0x4616
FBIOPUT_MODEINFO=0x4617 FBIOPUT_MODEINFO = 0x4617
FBIOGET_DISPINFO=0x4618 FBIOGET_DISPINFO = 0x4618
from mmap import mmap from mmap import mmap
from fcntl import ioctl from fcntl import ioctl
import struct import struct
mm = None mm = None
bpp, w, h = 0, 0, 0 # framebuffer bpp and size bpp, w, h = 0, 0, 0 # framebuffer bpp and size
bytepp = 0 bytepp = 0
vx, vy, vw, vh = 0, 0, 0, 0 #virtual window offset and size vx, vy, vw, vh = 0, 0, 0, 0 # virtual window offset and size
vi, fi = None, None vi, fi = None, None
_fb_cmap = 'IIPPPP' # start, len, r, g, b, a _fb_cmap = 'IIPPPP' # start, len, r, g, b, a
RGB = False RGB = False
_verbose = False _verbose = False
msize_kb = 0 msize_kb = 0
def report_fb(i=0, layer=0): def report_fb(i=0, layer=0):
with open('/dev/fb'+str(i), 'r+b')as f: with open('/dev/fb' + str(i), 'r+b') as f:
vi = ioctl(f, FBIOGET_VSCREENINFO, bytes(160)) vi = ioctl(f, FBIOGET_VSCREENINFO, bytes(160))
vi = list(struct.unpack('I'*40, vi)) vi = list(struct.unpack('I' * 40, vi))
ffm = 'c'*16+'L'+'I'*4+'H'*3+'ILIIHHH' ffm = 'c' * 16 + 'L' + 'I' * 4 + 'H' * 3 + 'ILIIHHH'
fic = struct.calcsize(ffm) fic = struct.calcsize(ffm)
fi = struct.unpack(ffm, ioctl(f, FBIOGET_FSCREENINFO, bytes(fic))) fi = struct.unpack(ffm, ioctl(f, FBIOGET_FSCREENINFO, bytes(fic)))
def ready_fb(_bpp=None, i=0, layer=0, _win=None): def ready_fb(_bpp=None, i=0, layer=0, _win=None):
global mm, bpp, w, h, vi, fi, RGB, msize_kb, vx, vy, vw, vh, bytepp global mm, bpp, w, h, vi, fi, RGB, msize_kb, vx, vy, vw, vh, bytepp
if mm and bpp == _bpp: return mm, w, h, bpp if mm and bpp == _bpp:
with open('/dev/fb'+str(i), 'r+b')as f: return mm, w, h, bpp
vi = ioctl(f, FBIOGET_VSCREENINFO, bytes(160)) with open('/dev/fb' + str(i), 'r+b') as f:
vi = list(struct.unpack('I'*40, vi)) vi = ioctl(f, FBIOGET_VSCREENINFO, bytes(160))
bpp = vi[6] vi = list(struct.unpack('I' * 40, vi))
bytepp = bpp//8
if _bpp:
vi[6] = _bpp # 24 bit = BGR 888 mode
try:
vi = ioctl(f, FBIOPUT_VSCREENINFO, struct.pack('I'*40, *vi)) # fb_var_screeninfo
vi = struct.unpack('I'*40,vi)
bpp = vi[6] bpp = vi[6]
bytepp = bpp//8 bytepp = bpp // 8
except: if _bpp:
pass vi[6] = _bpp # 24 bit = BGR 888 mode
try:
if vi[8] == 0 : RGB = True vi = ioctl(f, FBIOPUT_VSCREENINFO, struct.pack('I' * 40, *vi)) # fb_var_screeninfo
vi = struct.unpack('I' * 40, vi)
ffm = 'c'*16+'L'+'I'*4+'H'*3+'ILIIHHH' bpp = vi[6]
fic = struct.calcsize(ffm) bytepp = bpp // 8
fi = struct.unpack(ffm, ioctl(f, FBIOGET_FSCREENINFO, bytes(fic))) except:
msize = fi[17] # = w*h*bpp//8 pass
ll, start = fi[-7:-5]
w, h = ll//bytepp, vi[1] # when screen is vertical, width becomes wrong. ll//3 is more accurate at such time.
if _win and len(_win)==4: # virtual window settings
vx, vy, vw, vh = _win
if vw == 'w': vw = w
if vh == 'h': vh = h
vx, vy, vw, vh = map(int, (vx, vy, vw, vh))
if vx>=w: vx = 0
if vy>=h: vy = 0
if vx>w: vw = w - vx
else: vw -= vx
if vy>h: vh = h - vy
else: vh -= vy
else:
vx, vy, vw, vh = 0,0,w,h
msize_kb = vw*vh*bytepp//1024 # more accurate FB memory size in kb
mm = mmap(f.fileno(), msize, offset=start) if vi[8] == 0:
return mm, w, h, bpp#ll//(bpp//8), h RGB = True
ffm = 'c' * 16 + 'L' + 'I' * 4 + 'H' * 3 + 'ILIIHHH'
fic = struct.calcsize(ffm)
fi = struct.unpack(ffm, ioctl(f, FBIOGET_FSCREENINFO, bytes(fic)))
msize = fi[17] # = w*h*bpp//8
ll, start = fi[-7:-5]
w, h = ll // bytepp, vi[1] # when screen is vertical, width becomes wrong. ll//3 is more accurate at such time.
if _win and len(_win) == 4: # virtual window settings
vx, vy, vw, vh = _win
if vw == 'w':
vw = w
if vh == 'h':
vh = h
vx, vy, vw, vh = map(int, (vx, vy, vw, vh))
if vx >= w:
vx = 0
if vy >= h:
vy = 0
if vx > w:
vw = w - vx
else:
vw -= vx
if vy > h:
vh = h - vy
else:
vh -= vy
else:
vx, vy, vw, vh = 0, 0, w, h
msize_kb = vw * vh * bytepp // 1024 # more accurate FB memory size in kb
mm = mmap(f.fileno(), msize, offset=start)
return mm, w, h, bpp # ll//(bpp//8), h
def fill_scr(r, g, b):
if bpp == 32:
seed = struct.pack('BBBB', b, g, r, 255)
elif bpp == 24:
seed = struct.pack('BBB', b, g, r)
elif bpp == 16:
seed = struct.pack('H', r >> 3 << 11 | g >> 2 << 5 | b >> 3)
mm.seek(0)
show_img(seed * vw * vh)
def fill_scr(r,g,b):
if bpp == 32:
seed = struct.pack('BBBB', b, g, r, 255)
elif bpp == 24:
seed = struct.pack('BBB', b, g, r)
elif bpp == 16:
seed = struct.pack('H', r>>3<<11 | g>>2<<5 | b>>3)
mm.seek(0)
show_img(seed * vw * vh)
def black_scr(): def black_scr():
fill_scr(0,0,0) fill_scr(0, 0, 0)
def white_scr(): def white_scr():
fill_scr(255,255,255) fill_scr(255, 255, 255)
def mmseekto(x, y):
mm.seek((x + y * w) * bytepp)
def mmseekto(x,y):
mm.seek((x + y*w) * bytepp)
def dot(x, y, r, g, b): def dot(x, y, r, g, b):
mmseekto(x,y) mmseekto(x, y)
mm.write(struct.pack('BBB',*((r,g,b) if RGB else (b,g,r)))) mm.write(struct.pack('BBB', *((r, g, b) if RGB else (b, g, r))))
def get_pixel(x, y):
mmseekto(x, y)
return mm.read(bytepp)
def get_pixel(x,y):
mmseekto(x,y)
return mm.read(bytepp)
def _888_to_565(bt): def _888_to_565(bt):
b = b'' b = b''
for i in range(0, len(bt),3): for i in range(0, len(bt), 3):
b += int.to_bytes(bt[i]>>3<<11|bt[i+1]>>2<<5|bt[i+2]>>3, 2, 'little') b += int.to_bytes(bt[i] >> 3 << 11 | bt[i + 1] >> 2 << 5 | bt[i + 2] >> 3, 2, 'little')
return b return b
def numpy_888_565(bt): def numpy_888_565(bt):
import numpy as np import numpy as np
arr = np.fromstring(bt, dtype=np.uint32) arr = np.fromstring(bt, dtype=np.uint32)
return (((0xF80000 & arr)>>8)|((0xFC00 & arr)>>5)|((0xF8 & arr)>>3)).astype(np.uint16).tostring() return (((0xF80000 & arr) >> 8) | ((0xFC00 & arr) >> 5) | ((0xF8 & arr) >> 3)).astype(np.uint16).tostring()
def show_img(img): def show_img(img):
if not type(img) is bytes: if not type(img) is bytes:
if not RGB: if not RGB:
if bpp == 24: # for RPI if bpp == 24: # for RPI
img = img.tobytes('raw', 'BGR') img = img.tobytes('raw', 'BGR')
else: else:
img = img.convert('RGBA').tobytes('raw', 'BGRA') img = img.convert('RGBA').tobytes('raw', 'BGRA')
if bpp == 16: if bpp == 16:
img = numpy_888_565(img) img = numpy_888_565(img)
else: else:
if bpp == 24: if bpp == 24:
img = img.tobytes() img = img.tobytes()
else: else:
img = img.convert('RGBA').tobytes() img = img.convert('RGBA').tobytes()
if bpp == 16: if bpp == 16:
img = numpy_888_565(img) img = numpy_888_565(img)
from io import BytesIO from io import BytesIO
b = BytesIO(img) b = BytesIO(img)
s = vw*bytepp s = vw * bytepp
for y in range(vh): # virtual window drawing for y in range(vh): # virtual window drawing
mmseekto(vx,vy+y) mmseekto(vx, vy + y)
mm.write(b.read(s)) mm.write(b.read(s))

View File

@ -20,7 +20,6 @@ import logging
import pwnagotchi.ui.fonts as fonts import pwnagotchi.ui.fonts as fonts
from pwnagotchi.ui.hw.base import DisplayImpl from pwnagotchi.ui.hw.base import DisplayImpl
import os,time
class Pitft(DisplayImpl): class Pitft(DisplayImpl):
def __init__(self, config): def __init__(self, config):
@ -53,7 +52,7 @@ class Pitft(DisplayImpl):
def initialize(self): def initialize(self):
logging.info("Initializing adafruit pitft 320x240 screen") logging.info("Initializing adafruit pitft 320x240 screen")
from pwnagotchi.ui.hw.libs.adafruit.pitft.ILI9341 import ILI9341 from pwnagotchi.ui.hw.libs.adafruit.pitft.ILI9341 import ILI9341
self._display = ILI9341(0,0,25,18) self._display = ILI9341(0, 0, 25, 18)
def render(self, canvas): def render(self, canvas):
self._display.display(canvas) self._display.display(canvas)

View File

@ -238,13 +238,14 @@ def load_config(args):
config = merge_config(additional_config, config) config = merge_config(additional_config, config)
# the very first step is to normalize the display name, so we don't need dozens of if/elif around # the very first step is to normalize the display name, so we don't need dozens of if/elif around
# NON E-INK DISPLAYS--------------------------------------------------------------- # Dummy Display -------------------------------------------------------------------
if config['ui']['display']['type'] in ('inky', 'inkyphat'): if config['ui']['display']['type'] in ('dummy', 'dummydisplay'):
config['ui']['display']['type'] = 'inky'
elif config['ui']['display']['type'] in ('dummy', 'dummydisplay'):
config['ui']['display']['type'] = 'dummydisplay' config['ui']['display']['type'] = 'dummydisplay'
# NON E-INK DISPLAYS---------------------------------------------------------------
elif config['ui']['display']['type'] in ('inky', 'inkyphat'):
config['ui']['display']['type'] = 'inky'
elif config['ui']['display']['type'] in ('papirus', 'papi'): elif config['ui']['display']['type'] in ('papirus', 'papi'):
config['ui']['display']['type'] = 'papirus' config['ui']['display']['type'] = 'papirus'
@ -288,7 +289,7 @@ def load_config(args):
# Adafruit # Adafruit
elif config['ui']['display']['type'] in ('adafruit2in13v3', 'af213v3', 'adafruit_213v3', 'adafruit213inv3'): elif config['ui']['display']['type'] in ('adafruit2in13_v3', 'adafruit2in13v3', 'af213v3', 'adafruit_213v3', 'adafruit213inv3'):
config['ui']['display']['type'] = 'adafruit2in13_v3' config['ui']['display']['type'] = 'adafruit2in13_v3'
# Waveshare # Waveshare