Files
franklinwh-agate-client/franklinwh_agate_client/protocol/__init__.py
T
kfj001 9e69f07636 Correct wire format to disassembly: raw S1||crypt(S2), radix 32, int snno/seconds, decryptData response parser, --probe
- envelope: 7 fixed keys + conditional dataArea, no data key; int
  type/snno, seconds timestamp, data setter auto len/crc (CRC32 upper);
  SequenceNumber 1..9999 (increaseSN)
- crypto: encrypt is plaintext-header-first a||transform(b), key radix 32
  at both tryParse sites; decrypt_data ports decryptData (dual-0x58
  markers, s+'}' equipNo probe, s+','+T return); decrypt_request kept
  for the device-side known-header split
- socket: raw send (no length prefix), accumulate-and-try receive
- battery: queryAPowerData shape (data={'update':2}), radix default 32,
  --probe prints exact TX/RX bytes per variant; device_local.send_probe
- docs: RE_DART_FINDINGS ss3/5/8 + open items, BATTERY_POC host recipe
- tests: 19 new protocol tests, suite 44/44 green
2026-10-15 23:01:58 +00:00

94 lines
1.9 KiB
Python

"""Pure-protocol building blocks recovered from the app's Dart AOT snapshot.
Everything here is hardware-independent and covered by unit tests. See
``docs/RE_DART_FINDINGS.md`` for the reverse-engineering evidence.
"""
from .commands import CommunicationCmd, CommunicationMode, CommunicationOperate
from .crc import (
CRC16_INIT,
CRC16_POLY,
crc16_hex_string,
crc16_modbus,
crc32,
int16_to_le_bytes,
le_bytes_to_int16,
)
from .crypto import (
DEFAULT_KEY_RADIX,
MARKER,
decrypt_data,
decrypt_object,
decrypt_request,
encrypt_object,
generate_secret_key,
header_len_for,
split_envelope,
)
from .envelope import (
KEY_ORDER,
SNNO_MAX,
SNNO_MIN,
PLACEHOLDER,
CommunicationObject,
SequenceNumber,
direct_connect_request,
)
from .framing import (
MAGIC_ACK,
MAGIC_DATA,
build_ble_ack_frame,
build_ble_data_frame,
chunk_for_mtu,
content_in_data,
create_ble_frame,
frame_socket_payload,
magicEquals,
magic_in_data,
sn_in_data,
verify_frame_crc,
)
from .framing import SocketFrameDecoder
__all__ = [
"CommunicationCmd",
"CommunicationMode",
"CommunicationOperate",
"CRC16_INIT",
"CRC16_POLY",
"crc16_modbus",
"crc16_hex_string",
"crc32",
"int16_to_le_bytes",
"le_bytes_to_int16",
"DEFAULT_KEY_RADIX",
"MARKER",
"generate_secret_key",
"split_envelope",
"encrypt_object",
"decrypt_object",
"decrypt_request",
"decrypt_data",
"header_len_for",
"KEY_ORDER",
"SNNO_MIN",
"SNNO_MAX",
"PLACEHOLDER",
"CommunicationObject",
"SequenceNumber",
"direct_connect_request",
"MAGIC_ACK",
"MAGIC_DATA",
"create_ble_frame",
"build_ble_data_frame",
"build_ble_ack_frame",
"magic_in_data",
"magicEquals",
"sn_in_data",
"content_in_data",
"verify_frame_crc",
"chunk_for_mtu",
"frame_socket_payload",
"SocketFrameDecoder",
]