casambi-bt-revamped 0.3.6.dev8__tar.gz → 0.3.6.dev10__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (24) hide show
  1. {casambi_bt_revamped-0.3.6.dev8/src/casambi_bt_revamped.egg-info → casambi_bt_revamped-0.3.6.dev10}/PKG-INFO +1 -1
  2. {casambi_bt_revamped-0.3.6.dev8 → casambi_bt_revamped-0.3.6.dev10}/setup.cfg +1 -1
  3. {casambi_bt_revamped-0.3.6.dev8 → casambi_bt_revamped-0.3.6.dev10}/src/CasambiBt/_client.py +34 -24
  4. {casambi_bt_revamped-0.3.6.dev8 → casambi_bt_revamped-0.3.6.dev10/src/casambi_bt_revamped.egg-info}/PKG-INFO +1 -1
  5. {casambi_bt_revamped-0.3.6.dev8 → casambi_bt_revamped-0.3.6.dev10}/LICENSE +0 -0
  6. {casambi_bt_revamped-0.3.6.dev8 → casambi_bt_revamped-0.3.6.dev10}/README.md +0 -0
  7. {casambi_bt_revamped-0.3.6.dev8 → casambi_bt_revamped-0.3.6.dev10}/pyproject.toml +0 -0
  8. {casambi_bt_revamped-0.3.6.dev8 → casambi_bt_revamped-0.3.6.dev10}/src/CasambiBt/__init__.py +0 -0
  9. {casambi_bt_revamped-0.3.6.dev8 → casambi_bt_revamped-0.3.6.dev10}/src/CasambiBt/_cache.py +0 -0
  10. {casambi_bt_revamped-0.3.6.dev8 → casambi_bt_revamped-0.3.6.dev10}/src/CasambiBt/_casambi.py +0 -0
  11. {casambi_bt_revamped-0.3.6.dev8 → casambi_bt_revamped-0.3.6.dev10}/src/CasambiBt/_client_android_parser.py +0 -0
  12. {casambi_bt_revamped-0.3.6.dev8 → casambi_bt_revamped-0.3.6.dev10}/src/CasambiBt/_constants.py +0 -0
  13. {casambi_bt_revamped-0.3.6.dev8 → casambi_bt_revamped-0.3.6.dev10}/src/CasambiBt/_discover.py +0 -0
  14. {casambi_bt_revamped-0.3.6.dev8 → casambi_bt_revamped-0.3.6.dev10}/src/CasambiBt/_encryption.py +0 -0
  15. {casambi_bt_revamped-0.3.6.dev8 → casambi_bt_revamped-0.3.6.dev10}/src/CasambiBt/_keystore.py +0 -0
  16. {casambi_bt_revamped-0.3.6.dev8 → casambi_bt_revamped-0.3.6.dev10}/src/CasambiBt/_network.py +0 -0
  17. {casambi_bt_revamped-0.3.6.dev8 → casambi_bt_revamped-0.3.6.dev10}/src/CasambiBt/_operation.py +0 -0
  18. {casambi_bt_revamped-0.3.6.dev8 → casambi_bt_revamped-0.3.6.dev10}/src/CasambiBt/_unit.py +0 -0
  19. {casambi_bt_revamped-0.3.6.dev8 → casambi_bt_revamped-0.3.6.dev10}/src/CasambiBt/errors.py +0 -0
  20. {casambi_bt_revamped-0.3.6.dev8 → casambi_bt_revamped-0.3.6.dev10}/src/CasambiBt/py.typed +0 -0
  21. {casambi_bt_revamped-0.3.6.dev8 → casambi_bt_revamped-0.3.6.dev10}/src/casambi_bt_revamped.egg-info/SOURCES.txt +0 -0
  22. {casambi_bt_revamped-0.3.6.dev8 → casambi_bt_revamped-0.3.6.dev10}/src/casambi_bt_revamped.egg-info/dependency_links.txt +0 -0
  23. {casambi_bt_revamped-0.3.6.dev8 → casambi_bt_revamped-0.3.6.dev10}/src/casambi_bt_revamped.egg-info/requires.txt +0 -0
  24. {casambi_bt_revamped-0.3.6.dev8 → casambi_bt_revamped-0.3.6.dev10}/src/casambi_bt_revamped.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: casambi-bt-revamped
3
- Version: 0.3.6.dev8
3
+ Version: 0.3.6.dev10
4
4
  Summary: Enhanced Casambi Bluetooth client library with switch event support
5
5
  Home-page: https://github.com/rankjie/casambi-bt
6
6
  Author: rankjie
@@ -1,6 +1,6 @@
1
1
  [metadata]
2
2
  name = casambi-bt-revamped
3
- version = 0.3.6.dev8
3
+ version = 0.3.6.dev10
4
4
  author = rankjie
5
5
  author_email = rankjie@gmail.com
6
6
  description = Enhanced Casambi Bluetooth client library with switch event support
