update epdconfig to fix bug
This commit is contained in:
		@@ -4,12 +4,12 @@
 | 
			
		||||
* | Function    :   Hardware underlying interface
 | 
			
		||||
* | Info        :
 | 
			
		||||
*----------------
 | 
			
		||||
* | This version:   V1.0
 | 
			
		||||
* | Date        :   2019-06-21
 | 
			
		||||
* | 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 documnetation files (the "Software"), to deal
 | 
			
		||||
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
 | 
			
		||||
@@ -29,6 +29,7 @@ THE SOFTWARE.
 | 
			
		||||
 | 
			
		||||
import logging
 | 
			
		||||
import os
 | 
			
		||||
import subprocess
 | 
			
		||||
import sys
 | 
			
		||||
import time
 | 
			
		||||
 | 
			
		||||
@@ -41,21 +42,52 @@ class RaspberryPi:
 | 
			
		||||
    DC_PIN = 25
 | 
			
		||||
    CS_PIN = 8
 | 
			
		||||
    BUSY_PIN = 24
 | 
			
		||||
    PWR_PIN = 18
 | 
			
		||||
 | 
			
		||||
    def __init__(self):
 | 
			
		||||
        import spidev
 | 
			
		||||
        import RPi.GPIO
 | 
			
		||||
        import gpiozero
 | 
			
		||||
 | 
			
		||||
        self.GPIO = RPi.GPIO
 | 
			
		||||
 | 
			
		||||
        # SPI device, bus = 0, device = 0
 | 
			
		||||
        self.SPI = spidev.SpiDev(0, 0)
 | 
			
		||||
        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):
 | 
			
		||||
        self.GPIO.output(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):
 | 
			
		||||
        return self.GPIO.input(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)
 | 
			
		||||
@@ -63,26 +95,33 @@ class RaspberryPi:
 | 
			
		||||
    def spi_writebyte(self, data):
 | 
			
		||||
        self.SPI.writebytes(data)
 | 
			
		||||
 | 
			
		||||
    def spi_writebyte2(self, data):
 | 
			
		||||
        self.SPI.writebytes2(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.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):
 | 
			
		||||
        logger.debug("spi end")
 | 
			
		||||
        # self.SPI.close() #removed as it causes some problems
 | 
			
		||||
        self.SPI.close()
 | 
			
		||||
 | 
			
		||||
        self.GPIO_RST_PIN.off()
 | 
			
		||||
        self.GPIO_DC_PIN.off()
 | 
			
		||||
        self.GPIO_PWR_PIN.off()
 | 
			
		||||
 | 
			
		||||
        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()
 | 
			
		||||
 | 
			
		||||
        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:
 | 
			
		||||
@@ -91,6 +130,7 @@ class JetsonNano:
 | 
			
		||||
    DC_PIN = 25
 | 
			
		||||
    CS_PIN = 8
 | 
			
		||||
    BUSY_PIN = 24
 | 
			
		||||
    PWR_PIN = 18
 | 
			
		||||
 | 
			
		||||
    def __init__(self):
 | 
			
		||||
        import ctypes
 | 
			
		||||
@@ -123,13 +163,21 @@ class JetsonNano:
 | 
			
		||||
    def spi_writebyte(self, data):
 | 
			
		||||
        self.SPI.SYSFS_software_spi_transfer(data[0])
 | 
			
		||||
 | 
			
		||||
    def spi_writebyte2(self, data):
 | 
			
		||||
        for i in range(len(data)):
 | 
			
		||||
            self.SPI.SYSFS_software_spi_transfer(data[i])
 | 
			
		||||
 | 
			
		||||
    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.PWR_PIN, self.GPIO.OUT)
 | 
			
		||||
        self.GPIO.setup(self.BUSY_PIN, self.GPIO.IN)
 | 
			
		||||
 | 
			
		||||
        self.GPIO.output(self.PWR_PIN, 1)
 | 
			
		||||
 | 
			
		||||
        self.SPI.SYSFS_software_spi_begin()
 | 
			
		||||
        return 0
 | 
			
		||||
 | 
			
		||||
