Moved self._display = None to base.py for easier debugging display files.

Fixed waveshare2in13g.py
This commit is contained in:
Jeroen Oudshoorn
2024-01-20 23:54:32 +01:00
parent 85a64a3914
commit e50cf04967
75 changed files with 225 additions and 271 deletions

3
.idea/misc.xml generated
View File

@ -4,4 +4,7 @@
<option name="sdkName" value="Python 3.11 (pwnagotchi)" /> <option name="sdkName" value="Python 3.11 (pwnagotchi)" />
</component> </component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10 (pwnagotchi-torch-bookworm)" project-jdk-type="Python SDK" /> <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10 (pwnagotchi-torch-bookworm)" project-jdk-type="Python SDK" />
<component name="PythonCompatibilityInspectionAdvertiser">
<option name="version" value="3" />
</component>
</project> </project>

View File

@ -46,8 +46,7 @@ class FixServices(plugins.Plugin):
logging.info("[Fix_Services] plugin loaded.") logging.info("[Fix_Services] plugin loaded.")
def on_ready(self, agent): def on_ready(self, agent):
last_lines = ''.join(list(TextIOWrapper(subprocess.Popen(['journalctl', '-n10', '-k'], last_lines = self.get_last_lines('journalctl', ['-n10', '-k'], 10)
stdout=subprocess.PIPE).stdout))[-10:])
try: try:
cmd_output = subprocess.check_output("ip link show wlan0mon", shell=True) cmd_output = subprocess.check_output("ip link show wlan0mon", shell=True)
logging.info("[Fix_Services ip link show wlan0mon]: %s" % repr(cmd_output)) logging.info("[Fix_Services ip link show wlan0mon]: %s" % repr(cmd_output))
@ -99,14 +98,23 @@ class FixServices(plugins.Plugin):
logging.error("[Fix_Services]SYSLOG wifi.recon flip fail: %s" % err) logging.error("[Fix_Services]SYSLOG wifi.recon flip fail: %s" % err)
self._tryTurningItOffAndOnAgain(agent) self._tryTurningItOffAndOnAgain(agent)
def get_last_lines(self, command, args, n):
try:
process = subprocess.Popen([command] + args, stdout=subprocess.PIPE)
output = TextIOWrapper(process.stdout)
lines = output.readlines()
last_n_lines = ''.join(lines[-n:])
return last_n_lines
except Exception as e:
print(f"Error occurred: {e}")
return None
def on_epoch(self, agent, epoch, epoch_data): def on_epoch(self, agent, epoch, epoch_data):
last_lines = ''.join(list(TextIOWrapper(subprocess.Popen(['journalctl', '-n10', '-k'],
stdout=subprocess.PIPE).stdout))[-10:]) last_lines = self.get_last_lines('journalctl', ['-n10', '-k'], 10)
other_last_lines = ''.join(list(TextIOWrapper(subprocess.Popen(['journalctl', '-n10'], other_last_lines = self.get_last_lines('journalctl', ['-n10'], 10)
stdout=subprocess.PIPE).stdout))[-10:]) other_other_last_lines = self.get_last_lines('tail', ['-n10', '/home/pi/logs/pwnagotchi.log'], 10)
other_other_last_lines = ''.join(
list(TextIOWrapper(subprocess.Popen(['tail', '-n10', '/home/pi/logs/pwnagotchi.log'],
stdout=subprocess.PIPE).stdout))[-10:])
# don't check if we ran a reset recently # don't check if we ran a reset recently
logging.debug("[Fix_Services]**** epoch") logging.debug("[Fix_Services]**** epoch")
if time.time() - self.LASTTRY > 180: if time.time() - self.LASTTRY > 180:

View File

@ -1,14 +1,20 @@
# Based on UPS Lite v1.1 from https://github.com/xenDE # Based on UPS Lite v1.1 from https://github.com/xenDE
# Made specifically to address the problems caused by the hardware changes in 1.3. Oh yeah I also removed the auto-shutdown feature because it's kind of broken.
# #
# functions for get UPS status - needs enable "i2c" in raspi-config # To setup, see page six of this manual to see how to enable i2c:
# https://github.com/linshuqin329/UPS-Lite/blob/master/UPS-Lite_V1.3_CW2015/Instructions%20for%20UPS-Lite%20V1.3.pdf
# #
# https://github.com/linshuqin329/UPS-Lite # Follow page seven, install the dependencies (python-smbus) and copy this script over for later use:
# https://github.com/linshuqin329/UPS-Lite/blob/master/UPS-Lite_V1.3_CW2015/UPS_Lite_V1.3_CW2015.py
# #
# For Raspberry Pi Zero Ups Power Expansion Board with Integrated Serial Port S3U4 # Now, install this plugin by copying this to the 'available-plugins' folder in your pwnagotchi, install and enable the plugin with the commands:
# https://www.ebay.de/itm/For-Raspberry-Pi-Zero-Ups-Power-Expansion-Board-with-Integrated-Serial-Port-S3U4/323873804310 # sudo pwnagotchi plugins install upslite_plugin_1_3
# https://www.aliexpress.com/item/32888533624.html # sudo pwnagotchi plugins enable upslite_plugin_1_3
# #
# To display external power supply status you need to bridge the necessary pins on the UPS-Lite board. See instructions in the UPS-Lite repo. # Now restart raspberry pi. Once back up ensure upslite_plugin_1_3 plugin is turned on in the WebUI. If there is still '0%' on your battery meter
# run the script we saved earlier and ensure that the pwnagotchi is plugged in both at the battery and the raspberry pi. The script should start trying to
# read the battery, and should be successful once there's a USB cable running power to the battery supply.
import logging import logging
import struct import struct
@ -20,6 +26,11 @@ import pwnagotchi.ui.fonts as fonts
from pwnagotchi.ui.components import LabeledValue from pwnagotchi.ui.components import LabeledValue
from pwnagotchi.ui.view import BLACK from pwnagotchi.ui.view import BLACK
CW2015_ADDRESS = 0X62
CW2015_REG_VCELL = 0X02
CW2015_REG_SOC = 0X04
CW2015_REG_MODE = 0X0A
# TODO: add enable switch in config.yml an cleanup all to the best place # TODO: add enable switch in config.yml an cleanup all to the best place
class UPS: class UPS:
@ -31,8 +42,7 @@ class UPS:
def voltage(self): def voltage(self):
try: try:
address = 0x36 read = self._bus.read_word_data(CW2015_ADDRESS, CW2015_REG_VCELL)
read = self._bus.read_word_data(address, 2)
swapped = struct.unpack("<H", struct.pack(">H", read))[0] swapped = struct.unpack("<H", struct.pack(">H", read))[0]
return swapped * 1.25 / 1000 / 16 return swapped * 1.25 / 1000 / 16
except: except:
@ -41,7 +51,7 @@ class UPS:
def capacity(self): def capacity(self):
try: try:
address = 0x36 address = 0x36
read = self._bus.read_word_data(address, 4) read = self._bus.read_word_data(CW2015_ADDRESS, CW2015_REG_SOC)
swapped = struct.unpack("<H", struct.pack(">H", read))[0] swapped = struct.unpack("<H", struct.pack(">H", read))[0]
return swapped / 256 return swapped / 256
except: except:
@ -57,10 +67,10 @@ class UPS:
class UPSLite(plugins.Plugin): class UPSLite(plugins.Plugin):
__author__ = 'evilsocket@gmail.com' __author__ = 'marbasec'
__version__ = '1.0.0' __version__ = '1.3.0'
__license__ = 'GPL3' __license__ = 'GPL3'
__description__ = 'A plugin that will add a voltage indicator for the UPS Lite v1.1' __description__ = 'A plugin that will add a voltage indicator for the UPS Lite v1.3'
def __init__(self): def __init__(self):
self.ups = None self.ups = None
@ -69,7 +79,7 @@ class UPSLite(plugins.Plugin):
self.ups = UPS() self.ups = UPS()
def on_ui_setup(self, ui): def on_ui_setup(self, ui):
ui.add_element('ups', LabeledValue(color=BLACK, label='UPS', value='0%/0V', position=(ui.width() / 2 + 15, 0), ui.add_element('ups', LabeledValue(color=BLACK, label='UPS', value='0%', position=(ui.width() / 2 + 15, 0),
label_font=fonts.Bold, text_font=fonts.Medium)) label_font=fonts.Bold, text_font=fonts.Medium))
def on_unload(self, ui): def on_unload(self, ui):
@ -80,7 +90,3 @@ class UPSLite(plugins.Plugin):
capacity = self.ups.capacity() capacity = self.ups.capacity()
charging = self.ups.charging() charging = self.ups.charging()
ui.set('ups', "%2i%s" % (capacity, charging)) ui.set('ups', "%2i%s" % (capacity, charging))
if capacity <= self.options['shutdown']:
logging.info('[ups_lite] Empty battery (<= %s%%): shuting down' % self.options['shutdown'])
ui.update(force=True, new_data={'status': 'Battery exhausted, bye ...'})
pwnagotchi.shutdown()

