| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -3,6 +3,7 @@ from time import sleep
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					from math import cos, sin, pi, radians
 | 
					 | 
					 | 
					 | 
					from math import cos, sin, pi, radians
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					from sys import implementation
 | 
					 | 
					 | 
					 | 
					from sys import implementation
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					from framebuf import FrameBuffer, RGB565  # type: ignore
 | 
					 | 
					 | 
					 | 
					from framebuf import FrameBuffer, RGB565  # type: ignore
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					from micropython import const  # type: ignore
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					def color565(r, g, b):
 | 
					 | 
					 | 
					 | 
					def color565(r, g, b):
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -88,8 +89,8 @@ class Display(object):
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        270: 0x28
 | 
					 | 
					 | 
					 | 
					        270: 0x28
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    }
 | 
					 | 
					 | 
					 | 
					    }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    def __init__(self, spi, cs, dc, rst,
 | 
					 | 
					 | 
					 | 
					    def __init__(self, spi, cs, dc, rst, width=240, height=320, rotation=0,
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                 width=240, height=320, rotation=0):
 | 
					 | 
					 | 
					 | 
					                 bgr=True, gamma=True):
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        """Initialize OLED.
 | 
					 | 
					 | 
					 | 
					        """Initialize OLED.
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        Args:
 | 
					 | 
					 | 
					 | 
					        Args:
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -100,6 +101,8 @@ class Display(object):
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            width (Optional int): Screen width (default 240)
 | 
					 | 
					 | 
					 | 
					            width (Optional int): Screen width (default 240)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            height (Optional int): Screen height (default 320)
 | 
					 | 
					 | 
					 | 
					            height (Optional int): Screen height (default 320)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            rotation (Optional int): Rotation must be 0 default, 90. 180 or 270
 | 
					 | 
					 | 
					 | 
					            rotation (Optional int): Rotation must be 0 default, 90. 180 or 270
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            bgr (Optional bool): Swaps red and blue colors (default True)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            gamma (Optional bool): Custom gamma correction (default True)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        """
 | 
					 | 
					 | 
					 | 
					        """
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        self.spi = spi
 | 
					 | 
					 | 
					 | 
					        self.spi = spi
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        self.cs = cs
 | 
					 | 
					 | 
					 | 
					        self.cs = cs
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -111,6 +114,8 @@ class Display(object):
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            raise RuntimeError('Rotation must be 0, 90, 180 or 270.')
 | 
					 | 
					 | 
					 | 
					            raise RuntimeError('Rotation must be 0, 90, 180 or 270.')
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        else:
 | 
					 | 
					 | 
					 | 
					        else:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            self.rotation = self.ROTATE[rotation]
 | 
					 | 
					 | 
					 | 
					            self.rotation = self.ROTATE[rotation]
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            if not bgr:  # Clear BGR bit
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                self.rotation &= 0b11110111
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        # Initialize GPIO pins and set implementation specific methods
 | 
					 | 
					 | 
					 | 
					        # Initialize GPIO pins and set implementation specific methods
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        if implementation.name == 'circuitpython':
 | 
					 | 
					 | 
					 | 
					        if implementation.name == 'circuitpython':
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -148,10 +153,13 @@ class Display(object):
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        self.write_cmd(self.DFUNCTR, 0x08, 0x82, 0x27)
 | 
					 | 
					 | 
					 | 
					        self.write_cmd(self.DFUNCTR, 0x08, 0x82, 0x27)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        self.write_cmd(self.ENABLE3G, 0x00)  # Enable 3 gamma ctrl
 | 
					 | 
					 | 
					 | 
					        self.write_cmd(self.ENABLE3G, 0x00)  # Enable 3 gamma ctrl
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        self.write_cmd(self.GAMMASET, 0x01)  # Gamma curve selected
 | 
					 | 
					 | 
					 | 
					        self.write_cmd(self.GAMMASET, 0x01)  # Gamma curve selected
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        self.write_cmd(self.GMCTRP1, 0x0F, 0x31, 0x2B, 0x0C, 0x0E, 0x08, 0x4E,
 | 
					 | 
					 | 
					 | 
					        if gamma:  # Use custom gamma correction values
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                       0xF1, 0x37, 0x07, 0x10, 0x03, 0x0E, 0x09, 0x00)
 | 
					 | 
					 | 
					 | 
					            self.write_cmd(self.GMCTRP1, 0x0F, 0x31, 0x2B, 0x0C, 0x0E, 0x08,
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        self.write_cmd(self.GMCTRN1, 0x00, 0x0E, 0x14, 0x03, 0x11, 0x07, 0x31,
 | 
					 | 
					 | 
					 | 
					                           0x4E, 0xF1, 0x37, 0x07, 0x10, 0x03, 0x0E, 0x09,
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                       0xC1, 0x48, 0x08, 0x0F, 0x0C, 0x31, 0x36, 0x0F)
 | 
					 | 
					 | 
					 | 
					                           0x00)
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            self.write_cmd(self.GMCTRN1, 0x00, 0x0E, 0x14, 0x03, 0x11, 0x07,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                           0x31, 0xC1, 0x48, 0x08, 0x0F, 0x0C, 0x31, 0x36,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                           0x0F)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        self.write_cmd(self.SLPOUT)  # Exit sleep
 | 
					 | 
					 | 
					 | 
					        self.write_cmd(self.SLPOUT)  # Exit sleep
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        sleep(.1)
 | 
					 | 
					 | 
					 | 
					        sleep(.1)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        self.write_cmd(self.DISPLAY_ON)  # Display on
 | 
					 | 
					 | 
					 | 
					        self.write_cmd(self.DISPLAY_ON)  # Display on
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -897,6 +905,17 @@ class Display(object):
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                       chunk_x + remainder - 1, y + h - 1,
 | 
					 | 
					 | 
					 | 
					                       chunk_x + remainder - 1, y + h - 1,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                       buf)
 | 
					 | 
					 | 
					 | 
					                       buf)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    def invert(self, enable=True):
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        """Enables or disables inversion of display colors.
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        Args:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            enable (Optional bool): True=enable, False=disable
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        """
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        if enable:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            self.write_cmd(self.INVON)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        else:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            self.write_cmd(self.INVOFF)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    def is_off_grid(self, xmin, ymin, xmax, ymax):
 | 
					 | 
					 | 
					 | 
					    def is_off_grid(self, xmin, ymin, xmax, ymax):
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        """Check if coordinates extend past display boundaries.
 | 
					 | 
					 | 
					 | 
					        """Check if coordinates extend past display boundaries.
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
 
 |