2
									
								
								.github/workflows/test-on-rpi.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/test-on-rpi.yml
									
									
									
									
										vendored
									
									
								
							| @@ -29,7 +29,7 @@ jobs: | |||||||
|           TINDIE_USERNAME: ${{ secrets.TINDIE_USERNAME }} |           TINDIE_USERNAME: ${{ secrets.TINDIE_USERNAME }} | ||||||
|         with: |         with: | ||||||
|           # Set the base_image to the desired Raspberry Pi OS version |           # 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 |           image_additional_mb: 3072 # enlarge free space to 3GB | ||||||
|           optimize_image: true |           optimize_image: true | ||||||
|           # user: inky --> not supported? |           # user: inky --> not supported? | ||||||
|   | |||||||
							
								
								
									
										6
									
								
								.github/workflows/update-os.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.github/workflows/update-os.yml
									
									
									
									
										vendored
									
									
								
							| @@ -24,8 +24,8 @@ jobs: | |||||||
|           TINDIE_USERNAME: ${{ secrets.TINDIE_USERNAME }} |           TINDIE_USERNAME: ${{ secrets.TINDIE_USERNAME }} | ||||||
|         with: |         with: | ||||||
|           # Set the base_image to the desired Raspberry Pi OS version |           # 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 |           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: 2560 # enlarge free space to 2.5 GB |           image_additional_mb: 3072 # enlarge free space to 3 GB | ||||||
|           optimize_image: true |           optimize_image: true | ||||||
|           commands: | |           commands: | | ||||||
|             cd /home |             cd /home | ||||||
| @@ -71,7 +71,7 @@ jobs: | |||||||
|             sudo dphys-swapfile swapon |             sudo dphys-swapfile swapon | ||||||
|  |  | ||||||
|             # enable SPI |             # 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 |             # 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 -' |             sudo -u inky bash -c 'echo "@reboot sleep 60 && cd /home/inky/Inkycal && venv/bin/python inky_run.py &" | crontab -' | ||||||
|   | |||||||
| @@ -120,6 +120,8 @@ following settings: | |||||||
|  |  | ||||||
| ```bash | ```bash | ||||||
| sudo raspi-config --expand-rootfs | 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 sed -i s/#dtparam=spi=on/dtparam=spi=on/ /boot/config.txt | ||||||
| sudo dpkg-reconfigure tzdata | sudo dpkg-reconfigure tzdata | ||||||
|  |  | ||||||
|   | |||||||
| @@ -124,156 +124,7 @@ class RaspberryPi: | |||||||
|             self.GPIO_BUSY_PIN.close() |             self.GPIO_BUSY_PIN.close() | ||||||
|  |  | ||||||
|  |  | ||||||
| class JetsonNano: | implementation = RaspberryPi() | ||||||
|     # 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() |  | ||||||
|  |  | ||||||
| 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)) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user