|
|
@ -13,12 +13,22 @@ class TinyFrame: |
|
|
|
# If the connection is reliable, you can disable the SOF byte and checksums. |
|
|
|
# If the connection is reliable, you can disable the SOF byte and checksums. |
|
|
|
# That can save up to 9 bytes of overhead. |
|
|
|
# That can save up to 9 bytes of overhead. |
|
|
|
|
|
|
|
|
|
|
|
# ,-----+----+-----+------+------------+- - - -+------------, |
|
|
|
# ,-----+-----+-----+------+------------+- - - -+-------------, |
|
|
|
# | SOF | ID | LEN | TYPE | HEAD_CKSUM | DATA | PLD_CKSUM | |
|
|
|
# | SOF | ID | LEN | TYPE | HEAD_CKSUM | DATA | DATA_CKSUM | |
|
|
|
# | 1 | ? | ? | ? | ? | ... | ? | <- size (bytes) |
|
|
|
# | 0-1 | 1-4 | 1-4 | 1-4 | 0-4 | ... | 0-4 | <- size (bytes) |
|
|
|
# '-----+----+-----+------+------------+- - - -+------------' |
|
|
|
# '-----+-----+-----+------+------------+- - - -+-------------' |
|
|
|
|
|
|
|
# |
|
|
|
|
|
|
|
# SOF ......... start of frame, usually 0x01 (optional, configurable) |
|
|
|
|
|
|
|
# ID ......... the frame ID (MSb is the peer bit) |
|
|
|
|
|
|
|
# LEN ......... number of data bytes in the frame |
|
|
|
|
|
|
|
# TYPE ........ message type (used to run Type Listeners, pick any values you like) |
|
|
|
|
|
|
|
# HEAD_CKSUM .. header checksum |
|
|
|
|
|
|
|
# |
|
|
|
|
|
|
|
# DATA ........ LEN bytes of data (can be 0, in which case DATA_CKSUM is omitted as well) |
|
|
|
|
|
|
|
# DATA_CKSUM .. checksum, implemented as XOR of all preceding bytes in the message |
|
|
|
|
|
|
|
|
|
|
|
# !!! BOTH SIDES MUST USE THE SAME SETTINGS !!! |
|
|
|
# !!! BOTH SIDES MUST USE THE SAME SETTINGS !!! |
|
|
|
|
|
|
|
# Settings can be adjusted by setting the properties after init |
|
|
|
|
|
|
|
|
|
|
|
# Adjust sizes as desired (1,2,4) |
|
|
|
# Adjust sizes as desired (1,2,4) |
|
|
|
self.ID_BYTES = 2 |
|
|
|
self.ID_BYTES = 2 |
|
|
@ -279,7 +289,7 @@ class TinyFrame: |
|
|
|
if frame.id in self.id_listeners and self.id_listeners[frame.id] is not None: |
|
|
|
if frame.id in self.id_listeners and self.id_listeners[frame.id] is not None: |
|
|
|
lst = self.id_listeners[frame.id] |
|
|
|
lst = self.id_listeners[frame.id] |
|
|
|
rv = lst['fn'](self, frame) |
|
|
|
rv = lst['fn'](self, frame) |
|
|
|
if rv == TF.CLOSE: |
|
|
|
if rv == TF.CLOSE or rv is None: |
|
|
|
self.id_listeners[frame.id] = None |
|
|
|
self.id_listeners[frame.id] = None |
|
|
|
return |
|
|
|
return |
|
|
|
elif rv == TF.RENEW: |
|
|
|
elif rv == TF.RENEW: |
|
|
|