@@ -551,7 +551,10 @@ class CasambiClient:
551
551
  # Process based on message type
552
552
  if message_type == 0x08 or message_type == 0x10: # Switch/button events
553
553
  switch_events_found += 1
554
- self._processSwitchMessage(message_type, flags, parameter, payload, data, oldPos, packet_seq, raw_packet, android_switch_event)
554
+ # For type 0x10 messages, include the full data from start position to current position
555
+ # This ensures we capture any additional bytes after the declared payload
556
+ full_message_data = data[oldPos:pos] if message_type == 0x10 else data
557
+ self._processSwitchMessage(message_type, flags, parameter, payload, full_message_data, oldPos, packet_seq, raw_packet, android_switch_event)
555
558
  elif message_type == 0x29:
556
559
  # This shouldn't happen due to check above, but just in case
557
560
  self._logger.debug(f"Ignoring embedded type 0x29 message")
@@ -585,15 +588,21 @@ class CasambiClient:
585
588
  self._logger.error("Switch message has empty payload")
586
589
  return
587
590
 
588
- unit_id = payload[0]
589
-
590
- action = None
591
- if len(payload) > 1:
591
+ # For type 0x10 messages, the structure is different
592
+ if message_type == 0x10 and len(payload) >= 3:
593
+ # Type 0x10: unit_id is at payload[2]
594
+ unit_id = payload[2]
592
595
  action = payload[1]
593
-
594
- extra_data = b''
595
- if len(payload) > 2:
596
- extra_data = payload[2:]
596
+ extra_data = payload[3:] if len(payload) > 3 else b''
597
+ else:
598
+ # Standard parsing for other message types
599
+ unit_id = payload[0]
600
+ action = None
601
+ if len(payload) > 1:
602
+ action = payload[1]
603
+ extra_data = b''
604
+ if len(payload) > 2:
605
+ extra_data = payload[2:]
597
606
 
598
607
  event_string = "unknown"
599
608
 
@@ -604,11 +613,11 @@ class CasambiClient:
604
613
  is_release = (action >> 1) & 1
605
614
  event_string = "button_release" if is_release else "button_press"
606
615
  elif message_type == 0x10:
607
- # Type 0x10: Must check the additional state byte after the message
608
- # The action value is a counter that increments with each state change
609
- additional_data_pos = start_pos + 3 + len(payload)
610
- if additional_data_pos + 2 < len(full_data):
611
- state_byte = full_data[additional_data_pos + 1]
616
+ # Type 0x10: The state byte is at position 9 (0-indexed) from message start
617
+ # This applies to all units, not just unit 31
618
+ state_pos = 9
619
+ if len(full_data) > state_pos:
620
+ state_byte = full_data[state_pos]
612
621
  if state_byte == 0x01:
613
622
  event_string = "button_press"
614
623
  elif state_byte == 0x02:
@@ -618,20 +627,21 @@ class CasambiClient:
618
627
  elif state_byte == 0x0c:
619
628
  event_string = "button_release_after_hold"
620
629
  else:
621
- self._logger.warning(f"Unknown state byte: 0x{state_byte:02x}")
622
- else:
623
- # For some units, type 0x10 messages don't have the state byte
624
- # In these cases, check if we have extra_data that might contain state info
625
- if len(extra_data) >= 3:
626
- # Pattern observed: extra_data[1] might contain state info
627
- # 0x12 seems to correlate with button release states
628
- if extra_data[1] == 0x12:
630
+ self._logger.debug(f"Type 0x10: State byte 0x{state_byte:02x} at pos {state_pos}")
631
+ # Fallback: check if extra_data starts with 0x12 (indicates release)
632
+ if len(extra_data) >= 1 and extra_data[0] == 0x12:
629
633
  event_string = "button_release"
630
634
  else:
631
635
  event_string = "button_press"
632
- self._logger.debug(f"Type 0x10: Using extra_data for state detection: {b2a(extra_data)}")
636
+ else:
637
+ # Fallback when message is too short
638
+ if len(extra_data) >= 1 and extra_data[0] == 0x12:
639
+ event_string = "button_release"
640
+ self._logger.debug(f"Type 0x10: Using extra_data pattern for release detection")
633
641
  else:
634
- self._logger.warning("Type 0x10 message missing state byte information, cannot determine event type")
642
+ # Cannot determine state
643
+ self._logger.warning(f"Type 0x10 message missing state info, unit_id={unit_id}, payload={b2a(payload)}")
644
+ event_string = "unknown"
635
645
 
636
646
  action_display = f"{action:#04x}" if action is not None else "N/A"
637
647
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: casambi-bt-revamped
3
- Version: 0.3.6.dev8
3
+ Version: 0.3.6.dev10
4
4
  Summary: Enhanced Casambi Bluetooth client library with switch event support
5
5
  Home-page: https://github.com/rankjie/casambi-bt
6
6
  Author: rankjie