Improved reliability of syncing of OOK messages
1 parent 79b0114 commit fce4c2b768e79a51006de3e655cccaa15bb742b6
@David Whale David Whale authored on 28 Mar 2016
Showing 1 changed file
View
26
src/energenie/radio.py
 
def HRF_writefifo_burst(buf):
"""Write all bytes in buf to the payload FIFO, in a single burst"""
# Don't modify buf, in case caller reuses it
#txbuf = [ADDR_FIFO | MASK_WRITE_DATA]
#for b in buf:
# txbuf.append(b)
#print("write FIFO %s" % ashex(txbuf))
txbuf = [ADDR_FIFO | MASK_WRITE_DATA]
for b in buf:
txbuf.append(b)
print("write FIFO %s" % ashex(txbuf))
 
# This is buggy as it modifies user buffer, but it works at present
spi.select()
buf.insert(0, ADDR_FIFO | MASK_WRITE_DATA)
spi.frame(buf)
#buf.insert(0, ADDR_FIFO | MASK_WRITE_DATA)
spi.frame(txbuf)
spi.deselect()
print("written: %s" % ashex(buf))
#print("written: %s" % ashex(buf))
#import time
#time.sleep(0.25)
 
def ashex(buf):
result = []
for b in buf:
# 32 bits enclosed in sync words
#print("waiting for mode and tx ready")
HRF_pollreg(ADDR_IRQFLAGS1, MASK_MODEREADY|MASK_TXREADY, MASK_MODEREADY|MASK_TXREADY)
 
#write first payload without sync preamble
sync = [0x80,0x80,0x80,0x80]
payload = sync + payload
HRF_writefifo_burst(payload)
 
# preceed all future payloads with a sync-word preamble
preamble = [0x00,0x80,0x00,0x00,0x00]
preamble_payload = preamble + payload
# Note, payload length configured in OOK table is based on this
for i in range(8): # Repeat the message a number of times
#print("waiting for fifo empty")
HRF_pollreg(ADDR_IRQFLAGS2, MASK_FIFOLEVEL, 0)
HRF_writefifo_burst(preamble_payload)
HRF_writefifo_burst(payload)
 
#print("waiting for fifo empty")
HRF_pollreg(ADDR_IRQFLAGS2, MASK_FIFOLEVEL, 0)
#print("waiting for packet sent")