View File

@ -3,6 +3,7 @@ import pwnagotchi.ui.fonts as fonts
class DisplayImpl(object): class DisplayImpl(object):
def __init__(self, config, name): def __init__(self, config, name):
self._display = None
if fonts.Medium is None: if fonts.Medium is None:
fonts.init(config) fonts.init(config)
self.name = name self.name = name

View File

@ -3,41 +3,41 @@ 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
class DFRobotV1(DisplayImpl): class DFRobotV1(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(DFRobotV1, self).__init__(config, 'dfrobot_1') super(DFRobotV1, self).__init__(config, 'dfrobot_1')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 9, 10, 35, 25, 9) fonts.setup(10, 9, 10, 35, 25, 9)
self._layout['width'] = 250 self._layout['width'] = 250
self._layout['height'] = 122 self._layout['height'] = 122
self._layout['face'] = (0, 40) self._layout['face'] = (0, 40)
self._layout['name'] = (5, 20) self._layout['name'] = (5, 20)
self._layout['channel'] = (0, 0) self._layout['channel'] = (0, 0)
self._layout['aps'] = (28, 0) self._layout['aps'] = (28, 0)
self._layout['uptime'] = (185, 0) self._layout['uptime'] = (185, 0)
self._layout['line1'] = [0, 14, 250, 14] self._layout['line1'] = [0, 14, 250, 14]
self._layout['line2'] = [0, 108, 250, 108] self._layout['line2'] = [0, 108, 250, 108]
self._layout['friend_face'] = (0, 92) self._layout['friend_face'] = (0, 92)
self._layout['friend_name'] = (40, 94) self._layout['friend_name'] = (40, 94)
self._layout['shakes'] = (0, 109) self._layout['shakes'] = (0, 109)
self._layout['mode'] = (225, 109) self._layout['mode'] = (225, 109)
self._layout['status'] = { self._layout['status'] = {
'pos': (125, 20), 'pos': (125, 20),
'font': fonts.status_font(fonts.Medium), 'font': fonts.status_font(fonts.Medium),
'max': 20 'max': 20
} }
return self._layout return self._layout
def initialize(self): def initialize(self):
logging.info("initializing dfrobot1 display") logging.info("initializing dfrobot1 display")
from pwnagotchi.ui.hw.libs.dfrobot.v1.dfrobot import DFRobot from pwnagotchi.ui.hw.libs.dfrobot.v1.dfrobot import DFRobot
self._display = DFRobot() self._display = DFRobot()
def render(self, canvas): def render(self, canvas):
buf = self._display.getbuffer(canvas) buf = self._display.getbuffer(canvas)
self._display.display(buf) self._display.display(buf)
def clear(self): def clear(self):
self._display.Clear(0xFF) self._display.Clear(0xFF)

View File

@ -3,41 +3,41 @@ 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
class DFRobotV1(DisplayImpl): class DFRobotV1(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(DFRobotV1, self).__init__(config, 'dfrobot_1') super(DFRobotV1, self).__init__(config, 'dfrobot_1')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 9, 10, 35, 25, 9) fonts.setup(10, 9, 10, 35, 25, 9)
self._layout['width'] = 250 self._layout['width'] = 250
self._layout['height'] = 122 self._layout['height'] = 122
self._layout['face'] = (0, 40) self._layout['face'] = (0, 40)
self._layout['name'] = (5, 20) self._layout['name'] = (5, 20)
self._layout['channel'] = (0, 0) self._layout['channel'] = (0, 0)
self._layout['aps'] = (28, 0) self._layout['aps'] = (28, 0)
self._layout['uptime'] = (185, 0) self._layout['uptime'] = (185, 0)
self._layout['line1'] = [0, 14, 250, 14] self._layout['line1'] = [0, 14, 250, 14]
self._layout['line2'] = [0, 108, 250, 108] self._layout['line2'] = [0, 108, 250, 108]
self._layout['friend_face'] = (0, 92) self._layout['friend_face'] = (0, 92)
self._layout['friend_name'] = (40, 94) self._layout['friend_name'] = (40, 94)
self._layout['shakes'] = (0, 109) self._layout['shakes'] = (0, 109)
self._layout['mode'] = (225, 109) self._layout['mode'] = (225, 109)
self._layout['status'] = { self._layout['status'] = {
'pos': (125, 20), 'pos': (125, 20),
'font': fonts.status_font(fonts.Medium), 'font': fonts.status_font(fonts.Medium),
'max': 20 'max': 20
} }
return self._layout return self._layout
def initialize(self): def initialize(self):
logging.info("initializing dfrobot1 display") logging.info("initializing dfrobot1 display")
from pwnagotchi.ui.hw.libs.dfrobot.v1.dfrobot import DFRobot from pwnagotchi.ui.hw.libs.dfrobot.v1.dfrobot import DFRobot
self._display = DFRobot() self._display = DFRobot()
def render(self, canvas): def render(self, canvas):
buf = self._display.getbuffer(canvas) buf = self._display.getbuffer(canvas)
self._display.display(buf) self._display.display(buf)
def clear(self): def clear(self):
self._display.Clear(0xFF) self._display.Clear(0xFF)

