| 
									
										
										
										
											2020-01-17 17:05:50 +01:00
										 |  |  | # /***************************************************************************** | 
					
						
							|  |  |  | # * | File        :	  epdconfig.py | 
					
						
							|  |  |  | # * | Author      :   Waveshare team | 
					
						
							|  |  |  | # * | Function    :   Hardware underlying interface | 
					
						
							|  |  |  | # * | Info        : | 
					
						
							|  |  |  | # *---------------- | 
					
						
							|  |  |  | # * | This version:   V1.0 | 
					
						
							|  |  |  | # * | Date        :   2019-06-21 | 
					
						
							| 
									
										
										
										
											2020-12-05 00:16:57 +01:00
										 |  |  | # * | Info        : | 
					
						
							| 
									
										
										
										
											2020-01-17 17:05:50 +01:00
										 |  |  | # ****************************************************************************** | 
					
						
							|  |  |  | # 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 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-05 00:16:57 +01:00
										 |  |  | filename = os.path.basename(__file__).split('.py')[0] | 
					
						
							|  |  |  | logger = logging.getLogger(filename) | 
					
						
							| 
									
										
										
										
											2020-01-17 17:05:50 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-02 01:30:17 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-17 17:05:50 +01:00
										 |  |  | class RaspberryPi: | 
					
						
							|  |  |  |     # Pin definition | 
					
						
							| 
									
										
										
										
											2022-04-02 01:30:17 +02:00
										 |  |  |     RST_PIN = 17 | 
					
						
							|  |  |  |     DC_PIN = 25 | 
					
						
							|  |  |  |     CS_PIN = 8 | 
					
						
							|  |  |  |     BUSY_PIN = 24 | 
					
						
							| 
									
										
										
										
											2020-01-17 17:05:50 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     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): | 
					
						
							| 
									
										
										
										
											2020-12-05 00:16:57 +01:00
										 |  |  |         logger.debug("spi end") | 
					
						
							| 
									
										
										
										
											2022-04-02 01:30:17 +02:00
										 |  |  |         # self.SPI.close() #removed as it causes some problems | 
					
						
							| 
									
										
										
										
											2020-01-17 17:05:50 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-05 00:16:57 +01:00
										 |  |  |         logger.debug("close 5V, Module enters 0 power consumption ...") | 
					
						
							| 
									
										
										
										
											2020-01-17 17:05:50 +01:00
										 |  |  |         self.GPIO.output(self.RST_PIN, 0) | 
					
						
							|  |  |  |         self.GPIO.output(self.DC_PIN, 0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         self.GPIO.cleanup() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class JetsonNano: | 
					
						
							|  |  |  |     # Pin definition | 
					
						
							| 
									
										
										
										
											2022-04-02 01:30:17 +02:00
										 |  |  |     RST_PIN = 17 | 
					
						
							|  |  |  |     DC_PIN = 25 | 
					
						
							|  |  |  |     CS_PIN = 8 | 
					
						
							|  |  |  |     BUSY_PIN = 24 | 
					
						
							| 
									
										
										
										
											2020-01-17 17:05:50 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     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): | 
					
						
							| 
									
										
										
										
											2020-12-05 00:16:57 +01:00
										 |  |  |         logger.debug("spi end") | 
					
						
							| 
									
										
										
										
											2020-01-17 17:05:50 +01:00
										 |  |  |         self.SPI.SYSFS_software_spi_end() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-05 00:16:57 +01:00
										 |  |  |         logger.debug("close 5V, Module enters 0 power consumption ...") | 
					
						
							| 
									
										
										
										
											2020-01-17 17:05:50 +01:00
										 |  |  |         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 ### |