art_frame.py 959 B

1234567891011121314151617181920212223242526272829303132333435
  1. """Art Frame advertisement data parser."""
  2. import logging
  3. _LOGGER = logging.getLogger(__name__)
  4. def process_art_frame(
  5. data: bytes | None, mfr_data: bytes | None
  6. ) -> dict[str, bool | int | str]:
  7. """Process Art Frame data."""
  8. if mfr_data is None:
  9. return {}
  10. _seq_num = mfr_data[6]
  11. battery_charging = bool(mfr_data[7] & 0x80)
  12. battery = mfr_data[7] & 0x7F
  13. image_index = mfr_data[8]
  14. display_size = (mfr_data[9] >> 4) & 0x0F
  15. display_mode = (mfr_data[9] >> 3) & 0x01
  16. last_network_status = (mfr_data[9] >> 2) & 0x01
  17. result = {
  18. "sequence_number": _seq_num,
  19. "battery_charging": battery_charging,
  20. "battery": battery,
  21. "image_index": image_index,
  22. "display_size": display_size,
  23. "display_mode": display_mode,
  24. "last_network_status": last_network_status,
  25. }
  26. _LOGGER.debug("Art Frame mfr data: %s, result: %s", mfr_data.hex(), result)
  27. return result