import '../../programs/models/program.dart'; import '../../programs/models/step.dart'; import 'runner_interface.dart'; /// 串口运行器(真实硬件实现) /// 实现与设备的串口通信 class SerialRunner implements Runner { @override RunnerStatus status = RunnerStatus.idle; /// 串口配置 final String portName; final int baudRate; final int dataBits; final int stopBits; SerialRunner({ this.portName = '/dev/ttyUSB0', this.baudRate = 9600, this.dataBits = 8, this.stopBits = 1, }); @override void start(Program program, List steps, RunnerCallbacks callbacks) { // TODO: 实现串口通信启动逻辑 // 1. 打开串口连接 // 2. 发送程序配置 // 3. 按步骤发送控制指令 // 4. 接收设备反馈并更新状态 status = RunnerStatus.running; // 示例:发送启动指令 // _sendCommand('START', program.code); // 示例:监听设备状态 // _listenToDevice(callbacks); } @override void pause() { if (status == RunnerStatus.running) { // _sendCommand('PAUSE'); status = RunnerStatus.paused; } } @override void resume() { if (status == RunnerStatus.paused) { // _sendCommand('RESUME'); status = RunnerStatus.running; } } @override void stop() { // _sendCommand('STOP'); // _closeConnection(); status = RunnerStatus.idle; } @override RunnerStatus getStatus() => status; @override void dispose() { stop(); } /// 发送控制指令(待硬件协议确定后实现) Future _sendCommand(String command, [String? data]) async { // TODO: 根据硬件通信协议实现 // 示例协议格式: [CMD:data] 或 二进制协议 } /// 监听设备反馈(待硬件协议确定后实现) void _listenToDevice(RunnerCallbacks callbacks) { // TODO: 解析设备返回的状态数据 // 状态格式示例: [STEP:1,TIME:60,POS:A1] } /// 执行单个步骤 Future _executeStep(Step step) async { // TODO: 根据步骤参数生成控制指令 // 混合: MIX(position, time, speed) // 吸磁: MAGNET(position, time) // 吹气: BLOW(position, speed, time) } }