"""SET v2/RTU session for emulator panels; no I/O or Qt dependencies. Only discovery may fall back to RTU. An application command is sent once; failure after choosing v2 must never resend a write using another protocol. """ import secrets import struct from setprotocol.core import (Frame, FrameFlag, FrameParser, MessageType, Status, DeviceInfo, build_frame, decode_response) from set_devices.tms_terminal import crc16_modbus from set_devices.mcu_profiles import EMULATOR_PROFILES # Проверка DeviceInfo использует модель конкретной платы из общего аппаратного профиля. REG_REQUEST = 0x1000 TMS_REQUEST = 0x1001 WAVE_BLOCK = 0x1002 MODEL = 'STM32F407-EMU-EXPERIMENT' def with_crc(body): return body + struct.pack('= 9 and raw[1] == 16: return self._frame(WAVE_BLOCK, raw, raw[0]) if len(raw) == 8 and raw[1] in (3, 6): unit, fn, address, value = struct.unpack('>BBHH', raw[:6]) return self._frame(REG_REQUEST, struct.pack('HH', raw[2:6]): raise ValueError('SET v2: неверное подтверждение записи') return raw return with_crc(bytes([raw[0], 3, count * 2]) + struct.pack(f'>{count}H', *words))