import 'dart:typed_data'; import 'package:maibu_satabot_v2/core/data/base_model.dart'; import 'package:maibu_satabot_v2/features/remote_control/domain/entities/machine_control_entity.dart'; class MachineControlModel extends MachineControlEntity implements BaseModel{ MachineControlModel({ required super.leftSpeed, required super.rightSpeed, required super.chassisLift, required super.mowerSpeed, required super.ignitionStatus, required super.isEmergency, }); factory MachineControlModel.fromEntity(MachineControlEntity entity) { return MachineControlModel( leftSpeed: entity.leftSpeed, rightSpeed: entity.rightSpeed, chassisLift: entity.chassisLift, mowerSpeed: entity.mowerSpeed, ignitionStatus: entity.ignitionStatus, isEmergency: entity.isEmergency, ); } /// 需要传入计算好的左右轮速度 Uint8List toRawPacket(Map speeds) { // 1. 调用 Codec:生成协议定义的 8 字节 Payload final payload = encodeRemoteControlPayload( left: speeds['left'] ?? 0, right: speeds['right'] ?? 0, lift: chassisLift, mower: mowerSpeed, ignition: ignitionStatus, emergency: isEmergency ? 1 : 0, ); // 2. 调用 Builder:封装帧头、指令、CRC、帧尾 return payload; } @override MachineControlEntity toEntity() { return MachineControlEntity( leftSpeed: leftSpeed, rightSpeed: rightSpeed, chassisLift: chassisLift, mowerSpeed: mowerSpeed, ignitionStatus: ignitionStatus, isEmergency: isEmergency, ); } @override Map toJson() { return { 'leftSpeed': leftSpeed, 'rightSpeed': rightSpeed, 'chassisLift': chassisLift, 'mowerSpeed': mowerSpeed, 'ignitionStatus': ignitionStatus, 'isEmergency': isEmergency, }; } Uint8List encodeRemoteControlPayload({ required int left, required int right, int lift = 0, int mower = 0, int ignition = 0, int emergency = 0, }) { final bd = ByteData(8); // 只分配 8 字节 int pos = 0; bd.setInt16(pos, left, Endian.little); pos += 2; bd.setInt16(pos, right, Endian.little); pos += 2; bd.setUint8(pos++, lift); bd.setUint8(pos++, mower); bd.setUint8(pos++, ignition); bd.setUint8(pos++, emergency); return bd.buffer.asUint8List(); } }