import math import struct from typing import Dict, List, Tuple, Optional from can_msg_builder import BROADCAST_MIX_CMD_ID, BROADCAST_TORQUE_CMD_ID def parse_single_turn_state(data8: bytes) -> Dict: """ 解析电机状态2回复can帧 """ assert len(data8)==8 temperature = struct.unpack(" Dict: """ 解析“读取多圈角度(0x92)”回复帧 - DATA[0] = 0x92 - DATA[1..7] = int64 motorAngle 的低 7 字节(little-endian) - 单位:0.01 deg / LSB """ assert len(data8) == 8 # 取低 7 字节 low7 = data8[1:8] # bytes length = 7 # 符号扩展:看第7字节(低7字节中的最高字节)的最高位是否为1 # 如果为1,说明负数,需要补 0xFF;否则补 0x00 sign_ext = 0xFF if (low7[6] & 0x80) else 0x00 raw8 = low7 + bytes([sign_ext]) # 补成 8 字节 little-endian 的 int64 motor_angle_raw = struct.unpack("