#连接库初步完成
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
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<MachineControlEntity>{
|
||||
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<String, int> 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<String, dynamic> 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();
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user