|
|
@@ -1,6 +1,7 @@ |
|
|
|
from MAXCube import MAXCube |
|
|
|
from MAXPacket import MAXPacket, MAXPacketFactory, MAXPairPingPacket, MAXPairPongPacket, MAXAckPacket, \ |
|
|
|
MAXResetPacket, MAXWakeUpPacket, MAXSetGroupIdPacket |
|
|
|
MAXResetPacket, MAXWakeUpPacket, MAXSetGroupIdPacket, MAXPushButtonPacket, MAXCubeAckPacket |
|
|
|
from MAXDevice import MAXDevice, MAXPushButton |
|
|
|
|
|
|
|
from time import sleep |
|
|
|
from enum import Enum |
|
|
@@ -26,6 +27,7 @@ class MAXPacketHandler: |
|
|
|
self.cube = cube |
|
|
|
self.quit_flag = False |
|
|
|
self.handshakes = [] |
|
|
|
self.devices: list[MAXDevice] = [] |
|
|
|
|
|
|
|
def handle_msg(self, pkt: MAXPacket): |
|
|
|
print(pkt.to_string()) |
|
|
@@ -36,7 +38,7 @@ class MAXPacketHandler: |
|
|
|
pong = MAXPairPongPacket(message_counter="00", message_flag="00", sender_address=self.cube.addr, |
|
|
|
dest_address=pkt.sender_address, group_id="00") |
|
|
|
pong_str = pong.serialize() |
|
|
|
print(pong.to_string()) |
|
|
|
#print(pong.to_string()) |
|
|
|
self.cube.request(pong_str) |
|
|
|
handshake.state = HandshakeState.PONG_SENT |
|
|
|
elif isinstance(pkt, MAXAckPacket): |
|
|
@@ -63,7 +65,22 @@ class MAXPacketHandler: |
|
|
|
cur_handshake.state = HandshakeState.GROUP_ID_SENT |
|
|
|
if cur_handshake.state == HandshakeState.GROUP_ID_SENT: |
|
|
|
cur_handshake.state = HandshakeState.GROUP_ID_ACK |
|
|
|
|
|
|
|
elif isinstance(pkt, MAXPushButtonPacket): |
|
|
|
dev = None |
|
|
|
for known_dev in self.devices: |
|
|
|
if known_dev.address == pkt.sender_address: |
|
|
|
dev = known_dev |
|
|
|
break |
|
|
|
if dev is None: |
|
|
|
dev = MAXPushButton(pkt.sender_address) |
|
|
|
dev.state = pkt.button_state |
|
|
|
print("Button {} state={}".format(dev.address, dev.state)) |
|
|
|
if not pkt.retransmit: |
|
|
|
act_pkt = MAXCubeAckPacket(pkt.counter, "00", self.cube.addr, |
|
|
|
pkt.sender_address, pkt.group_id, True) |
|
|
|
act_str = act_pkt.serialize() |
|
|
|
#print(act_str) |
|
|
|
self.cube.request(act_str) |
|
|
|
else: |
|
|
|
print("Paket is not ours!") |
|
|
|
|
|
|
@@ -73,6 +90,4 @@ class MAXPacketHandler: |
|
|
|
if resp is not None and resp[0:1] == "Z": |
|
|
|
pkt = MAXPacketFactory.create_packet(resp) |
|
|
|
self.handle_msg(pkt) |
|
|
|
|
|
|
|
|
|
|
|
sleep(0.1) |