|
|
@@ -1,160 +1,160 @@
|
|
|
-# /*****************************************************************************
|
|
|
-# * | 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
|
|
|
-
|
|
|
-logger = logging.getLogger(__name__)
|
|
|
-
|
|
|
-
|
|
|
-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
|
|
|
- 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):
|
|
|
- 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)
|
|
|
-
|
|
|
- # 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()
|
|
|
-
|
|
|
- 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 ###
|
|
|
+# /*****************************************************************************
|
|
|
+# * | 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
|
|
|
+
|
|
|
+logger = logging.getLogger(__name__)
|
|
|
+
|
|
|
+
|
|
|
+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
|
|
|
+ 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):
|
|
|
+ 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)
|
|
|
+
|
|
|
+ # 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()
|
|
|
+
|
|
|
+ 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([self.RST_PIN, self.DC_PIN, self.CS_PIN, self.BUSY_PIN])
|
|
|
+
|
|
|
+
|
|
|
+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([self.RST_PIN, self.DC_PIN, self.CS_PIN, self.BUSY_PIN])
|
|
|
+
|
|
|
+
|
|
|
+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 ###
|