44 lines
1.0 KiB
Python
44 lines
1.0 KiB
Python
from util import *
|
|
import time
|
|
|
|
def burst_read(spi, addr, length):
|
|
"""Read multiple bytes"""
|
|
READ_SINGLE = get_addr["READ_SINGLE"]
|
|
READ_BURST = get_addr["READ_BURST"]
|
|
return spi.xfer2([addr | READ_SINGLE | READ_BURST] + [0x00] * length)
|
|
|
|
|
|
|
|
def read_fifo(spi):
|
|
# Burst read RX FIFO
|
|
READ_BURST = get_addr("READ_BURST")
|
|
RXFIFO = get_addr("RXFIFO")
|
|
fifo = spi.xfer2([RXFIFO | READ_BURST] + [0x00]*64) # Max 64 bytes
|
|
return fifo[1:]
|
|
|
|
|
|
def receive_packet(spi):
|
|
# Flush RX FIFO
|
|
SFRX = get_addr("SFRX")
|
|
strobe(spi, SFRX) # SFRX
|
|
|
|
SRX = get_addr( "SRX")
|
|
# Go into RX mode
|
|
strobe(spi, SRX) # SRX
|
|
|
|
# Wait for data (use GDO0 in real app)
|
|
time.sleep(0.5)
|
|
|
|
# Check RXBYTES
|
|
RXBYTES = get_addr( "RXBYTES")
|
|
rx_bytes = read_register(spi, RXBYTES) & 0x7F
|
|
if rx_bytes == 0:
|
|
print("No data received.")
|
|
return None
|
|
|
|
# Read data
|
|
# RXFIFO = get_addr("RXFIFO")
|
|
data = read_fifo(spi) # 0x3F = RX FIFO
|
|
print(f"Received: {data}")
|
|
return data
|