129 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			129 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """
 | |
| * | File        :	  epdconfig.py
 | |
| * | Author      :   Waveshare team
 | |
| * | Function    :   Hardware underlying interface
 | |
| * | Info        :
 | |
| *----------------
 | |
| * | This version:   V1.2
 | |
| * | Date        :   2022-10-29
 | |
| * | Info        :
 | |
| 
 | |
| Permission is hereby granted, free of charge, to any person obtaining a copy
 | |
| of this software and associated documentation files (the "Software"), to deal
 | |
| in the Software without restriction, including without limitation the rights
 | |
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | |
| copies of the Software, and to permit persons to  whom the Software is
 | |
| furished to do so, subject to the following conditions:
 | |
| 
 | |
| The above copyright notice and this permission notice shall be included in
 | |
| all copies or substantial portions of the Software.
 | |
| 
 | |
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | |
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | |
| FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | |
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | |
| LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | |
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | |
| THE SOFTWARE.
 | |
| """
 | |
| 
 | |
| import logging
 | |
| import sys
 | |
| import time
 | |
| 
 | |
| logger = logging.getLogger(__name__)
 | |
| 
 | |
| 
 | |
| class RaspberryPi:
 | |
|     # Pin definition
 | |
|     RST_PIN = 17
 | |
|     DC_PIN = 25
 | |
|     CS_PIN = 8
 | |
|     BUSY_PIN = 24
 | |
|     PWR_PIN = 18
 | |
| 
 | |
|     def __init__(self):
 | |
|         import spidev
 | |
|         import gpiozero
 | |
| 
 | |
|         self.SPI = spidev.SpiDev()
 | |
|         self.GPIO_RST_PIN = gpiozero.LED(self.RST_PIN)
 | |
|         self.GPIO_DC_PIN = gpiozero.LED(self.DC_PIN)
 | |
|         # self.GPIO_CS_PIN     = gpiozero.LED(self.CS_PIN)
 | |
|         self.GPIO_PWR_PIN = gpiozero.LED(self.PWR_PIN)
 | |
|         self.GPIO_BUSY_PIN = gpiozero.Button(self.BUSY_PIN, pull_up=False)
 | |
| 
 | |
|     def digital_write(self, pin, value):
 | |
|         if pin == self.RST_PIN:
 | |
|             if value:
 | |
|                 self.GPIO_RST_PIN.on()
 | |
|             else:
 | |
|                 self.GPIO_RST_PIN.off()
 | |
|         elif pin == self.DC_PIN:
 | |
|             if value:
 | |
|                 self.GPIO_DC_PIN.on()
 | |
|             else:
 | |
|                 self.GPIO_DC_PIN.off()
 | |
|         # elif pin == self.CS_PIN:
 | |
|         #     if value:
 | |
|         #         self.GPIO_CS_PIN.on()
 | |
|         #     else:
 | |
|         #         self.GPIO_CS_PIN.off()
 | |
|         elif pin == self.PWR_PIN:
 | |
|             if value:
 | |
|                 self.GPIO_PWR_PIN.on()
 | |
|             else:
 | |
|                 self.GPIO_PWR_PIN.off()
 | |
| 
 | |
|     def digital_read(self, pin):
 | |
|         if pin == self.BUSY_PIN:
 | |
|             return self.GPIO_BUSY_PIN.value
 | |
|         elif pin == self.RST_PIN:
 | |
|             return self.RST_PIN.value
 | |
|         elif pin == self.DC_PIN:
 | |
|             return self.DC_PIN.value
 | |
|         # elif pin == self.CS_PIN:
 | |
|         #     return self.CS_PIN.value
 | |
|         elif pin == self.PWR_PIN:
 | |
|             return self.PWR_PIN.value
 | |
| 
 | |
|     def delay_ms(self, delaytime):
 | |
|         time.sleep(delaytime / 1000.0)
 | |
| 
 | |
|     def spi_writebyte(self, data):
 | |
|         self.SPI.writebytes(data)
 | |
| 
 | |
|     def spi_writebyte2(self, data):
 | |
|         self.SPI.writebytes2(data)
 | |
| 
 | |
|     def module_init(self):
 | |
|         self.GPIO_PWR_PIN.on()
 | |
| 
 | |
|         # SPI device, bus = 0, device = 0
 | |
|         self.SPI.open(0, 0)
 | |
|         self.SPI.max_speed_hz = 4000000
 | |
|         self.SPI.mode = 0b00
 | |
|         return 0
 | |
| 
 | |
|     def module_exit(self, cleanup=False):
 | |
|         logger.debug("spi end")
 | |
|         self.SPI.close()
 | |
| 
 | |
|         self.GPIO_RST_PIN.off()
 | |
|         self.GPIO_DC_PIN.off()
 | |
|         self.GPIO_PWR_PIN.off()
 | |
|         logger.debug("close 5V, Module enters 0 power consumption ...")
 | |
| 
 | |
|         if cleanup:
 | |
|             self.GPIO_RST_PIN.close()
 | |
|             self.GPIO_DC_PIN.close()
 | |
|             # self.GPIO_CS_PIN.close()
 | |
|             self.GPIO_PWR_PIN.close()
 | |
|             self.GPIO_BUSY_PIN.close()
 | |
| 
 | |
| 
 | |
| implementation = RaspberryPi()
 | |
| 
 | |
| for func in [x for x in dir(implementation) if not x.startswith('_')]:
 | |
|     setattr(sys.modules[__name__], func, getattr(implementation, func))
 |