View File

@ -3,41 +3,41 @@ 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
class DFRobotV2(DisplayImpl): class DFRobotV2(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(DFRobotV2, self).__init__(config, 'dfrobot_2') super(DFRobotV2, self).__init__(config, 'dfrobot_2')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 9, 10, 35, 25, 9) fonts.setup(10, 9, 10, 35, 25, 9)
self._layout['width'] = 250 self._layout['width'] = 250
self._layout['height'] = 122 self._layout['height'] = 122
self._layout['face'] = (0, 40) self._layout['face'] = (0, 40)
self._layout['name'] = (5, 20) self._layout['name'] = (5, 20)
self._layout['channel'] = (0, 0) self._layout['channel'] = (0, 0)
self._layout['aps'] = (28, 0) self._layout['aps'] = (28, 0)
self._layout['uptime'] = (185, 0) self._layout['uptime'] = (185, 0)
self._layout['line1'] = [0, 14, 250, 14] self._layout['line1'] = [0, 14, 250, 14]
self._layout['line2'] = [0, 108, 250, 108] self._layout['line2'] = [0, 108, 250, 108]
self._layout['friend_face'] = (0, 92) self._layout['friend_face'] = (0, 92)
self._layout['friend_name'] = (40, 94) self._layout['friend_name'] = (40, 94)
self._layout['shakes'] = (0, 109) self._layout['shakes'] = (0, 109)
self._layout['mode'] = (225, 109) self._layout['mode'] = (225, 109)
self._layout['status'] = { self._layout['status'] = {
'pos': (125, 20), 'pos': (125, 20),
'font': fonts.status_font(fonts.Medium), 'font': fonts.status_font(fonts.Medium),
'max': 20 'max': 20
} }
return self._layout return self._layout
def initialize(self): def initialize(self):
logging.info("initializing dfrobot2 display") logging.info("initializing dfrobot2 display")
from pwnagotchi.ui.hw.libs.dfrobot.v2.dfrobot import DFRobot from pwnagotchi.ui.hw.libs.dfrobot.v2.dfrobot import DFRobot
self._display = DFRobot() self._display = DFRobot()
def render(self, canvas): def render(self, canvas):
buf = self._display.getbuffer(canvas) buf = self._display.getbuffer(canvas)
self._display.display(buf) self._display.display(buf)
def clear(self): def clear(self):
self._display.Clear(0xFF) self._display.Clear(0xFF)

View File

