157 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			157 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# /*****************************************************************************
 | 
						|
# * | File        :	  epdconfig.py
 | 
						|
# * | Author      :   Waveshare team
 | 
						|
# * | Function    :   Hardware underlying interface
 | 
						|
# * | Info        :
 | 
						|
# *----------------
 | 
						|
# * | This version:   V1.0
 | 
						|
# * | Date        :   2019-06-21
 | 
						|
# * | Info        :
 | 
						|
# ******************************************************************************
 | 
						|
# Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
						|
# of this software and associated documnetation 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 os
 | 
						|
import logging
 | 
						|
import sys
 | 
						|
import time
 | 
						|
 | 
						|
filename = os.path.basename(__file__).split('.py')[0]
 | 
						|
logger = logging.getLogger(filename)
 | 
						|
 | 
						|
 | 
						|
class RaspberryPi:
 | 
						|
    # Pin definition
 | 
						|
    RST_PIN = 17
 | 
						|
    DC_PIN = 25
 | 
						|
    CS_PIN = 8
 | 
						|
    BUSY_PIN = 24
 | 
						|
 | 
						|
    def __init__(self):
 | 
						|
        import spidev
 | 
						|
        import RPi.GPIO
 | 
						|
 | 
						|
        self.GPIO = RPi.GPIO
 | 
						|
 | 
						|
        # SPI device, bus = 0, device = 0
 | 
						|
        self.SPI = spidev.SpiDev(0, 0)
 | 
						|
 | 
						|
    def digital_write(self, pin, value):
 | 
						|
        self.GPIO.output(pin, value)
 | 
						|
 | 
						|
    def digital_read(self, pin):
 | 
						|
        return self.GPIO.input(pin)
 | 
						|
 | 
						|
    def delay_ms(self, delaytime):
 | 
						|
        time.sleep(delaytime / 1000.0)
 | 
						|
 | 
						|
    def spi_writebyte(self, data):
 | 
						|
        self.SPI.writebytes(data)
 | 
						|
 | 
						|
    def module_init(self):
 | 
						|
        self.GPIO.setmode(self.GPIO.BCM)
 | 
						|
        self.GPIO.setwarnings(False)
 | 
						|
        self.GPIO.setup(self.RST_PIN, self.GPIO.OUT)
 | 
						|
        self.GPIO.setup(self.DC_PIN, self.GPIO.OUT)
 | 
						|
        self.GPIO.setup(self.CS_PIN, self.GPIO.OUT)
 | 
						|
        self.GPIO.setup(self.BUSY_PIN, self.GPIO.IN)
 | 
						|
        self.SPI.max_speed_hz = 4000000
 | 
						|
        self.SPI.mode = 0b00
 | 
						|
        return 0
 | 
						|
 | 
						|
    def module_exit(self):
 | 
						|
        logger.debug("spi end")
 | 
						|
        # self.SPI.close() #removed as it causes some problems
 | 
						|
 | 
						|
        logger.debug("close 5V, Module enters 0 power consumption ...")
 | 
						|
        self.GPIO.output(self.RST_PIN, 0)
 | 
						|
        self.GPIO.output(self.DC_PIN, 0)
 | 
						|
 | 
						|
        self.GPIO.cleanup()
 | 
						|
 | 
						|
 | 
						|
class JetsonNano:
 | 
						|
    # Pin definition
 | 
						|
    RST_PIN = 17
 | 
						|
    DC_PIN = 25
 | 
						|
    CS_PIN = 8
 | 
						|
    BUSY_PIN = 24
 | 
						|
 | 
						|
    def __init__(self):
 | 
						|
        import ctypes
 | 
						|
        find_dirs = [
 | 
						|
            os.path.dirname(os.path.realpath(__file__)),
 | 
						|
            '/usr/local/lib',
 | 
						|
            '/usr/lib',
 | 
						|
        ]
 | 
						|
        self.SPI = None
 | 
						|
        for find_dir in find_dirs:
 | 
						|
            so_filename = os.path.join(find_dir, 'sysfs_software_spi.so')
 | 
						|
            if os.path.exists(so_filename):
 | 
						|
                self.SPI = ctypes.cdll.LoadLibrary(so_filename)
 | 
						|
                break
 | 
						|
        if self.SPI is None:
 | 
						|
            raise RuntimeError('Cannot find sysfs_software_spi.so')
 | 
						|
 | 
						|
        import Jetson.GPIO
 | 
						|
        self.GPIO = Jetson.GPIO
 | 
						|
 | 
						|
    def digital_write(self, pin, value):
 | 
						|
        self.GPIO.output(pin, value)
 | 
						|
 | 
						|
    def digital_read(self, pin):
 | 
						|
        return self.GPIO.input(self.BUSY_PIN)
 | 
						|
 | 
						|
    def delay_ms(self, delaytime):
 | 
						|
        time.sleep(delaytime / 1000.0)
 | 
						|
 | 
						|
    def spi_writebyte(self, data):
 | 
						|
        self.SPI.SYSFS_software_spi_transfer(data[0])
 | 
						|
 | 
						|
    def module_init(self):
 | 
						|
        self.GPIO.setmode(self.GPIO.BCM)
 | 
						|
        self.GPIO.setwarnings(False)
 | 
						|
        self.GPIO.setup(self.RST_PIN, self.GPIO.OUT)
 | 
						|
        self.GPIO.setup(self.DC_PIN, self.GPIO.OUT)
 | 
						|
        self.GPIO.setup(self.CS_PIN, self.GPIO.OUT)
 | 
						|
        self.GPIO.setup(self.BUSY_PIN, self.GPIO.IN)
 | 
						|
        self.SPI.SYSFS_software_spi_begin()
 | 
						|
        return 0
 | 
						|
 | 
						|
    def module_exit(self):
 | 
						|
        logger.debug("spi end")
 | 
						|
        self.SPI.SYSFS_software_spi_end()
 | 
						|
 | 
						|
        logger.debug("close 5V, Module enters 0 power consumption ...")
 | 
						|
        self.GPIO.output(self.RST_PIN, 0)
 | 
						|
        self.GPIO.output(self.DC_PIN, 0)
 | 
						|
 | 
						|
        self.GPIO.cleanup()
 | 
						|
 | 
						|
 | 
						|
if os.path.exists('/sys/bus/platform/drivers/gpiomem-bcm2835'):
 | 
						|
    implementation = RaspberryPi()
 | 
						|
else:
 | 
						|
    implementation = JetsonNano()
 | 
						|
 | 
						|
for func in [x for x in dir(implementation) if not x.startswith('_')]:
 | 
						|
    setattr(sys.modules[__name__], func, getattr(implementation, func))
 | 
						|
 | 
						|
### END OF FILE ###
 |