1 files added
1 files modified
| New file |
| | |
| | | package com.ard.tianyu.netty.handler; |
| | | |
| | | |
| | | import com.ard.common.utils.StringUtils; |
| | | |
| | | import java.util.Objects; |
| | | |
| | | /** |
| | | * 错误码枚举 |
| | | * 刘苏义 |
| | | * 2024/3/7 10:50:52 |
| | | */ |
| | | public enum ErrorCodeEnum { |
| | | |
| | | ERROR_0(0, "成功"), |
| | | ERROR_1(1, "执行V3航线航点任务id不匹配"), |
| | | ERROR_2(2, "执行V3航线信息错误"), |
| | | ERROR_3(3, "执行V3航线WPMZ文件不匹配"), |
| | | ERROR_4(4, "加载V3航线WPMZ文件失败"), |
| | | ERROR_5(5, "执行V3航线WPMZ文件不匹配"), |
| | | ERROR_6(6, "执行V3航线指令无效"), |
| | | ERROR_81(81, "自动起飞失败,电池电压差过大"), |
| | | ERROR_160(160, "开始航线失败,未上传航线"), |
| | | ERROR_216(216, "拍照失败,存储卡已满"), |
| | | ERROR_224(224, "拍照失败,未安装载荷"), |
| | | ERROR_227(227, "拍照失败,未安装存储卡"), |
| | | ERROR_257(257, "飞机正在航线中,重复执行航线"), |
| | | ERROR_258(258, "在当前状态下无法中断航线"), |
| | | ERROR_259(259, "航线未运行时不能停止航线"), |
| | | ERROR_261(261, "飞行任务冲突,无法获得飞机的控制权限"), |
| | | ERROR_513(513, "执行V3航线失败由于航点高度超过区域限高"), |
| | | ERROR_514(514, "执行V3航线失败由于航线距离超过区域限远"), |
| | | ERROR_515(515, "执行V3航线失败由于航线路径跨越禁飞区"), |
| | | ERROR_519(519, "执行V3航线失败由于禁飞区边界限制"), |
| | | ERROR_520(520, "执行V3航线失败由于遥控器失灵"), |
| | | ERROR_521(521, "执行V3航线失败由于机场高度限制"), |
| | | ERROR_522(522, "V3航线请求起飞失败"), |
| | | ERROR_523(523, "V3航线自动起飞失败"), |
| | | ERROR_528(528, "执行V3航线失败由于防御限制"), |
| | | ERROR_769(769, "执行V3航线失败由于gps无效"), |
| | | ERROR_770(770, "执行V3航线失败由于遥控器档位模式"), |
| | | ERROR_771(771, "执行V3航线失败由于返航点记录失败"), |
| | | ERROR_772(772, "执行V3航线失败由于电量过低"), |
| | | ERROR_773(773, "执行V3航线失败由于返航"), |
| | | ERROR_774(774, "执行V3航线失败由于adsb错误"), |
| | | ERROR_775(775, "执行V3航线失败由于遥控器失联"), |
| | | ERROR_776(776, "执行V3航线失败由于rtk未准备好"), |
| | | ERROR_777(777, "执行V3航线失败由于无人机正在移动"), |
| | | ERROR_778(778, "执行V3航线失败由于无人机在地面上,且电机已打开"), |
| | | ERROR_779(779, "执行V3航线失败由于地面跟随相机无效"), |
| | | ERROR_780(780, "执行V3航线失败由于地面跟随高度无效"), |
| | | ERROR_781(781, "执行V3航线失败由于地面跟随地图错误"), |
| | | ERROR_782(782, "执行V3航线失败由于返航点与rtk不一致"), |
| | | ERROR_784(784, "执行V3航线失败由于风速过大"), |
| | | ERROR_999(999, "航线飞行中不允许上传新航线"), |
| | | ERROR_1000(1000, "航线格式错误"), |
| | | ERROR_1001(1001, "下载航线失败"), |
| | | ERROR_1023(1023, "执行V3航线失败由于无人机严重错误"), |
| | | ERROR_1025(1025, "执行V3航线失败由于无法找到有效载荷"), |
| | | ERROR_1026(1026, "执行V3航线失败由于操作执行失败"), |
| | | ERROR_1027(1027, "执行V3航线失败由于未装载农药"), |
| | | ERROR_1028(1028, "执行V3航线失败由于雷达异常断开"), |
| | | ERROR_1200(1200, "M210停止航线出错"), |
| | | ERROR_1281(1281, "执行V3航线失败由于用户退出"), |
| | | ERROR_1282(1282, "执行V3航线失败由于用户中断"), |
| | | ERROR_1283(1283, "执行V3航线失败由于用户设置返航点"), |
| | | ERROR_1284(1284, "执行V3航线失败由于用户agro计划器状态更改"), |
| | | ERROR_1285(1285, "执行V3航线失败由于切换遥控器模式"), |
| | | ERROR_1536(1536, "执行V3航线失败由于航线轨迹初始化失败"), |
| | | ERROR_1537(1537, "执行V3航线失败由于航线轨迹异常退出"), |
| | | ERROR_1538(1538, "执行V3航线失败由于在地面,且电机已打开"), |
| | | ERROR_1539(1539, "执行V3航线失败由于航线轨迹起始索引无效"), |
| | | ERROR_1540(1540, "执行V3航线失败由于航线轨迹的csys模式无效"), |
| | | ERROR_1541(1541, "执行V3航线失败由于航线轨迹高度模式无效"), |
| | | ERROR_1542(1542, "执行V3航线失败由于航线轨迹航点无效"), |
| | | ERROR_1543(1543, "执行V3航线失败由于航线轨迹偏航模式无效"), |
| | | ERROR_1544(1544, "执行V3航线失败由于航线轨迹模式无效"), |
| | | ERROR_1545(1545, "执行V3航线失败由于航线轨迹航点类型无效"), |
| | | ERROR_1546(1546, "执行V3航线失败由于第一个航点类型错误"), |
| | | ERROR_1547(1547, "执行V3航线失败由于航线全局水平超出范围"), |
| | | ERROR_1548(1548, "执行V3航线失败由于航点数量超出范围"), |
| | | ERROR_1549(1549, "执行V3航线失败由于航点经度或者维度超出范围"), |
| | | ERROR_1550(1550, "执行V3航线失败由于转弯半径超出范围"), |
| | | ERROR_1551(1551, "执行V3航线失败由于航线最大水平超出范围"), |
| | | ERROR_1552(1552, "执行V3航线失败由于航线超出范围"), |
| | | ERROR_1553(1553, "执行V3航线失败由于航迹偏航超出范围"), |
| | | ERROR_1554(1554, "执行V3航线失败由于航线偏航模式无效"), |
| | | ERROR_1555(1555, "执行V3航线失败由于航线中断信息任务id改变"), |
| | | ERROR_1556(1556, "执行V3航线失败由于航线中断信息进度超出范围"), |
| | | ERROR_1557(1557, "执行V3航线失败由于航线中断信息无效"), |
| | | ERROR_1558(1558, "执行V3航线失败由于航线中断信息索引超出范围"), |
| | | ERROR_1559(1559, "执行V3航线失败由于航线中断经度或者维度超出范围"), |
| | | ERROR_1560(1560, "执行V3航线失败由于航线中断信息偏离航线范围"), |
| | | ERROR_1561(1561, "执行V3航线失败由于航迹无效中断信息标志"), |
| | | ERROR_1562(1562, "执行V3航线失败由于获取航线信息失败"), |
| | | ERROR_1563(1563, "执行V3航线失败由于航迹生成失败"), |
| | | ERROR_1564(1564, "执行V3航线失败由于航线lib库运行失败"), |
| | | ERROR_1565(1565, "执行V3航线失败由于紧急制动"), |
| | | ERROR_1588(1588, "执行V3航线失败由于动作点执行异常"), |
| | | ERROR_1591(1591, "执行V3航线失败由于动作点索引重复"), |
| | | ERROR_1592(1592, "执行V3航线失败由于航线大小太长或太短"), |
| | | ERROR_1593(1593, "执行V3航线失败由于动作点树为空"), |
| | | ERROR_1594(1594, "执行V3航线失败由于动作点树层为空"), |
| | | ERROR_1595(1595, "执行V3航线失败由于动作点重复"), |
| | | ERROR_1596(1596, "执行V3航线失败由于操作模式子数小于2"), |
| | | ERROR_1597(1597, "执行V3航线失败由于动作点索引超出范围"), |
| | | ERROR_1598(1598, "执行V3航线失败由于动作点ID为65535"), |
| | | ERROR_1599(1599, "执行V3航线失败由于动作子节点不一致"), |
| | | ERROR_1600(1600, "执行V3航线失败由于动作树层数过多"), |
| | | ERROR_1601(1601, "执行V3航线失败由于动作树层数太少"), |
| | | ERROR_1602(1602, "执行V3航线失败由于动作组超出范围"), |
| | | ERROR_1603(1603, "执行V3航线失败由于动作组有效范围错误"), |
| | | ERROR_1604(1604, "执行V3航线失败由于动作树根状态无效"), |
| | | ERROR_1605(1605, "执行V3航线失败由于动作树模式状态无效"), |
| | | ERROR_1606(1606, "执行V3航线失败由于中断信息动作组id超出范围"), |
| | | ERROR_1607(1607, "执行V3航线失败由于动作状态树大小错误"), |
| | | ERROR_1608(1608, "执行V3航线失败由于中断信息触发运行结果无效"), |
| | | ERROR_1609(1609, "执行V3航线失败由于中断信息动作组id重复"), |
| | | ERROR_1610(1610, "执行V3航线失败由于中断信息动作位置重复"), |
| | | ERROR_1611(1611, "执行V3航线失败由于中断信息动作位置超出范围"), |
| | | ERROR_1612(1612, "执行V3航线失败由于恢复id不在中断信息中"), |
| | | ERROR_1613(1613, "执行V3航线失败由于将动作状态从无中断修改为中断"), |
| | | ERROR_1614(1614, "执行V3航线失败由于无效的恢复信息"), |
| | | ERROR_1626(1626, "切换视频源参数不正确"), |
| | | ERROR_1634(1634, "执行V3航线失败由于未找到航点动作执行器"), |
| | | ERROR_1649(1649, "执行V3航线失败由于未找到航点动作触发器"), |
| | | ERROR_1650(1650, "执行V3航线失败由于单次检查失败"), |
| | | ERROR_1700(1700, "M210开始航线出错"), |
| | | ERROR_1701(1701, "开始航线失败,航线中请勿重复开始航线"), |
| | | ERROR_1800(1800, "M210暂停航线出错"), |
| | | ERROR_1801(1801, "暂停航线失败,1:重启云盒后请返航 2:不支持暂停遥控器开启的航线"), |
| | | ERROR_1802(1802, "暂停航线失败,暂停一个未开始的航线"), |
| | | ERROR_1900(1900, "M210继续航线出错"), |
| | | ERROR_1901(1901, "断点续飞失败,请结束航线"), |
| | | ERROR_1902(1902, "安全返航失败,请手动接管返航"), |
| | | ERROR_1903(1903, "恢复航线失败,1:重启云盒后请返航 2:不支持恢复遥控器暂停的航线"),ERROR_2000(2000, "停止航线失败,1:重启云盒后请返航 2:不支持停止遥控器开启的航线"), |
| | | ERROR_2121(2121, "修改返航高度参数不正确"), |
| | | ERROR_2200(2200, "修改相机模式指令错误"), |
| | | ERROR_2222(2222, "修改相机模式参数不正确"), |
| | | ERROR_2400(2400, "非录像模式下开始录像"), |
| | | ERROR_2500(2500, "非录像中停止录像"), |
| | | ERROR_2600(2600, "切换广角视频源失败,请确认载荷是否有该功能"), |
| | | ERROR_2601(2601, "切换变焦视频源失败,请确认载荷是否有该功能"), |
| | | ERROR_2602(2602, "切换红外视频源失败,请确认载荷是否有该功能"), |
| | | ERROR_2727(2727, "切换摄像头参数不正确"), |
| | | ERROR_3100(3100, "设置降落点失败,获取飞机HOME点状态异常"), |
| | | ERROR_3131(3131, "设置降落点参数不正确"), |
| | | ERROR_5000(5000, "正在二维码降落中,禁止切换视频源"), |
| | | ERROR_5001(5001, "正在二维码降落中,禁止修改相机模式"), |
| | | ERROR_5002(5002, "当前飞行器不在返航中,请勿执行取消返航"), |
| | | ERROR_5003(5003, "下载V3航线失败"), |
| | | ERROR_5004(5004, "飞行器在地面,无需返航"), |
| | | ERROR_5005(5005, "飞行器正在返航中"), |
| | | ERROR_5006(5006, "请勿重复开始录像"), |
| | | ERROR_5007(5007, "恢复航线失败,恢复一个未开始的航线"), |
| | | ERROR_5008(5008, "停止航线失败,停止一个未开始的航线"), |
| | | ERROR_5009(5009, "云盒固件升级中,禁止起飞"), |
| | | ERROR_5010(5010, "云盒固件升级中,禁止开始航线"), |
| | | ERROR_5011(5011, "云盒固件不支持激光测距,请联系技术支持"), |
| | | ERROR_6000(6000, "指点飞行开始成功"), |
| | | ERROR_6001(6001, "指点飞行中途变更目标点成功"), |
| | | ERROR_6002(6002, "停止指点飞行成功"), |
| | | ERROR_6003(6003, "手动对焦成功"), |
| | | ERROR_6004(6004, "开始载荷精准降落"), |
| | | ERROR_6005(6005, "开始下视精准降落"), |
| | | ERROR_6006(6006, "二维码识别成功,即将取消自动降落进入二维码引导降落"), |
| | | ERROR_6007(6007, "精准降落成功"), |
| | | ERROR_6008(6008, "停止精准降落"), |
| | | ERROR_6009(6009, "无人机已关机"), |
| | | ERROR_6010(6010, "航线执行完成"), |
| | | ERROR_6011(6011, "指定距离飞行完成,已到达目标点"), |
| | | ERROR_6012(6012, "指定距离飞行开始成功"), |
| | | ERROR_6013(6013, "指定距离飞行中途变更目标点成功"), |
| | | ERROR_6014(6014, "停止指定距离飞行成功"), |
| | | ERROR_6015(6015, "图片实时回传模块初始化成功"), |
| | | ERROR_6016(6016, "开始激光测距成功"), |
| | | ERROR_6017(6017, "结束激光测距成功"), |
| | | ERROR_6018(6018, "开始单点测温成功"), |
| | | ERROR_6019(6019, "结束单点测温成功"), |
| | | ERROR_6020(6020, "开始区域测温成功"), |
| | | ERROR_6021(6021, "结束区域测温成功"), |
| | | ERROR_7001(7001, "载荷不支持切换视频源"), |
| | | ERROR_7002(7002, "FPV视频中不支持切换视频源"), |
| | | ERROR_7003(7003, "正在二维码降落中,禁止控制载荷"), |
| | | ERROR_7004(7004, "正在二维码降落中,禁止关闭视频"), |
| | | ERROR_7005(7005, "正在二维码降落中,禁止切换视频码流"), |
| | | ERROR_7006(7006, "正在二维码降落中,禁止切换FPV视频"), |
| | | ERROR_7007(7007, "正在二维码降落中,禁止拍照"), |
| | | ERROR_7008(7008, "当前画面已经是FPV,请勿重复切换"), |
| | | ERROR_7009(7009, "当前画面已经是载荷,请勿重复切换"), |
| | | ERROR_7010(7010, "操控飞机无效,请先获取控制权"), |
| | | ERROR_7011(7011, "指点飞行失败,请先获取控制权"), |
| | | ERROR_7012(7012, "指点飞行失败,请将飞机升到空中"), |
| | | ERROR_7013(7013, "指点飞行失败,打点距离大于20KM"), |
| | | ERROR_7014(7014, "精准降落校准载荷,请勿使用遥控器控制载荷"), |
| | | ERROR_7015(7015, "此版本云盒固件不支持设置云台模式,如需使用请联系技术支持升级"), |
| | | ERROR_7016(7016, "航线任务已中断,可能原因【遥控器切挡/飞行器强制返航/网络RTK信号丢失/GPS信号丢失】"), |
| | | ERROR_7017(7017, "航线任务已中断,遥控器取消航线"), |
| | | ERROR_7018(7018, "航线任务已中断,请勿在电机开启状态下开始航线"), |
| | | ERROR_7019(7019, "航线任务已中断,自动起飞超时"), |
| | | ERROR_7020(7020, "航线任务已中断,自动起飞未达到预定高度"), |
| | | ERROR_7021(7021, "航线任务已中断,自动起飞异常"), |
| | | ERROR_7022(7022, "航线任务已中断,被高优先级任务抢占"), |
| | | ERROR_7023(7023, "航线任务已中断,未知原因"), |
| | | ERROR_7024(7024, "航线任务已中断,航线规划失败"), |
| | | ERROR_7025(7025, "机场航线规划失败,请检查起飞机场坐标和备降点坐标是否设置成功"), |
| | | ERROR_7026(7026, "机场航线规划失败,请检查降落机场坐标和备降点坐标是否设置成功"), |
| | | ERROR_7027(7027, "电机启动中请勿自动起飞"), |
| | | ERROR_7028(7028, "飞机已在空中请勿自动起飞"), |
| | | ERROR_7029(7029, "飞机已在地面请勿自动降落"), |
| | | ERROR_7030(7030, "正在二维码降落中,禁止切换载荷模式,请保持在录像模式下"), |
| | | ERROR_7031(7031, "无人机起飞时不允许获取/释放操纵杆控制权限,建议:请在起飞前或起飞后进行操作"), |
| | | ERROR_7032(7032, "无人机降落时不允许获取/释放操纵杆控制权限,建议:请在降落前或降落后进行操作"), |
| | | ERROR_7033(7033, "一键起飞指定高度失败,飞行器首次上电起飞请保持遥控器与飞行器连接"), |
| | | ERROR_7034(7034, "电机启动中,请勿紧急制动"), |
| | | ERROR_7035(7035, "自动起飞失败,请先解除紧急制动"), |
| | | ERROR_7036(7036, "自动返航失败,请先解除紧急制动"), |
| | | ERROR_7037(7037, "自动降落失败,请先解除紧急制动"), |
| | | ERROR_7038(7038, "开始任务失败,请先解除紧急制动"), |
| | | ERROR_7039(7039, "恢复任务失败,请先解除紧急制动"), |
| | | ERROR_7040(7040, "强制降落失败,请先解除紧急制动"), |
| | | ERROR_7041(7041, "返航到指定机场失败,检测到飞行器在地面"), |
| | | ERROR_7042(7042, "返航到指定机场失败,飞机当前位置距离机场大于20KM"), |
| | | ERROR_7043(7043, "返航到指定机场失败,请先解除紧急制动"), |
| | | ERROR_7044(7044, "打点飞行失败,安全模式自动起飞失败"), |
| | | ERROR_7045(7045, "打点飞行失败,安全模式自动起飞超时"), |
| | | ERROR_7046(7046, "打点飞行失败,检测到飞行器距上障碍物距离小于3米"), |
| | | ERROR_7047(7047, "打点飞行失败,获取飞机控制权异常,请检查当前飞机模式"), |
| | | ERROR_7048(7048, "打点飞行失败,请先解除紧急制动"), |
| | | ERROR_7049(7049, "指定距离飞行失败,请先解除紧急制动"), |
| | | ERROR_7050(7050, "指定距离飞行失败,获取飞机控制权异常,请检查当前飞机模式"), |
| | | ERROR_7051(7051, "打点飞行失败,安全模式自动起飞失败,打点高度不能小于20米"), |
| | | ERROR_7052(7052, "返航到指定机场失败,返航高度设置不正确,范围应在【20~1500】米"), |
| | | ERROR_7053(7053, "修改返航高度失败,返航高度设置不正确,范围应在【20~1500】米"), |
| | | ERROR_7054(7054, "开启激光测距失败,GPS信号弱,请移至空旷地"), |
| | | ERROR_7055(7055, "开始单点测温失败,设定单点测温坐标失败"), |
| | | ERROR_7056(7056, "开始区域测温失败,设定区域测温坐标失败"), |
| | | ERROR_7057(7057, "打点飞行失败,安全模式自动起飞失败,GPS信号弱,请移至空旷地"), |
| | | ERROR_7058(7058, "飞行器已在地面请勿强制降落"), |
| | | ERROR_7059(7059, "云盒固件版本过低,不支持此功能,请联系技术支持远程升级"), |
| | | ERROR_7060(7060, "开始航线失败,请先取消返航"), |
| | | ERROR_7061(7061, "开始航线失败,请先取消降落"), |
| | | ERROR_7062(7062, "打点飞行失败,请先取消返航"), ERROR_7063(7063, "打点飞行失败,请先取消降落"), |
| | | ERROR_7064(7064, "返航到指定机场失败,请先取消降落"), |
| | | ERROR_7065(7065, "切换FPV失败,飞行器无FPV镜头"), |
| | | ERROR_7066(7066, "图片实时回传功能已失效,遥控器格式完相机后请重启云盒或飞机"), |
| | | ERROR_8000(8000, "航线中触发避障,被动触发暂停航线"), |
| | | ERROR_8001(8001, "指点飞行退出,检测到返航或降落或强制降落状态"), |
| | | ERROR_8002(8002, "指点飞行退出,检测到飞机在地面"), |
| | | ERROR_8003(8003, "初始化图片实时回传功能异常,请检查载荷TF卡是否安装"), |
| | | ERROR_8004(8004, "初始化图片实时回传功能异常"), |
| | | ERROR_8005(8005, "机场开仓超时,即将降落至备降点"), |
| | | ERROR_8006(8006, "机场开仓失败,即将降落至备降点"), |
| | | ERROR_8007(8007, "二维码识别超时,即将降落至备降点"), |
| | | ERROR_8008(8008, "二维码识别超时,请人工接管"), |
| | | ERROR_8009(8009, "二维码精准降落初始化失败,请检查载荷类型"), |
| | | ERROR_8010(8010, "未识别到二维码,即将降落至备降点"), |
| | | ERROR_8011(8011, "二维码降落中检测到被动返航,请注意飞机电量,必要时遥控器接管"), |
| | | ERROR_8012(8012, "云盒控制权丢失,MSDK程序抢夺控制权,有炸机风险请遥控器接管"), |
| | | ERROR_8013(8013, "云盒控制权丢失,遥控器失联重置"), |
| | | ERROR_8014(8014, "云盒控制权丢失,遥控器非P挡"), |
| | | ERROR_8015(8015, "云盒控制权丢失,遥控器切挡"), |
| | | ERROR_8016(8016, "云盒控制权丢失,遥控器暂停触发"), |
| | | ERROR_8017(8017, "云盒控制权丢失,遥控器触发返航"), |
| | | ERROR_8018(8018, "云盒控制权丢失,飞机触发低电量返航,请注意安全"), |
| | | ERROR_8019(8019, "云盒控制权丢失,飞机触发低电量强制降落,请注意安全"), |
| | | ERROR_8020(8020, "云盒控制权丢失,OSDK断连,请遥控器接管飞机"), |
| | | ERROR_8021(8021, "云盒控制权丢失,到达禁飞区边界,请确认空域"), |
| | | ERROR_8022(8022, "飞机距前障碍物距离小于3米,请谨慎飞行"), |
| | | ERROR_8023(8023, "飞机距右障碍物距离小于3米,请谨慎飞行"), |
| | | ERROR_8024(8024, "飞机距后障碍物距离小于3米,请谨慎飞行"), |
| | | ERROR_8025(8025, "飞机距左障碍物距离小于3米,请谨慎飞行"), |
| | | ERROR_8026(8026, "飞机距上障碍物距离小于3米,请谨慎飞行"), |
| | | ERROR_8027(8027, "视频编解码模块异常,开始发送原画,请不要用遥控器长时间查看载荷媒体库"), |
| | | ERROR_8028(8028, "视频编解码模块异常,即将降落至备降点"), |
| | | ERROR_8029(8029, "指点飞行退出,检测到云盒无控制权"), |
| | | ERROR_8030(8030, "起飞机场备降点距机场距离不合理,范围应在【5~500】米,请重新设置"), |
| | | ERROR_8031(8031, "降落机场备降点距机场距离不合理,范围应在【5~500】米,请重新设置"), |
| | | ERROR_8032(8032, "一键起飞指定高度退出,检测到手动中断飞机起飞升高"), |
| | | ERROR_8033(8033, "一键起飞指定高度退出,检测到飞行器距上障碍物距离小于3米"), |
| | | ERROR_8034(8034, "一键起飞指定高度退出,检测到云盒无控制权"), |
| | | ERROR_8035(8035, "一键降落指定高度退出,飞行器已取消降落"), |
| | | ERROR_8036(8036, "一键降落指定高度退出,检测到飞行器距下障碍物距离小于10米"), |
| | | ERROR_8037(8037, "距离控制飞行退出,检测到飞行器不在空中"), |
| | | ERROR_8038(8038, "距离控制飞行退出,检测到云盒丢失控制权"), |
| | | ERROR_8039(8039, "距离控制飞行退出,检测到飞行器返航"), |
| | | ERROR_8040(8040, "距离控制飞行退出,检测到飞行器降落"), |
| | | ERROR_8041(8041, "距离控制飞行退出,检测到已到达最长控制时长"), |
| | | ERROR_8042(8042, "飞行器已在自定义电子围栏外,控制已失效,请立即返航或降落"), |
| | | ERROR_8043(8043, "飞行器已在自定义禁飞区内,控制已失效,请立即返航或降落"), |
| | | ERROR_8044(8044, "一键起飞指定高度退出,检测到紧急制动"), |
| | | ERROR_8045(8045, "打点飞行退出,检测到紧急制动"), |
| | | ERROR_8046(8046, "飞行器悬停等待机场开仓中,请勿操控飞行器"), |
| | | ERROR_8047(8047, "距离控制飞行退出,检测到紧急制动"),ERROR_65535(65535, "致命错误!意外结果!"), |
| | | ERROR_65536(65536, "成功"), |
| | | ERROR_65537(65537, "最小初始航点值设置大于允许的最大航点值"), |
| | | ERROR_65538(65538, "最小初始航点值小于允许的最小航点数量"), |
| | | ERROR_65539(65539, "航点终点指数等于或大于总航点数"), |
| | | ERROR_65540(65540, "开始指数大于上传的航线的终点指数"), |
| | | ERROR_65541(65541, "上传的航点终点指数大于初始航点总数"), |
| | | ERROR_65542(65542, "预期下载的首尾航点指数不在FC中存储的范围内"), |
| | | ERROR_65544(65544, "当前位置远离第一个航点"), |
| | | ERROR_65546(65546, "两个相邻航点过于接近,其结果可能与实际不同"), |
| | | ERROR_65547(65547, "两个相邻的航点不在[0.5m,5000m]范围内,其结果可能与实际不同"), |
| | | ERROR_65548(65548, "上传航线的最大速度大于总体最大速度"), |
| | | ERROR_65549(65549, "上传航线的本地巡航速度大于本地最高限速"), |
| | | ERROR_65550(65550, "上传航线的本地巡航速度大于总体最高限速"), |
| | | ERROR_65551(65551, "总体最大速度大于允许的最大速度或小于允许的最小速度"), |
| | | ERROR_65552(65552, "总体巡航速度大于总体最大速度"), |
| | | ERROR_65553(65553, "返航模式超出航线设置的返航范围"), |
| | | ERROR_65554(65554, "结束操作超出计划航线设定的结束范围"), |
| | | ERROR_65555(65555, "rc_lost_action超出计划航线设定的 rc_lost_action范围"), |
| | | ERROR_65556(65556, "上传航线的偏航角模式无效。参考航线规划中的偏航角模式定义。"), |
| | | ERROR_65557(65557, "上传航线中的偏航指令不在范围内。范围应在 [-180 180]度"), |
| | | ERROR_65558(65558, "上传航线的偏航转向无效。应为0:顺时针或1:逆时针"), |
| | | ERROR_65559(65559, "上载航线的航线类型无效。参考math\\u waypoint\\u planner.h中定义的航点类型"), |
| | | ERROR_65560(65560, "开始/停止指令无效"), |
| | | ERROR_65561(65561, "暂停/恢复指令不属于任何指令范围"), |
| | | ERROR_65562(65562, "break/restore命令不等于任何指令范围"), |
| | | ERROR_65563(65563, "初始参考点位置坐标超出设定的范围"), |
| | | ERROR_65564(65564, "阻尼距离大于或等于相邻航点的距离"), |
| | | ERROR_65565(65565, "无法将航线退出类型设置为航线"), |
| | | ERROR_65566(65566, "地面站初始信息尚未上传"), |
| | | ERROR_65567(65567, "航线尚未上传"), |
| | | ERROR_65568(65568, "最小初始航点数未上传"), |
| | | ERROR_65569(65569, "收到起飞命令时航点计划已开始"), |
| | | ERROR_65570(65570, "收到停止命令时航点计划未运行"), |
| | | ERROR_65571(65571, "地面站未启动(暂停/继续时)"), |
| | | ERROR_65572(65572, "地面站未启动(中断/恢复时)"), |
| | | ERROR_65573(65573, "不在航点任务内(无法暂停/继续或中断/恢复)"), |
| | | ERROR_65574(65574, "当前状态是暂停,无法再次使用暂停命令"), |
| | | ERROR_65575(65575, "当前不在暂停状态,无法使用继续命令"), |
| | | ERROR_65576(65576, "当前状态是中断,无法再次使用中断命令"), |
| | | ERROR_65577(65577, "当前不在中断状态,无法使用恢复命令"), |
| | | ERROR_65578(65578, "配置禁止使用暂停/继续API"), |
| | | ERROR_65579(65579, "配置禁止使用中断/恢复API"), |
| | | ERROR_65580(65580, "没有可还原断点的记录"), |
| | | ERROR_65581(65581, "当前没有记录可恢复的轨迹任务点"), |
| | | ERROR_65582(65582, "没有下一个轨迹任务点可进行恢复"), |
| | | ERROR_65583(65583, "没有再下一个轨迹任务点可进行恢复"), |
| | | ERROR_65584(65584, "上传的航点索引与储存的航点不连续"), |
| | | ERROR_65585(65585, "选择进入的航线模式设置的不是这个初始起点的航线"), |
| | | ERROR_65586(65586, "航点计划在航点初始化时已启动"), |
| | | ERROR_65587(65587, "航点阻尼距离超出设定范围"), |
| | | ERROR_65588(65588, "航点坐标位置超出合理范围"), |
| | | ERROR_65589(65589, "首个航点类型错误,无法启动航线"), |
| | | ERROR_65590(65590, "航点位置超出高度范围"), |
| | | ERROR_65592(65592, "航点位置超出距离范围"), |
| | | ERROR_65593(65593, "航点位置超出高度范围"), |
| | | ERROR_65696(65696, "未上传航线"),ERROR_131072(131072, "成功"), |
| | | ERROR_131073(131073, "航点验证失败"), |
| | | ERROR_131074(131074, "原点尚未记录"), |
| | | ERROR_131075(131075, "由于GPS信号不良,当前定位精度较低"), |
| | | ERROR_131077(131077, "RTK未连接或无效"), |
| | | ERROR_196608(196608, "成功"), |
| | | ERROR_196609(196609, "轨道穿过NFZ"), |
| | | ERROR_196610(196610, "智能电池的电流容量或非智能电池的电压低于1级或2级阈值"), |
| | | ERROR_4194304(4194304, "成功"), |
| | | ERROR_4194305(4194305, "操作的ID是重复的"), |
| | | ERROR_4194306(4194306, "内存空间不足"), |
| | | ERROR_4194307(4194307, "用于获取操作信息的缓冲区大小小于操作大小"), |
| | | ERROR_4194308(4194308, "找不到操作的ID"), |
| | | ERROR_4194309(4194309, "下载操作开始ID大于操作结束ID"), |
| | | ERROR_4194310(4194310, "无法下载或获取操作内核中存储的无操作项的最小-最大操作ID"), |
| | | ERROR_4259840(4259840, "成功"), |
| | | ERROR_4259841(4259841, "触发器的类型ID无效"), |
| | | ERROR_4259873(4259873, "到达航路点触发器中的结束索引小于开始索引"), |
| | | ERROR_4259874(4259874, "间隔大于开始索引到结束索引的差值"), |
| | | ERROR_4259875(4259875, "自动终止,间隔大于开始索引到结束索引的差值"), |
| | | ERROR_4259905(4259905, "关联类型大于最大值"), |
| | | ERROR_4259969(4259969, "间隔类型大于最大值"), |
| | | ERROR_4325376(4325376, "成功"), |
| | | ERROR_4325377(4325377, "不支持执行致动器,例如,尝试停止摄像机拍摄"), |
| | | ERROR_4325378(4325378, "执行器的类型ID无效"), |
| | | ERROR_4325379(4325379, "执行器的功能ID无效"), |
| | | ERROR_4390912(4390912, "成功"), |
| | | ERROR_4390913(4390913, "无法将快照cmd发送到相机"), |
| | | ERROR_4390914(4390914, "无法向摄像头发送视频启动命令"), |
| | | ERROR_4390915(4390915, "无法向摄像头发送视频停止命令"), |
| | | ERROR_4390916(4390916, "相机焦点参数xy超出有效范围(0,1)"), |
| | | ERROR_4390917(4390917, "无法向摄像头发送调焦指令"), |
| | | ERROR_4390918(4390918, "无法向摄像头发送聚焦指令"), |
| | | ERROR_4390919(4390919, "相机对焦功能的焦距超出有效范围"), |
| | | ERROR_4391168(4391168, "相机无法执行命令"), |
| | | ERROR_4456448(4456448, "成功"), |
| | | ERROR_4456449(4456449, "控制参数无效"), |
| | | ERROR_4456450(4456450, "时间参数无效"), |
| | | ERROR_4456451(4456451, "无法到达目标角度"), |
| | | ERROR_4456452(4456452, "转向设备忙或无转向设备"), |
| | | ERROR_4456453(4456453, "索引错误"), |
| | | ERROR_4587520(4587520, "成功"), |
| | | ERROR_4587521(4587521, "偏航角大于最大偏航角"), |
| | | ERROR_4587522(4587522, "超时,无法达到目标偏航角"), |
| | | ERROR_4587523(4587523, "偏航角已占用"), |
| | | ERROR_4587524(4587524, "设置偏航角与现在的值相同"), |
| | | ERROR_4653056(4653056, "成功"), |
| | | ERROR_4653057(4653057, "载荷控制指令发送失败"), |
| | | ERROR_4653058(4653058, "载荷控制指令执行失败"); |
| | | /** |
| | | * 枚举码 |
| | | */ |
| | | private Integer code; |
| | | /** |
| | | * 枚举描述 |
| | | */ |
| | | private String desc; |
| | | |
| | | private ErrorCodeEnum(Integer code, String desc) { |
| | | this.code = code; |
| | | this.desc = desc; |
| | | } |
| | | |
| | | public Integer getCode() { |
| | | return code; |
| | | } |
| | | |
| | | public String getDesc() { |
| | | return desc; |
| | | } |
| | | |
| | | /** |
| | | * 根据枚举码获取枚举 |
| | | * |
| | | * @param code 枚举码 |
| | | * @return 枚举 |
| | | */ |
| | | public static final ErrorCodeEnum getByCode(Integer code) { |
| | | if (StringUtils.isNull(code)) { |
| | | return null; |
| | | } |
| | | for (ErrorCodeEnum item : ErrorCodeEnum.values()) { |
| | | if (item.getCode() == code) { |
| | | return item; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * 根据枚举码获取枚举描述 |
| | | * |
| | | * @param code 枚举码 |
| | | * @return 枚举描述 |
| | | */ |
| | | public static final String getDescByCode(Integer code) { |
| | | if (StringUtils.isNull(code)) { |
| | | return "错误码为空"; |
| | | } |
| | | for (ErrorCodeEnum item : ErrorCodeEnum.values()) { |
| | | if (Objects.equals(item.getCode(), code)) { |
| | | return item.getDesc(); |
| | | } |
| | | } |
| | | return "找不到错误码对应的错误描述,请联系管理员"; |
| | | } |
| | | } |
| | |
| | | import com.ard.tianyu.netty.command.real.UavStateCmd; |
| | | import com.ard.tianyu.netty.command.real.UavTelemetryDataCmd; |
| | | import com.ard.tianyu.netty.command.register.*; |
| | | import com.ard.tianyu.netty.handler.ErrorCodeEnum; |
| | | import com.ard.tianyu.service.ITyService; |
| | | import io.netty.channel.Channel; |
| | | import io.netty.channel.ChannelFuture; |
| | |
| | | case 0x01: |
| | | // 处理心跳消息 |
| | | RegisterReplyCmd registerReplyCommand = (RegisterReplyCmd) tyCommand; |
| | | log.debug("收到注册消息-->处理注册消息:{}", registerReplyCommand.getSuccess()); |
| | | logPrint("注册消息", registerReplyCommand.getSuccess()); |
| | | if (registerReplyCommand.getSuccess() != 1) { |
| | | // 注册失败,重新注册 |
| | | log.info("注册失败,重新注册"); |
| | |
| | | case 0x02: |
| | | // 处理注册消息 |
| | | HeartbeatReplyCmd heartbeatReplyCmd = (HeartbeatReplyCmd) tyCommand; |
| | | log.debug("收到心跳消息-->处理心跳消息:{}", heartbeatReplyCmd.getTimestamp()); |
| | | logPrint("心跳消息", heartbeatReplyCmd.getTimestamp()); |
| | | break; |
| | | case 0x03: |
| | | // 处理订阅消息 |
| | |
| | | case 0x0A: |
| | | // 处理云盒开关机通知消息 |
| | | BoxPowerStatusReplyCmd boxPowerStatusReplyCmd = (BoxPowerStatusReplyCmd) tyCommand; |
| | | log.debug("收到云盒开关机通知消息-->状态:{}", boxPowerStatusReplyCmd.getStatus()); |
| | | logPrint("云盒开关机通知消息", boxPowerStatusReplyCmd.getStatus()); |
| | | break; |
| | | case (byte) 0xA8: |
| | | // 处理无人机状态消息 |
| | | log.debug("收到无人机状态消息-->无人机状态消息"); |
| | | UavStateCmd uavStateCmd = (UavStateCmd) tyCommand; |
| | | UavState uavState = UavStateConverter.convertProtoToEntity(uavStateCmd.getUavState()); |
| | | UavStateCache.putUavState(uavState); |
| | | logPrint("无人机状态", uavState.getBoxSn()); |
| | | break; |
| | | case (byte) 0xA9: |
| | | // 处理无人机遥测消息 |
| | | log.debug("收到无人机遥测消息-->无人机遥测消息"); |
| | | UavTelemetryDataCmd uavTelemetryDataCmd = (UavTelemetryDataCmd) tyCommand; |
| | | TelemetryData telemetryData = UavTelemetryDataConverter.convertProtoToEntity(uavTelemetryDataCmd.getTelemetryData()); |
| | | UavTelemetryDataCache.putUavTelemetryData(telemetryData); |
| | | logPrint("无人机遥测", telemetryData.getBoxSn()); |
| | | break; |
| | | case (byte) 0x0C: |
| | | // 处理无人机信道质量数据 |
| | | log.debug("收到无人机信道质量数据消息-->无人机信道质量数据消息"); |
| | | SignalInfoCmd signalInfoCmd = (SignalInfoCmd) tyCommand; |
| | | SignalInfo signalInfo = UavSignalInfoConverter.convertProtoToEntity(signalInfoCmd.getSignalInfo()); |
| | | UavSignalInfoCache.putUavSignalInfoCache(signalInfo); |
| | | logPrint("无人机信道质量", signalInfo.getBoxSn()); |
| | | break; |
| | | case (byte) 0xD1: |
| | | // 处理无人机 |
| | |
| | | UavInitReplyCmd uavInitReplyCmd = (UavInitReplyCmd) tyCommand; |
| | | UavInitInfoCmd uavInitCommand = new UavInitInfoCmd(uavInitReplyCmd.getBoxSn()); |
| | | this.sendMessage(tyConfiguration.getIpPort(), uavInitCommand); |
| | | log.info("收到无人机初始化详情-回复防止再次发送"); |
| | | logPrint("无人机初始化详情", uavInitCommand.getBoxSn()); |
| | | } |
| | | if (tyCommand instanceof UavReadyReplyCmd) { |
| | | UavReadyReplyCmd uavReadyReplyCmd = (UavReadyReplyCmd) tyCommand; |
| | | log.info("收到无人机准备完成通知,电池电量{} 经度{} 纬度{} 海拔{}", uavReadyReplyCmd.getBatteryPower(), uavReadyReplyCmd.getLongitude(), uavReadyReplyCmd.getLatitude(), uavReadyReplyCmd.getAltitude()); |
| | | logPrint("无人机准备完成通知", uavReadyReplyCmd.getBatteryPower()); |
| | | } |
| | | if (tyCommand instanceof CameraModeReplyCmd) { |
| | | CameraModeReplyCmd cameraModeReplyCommand = (CameraModeReplyCmd) tyCommand; |
| | | log.info("收到无人机设置相机模式回复:{} 错误码:{}", String.format("0x%02X", cameraModeReplyCommand.getResult() & 0xFF), cameraModeReplyCommand.getErrorCode()); |
| | | logPrint("无人机设置相机模式", cameraModeReplyCommand.getResult(), cameraModeReplyCommand.getErrorCode()); |
| | | } |
| | | if (tyCommand instanceof FlyWayEndReplyCmd) { |
| | | FlyWayEndReplyCmd flyWayEndReplyCmd = (FlyWayEndReplyCmd) tyCommand; |
| | | log.info("收到无人机飞行结束通知:状态:{}", flyWayEndReplyCmd.getResult()); |
| | | logPrint("无人机飞行结束", flyWayEndReplyCmd.getResult(), flyWayEndReplyCmd.getErrorCode()); |
| | | } |
| | | if (tyCommand instanceof CapturePicReplyCmd) { |
| | | CapturePicReplyCmd capturePicReplyCommand = (CapturePicReplyCmd) tyCommand; |
| | | log.info("收到无人机拍照回复:{} 错误码:{}", String.format("0x%02X", capturePicReplyCommand.getResult() & 0xFF), capturePicReplyCommand.getErrorCode()); |
| | | logPrint("无人机拍照", capturePicReplyCommand.getResult(), capturePicReplyCommand.getErrorCode()); |
| | | } |
| | | if (tyCommand instanceof RecordStartReplyCmd) { |
| | | RecordStartReplyCmd recordStartReplyCommand = (RecordStartReplyCmd) tyCommand; |
| | | log.info("收到无人机开始录像回复:{} 错误码:{}", String.format("0x%02X", recordStartReplyCommand.getResult() & 0xFF), recordStartReplyCommand.getErrorCode()); |
| | | logPrint("无人机开始录像", recordStartReplyCommand.getResult(), recordStartReplyCommand.getErrorCode()); |
| | | } |
| | | if (tyCommand instanceof RecordStopReplyCmd) { |
| | | RecordStopReplyCmd recordStopReplyCommand = (RecordStopReplyCmd) tyCommand; |
| | | log.info("收到无人机停止录像回复:{} 错误码:{}", String.format("0x%02X", recordStopReplyCommand.getResult() & 0xFF), recordStopReplyCommand.getErrorCode()); |
| | | logPrint("无人机停止录像", recordStopReplyCommand.getResult(), recordStopReplyCommand.getErrorCode()); |
| | | } |
| | | //起飞回复 |
| | | if (tyCommand instanceof TakeOffReplyCmd) { |
| | | TakeOffReplyCmd takeOffReplyCommand = (TakeOffReplyCmd) tyCommand; |
| | | log.info("收到无人机起飞回复:{} 错误码:{}", String.format("0x%02X", takeOffReplyCommand.getResult() & 0xFF), takeOffReplyCommand.getErrorCode()); |
| | | logPrint("无人机起飞", takeOffReplyCommand.getResult(), takeOffReplyCommand.getErrorCode()); |
| | | } |
| | | //返航回复 |
| | | if (tyCommand instanceof ReturnHomeReplyCmd) { |
| | | ReturnHomeReplyCmd returnHomeReplyCmd = (ReturnHomeReplyCmd) tyCommand; |
| | | log.info("收到无人机返航回复:{} 错误码:{}", String.format("0x%02X", returnHomeReplyCmd.getResult() & 0xFF), returnHomeReplyCmd.getErrorCode()); |
| | | logPrint("无人机返航", returnHomeReplyCmd.getResult(), returnHomeReplyCmd.getErrorCode()); |
| | | } |
| | | break; |
| | | default: |
| | |
| | | } |
| | | } |
| | | |
| | | //公共日志打印 |
| | | private void logPrint(String message, Object obj) { |
| | | log.debug("收到{}回复{}", message, obj); |
| | | } |
| | | //公共日志打印 |
| | | private void logPrint(String message, byte result, Integer errorCode) { |
| | | log.info("收到{}回复:{} 错误码:{}【{}】", |
| | | message, |
| | | String.format("0x%02X", result & 0xFF), |
| | | errorCode, |
| | | ErrorCodeEnum.getDescByCode(errorCode)); |
| | | } |
| | | |
| | | /** |
| | | * 定时3秒发送心跳指令 |
| | | */ |