@ -3,41 +3,41 @@ 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
class DFRobotV2(DisplayImpl): class DFRobotV2(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(DFRobotV2, self).__init__(config, 'dfrobot_2') super(DFRobotV2, self).__init__(config, 'dfrobot_2')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 9, 10, 35, 25, 9) fonts.setup(10, 9, 10, 35, 25, 9)
self._layout['width'] = 250 self._layout['width'] = 250
self._layout['height'] = 122 self._layout['height'] = 122
self._layout['face'] = (0, 40) self._layout['face'] = (0, 40)
self._layout['name'] = (5, 20) self._layout['name'] = (5, 20)
self._layout['channel'] = (0, 0) self._layout['channel'] = (0, 0)
self._layout['aps'] = (28, 0) self._layout['aps'] = (28, 0)
self._layout['uptime'] = (185, 0) self._layout['uptime'] = (185, 0)
self._layout['line1'] = [0, 14, 250, 14] self._layout['line1'] = [0, 14, 250, 14]
self._layout['line2'] = [0, 108, 250, 108] self._layout['line2'] = [0, 108, 250, 108]
self._layout['friend_face'] = (0, 92) self._layout['friend_face'] = (0, 92)
self._layout['friend_name'] = (40, 94) self._layout['friend_name'] = (40, 94)
self._layout['shakes'] = (0, 109) self._layout['shakes'] = (0, 109)
self._layout['mode'] = (225, 109) self._layout['mode'] = (225, 109)
self._layout['status'] = { self._layout['status'] = {
'pos': (125, 20), 'pos': (125, 20),
'font': fonts.status_font(fonts.Medium), 'font': fonts.status_font(fonts.Medium),
'max': 20 'max': 20
} }
return self._layout return self._layout
def initialize(self): def initialize(self):
logging.info("initializing dfrobot2 display") logging.info("initializing dfrobot2 display")
from pwnagotchi.ui.hw.libs.dfrobot.v2.dfrobot import DFRobot from pwnagotchi.ui.hw.libs.dfrobot.v2.dfrobot import DFRobot
self._display = DFRobot() self._display = DFRobot()
def render(self, canvas): def render(self, canvas):
buf = self._display.getbuffer(canvas) buf = self._display.getbuffer(canvas)
self._display.display(buf) self._display.display(buf)
def clear(self): def clear(self):
self._display.Clear(0xFF) self._display.Clear(0xFF)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class DisplayHatMini(DisplayImpl): class DisplayHatMini(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(DisplayHatMini, self).__init__(config, 'displayhatmini') super(DisplayHatMini, self).__init__(config, 'displayhatmini')
self._display = None
def layout(self): def layout(self):
fonts.setup(12, 10, 12, 70, 25, 9) fonts.setup(12, 10, 12, 70, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Inky(DisplayImpl): class Inky(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Inky, self).__init__(config, 'inky') super(Inky, self).__init__(config, 'inky')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 8, 10, 28, 25, 9) fonts.setup(10, 8, 10, 28, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class LcdHat(DisplayImpl): class LcdHat(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(LcdHat, self).__init__(config, 'lcdhat') super(LcdHat, self).__init__(config, 'lcdhat')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 9, 10, 35, 25, 9) fonts.setup(10, 9, 10, 35, 25, 9)

View File

@ -166,20 +166,21 @@ class EPD:
def getbuffer(self, image): def getbuffer(self, image):
# Create a pallette with the 4 colors supported by the panel # Create a pallette with the 4 colors supported by the panel
global image_temp
pal_image = Image.new("P", (1, 1)) pal_image = Image.new("P", (1, 1))
pal_image.putpalette((0, 0, 0, 255, 255, 255, 255, 255, 0, 255, 0, 0) + (0, 0, 0) * 252) pal_image.putpalette((0, 0, 0, 255, 255, 255, 255, 255, 0, 255, 0, 0) + (0, 0, 0) * 252)
# Check if we need to rotate the image # Check if we need to rotate the image
imwidth, imheight = image.size imwidth, imheight = image.size
if (imwidth == self.width and imheight == self.height): if imwidth == self.width and imheight == self.height:
image_temp = image image_temp = image
elif (imwidth == self.height and imheight == self.width): elif imwidth == self.height and imheight == self.width:
image_temp = image.rotate(90, expand=True) image_temp = image.rotate(90, expand=True)
else: else:
logger.warning( logger.warning(
"Invalid image dimensions: %d x %d, expected %d x %d" % (imwidth, imheight, self.width, self.height)) "Invalid image dimensions: %d x %d, expected %d x %d" % (imwidth, imheight, self.width, self.height))
# Convert the soruce image to the 4 colors, dithering if needed # Convert the source image to the 4 colors, dithering if needed
image_4color = image_temp.convert("RGB").quantize(palette=pal_image) image_4color = image_temp.convert("RGB").quantize(palette=pal_image)
buf_4color = bytearray(image_4color.tobytes('raw')) buf_4color = bytearray(image_4color.tobytes('raw'))

View File

@ -100,7 +100,7 @@ class EPD:
def ReadBusy(self): def ReadBusy(self):
logger.debug("e-Paper busy") logger.debug("e-Paper busy")
while (epdconfig.digital_read(self.busy_pin) == 1): # 1: idle, 0: busy while epdconfig.digital_read(self.busy_pin) == 1: # 1: idle, 0: busy
epdconfig.delay_ms(20) epdconfig.delay_ms(20)
logger.debug("e-Paper busy release") logger.debug("e-Paper busy release")
@ -134,7 +134,7 @@ class EPD:
self.send_data(self.LUT_DATA_4Gray[i]) self.send_data(self.LUT_DATA_4Gray[i])
def init(self): def init(self):
if (epdconfig.module_init() != 0): if epdconfig.module_init() != 0:
return -1 return -1
# EPD hardware init start # EPD hardware init start
@ -159,7 +159,7 @@ class EPD:
return 0 return 0
def init_Fast(self): def init_Fast(self):
if (epdconfig.module_init() != 0): if epdconfig.module_init() != 0:
return -1 return -1
# EPD hardware init start # EPD hardware init start
@ -204,12 +204,12 @@ class EPD:
return 0 return 0
def Init_4Gray(self): def Init_4Gray(self):
if (epdconfig.module_init() != 0): if epdconfig.module_init() != 0:
return -1 return -1
self.reset() self.reset()
self.send_command(0x12) # soft reset self.send_command(0x12) # soft reset
self.ReadBusy(); self.ReadBusy()
self.send_command(0x74) # set analog block control self.send_command(0x74) # set analog block control
self.send_data(0x54) self.send_data(0x54)
@ -268,14 +268,14 @@ class EPD:
imwidth, imheight = image_monocolor.size imwidth, imheight = image_monocolor.size
pixels = image_monocolor.load() pixels = image_monocolor.load()
# logger.debug("imwidth = %d, imheight = %d",imwidth,imheight) # logger.debug("imwidth = %d, imheight = %d",imwidth,imheight)
if (imwidth == self.width and imheight == self.height): if imwidth == self.width and imheight == self.height:
logger.debug("Vertical") logger.debug("Vertical")
for y in range(imheight): for y in range(imheight):
for x in range(imwidth): for x in range(imwidth):
# Set the bits for the column of pixels at the current position. # Set the bits for the column of pixels at the current position.
if pixels[x, y] == 0: if pixels[x, y] == 0:
buf[int((x + y * self.width) / 8)] &= ~(0x80 >> (x % 8)) buf[int((x + y * self.width) / 8)] &= ~(0x80 >> (x % 8))
elif (imwidth == self.height and imheight == self.width): elif imwidth == self.height and imheight == self.width:
logger.debug("Horizontal") logger.debug("Horizontal")
for y in range(imheight): for y in range(imheight):
for x in range(imwidth): for x in range(imwidth):
@ -293,40 +293,40 @@ class EPD:
pixels = image_monocolor.load() pixels = image_monocolor.load()
i = 0 i = 0
# logger.debug("imwidth = %d, imheight = %d",imwidth,imheight) # logger.debug("imwidth = %d, imheight = %d",imwidth,imheight)
if (imwidth == self.width and imheight == self.height): if imwidth == self.width and imheight == self.height:
logger.debug("Vertical") logger.debug("Vertical")
for y in range(imheight): for y in range(imheight):
for x in range(imwidth): for x in range(imwidth):
# Set the bits for the column of pixels at the current position. # Set the bits for the column of pixels at the current position.
if (pixels[x, y] == 0xC0): if pixels[x, y] == 0xC0:
pixels[x, y] = 0x80 pixels[x, y] = 0x80
elif (pixels[x, y] == 0x80): elif pixels[x, y] == 0x80:
pixels[x, y] = 0x40 pixels[x, y] = 0x40
i = i + 1 i = i + 1
if (i % 4 == 0): if i % 4 == 0:
buf[int((x + (y * self.width)) / 4)] = ( buf[int((x + (y * self.width)) / 4)] = (
(pixels[x - 3, y] & 0xc0) | (pixels[x - 2, y] & 0xc0) >> 2 | ( (pixels[x - 3, y] & 0xc0) | (pixels[x - 2, y] & 0xc0) >> 2 | (
pixels[x - 1, y] & 0xc0) >> 4 | (pixels[x, y] & 0xc0) >> 6) pixels[x - 1, y] & 0xc0) >> 4 | (pixels[x, y] & 0xc0) >> 6)
elif (imwidth == self.height and imheight == self.width): elif imwidth == self.height and imheight == self.width:
logger.debug("Horizontal") logger.debug("Horizontal")
for x in range(imwidth): for x in range(imwidth):
for y in range(imheight): for y in range(imheight):
newx = y newx = y
newy = self.height - x - 1 newy = self.height - x - 1
if (pixels[x, y] == 0xC0): if pixels[x, y] == 0xC0:
pixels[x, y] = 0x80 pixels[x, y] = 0x80
elif (pixels[x, y] == 0x80): elif pixels[x, y] == 0x80:
pixels[x, y] = 0x40 pixels[x, y] = 0x40
i = i + 1 i = i + 1
if (i % 4 == 0): if i % 4 == 0:
buf[int((newx + (newy * self.width)) / 4)] = ( buf[int((newx + (newy * self.width)) / 4)] = (
(pixels[x, y - 3] & 0xc0) | (pixels[x, y - 2] & 0xc0) >> 2 | ( (pixels[x, y - 3] & 0xc0) | (pixels[x, y - 2] & 0xc0) >> 2 | (
pixels[x, y - 1] & 0xc0) >> 4 | (pixels[x, y] & 0xc0) >> 6) pixels[x, y - 1] & 0xc0) >> 4 | (pixels[x, y] & 0xc0) >> 6)
return buf return buf
def Clear(self): def Clear(self):
if (self.width % 8 == 0): if self.width % 8 == 0:
Width = self.width // 8 Width = self.width // 8
else: else:
Width = self.width // 8 + 1 Width = self.width // 8 + 1
@ -338,7 +338,7 @@ class EPD:
self.TurnOnDisplay() self.TurnOnDisplay()
def display(self, image): def display(self, image):
if (self.width % 8 == 0): if self.width % 8 == 0:
Width = self.width // 8 Width = self.width // 8
else: else:
Width = self.width // 8 + 1 Width = self.width // 8 + 1
@ -350,7 +350,7 @@ class EPD:
self.TurnOnDisplay() self.TurnOnDisplay()
def display_Fast(self, image): def display_Fast(self, image):
if (self.width % 8 == 0): if self.width % 8 == 0:
Width = self.width // 8 Width = self.width // 8
else: else:
Width = self.width // 8 + 1 Width = self.width // 8 + 1
@ -362,7 +362,7 @@ class EPD:
self.TurnOnDisplay_Fast() self.TurnOnDisplay_Fast()
def display_Base(self, image): def display_Base(self, image):
if (self.width % 8 == 0): if self.width % 8 == 0:
Width = self.width // 8 Width = self.width // 8
else: else:
Width = self.width // 8 + 1 Width = self.width // 8 + 1
@ -379,7 +379,7 @@ class EPD:
self.TurnOnDisplay() self.TurnOnDisplay()
def display_Base_color(self, color): def display_Base_color(self, color):
if (self.width % 8 == 0): if self.width % 8 == 0:
Width = self.width // 8 Width = self.width // 8
else: else:
Width = self.width // 8 + 1 Width = self.width // 8 + 1
@ -396,8 +396,7 @@ class EPD:
# self.TurnOnDisplay() # self.TurnOnDisplay()
def display_Partial(self, Image, Xstart, Ystart, Xend, Yend): def display_Partial(self, Image, Xstart, Ystart, Xend, Yend):
if ((Xstart % 8 + Xend % 8 == 8 & Xstart % 8 > Xend % 8) | Xstart % 8 + Xend % 8 == 0 | ( if (Xstart % 8 + Xend % 8 == 8 & Xstart % 8 > Xend % 8) | Xstart % 8 + Xend % 8 == 0 | (Xend - Xstart) % 8 == 0:
Xend - Xstart) % 8 == 0):
Xstart = Xstart // 8 Xstart = Xstart // 8
Xend = Xend // 8 Xend = Xend // 8
else: else:
@ -440,7 +439,7 @@ class EPD:
self.send_command(0x24) # Write Black and White image to RAM self.send_command(0x24) # Write Black and White image to RAM
for j in range(Height): for j in range(Height):
for i in range(Width): for i in range(Width):
if ((j > Ystart - 1) & (j < (Yend + 1)) & (i > Xstart - 1) & (i < (Xend + 1))): if (j > Ystart - 1) & (j < (Yend + 1)) & (i > Xstart - 1) & (i < (Xend + 1)):
self.send_data(Image[i + j * Width]) self.send_data(Image[i + j * Width])
self.TurnOnDisplay_Partial() self.TurnOnDisplay_Partial()
@ -452,11 +451,11 @@ class EPD:
temp1 = image[i * 2 + j] temp1 = image[i * 2 + j]
for k in range(0, 2): for k in range(0, 2):
temp2 = temp1 & 0xC0 temp2 = temp1 & 0xC0
if (temp2 == 0xC0): if temp2 == 0xC0:
temp3 |= 0x00 temp3 |= 0x00
elif (temp2 == 0x00): elif temp2 == 0x00:
temp3 |= 0x01 temp3 |= 0x01
elif (temp2 == 0x80): elif temp2 == 0x80:
temp3 |= 0x01 temp3 |= 0x01
else: # 0x40 else: # 0x40
temp3 |= 0x00 temp3 |= 0x00
@ -464,15 +463,15 @@ class EPD:
temp1 <<= 2 temp1 <<= 2
temp2 = temp1 & 0xC0 temp2 = temp1 & 0xC0
if (temp2 == 0xC0): if temp2 == 0xC0:
temp3 |= 0x00 temp3 |= 0x00
elif (temp2 == 0x00): elif temp2 == 0x00:
temp3 |= 0x01 temp3 |= 0x01
elif (temp2 == 0x80): elif temp2 == 0x80:
temp3 |= 0x01 temp3 |= 0x01
else: # 0x40 else: # 0x40
temp3 |= 0x00 temp3 |= 0x00
if (j != 1 or k != 1): if j != 1 or k != 1:
temp3 <<= 1 temp3 <<= 1
temp1 <<= 2 temp1 <<= 2
self.send_data(temp3) self.send_data(temp3)
@ -484,11 +483,11 @@ class EPD:
temp1 = image[i * 2 + j] temp1 = image[i * 2 + j]
for k in range(0, 2): for k in range(0, 2):
temp2 = temp1 & 0xC0 temp2 = temp1 & 0xC0
if (temp2 == 0xC0): if temp2 == 0xC0:
temp3 |= 0x00 temp3 |= 0x00
elif (temp2 == 0x00): elif temp2 == 0x00:
temp3 |= 0x01 temp3 |= 0x01
elif (temp2 == 0x80): elif temp2 == 0x80:
temp3 |= 0x00 temp3 |= 0x00
else: # 0x40 else: # 0x40
temp3 |= 0x01 temp3 |= 0x01
@ -496,15 +495,15 @@ class EPD:
temp1 <<= 2 temp1 <<= 2
temp2 = temp1 & 0xC0 temp2 = temp1 & 0xC0
if (temp2 == 0xC0): if temp2 == 0xC0:
temp3 |= 0x00 temp3 |= 0x00
elif (temp2 == 0x00): elif temp2 == 0x00:
temp3 |= 0x01 temp3 |= 0x01
elif (temp2 == 0x80): elif temp2 == 0x80:
temp3 |= 0x00 temp3 |= 0x00
else: # 0x40 else: # 0x40
temp3 |= 0x01 temp3 |= 0x01
if (j != 1 or k != 1): if j != 1 or k != 1:
temp3 <<= 1 temp3 <<= 1
temp1 <<= 2 temp1 <<= 2
self.send_data(temp3) self.send_data(temp3)
@ -517,4 +516,3 @@ class EPD:
epdconfig.delay_ms(2000) epdconfig.delay_ms(2000)
epdconfig.module_exit() epdconfig.module_exit()
### END OF FILE ###

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class OledHat(DisplayImpl): class OledHat(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(OledHat, self).__init__(config, 'oledhat') super(OledHat, self).__init__(config, 'oledhat')
self._display = None
def layout(self): def layout(self):
fonts.setup(8, 8, 8, 10, 10, 8) fonts.setup(8, 8, 8, 10, 10, 8)

View File

@ -8,7 +8,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Papirus(DisplayImpl): class Papirus(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Papirus, self).__init__(config, 'papirus') super(Papirus, self).__init__(config, 'papirus')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 8, 10, 23, 25, 9) fonts.setup(10, 8, 10, 23, 25, 9)

View File

@ -3,12 +3,12 @@ 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 import time
class Spotpear24inch(DisplayImpl): class Spotpear24inch(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Spotpear24inch, self).__init__(config, 'spotpear24inch') super(Spotpear24inch, self).__init__(config, 'spotpear24inch')
self._display = None
def layout(self): def layout(self):
fonts.setup(12, 10, 12, 70, 25, 9) fonts.setup(12, 10, 12, 70, 25, 9)

View File

@ -3,12 +3,12 @@ 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 import time
class Spotpear24inch(DisplayImpl): class Spotpear24inch(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Spotpear24inch, self).__init__(config, 'spotpear24inch') super(Spotpear24inch, self).__init__(config, 'spotpear24inch')
self._display = None
def layout(self): def layout(self):
fonts.setup(12, 10, 12, 70, 25, 9) fonts.setup(12, 10, 12, 70, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare13in3k(DisplayImpl): class Waveshare13in3k(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare13in3k, self).__init__(config, 'waveshare13in3k') super(Waveshare13in3k, self).__init__(config, 'waveshare13in3k')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 8, 10, 18, 25, 9) fonts.setup(10, 8, 10, 18, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare144lcd(DisplayImpl): class Waveshare144lcd(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare144lcd, self).__init__(config, 'waveshare144lcd') super(Waveshare144lcd, self).__init__(config, 'waveshare144lcd')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 8, 10, 18, 25, 9) fonts.setup(10, 8, 10, 18, 25, 9)
@ -42,5 +41,4 @@ class Waveshare144lcd(DisplayImpl):
self._display.display(canvas) self._display.display(canvas)
def clear(self): def clear(self):
pass self._display.clear()
#self._display.clear()

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare1in02(DisplayImpl): class Waveshare1in02(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare1in02, self).__init__(config, 'waveshare1in02') super(Waveshare1in02, self).__init__(config, 'waveshare1in02')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 8, 10, 18, 25, 9) fonts.setup(10, 8, 10, 18, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare144lcd(DisplayImpl): class Waveshare144lcd(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare144lcd, self).__init__(config, 'waveshare144lcd') super(Waveshare144lcd, self).__init__(config, 'waveshare144lcd')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 8, 10, 18, 25, 9) fonts.setup(10, 8, 10, 18, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare154(DisplayImpl): class Waveshare154(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare154, self).__init__(config, 'waveshare1in54') super(Waveshare154, self).__init__(config, 'waveshare1in54')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 9, 10, 35, 25, 9) fonts.setup(10, 9, 10, 35, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare154V2(DisplayImpl): class Waveshare154V2(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare154V2, self).__init__(config, 'waveshare1in54_v2') super(Waveshare154V2, self).__init__(config, 'waveshare1in54_v2')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 9, 10, 35, 25, 9) fonts.setup(10, 9, 10, 35, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare154inchb(DisplayImpl): class Waveshare154inchb(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare154inchb, self).__init__(config, 'waveshare1in54b') super(Waveshare154inchb, self).__init__(config, 'waveshare1in54b')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 9, 10, 35, 25, 9) fonts.setup(10, 9, 10, 35, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare154bV2(DisplayImpl): class Waveshare154bV2(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare154bV2, self).__init__(config, 'waveshare1in54b_v2') super(Waveshare154bV2, self).__init__(config, 'waveshare1in54b_v2')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 9, 10, 35, 25, 9) fonts.setup(10, 9, 10, 35, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare1in54c(DisplayImpl): class Waveshare1in54c(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare1in54c, self).__init__(config, 'waveshare1in54c') super(Waveshare1in54c, self).__init__(config, 'waveshare1in54c')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 8, 10, 18, 25, 9) fonts.setup(10, 8, 10, 18, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare1in64g(DisplayImpl): class Waveshare1in64g(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare1in64g, self).__init__(config, 'waveshare1in64g') super(Waveshare1in64g, self).__init__(config, 'waveshare1in64g')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 8, 10, 18, 25, 9) fonts.setup(10, 8, 10, 18, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class WaveshareV1(DisplayImpl): class WaveshareV1(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(WaveshareV1, self).__init__(config, 'waveshare_1') super(WaveshareV1, self).__init__(config, 'waveshare_1')
self._display = None
def layout(self): def layout(self):
if self.config['color'] == 'black': if self.config['color'] == 'black':

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class WaveshareV2(DisplayImpl): class WaveshareV2(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(WaveshareV2, self).__init__(config, 'waveshare_2') super(WaveshareV2, self).__init__(config, 'waveshare_2')
self._display = None
def layout(self): def layout(self):
if self.config['color'] == 'black': if self.config['color'] == 'black':

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class WaveshareV3(DisplayImpl): class WaveshareV3(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(WaveshareV3, self).__init__(config, 'waveshare_3') super(WaveshareV3, self).__init__(config, 'waveshare_3')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 8, 10, 35, 25, 9) fonts.setup(10, 8, 10, 35, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class WaveshareV4(DisplayImpl): class WaveshareV4(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(WaveshareV4, self).__init__(config, 'waveshare_4') super(WaveshareV4, self).__init__(config, 'waveshare_4')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 9, 10, 35, 25, 9) fonts.setup(10, 9, 10, 35, 25, 9)

View File

@ -8,7 +8,6 @@ from PIL import Image
class Waveshare2in13bV3(DisplayImpl): class Waveshare2in13bV3(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare2in13bV3, self).__init__(config, 'waveshare2in13b_v3') super(Waveshare2in13bV3, self).__init__(config, 'waveshare2in13b_v3')
self._display = None
def layout(self): def layout(self):
if self.config['color'] == 'black': if self.config['color'] == 'black':

View File

@ -8,7 +8,6 @@ from PIL import Image
class Waveshare213bV4(DisplayImpl): class Waveshare213bV4(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare213bV4, self).__init__(config, 'waveshare213inb_v4') super(Waveshare213bV4, self).__init__(config, 'waveshare213inb_v4')
self._display = None
def layout(self): def layout(self):
if self.config['color'] == 'black': if self.config['color'] == 'black':

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare213bc(DisplayImpl): class Waveshare213bc(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare213bc, self).__init__(config, 'waveshare2in13bc') super(Waveshare213bc, self).__init__(config, 'waveshare2in13bc')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 8, 10, 25, 25, 9) fonts.setup(10, 8, 10, 25, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare213d(DisplayImpl): class Waveshare213d(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare213d, self).__init__(config, 'waveshare2in13d') super(Waveshare213d, self).__init__(config, 'waveshare2in13d')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 8, 10, 25, 25, 9) fonts.setup(10, 8, 10, 25, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare2in13g(DisplayImpl): class Waveshare2in13g(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare2in13g, self).__init__(config, 'waveshare2in13g') super(Waveshare2in13g, self).__init__(config, 'waveshare2in13g')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 9, 10, 35, 25, 9) fonts.setup(10, 9, 10, 35, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare2in36g(DisplayImpl): class Waveshare2in36g(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare2in36g, self).__init__(config, 'waveshare2in36g') super(Waveshare2in36g, self).__init__(config, 'waveshare2in36g')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 8, 10, 18, 25, 9) fonts.setup(10, 8, 10, 18, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare2in66(DisplayImpl): class Waveshare2in66(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare2in66, self).__init__(config, 'waveshare2in66') super(Waveshare2in66, self).__init__(config, 'waveshare2in66')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 8, 10, 18, 25, 9) fonts.setup(10, 8, 10, 18, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare2in66b(DisplayImpl): class Waveshare2in66b(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare2in66b, self).__init__(config, 'waveshare2in66b') super(Waveshare2in66b, self).__init__(config, 'waveshare2in66b')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 8, 10, 18, 25, 9) fonts.setup(10, 8, 10, 18, 25, 9)
@ -39,7 +38,8 @@ class Waveshare2in66b(DisplayImpl):
self._display.Clear() self._display.Clear()
def render(self, canvas): def render(self, canvas):
self._display.display(canvas) buf = self._display.getbuffer(canvas)
self._display.display(buf, None)
def clear(self): def clear(self):
self._display.Clear() self._display.Clear()

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare2in66g(DisplayImpl): class Waveshare2in66g(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare2in66g, self).__init__(config, 'waveshare2in66g') super(Waveshare2in66g, self).__init__(config, 'waveshare2in66g')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 8, 10, 18, 25, 9) fonts.setup(10, 8, 10, 18, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare27inch(DisplayImpl): class Waveshare27inch(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare27inch, self).__init__(config, 'waveshare2in7') super(Waveshare27inch, self).__init__(config, 'waveshare2in7')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 9, 10, 35, 25, 9) fonts.setup(10, 9, 10, 35, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare27inchV2(DisplayImpl): class Waveshare27inchV2(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare27inchV2, self).__init__(config, 'waveshare2in7_v2') super(Waveshare27inchV2, self).__init__(config, 'waveshare2in7_v2')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 9, 10, 35, 25, 9) fonts.setup(10, 9, 10, 35, 25, 9)
@ -42,7 +41,7 @@ class Waveshare27inchV2(DisplayImpl):
def render(self, canvas): def render(self, canvas):
buf = self._display.getbuffer(canvas) buf = self._display.getbuffer(canvas)
self._display.display_Partial(buf,0,0,176,264) self._display.display_Partial(buf, 0, 0, 176, 264)
def clear(self): def clear(self):
# This line also removes the 0xFF # This line also removes the 0xFF

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare27b(DisplayImpl): class Waveshare27b(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare27b, self).__init__(config, 'waveshare2in7b') super(Waveshare27b, self).__init__(config, 'waveshare2in7b')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 9, 10, 35, 25, 9) fonts.setup(10, 9, 10, 35, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare27bV2(DisplayImpl): class Waveshare27bV2(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare27bV2, self).__init__(config, 'waveshare2in7b_v2') super(Waveshare27bV2, self).__init__(config, 'waveshare2in7b_v2')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 9, 10, 35, 25, 9) fonts.setup(10, 9, 10, 35, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare29inch(DisplayImpl): class Waveshare29inch(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare29inch, self).__init__(config, 'waveshare2in9') super(Waveshare29inch, self).__init__(config, 'waveshare2in9')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 9, 10, 35, 25, 9) fonts.setup(10, 9, 10, 35, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare29inchV2(DisplayImpl): class Waveshare29inchV2(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare29inchV2, self).__init__(config, 'waveshare2in9_v2') super(Waveshare29inchV2, self).__init__(config, 'waveshare2in9_v2')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 9, 10, 35, 25, 9) fonts.setup(10, 9, 10, 35, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare29bV3(DisplayImpl): class Waveshare29bV3(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare29bV3, self).__init__(config, 'waveshare2in9b_v3') super(Waveshare29bV3, self).__init__(config, 'waveshare2in9b_v3')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 9, 10, 35, 25, 9) fonts.setup(10, 9, 10, 35, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare29bV4(DisplayImpl): class Waveshare29bV4(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare29bV4, self).__init__(config, 'waveshare2in9b_v4') super(Waveshare29bV4, self).__init__(config, 'waveshare2in9b_v4')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 9, 10, 35, 25, 9) fonts.setup(10, 9, 10, 35, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare2in9bc(DisplayImpl): class Waveshare2in9bc(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare2in9bc, self).__init__(config, 'waveshare2in9bc') super(Waveshare2in9bc, self).__init__(config, 'waveshare2in9bc')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 8, 10, 18, 25, 9) fonts.setup(10, 8, 10, 18, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare2in9d(DisplayImpl): class Waveshare2in9d(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare2in9d, self).__init__(config, 'waveshare2in9d') super(Waveshare2in9d, self).__init__(config, 'waveshare2in9d')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 8, 10, 18, 25, 9) fonts.setup(10, 8, 10, 18, 25, 9)

View File

@ -9,7 +9,6 @@ import os, time
class Waveshare35lcd(DisplayImpl): class Waveshare35lcd(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare35lcd, self).__init__(config, 'waveshare35lcd') super(Waveshare35lcd, self).__init__(config, 'waveshare35lcd')
self._display = None
def layout(self): def layout(self):
fonts.setup(12, 10, 12, 70, 25, 9) fonts.setup(12, 10, 12, 70, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare3in0g(DisplayImpl): class Waveshare3in0g(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare3in0g, self).__init__(config, 'waveshare3in0g') super(Waveshare3in0g, self).__init__(config, 'waveshare3in0g')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 8, 10, 18, 25, 9) fonts.setup(10, 8, 10, 18, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare3in52(DisplayImpl): class Waveshare3in52(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare3in52, self).__init__(config, 'waveshare3in52') super(Waveshare3in52, self).__init__(config, 'waveshare3in52')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 8, 10, 18, 25, 9) fonts.setup(10, 8, 10, 18, 25, 9)

View File

@ -9,7 +9,6 @@ import os, time
class Waveshare35lcd(DisplayImpl): class Waveshare35lcd(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare35lcd, self).__init__(config, 'waveshare35lcd') super(Waveshare35lcd, self).__init__(config, 'waveshare35lcd')
self._display = None
def layout(self): def layout(self):
fonts.setup(12, 10, 12, 70, 25, 9) fonts.setup(12, 10, 12, 70, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare3in7(DisplayImpl): class Waveshare3in7(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare3in7, self).__init__(config, 'waveshare3in7') super(Waveshare3in7, self).__init__(config, 'waveshare3in7')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 8, 10, 18, 25, 9) fonts.setup(10, 8, 10, 18, 25, 9)
@ -39,7 +38,7 @@ class Waveshare3in7(DisplayImpl):
self._display.Clear(0) self._display.Clear(0)
def render(self, canvas): def render(self, canvas):
self._display.display(canvas) self._display.display_4Gray(canvas)
def clear(self): def clear(self):
self._display.Clear(0) self._display.Clear(0)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare4in01f(DisplayImpl): class Waveshare4in01f(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare4in01f, self).__init__(config, 'waveshare4in01f') super(Waveshare4in01f, self).__init__(config, 'waveshare4in01f')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 8, 10, 18, 25, 9) fonts.setup(10, 8, 10, 18, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare4in2(DisplayImpl): class Waveshare4in2(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare4in2, self).__init__(config, 'waveshare4in2') super(Waveshare4in2, self).__init__(config, 'waveshare4in2')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 8, 10, 18, 25, 9) fonts.setup(10, 8, 10, 18, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare4in26(DisplayImpl): class Waveshare4in26(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare4in26, self).__init__(config, 'waveshare4in26') super(Waveshare4in26, self).__init__(config, 'waveshare4in26')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 8, 10, 18, 25, 9) fonts.setup(10, 8, 10, 18, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare4in2V2(DisplayImpl): class Waveshare4in2V2(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare4in2V2, self).__init__(config, 'waveshare4in2_v2') super(Waveshare4in2V2, self).__init__(config, 'waveshare4in2_v2')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 8, 10, 18, 25, 9) fonts.setup(10, 8, 10, 18, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare4in2bV2(DisplayImpl): class Waveshare4in2bV2(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare4in2bV2, self).__init__(config, 'waveshare4in2b_v2') super(Waveshare4in2bV2, self).__init__(config, 'waveshare4in2b_v2')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 8, 10, 18, 25, 9) fonts.setup(10, 8, 10, 18, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare4in2bc(DisplayImpl): class Waveshare4in2bc(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare4in2bc, self).__init__(config, 'waveshare4in2bc') super(Waveshare4in2bc, self).__init__(config, 'waveshare4in2bc')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 8, 10, 18, 25, 9) fonts.setup(10, 8, 10, 18, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare4in37g(DisplayImpl): class Waveshare4in37g(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare4in37g, self).__init__(config, 'waveshare4in37g') super(Waveshare4in37g, self).__init__(config, 'waveshare4in37g')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 8, 10, 18, 25, 9) fonts.setup(10, 8, 10, 18, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare5in65f(DisplayImpl): class Waveshare5in65f(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare5in65f, self).__init__(config, 'waveshare5in65f') super(Waveshare5in65f, self).__init__(config, 'waveshare5in65f')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 8, 10, 18, 25, 9) fonts.setup(10, 8, 10, 18, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare5in83(DisplayImpl): class Waveshare5in83(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare5in83, self).__init__(config, 'waveshare5in83') super(Waveshare5in83, self).__init__(config, 'waveshare5in83')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 8, 10, 18, 25, 9) fonts.setup(10, 8, 10, 18, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare5in83V2(DisplayImpl): class Waveshare5in83V2(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare5in83V2, self).__init__(config, 'waveshare5in83_v2') super(Waveshare5in83V2, self).__init__(config, 'waveshare5in83_v2')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 8, 10, 18, 25, 9) fonts.setup(10, 8, 10, 18, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare5in83bV2(DisplayImpl): class Waveshare5in83bV2(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare5in83bV2, self).__init__(config, 'waveshare5in83b_v2') super(Waveshare5in83bV2, self).__init__(config, 'waveshare5in83b_v2')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 8, 10, 18, 25, 9) fonts.setup(10, 8, 10, 18, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare5in83bc(DisplayImpl): class Waveshare5in83bc(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare5in83bc, self).__init__(config, 'waveshare5in83bc') super(Waveshare5in83bc, self).__init__(config, 'waveshare5in83bc')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 8, 10, 18, 25, 9) fonts.setup(10, 8, 10, 18, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare7in3f(DisplayImpl): class Waveshare7in3f(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare7in3f, self).__init__(config, 'waveshare7in3f') super(Waveshare7in3f, self).__init__(config, 'waveshare7in3f')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 8, 10, 18, 25, 9) fonts.setup(10, 8, 10, 18, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare7in3g(DisplayImpl): class Waveshare7in3g(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare7in3g, self).__init__(config, 'waveshare7in3g') super(Waveshare7in3g, self).__init__(config, 'waveshare7in3g')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 8, 10, 18, 25, 9) fonts.setup(10, 8, 10, 18, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare7in5(DisplayImpl): class Waveshare7in5(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare7in5, self).__init__(config, 'waveshare7in5') super(Waveshare7in5, self).__init__(config, 'waveshare7in5')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 8, 10, 18, 25, 9) fonts.setup(10, 8, 10, 18, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare7in5HD(DisplayImpl): class Waveshare7in5HD(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare7in5HD, self).__init__(config, 'waveshare7in5_HD') super(Waveshare7in5HD, self).__init__(config, 'waveshare7in5_HD')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 8, 10, 18, 25, 9) fonts.setup(10, 8, 10, 18, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare7in5V2(DisplayImpl): class Waveshare7in5V2(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare7in5V2, self).__init__(config, 'waveshare7in5_v2') super(Waveshare7in5V2, self).__init__(config, 'waveshare7in5_v2')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 8, 10, 18, 25, 9) fonts.setup(10, 8, 10, 18, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare7in5bHD(DisplayImpl): class Waveshare7in5bHD(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare7in5bHD, self).__init__(config, 'waveshare7in5b_HD') super(Waveshare7in5bHD, self).__init__(config, 'waveshare7in5b_HD')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 8, 10, 18, 25, 9) fonts.setup(10, 8, 10, 18, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare7in5bV2(DisplayImpl): class Waveshare7in5bV2(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare7in5bV2, self).__init__(config, 'waveshare7in5b_v2') super(Waveshare7in5bV2, self).__init__(config, 'waveshare7in5b_v2')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 8, 10, 18, 25, 9) fonts.setup(10, 8, 10, 18, 25, 9)

View File

@ -7,7 +7,6 @@ from pwnagotchi.ui.hw.base import DisplayImpl
class Waveshare7in5bc(DisplayImpl): class Waveshare7in5bc(DisplayImpl):
def __init__(self, config): def __init__(self, config):
super(Waveshare7in5bc, self).__init__(config, 'waveshare7in5bc') super(Waveshare7in5bc, self).__init__(config, 'waveshare7in5bc')
self._display = None
def layout(self): def layout(self):
fonts.setup(10, 8, 10, 18, 25, 9) fonts.setup(10, 8, 10, 18, 25, 9)