diff --git a/.github/workflows/test-on-rpi.yml b/.github/workflows/test-on-rpi.yml index 720a64e8..315b403c 100644 --- a/.github/workflows/test-on-rpi.yml +++ b/.github/workflows/test-on-rpi.yml @@ -29,7 +29,7 @@ jobs: TINDIE_USERNAME: ${{ secrets.TINDIE_USERNAME }} with: # Set the base_image to the desired Raspberry Pi OS version - base_image: https://downloads.raspberrypi.com/raspios_lite_armhf/images/raspios_lite_armhf-2023-12-11/2023-12-11-raspios-bookworm-armhf-lite.img.xz + base_image: https://downloads.raspberrypi.com/raspios_lite_armhf/images/raspios_lite_armhf-2024-03-15/2024-03-15-raspios-bookworm-armhf-lite.img.xz image_additional_mb: 3072 # enlarge free space to 3GB optimize_image: true # user: inky --> not supported? diff --git a/.github/workflows/update-os.yml b/.github/workflows/update-os.yml index 9ab99ec9..d4087f71 100644 --- a/.github/workflows/update-os.yml +++ b/.github/workflows/update-os.yml @@ -24,8 +24,8 @@ jobs: TINDIE_USERNAME: ${{ secrets.TINDIE_USERNAME }} with: # Set the base_image to the desired Raspberry Pi OS version - base_image: https://downloads.raspberrypi.org/raspios_lite_armhf/images/raspios_lite_armhf-2023-05-03/2023-05-03-raspios-bullseye-armhf-lite.img.xz - image_additional_mb: 2560 # enlarge free space to 2.5 GB + base_image: https://downloads.raspberrypi.com/raspios_lite_armhf/images/raspios_lite_armhf-2024-03-15/2024-03-15-raspios-bookworm-armhf-lite.img.xz + image_additional_mb: 3072 # enlarge free space to 3 GB optimize_image: true commands: | cd /home @@ -71,7 +71,7 @@ jobs: sudo dphys-swapfile swapon # enable SPI - sudo sed -i s/#dtparam=spi=on/dtparam=spi=on/ /boot/config.txt + sudo sed -i s/#dtparam=spi=on/dtparam=spi=on/ /boot/firmware/config.txt # enable inkycal start at boot sudo -u inky bash -c 'echo "@reboot sleep 60 && cd /home/inky/Inkycal && venv/bin/python inky_run.py &" | crontab -' diff --git a/README.md b/README.md index be2181b4..978aa8b3 100644 --- a/README.md +++ b/README.md @@ -120,6 +120,8 @@ following settings: ```bash sudo raspi-config --expand-rootfs +sudo sed -i s/#dtparam=spi=on/dtparam=spi=on/ /boot/firmware/config.txt +# note: on older releases, this file is located in /boot/config.txt. If you get an error saying file not found, run the command below: sudo sed -i s/#dtparam=spi=on/dtparam=spi=on/ /boot/config.txt sudo dpkg-reconfigure tzdata diff --git a/inkycal/display/drivers/epdconfig.py b/inkycal/display/drivers/epdconfig.py index c21941f7..2eaddf4f 100644 --- a/inkycal/display/drivers/epdconfig.py +++ b/inkycal/display/drivers/epdconfig.py @@ -124,156 +124,7 @@ def module_exit(self, cleanup=False): self.GPIO_BUSY_PIN.close() -class JetsonNano: - # Pin definition - RST_PIN = 17 - DC_PIN = 25 - CS_PIN = 8 - BUSY_PIN = 24 - PWR_PIN = 18 - - 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 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 - - 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.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) - - -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() +implementation = RaspberryPi() for func in [x for x in dir(implementation) if not x.startswith('_')]: setattr(sys.modules[__name__], func, getattr(implementation, func))