update epdconfig to fix bug
This commit is contained in:
		| @@ -4,12 +4,12 @@ | |||||||
| * | Function    :   Hardware underlying interface | * | Function    :   Hardware underlying interface | ||||||
| * | Info        : | * | Info        : | ||||||
| *---------------- | *---------------- | ||||||
| * | This version:   V1.0 | * | This version:   V1.2 | ||||||
| * | Date        :   2019-06-21 | * | Date        :   2022-10-29 | ||||||
| * | Info        : | * | Info        : | ||||||
| ****************************************************************************** |  | ||||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | 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 | in the Software without restriction, including without limitation the rights | ||||||
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||||
| copies of the Software, and to permit persons to  whom the Software is | copies of the Software, and to permit persons to  whom the Software is | ||||||
| @@ -29,6 +29,7 @@ THE SOFTWARE. | |||||||
|  |  | ||||||
| import logging | import logging | ||||||
| import os | import os | ||||||
|  | import subprocess | ||||||
| import sys | import sys | ||||||
| import time | import time | ||||||
|  |  | ||||||
| @@ -41,21 +42,52 @@ class RaspberryPi: | |||||||
|     DC_PIN = 25 |     DC_PIN = 25 | ||||||
|     CS_PIN = 8 |     CS_PIN = 8 | ||||||
|     BUSY_PIN = 24 |     BUSY_PIN = 24 | ||||||
|  |     PWR_PIN = 18 | ||||||
|  |  | ||||||
|     def __init__(self): |     def __init__(self): | ||||||
|         import spidev |         import spidev | ||||||
|         import RPi.GPIO |         import gpiozero | ||||||
|  |  | ||||||
|         self.GPIO = RPi.GPIO |         self.SPI = spidev.SpiDev() | ||||||
|  |         self.GPIO_RST_PIN = gpiozero.LED(self.RST_PIN) | ||||||
|         # SPI device, bus = 0, device = 0 |         self.GPIO_DC_PIN = gpiozero.LED(self.DC_PIN) | ||||||
|         self.SPI = spidev.SpiDev(0, 0) |         # 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): |     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): |     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): |     def delay_ms(self, delaytime): | ||||||
|         time.sleep(delaytime / 1000.0) |         time.sleep(delaytime / 1000.0) | ||||||
| @@ -63,26 +95,33 @@ class RaspberryPi: | |||||||
|     def spi_writebyte(self, data): |     def spi_writebyte(self, data): | ||||||
|         self.SPI.writebytes(data) |         self.SPI.writebytes(data) | ||||||
|  |  | ||||||
|  |     def spi_writebyte2(self, data): | ||||||
|  |         self.SPI.writebytes2(data) | ||||||
|  |  | ||||||
|     def module_init(self): |     def module_init(self): | ||||||
|         self.GPIO.setmode(self.GPIO.BCM) |         self.GPIO_PWR_PIN.on() | ||||||
|         self.GPIO.setwarnings(False) |  | ||||||
|         self.GPIO.setup(self.RST_PIN, self.GPIO.OUT) |         # SPI device, bus = 0, device = 0 | ||||||
|         self.GPIO.setup(self.DC_PIN, self.GPIO.OUT) |         self.SPI.open(0, 0) | ||||||
|         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.max_speed_hz = 4000000 | ||||||
|         self.SPI.mode = 0b00 |         self.SPI.mode = 0b00 | ||||||
|         return 0 |         return 0 | ||||||
|  |  | ||||||
|     def module_exit(self): |     def module_exit(self): | ||||||
|         logger.debug("spi end") |         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 ...") |         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: | class JetsonNano: | ||||||
| @@ -91,6 +130,7 @@ class JetsonNano: | |||||||
|     DC_PIN = 25 |     DC_PIN = 25 | ||||||
|     CS_PIN = 8 |     CS_PIN = 8 | ||||||
|     BUSY_PIN = 24 |     BUSY_PIN = 24 | ||||||
|  |     PWR_PIN = 18 | ||||||
|  |  | ||||||
|     def __init__(self): |     def __init__(self): | ||||||
|         import ctypes |         import ctypes | ||||||
| @@ -123,13 +163,21 @@ class JetsonNano: | |||||||
|     def spi_writebyte(self, data): |     def spi_writebyte(self, data): | ||||||
|         self.SPI.SYSFS_software_spi_transfer(data[0]) |         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): |     def module_init(self): | ||||||
|         self.GPIO.setmode(self.GPIO.BCM) |         self.GPIO.setmode(self.GPIO.BCM) | ||||||
|         self.GPIO.setwarnings(False) |         self.GPIO.setwarnings(False) | ||||||
|         self.GPIO.setup(self.RST_PIN, self.GPIO.OUT) |         self.GPIO.setup(self.RST_PIN, self.GPIO.OUT) | ||||||
|         self.GPIO.setup(self.DC_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.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.setup(self.BUSY_PIN, self.GPIO.IN) | ||||||
|  |  | ||||||
|  |         self.GPIO.output(self.PWR_PIN, 1) | ||||||
|  |  | ||||||
|         self.SPI.SYSFS_software_spi_begin() |         self.SPI.SYSFS_software_spi_begin() | ||||||
|         return 0 |         return 0 | ||||||
|  |  | ||||||
| @@ -140,16 +188,93 @@ class JetsonNano: | |||||||
|         logger.debug("close 5V, Module enters 0 power consumption ...") |         logger.debug("close 5V, Module enters 0 power consumption ...") | ||||||
|         self.GPIO.output(self.RST_PIN, 0) |         self.GPIO.output(self.RST_PIN, 0) | ||||||
|         self.GPIO.output(self.DC_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() |     implementation = RaspberryPi() | ||||||
|  | elif os.path.exists('/sys/bus/platform/drivers/gpio-x3'): | ||||||
|  |     implementation = SunriseX3() | ||||||
| else: | else: | ||||||
|     implementation = JetsonNano() |     implementation = JetsonNano() | ||||||
|  |  | ||||||
| for func in [x for x in dir(implementation) if not x.startswith('_')]: | for func in [x for x in dir(implementation) if not x.startswith('_')]: | ||||||
|     setattr(sys.modules[__name__], func, getattr(implementation, func)) |     setattr(sys.modules[__name__], func, getattr(implementation, func)) | ||||||
|  |  | ||||||
| ### END OF FILE ### |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user