From 3b3c42cec737161c882f1100d8e0662a1eaa4dc8 Mon Sep 17 00:00:00 2001 From: Ace Date: Sat, 30 May 2020 00:48:12 +0200 Subject: [PATCH] minor improvements --- inkycal/display/epaper.py | 134 ++++++++++++++++++++------------------ 1 file changed, 70 insertions(+), 64 deletions(-) diff --git a/inkycal/display/epaper.py b/inkycal/display/epaper.py index b415847..3af2517 100644 --- a/inkycal/display/epaper.py +++ b/inkycal/display/epaper.py @@ -4,88 +4,94 @@ Inky-Calendar epaper functions Copyright by aceisace """ +from importlib import import_module +from PIL import Image + + class Display: """Display class for inkycal Handles rendering on display""" - _allowed_models = [] - - def __init__(self, epaper_model, supports_colour = False): + def __init__(self, epaper_model): """Load the drivers for this epaper model""" + if 'colour' in epaper_model: + self.supports_colour = True + else: + self.supports_colour = False - self.supports_colour = supports_colour - try: - importer = 'from inkycal.display.drivers import {} as driver'.format( - epaper_model) - exec(importer) - - except ModuleNotFoundError: + driver_path = 'inkycal.display.drivers.{}'.format(epaper_model) + driver = import_module(driver_path) + self._epaper = driver.EPD() + + except ImportError: raise Exception('This module is not supported. Check your spellings?') - + except FileNotFoundError: raise Exception('SPI could not be found. Please check if SPI is enabled') - self._epaper = driver.EPD() - - def render(self, im_black, im_colour = None): - """Render an image on the epaper - im_colour is required for three-colour epapers""" + self._epaper.init() + self._epaper.sleep() - epaper = self._epaper - - if self.supports_colour == False: - print('Initialising..', end = '') - epaper.init() - print('Updating display......', end = '') - epaper.display(epaper.getbuffer(im_black)) - print('Done') - - elif self.supports_colour == True: - if not im_colour: - raise Exception('im_colour is required for coloured epaper displays') - print('Initialising..', end = '') - epaper.init() - print('Updating display......', end = '') - epaper.display(epaper.getbuffer(im_black)) - print('Done') + def render(self, im_black, im_colour = None): + """Render an image on the epaper + im_colour is required for three-colour epapers""" - print('Sending E-Paper to deep sleep...', end = '') - epaper.sleep() + epaper = self._epaper + + if self.supports_colour == False: + print('Initialising..', end = '') + epaper.init() + print('Updating display......', end = '') + epaper.display(epaper.getbuffer(im_black)) print('Done') - def calibrate(self, cycles=3): - """Flush display with single colour to prevent burn-ins (ghosting) - cycles -> int. How many times should each colour be flushed? - recommended cycles = 3""" - - epaper = self._epaper + elif self.supports_colour == True: + if not im_colour: + raise Exception('im_colour is required for coloured epaper displays') + print('Initialising..', end = '') epaper.init() + print('Updating display......', end = '') + epaper.display(epaper.getbuffer(im_black), epaper.getbuffer(im_colour)) + print('Done') - white = Image.new('1', (display_width, display_height), 'white') - black = Image.new('1', (display_width, display_height), 'black') + print('Sending E-Paper to deep sleep...', end = '') + epaper.sleep() + print('Done') - print('----------Started calibration of ePaper display----------') - if self.supports_colour == True: - for _ in range(cycles): - print('Calibrating...', end= ' ') - print('black...', end= ' ') - epaper.display(epaper.getbuffer(black), epaper.getbuffer(white)) - print('colour...', end = ' ') - epaper.display(epaper.getbuffer(white), epaper.getbuffer(black)) - print('white...') - epaper.display(epaper.getbuffer(white), epaper.getbuffer(white)) - print('Cycle {0} of {1} complete'.format(_+1, no_of_cycles)) - if self.supports_colour == False: - for _ in range(no_of_cycles): - print('Calibrating...', end= ' ') - print('black...', end = ' ') - epaper.display(epaper.getbuffer(black)) - print('white...') - epaper.display(epaper.getbuffer(white)), - print('Cycle {0} of {1} complete'.format(_+1, no_of_cycles)) + def calibrate(self, cycles=3): + """Flush display with single colour to prevent burn-ins (ghosting) + cycles -> int. How many times should each colour be flushed? + recommended cycles = 3""" - print('-----------Calibration complete----------') - epaper.sleep() + epaper = self._epaper + epaper.init() + + white = Image.new('1', (epaper.width, epaper.height), 'white') + black = Image.new('1', (epaper.width, epaper.height), 'black') + + print('----------Started calibration of ePaper display----------') + if self.supports_colour == True: + for _ in range(cycles): + print('Calibrating...', end= ' ') + print('black...', end= ' ') + epaper.display(epaper.getbuffer(black), epaper.getbuffer(white)) + print('colour...', end = ' ') + epaper.display(epaper.getbuffer(white), epaper.getbuffer(black)) + print('white...') + epaper.display(epaper.getbuffer(white), epaper.getbuffer(white)) + print('Cycle {0} of {1} complete'.format(_+1, cycles)) + + if self.supports_colour == False: + for _ in range(cycles): + print('Calibrating...', end= ' ') + print('black...', end = ' ') + epaper.display(epaper.getbuffer(black)) + print('white...') + epaper.display(epaper.getbuffer(white)), + print('Cycle {0} of {1} complete'.format(_+1, cycles)) + + print('-----------Calibration complete----------') + epaper.sleep()