92 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #!/usr/bin/python3
 | |
| # -*- coding: utf-8 -*-
 | |
| """
 | |
| Inky-Calendar epaper functions
 | |
| Copyright by aceisace
 | |
| """
 | |
| class Display:
 | |
|   """Display class for inkycal
 | |
|   Handles rendering on display"""
 | |
| 
 | |
|   _allowed_models = []
 | |
| 
 | |
|   def __init__(self, epaper_model, supports_colour = False):
 | |
|     """Load the drivers for this epaper model"""
 | |
| 
 | |
|     self.supports_colour = supports_colour
 | |
|     
 | |
|     try:
 | |
|       importer = 'from inkycal.display.drivers import {} as driver'.format(
 | |
|         epaper_model)
 | |
|       exec(importer)
 | |
|       
 | |
|     except ModuleNotFoundError:
 | |
|       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"""
 | |
| 
 | |
|       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')
 | |
| 
 | |
|       print('Sending E-Paper to deep sleep...', end = '')
 | |
|       epaper.sleep()
 | |
|       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
 | |
|       epaper.init()
 | |
| 
 | |
|       white = Image.new('1', (display_width, display_height), 'white')
 | |
|       black = Image.new('1', (display_width, display_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, 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))
 | |
| 
 | |
|         print('-----------Calibration complete----------')
 | |
|         epaper.sleep()
 | |
| 
 | |
| 
 |