diff --git a/lib/core/network/net_message_dispatcher.dart b/lib/core/network/net_message_dispatcher.dart index c3fc0cb7..1e46ebf8 100644 --- a/lib/core/network/net_message_dispatcher.dart +++ b/lib/core/network/net_message_dispatcher.dart @@ -39,7 +39,7 @@ class NetMessageDispatcher { return ''; // 返回空字符串,避免流中断 } }); - /* ///return onCommand(0x02).map((p) => utf8.decode(p.payload));*/ + /* ///return onCommand(0x02).map((p) => utf8.decode(p.payload));*/ } /// 示例解析方法:将 0x12 指令解析为 JSON 并转为模型 @@ -49,13 +49,13 @@ class NetMessageDispatcher { //监听路径规划的开始作业的指令的应答 - // if (data[0] == (byte) 0xAB && data[1] == (byte) 0xAA && data[2] == (byte) 0x01) { - // System.out.println("=====下位机回复成功=====" + data[0] + " " + data[1] + " " + data[2] + " " + data[3] + " " + - // data[4] + " " + data[5] + " " + data[6] + " " + data[7] + " " + data[8] + " " + data[9]); - // if (data[5] == (byte) 0x01) { - // Point point = new Point(); - // //发送下一个指令 - // } +// if (data[0] == (byte) 0xAB && data[1] == (byte) 0xAA && data[2] == (byte) 0x01) { +// System.out.println("=====下位机回复成功=====" + data[0] + " " + data[1] + " " + data[2] + " " + data[3] + " " + +// data[4] + " " + data[5] + " " + data[6] + " " + data[7] + " " + data[8] + " " + data[9]); +// if (data[5] == (byte) 0x01) { +// Point point = new Point(); +// //发送下一个指令 +// } /// 监听路径规划的开始作业指令的应答 (0x01 指令) /// 协议格式:AB AA 01 [DATA] CRC(2) AA AB @@ -80,34 +80,41 @@ class NetMessageDispatcher { 0xAB, 0xAA, 0x01, ...packet.payload, 0x00, 0x00, // CRC 占位 - 0xAA, 0xAB, + 0xAA, 0xAB ]; // 验证头部协议 - if (fullData[0] == 0xAB && fullData[1] == 0xAA && fullData[2] == 0x01) { + if (fullData[0] == 0xAB && + fullData[1] == 0xAA && + fullData[2] == 0x01) { + debugPrint('[Dispatcher] 下位机回复成功 - 完整数据包:${fullData.join(" ")}'); // 检查状态位 (索引 5 对应 payload 的第 2 个字节) if (fullData.length > 5 && fullData[5] == 0x01) { debugPrint('✅ [Dispatcher] 状态位验证通过:0x01 - 可以发送下一个指令'); - ///取全局的路径规划发送实体 queue /// 发送下一个指令 移除上一条数据 - var queue = _pathPlanningService.getQueue(); - + var queue = _pathPlanningService.getQueue(); ///更新完成jwd var deviceAddPathPointModel = queue.first; - devicesCubit.setArrivedLocation(deviceAddPathPointModel.latitude, deviceAddPathPointModel.longitude); + var d = deviceAddPathPointModel.latitude; + var e = deviceAddPathPointModel.longitude; + devicesCubit.setArrivedLocation( + deviceAddPathPointModel.latitude, + deviceAddPathPointModel.longitude + ); + debugPrint("准确更新完成的路径点经纬度,$d,$e"); //去除上一条数据 queue.removeFirst(); + /// _pathPlanningService.updateQueue(queue as List); _pathPlanningService.updateQueue(queue.toList()); debugPrint('📡 [Dispatcher] 准备触发下一个路径点发送,队列剩余:${queue.length}'); - ///如果还剩0个数据 就停止发送 - if (queue.length == 0) { + if (queue.length==0) { debugPrint('⚠️ [Dispatcher] 队列已空,停止发送'); - // final devicesCubit = sl(); + // final devicesCubit = sl(); devicesCubit.finishWork(); Future.delayed(Duration(seconds: 1), () { devicesCubit.resetWorkStatus(); @@ -132,7 +139,11 @@ class NetMessageDispatcher { /// [commandCode] 指令码 /// [statusIndex] 状态字节在 payload 中的索引 /// [expectedStatus] 期望的状态值 - Stream onStatusResponse({required int commandCode, required int statusIndex, required int expectedStatus}) { + Stream onStatusResponse({ + required int commandCode, + required int statusIndex, + required int expectedStatus, + }) { debugPrint('🔍 [Dispatcher] 监听指令应答 CMD: 0x${commandCode.toRadixString(16)}, 期望状态:0x${expectedStatus.toRadixString(16)}'); return onCommand(commandCode).where((packet) { diff --git a/lib/features/devices/presentation/bloc/devices_cubit.dart b/lib/features/devices/presentation/bloc/devices_cubit.dart index 2abf775a..a1ffe822 100644 --- a/lib/features/devices/presentation/bloc/devices_cubit.dart +++ b/lib/features/devices/presentation/bloc/devices_cubit.dart @@ -411,7 +411,7 @@ class DevicesCubit extends Cubit { } void setArrivedLocation(double latitude, double longitude) { emit(state.copyWith(arriLatitude: latitude, arriLongitude: longitude)); - print('✅ [DevicesCubit] 更新已到达位置:Lat=$latitude, Lng=$longitude'); + print('✅ [DevicesCubit] 监听更新已完成到达位置:Lat=$latitude, Lng=$longitude'); } //获取已到达的点的经纬度 diff --git a/lib/features/home/presentation/widgets/map/testmap_pages.dart b/lib/features/home/presentation/widgets/map/testmap_pages.dart index a86930f6..f35db709 100644 --- a/lib/features/home/presentation/widgets/map/testmap_pages.dart +++ b/lib/features/home/presentation/widgets/map/testmap_pages.dart @@ -1495,12 +1495,16 @@ class _MapPageEnterpriseState extends State { //}).toList(); // 步骤2:将 List 转换为 Queue(队列) + debugPrint('⚙️ 开始类型转换...'); final List typedList = startWorkList.whereType>().map((item) { return work_area_model.DeviceAddPathPointModel(latitude: (item['lat'] as num).toDouble(), longitude: (item['lon'] ?? item["lng"] as num).toDouble()); }).toList(); final Queue pathQueue = Queue.from(typedList); + debugPrint('🚀 开始作业:${_selectedPlot?.plotName ?? "未命名"},路径点数量:${pathQueue.length}'); + debugPrint('第一个点 WGS84: ${pathQueue.first.latitude}, ${pathQueue.first.longitude}'); + // 步骤 3:调用 Cubit 方法(类型匹配) await context.read().startRoutePlanning(pathQueue);