RaspyRFM/hamarx.py

78 lines
1.6 KiB
Python
Raw Normal View History

2016-05-24 00:35:15 +02:00
#!/usr/bin/env python2.7
from rfm69 import Rfm69
import rfm69
import sys
import time
#import types
#import os
rfm = Rfm69()
rfm.SetParams(
Freq = 433.944,
Datarate = 4.0, #1 / 250E-06 / 1000,
Bandwidth = 24000,
SyncPattern = [0x00, 0x08, 0x00],
RssiThresh = -80,
ModulationType = rfm69.OOK
)
def staff(byte):
res = 0
res |= (byte & 1<<7) >> 4
res |= (byte & 1<<5) >> 3
res |= (byte & 1<<3) >> 2
res |= (byte & 1<<1) >> 1
return res
def decode(bindata):
netdata = [0x00, 0x00, 0x00, 0x00]
for i in range(0, 64, 2):
if (bindata[i / 8] >> (i % 8)) & 0x01 == (bindata[i / 8] >> (i % 8 + 1)) & 0x01:
print "Error", i, hex(bindata[i / 8]), hex(bindata[i / 8] >> (i % 8))
for i in range(4):
netdata[i] = staff(bindata[i * 2]) << 4 | staff(bindata[i * 2 + 1])
print "decode: ",
for i in range(4):
print "{0:{fill}2x}".format(netdata[i], fill='0'),
print ""
while True:
data = rfm.ReceivePacket(60)
zcount = 0
bindata = []
binval = 0
binmask = 0x80
for d in data:
rawmask = 0x80
while (rawmask > 0) and (len(bindata) < 8):
if (d & rawmask) > 0:
if zcount == 1:
binval |= binmask
binmask >>= 1
if zcount == 5:
binmask >>= 1
if zcount == 11:
print "Received pause"
if zcount == 41:
print "SYNC"
zcount = 0
else:
zcount += 1
rawmask >>= 1
if binmask == 0:
bindata.append(binval)
binmask = 0x80
binval = 0
if len(bindata) == 8:
decode(bindata)
break;