Browse Source

Pulling data out of RFX bitfields. Added RFX event.

pyserial_fix
Scott Petersen 11 years ago
parent
commit
66910a5525
3 changed files with 30 additions and 3 deletions
  1. +9
    -1
      pyad2usb/ad2usb.py
  2. +15
    -0
      pyad2usb/messages.py
  3. +6
    -2
      test.py

+ 9
- 1
pyad2usb/ad2usb.py View File

@@ -195,6 +195,7 @@ class AD2USB(object):
# Mid-level Events
on_message = event.Event('Called when a message has been received from the device.')
on_lrr_message = event.Event('Called when an LRR message is received.')
on_rfx_message = event.Event('Called when an RFX message is received.')

# Low-level Events
on_open = event.Event('Called when the device has been opened.')
@@ -388,7 +389,7 @@ class AD2USB(object):
msg = messages.ExpanderMessage(data)
self._update_internal_states(msg)
elif header == '!RFX':
msg = messages.RFMessage(data)
msg = self._handle_rfx(data)
elif header == '!LRR':
msg = self._handle_lrr(data)
elif data.startswith('!Ready'):
@@ -398,6 +399,13 @@ class AD2USB(object):

return msg

def _handle_rfx(self, data):
msg = messages.RFMessage(data)

self.on_rfx_message(msg)

return msg

def _handle_lrr(self, data):
"""
Handle Long Range Radio messages.


+ 15
- 0
pyad2usb/messages.py View File

@@ -162,6 +162,9 @@ class RFMessage(object):
self.raw = None
self.serial_number = None
self.value = None
self.battery = None
self.supervision = None
self.loop = dict()

if data is not None:
self._parse_message(data)
@@ -183,6 +186,18 @@ class RFMessage(object):

_, values = data.split(':')
self.serial_number, self.value = values.split(',')
self.value = int(self.value, 16)

test_bit = lambda v, b: v & (1 << b) > 0

# Bit 1 = unknown
self.battery = test_bit(self.value, 2)
self.supervision = test_bit(self.value, 3)
# Bit 8 = unknown
self.loop[0] = test_bit(self.value, 5)
self.loop[1] = test_bit(self.value, 6)
self.loop[2] = test_bit(self.value, 7)
self.loop[3] = test_bit(self.value, 8)

class LRRMessage(object):
"""


+ 6
- 2
test.py View File

@@ -103,6 +103,9 @@ def handle_lrr(sender, args):
def handle_panic(sender, args):
print 'PANIC!', args

def handle_rfx(sender, args):
print 'RFX', args

def upload_usb():
dev = pyad2usb.ad2usb.devices.USBDevice()

@@ -248,8 +251,9 @@ def test_socket():
#a2u.on_config_received += handle_config
#a2u.on_arm += handle_arm
#a2u.on_disarm += handle_disarm
#a2u.on_zone_fault += handle_fault
#a2u.on_zone_restore += handle_restore
a2u.on_zone_fault += handle_fault
a2u.on_zone_restore += handle_restore
a2u.on_rfx_message += handle_rfx
#
#a2u.on_fire += handle_fire
#a2u.on_low_battery += handle_battery


||||||
x
 
000:0
Loading…
Cancel
Save