Skip to content

Commit

Permalink
update epdconfig to fix bug
Browse files Browse the repository at this point in the history
  • Loading branch information
aceisace committed Dec 21, 2023
1 parent 3f5446a commit a7c276e
Showing 1 changed file with 150 additions and 25 deletions.
175 changes: 150 additions & 25 deletions inkycal/display/drivers/epdconfig.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -29,6 +29,7 @@

import logging
import os
import subprocess
import sys
import time

Expand All @@ -41,48 +42,86 @@ class RaspberryPi:
DC_PIN = 25
CS_PIN = 8
BUSY_PIN = 24
PWR_PIN = 18

def __init__(self):
import spidev
import RPi.GPIO

self.GPIO = RPi.GPIO
import gpiozero

# 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)

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()

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_RST_PIN.off()
self.GPIO_DC_PIN.off()
self.GPIO_PWR_PIN.off()

self.GPIO.cleanup()
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 ...")


class JetsonNano:
Expand All @@ -91,6 +130,7 @@ class JetsonNano:
DC_PIN = 25
CS_PIN = 8
BUSY_PIN = 24
PWR_PIN = 18

def __init__(self):
import ctypes
Expand Down Expand Up @@ -123,13 +163,21 @@ def delay_ms(self, delaytime):
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

Expand All @@ -140,16 +188,93 @@ def module_exit(self):
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.RST_PIN, self.DC_PIN, self.CS_PIN, self.BUSY_PIN, self.PWR_PIN])


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)

self.GPIO.cleanup()

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 os.path.exists('/sys/bus/platform/drivers/gpiomem-bcm2835'):
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 ###

0 comments on commit a7c276e

Please sign in to comment.