@@ -140,16 +188,93 @@ class JetsonNano:
 | 
			
		||||
        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.output(self.PWR_PIN, 0)
 | 
			
		||||
 | 
			
		||||
        self.GPIO.cleanup()
 | 
			
		||||
        self.GPIO.cleanup([self.RST_PIN, self.DC_PIN, self.CS_PIN, self.BUSY_PIN, self.PWR_PIN])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if os.path.exists('/sys/bus/platform/drivers/gpiomem-bcm2835'):
 | 
			
		||||
class SunriseX3:
 | 
			
		||||
    # Pin definition
 | 
			
		||||
    RST_PIN = 17
 | 
			
		||||
    DC_PIN = 25
 | 
			
		||||
    CS_PIN = 8
 | 
			
		||||
    BUSY_PIN = 24
 | 
			
		||||
    PWR_PIN = 18
 | 
			
		||||
    Flag = 0
 | 
			
		||||
 | 
			
		||||
    def __init__(self):
 | 
			
		||||
        import spidev
 | 
			
		||||
        import Hobot.GPIO
 | 
			
		||||
 | 
			
		||||
        self.GPIO = Hobot.GPIO
 | 
			
		||||
        self.SPI = spidev.SpiDev()
 | 
			
		||||
 | 
			
		||||
    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 spi_writebyte2(self, data):
 | 
			
		||||
        # for i in range(len(data)):
 | 
			
		||||
        #     self.SPI.writebytes([data[i]])
 | 
			
		||||
        self.SPI.xfer3(data)
 | 
			
		||||
 | 
			
		||||
    def module_init(self):
 | 
			
		||||
        if self.Flag == 0:
 | 
			
		||||
            self.Flag = 1
 | 
			
		||||
            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.PWR_PIN, self.GPIO.OUT)
 | 
			
		||||
            self.GPIO.setup(self.BUSY_PIN, self.GPIO.IN)
 | 
			
		||||
 | 
			
		||||
            self.GPIO.output(self.PWR_PIN, 1)
 | 
			
		||||
 | 
			
		||||
            # SPI device, bus = 0, device = 0
 | 
			
		||||
            self.SPI.open(2, 0)
 | 
			
		||||
            self.SPI.max_speed_hz = 4000000
 | 
			
		||||
            self.SPI.mode = 0b00
 | 
			
		||||
            return 0
 | 
			
		||||
        else:
 | 
			
		||||
            return 0
 | 
			
		||||
 | 
			
		||||
    def module_exit(self):
 | 
			
		||||
        logger.debug("spi end")
 | 
			
		||||
        self.SPI.close()
 | 
			
		||||
 | 
			
		||||
        logger.debug("close 5V, Module enters 0 power consumption ...")
 | 
			
		||||
        self.Flag = 0
 | 
			
		||||
        self.GPIO.output(self.RST_PIN, 0)
 | 
			
		||||
        self.GPIO.output(self.DC_PIN, 0)
 | 
			
		||||
        self.GPIO.output(self.PWR_PIN, 0)
 | 
			
		||||
 | 
			
		||||
        self.GPIO.cleanup([self.RST_PIN, self.DC_PIN, self.CS_PIN, self.BUSY_PIN], self.PWR_PIN)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if sys.version_info[0] == 2:
 | 
			
		||||
    process = subprocess.Popen("cat /proc/cpuinfo | grep Raspberry", shell=True, stdout=subprocess.PIPE)
 | 
			
		||||
else:
 | 
			
		||||
    process = subprocess.Popen("cat /proc/cpuinfo | grep Raspberry", shell=True, stdout=subprocess.PIPE, text=True)
 | 
			
		||||
output, _ = process.communicate()
 | 
			
		||||
if sys.version_info[0] == 2:
 | 
			
		||||
    output = output.decode(sys.stdout.encoding)
 | 
			
		||||
 | 
			
		||||
if "Raspberry" in output:
 | 
			
		||||
    implementation = RaspberryPi()
 | 
			
		||||
elif os.path.exists('/sys/bus/platform/drivers/gpio-x3'):
 | 
			
		||||
    implementation = SunriseX3()
 | 
			
		||||
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 ###
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user