Import YEEP-144 library 1.2 sources

Source-only snapshot of the 1.2 release. Drivers/ (the vendored ST HAL and
CMSIS) is excluded at 173 MB; fetch it from STMicroelectronics/STM32CubeH5 to
build.
This commit is contained in:
2026-10-28 14:37:42 +00:00
commit 50e4ba8a07
56 changed files with 7718 additions and 0 deletions

67
yeepi.py Normal file
View File

@@ -0,0 +1,67 @@
import spidev
import RPi.GPIO as GPIO
global spi
PISPI_BUFFER_SIZE = 256 # Buffer size must match between Pi and STM32
# Pin number for our CS pin repurposed as a ready pin
ReadyPin = 8
# Initialise the SPI communications
# You must pass in the pigpio handle
# Speed is optional, defaults to 1MHz
def YEEPiInit(speed=1000000):
# Global these so they can be used later
global spi
spi = spidev.SpiDev() # Create SPI object
spi.open(0,0) # Open SPI bus 0 device 0
spi.max_speed_hz = speed # Set speed to inputted speed
spi.mode = 0 # Set SPI mode to 0
spi.no_cs = True # Disable chip select
GPIO.setmode(GPIO.BCM)
GPIO.setup(ReadyPin, GPIO.IN, pull_up_down=GPIO.PUD_OFF)
# Execute a transfer to YEEP, exchanging buffers
# Takes a bytearray of values and returns a bytearray
# with the received data
#
# Input data smaller than the buffer size will be padded to correct size
# with null bytes. Input data larger will be truncated
# Warnings will be printed in the cases of an array being truncated
# or if received data is blank
def YEEPiTransfer(TXBuf):
# Check that the input data is a byte array, error if not
if not isinstance(TXBuf, bytearray):
raise TypeError("Data must be byte array")
# Check if the array is larger, and delete extra entries
if len(TXBuf) > PISPI_BUFFER_SIZE:
print("Warning: Array larger than buffer size, truncating")
del TXBuf[PISPI_BUFFER_SIZE:] # Delete entries beyond buffer size
# Pad the array to the full size if required
TXBuf = TXBuf.ljust(PISPI_BUFFER_SIZE, b'\0') #Pad to buffer size with null bytes
# Wait until ready pin is asserted
while not GPIO.input(ReadyPin):
pass # Pass immediatly restarts the loop with no delay - we don't want to wait any longer than we have to
# Execute the transfer
RXBuf = spi.xfer(TXBuf)
# If the received buffer is all 0, warn the user
if sum(RXBuf) == 0:
print("Warning: Empty message received")
# Convert returned list to bytearray
return bytearray(RXBuf)
# This should be called when the program exits
def YEEPiExit():
GPIO.cleanup()