From 37aeda6f5a45a220955eafd55bf5154c71c2d705 Mon Sep 17 00:00:00 2001
From: liusuyi <1951119284@qq.com>
Date: Wed, 23 Oct 2024 10:06:09 +0800
Subject: [PATCH] 优化

---
 ard-work/pom.xml                                                                |    6 
 ard-work/src/main/java/com/ard/tianyu/netty/handler/ClientHandler.java          |    8 
 ard-work/src/main/java/com/ard/tianyu/netty/protobuf/TelemetryDataBuf-new.proto |  280 
 ard-work/src/main/java/com/ard/tianyu/netty/handler/MessageProtocolDecoder.java |   49 
 ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java           |   41 
 ard-work/src/main/java/com/ard/tianyu/netty/command/UavDataCommand.java         |   29 
 ard-work/src/main/java/com/ard/tianyu/netty/command/UavStateCommand.java        |   25 
 ard-work/src/main/java/com/ard/tianyu/netty/protobuf/TelemetryDataPB.java       | 36013 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 ard-work/src/main/java/com/ard/tianyu/service/ITyService.java                   |    6 
 ard-admin/src/main/resources/application-dev.yml                                |    4 
 ard-work/src/main/java/com/ard/tianyu/config/TyConfiguration.java               |    9 
 11 files changed, 36,439 insertions(+), 31 deletions(-)

diff --git a/ard-admin/src/main/resources/application-dev.yml b/ard-admin/src/main/resources/application-dev.yml
index cb2ffc8..985f949 100644
--- a/ard-admin/src/main/resources/application-dev.yml
+++ b/ard-admin/src/main/resources/application-dev.yml
@@ -24,12 +24,12 @@
 # 天宇服务器配置
 tianyu:
   # 天宇http服务器地址
-  endpoint: 112.98.106.22:12000
+  endpoint: 112.98.106.22:22000
   accesskeyid: qmfmd3Ws7M4dMcylnrTU
   accesskeysecret: 5WBU2uEhHZaVefpZdaxpFh4LJW9fZZaa
   # 天宇tcp服务器地址
   tcpserver: 112.98.106.22
-  tcpport: 13002
+  tcpport: 23002
 # netty配置
 netty:
   tcp:
diff --git a/ard-work/pom.xml b/ard-work/pom.xml
index 6e94a3d..9dd55b0 100644
--- a/ard-work/pom.xml
+++ b/ard-work/pom.xml
@@ -49,6 +49,12 @@
             <scope>provided</scope>
         </dependency>
 
+        <!--protobuf的依赖-->
+        <dependency>
+            <groupId>com.google.protobuf</groupId>
+            <artifactId>protobuf-java</artifactId>
+            <version>3.20.1</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/ard-work/src/main/java/com/ard/tianyu/config/TyConfiguration.java b/ard-work/src/main/java/com/ard/tianyu/config/TyConfiguration.java
index 8c9298e..ebb706a 100644
--- a/ard-work/src/main/java/com/ard/tianyu/config/TyConfiguration.java
+++ b/ard-work/src/main/java/com/ard/tianyu/config/TyConfiguration.java
@@ -72,10 +72,13 @@
                 .encryptStr(getEncryptStr())
                 .timeStamp(timestamp)
                 .build();
-        TyHttpCommonReceiver<AccessTokenReceiver> getTokenRes = tyClient.getToken(gtd);
+        try {
+            TyHttpCommonReceiver<AccessTokenReceiver> getTokenRes = tyClient.getToken(gtd);
+            accessToken = getTokenRes.getContent();
+        } catch (Exception e) {
+            log.error("获取token失败:{}", e.getMessage());
+        }
         //{"state":0,"content":{"companyId":4127,"accessToken":"sOONT0MMVdoKcMBibb40xxgrUrq0Hw9RFiajic3KOzoNtk"}}
-        accessToken = getTokenRes.getContent();
         return accessToken;
     }
-
 }
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/UavDataCommand.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/UavDataCommand.java
new file mode 100644
index 0000000..59fb603
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/UavDataCommand.java
@@ -0,0 +1,29 @@
+package com.ard.tianyu.netty.command;
+
+import com.ard.tianyu.netty.protobuf.TelemetryDataPB;
+import io.netty.buffer.ByteBuf;
+
+/**
+ * UavDataCommand
+ *
+ * @author liusuyi
+ * @date 2024年10月23日9:33
+ **/
+public class UavDataCommand extends BaseCommand{
+    private TelemetryDataPB.TelemetryData telemetryData;
+    // 构造函数
+    public UavDataCommand(TelemetryDataPB.TelemetryData telemetryData) {
+        this.telemetryData = telemetryData;
+    }
+
+    // 获取无人机状态数据
+    public TelemetryDataPB.TelemetryData getTelemetryData() {
+        return telemetryData;
+    }
+
+    // 实现 encode 方法,如果需要
+    @Override
+    public void encode(ByteBuf out) {
+        // 根据需要实现编码
+    }
+}
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/UavStateCommand.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/UavStateCommand.java
new file mode 100644
index 0000000..ec395dc
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/UavStateCommand.java
@@ -0,0 +1,25 @@
+package com.ard.tianyu.netty.command;
+
+import com.ard.tianyu.netty.command.BaseCommand;
+import com.ard.tianyu.netty.protobuf.TelemetryDataPB;
+import io.netty.buffer.ByteBuf;
+
+public class UavStateCommand extends BaseCommand {
+    private TelemetryDataPB.UavState uavState;  // ProtoBuf 数据类
+
+    // 构造函数
+    public UavStateCommand(TelemetryDataPB.UavState uavState) {
+        this.uavState = uavState;
+    }
+
+    // 获取无人机状态数据
+    public TelemetryDataPB.UavState getUavState() {
+        return uavState;
+    }
+
+    // 实现 encode 方法,如果需要
+    @Override
+    public void encode(ByteBuf out) {
+        // 根据需要实现编码
+    }
+}
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/handler/ClientHandler.java b/ard-work/src/main/java/com/ard/tianyu/netty/handler/ClientHandler.java
index be26ca9..3fc7b5f 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/handler/ClientHandler.java
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/handler/ClientHandler.java
@@ -29,10 +29,10 @@
 
     @Override
     public void channelRead0(ChannelHandlerContext ctx, BaseCommand command) {
-        //InetSocketAddress ipSocket = (InetSocketAddress) ctx.channel().remoteAddress();
-        //String host = ipSocket.getHostString();
-        //int port = ipSocket.getPort();
-        //tyService.processMessage(host + "/" + port, msg);
+        InetSocketAddress ipSocket = (InetSocketAddress) ctx.channel().remoteAddress();
+        String host = ipSocket.getHostString();
+        int port = ipSocket.getPort();
+        tyService.processMessage(host + ":" + port, command);
     }
 
     @Override
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/handler/MessageProtocolDecoder.java b/ard-work/src/main/java/com/ard/tianyu/netty/handler/MessageProtocolDecoder.java
index 7b08b83..795bffb 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/handler/MessageProtocolDecoder.java
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/handler/MessageProtocolDecoder.java
@@ -2,6 +2,9 @@
 
 import com.ard.tianyu.netty.command.BaseCommand;
 import com.ard.tianyu.netty.command.HeartbeatReplyCommand;
+import com.ard.tianyu.netty.command.UavDataCommand;
+import com.ard.tianyu.netty.command.UavStateCommand;
+import com.ard.tianyu.netty.protobuf.TelemetryDataPB;
 import io.netty.buffer.ByteBuf;
 import io.netty.channel.ChannelHandlerContext;
 import io.netty.handler.codec.ByteToMessageDecoder;
@@ -20,7 +23,7 @@
 
         in.markReaderIndex(); // 标记当前读取位置
         short dataHead = in.readShort();
-        if(dataHead != 0x6A77){
+        if (dataHead != 0x6A77) {
             return;
         }
         short dataLength = in.readShort();
@@ -30,22 +33,36 @@
             return;
         }
         byte cmdCode = in.readByte();
-        BaseCommand command = null;
-
-        // 根据 cmdCode 创建相应消息对象
-        if (cmdCode == 0x01) { // 注册回复消息
-            byte success = in.readByte(); // 读取是否成功
-            log.warn("注册回复: {}", success == 0x01 ? "成功" : "失败");
+        BaseCommand baseCommand = null;
+        switch (cmdCode) {
+            case 0x01:
+                byte success = in.readByte(); // 读取是否成功
+                log.warn("注册回复: {}", success == 0x01 ? "成功" : "失败");
+                break;
+            case 0x02:
+                long timestamp = in.readLong(); // 读取时间戳
+                baseCommand = new HeartbeatReplyCommand(timestamp);
+                log.warn("心跳回复: 时间戳 {}", timestamp);
+                break;
+            case (byte) 0xA8:
+                byte[] uavStatus = new byte[dataLength - 1];
+                in.readBytes(uavStatus);  // 读取 ProtoBuf 数据
+                TelemetryDataPB.UavState uavState = TelemetryDataPB.UavState.parseFrom(uavStatus);
+                baseCommand = new UavStateCommand(uavState);
+                log.warn("无人机状态数据: {}", uavState.getBoxSn());
+                break;
+            case (byte) 0xA9:
+                byte[] uavData = new byte[dataLength - 1];
+                in.readBytes(uavData);
+                TelemetryDataPB.TelemetryData telemetryData = TelemetryDataPB.TelemetryData.parseFrom(uavData);
+                baseCommand = new UavDataCommand(telemetryData);
+                log.warn("无人机遥测数据: {}", telemetryData.getBoxSn());
+                break;
+            default:
+                log.warn("无法识别的命令码: {}", String.format("0x%02X", cmdCode & 0xFF));//String.format("0x%02X", cmdCode & 0xFF)
         }
-        if (cmdCode == 0x02) { // 注册回复消息
-            long timestamp = in.readLong(); // 读取时间戳
-            command = new HeartbeatReplyCommand(timestamp); // 创建心跳回复对象
-            log.debug("心跳回复: 时间戳 {}", timestamp);
-        }
-        if (command != null) {
-            out.add(command); // 添加解码的命令对象到输出列表
-        } else {
-            log.warn("无法识别的命令码: {}", cmdCode);//String.format("0x%02X", cmdCode & 0xFF)
+        if (baseCommand != null) {
+            out.add(baseCommand);
         }
     }
 }
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/protobuf/TelemetryDataBuf-new.proto b/ard-work/src/main/java/com/ard/tianyu/netty/protobuf/TelemetryDataBuf-new.proto
new file mode 100644
index 0000000..16a5c93
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/protobuf/TelemetryDataBuf-new.proto
@@ -0,0 +1,280 @@
+syntax = "proto3";
+option java_package = "com.ard.tianyu.netty.protobuf";
+option java_outer_classname ="TelemetryDataPB";
+
+//下行遥测
+message TelemetryData{
+    double lng=1;//经度
+    double lat=2;//纬度
+    float altitude=3;//海拔高度(椭球高)(单位:米)[与遥控器显示值不同源,可能不一致。会受周围气压湿度等环境影响,数据差异及误差比较大]
+    float ultrasonic=4;//相对高度(单位:米)[飞行器距地面10米以下,此值为真实距地距离,大于10米时为距起飞点的相对高度]
+    float pitch=5;//俯仰角
+    float roll=6;//横滚角
+    float yaw=7;//偏航角
+    float airspeed=8;//空速(单位:米/秒)
+    float velocity=9;//地速(单位:米/秒)
+    uint64 timestamp=10;//时间戳
+    float ptpitch=11;//载荷俯仰角
+    float ptroll=12;//载荷横滚角
+    float ptyaw=13;//载荷航向角
+    float zoomfactor=14;//载荷当前倍数
+    string boxSn=15;//云盒子编号
+    string batteryPower=16;//电池电量,多个电池以下划线分割,如:80_60
+    uint32 satelliteCount=17;//卫星计数
+    uint64 taskId=18;//任务编号
+    double rtkLng=19;//rtk经度
+    double rtkLat=20;//rtk纬度
+    float rtkHFSL=21;//rtk海拔高度(平均海平面高度)(单位:米)   
+    uint32 rtkPositionInfo=22;//rtk状态(值为50时[rtk数据fix固定解],rtk的经纬度及海拔高度值可用)
+    uint32 airFlyTimes=23;//当前架次飞行时长(单位:秒) [起飞->落地 视为一个架次]
+    float airFlyDistance=24;//当前架次飞行实际距离(单位:米)
+    string uavSn=25;//无人机编号
+    string uavModel=26;//无人机型号
+    float homeRange=27;//距降落点水平直线距离(单位:米)
+    uint32 flightMode=28;//飞行模式:1=手动控制模式,2=姿态模式,6=MODE_P_GPS,9=热点任务中,11=自动起飞中,12=降落中,14=航线中,15=返航中,17=虚拟摇杆控制中,33=强制降落中,41=解锁电机准备起飞中
+    float targetDistance=29;//距目标点实际距离(单位:米) [适用于打点飞行和航线飞行]
+    uint32 predictFlyTime=30;//预计剩余飞行时间[适用于打点飞行和航线飞行]
+    float ultrasonicMax=31;//本架次最大相对高度值
+    float ultrasonicMin=32;//本架次最小相对高度值    
+}
+
+//飞行历史
+message TelemetryList{
+    repeated TelemetryData telemetryList = 1;
+}
+
+ //信道质量
+message SignalInfo{
+   string mode=1; //入网模式:NR5G-SA,NR5G-NSA,LTE
+   string mcc=2; //NR5G-SA,NR5G-NSA,LTE
+   string mnc=3; //NR5G-SA,NR5G-NSA,LTE
+   string cellid=4; //NR5G-SA,LTE
+   string pcid=5; //NR5G-SA,NR5G-NSA,LTE
+   string tac=6; //NR5G-SA,LTE
+   string arfcn=7; //NR5G-SA,NR5G-NSA
+   string band=8; //NR5G-SA,NR5G-NSA
+   string nr_dl_bandwidth=9; //NR5G-SA
+   string rsrp=10; //NR5G-SA,NR5G-NSA,LTE
+   string rsrq=11; //NR5G-SA,NR5G-NSA,LTE
+   string sinr=12; //NR5G-SA,NR5G-NSA,LTE
+   string tx_power=13; //NR5G-SA,LTE
+   string srxlev=14; //NR5G-SA,LTE
+   string cqi=15; //LTE
+   string earfcn=16; //LTE
+   string freq_band_ind=17; //LTE
+   string ul_bandwidth=18; //LTE
+   string dl_bandwidth=19; //LTE
+   string is_tdd=20; //LTE
+   string rssi=21; //LTE
+   string duplex_mode=22; //NR5G-SA
+   double lng=23;//经度
+   double lat=24;//纬度
+   float height=25;//高度(单位:米)
+   uint32 timestamp=26;//时间戳(单位:秒)
+   uint32 boxstate=27;//1=线缆故障,2=OSDK未激活,3=正常,4=云盒固件更新
+   string isp=28;//运营商
+   uint32 tempMax=29;//模组芯片温度(单位:摄氏度)
+   string prx_rsrp=30;//prx路径的rsrp值
+   string drx_rsrp=31;//drx路径的rsrp值
+   string rx2_rsrp=32;//rx2路径的rsrp值
+   string rx3_rsrp=33;//rx3路径的rsrp值
+   string box_sn=34;//云盒编号
+}
+
+message SignalList{
+    repeated SignalInfo signalInfo = 1;
+}
+
+//无人机状态对象
+message UavState{
+    FlightControllerState flightControllerState=1;//飞控状态
+    BatteryState batteryState=2;//电池状态
+    PtzState ptzState=3;//云台状态
+    CameraState cameraState=4;//相机状态
+    MissionState missionState=5;//任务状态
+    string boxSn=6;//云盒编号
+    AvoidanceData avoidanceData=7;//避障数据
+    repeated HmsAlarmData hmsAlarmData=8;//Hms报警信息[飞机告警信息]
+}
+
+message FlightControllerState{
+    uint32 satelliteCount=1;//卫星计数
+    uint32 gpsSignalLevel=2;//GPS信号级别,0~5[4,5等级可以执行航线]
+    uint32 flightMode=3;//飞行模式:1=手动控制模式,2=姿态模式,6=MODE_P_GPS,9=热点任务中,11=自动起飞中,12=降落中,14=航线中,15=返航中,17=虚拟摇杆控制中,33=强制降落中,41=解锁电机准备起飞中
+    uint32 flightStatus=4;//飞行状态:0=电机未启动(地面),1=电机启动未起飞(地面),2=起飞在空中(空中)
+    PointData startPoint=5;//起飞点(只包含lat和lng信息)
+    PointData homePoint=6;//返航点(只包含lat和lng信息)
+    int32 homeHeight=7;//返航高度(单位:米)
+    uint32 safeLine=8;//打点飞行模式:0=节能模式【飞机直线飞到目标点,需飞机在空中并且有控制权】,1=安全模式【飞机飞行至目标点高度再平飞到目标点,飞机可以在地面】 默认为节能模式
+    uint32 deviceStatus=9;//控制权状态:0=遥控器,1=msdk,4=云盒[此控制权只针对虚拟摇杆控制权,起飞、降落、强制降落、航线操作、返航不需要此控制权,但是遥控器断连情况下,如果云盒没有控制权,飞机会执行遥控器的失联策略]
+    uint32 uwbNodeCount=10;//UWB星数(只有等于4时,才可以开启uwb精准降落模式)
+    string rcMode=11;//遥控器档位模式(说明:1.遥控器与飞机正常连接:(M300:T-P-S/M30:F-S-N/M3:C-N-S),2.遥控器与飞机未连接:W,3.只有在M300-P挡、M30-N挡、M3-N挡下云盒才能正常控制无人机)    
+    uint32 isEmergencyBrakeing=12;//是否紧急制动中,0=否,1=是 【飞行器在地面限制起飞,飞行器在空中限制飞行.如果想操作飞行,请先解除紧急制动】
+    uint32 outFlyAreaFlag=13;//飞行器是否在所有自定义电子围栏外,0=电子围栏内 1=电子围栏外
+    uint32 inNoFlyAreaFlag=14;//飞行器是否在自定义禁飞区内,0=禁飞区外 1=禁飞区内
+}
+
+//电池状态
+message BatteryState{
+    uint32 batteryNum=1;//电池数量
+    string batteryPower=2;//电池电量,多个电池以下划线分割,如:80_60
+    string batteryVoltage=3;//电池电压,多个电池以下划线分割,如:40_30(单位:V)[注意:如果2块电池电压差大于0.7V,飞机限制起飞]
+    BatteryStateInfo firstBatteryInfo=4;//第一块电池状态信息(安装在飞机左边电池槽)
+    BatteryStateInfo secondBatteryInfo=5;//第二块电池状态信息(安装在飞机右边电池槽)
+}
+
+//电池状态信息
+message BatteryStateInfo{
+	uint32 isBatteryEmbed=1;//电池插入飞机状态(注意:如果未插入所有电池信息不可用):0=插入,1=未插入
+	uint32 batteryCapacityPercent=2;//电池电量百分比
+	int32 currentVoltage=3;//电池电压(单位:mV)
+	int32 currentElectric=4;//当前电池电流(单位:mA)
+	uint32 fullCapacity=5;//满电池容量(单位:mAh)
+	uint32 remainedCapacity=6;//剩余电池容量(单位:mAh)
+	float batteryTemperature=7;//电池温度(单位:摄氏度)
+	uint32 cellCount=8;//电池组数(电池硬件型号有关)
+	uint32 batSOHState=9;//电池循环健康状态:0=正常,1=警报,2=注意安全
+	uint32 sop=10;//相对功率百分比(Relative power percentage)	
+	uint32 heatState=11;//电池加热状态:0=未加热,1=加热中,2=保持恒温
+	uint32 socState=12;//电池SOC荷电状态: 0=SOC正常,1=SOC_ABNORMAL_HIGH,2=SOC_JUMP_DOWN,3=SOC_JUMP_UP,4=SOC_INVALID
+	uint32 selfCheckError=13;//电池自检错误标志(注意:如果此值非0,就是电池损坏需要维修):0=正常,1=电池自检NTC异常,2=电池自检MOS异常,3=电池自检采样电阻异常,4=电池电芯损坏,5=电池未校准,6=电量计参数异常
+}
+
+//云台状态
+message PtzState{
+    float pitch=1;//俯仰角 范围:-120° ~ 30°
+    float roll=2;//横滚角 范围:-90° ~ 60°
+    float yaw=3;//偏航角  范围:-180° ~ 180°
+    uint32 gimbalMode=4;//云台模式 1=自由模式,2=跟随模式,3=FPV模式
+}
+
+//相机状态
+message CameraState{
+    uint32 mode=1;//相机模式:1=拍照模式,2=录像模式,0=未知
+    uint32 isRecording=2;//是否录制中:1=录制中,0=未录制
+    uint32 recordDuration=3;//录制时长(单位:秒)
+    uint32 source=4;//相机视源:0=可见,1=变焦,2=红外
+    uint32 camera=5;//相机: 0=FPV,1=相机(1),2=相机(2)
+    float  zoomfactor=6;//相机当前变焦倍数
+    uint32 width=7;//水平像素(例如:1920)
+    uint32 height=8;//垂直像素(例如:1080)
+    uint32 frameRate=9;//帧率(例如:30)
+    uint32 bitstream=10;//码率(单位:0.001)(例如:6兆设置值为6000)
+    uint32 pointThermometrying=11;//单点测温状态:0=非单点测温中,1=单点测温中
+    uint32 areaThermometrying=12;//区域测温状态:0=非区域测温中,1=区域测温中
+    uint32 laserRanging=13;//激光测距状态:0=非激光测距中,1=激光测距中
+}
+
+//任务状态
+message MissionState{
+	uint32 isPause=1;//航线是否暂停中:0=未暂停,1=暂停中
+	uint32 targetWaypointIndex=2;//目标航点下标(说明:开始成功到第一个航点之间此值为0,到达第一个航点此值为1,到达第二个航点此值为2,以此类推,航线结束后此值不清空直到下一次开始航线)
+	uint32 isWaypointFinished=3;//是否航点完成:1完成、0未完成(此值废弃)
+	uint32 pushVideo=4;//云盒是否发送视频数据:0=不发送,1=发送
+	uint32 lock4g=5;//是否锁定4G:0=不锁定,1=锁定
+	uint32 boxModel=6;//是否开通图片自动回传功能:0=未开通,1=已开通
+	uint32 mapPlay=7;//自动拍照间隔:0未开始,3~255间隔时间
+	uint32 loseAction=8;//网络失联后动作:0=返回HOME点,1=继续航线
+	uint32 isPointControl=9;//是否打点飞行控制中:0=否,1=是
+	uint32 isUwbLanding=10;//是否UWB精准降落中:0=不是,1=是
+	uint32 isPushVideoing=11;//视频是否推流中:0=不是,1=是
+	uint32 isDLanding=12;//是否二维码精准降落中:0=不是,1=是
+	uint32 perceptionFlag=13;//二维码精准降落模式:0=载荷降落,1=下视降落
+	uint32 isPositionControl=14;//是否指定距离飞行控制中:0=否,1=是
+}
+
+//避障数据
+message AvoidanceData{
+	uint32 downHealth=1;
+	float down=2;//距下障碍物的距离(单位:米),downHealth为1时值有效
+	uint32 frontHealth=3;
+	float front=4;//距前障碍物的距离(单位:米),frontHealth为1时值有效 
+	uint32 rightHealth=5;
+	float right=6;//距右障碍物的距离(单位:米),rightHealth为1时值有效
+	uint32 backHealth=7;
+	float back=8;//距后障碍物的距离(单位:米),backHealth为1时值有效
+	uint32 leftHealth=9;
+	float left=10;//距左障碍物的距离(单位:米),leftHealth为1时值有效
+	uint32 upHealth=11;
+	float up=12;//距上障碍物的距离(单位:米),upHealth为1时值有效
+	uint32 avoidanceEnableStatusDown=13;//下视觉避障开关状态:0-关闭 1-打开
+	uint32 avoidanceEnableStatusUp=14;//上视觉避障开关状态:0-关闭 1-打开
+	uint32 avoidanceEnableStatusHorizontal=15;//水平视觉避障开关状态:0-关闭 1-打开
+}
+
+//Hms报警信息
+message HmsAlarmData{
+	uint32 alarmId=1;//报警信息ID
+	uint32 reportLevel=2;//等级[1/2-警告 3/4/5-错误]
+	string alarmMssInfo=3;//报警信息描述(说明:支持中文和英文版本,默认中文,如需切换请联系技术支持)
+}
+
+//航线
+message PlanLineData{
+    uint32 finishedAction=1;//结束航线后动作:1=返航,2=原地悬停,3=原地降落,4=原地绕飞[目前只osdk4.1版本支持,中心点为最后一个航点,飞机绕此点画圆飞行],5=返回至第一个航点并悬停[如果飞机到最后一个点时RC和飞机失联,飞机会在最后一个点悬停]
+    float maxSpeed=2;//最大飞行速度(单位:米/秒,范围0~15),默认15
+    float autoSpeed=3;//自动飞行速度(单位:米/秒,范围0~15),默认8
+    repeated PointData points=4;//坐标点数组
+    uint32 loseAction=5;//网络失联后动作:0=返回HOME点,1=继续航线,默认0
+    uint32 homeHeight=6;//返航高度:(单位:米,范围20~1500),说明:此值为相对起飞点高度,如果太高会有失去网络覆盖风险。不同飞行器返航逻辑不一样,若飞行器距HOME点距离过近,可能不会升高再返航。具体逻辑请咨询大疆DJI
+    uint32 isSaveEnergyMode=7;//是否开启节能模式:0=不是,1=是(说明:节能模式下,飞机沿最短直线距离由起飞点到航线第一个航点,非升高到第一个航点高度再飞往第一个航点)
+    HangarPoint takePoint=8;//起飞点机库信息
+    HangarPoint landPoint=9;//降落点机库信息
+    repeated PointData interests=10;//兴趣点数组(对象只包含经纬高)
+    NormalModel normalModel=11;//普通建模
+    SurroundModel surroundModel=12;//环绕建模
+    PointData takeOffPoint=13;//起飞点(对象只包含经纬高)
+}
+
+//航线点
+message PointData{
+    double lng=1;//经度
+    double lat=2;//纬度
+    float height=3;//高度(单位:米,范围0~遥控器限高),说明:此值为相对起飞点高度,如果太高会有失去网络覆盖风险
+    float speed=4;//速度(单位:米/秒,范围0~15),默认8
+    repeated PointAction actions=5;//动作数组
+    uint32 flightPathMode=6;//航线飞行模式:1=直线飞行,2=协调转弯,3=曲线飞行(停),4=曲线飞行(不停)
+    float dampingDistance=7;//转弯半径(仅协调转弯模式下有效),取值范围1~655.35单位:米,两点间距离要小于此值,此值要根据实际情况计算,切勿随便设此值[可能导致航线开始失败],具体计算方法可以咨询售后支持或者大疆DJI
+    uint32 safeGohomeFlag=8;//是否为安全返航点 0=不是,1=是 (暂时未启用)
+    uint32 headingMode=9;//偏航模式 0=自动,1=锁定,2=遥控器控制,3=云台依照航点方向旋转,4=朝向兴趣点,5=飞机和云台的偏航同时旋转
+    float heading=10;//航点偏航 -180~180
+    int32 interestIndex=11;//兴趣点下标,默认-1
+    uint32 groupIndex=12;//组下标
+}
+
+//航线点动作
+message PointAction{
+    uint32 type=1;//类型:1.变焦 2.拍照 3.录像 4.停录 5.控制飞机机头偏航 6.控制云台俯仰 7.控制云台偏航 8.控制云台横滚 9.悬停 10.等距间隔拍照 11.等时间隔拍照 12.结束间隔拍照 13.单条喊话 14.开始循环喊话 15.结束循环喊话 16.对焦
+    float param=2;//参数:[1.变焦]->变焦倍数(范围:2~200) 、 [5.控制飞机机头偏航(范围:-180~180)、6.控制云台俯仰(范围:-120~30)、7.控制云台偏航(范围:-180~180)、8.控制云台横滚(范围:-90~60)]->角度(按正北坐标系绝对值控制) 、[9.悬停]->时间(单位:秒,范围:1~25,如果想停留大于25秒时长,可以加多组悬停动作) [10.等距间隔拍照]->距离(单位:米,范围:1~100)  [11.等时间隔拍照]->时间(单位:秒,范围:1~30)  [13/14->喊话器俯仰角度,如果此值为0默认改成-90](范围:0~-90)
+    int32 waitTime=3;//动作触发后等待时长(单位:秒) [此值如果不需要可以不传,如需悬停可添加类型9悬停动作] [13/14->喊话器声音,如果此值不传默认50](范围:0~100)
+    string speakInfo=4;//喊话内容[type=13和type=14时生效]
+}
+
+//机库信息
+message HangarPoint{
+    string hangarId=1;//机库ID
+    double hangarLng=2;//机库经度
+    double hangarLat=3;//机库纬度
+    double alternateLng=4;//备降点经度
+    double alternateLat=5;//备降点纬度
+}
+
+//普通建模
+message NormalModel{
+   repeated PointData area=1;//作业区域
+   uint32 serviceId=2;//建模平台编号:1=瞰景,2=大势,默认1
+   uint32 cameraId=3;//相机编号
+   uint32 isModeling=4;//是否实时建模:0=不,1=是
+   uint32 mode=5;//作业模式:1=倾斜,2=正摄
+   uint32 hOverlap=6;//横向重叠率
+   uint32 vOverlap=7;//纵向重叠率
+   uint32 mirror=8;//方向正反
+}
+
+//环绕建模
+message SurroundModel{
+   repeated PointData area=1;//作业区域
+   uint32 serviceId=2;//建模平台编号:1=瞰景
+   uint32 cameraId=3;//相机编号
+   uint32 isModeling=4;//是否实时建模:0=不,1=是
+}
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/protobuf/TelemetryDataPB.java b/ard-work/src/main/java/com/ard/tianyu/netty/protobuf/TelemetryDataPB.java
new file mode 100644
index 0000000..6c1407b
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/protobuf/TelemetryDataPB.java
@@ -0,0 +1,36013 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: TelemetryDataBuf-new.proto
+
+package com.ard.tianyu.netty.protobuf;
+
+public final class TelemetryDataPB {
+  private TelemetryDataPB() {}
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistryLite registry) {
+  }
+
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistry registry) {
+    registerAllExtensions(
+        (com.google.protobuf.ExtensionRegistryLite) registry);
+  }
+  public interface TelemetryDataOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:TelemetryData)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <pre>
+     *经度
+     * </pre>
+     *
+     * <code>double lng = 1;</code>
+     * @return The lng.
+     */
+    double getLng();
+
+    /**
+     * <pre>
+     *纬度
+     * </pre>
+     *
+     * <code>double lat = 2;</code>
+     * @return The lat.
+     */
+    double getLat();
+
+    /**
+     * <pre>
+     *海拔高度(椭球高)(单位:米)[与遥控器显示值不同源,可能不一致。会受周围气压湿度等环境影响,数据差异及误差比较大]
+     * </pre>
+     *
+     * <code>float altitude = 3;</code>
+     * @return The altitude.
+     */
+    float getAltitude();
+
+    /**
+     * <pre>
+     *相对高度(单位:米)[飞行器距地面10米以下,此值为真实距地距离,大于10米时为距起飞点的相对高度]
+     * </pre>
+     *
+     * <code>float ultrasonic = 4;</code>
+     * @return The ultrasonic.
+     */
+    float getUltrasonic();
+
+    /**
+     * <pre>
+     *俯仰角
+     * </pre>
+     *
+     * <code>float pitch = 5;</code>
+     * @return The pitch.
+     */
+    float getPitch();
+
+    /**
+     * <pre>
+     *横滚角
+     * </pre>
+     *
+     * <code>float roll = 6;</code>
+     * @return The roll.
+     */
+    float getRoll();
+
+    /**
+     * <pre>
+     *偏航角
+     * </pre>
+     *
+     * <code>float yaw = 7;</code>
+     * @return The yaw.
+     */
+    float getYaw();
+
+    /**
+     * <pre>
+     *空速(单位:米/秒)
+     * </pre>
+     *
+     * <code>float airspeed = 8;</code>
+     * @return The airspeed.
+     */
+    float getAirspeed();
+
+    /**
+     * <pre>
+     *地速(单位:米/秒)
+     * </pre>
+     *
+     * <code>float velocity = 9;</code>
+     * @return The velocity.
+     */
+    float getVelocity();
+
+    /**
+     * <pre>
+     *时间戳
+     * </pre>
+     *
+     * <code>uint64 timestamp = 10;</code>
+     * @return The timestamp.
+     */
+    long getTimestamp();
+
+    /**
+     * <pre>
+     *载荷俯仰角
+     * </pre>
+     *
+     * <code>float ptpitch = 11;</code>
+     * @return The ptpitch.
+     */
+    float getPtpitch();
+
+    /**
+     * <pre>
+     *载荷横滚角
+     * </pre>
+     *
+     * <code>float ptroll = 12;</code>
+     * @return The ptroll.
+     */
+    float getPtroll();
+
+    /**
+     * <pre>
+     *载荷航向角
+     * </pre>
+     *
+     * <code>float ptyaw = 13;</code>
+     * @return The ptyaw.
+     */
+    float getPtyaw();
+
+    /**
+     * <pre>
+     *载荷当前倍数
+     * </pre>
+     *
+     * <code>float zoomfactor = 14;</code>
+     * @return The zoomfactor.
+     */
+    float getZoomfactor();
+
+    /**
+     * <pre>
+     *云盒子编号
+     * </pre>
+     *
+     * <code>string boxSn = 15;</code>
+     * @return The boxSn.
+     */
+    String getBoxSn();
+    /**
+     * <pre>
+     *云盒子编号
+     * </pre>
+     *
+     * <code>string boxSn = 15;</code>
+     * @return The bytes for boxSn.
+     */
+    com.google.protobuf.ByteString
+        getBoxSnBytes();
+
+    /**
+     * <pre>
+     *电池电量,多个电池以下划线分割,如:80_60
+     * </pre>
+     *
+     * <code>string batteryPower = 16;</code>
+     * @return The batteryPower.
+     */
+    String getBatteryPower();
+    /**
+     * <pre>
+     *电池电量,多个电池以下划线分割,如:80_60
+     * </pre>
+     *
+     * <code>string batteryPower = 16;</code>
+     * @return The bytes for batteryPower.
+     */
+    com.google.protobuf.ByteString
+        getBatteryPowerBytes();
+
+    /**
+     * <pre>
+     *卫星计数
+     * </pre>
+     *
+     * <code>uint32 satelliteCount = 17;</code>
+     * @return The satelliteCount.
+     */
+    int getSatelliteCount();
+
+    /**
+     * <pre>
+     *任务编号
+     * </pre>
+     *
+     * <code>uint64 taskId = 18;</code>
+     * @return The taskId.
+     */
+    long getTaskId();
+
+    /**
+     * <pre>
+     *rtk经度
+     * </pre>
+     *
+     * <code>double rtkLng = 19;</code>
+     * @return The rtkLng.
+     */
+    double getRtkLng();
+
+    /**
+     * <pre>
+     *rtk纬度
+     * </pre>
+     *
+     * <code>double rtkLat = 20;</code>
+     * @return The rtkLat.
+     */
+    double getRtkLat();
+
+    /**
+     * <pre>
+     *rtk海拔高度(平均海平面高度)(单位:米)   
+     * </pre>
+     *
+     * <code>float rtkHFSL = 21;</code>
+     * @return The rtkHFSL.
+     */
+    float getRtkHFSL();
+
+    /**
+     * <pre>
+     *rtk状态(值为50时[rtk数据fix固定解],rtk的经纬度及海拔高度值可用)
+     * </pre>
+     *
+     * <code>uint32 rtkPositionInfo = 22;</code>
+     * @return The rtkPositionInfo.
+     */
+    int getRtkPositionInfo();
+
+    /**
+     * <pre>
+     *当前架次飞行时长(单位:秒) [起飞-&gt;落地 视为一个架次]
+     * </pre>
+     *
+     * <code>uint32 airFlyTimes = 23;</code>
+     * @return The airFlyTimes.
+     */
+    int getAirFlyTimes();
+
+    /**
+     * <pre>
+     *当前架次飞行实际距离(单位:米)
+     * </pre>
+     *
+     * <code>float airFlyDistance = 24;</code>
+     * @return The airFlyDistance.
+     */
+    float getAirFlyDistance();
+
+    /**
+     * <pre>
+     *无人机编号
+     * </pre>
+     *
+     * <code>string uavSn = 25;</code>
+     * @return The uavSn.
+     */
+    String getUavSn();
+    /**
+     * <pre>
+     *无人机编号
+     * </pre>
+     *
+     * <code>string uavSn = 25;</code>
+     * @return The bytes for uavSn.
+     */
+    com.google.protobuf.ByteString
+        getUavSnBytes();
+
+    /**
+     * <pre>
+     *无人机型号
+     * </pre>
+     *
+     * <code>string uavModel = 26;</code>
+     * @return The uavModel.
+     */
+    String getUavModel();
+    /**
+     * <pre>
+     *无人机型号
+     * </pre>
+     *
+     * <code>string uavModel = 26;</code>
+     * @return The bytes for uavModel.
+     */
+    com.google.protobuf.ByteString
+        getUavModelBytes();
+
+    /**
+     * <pre>
+     *距降落点水平直线距离(单位:米)
+     * </pre>
+     *
+     * <code>float homeRange = 27;</code>
+     * @return The homeRange.
+     */
+    float getHomeRange();
+
+    /**
+     * <pre>
+     *飞行模式:1=手动控制模式,2=姿态模式,6=MODE_P_GPS,9=热点任务中,11=自动起飞中,12=降落中,14=航线中,15=返航中,17=虚拟摇杆控制中,33=强制降落中,41=解锁电机准备起飞中
+     * </pre>
+     *
+     * <code>uint32 flightMode = 28;</code>
+     * @return The flightMode.
+     */
+    int getFlightMode();
+
+    /**
+     * <pre>
+     *距目标点实际距离(单位:米) [适用于打点飞行和航线飞行]
+     * </pre>
+     *
+     * <code>float targetDistance = 29;</code>
+     * @return The targetDistance.
+     */
+    float getTargetDistance();
+
+    /**
+     * <pre>
+     *预计剩余飞行时间[适用于打点飞行和航线飞行]
+     * </pre>
+     *
+     * <code>uint32 predictFlyTime = 30;</code>
+     * @return The predictFlyTime.
+     */
+    int getPredictFlyTime();
+
+    /**
+     * <pre>
+     *本架次最大相对高度值
+     * </pre>
+     *
+     * <code>float ultrasonicMax = 31;</code>
+     * @return The ultrasonicMax.
+     */
+    float getUltrasonicMax();
+
+    /**
+     * <pre>
+     *本架次最小相对高度值    
+     * </pre>
+     *
+     * <code>float ultrasonicMin = 32;</code>
+     * @return The ultrasonicMin.
+     */
+    float getUltrasonicMin();
+  }
+  /**
+   * <pre>
+   *下行遥测
+   * </pre>
+   *
+   * Protobuf type {@code TelemetryData}
+   */
+  public static final class TelemetryData extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:TelemetryData)
+      TelemetryDataOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use TelemetryData.newBuilder() to construct.
+    private TelemetryData(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private TelemetryData() {
+      boxSn_ = "";
+      batteryPower_ = "";
+      uavSn_ = "";
+      uavModel_ = "";
+    }
+
+    @Override
+    @SuppressWarnings({"unused"})
+    protected Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new TelemetryData();
+    }
+
+    @Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private TelemetryData(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 9: {
+
+              lng_ = input.readDouble();
+              break;
+            }
+            case 17: {
+
+              lat_ = input.readDouble();
+              break;
+            }
+            case 29: {
+
+              altitude_ = input.readFloat();
+              break;
+            }
+            case 37: {
+
+              ultrasonic_ = input.readFloat();
+              break;
+            }
+            case 45: {
+
+              pitch_ = input.readFloat();
+              break;
+            }
+            case 53: {
+
+              roll_ = input.readFloat();
+              break;
+            }
+            case 61: {
+
+              yaw_ = input.readFloat();
+              break;
+            }
+            case 69: {
+
+              airspeed_ = input.readFloat();
+              break;
+            }
+            case 77: {
+
+              velocity_ = input.readFloat();
+              break;
+            }
+            case 80: {
+
+              timestamp_ = input.readUInt64();
+              break;
+            }
+            case 93: {
+
+              ptpitch_ = input.readFloat();
+              break;
+            }
+            case 101: {
+
+              ptroll_ = input.readFloat();
+              break;
+            }
+            case 109: {
+
+              ptyaw_ = input.readFloat();
+              break;
+            }
+            case 117: {
+
+              zoomfactor_ = input.readFloat();
+              break;
+            }
+            case 122: {
+              String s = input.readStringRequireUtf8();
+
+              boxSn_ = s;
+              break;
+            }
+            case 130: {
+              String s = input.readStringRequireUtf8();
+
+              batteryPower_ = s;
+              break;
+            }
+            case 136: {
+
+              satelliteCount_ = input.readUInt32();
+              break;
+            }
+            case 144: {
+
+              taskId_ = input.readUInt64();
+              break;
+            }
+            case 153: {
+
+              rtkLng_ = input.readDouble();
+              break;
+            }
+            case 161: {
+
+              rtkLat_ = input.readDouble();
+              break;
+            }
+            case 173: {
+
+              rtkHFSL_ = input.readFloat();
+              break;
+            }
+            case 176: {
+
+              rtkPositionInfo_ = input.readUInt32();
+              break;
+            }
+            case 184: {
+
+              airFlyTimes_ = input.readUInt32();
+              break;
+            }
+            case 197: {
+
+              airFlyDistance_ = input.readFloat();
+              break;
+            }
+            case 202: {
+              String s = input.readStringRequireUtf8();
+
+              uavSn_ = s;
+              break;
+            }
+            case 210: {
+              String s = input.readStringRequireUtf8();
+
+              uavModel_ = s;
+              break;
+            }
+            case 221: {
+
+              homeRange_ = input.readFloat();
+              break;
+            }
+            case 224: {
+
+              flightMode_ = input.readUInt32();
+              break;
+            }
+            case 237: {
+
+              targetDistance_ = input.readFloat();
+              break;
+            }
+            case 240: {
+
+              predictFlyTime_ = input.readUInt32();
+              break;
+            }
+            case 253: {
+
+              ultrasonicMax_ = input.readFloat();
+              break;
+            }
+            case 261: {
+
+              ultrasonicMin_ = input.readFloat();
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_TelemetryData_descriptor;
+    }
+
+    @Override
+    protected FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_TelemetryData_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData.class, com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData.Builder.class);
+    }
+
+    public static final int LNG_FIELD_NUMBER = 1;
+    private double lng_;
+    /**
+     * <pre>
+     *经度
+     * </pre>
+     *
+     * <code>double lng = 1;</code>
+     * @return The lng.
+     */
+    @Override
+    public double getLng() {
+      return lng_;
+    }
+
+    public static final int LAT_FIELD_NUMBER = 2;
+    private double lat_;
+    /**
+     * <pre>
+     *纬度
+     * </pre>
+     *
+     * <code>double lat = 2;</code>
+     * @return The lat.
+     */
+    @Override
+    public double getLat() {
+      return lat_;
+    }
+
+    public static final int ALTITUDE_FIELD_NUMBER = 3;
+    private float altitude_;
+    /**
+     * <pre>
+     *海拔高度(椭球高)(单位:米)[与遥控器显示值不同源,可能不一致。会受周围气压湿度等环境影响,数据差异及误差比较大]
+     * </pre>
+     *
+     * <code>float altitude = 3;</code>
+     * @return The altitude.
+     */
+    @Override
+    public float getAltitude() {
+      return altitude_;
+    }
+
+    public static final int ULTRASONIC_FIELD_NUMBER = 4;
+    private float ultrasonic_;
+    /**
+     * <pre>
+     *相对高度(单位:米)[飞行器距地面10米以下,此值为真实距地距离,大于10米时为距起飞点的相对高度]
+     * </pre>
+     *
+     * <code>float ultrasonic = 4;</code>
+     * @return The ultrasonic.
+     */
+    @Override
+    public float getUltrasonic() {
+      return ultrasonic_;
+    }
+
+    public static final int PITCH_FIELD_NUMBER = 5;
+    private float pitch_;
+    /**
+     * <pre>
+     *俯仰角
+     * </pre>
+     *
+     * <code>float pitch = 5;</code>
+     * @return The pitch.
+     */
+    @Override
+    public float getPitch() {
+      return pitch_;
+    }
+
+    public static final int ROLL_FIELD_NUMBER = 6;
+    private float roll_;
+    /**
+     * <pre>
+     *横滚角
+     * </pre>
+     *
+     * <code>float roll = 6;</code>
+     * @return The roll.
+     */
+    @Override
+    public float getRoll() {
+      return roll_;
+    }
+
+    public static final int YAW_FIELD_NUMBER = 7;
+    private float yaw_;
+    /**
+     * <pre>
+     *偏航角
+     * </pre>
+     *
+     * <code>float yaw = 7;</code>
+     * @return The yaw.
+     */
+    @Override
+    public float getYaw() {
+      return yaw_;
+    }
+
+    public static final int AIRSPEED_FIELD_NUMBER = 8;
+    private float airspeed_;
+    /**
+     * <pre>
+     *空速(单位:米/秒)
+     * </pre>
+     *
+     * <code>float airspeed = 8;</code>
+     * @return The airspeed.
+     */
+    @Override
+    public float getAirspeed() {
+      return airspeed_;
+    }
+
+    public static final int VELOCITY_FIELD_NUMBER = 9;
+    private float velocity_;
+    /**
+     * <pre>
+     *地速(单位:米/秒)
+     * </pre>
+     *
+     * <code>float velocity = 9;</code>
+     * @return The velocity.
+     */
+    @Override
+    public float getVelocity() {
+      return velocity_;
+    }
+
+    public static final int TIMESTAMP_FIELD_NUMBER = 10;
+    private long timestamp_;
+    /**
+     * <pre>
+     *时间戳
+     * </pre>
+     *
+     * <code>uint64 timestamp = 10;</code>
+     * @return The timestamp.
+     */
+    @Override
+    public long getTimestamp() {
+      return timestamp_;
+    }
+
+    public static final int PTPITCH_FIELD_NUMBER = 11;
+    private float ptpitch_;
+    /**
+     * <pre>
+     *载荷俯仰角
+     * </pre>
+     *
+     * <code>float ptpitch = 11;</code>
+     * @return The ptpitch.
+     */
+    @Override
+    public float getPtpitch() {
+      return ptpitch_;
+    }
+
+    public static final int PTROLL_FIELD_NUMBER = 12;
+    private float ptroll_;
+    /**
+     * <pre>
+     *载荷横滚角
+     * </pre>
+     *
+     * <code>float ptroll = 12;</code>
+     * @return The ptroll.
+     */
+    @Override
+    public float getPtroll() {
+      return ptroll_;
+    }
+
+    public static final int PTYAW_FIELD_NUMBER = 13;
+    private float ptyaw_;
+    /**
+     * <pre>
+     *载荷航向角
+     * </pre>
+     *
+     * <code>float ptyaw = 13;</code>
+     * @return The ptyaw.
+     */
+    @Override
+    public float getPtyaw() {
+      return ptyaw_;
+    }
+
+    public static final int ZOOMFACTOR_FIELD_NUMBER = 14;
+    private float zoomfactor_;
+    /**
+     * <pre>
+     *载荷当前倍数
+     * </pre>
+     *
+     * <code>float zoomfactor = 14;</code>
+     * @return The zoomfactor.
+     */
+    @Override
+    public float getZoomfactor() {
+      return zoomfactor_;
+    }
+
+    public static final int BOXSN_FIELD_NUMBER = 15;
+    private volatile Object boxSn_;
+    /**
+     * <pre>
+     *云盒子编号
+     * </pre>
+     *
+     * <code>string boxSn = 15;</code>
+     * @return The boxSn.
+     */
+    @Override
+    public String getBoxSn() {
+      Object ref = boxSn_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        boxSn_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     *云盒子编号
+     * </pre>
+     *
+     * <code>string boxSn = 15;</code>
+     * @return The bytes for boxSn.
+     */
+    @Override
+    public com.google.protobuf.ByteString
+        getBoxSnBytes() {
+      Object ref = boxSn_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (String) ref);
+        boxSn_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int BATTERYPOWER_FIELD_NUMBER = 16;
+    private volatile Object batteryPower_;
+    /**
+     * <pre>
+     *电池电量,多个电池以下划线分割,如:80_60
+     * </pre>
+     *
+     * <code>string batteryPower = 16;</code>
+     * @return The batteryPower.
+     */
+    @Override
+    public String getBatteryPower() {
+      Object ref = batteryPower_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        batteryPower_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     *电池电量,多个电池以下划线分割,如:80_60
+     * </pre>
+     *
+     * <code>string batteryPower = 16;</code>
+     * @return The bytes for batteryPower.
+     */
+    @Override
+    public com.google.protobuf.ByteString
+        getBatteryPowerBytes() {
+      Object ref = batteryPower_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (String) ref);
+        batteryPower_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int SATELLITECOUNT_FIELD_NUMBER = 17;
+    private int satelliteCount_;
+    /**
+     * <pre>
+     *卫星计数
+     * </pre>
+     *
+     * <code>uint32 satelliteCount = 17;</code>
+     * @return The satelliteCount.
+     */
+    @Override
+    public int getSatelliteCount() {
+      return satelliteCount_;
+    }
+
+    public static final int TASKID_FIELD_NUMBER = 18;
+    private long taskId_;
+    /**
+     * <pre>
+     *任务编号
+     * </pre>
+     *
+     * <code>uint64 taskId = 18;</code>
+     * @return The taskId.
+     */
+    @Override
+    public long getTaskId() {
+      return taskId_;
+    }
+
+    public static final int RTKLNG_FIELD_NUMBER = 19;
+    private double rtkLng_;
+    /**
+     * <pre>
+     *rtk经度
+     * </pre>
+     *
+     * <code>double rtkLng = 19;</code>
+     * @return The rtkLng.
+     */
+    @Override
+    public double getRtkLng() {
+      return rtkLng_;
+    }
+
+    public static final int RTKLAT_FIELD_NUMBER = 20;
+    private double rtkLat_;
+    /**
+     * <pre>
+     *rtk纬度
+     * </pre>
+     *
+     * <code>double rtkLat = 20;</code>
+     * @return The rtkLat.
+     */
+    @Override
+    public double getRtkLat() {
+      return rtkLat_;
+    }
+
+    public static final int RTKHFSL_FIELD_NUMBER = 21;
+    private float rtkHFSL_;
+    /**
+     * <pre>
+     *rtk海拔高度(平均海平面高度)(单位:米)   
+     * </pre>
+     *
+     * <code>float rtkHFSL = 21;</code>
+     * @return The rtkHFSL.
+     */
+    @Override
+    public float getRtkHFSL() {
+      return rtkHFSL_;
+    }
+
+    public static final int RTKPOSITIONINFO_FIELD_NUMBER = 22;
+    private int rtkPositionInfo_;
+    /**
+     * <pre>
+     *rtk状态(值为50时[rtk数据fix固定解],rtk的经纬度及海拔高度值可用)
+     * </pre>
+     *
+     * <code>uint32 rtkPositionInfo = 22;</code>
+     * @return The rtkPositionInfo.
+     */
+    @Override
+    public int getRtkPositionInfo() {
+      return rtkPositionInfo_;
+    }
+
+    public static final int AIRFLYTIMES_FIELD_NUMBER = 23;
+    private int airFlyTimes_;
+    /**
+     * <pre>
+     *当前架次飞行时长(单位:秒) [起飞-&gt;落地 视为一个架次]
+     * </pre>
+     *
+     * <code>uint32 airFlyTimes = 23;</code>
+     * @return The airFlyTimes.
+     */
+    @Override
+    public int getAirFlyTimes() {
+      return airFlyTimes_;
+    }
+
+    public static final int AIRFLYDISTANCE_FIELD_NUMBER = 24;
+    private float airFlyDistance_;
+    /**
+     * <pre>
+     *当前架次飞行实际距离(单位:米)
+     * </pre>
+     *
+     * <code>float airFlyDistance = 24;</code>
+     * @return The airFlyDistance.
+     */
+    @Override
+    public float getAirFlyDistance() {
+      return airFlyDistance_;
+    }
+
+    public static final int UAVSN_FIELD_NUMBER = 25;
+    private volatile Object uavSn_;
+    /**
+     * <pre>
+     *无人机编号
+     * </pre>
+     *
+     * <code>string uavSn = 25;</code>
+     * @return The uavSn.
+     */
+    @Override
+    public String getUavSn() {
+      Object ref = uavSn_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        uavSn_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     *无人机编号
+     * </pre>
+     *
+     * <code>string uavSn = 25;</code>
+     * @return The bytes for uavSn.
+     */
+    @Override
+    public com.google.protobuf.ByteString
+        getUavSnBytes() {
+      Object ref = uavSn_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (String) ref);
+        uavSn_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int UAVMODEL_FIELD_NUMBER = 26;
+    private volatile Object uavModel_;
+    /**
+     * <pre>
+     *无人机型号
+     * </pre>
+     *
+     * <code>string uavModel = 26;</code>
+     * @return The uavModel.
+     */
+    @Override
+    public String getUavModel() {
+      Object ref = uavModel_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        uavModel_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     *无人机型号
+     * </pre>
+     *
+     * <code>string uavModel = 26;</code>
+     * @return The bytes for uavModel.
+     */
+    @Override
+    public com.google.protobuf.ByteString
+        getUavModelBytes() {
+      Object ref = uavModel_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (String) ref);
+        uavModel_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int HOMERANGE_FIELD_NUMBER = 27;
+    private float homeRange_;
+    /**
+     * <pre>
+     *距降落点水平直线距离(单位:米)
+     * </pre>
+     *
+     * <code>float homeRange = 27;</code>
+     * @return The homeRange.
+     */
+    @Override
+    public float getHomeRange() {
+      return homeRange_;
+    }
+
+    public static final int FLIGHTMODE_FIELD_NUMBER = 28;
+    private int flightMode_;
+    /**
+     * <pre>
+     *飞行模式:1=手动控制模式,2=姿态模式,6=MODE_P_GPS,9=热点任务中,11=自动起飞中,12=降落中,14=航线中,15=返航中,17=虚拟摇杆控制中,33=强制降落中,41=解锁电机准备起飞中
+     * </pre>
+     *
+     * <code>uint32 flightMode = 28;</code>
+     * @return The flightMode.
+     */
+    @Override
+    public int getFlightMode() {
+      return flightMode_;
+    }
+
+    public static final int TARGETDISTANCE_FIELD_NUMBER = 29;
+    private float targetDistance_;
+    /**
+     * <pre>
+     *距目标点实际距离(单位:米) [适用于打点飞行和航线飞行]
+     * </pre>
+     *
+     * <code>float targetDistance = 29;</code>
+     * @return The targetDistance.
+     */
+    @Override
+    public float getTargetDistance() {
+      return targetDistance_;
+    }
+
+    public static final int PREDICTFLYTIME_FIELD_NUMBER = 30;
+    private int predictFlyTime_;
+    /**
+     * <pre>
+     *预计剩余飞行时间[适用于打点飞行和航线飞行]
+     * </pre>
+     *
+     * <code>uint32 predictFlyTime = 30;</code>
+     * @return The predictFlyTime.
+     */
+    @Override
+    public int getPredictFlyTime() {
+      return predictFlyTime_;
+    }
+
+    public static final int ULTRASONICMAX_FIELD_NUMBER = 31;
+    private float ultrasonicMax_;
+    /**
+     * <pre>
+     *本架次最大相对高度值
+     * </pre>
+     *
+     * <code>float ultrasonicMax = 31;</code>
+     * @return The ultrasonicMax.
+     */
+    @Override
+    public float getUltrasonicMax() {
+      return ultrasonicMax_;
+    }
+
+    public static final int ULTRASONICMIN_FIELD_NUMBER = 32;
+    private float ultrasonicMin_;
+    /**
+     * <pre>
+     *本架次最小相对高度值    
+     * </pre>
+     *
+     * <code>float ultrasonicMin = 32;</code>
+     * @return The ultrasonicMin.
+     */
+    @Override
+    public float getUltrasonicMin() {
+      return ultrasonicMin_;
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (Double.doubleToRawLongBits(lng_) != 0) {
+        output.writeDouble(1, lng_);
+      }
+      if (Double.doubleToRawLongBits(lat_) != 0) {
+        output.writeDouble(2, lat_);
+      }
+      if (Float.floatToRawIntBits(altitude_) != 0) {
+        output.writeFloat(3, altitude_);
+      }
+      if (Float.floatToRawIntBits(ultrasonic_) != 0) {
+        output.writeFloat(4, ultrasonic_);
+      }
+      if (Float.floatToRawIntBits(pitch_) != 0) {
+        output.writeFloat(5, pitch_);
+      }
+      if (Float.floatToRawIntBits(roll_) != 0) {
+        output.writeFloat(6, roll_);
+      }
+      if (Float.floatToRawIntBits(yaw_) != 0) {
+        output.writeFloat(7, yaw_);
+      }
+      if (Float.floatToRawIntBits(airspeed_) != 0) {
+        output.writeFloat(8, airspeed_);
+      }
+      if (Float.floatToRawIntBits(velocity_) != 0) {
+        output.writeFloat(9, velocity_);
+      }
+      if (timestamp_ != 0L) {
+        output.writeUInt64(10, timestamp_);
+      }
+      if (Float.floatToRawIntBits(ptpitch_) != 0) {
+        output.writeFloat(11, ptpitch_);
+      }
+      if (Float.floatToRawIntBits(ptroll_) != 0) {
+        output.writeFloat(12, ptroll_);
+      }
+      if (Float.floatToRawIntBits(ptyaw_) != 0) {
+        output.writeFloat(13, ptyaw_);
+      }
+      if (Float.floatToRawIntBits(zoomfactor_) != 0) {
+        output.writeFloat(14, zoomfactor_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(boxSn_)) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 15, boxSn_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(batteryPower_)) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 16, batteryPower_);
+      }
+      if (satelliteCount_ != 0) {
+        output.writeUInt32(17, satelliteCount_);
+      }
+      if (taskId_ != 0L) {
+        output.writeUInt64(18, taskId_);
+      }
+      if (java.lang.Double.doubleToRawLongBits(rtkLng_) != 0) {
+        output.writeDouble(19, rtkLng_);
+      }
+      if (java.lang.Double.doubleToRawLongBits(rtkLat_) != 0) {
+        output.writeDouble(20, rtkLat_);
+      }
+      if (java.lang.Float.floatToRawIntBits(rtkHFSL_) != 0) {
+        output.writeFloat(21, rtkHFSL_);
+      }
+      if (rtkPositionInfo_ != 0) {
+        output.writeUInt32(22, rtkPositionInfo_);
+      }
+      if (airFlyTimes_ != 0) {
+        output.writeUInt32(23, airFlyTimes_);
+      }
+      if (java.lang.Float.floatToRawIntBits(airFlyDistance_) != 0) {
+        output.writeFloat(24, airFlyDistance_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(uavSn_)) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 25, uavSn_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(uavModel_)) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 26, uavModel_);
+      }
+      if (java.lang.Float.floatToRawIntBits(homeRange_) != 0) {
+        output.writeFloat(27, homeRange_);
+      }
+      if (flightMode_ != 0) {
+        output.writeUInt32(28, flightMode_);
+      }
+      if (java.lang.Float.floatToRawIntBits(targetDistance_) != 0) {
+        output.writeFloat(29, targetDistance_);
+      }
+      if (predictFlyTime_ != 0) {
+        output.writeUInt32(30, predictFlyTime_);
+      }
+      if (java.lang.Float.floatToRawIntBits(ultrasonicMax_) != 0) {
+        output.writeFloat(31, ultrasonicMax_);
+      }
+      if (java.lang.Float.floatToRawIntBits(ultrasonicMin_) != 0) {
+        output.writeFloat(32, ultrasonicMin_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (java.lang.Double.doubleToRawLongBits(lng_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeDoubleSize(1, lng_);
+      }
+      if (java.lang.Double.doubleToRawLongBits(lat_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeDoubleSize(2, lat_);
+      }
+      if (java.lang.Float.floatToRawIntBits(altitude_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(3, altitude_);
+      }
+      if (java.lang.Float.floatToRawIntBits(ultrasonic_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(4, ultrasonic_);
+      }
+      if (java.lang.Float.floatToRawIntBits(pitch_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(5, pitch_);
+      }
+      if (java.lang.Float.floatToRawIntBits(roll_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(6, roll_);
+      }
+      if (java.lang.Float.floatToRawIntBits(yaw_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(7, yaw_);
+      }
+      if (java.lang.Float.floatToRawIntBits(airspeed_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(8, airspeed_);
+      }
+      if (java.lang.Float.floatToRawIntBits(velocity_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(9, velocity_);
+      }
+      if (timestamp_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt64Size(10, timestamp_);
+      }
+      if (java.lang.Float.floatToRawIntBits(ptpitch_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(11, ptpitch_);
+      }
+      if (java.lang.Float.floatToRawIntBits(ptroll_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(12, ptroll_);
+      }
+      if (java.lang.Float.floatToRawIntBits(ptyaw_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(13, ptyaw_);
+      }
+      if (java.lang.Float.floatToRawIntBits(zoomfactor_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(14, zoomfactor_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(boxSn_)) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(15, boxSn_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(batteryPower_)) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(16, batteryPower_);
+      }
+      if (satelliteCount_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(17, satelliteCount_);
+      }
+      if (taskId_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt64Size(18, taskId_);
+      }
+      if (java.lang.Double.doubleToRawLongBits(rtkLng_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeDoubleSize(19, rtkLng_);
+      }
+      if (java.lang.Double.doubleToRawLongBits(rtkLat_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeDoubleSize(20, rtkLat_);
+      }
+      if (java.lang.Float.floatToRawIntBits(rtkHFSL_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(21, rtkHFSL_);
+      }
+      if (rtkPositionInfo_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(22, rtkPositionInfo_);
+      }
+      if (airFlyTimes_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(23, airFlyTimes_);
+      }
+      if (java.lang.Float.floatToRawIntBits(airFlyDistance_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(24, airFlyDistance_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(uavSn_)) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(25, uavSn_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(uavModel_)) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(26, uavModel_);
+      }
+      if (java.lang.Float.floatToRawIntBits(homeRange_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(27, homeRange_);
+      }
+      if (flightMode_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(28, flightMode_);
+      }
+      if (java.lang.Float.floatToRawIntBits(targetDistance_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(29, targetDistance_);
+      }
+      if (predictFlyTime_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(30, predictFlyTime_);
+      }
+      if (java.lang.Float.floatToRawIntBits(ultrasonicMax_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(31, ultrasonicMax_);
+      }
+      if (java.lang.Float.floatToRawIntBits(ultrasonicMin_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(32, ultrasonicMin_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData)) {
+        return super.equals(obj);
+      }
+      com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData other = (com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData) obj;
+
+      if (java.lang.Double.doubleToLongBits(getLng())
+          != java.lang.Double.doubleToLongBits(
+              other.getLng())) return false;
+      if (java.lang.Double.doubleToLongBits(getLat())
+          != java.lang.Double.doubleToLongBits(
+              other.getLat())) return false;
+      if (java.lang.Float.floatToIntBits(getAltitude())
+          != java.lang.Float.floatToIntBits(
+              other.getAltitude())) return false;
+      if (java.lang.Float.floatToIntBits(getUltrasonic())
+          != java.lang.Float.floatToIntBits(
+              other.getUltrasonic())) return false;
+      if (java.lang.Float.floatToIntBits(getPitch())
+          != java.lang.Float.floatToIntBits(
+              other.getPitch())) return false;
+      if (java.lang.Float.floatToIntBits(getRoll())
+          != java.lang.Float.floatToIntBits(
+              other.getRoll())) return false;
+      if (java.lang.Float.floatToIntBits(getYaw())
+          != java.lang.Float.floatToIntBits(
+              other.getYaw())) return false;
+      if (java.lang.Float.floatToIntBits(getAirspeed())
+          != java.lang.Float.floatToIntBits(
+              other.getAirspeed())) return false;
+      if (java.lang.Float.floatToIntBits(getVelocity())
+          != java.lang.Float.floatToIntBits(
+              other.getVelocity())) return false;
+      if (getTimestamp()
+          != other.getTimestamp()) return false;
+      if (java.lang.Float.floatToIntBits(getPtpitch())
+          != java.lang.Float.floatToIntBits(
+              other.getPtpitch())) return false;
+      if (java.lang.Float.floatToIntBits(getPtroll())
+          != java.lang.Float.floatToIntBits(
+              other.getPtroll())) return false;
+      if (java.lang.Float.floatToIntBits(getPtyaw())
+          != java.lang.Float.floatToIntBits(
+              other.getPtyaw())) return false;
+      if (java.lang.Float.floatToIntBits(getZoomfactor())
+          != java.lang.Float.floatToIntBits(
+              other.getZoomfactor())) return false;
+      if (!getBoxSn()
+          .equals(other.getBoxSn())) return false;
+      if (!getBatteryPower()
+          .equals(other.getBatteryPower())) return false;
+      if (getSatelliteCount()
+          != other.getSatelliteCount()) return false;
+      if (getTaskId()
+          != other.getTaskId()) return false;
+      if (java.lang.Double.doubleToLongBits(getRtkLng())
+          != java.lang.Double.doubleToLongBits(
+              other.getRtkLng())) return false;
+      if (java.lang.Double.doubleToLongBits(getRtkLat())
+          != java.lang.Double.doubleToLongBits(
+              other.getRtkLat())) return false;
+      if (java.lang.Float.floatToIntBits(getRtkHFSL())
+          != java.lang.Float.floatToIntBits(
+              other.getRtkHFSL())) return false;
+      if (getRtkPositionInfo()
+          != other.getRtkPositionInfo()) return false;
+      if (getAirFlyTimes()
+          != other.getAirFlyTimes()) return false;
+      if (java.lang.Float.floatToIntBits(getAirFlyDistance())
+          != java.lang.Float.floatToIntBits(
+              other.getAirFlyDistance())) return false;
+      if (!getUavSn()
+          .equals(other.getUavSn())) return false;
+      if (!getUavModel()
+          .equals(other.getUavModel())) return false;
+      if (java.lang.Float.floatToIntBits(getHomeRange())
+          != java.lang.Float.floatToIntBits(
+              other.getHomeRange())) return false;
+      if (getFlightMode()
+          != other.getFlightMode()) return false;
+      if (java.lang.Float.floatToIntBits(getTargetDistance())
+          != java.lang.Float.floatToIntBits(
+              other.getTargetDistance())) return false;
+      if (getPredictFlyTime()
+          != other.getPredictFlyTime()) return false;
+      if (java.lang.Float.floatToIntBits(getUltrasonicMax())
+          != java.lang.Float.floatToIntBits(
+              other.getUltrasonicMax())) return false;
+      if (java.lang.Float.floatToIntBits(getUltrasonicMin())
+          != java.lang.Float.floatToIntBits(
+              other.getUltrasonicMin())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + LNG_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          java.lang.Double.doubleToLongBits(getLng()));
+      hash = (37 * hash) + LAT_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          java.lang.Double.doubleToLongBits(getLat()));
+      hash = (37 * hash) + ALTITUDE_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getAltitude());
+      hash = (37 * hash) + ULTRASONIC_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getUltrasonic());
+      hash = (37 * hash) + PITCH_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getPitch());
+      hash = (37 * hash) + ROLL_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getRoll());
+      hash = (37 * hash) + YAW_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getYaw());
+      hash = (37 * hash) + AIRSPEED_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getAirspeed());
+      hash = (37 * hash) + VELOCITY_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getVelocity());
+      hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getTimestamp());
+      hash = (37 * hash) + PTPITCH_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getPtpitch());
+      hash = (37 * hash) + PTROLL_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getPtroll());
+      hash = (37 * hash) + PTYAW_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getPtyaw());
+      hash = (37 * hash) + ZOOMFACTOR_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getZoomfactor());
+      hash = (37 * hash) + BOXSN_FIELD_NUMBER;
+      hash = (53 * hash) + getBoxSn().hashCode();
+      hash = (37 * hash) + BATTERYPOWER_FIELD_NUMBER;
+      hash = (53 * hash) + getBatteryPower().hashCode();
+      hash = (37 * hash) + SATELLITECOUNT_FIELD_NUMBER;
+      hash = (53 * hash) + getSatelliteCount();
+      hash = (37 * hash) + TASKID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getTaskId());
+      hash = (37 * hash) + RTKLNG_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          java.lang.Double.doubleToLongBits(getRtkLng()));
+      hash = (37 * hash) + RTKLAT_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          java.lang.Double.doubleToLongBits(getRtkLat()));
+      hash = (37 * hash) + RTKHFSL_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getRtkHFSL());
+      hash = (37 * hash) + RTKPOSITIONINFO_FIELD_NUMBER;
+      hash = (53 * hash) + getRtkPositionInfo();
+      hash = (37 * hash) + AIRFLYTIMES_FIELD_NUMBER;
+      hash = (53 * hash) + getAirFlyTimes();
+      hash = (37 * hash) + AIRFLYDISTANCE_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getAirFlyDistance());
+      hash = (37 * hash) + UAVSN_FIELD_NUMBER;
+      hash = (53 * hash) + getUavSn().hashCode();
+      hash = (37 * hash) + UAVMODEL_FIELD_NUMBER;
+      hash = (53 * hash) + getUavModel().hashCode();
+      hash = (37 * hash) + HOMERANGE_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getHomeRange());
+      hash = (37 * hash) + FLIGHTMODE_FIELD_NUMBER;
+      hash = (53 * hash) + getFlightMode();
+      hash = (37 * hash) + TARGETDISTANCE_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getTargetDistance());
+      hash = (37 * hash) + PREDICTFLYTIME_FIELD_NUMBER;
+      hash = (53 * hash) + getPredictFlyTime();
+      hash = (37 * hash) + ULTRASONICMAX_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getUltrasonicMax());
+      hash = (37 * hash) + ULTRASONICMIN_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getUltrasonicMin());
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     *下行遥测
+     * </pre>
+     *
+     * Protobuf type {@code TelemetryData}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:TelemetryData)
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryDataOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_TelemetryData_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_TelemetryData_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData.class, com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData.Builder.class);
+      }
+
+      // Construct using com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        lng_ = 0D;
+
+        lat_ = 0D;
+
+        altitude_ = 0F;
+
+        ultrasonic_ = 0F;
+
+        pitch_ = 0F;
+
+        roll_ = 0F;
+
+        yaw_ = 0F;
+
+        airspeed_ = 0F;
+
+        velocity_ = 0F;
+
+        timestamp_ = 0L;
+
+        ptpitch_ = 0F;
+
+        ptroll_ = 0F;
+
+        ptyaw_ = 0F;
+
+        zoomfactor_ = 0F;
+
+        boxSn_ = "";
+
+        batteryPower_ = "";
+
+        satelliteCount_ = 0;
+
+        taskId_ = 0L;
+
+        rtkLng_ = 0D;
+
+        rtkLat_ = 0D;
+
+        rtkHFSL_ = 0F;
+
+        rtkPositionInfo_ = 0;
+
+        airFlyTimes_ = 0;
+
+        airFlyDistance_ = 0F;
+
+        uavSn_ = "";
+
+        uavModel_ = "";
+
+        homeRange_ = 0F;
+
+        flightMode_ = 0;
+
+        targetDistance_ = 0F;
+
+        predictFlyTime_ = 0;
+
+        ultrasonicMax_ = 0F;
+
+        ultrasonicMin_ = 0F;
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_TelemetryData_descriptor;
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData getDefaultInstanceForType() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData build() {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData buildPartial() {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData result = new com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData(this);
+        result.lng_ = lng_;
+        result.lat_ = lat_;
+        result.altitude_ = altitude_;
+        result.ultrasonic_ = ultrasonic_;
+        result.pitch_ = pitch_;
+        result.roll_ = roll_;
+        result.yaw_ = yaw_;
+        result.airspeed_ = airspeed_;
+        result.velocity_ = velocity_;
+        result.timestamp_ = timestamp_;
+        result.ptpitch_ = ptpitch_;
+        result.ptroll_ = ptroll_;
+        result.ptyaw_ = ptyaw_;
+        result.zoomfactor_ = zoomfactor_;
+        result.boxSn_ = boxSn_;
+        result.batteryPower_ = batteryPower_;
+        result.satelliteCount_ = satelliteCount_;
+        result.taskId_ = taskId_;
+        result.rtkLng_ = rtkLng_;
+        result.rtkLat_ = rtkLat_;
+        result.rtkHFSL_ = rtkHFSL_;
+        result.rtkPositionInfo_ = rtkPositionInfo_;
+        result.airFlyTimes_ = airFlyTimes_;
+        result.airFlyDistance_ = airFlyDistance_;
+        result.uavSn_ = uavSn_;
+        result.uavModel_ = uavModel_;
+        result.homeRange_ = homeRange_;
+        result.flightMode_ = flightMode_;
+        result.targetDistance_ = targetDistance_;
+        result.predictFlyTime_ = predictFlyTime_;
+        result.ultrasonicMax_ = ultrasonicMax_;
+        result.ultrasonicMin_ = ultrasonicMin_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData) {
+          return mergeFrom((com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData other) {
+        if (other == com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData.getDefaultInstance()) return this;
+        if (other.getLng() != 0D) {
+          setLng(other.getLng());
+        }
+        if (other.getLat() != 0D) {
+          setLat(other.getLat());
+        }
+        if (other.getAltitude() != 0F) {
+          setAltitude(other.getAltitude());
+        }
+        if (other.getUltrasonic() != 0F) {
+          setUltrasonic(other.getUltrasonic());
+        }
+        if (other.getPitch() != 0F) {
+          setPitch(other.getPitch());
+        }
+        if (other.getRoll() != 0F) {
+          setRoll(other.getRoll());
+        }
+        if (other.getYaw() != 0F) {
+          setYaw(other.getYaw());
+        }
+        if (other.getAirspeed() != 0F) {
+          setAirspeed(other.getAirspeed());
+        }
+        if (other.getVelocity() != 0F) {
+          setVelocity(other.getVelocity());
+        }
+        if (other.getTimestamp() != 0L) {
+          setTimestamp(other.getTimestamp());
+        }
+        if (other.getPtpitch() != 0F) {
+          setPtpitch(other.getPtpitch());
+        }
+        if (other.getPtroll() != 0F) {
+          setPtroll(other.getPtroll());
+        }
+        if (other.getPtyaw() != 0F) {
+          setPtyaw(other.getPtyaw());
+        }
+        if (other.getZoomfactor() != 0F) {
+          setZoomfactor(other.getZoomfactor());
+        }
+        if (!other.getBoxSn().isEmpty()) {
+          boxSn_ = other.boxSn_;
+          onChanged();
+        }
+        if (!other.getBatteryPower().isEmpty()) {
+          batteryPower_ = other.batteryPower_;
+          onChanged();
+        }
+        if (other.getSatelliteCount() != 0) {
+          setSatelliteCount(other.getSatelliteCount());
+        }
+        if (other.getTaskId() != 0L) {
+          setTaskId(other.getTaskId());
+        }
+        if (other.getRtkLng() != 0D) {
+          setRtkLng(other.getRtkLng());
+        }
+        if (other.getRtkLat() != 0D) {
+          setRtkLat(other.getRtkLat());
+        }
+        if (other.getRtkHFSL() != 0F) {
+          setRtkHFSL(other.getRtkHFSL());
+        }
+        if (other.getRtkPositionInfo() != 0) {
+          setRtkPositionInfo(other.getRtkPositionInfo());
+        }
+        if (other.getAirFlyTimes() != 0) {
+          setAirFlyTimes(other.getAirFlyTimes());
+        }
+        if (other.getAirFlyDistance() != 0F) {
+          setAirFlyDistance(other.getAirFlyDistance());
+        }
+        if (!other.getUavSn().isEmpty()) {
+          uavSn_ = other.uavSn_;
+          onChanged();
+        }
+        if (!other.getUavModel().isEmpty()) {
+          uavModel_ = other.uavModel_;
+          onChanged();
+        }
+        if (other.getHomeRange() != 0F) {
+          setHomeRange(other.getHomeRange());
+        }
+        if (other.getFlightMode() != 0) {
+          setFlightMode(other.getFlightMode());
+        }
+        if (other.getTargetDistance() != 0F) {
+          setTargetDistance(other.getTargetDistance());
+        }
+        if (other.getPredictFlyTime() != 0) {
+          setPredictFlyTime(other.getPredictFlyTime());
+        }
+        if (other.getUltrasonicMax() != 0F) {
+          setUltrasonicMax(other.getUltrasonicMax());
+        }
+        if (other.getUltrasonicMin() != 0F) {
+          setUltrasonicMin(other.getUltrasonicMin());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private double lng_ ;
+      /**
+       * <pre>
+       *经度
+       * </pre>
+       *
+       * <code>double lng = 1;</code>
+       * @return The lng.
+       */
+      @java.lang.Override
+      public double getLng() {
+        return lng_;
+      }
+      /**
+       * <pre>
+       *经度
+       * </pre>
+       *
+       * <code>double lng = 1;</code>
+       * @param value The lng to set.
+       * @return This builder for chaining.
+       */
+      public Builder setLng(double value) {
+        
+        lng_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *经度
+       * </pre>
+       *
+       * <code>double lng = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearLng() {
+        
+        lng_ = 0D;
+        onChanged();
+        return this;
+      }
+
+      private double lat_ ;
+      /**
+       * <pre>
+       *纬度
+       * </pre>
+       *
+       * <code>double lat = 2;</code>
+       * @return The lat.
+       */
+      @java.lang.Override
+      public double getLat() {
+        return lat_;
+      }
+      /**
+       * <pre>
+       *纬度
+       * </pre>
+       *
+       * <code>double lat = 2;</code>
+       * @param value The lat to set.
+       * @return This builder for chaining.
+       */
+      public Builder setLat(double value) {
+        
+        lat_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *纬度
+       * </pre>
+       *
+       * <code>double lat = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearLat() {
+        
+        lat_ = 0D;
+        onChanged();
+        return this;
+      }
+
+      private float altitude_ ;
+      /**
+       * <pre>
+       *海拔高度(椭球高)(单位:米)[与遥控器显示值不同源,可能不一致。会受周围气压湿度等环境影响,数据差异及误差比较大]
+       * </pre>
+       *
+       * <code>float altitude = 3;</code>
+       * @return The altitude.
+       */
+      @java.lang.Override
+      public float getAltitude() {
+        return altitude_;
+      }
+      /**
+       * <pre>
+       *海拔高度(椭球高)(单位:米)[与遥控器显示值不同源,可能不一致。会受周围气压湿度等环境影响,数据差异及误差比较大]
+       * </pre>
+       *
+       * <code>float altitude = 3;</code>
+       * @param value The altitude to set.
+       * @return This builder for chaining.
+       */
+      public Builder setAltitude(float value) {
+        
+        altitude_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *海拔高度(椭球高)(单位:米)[与遥控器显示值不同源,可能不一致。会受周围气压湿度等环境影响,数据差异及误差比较大]
+       * </pre>
+       *
+       * <code>float altitude = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearAltitude() {
+        
+        altitude_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private float ultrasonic_ ;
+      /**
+       * <pre>
+       *相对高度(单位:米)[飞行器距地面10米以下,此值为真实距地距离,大于10米时为距起飞点的相对高度]
+       * </pre>
+       *
+       * <code>float ultrasonic = 4;</code>
+       * @return The ultrasonic.
+       */
+      @java.lang.Override
+      public float getUltrasonic() {
+        return ultrasonic_;
+      }
+      /**
+       * <pre>
+       *相对高度(单位:米)[飞行器距地面10米以下,此值为真实距地距离,大于10米时为距起飞点的相对高度]
+       * </pre>
+       *
+       * <code>float ultrasonic = 4;</code>
+       * @param value The ultrasonic to set.
+       * @return This builder for chaining.
+       */
+      public Builder setUltrasonic(float value) {
+        
+        ultrasonic_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *相对高度(单位:米)[飞行器距地面10米以下,此值为真实距地距离,大于10米时为距起飞点的相对高度]
+       * </pre>
+       *
+       * <code>float ultrasonic = 4;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearUltrasonic() {
+        
+        ultrasonic_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private float pitch_ ;
+      /**
+       * <pre>
+       *俯仰角
+       * </pre>
+       *
+       * <code>float pitch = 5;</code>
+       * @return The pitch.
+       */
+      @java.lang.Override
+      public float getPitch() {
+        return pitch_;
+      }
+      /**
+       * <pre>
+       *俯仰角
+       * </pre>
+       *
+       * <code>float pitch = 5;</code>
+       * @param value The pitch to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPitch(float value) {
+        
+        pitch_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *俯仰角
+       * </pre>
+       *
+       * <code>float pitch = 5;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearPitch() {
+        
+        pitch_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private float roll_ ;
+      /**
+       * <pre>
+       *横滚角
+       * </pre>
+       *
+       * <code>float roll = 6;</code>
+       * @return The roll.
+       */
+      @java.lang.Override
+      public float getRoll() {
+        return roll_;
+      }
+      /**
+       * <pre>
+       *横滚角
+       * </pre>
+       *
+       * <code>float roll = 6;</code>
+       * @param value The roll to set.
+       * @return This builder for chaining.
+       */
+      public Builder setRoll(float value) {
+        
+        roll_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *横滚角
+       * </pre>
+       *
+       * <code>float roll = 6;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearRoll() {
+        
+        roll_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private float yaw_ ;
+      /**
+       * <pre>
+       *偏航角
+       * </pre>
+       *
+       * <code>float yaw = 7;</code>
+       * @return The yaw.
+       */
+      @java.lang.Override
+      public float getYaw() {
+        return yaw_;
+      }
+      /**
+       * <pre>
+       *偏航角
+       * </pre>
+       *
+       * <code>float yaw = 7;</code>
+       * @param value The yaw to set.
+       * @return This builder for chaining.
+       */
+      public Builder setYaw(float value) {
+        
+        yaw_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *偏航角
+       * </pre>
+       *
+       * <code>float yaw = 7;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearYaw() {
+        
+        yaw_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private float airspeed_ ;
+      /**
+       * <pre>
+       *空速(单位:米/秒)
+       * </pre>
+       *
+       * <code>float airspeed = 8;</code>
+       * @return The airspeed.
+       */
+      @java.lang.Override
+      public float getAirspeed() {
+        return airspeed_;
+      }
+      /**
+       * <pre>
+       *空速(单位:米/秒)
+       * </pre>
+       *
+       * <code>float airspeed = 8;</code>
+       * @param value The airspeed to set.
+       * @return This builder for chaining.
+       */
+      public Builder setAirspeed(float value) {
+        
+        airspeed_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *空速(单位:米/秒)
+       * </pre>
+       *
+       * <code>float airspeed = 8;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearAirspeed() {
+        
+        airspeed_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private float velocity_ ;
+      /**
+       * <pre>
+       *地速(单位:米/秒)
+       * </pre>
+       *
+       * <code>float velocity = 9;</code>
+       * @return The velocity.
+       */
+      @java.lang.Override
+      public float getVelocity() {
+        return velocity_;
+      }
+      /**
+       * <pre>
+       *地速(单位:米/秒)
+       * </pre>
+       *
+       * <code>float velocity = 9;</code>
+       * @param value The velocity to set.
+       * @return This builder for chaining.
+       */
+      public Builder setVelocity(float value) {
+        
+        velocity_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *地速(单位:米/秒)
+       * </pre>
+       *
+       * <code>float velocity = 9;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearVelocity() {
+        
+        velocity_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private long timestamp_ ;
+      /**
+       * <pre>
+       *时间戳
+       * </pre>
+       *
+       * <code>uint64 timestamp = 10;</code>
+       * @return The timestamp.
+       */
+      @java.lang.Override
+      public long getTimestamp() {
+        return timestamp_;
+      }
+      /**
+       * <pre>
+       *时间戳
+       * </pre>
+       *
+       * <code>uint64 timestamp = 10;</code>
+       * @param value The timestamp to set.
+       * @return This builder for chaining.
+       */
+      public Builder setTimestamp(long value) {
+        
+        timestamp_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *时间戳
+       * </pre>
+       *
+       * <code>uint64 timestamp = 10;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearTimestamp() {
+        
+        timestamp_ = 0L;
+        onChanged();
+        return this;
+      }
+
+      private float ptpitch_ ;
+      /**
+       * <pre>
+       *载荷俯仰角
+       * </pre>
+       *
+       * <code>float ptpitch = 11;</code>
+       * @return The ptpitch.
+       */
+      @java.lang.Override
+      public float getPtpitch() {
+        return ptpitch_;
+      }
+      /**
+       * <pre>
+       *载荷俯仰角
+       * </pre>
+       *
+       * <code>float ptpitch = 11;</code>
+       * @param value The ptpitch to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPtpitch(float value) {
+        
+        ptpitch_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *载荷俯仰角
+       * </pre>
+       *
+       * <code>float ptpitch = 11;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearPtpitch() {
+        
+        ptpitch_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private float ptroll_ ;
+      /**
+       * <pre>
+       *载荷横滚角
+       * </pre>
+       *
+       * <code>float ptroll = 12;</code>
+       * @return The ptroll.
+       */
+      @java.lang.Override
+      public float getPtroll() {
+        return ptroll_;
+      }
+      /**
+       * <pre>
+       *载荷横滚角
+       * </pre>
+       *
+       * <code>float ptroll = 12;</code>
+       * @param value The ptroll to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPtroll(float value) {
+        
+        ptroll_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *载荷横滚角
+       * </pre>
+       *
+       * <code>float ptroll = 12;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearPtroll() {
+        
+        ptroll_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private float ptyaw_ ;
+      /**
+       * <pre>
+       *载荷航向角
+       * </pre>
+       *
+       * <code>float ptyaw = 13;</code>
+       * @return The ptyaw.
+       */
+      @java.lang.Override
+      public float getPtyaw() {
+        return ptyaw_;
+      }
+      /**
+       * <pre>
+       *载荷航向角
+       * </pre>
+       *
+       * <code>float ptyaw = 13;</code>
+       * @param value The ptyaw to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPtyaw(float value) {
+        
+        ptyaw_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *载荷航向角
+       * </pre>
+       *
+       * <code>float ptyaw = 13;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearPtyaw() {
+        
+        ptyaw_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private float zoomfactor_ ;
+      /**
+       * <pre>
+       *载荷当前倍数
+       * </pre>
+       *
+       * <code>float zoomfactor = 14;</code>
+       * @return The zoomfactor.
+       */
+      @java.lang.Override
+      public float getZoomfactor() {
+        return zoomfactor_;
+      }
+      /**
+       * <pre>
+       *载荷当前倍数
+       * </pre>
+       *
+       * <code>float zoomfactor = 14;</code>
+       * @param value The zoomfactor to set.
+       * @return This builder for chaining.
+       */
+      public Builder setZoomfactor(float value) {
+        
+        zoomfactor_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *载荷当前倍数
+       * </pre>
+       *
+       * <code>float zoomfactor = 14;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearZoomfactor() {
+        
+        zoomfactor_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object boxSn_ = "";
+      /**
+       * <pre>
+       *云盒子编号
+       * </pre>
+       *
+       * <code>string boxSn = 15;</code>
+       * @return The boxSn.
+       */
+      public java.lang.String getBoxSn() {
+        java.lang.Object ref = boxSn_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          boxSn_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       *云盒子编号
+       * </pre>
+       *
+       * <code>string boxSn = 15;</code>
+       * @return The bytes for boxSn.
+       */
+      public com.google.protobuf.ByteString
+          getBoxSnBytes() {
+        java.lang.Object ref = boxSn_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          boxSn_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       *云盒子编号
+       * </pre>
+       *
+       * <code>string boxSn = 15;</code>
+       * @param value The boxSn to set.
+       * @return This builder for chaining.
+       */
+      public Builder setBoxSn(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        boxSn_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *云盒子编号
+       * </pre>
+       *
+       * <code>string boxSn = 15;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearBoxSn() {
+        
+        boxSn_ = getDefaultInstance().getBoxSn();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *云盒子编号
+       * </pre>
+       *
+       * <code>string boxSn = 15;</code>
+       * @param value The bytes for boxSn to set.
+       * @return This builder for chaining.
+       */
+      public Builder setBoxSnBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        boxSn_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object batteryPower_ = "";
+      /**
+       * <pre>
+       *电池电量,多个电池以下划线分割,如:80_60
+       * </pre>
+       *
+       * <code>string batteryPower = 16;</code>
+       * @return The batteryPower.
+       */
+      public java.lang.String getBatteryPower() {
+        java.lang.Object ref = batteryPower_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          batteryPower_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       *电池电量,多个电池以下划线分割,如:80_60
+       * </pre>
+       *
+       * <code>string batteryPower = 16;</code>
+       * @return The bytes for batteryPower.
+       */
+      public com.google.protobuf.ByteString
+          getBatteryPowerBytes() {
+        java.lang.Object ref = batteryPower_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          batteryPower_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       *电池电量,多个电池以下划线分割,如:80_60
+       * </pre>
+       *
+       * <code>string batteryPower = 16;</code>
+       * @param value The batteryPower to set.
+       * @return This builder for chaining.
+       */
+      public Builder setBatteryPower(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        batteryPower_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *电池电量,多个电池以下划线分割,如:80_60
+       * </pre>
+       *
+       * <code>string batteryPower = 16;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearBatteryPower() {
+        
+        batteryPower_ = getDefaultInstance().getBatteryPower();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *电池电量,多个电池以下划线分割,如:80_60
+       * </pre>
+       *
+       * <code>string batteryPower = 16;</code>
+       * @param value The bytes for batteryPower to set.
+       * @return This builder for chaining.
+       */
+      public Builder setBatteryPowerBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        batteryPower_ = value;
+        onChanged();
+        return this;
+      }
+
+      private int satelliteCount_ ;
+      /**
+       * <pre>
+       *卫星计数
+       * </pre>
+       *
+       * <code>uint32 satelliteCount = 17;</code>
+       * @return The satelliteCount.
+       */
+      @java.lang.Override
+      public int getSatelliteCount() {
+        return satelliteCount_;
+      }
+      /**
+       * <pre>
+       *卫星计数
+       * </pre>
+       *
+       * <code>uint32 satelliteCount = 17;</code>
+       * @param value The satelliteCount to set.
+       * @return This builder for chaining.
+       */
+      public Builder setSatelliteCount(int value) {
+        
+        satelliteCount_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *卫星计数
+       * </pre>
+       *
+       * <code>uint32 satelliteCount = 17;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearSatelliteCount() {
+        
+        satelliteCount_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private long taskId_ ;
+      /**
+       * <pre>
+       *任务编号
+       * </pre>
+       *
+       * <code>uint64 taskId = 18;</code>
+       * @return The taskId.
+       */
+      @java.lang.Override
+      public long getTaskId() {
+        return taskId_;
+      }
+      /**
+       * <pre>
+       *任务编号
+       * </pre>
+       *
+       * <code>uint64 taskId = 18;</code>
+       * @param value The taskId to set.
+       * @return This builder for chaining.
+       */
+      public Builder setTaskId(long value) {
+        
+        taskId_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *任务编号
+       * </pre>
+       *
+       * <code>uint64 taskId = 18;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearTaskId() {
+        
+        taskId_ = 0L;
+        onChanged();
+        return this;
+      }
+
+      private double rtkLng_ ;
+      /**
+       * <pre>
+       *rtk经度
+       * </pre>
+       *
+       * <code>double rtkLng = 19;</code>
+       * @return The rtkLng.
+       */
+      @java.lang.Override
+      public double getRtkLng() {
+        return rtkLng_;
+      }
+      /**
+       * <pre>
+       *rtk经度
+       * </pre>
+       *
+       * <code>double rtkLng = 19;</code>
+       * @param value The rtkLng to set.
+       * @return This builder for chaining.
+       */
+      public Builder setRtkLng(double value) {
+        
+        rtkLng_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *rtk经度
+       * </pre>
+       *
+       * <code>double rtkLng = 19;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearRtkLng() {
+        
+        rtkLng_ = 0D;
+        onChanged();
+        return this;
+      }
+
+      private double rtkLat_ ;
+      /**
+       * <pre>
+       *rtk纬度
+       * </pre>
+       *
+       * <code>double rtkLat = 20;</code>
+       * @return The rtkLat.
+       */
+      @java.lang.Override
+      public double getRtkLat() {
+        return rtkLat_;
+      }
+      /**
+       * <pre>
+       *rtk纬度
+       * </pre>
+       *
+       * <code>double rtkLat = 20;</code>
+       * @param value The rtkLat to set.
+       * @return This builder for chaining.
+       */
+      public Builder setRtkLat(double value) {
+        
+        rtkLat_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *rtk纬度
+       * </pre>
+       *
+       * <code>double rtkLat = 20;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearRtkLat() {
+        
+        rtkLat_ = 0D;
+        onChanged();
+        return this;
+      }
+
+      private float rtkHFSL_ ;
+      /**
+       * <pre>
+       *rtk海拔高度(平均海平面高度)(单位:米)   
+       * </pre>
+       *
+       * <code>float rtkHFSL = 21;</code>
+       * @return The rtkHFSL.
+       */
+      @java.lang.Override
+      public float getRtkHFSL() {
+        return rtkHFSL_;
+      }
+      /**
+       * <pre>
+       *rtk海拔高度(平均海平面高度)(单位:米)   
+       * </pre>
+       *
+       * <code>float rtkHFSL = 21;</code>
+       * @param value The rtkHFSL to set.
+       * @return This builder for chaining.
+       */
+      public Builder setRtkHFSL(float value) {
+        
+        rtkHFSL_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *rtk海拔高度(平均海平面高度)(单位:米)   
+       * </pre>
+       *
+       * <code>float rtkHFSL = 21;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearRtkHFSL() {
+        
+        rtkHFSL_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private int rtkPositionInfo_ ;
+      /**
+       * <pre>
+       *rtk状态(值为50时[rtk数据fix固定解],rtk的经纬度及海拔高度值可用)
+       * </pre>
+       *
+       * <code>uint32 rtkPositionInfo = 22;</code>
+       * @return The rtkPositionInfo.
+       */
+      @java.lang.Override
+      public int getRtkPositionInfo() {
+        return rtkPositionInfo_;
+      }
+      /**
+       * <pre>
+       *rtk状态(值为50时[rtk数据fix固定解],rtk的经纬度及海拔高度值可用)
+       * </pre>
+       *
+       * <code>uint32 rtkPositionInfo = 22;</code>
+       * @param value The rtkPositionInfo to set.
+       * @return This builder for chaining.
+       */
+      public Builder setRtkPositionInfo(int value) {
+        
+        rtkPositionInfo_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *rtk状态(值为50时[rtk数据fix固定解],rtk的经纬度及海拔高度值可用)
+       * </pre>
+       *
+       * <code>uint32 rtkPositionInfo = 22;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearRtkPositionInfo() {
+        
+        rtkPositionInfo_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int airFlyTimes_ ;
+      /**
+       * <pre>
+       *当前架次飞行时长(单位:秒) [起飞-&gt;落地 视为一个架次]
+       * </pre>
+       *
+       * <code>uint32 airFlyTimes = 23;</code>
+       * @return The airFlyTimes.
+       */
+      @java.lang.Override
+      public int getAirFlyTimes() {
+        return airFlyTimes_;
+      }
+      /**
+       * <pre>
+       *当前架次飞行时长(单位:秒) [起飞-&gt;落地 视为一个架次]
+       * </pre>
+       *
+       * <code>uint32 airFlyTimes = 23;</code>
+       * @param value The airFlyTimes to set.
+       * @return This builder for chaining.
+       */
+      public Builder setAirFlyTimes(int value) {
+        
+        airFlyTimes_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *当前架次飞行时长(单位:秒) [起飞-&gt;落地 视为一个架次]
+       * </pre>
+       *
+       * <code>uint32 airFlyTimes = 23;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearAirFlyTimes() {
+        
+        airFlyTimes_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private float airFlyDistance_ ;
+      /**
+       * <pre>
+       *当前架次飞行实际距离(单位:米)
+       * </pre>
+       *
+       * <code>float airFlyDistance = 24;</code>
+       * @return The airFlyDistance.
+       */
+      @java.lang.Override
+      public float getAirFlyDistance() {
+        return airFlyDistance_;
+      }
+      /**
+       * <pre>
+       *当前架次飞行实际距离(单位:米)
+       * </pre>
+       *
+       * <code>float airFlyDistance = 24;</code>
+       * @param value The airFlyDistance to set.
+       * @return This builder for chaining.
+       */
+      public Builder setAirFlyDistance(float value) {
+        
+        airFlyDistance_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *当前架次飞行实际距离(单位:米)
+       * </pre>
+       *
+       * <code>float airFlyDistance = 24;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearAirFlyDistance() {
+        
+        airFlyDistance_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object uavSn_ = "";
+      /**
+       * <pre>
+       *无人机编号
+       * </pre>
+       *
+       * <code>string uavSn = 25;</code>
+       * @return The uavSn.
+       */
+      public java.lang.String getUavSn() {
+        java.lang.Object ref = uavSn_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          uavSn_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       *无人机编号
+       * </pre>
+       *
+       * <code>string uavSn = 25;</code>
+       * @return The bytes for uavSn.
+       */
+      public com.google.protobuf.ByteString
+          getUavSnBytes() {
+        java.lang.Object ref = uavSn_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          uavSn_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       *无人机编号
+       * </pre>
+       *
+       * <code>string uavSn = 25;</code>
+       * @param value The uavSn to set.
+       * @return This builder for chaining.
+       */
+      public Builder setUavSn(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        uavSn_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *无人机编号
+       * </pre>
+       *
+       * <code>string uavSn = 25;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearUavSn() {
+        
+        uavSn_ = getDefaultInstance().getUavSn();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *无人机编号
+       * </pre>
+       *
+       * <code>string uavSn = 25;</code>
+       * @param value The bytes for uavSn to set.
+       * @return This builder for chaining.
+       */
+      public Builder setUavSnBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        uavSn_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object uavModel_ = "";
+      /**
+       * <pre>
+       *无人机型号
+       * </pre>
+       *
+       * <code>string uavModel = 26;</code>
+       * @return The uavModel.
+       */
+      public java.lang.String getUavModel() {
+        java.lang.Object ref = uavModel_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          uavModel_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       *无人机型号
+       * </pre>
+       *
+       * <code>string uavModel = 26;</code>
+       * @return The bytes for uavModel.
+       */
+      public com.google.protobuf.ByteString
+          getUavModelBytes() {
+        java.lang.Object ref = uavModel_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          uavModel_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       *无人机型号
+       * </pre>
+       *
+       * <code>string uavModel = 26;</code>
+       * @param value The uavModel to set.
+       * @return This builder for chaining.
+       */
+      public Builder setUavModel(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        uavModel_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *无人机型号
+       * </pre>
+       *
+       * <code>string uavModel = 26;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearUavModel() {
+        
+        uavModel_ = getDefaultInstance().getUavModel();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *无人机型号
+       * </pre>
+       *
+       * <code>string uavModel = 26;</code>
+       * @param value The bytes for uavModel to set.
+       * @return This builder for chaining.
+       */
+      public Builder setUavModelBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        uavModel_ = value;
+        onChanged();
+        return this;
+      }
+
+      private float homeRange_ ;
+      /**
+       * <pre>
+       *距降落点水平直线距离(单位:米)
+       * </pre>
+       *
+       * <code>float homeRange = 27;</code>
+       * @return The homeRange.
+       */
+      @java.lang.Override
+      public float getHomeRange() {
+        return homeRange_;
+      }
+      /**
+       * <pre>
+       *距降落点水平直线距离(单位:米)
+       * </pre>
+       *
+       * <code>float homeRange = 27;</code>
+       * @param value The homeRange to set.
+       * @return This builder for chaining.
+       */
+      public Builder setHomeRange(float value) {
+        
+        homeRange_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *距降落点水平直线距离(单位:米)
+       * </pre>
+       *
+       * <code>float homeRange = 27;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearHomeRange() {
+        
+        homeRange_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private int flightMode_ ;
+      /**
+       * <pre>
+       *飞行模式:1=手动控制模式,2=姿态模式,6=MODE_P_GPS,9=热点任务中,11=自动起飞中,12=降落中,14=航线中,15=返航中,17=虚拟摇杆控制中,33=强制降落中,41=解锁电机准备起飞中
+       * </pre>
+       *
+       * <code>uint32 flightMode = 28;</code>
+       * @return The flightMode.
+       */
+      @java.lang.Override
+      public int getFlightMode() {
+        return flightMode_;
+      }
+      /**
+       * <pre>
+       *飞行模式:1=手动控制模式,2=姿态模式,6=MODE_P_GPS,9=热点任务中,11=自动起飞中,12=降落中,14=航线中,15=返航中,17=虚拟摇杆控制中,33=强制降落中,41=解锁电机准备起飞中
+       * </pre>
+       *
+       * <code>uint32 flightMode = 28;</code>
+       * @param value The flightMode to set.
+       * @return This builder for chaining.
+       */
+      public Builder setFlightMode(int value) {
+        
+        flightMode_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *飞行模式:1=手动控制模式,2=姿态模式,6=MODE_P_GPS,9=热点任务中,11=自动起飞中,12=降落中,14=航线中,15=返航中,17=虚拟摇杆控制中,33=强制降落中,41=解锁电机准备起飞中
+       * </pre>
+       *
+       * <code>uint32 flightMode = 28;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearFlightMode() {
+        
+        flightMode_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private float targetDistance_ ;
+      /**
+       * <pre>
+       *距目标点实际距离(单位:米) [适用于打点飞行和航线飞行]
+       * </pre>
+       *
+       * <code>float targetDistance = 29;</code>
+       * @return The targetDistance.
+       */
+      @java.lang.Override
+      public float getTargetDistance() {
+        return targetDistance_;
+      }
+      /**
+       * <pre>
+       *距目标点实际距离(单位:米) [适用于打点飞行和航线飞行]
+       * </pre>
+       *
+       * <code>float targetDistance = 29;</code>
+       * @param value The targetDistance to set.
+       * @return This builder for chaining.
+       */
+      public Builder setTargetDistance(float value) {
+        
+        targetDistance_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *距目标点实际距离(单位:米) [适用于打点飞行和航线飞行]
+       * </pre>
+       *
+       * <code>float targetDistance = 29;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearTargetDistance() {
+        
+        targetDistance_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private int predictFlyTime_ ;
+      /**
+       * <pre>
+       *预计剩余飞行时间[适用于打点飞行和航线飞行]
+       * </pre>
+       *
+       * <code>uint32 predictFlyTime = 30;</code>
+       * @return The predictFlyTime.
+       */
+      @java.lang.Override
+      public int getPredictFlyTime() {
+        return predictFlyTime_;
+      }
+      /**
+       * <pre>
+       *预计剩余飞行时间[适用于打点飞行和航线飞行]
+       * </pre>
+       *
+       * <code>uint32 predictFlyTime = 30;</code>
+       * @param value The predictFlyTime to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPredictFlyTime(int value) {
+        
+        predictFlyTime_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *预计剩余飞行时间[适用于打点飞行和航线飞行]
+       * </pre>
+       *
+       * <code>uint32 predictFlyTime = 30;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearPredictFlyTime() {
+        
+        predictFlyTime_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private float ultrasonicMax_ ;
+      /**
+       * <pre>
+       *本架次最大相对高度值
+       * </pre>
+       *
+       * <code>float ultrasonicMax = 31;</code>
+       * @return The ultrasonicMax.
+       */
+      @java.lang.Override
+      public float getUltrasonicMax() {
+        return ultrasonicMax_;
+      }
+      /**
+       * <pre>
+       *本架次最大相对高度值
+       * </pre>
+       *
+       * <code>float ultrasonicMax = 31;</code>
+       * @param value The ultrasonicMax to set.
+       * @return This builder for chaining.
+       */
+      public Builder setUltrasonicMax(float value) {
+        
+        ultrasonicMax_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *本架次最大相对高度值
+       * </pre>
+       *
+       * <code>float ultrasonicMax = 31;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearUltrasonicMax() {
+        
+        ultrasonicMax_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private float ultrasonicMin_ ;
+      /**
+       * <pre>
+       *本架次最小相对高度值    
+       * </pre>
+       *
+       * <code>float ultrasonicMin = 32;</code>
+       * @return The ultrasonicMin.
+       */
+      @java.lang.Override
+      public float getUltrasonicMin() {
+        return ultrasonicMin_;
+      }
+      /**
+       * <pre>
+       *本架次最小相对高度值    
+       * </pre>
+       *
+       * <code>float ultrasonicMin = 32;</code>
+       * @param value The ultrasonicMin to set.
+       * @return This builder for chaining.
+       */
+      public Builder setUltrasonicMin(float value) {
+        
+        ultrasonicMin_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *本架次最小相对高度值    
+       * </pre>
+       *
+       * <code>float ultrasonicMin = 32;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearUltrasonicMin() {
+        
+        ultrasonicMin_ = 0F;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:TelemetryData)
+    }
+
+    // @@protoc_insertion_point(class_scope:TelemetryData)
+    private static final com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData();
+    }
+
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<TelemetryData>
+        PARSER = new com.google.protobuf.AbstractParser<TelemetryData>() {
+      @java.lang.Override
+      public TelemetryData parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new TelemetryData(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<TelemetryData> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<TelemetryData> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface TelemetryListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:TelemetryList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .TelemetryData telemetryList = 1;</code>
+     */
+    java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData> 
+        getTelemetryListList();
+    /**
+     * <code>repeated .TelemetryData telemetryList = 1;</code>
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData getTelemetryList(int index);
+    /**
+     * <code>repeated .TelemetryData telemetryList = 1;</code>
+     */
+    int getTelemetryListCount();
+    /**
+     * <code>repeated .TelemetryData telemetryList = 1;</code>
+     */
+    java.util.List<? extends com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryDataOrBuilder> 
+        getTelemetryListOrBuilderList();
+    /**
+     * <code>repeated .TelemetryData telemetryList = 1;</code>
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryDataOrBuilder getTelemetryListOrBuilder(
+        int index);
+  }
+  /**
+   * <pre>
+   *飞行历史
+   * </pre>
+   *
+   * Protobuf type {@code TelemetryList}
+   */
+  public static final class TelemetryList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:TelemetryList)
+      TelemetryListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use TelemetryList.newBuilder() to construct.
+    private TelemetryList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private TelemetryList() {
+      telemetryList_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new TelemetryList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private TelemetryList(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                telemetryList_ = new java.util.ArrayList<com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              telemetryList_.add(
+                  input.readMessage(com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          telemetryList_ = java.util.Collections.unmodifiableList(telemetryList_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_TelemetryList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_TelemetryList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryList.class, com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryList.Builder.class);
+    }
+
+    public static final int TELEMETRYLIST_FIELD_NUMBER = 1;
+    private java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData> telemetryList_;
+    /**
+     * <code>repeated .TelemetryData telemetryList = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData> getTelemetryListList() {
+      return telemetryList_;
+    }
+    /**
+     * <code>repeated .TelemetryData telemetryList = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryDataOrBuilder> 
+        getTelemetryListOrBuilderList() {
+      return telemetryList_;
+    }
+    /**
+     * <code>repeated .TelemetryData telemetryList = 1;</code>
+     */
+    @java.lang.Override
+    public int getTelemetryListCount() {
+      return telemetryList_.size();
+    }
+    /**
+     * <code>repeated .TelemetryData telemetryList = 1;</code>
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData getTelemetryList(int index) {
+      return telemetryList_.get(index);
+    }
+    /**
+     * <code>repeated .TelemetryData telemetryList = 1;</code>
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryDataOrBuilder getTelemetryListOrBuilder(
+        int index) {
+      return telemetryList_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < telemetryList_.size(); i++) {
+        output.writeMessage(1, telemetryList_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < telemetryList_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, telemetryList_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryList)) {
+        return super.equals(obj);
+      }
+      com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryList other = (com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryList) obj;
+
+      if (!getTelemetryListList()
+          .equals(other.getTelemetryListList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getTelemetryListCount() > 0) {
+        hash = (37 * hash) + TELEMETRYLIST_FIELD_NUMBER;
+        hash = (53 * hash) + getTelemetryListList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryList parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryList parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryList parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryList parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryList parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryList parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryList prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     *飞行历史
+     * </pre>
+     *
+     * Protobuf type {@code TelemetryList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:TelemetryList)
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_TelemetryList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_TelemetryList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryList.class, com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryList.Builder.class);
+      }
+
+      // Construct using com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getTelemetryListFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (telemetryListBuilder_ == null) {
+          telemetryList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          telemetryListBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_TelemetryList_descriptor;
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryList getDefaultInstanceForType() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryList build() {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryList buildPartial() {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryList result = new com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryList(this);
+        int from_bitField0_ = bitField0_;
+        if (telemetryListBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            telemetryList_ = java.util.Collections.unmodifiableList(telemetryList_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.telemetryList_ = telemetryList_;
+        } else {
+          result.telemetryList_ = telemetryListBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryList) {
+          return mergeFrom((com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryList)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryList other) {
+        if (other == com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryList.getDefaultInstance()) return this;
+        if (telemetryListBuilder_ == null) {
+          if (!other.telemetryList_.isEmpty()) {
+            if (telemetryList_.isEmpty()) {
+              telemetryList_ = other.telemetryList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureTelemetryListIsMutable();
+              telemetryList_.addAll(other.telemetryList_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.telemetryList_.isEmpty()) {
+            if (telemetryListBuilder_.isEmpty()) {
+              telemetryListBuilder_.dispose();
+              telemetryListBuilder_ = null;
+              telemetryList_ = other.telemetryList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              telemetryListBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getTelemetryListFieldBuilder() : null;
+            } else {
+              telemetryListBuilder_.addAllMessages(other.telemetryList_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData> telemetryList_ =
+        java.util.Collections.emptyList();
+      private void ensureTelemetryListIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          telemetryList_ = new java.util.ArrayList<com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData>(telemetryList_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData, com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryDataOrBuilder> telemetryListBuilder_;
+
+      /**
+       * <code>repeated .TelemetryData telemetryList = 1;</code>
+       */
+      public java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData> getTelemetryListList() {
+        if (telemetryListBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(telemetryList_);
+        } else {
+          return telemetryListBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .TelemetryData telemetryList = 1;</code>
+       */
+      public int getTelemetryListCount() {
+        if (telemetryListBuilder_ == null) {
+          return telemetryList_.size();
+        } else {
+          return telemetryListBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .TelemetryData telemetryList = 1;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData getTelemetryList(int index) {
+        if (telemetryListBuilder_ == null) {
+          return telemetryList_.get(index);
+        } else {
+          return telemetryListBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .TelemetryData telemetryList = 1;</code>
+       */
+      public Builder setTelemetryList(
+          int index, com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData value) {
+        if (telemetryListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureTelemetryListIsMutable();
+          telemetryList_.set(index, value);
+          onChanged();
+        } else {
+          telemetryListBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .TelemetryData telemetryList = 1;</code>
+       */
+      public Builder setTelemetryList(
+          int index, com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData.Builder builderForValue) {
+        if (telemetryListBuilder_ == null) {
+          ensureTelemetryListIsMutable();
+          telemetryList_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          telemetryListBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .TelemetryData telemetryList = 1;</code>
+       */
+      public Builder addTelemetryList(com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData value) {
+        if (telemetryListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureTelemetryListIsMutable();
+          telemetryList_.add(value);
+          onChanged();
+        } else {
+          telemetryListBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .TelemetryData telemetryList = 1;</code>
+       */
+      public Builder addTelemetryList(
+          int index, com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData value) {
+        if (telemetryListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureTelemetryListIsMutable();
+          telemetryList_.add(index, value);
+          onChanged();
+        } else {
+          telemetryListBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .TelemetryData telemetryList = 1;</code>
+       */
+      public Builder addTelemetryList(
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData.Builder builderForValue) {
+        if (telemetryListBuilder_ == null) {
+          ensureTelemetryListIsMutable();
+          telemetryList_.add(builderForValue.build());
+          onChanged();
+        } else {
+          telemetryListBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .TelemetryData telemetryList = 1;</code>
+       */
+      public Builder addTelemetryList(
+          int index, com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData.Builder builderForValue) {
+        if (telemetryListBuilder_ == null) {
+          ensureTelemetryListIsMutable();
+          telemetryList_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          telemetryListBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .TelemetryData telemetryList = 1;</code>
+       */
+      public Builder addAllTelemetryList(
+          java.lang.Iterable<? extends com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData> values) {
+        if (telemetryListBuilder_ == null) {
+          ensureTelemetryListIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, telemetryList_);
+          onChanged();
+        } else {
+          telemetryListBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .TelemetryData telemetryList = 1;</code>
+       */
+      public Builder clearTelemetryList() {
+        if (telemetryListBuilder_ == null) {
+          telemetryList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          telemetryListBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .TelemetryData telemetryList = 1;</code>
+       */
+      public Builder removeTelemetryList(int index) {
+        if (telemetryListBuilder_ == null) {
+          ensureTelemetryListIsMutable();
+          telemetryList_.remove(index);
+          onChanged();
+        } else {
+          telemetryListBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .TelemetryData telemetryList = 1;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData.Builder getTelemetryListBuilder(
+          int index) {
+        return getTelemetryListFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .TelemetryData telemetryList = 1;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryDataOrBuilder getTelemetryListOrBuilder(
+          int index) {
+        if (telemetryListBuilder_ == null) {
+          return telemetryList_.get(index);  } else {
+          return telemetryListBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .TelemetryData telemetryList = 1;</code>
+       */
+      public java.util.List<? extends com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryDataOrBuilder> 
+           getTelemetryListOrBuilderList() {
+        if (telemetryListBuilder_ != null) {
+          return telemetryListBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(telemetryList_);
+        }
+      }
+      /**
+       * <code>repeated .TelemetryData telemetryList = 1;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData.Builder addTelemetryListBuilder() {
+        return getTelemetryListFieldBuilder().addBuilder(
+            com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .TelemetryData telemetryList = 1;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData.Builder addTelemetryListBuilder(
+          int index) {
+        return getTelemetryListFieldBuilder().addBuilder(
+            index, com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .TelemetryData telemetryList = 1;</code>
+       */
+      public java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData.Builder> 
+           getTelemetryListBuilderList() {
+        return getTelemetryListFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData, com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryDataOrBuilder> 
+          getTelemetryListFieldBuilder() {
+        if (telemetryListBuilder_ == null) {
+          telemetryListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData, com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryData.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryDataOrBuilder>(
+                  telemetryList_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          telemetryList_ = null;
+        }
+        return telemetryListBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:TelemetryList)
+    }
+
+    // @@protoc_insertion_point(class_scope:TelemetryList)
+    private static final com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryList();
+    }
+
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<TelemetryList>
+        PARSER = new com.google.protobuf.AbstractParser<TelemetryList>() {
+      @java.lang.Override
+      public TelemetryList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new TelemetryList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<TelemetryList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<TelemetryList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.TelemetryList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface SignalInfoOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:SignalInfo)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <pre>
+     *入网模式:NR5G-SA,NR5G-NSA,LTE
+     * </pre>
+     *
+     * <code>string mode = 1;</code>
+     * @return The mode.
+     */
+    java.lang.String getMode();
+    /**
+     * <pre>
+     *入网模式:NR5G-SA,NR5G-NSA,LTE
+     * </pre>
+     *
+     * <code>string mode = 1;</code>
+     * @return The bytes for mode.
+     */
+    com.google.protobuf.ByteString
+        getModeBytes();
+
+    /**
+     * <pre>
+     *NR5G-SA,NR5G-NSA,LTE
+     * </pre>
+     *
+     * <code>string mcc = 2;</code>
+     * @return The mcc.
+     */
+    java.lang.String getMcc();
+    /**
+     * <pre>
+     *NR5G-SA,NR5G-NSA,LTE
+     * </pre>
+     *
+     * <code>string mcc = 2;</code>
+     * @return The bytes for mcc.
+     */
+    com.google.protobuf.ByteString
+        getMccBytes();
+
+    /**
+     * <pre>
+     *NR5G-SA,NR5G-NSA,LTE
+     * </pre>
+     *
+     * <code>string mnc = 3;</code>
+     * @return The mnc.
+     */
+    java.lang.String getMnc();
+    /**
+     * <pre>
+     *NR5G-SA,NR5G-NSA,LTE
+     * </pre>
+     *
+     * <code>string mnc = 3;</code>
+     * @return The bytes for mnc.
+     */
+    com.google.protobuf.ByteString
+        getMncBytes();
+
+    /**
+     * <pre>
+     *NR5G-SA,LTE
+     * </pre>
+     *
+     * <code>string cellid = 4;</code>
+     * @return The cellid.
+     */
+    java.lang.String getCellid();
+    /**
+     * <pre>
+     *NR5G-SA,LTE
+     * </pre>
+     *
+     * <code>string cellid = 4;</code>
+     * @return The bytes for cellid.
+     */
+    com.google.protobuf.ByteString
+        getCellidBytes();
+
+    /**
+     * <pre>
+     *NR5G-SA,NR5G-NSA,LTE
+     * </pre>
+     *
+     * <code>string pcid = 5;</code>
+     * @return The pcid.
+     */
+    java.lang.String getPcid();
+    /**
+     * <pre>
+     *NR5G-SA,NR5G-NSA,LTE
+     * </pre>
+     *
+     * <code>string pcid = 5;</code>
+     * @return The bytes for pcid.
+     */
+    com.google.protobuf.ByteString
+        getPcidBytes();
+
+    /**
+     * <pre>
+     *NR5G-SA,LTE
+     * </pre>
+     *
+     * <code>string tac = 6;</code>
+     * @return The tac.
+     */
+    java.lang.String getTac();
+    /**
+     * <pre>
+     *NR5G-SA,LTE
+     * </pre>
+     *
+     * <code>string tac = 6;</code>
+     * @return The bytes for tac.
+     */
+    com.google.protobuf.ByteString
+        getTacBytes();
+
+    /**
+     * <pre>
+     *NR5G-SA,NR5G-NSA
+     * </pre>
+     *
+     * <code>string arfcn = 7;</code>
+     * @return The arfcn.
+     */
+    java.lang.String getArfcn();
+    /**
+     * <pre>
+     *NR5G-SA,NR5G-NSA
+     * </pre>
+     *
+     * <code>string arfcn = 7;</code>
+     * @return The bytes for arfcn.
+     */
+    com.google.protobuf.ByteString
+        getArfcnBytes();
+
+    /**
+     * <pre>
+     *NR5G-SA,NR5G-NSA
+     * </pre>
+     *
+     * <code>string band = 8;</code>
+     * @return The band.
+     */
+    java.lang.String getBand();
+    /**
+     * <pre>
+     *NR5G-SA,NR5G-NSA
+     * </pre>
+     *
+     * <code>string band = 8;</code>
+     * @return The bytes for band.
+     */
+    com.google.protobuf.ByteString
+        getBandBytes();
+
+    /**
+     * <pre>
+     *NR5G-SA
+     * </pre>
+     *
+     * <code>string nr_dl_bandwidth = 9;</code>
+     * @return The nrDlBandwidth.
+     */
+    java.lang.String getNrDlBandwidth();
+    /**
+     * <pre>
+     *NR5G-SA
+     * </pre>
+     *
+     * <code>string nr_dl_bandwidth = 9;</code>
+     * @return The bytes for nrDlBandwidth.
+     */
+    com.google.protobuf.ByteString
+        getNrDlBandwidthBytes();
+
+    /**
+     * <pre>
+     *NR5G-SA,NR5G-NSA,LTE
+     * </pre>
+     *
+     * <code>string rsrp = 10;</code>
+     * @return The rsrp.
+     */
+    java.lang.String getRsrp();
+    /**
+     * <pre>
+     *NR5G-SA,NR5G-NSA,LTE
+     * </pre>
+     *
+     * <code>string rsrp = 10;</code>
+     * @return The bytes for rsrp.
+     */
+    com.google.protobuf.ByteString
+        getRsrpBytes();
+
+    /**
+     * <pre>
+     *NR5G-SA,NR5G-NSA,LTE
+     * </pre>
+     *
+     * <code>string rsrq = 11;</code>
+     * @return The rsrq.
+     */
+    java.lang.String getRsrq();
+    /**
+     * <pre>
+     *NR5G-SA,NR5G-NSA,LTE
+     * </pre>
+     *
+     * <code>string rsrq = 11;</code>
+     * @return The bytes for rsrq.
+     */
+    com.google.protobuf.ByteString
+        getRsrqBytes();
+
+    /**
+     * <pre>
+     *NR5G-SA,NR5G-NSA,LTE
+     * </pre>
+     *
+     * <code>string sinr = 12;</code>
+     * @return The sinr.
+     */
+    java.lang.String getSinr();
+    /**
+     * <pre>
+     *NR5G-SA,NR5G-NSA,LTE
+     * </pre>
+     *
+     * <code>string sinr = 12;</code>
+     * @return The bytes for sinr.
+     */
+    com.google.protobuf.ByteString
+        getSinrBytes();
+
+    /**
+     * <pre>
+     *NR5G-SA,LTE
+     * </pre>
+     *
+     * <code>string tx_power = 13;</code>
+     * @return The txPower.
+     */
+    java.lang.String getTxPower();
+    /**
+     * <pre>
+     *NR5G-SA,LTE
+     * </pre>
+     *
+     * <code>string tx_power = 13;</code>
+     * @return The bytes for txPower.
+     */
+    com.google.protobuf.ByteString
+        getTxPowerBytes();
+
+    /**
+     * <pre>
+     *NR5G-SA,LTE
+     * </pre>
+     *
+     * <code>string srxlev = 14;</code>
+     * @return The srxlev.
+     */
+    java.lang.String getSrxlev();
+    /**
+     * <pre>
+     *NR5G-SA,LTE
+     * </pre>
+     *
+     * <code>string srxlev = 14;</code>
+     * @return The bytes for srxlev.
+     */
+    com.google.protobuf.ByteString
+        getSrxlevBytes();
+
+    /**
+     * <pre>
+     *LTE
+     * </pre>
+     *
+     * <code>string cqi = 15;</code>
+     * @return The cqi.
+     */
+    java.lang.String getCqi();
+    /**
+     * <pre>
+     *LTE
+     * </pre>
+     *
+     * <code>string cqi = 15;</code>
+     * @return The bytes for cqi.
+     */
+    com.google.protobuf.ByteString
+        getCqiBytes();
+
+    /**
+     * <pre>
+     *LTE
+     * </pre>
+     *
+     * <code>string earfcn = 16;</code>
+     * @return The earfcn.
+     */
+    java.lang.String getEarfcn();
+    /**
+     * <pre>
+     *LTE
+     * </pre>
+     *
+     * <code>string earfcn = 16;</code>
+     * @return The bytes for earfcn.
+     */
+    com.google.protobuf.ByteString
+        getEarfcnBytes();
+
+    /**
+     * <pre>
+     *LTE
+     * </pre>
+     *
+     * <code>string freq_band_ind = 17;</code>
+     * @return The freqBandInd.
+     */
+    java.lang.String getFreqBandInd();
+    /**
+     * <pre>
+     *LTE
+     * </pre>
+     *
+     * <code>string freq_band_ind = 17;</code>
+     * @return The bytes for freqBandInd.
+     */
+    com.google.protobuf.ByteString
+        getFreqBandIndBytes();
+
+    /**
+     * <pre>
+     *LTE
+     * </pre>
+     *
+     * <code>string ul_bandwidth = 18;</code>
+     * @return The ulBandwidth.
+     */
+    java.lang.String getUlBandwidth();
+    /**
+     * <pre>
+     *LTE
+     * </pre>
+     *
+     * <code>string ul_bandwidth = 18;</code>
+     * @return The bytes for ulBandwidth.
+     */
+    com.google.protobuf.ByteString
+        getUlBandwidthBytes();
+
+    /**
+     * <pre>
+     *LTE
+     * </pre>
+     *
+     * <code>string dl_bandwidth = 19;</code>
+     * @return The dlBandwidth.
+     */
+    java.lang.String getDlBandwidth();
+    /**
+     * <pre>
+     *LTE
+     * </pre>
+     *
+     * <code>string dl_bandwidth = 19;</code>
+     * @return The bytes for dlBandwidth.
+     */
+    com.google.protobuf.ByteString
+        getDlBandwidthBytes();
+
+    /**
+     * <pre>
+     *LTE
+     * </pre>
+     *
+     * <code>string is_tdd = 20;</code>
+     * @return The isTdd.
+     */
+    java.lang.String getIsTdd();
+    /**
+     * <pre>
+     *LTE
+     * </pre>
+     *
+     * <code>string is_tdd = 20;</code>
+     * @return The bytes for isTdd.
+     */
+    com.google.protobuf.ByteString
+        getIsTddBytes();
+
+    /**
+     * <pre>
+     *LTE
+     * </pre>
+     *
+     * <code>string rssi = 21;</code>
+     * @return The rssi.
+     */
+    java.lang.String getRssi();
+    /**
+     * <pre>
+     *LTE
+     * </pre>
+     *
+     * <code>string rssi = 21;</code>
+     * @return The bytes for rssi.
+     */
+    com.google.protobuf.ByteString
+        getRssiBytes();
+
+    /**
+     * <pre>
+     *NR5G-SA
+     * </pre>
+     *
+     * <code>string duplex_mode = 22;</code>
+     * @return The duplexMode.
+     */
+    java.lang.String getDuplexMode();
+    /**
+     * <pre>
+     *NR5G-SA
+     * </pre>
+     *
+     * <code>string duplex_mode = 22;</code>
+     * @return The bytes for duplexMode.
+     */
+    com.google.protobuf.ByteString
+        getDuplexModeBytes();
+
+    /**
+     * <pre>
+     *经度
+     * </pre>
+     *
+     * <code>double lng = 23;</code>
+     * @return The lng.
+     */
+    double getLng();
+
+    /**
+     * <pre>
+     *纬度
+     * </pre>
+     *
+     * <code>double lat = 24;</code>
+     * @return The lat.
+     */
+    double getLat();
+
+    /**
+     * <pre>
+     *高度(单位:米)
+     * </pre>
+     *
+     * <code>float height = 25;</code>
+     * @return The height.
+     */
+    float getHeight();
+
+    /**
+     * <pre>
+     *时间戳(单位:秒)
+     * </pre>
+     *
+     * <code>uint32 timestamp = 26;</code>
+     * @return The timestamp.
+     */
+    int getTimestamp();
+
+    /**
+     * <pre>
+     *1=线缆故障,2=OSDK未激活,3=正常,4=云盒固件更新
+     * </pre>
+     *
+     * <code>uint32 boxstate = 27;</code>
+     * @return The boxstate.
+     */
+    int getBoxstate();
+
+    /**
+     * <pre>
+     *运营商
+     * </pre>
+     *
+     * <code>string isp = 28;</code>
+     * @return The isp.
+     */
+    java.lang.String getIsp();
+    /**
+     * <pre>
+     *运营商
+     * </pre>
+     *
+     * <code>string isp = 28;</code>
+     * @return The bytes for isp.
+     */
+    com.google.protobuf.ByteString
+        getIspBytes();
+
+    /**
+     * <pre>
+     *模组芯片温度(单位:摄氏度)
+     * </pre>
+     *
+     * <code>uint32 tempMax = 29;</code>
+     * @return The tempMax.
+     */
+    int getTempMax();
+
+    /**
+     * <pre>
+     *prx路径的rsrp值
+     * </pre>
+     *
+     * <code>string prx_rsrp = 30;</code>
+     * @return The prxRsrp.
+     */
+    java.lang.String getPrxRsrp();
+    /**
+     * <pre>
+     *prx路径的rsrp值
+     * </pre>
+     *
+     * <code>string prx_rsrp = 30;</code>
+     * @return The bytes for prxRsrp.
+     */
+    com.google.protobuf.ByteString
+        getPrxRsrpBytes();
+
+    /**
+     * <pre>
+     *drx路径的rsrp值
+     * </pre>
+     *
+     * <code>string drx_rsrp = 31;</code>
+     * @return The drxRsrp.
+     */
+    java.lang.String getDrxRsrp();
+    /**
+     * <pre>
+     *drx路径的rsrp值
+     * </pre>
+     *
+     * <code>string drx_rsrp = 31;</code>
+     * @return The bytes for drxRsrp.
+     */
+    com.google.protobuf.ByteString
+        getDrxRsrpBytes();
+
+    /**
+     * <pre>
+     *rx2路径的rsrp值
+     * </pre>
+     *
+     * <code>string rx2_rsrp = 32;</code>
+     * @return The rx2Rsrp.
+     */
+    java.lang.String getRx2Rsrp();
+    /**
+     * <pre>
+     *rx2路径的rsrp值
+     * </pre>
+     *
+     * <code>string rx2_rsrp = 32;</code>
+     * @return The bytes for rx2Rsrp.
+     */
+    com.google.protobuf.ByteString
+        getRx2RsrpBytes();
+
+    /**
+     * <pre>
+     *rx3路径的rsrp值
+     * </pre>
+     *
+     * <code>string rx3_rsrp = 33;</code>
+     * @return The rx3Rsrp.
+     */
+    java.lang.String getRx3Rsrp();
+    /**
+     * <pre>
+     *rx3路径的rsrp值
+     * </pre>
+     *
+     * <code>string rx3_rsrp = 33;</code>
+     * @return The bytes for rx3Rsrp.
+     */
+    com.google.protobuf.ByteString
+        getRx3RsrpBytes();
+
+    /**
+     * <pre>
+     *云盒编号
+     * </pre>
+     *
+     * <code>string box_sn = 34;</code>
+     * @return The boxSn.
+     */
+    java.lang.String getBoxSn();
+    /**
+     * <pre>
+     *云盒编号
+     * </pre>
+     *
+     * <code>string box_sn = 34;</code>
+     * @return The bytes for boxSn.
+     */
+    com.google.protobuf.ByteString
+        getBoxSnBytes();
+  }
+  /**
+   * <pre>
+   *信道质量
+   * </pre>
+   *
+   * Protobuf type {@code SignalInfo}
+   */
+  public static final class SignalInfo extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:SignalInfo)
+      SignalInfoOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use SignalInfo.newBuilder() to construct.
+    private SignalInfo(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private SignalInfo() {
+      mode_ = "";
+      mcc_ = "";
+      mnc_ = "";
+      cellid_ = "";
+      pcid_ = "";
+      tac_ = "";
+      arfcn_ = "";
+      band_ = "";
+      nrDlBandwidth_ = "";
+      rsrp_ = "";
+      rsrq_ = "";
+      sinr_ = "";
+      txPower_ = "";
+      srxlev_ = "";
+      cqi_ = "";
+      earfcn_ = "";
+      freqBandInd_ = "";
+      ulBandwidth_ = "";
+      dlBandwidth_ = "";
+      isTdd_ = "";
+      rssi_ = "";
+      duplexMode_ = "";
+      isp_ = "";
+      prxRsrp_ = "";
+      drxRsrp_ = "";
+      rx2Rsrp_ = "";
+      rx3Rsrp_ = "";
+      boxSn_ = "";
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new SignalInfo();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private SignalInfo(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              mode_ = s;
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              mcc_ = s;
+              break;
+            }
+            case 26: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              mnc_ = s;
+              break;
+            }
+            case 34: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              cellid_ = s;
+              break;
+            }
+            case 42: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              pcid_ = s;
+              break;
+            }
+            case 50: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              tac_ = s;
+              break;
+            }
+            case 58: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              arfcn_ = s;
+              break;
+            }
+            case 66: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              band_ = s;
+              break;
+            }
+            case 74: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              nrDlBandwidth_ = s;
+              break;
+            }
+            case 82: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              rsrp_ = s;
+              break;
+            }
+            case 90: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              rsrq_ = s;
+              break;
+            }
+            case 98: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              sinr_ = s;
+              break;
+            }
+            case 106: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              txPower_ = s;
+              break;
+            }
+            case 114: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              srxlev_ = s;
+              break;
+            }
+            case 122: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              cqi_ = s;
+              break;
+            }
+            case 130: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              earfcn_ = s;
+              break;
+            }
+            case 138: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              freqBandInd_ = s;
+              break;
+            }
+            case 146: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              ulBandwidth_ = s;
+              break;
+            }
+            case 154: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              dlBandwidth_ = s;
+              break;
+            }
+            case 162: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              isTdd_ = s;
+              break;
+            }
+            case 170: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              rssi_ = s;
+              break;
+            }
+            case 178: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              duplexMode_ = s;
+              break;
+            }
+            case 185: {
+
+              lng_ = input.readDouble();
+              break;
+            }
+            case 193: {
+
+              lat_ = input.readDouble();
+              break;
+            }
+            case 205: {
+
+              height_ = input.readFloat();
+              break;
+            }
+            case 208: {
+
+              timestamp_ = input.readUInt32();
+              break;
+            }
+            case 216: {
+
+              boxstate_ = input.readUInt32();
+              break;
+            }
+            case 226: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              isp_ = s;
+              break;
+            }
+            case 232: {
+
+              tempMax_ = input.readUInt32();
+              break;
+            }
+            case 242: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              prxRsrp_ = s;
+              break;
+            }
+            case 250: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              drxRsrp_ = s;
+              break;
+            }
+            case 258: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              rx2Rsrp_ = s;
+              break;
+            }
+            case 266: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              rx3Rsrp_ = s;
+              break;
+            }
+            case 274: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              boxSn_ = s;
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_SignalInfo_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_SignalInfo_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo.class, com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo.Builder.class);
+    }
+
+    public static final int MODE_FIELD_NUMBER = 1;
+    private volatile java.lang.Object mode_;
+    /**
+     * <pre>
+     *入网模式:NR5G-SA,NR5G-NSA,LTE
+     * </pre>
+     *
+     * <code>string mode = 1;</code>
+     * @return The mode.
+     */
+    @java.lang.Override
+    public java.lang.String getMode() {
+      java.lang.Object ref = mode_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        mode_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     *入网模式:NR5G-SA,NR5G-NSA,LTE
+     * </pre>
+     *
+     * <code>string mode = 1;</code>
+     * @return The bytes for mode.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getModeBytes() {
+      java.lang.Object ref = mode_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        mode_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int MCC_FIELD_NUMBER = 2;
+    private volatile java.lang.Object mcc_;
+    /**
+     * <pre>
+     *NR5G-SA,NR5G-NSA,LTE
+     * </pre>
+     *
+     * <code>string mcc = 2;</code>
+     * @return The mcc.
+     */
+    @java.lang.Override
+    public java.lang.String getMcc() {
+      java.lang.Object ref = mcc_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        mcc_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     *NR5G-SA,NR5G-NSA,LTE
+     * </pre>
+     *
+     * <code>string mcc = 2;</code>
+     * @return The bytes for mcc.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getMccBytes() {
+      java.lang.Object ref = mcc_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        mcc_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int MNC_FIELD_NUMBER = 3;
+    private volatile java.lang.Object mnc_;
+    /**
+     * <pre>
+     *NR5G-SA,NR5G-NSA,LTE
+     * </pre>
+     *
+     * <code>string mnc = 3;</code>
+     * @return The mnc.
+     */
+    @java.lang.Override
+    public java.lang.String getMnc() {
+      java.lang.Object ref = mnc_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        mnc_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     *NR5G-SA,NR5G-NSA,LTE
+     * </pre>
+     *
+     * <code>string mnc = 3;</code>
+     * @return The bytes for mnc.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getMncBytes() {
+      java.lang.Object ref = mnc_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        mnc_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int CELLID_FIELD_NUMBER = 4;
+    private volatile java.lang.Object cellid_;
+    /**
+     * <pre>
+     *NR5G-SA,LTE
+     * </pre>
+     *
+     * <code>string cellid = 4;</code>
+     * @return The cellid.
+     */
+    @java.lang.Override
+    public java.lang.String getCellid() {
+      java.lang.Object ref = cellid_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        cellid_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     *NR5G-SA,LTE
+     * </pre>
+     *
+     * <code>string cellid = 4;</code>
+     * @return The bytes for cellid.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getCellidBytes() {
+      java.lang.Object ref = cellid_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        cellid_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int PCID_FIELD_NUMBER = 5;
+    private volatile java.lang.Object pcid_;
+    /**
+     * <pre>
+     *NR5G-SA,NR5G-NSA,LTE
+     * </pre>
+     *
+     * <code>string pcid = 5;</code>
+     * @return The pcid.
+     */
+    @java.lang.Override
+    public java.lang.String getPcid() {
+      java.lang.Object ref = pcid_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        pcid_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     *NR5G-SA,NR5G-NSA,LTE
+     * </pre>
+     *
+     * <code>string pcid = 5;</code>
+     * @return The bytes for pcid.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getPcidBytes() {
+      java.lang.Object ref = pcid_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        pcid_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int TAC_FIELD_NUMBER = 6;
+    private volatile java.lang.Object tac_;
+    /**
+     * <pre>
+     *NR5G-SA,LTE
+     * </pre>
+     *
+     * <code>string tac = 6;</code>
+     * @return The tac.
+     */
+    @java.lang.Override
+    public java.lang.String getTac() {
+      java.lang.Object ref = tac_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        tac_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     *NR5G-SA,LTE
+     * </pre>
+     *
+     * <code>string tac = 6;</code>
+     * @return The bytes for tac.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getTacBytes() {
+      java.lang.Object ref = tac_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        tac_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int ARFCN_FIELD_NUMBER = 7;
+    private volatile java.lang.Object arfcn_;
+    /**
+     * <pre>
+     *NR5G-SA,NR5G-NSA
+     * </pre>
+     *
+     * <code>string arfcn = 7;</code>
+     * @return The arfcn.
+     */
+    @java.lang.Override
+    public java.lang.String getArfcn() {
+      java.lang.Object ref = arfcn_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        arfcn_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     *NR5G-SA,NR5G-NSA
+     * </pre>
+     *
+     * <code>string arfcn = 7;</code>
+     * @return The bytes for arfcn.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getArfcnBytes() {
+      java.lang.Object ref = arfcn_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        arfcn_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int BAND_FIELD_NUMBER = 8;
+    private volatile java.lang.Object band_;
+    /**
+     * <pre>
+     *NR5G-SA,NR5G-NSA
+     * </pre>
+     *
+     * <code>string band = 8;</code>
+     * @return The band.
+     */
+    @java.lang.Override
+    public java.lang.String getBand() {
+      java.lang.Object ref = band_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        band_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     *NR5G-SA,NR5G-NSA
+     * </pre>
+     *
+     * <code>string band = 8;</code>
+     * @return The bytes for band.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getBandBytes() {
+      java.lang.Object ref = band_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        band_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int NR_DL_BANDWIDTH_FIELD_NUMBER = 9;
+    private volatile java.lang.Object nrDlBandwidth_;
+    /**
+     * <pre>
+     *NR5G-SA
+     * </pre>
+     *
+     * <code>string nr_dl_bandwidth = 9;</code>
+     * @return The nrDlBandwidth.
+     */
+    @java.lang.Override
+    public java.lang.String getNrDlBandwidth() {
+      java.lang.Object ref = nrDlBandwidth_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        nrDlBandwidth_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     *NR5G-SA
+     * </pre>
+     *
+     * <code>string nr_dl_bandwidth = 9;</code>
+     * @return The bytes for nrDlBandwidth.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getNrDlBandwidthBytes() {
+      java.lang.Object ref = nrDlBandwidth_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        nrDlBandwidth_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int RSRP_FIELD_NUMBER = 10;
+    private volatile java.lang.Object rsrp_;
+    /**
+     * <pre>
+     *NR5G-SA,NR5G-NSA,LTE
+     * </pre>
+     *
+     * <code>string rsrp = 10;</code>
+     * @return The rsrp.
+     */
+    @java.lang.Override
+    public java.lang.String getRsrp() {
+      java.lang.Object ref = rsrp_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        rsrp_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     *NR5G-SA,NR5G-NSA,LTE
+     * </pre>
+     *
+     * <code>string rsrp = 10;</code>
+     * @return The bytes for rsrp.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getRsrpBytes() {
+      java.lang.Object ref = rsrp_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        rsrp_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int RSRQ_FIELD_NUMBER = 11;
+    private volatile java.lang.Object rsrq_;
+    /**
+     * <pre>
+     *NR5G-SA,NR5G-NSA,LTE
+     * </pre>
+     *
+     * <code>string rsrq = 11;</code>
+     * @return The rsrq.
+     */
+    @java.lang.Override
+    public java.lang.String getRsrq() {
+      java.lang.Object ref = rsrq_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        rsrq_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     *NR5G-SA,NR5G-NSA,LTE
+     * </pre>
+     *
+     * <code>string rsrq = 11;</code>
+     * @return The bytes for rsrq.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getRsrqBytes() {
+      java.lang.Object ref = rsrq_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        rsrq_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int SINR_FIELD_NUMBER = 12;
+    private volatile java.lang.Object sinr_;
+    /**
+     * <pre>
+     *NR5G-SA,NR5G-NSA,LTE
+     * </pre>
+     *
+     * <code>string sinr = 12;</code>
+     * @return The sinr.
+     */
+    @java.lang.Override
+    public java.lang.String getSinr() {
+      java.lang.Object ref = sinr_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        sinr_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     *NR5G-SA,NR5G-NSA,LTE
+     * </pre>
+     *
+     * <code>string sinr = 12;</code>
+     * @return The bytes for sinr.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getSinrBytes() {
+      java.lang.Object ref = sinr_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        sinr_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int TX_POWER_FIELD_NUMBER = 13;
+    private volatile java.lang.Object txPower_;
+    /**
+     * <pre>
+     *NR5G-SA,LTE
+     * </pre>
+     *
+     * <code>string tx_power = 13;</code>
+     * @return The txPower.
+     */
+    @java.lang.Override
+    public java.lang.String getTxPower() {
+      java.lang.Object ref = txPower_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        txPower_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     *NR5G-SA,LTE
+     * </pre>
+     *
+     * <code>string tx_power = 13;</code>
+     * @return The bytes for txPower.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getTxPowerBytes() {
+      java.lang.Object ref = txPower_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        txPower_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int SRXLEV_FIELD_NUMBER = 14;
+    private volatile java.lang.Object srxlev_;
+    /**
+     * <pre>
+     *NR5G-SA,LTE
+     * </pre>
+     *
+     * <code>string srxlev = 14;</code>
+     * @return The srxlev.
+     */
+    @java.lang.Override
+    public java.lang.String getSrxlev() {
+      java.lang.Object ref = srxlev_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        srxlev_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     *NR5G-SA,LTE
+     * </pre>
+     *
+     * <code>string srxlev = 14;</code>
+     * @return The bytes for srxlev.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getSrxlevBytes() {
+      java.lang.Object ref = srxlev_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        srxlev_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int CQI_FIELD_NUMBER = 15;
+    private volatile java.lang.Object cqi_;
+    /**
+     * <pre>
+     *LTE
+     * </pre>
+     *
+     * <code>string cqi = 15;</code>
+     * @return The cqi.
+     */
+    @java.lang.Override
+    public java.lang.String getCqi() {
+      java.lang.Object ref = cqi_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        cqi_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     *LTE
+     * </pre>
+     *
+     * <code>string cqi = 15;</code>
+     * @return The bytes for cqi.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getCqiBytes() {
+      java.lang.Object ref = cqi_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        cqi_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int EARFCN_FIELD_NUMBER = 16;
+    private volatile java.lang.Object earfcn_;
+    /**
+     * <pre>
+     *LTE
+     * </pre>
+     *
+     * <code>string earfcn = 16;</code>
+     * @return The earfcn.
+     */
+    @java.lang.Override
+    public java.lang.String getEarfcn() {
+      java.lang.Object ref = earfcn_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        earfcn_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     *LTE
+     * </pre>
+     *
+     * <code>string earfcn = 16;</code>
+     * @return The bytes for earfcn.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getEarfcnBytes() {
+      java.lang.Object ref = earfcn_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        earfcn_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int FREQ_BAND_IND_FIELD_NUMBER = 17;
+    private volatile java.lang.Object freqBandInd_;
+    /**
+     * <pre>
+     *LTE
+     * </pre>
+     *
+     * <code>string freq_band_ind = 17;</code>
+     * @return The freqBandInd.
+     */
+    @java.lang.Override
+    public java.lang.String getFreqBandInd() {
+      java.lang.Object ref = freqBandInd_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        freqBandInd_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     *LTE
+     * </pre>
+     *
+     * <code>string freq_band_ind = 17;</code>
+     * @return The bytes for freqBandInd.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getFreqBandIndBytes() {
+      java.lang.Object ref = freqBandInd_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        freqBandInd_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int UL_BANDWIDTH_FIELD_NUMBER = 18;
+    private volatile java.lang.Object ulBandwidth_;
+    /**
+     * <pre>
+     *LTE
+     * </pre>
+     *
+     * <code>string ul_bandwidth = 18;</code>
+     * @return The ulBandwidth.
+     */
+    @java.lang.Override
+    public java.lang.String getUlBandwidth() {
+      java.lang.Object ref = ulBandwidth_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        ulBandwidth_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     *LTE
+     * </pre>
+     *
+     * <code>string ul_bandwidth = 18;</code>
+     * @return The bytes for ulBandwidth.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getUlBandwidthBytes() {
+      java.lang.Object ref = ulBandwidth_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        ulBandwidth_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int DL_BANDWIDTH_FIELD_NUMBER = 19;
+    private volatile java.lang.Object dlBandwidth_;
+    /**
+     * <pre>
+     *LTE
+     * </pre>
+     *
+     * <code>string dl_bandwidth = 19;</code>
+     * @return The dlBandwidth.
+     */
+    @java.lang.Override
+    public java.lang.String getDlBandwidth() {
+      java.lang.Object ref = dlBandwidth_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        dlBandwidth_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     *LTE
+     * </pre>
+     *
+     * <code>string dl_bandwidth = 19;</code>
+     * @return The bytes for dlBandwidth.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getDlBandwidthBytes() {
+      java.lang.Object ref = dlBandwidth_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        dlBandwidth_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int IS_TDD_FIELD_NUMBER = 20;
+    private volatile java.lang.Object isTdd_;
+    /**
+     * <pre>
+     *LTE
+     * </pre>
+     *
+     * <code>string is_tdd = 20;</code>
+     * @return The isTdd.
+     */
+    @java.lang.Override
+    public java.lang.String getIsTdd() {
+      java.lang.Object ref = isTdd_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        isTdd_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     *LTE
+     * </pre>
+     *
+     * <code>string is_tdd = 20;</code>
+     * @return The bytes for isTdd.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getIsTddBytes() {
+      java.lang.Object ref = isTdd_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        isTdd_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int RSSI_FIELD_NUMBER = 21;
+    private volatile java.lang.Object rssi_;
+    /**
+     * <pre>
+     *LTE
+     * </pre>
+     *
+     * <code>string rssi = 21;</code>
+     * @return The rssi.
+     */
+    @java.lang.Override
+    public java.lang.String getRssi() {
+      java.lang.Object ref = rssi_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        rssi_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     *LTE
+     * </pre>
+     *
+     * <code>string rssi = 21;</code>
+     * @return The bytes for rssi.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getRssiBytes() {
+      java.lang.Object ref = rssi_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        rssi_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int DUPLEX_MODE_FIELD_NUMBER = 22;
+    private volatile java.lang.Object duplexMode_;
+    /**
+     * <pre>
+     *NR5G-SA
+     * </pre>
+     *
+     * <code>string duplex_mode = 22;</code>
+     * @return The duplexMode.
+     */
+    @java.lang.Override
+    public java.lang.String getDuplexMode() {
+      java.lang.Object ref = duplexMode_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        duplexMode_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     *NR5G-SA
+     * </pre>
+     *
+     * <code>string duplex_mode = 22;</code>
+     * @return The bytes for duplexMode.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getDuplexModeBytes() {
+      java.lang.Object ref = duplexMode_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        duplexMode_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int LNG_FIELD_NUMBER = 23;
+    private double lng_;
+    /**
+     * <pre>
+     *经度
+     * </pre>
+     *
+     * <code>double lng = 23;</code>
+     * @return The lng.
+     */
+    @java.lang.Override
+    public double getLng() {
+      return lng_;
+    }
+
+    public static final int LAT_FIELD_NUMBER = 24;
+    private double lat_;
+    /**
+     * <pre>
+     *纬度
+     * </pre>
+     *
+     * <code>double lat = 24;</code>
+     * @return The lat.
+     */
+    @java.lang.Override
+    public double getLat() {
+      return lat_;
+    }
+
+    public static final int HEIGHT_FIELD_NUMBER = 25;
+    private float height_;
+    /**
+     * <pre>
+     *高度(单位:米)
+     * </pre>
+     *
+     * <code>float height = 25;</code>
+     * @return The height.
+     */
+    @java.lang.Override
+    public float getHeight() {
+      return height_;
+    }
+
+    public static final int TIMESTAMP_FIELD_NUMBER = 26;
+    private int timestamp_;
+    /**
+     * <pre>
+     *时间戳(单位:秒)
+     * </pre>
+     *
+     * <code>uint32 timestamp = 26;</code>
+     * @return The timestamp.
+     */
+    @java.lang.Override
+    public int getTimestamp() {
+      return timestamp_;
+    }
+
+    public static final int BOXSTATE_FIELD_NUMBER = 27;
+    private int boxstate_;
+    /**
+     * <pre>
+     *1=线缆故障,2=OSDK未激活,3=正常,4=云盒固件更新
+     * </pre>
+     *
+     * <code>uint32 boxstate = 27;</code>
+     * @return The boxstate.
+     */
+    @java.lang.Override
+    public int getBoxstate() {
+      return boxstate_;
+    }
+
+    public static final int ISP_FIELD_NUMBER = 28;
+    private volatile java.lang.Object isp_;
+    /**
+     * <pre>
+     *运营商
+     * </pre>
+     *
+     * <code>string isp = 28;</code>
+     * @return The isp.
+     */
+    @java.lang.Override
+    public java.lang.String getIsp() {
+      java.lang.Object ref = isp_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        isp_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     *运营商
+     * </pre>
+     *
+     * <code>string isp = 28;</code>
+     * @return The bytes for isp.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getIspBytes() {
+      java.lang.Object ref = isp_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        isp_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int TEMPMAX_FIELD_NUMBER = 29;
+    private int tempMax_;
+    /**
+     * <pre>
+     *模组芯片温度(单位:摄氏度)
+     * </pre>
+     *
+     * <code>uint32 tempMax = 29;</code>
+     * @return The tempMax.
+     */
+    @java.lang.Override
+    public int getTempMax() {
+      return tempMax_;
+    }
+
+    public static final int PRX_RSRP_FIELD_NUMBER = 30;
+    private volatile java.lang.Object prxRsrp_;
+    /**
+     * <pre>
+     *prx路径的rsrp值
+     * </pre>
+     *
+     * <code>string prx_rsrp = 30;</code>
+     * @return The prxRsrp.
+     */
+    @java.lang.Override
+    public java.lang.String getPrxRsrp() {
+      java.lang.Object ref = prxRsrp_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        prxRsrp_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     *prx路径的rsrp值
+     * </pre>
+     *
+     * <code>string prx_rsrp = 30;</code>
+     * @return The bytes for prxRsrp.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getPrxRsrpBytes() {
+      java.lang.Object ref = prxRsrp_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        prxRsrp_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int DRX_RSRP_FIELD_NUMBER = 31;
+    private volatile java.lang.Object drxRsrp_;
+    /**
+     * <pre>
+     *drx路径的rsrp值
+     * </pre>
+     *
+     * <code>string drx_rsrp = 31;</code>
+     * @return The drxRsrp.
+     */
+    @java.lang.Override
+    public java.lang.String getDrxRsrp() {
+      java.lang.Object ref = drxRsrp_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        drxRsrp_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     *drx路径的rsrp值
+     * </pre>
+     *
+     * <code>string drx_rsrp = 31;</code>
+     * @return The bytes for drxRsrp.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getDrxRsrpBytes() {
+      java.lang.Object ref = drxRsrp_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        drxRsrp_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int RX2_RSRP_FIELD_NUMBER = 32;
+    private volatile java.lang.Object rx2Rsrp_;
+    /**
+     * <pre>
+     *rx2路径的rsrp值
+     * </pre>
+     *
+     * <code>string rx2_rsrp = 32;</code>
+     * @return The rx2Rsrp.
+     */
+    @java.lang.Override
+    public java.lang.String getRx2Rsrp() {
+      java.lang.Object ref = rx2Rsrp_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        rx2Rsrp_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     *rx2路径的rsrp值
+     * </pre>
+     *
+     * <code>string rx2_rsrp = 32;</code>
+     * @return The bytes for rx2Rsrp.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getRx2RsrpBytes() {
+      java.lang.Object ref = rx2Rsrp_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        rx2Rsrp_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int RX3_RSRP_FIELD_NUMBER = 33;
+    private volatile java.lang.Object rx3Rsrp_;
+    /**
+     * <pre>
+     *rx3路径的rsrp值
+     * </pre>
+     *
+     * <code>string rx3_rsrp = 33;</code>
+     * @return The rx3Rsrp.
+     */
+    @java.lang.Override
+    public java.lang.String getRx3Rsrp() {
+      java.lang.Object ref = rx3Rsrp_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        rx3Rsrp_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     *rx3路径的rsrp值
+     * </pre>
+     *
+     * <code>string rx3_rsrp = 33;</code>
+     * @return The bytes for rx3Rsrp.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getRx3RsrpBytes() {
+      java.lang.Object ref = rx3Rsrp_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        rx3Rsrp_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int BOX_SN_FIELD_NUMBER = 34;
+    private volatile java.lang.Object boxSn_;
+    /**
+     * <pre>
+     *云盒编号
+     * </pre>
+     *
+     * <code>string box_sn = 34;</code>
+     * @return The boxSn.
+     */
+    @java.lang.Override
+    public java.lang.String getBoxSn() {
+      java.lang.Object ref = boxSn_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        boxSn_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     *云盒编号
+     * </pre>
+     *
+     * <code>string box_sn = 34;</code>
+     * @return The bytes for boxSn.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getBoxSnBytes() {
+      java.lang.Object ref = boxSn_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        boxSn_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(mode_)) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, mode_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(mcc_)) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, mcc_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(mnc_)) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, mnc_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(cellid_)) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, cellid_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(pcid_)) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, pcid_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(tac_)) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 6, tac_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(arfcn_)) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 7, arfcn_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(band_)) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 8, band_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nrDlBandwidth_)) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 9, nrDlBandwidth_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(rsrp_)) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 10, rsrp_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(rsrq_)) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 11, rsrq_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(sinr_)) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 12, sinr_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(txPower_)) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 13, txPower_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(srxlev_)) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 14, srxlev_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(cqi_)) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 15, cqi_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(earfcn_)) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 16, earfcn_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(freqBandInd_)) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 17, freqBandInd_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(ulBandwidth_)) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 18, ulBandwidth_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(dlBandwidth_)) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 19, dlBandwidth_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(isTdd_)) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 20, isTdd_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(rssi_)) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 21, rssi_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(duplexMode_)) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 22, duplexMode_);
+      }
+      if (java.lang.Double.doubleToRawLongBits(lng_) != 0) {
+        output.writeDouble(23, lng_);
+      }
+      if (java.lang.Double.doubleToRawLongBits(lat_) != 0) {
+        output.writeDouble(24, lat_);
+      }
+      if (java.lang.Float.floatToRawIntBits(height_) != 0) {
+        output.writeFloat(25, height_);
+      }
+      if (timestamp_ != 0) {
+        output.writeUInt32(26, timestamp_);
+      }
+      if (boxstate_ != 0) {
+        output.writeUInt32(27, boxstate_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(isp_)) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 28, isp_);
+      }
+      if (tempMax_ != 0) {
+        output.writeUInt32(29, tempMax_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(prxRsrp_)) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 30, prxRsrp_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(drxRsrp_)) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 31, drxRsrp_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(rx2Rsrp_)) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 32, rx2Rsrp_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(rx3Rsrp_)) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 33, rx3Rsrp_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(boxSn_)) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 34, boxSn_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(mode_)) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, mode_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(mcc_)) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, mcc_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(mnc_)) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, mnc_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(cellid_)) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, cellid_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(pcid_)) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, pcid_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(tac_)) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, tac_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(arfcn_)) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(7, arfcn_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(band_)) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(8, band_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nrDlBandwidth_)) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(9, nrDlBandwidth_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(rsrp_)) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(10, rsrp_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(rsrq_)) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(11, rsrq_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(sinr_)) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(12, sinr_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(txPower_)) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(13, txPower_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(srxlev_)) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(14, srxlev_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(cqi_)) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(15, cqi_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(earfcn_)) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(16, earfcn_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(freqBandInd_)) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(17, freqBandInd_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(ulBandwidth_)) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(18, ulBandwidth_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(dlBandwidth_)) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(19, dlBandwidth_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(isTdd_)) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(20, isTdd_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(rssi_)) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(21, rssi_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(duplexMode_)) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(22, duplexMode_);
+      }
+      if (java.lang.Double.doubleToRawLongBits(lng_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeDoubleSize(23, lng_);
+      }
+      if (java.lang.Double.doubleToRawLongBits(lat_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeDoubleSize(24, lat_);
+      }
+      if (java.lang.Float.floatToRawIntBits(height_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(25, height_);
+      }
+      if (timestamp_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(26, timestamp_);
+      }
+      if (boxstate_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(27, boxstate_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(isp_)) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(28, isp_);
+      }
+      if (tempMax_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(29, tempMax_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(prxRsrp_)) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(30, prxRsrp_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(drxRsrp_)) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(31, drxRsrp_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(rx2Rsrp_)) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(32, rx2Rsrp_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(rx3Rsrp_)) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(33, rx3Rsrp_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(boxSn_)) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(34, boxSn_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo)) {
+        return super.equals(obj);
+      }
+      com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo other = (com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo) obj;
+
+      if (!getMode()
+          .equals(other.getMode())) return false;
+      if (!getMcc()
+          .equals(other.getMcc())) return false;
+      if (!getMnc()
+          .equals(other.getMnc())) return false;
+      if (!getCellid()
+          .equals(other.getCellid())) return false;
+      if (!getPcid()
+          .equals(other.getPcid())) return false;
+      if (!getTac()
+          .equals(other.getTac())) return false;
+      if (!getArfcn()
+          .equals(other.getArfcn())) return false;
+      if (!getBand()
+          .equals(other.getBand())) return false;
+      if (!getNrDlBandwidth()
+          .equals(other.getNrDlBandwidth())) return false;
+      if (!getRsrp()
+          .equals(other.getRsrp())) return false;
+      if (!getRsrq()
+          .equals(other.getRsrq())) return false;
+      if (!getSinr()
+          .equals(other.getSinr())) return false;
+      if (!getTxPower()
+          .equals(other.getTxPower())) return false;
+      if (!getSrxlev()
+          .equals(other.getSrxlev())) return false;
+      if (!getCqi()
+          .equals(other.getCqi())) return false;
+      if (!getEarfcn()
+          .equals(other.getEarfcn())) return false;
+      if (!getFreqBandInd()
+          .equals(other.getFreqBandInd())) return false;
+      if (!getUlBandwidth()
+          .equals(other.getUlBandwidth())) return false;
+      if (!getDlBandwidth()
+          .equals(other.getDlBandwidth())) return false;
+      if (!getIsTdd()
+          .equals(other.getIsTdd())) return false;
+      if (!getRssi()
+          .equals(other.getRssi())) return false;
+      if (!getDuplexMode()
+          .equals(other.getDuplexMode())) return false;
+      if (java.lang.Double.doubleToLongBits(getLng())
+          != java.lang.Double.doubleToLongBits(
+              other.getLng())) return false;
+      if (java.lang.Double.doubleToLongBits(getLat())
+          != java.lang.Double.doubleToLongBits(
+              other.getLat())) return false;
+      if (java.lang.Float.floatToIntBits(getHeight())
+          != java.lang.Float.floatToIntBits(
+              other.getHeight())) return false;
+      if (getTimestamp()
+          != other.getTimestamp()) return false;
+      if (getBoxstate()
+          != other.getBoxstate()) return false;
+      if (!getIsp()
+          .equals(other.getIsp())) return false;
+      if (getTempMax()
+          != other.getTempMax()) return false;
+      if (!getPrxRsrp()
+          .equals(other.getPrxRsrp())) return false;
+      if (!getDrxRsrp()
+          .equals(other.getDrxRsrp())) return false;
+      if (!getRx2Rsrp()
+          .equals(other.getRx2Rsrp())) return false;
+      if (!getRx3Rsrp()
+          .equals(other.getRx3Rsrp())) return false;
+      if (!getBoxSn()
+          .equals(other.getBoxSn())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + MODE_FIELD_NUMBER;
+      hash = (53 * hash) + getMode().hashCode();
+      hash = (37 * hash) + MCC_FIELD_NUMBER;
+      hash = (53 * hash) + getMcc().hashCode();
+      hash = (37 * hash) + MNC_FIELD_NUMBER;
+      hash = (53 * hash) + getMnc().hashCode();
+      hash = (37 * hash) + CELLID_FIELD_NUMBER;
+      hash = (53 * hash) + getCellid().hashCode();
+      hash = (37 * hash) + PCID_FIELD_NUMBER;
+      hash = (53 * hash) + getPcid().hashCode();
+      hash = (37 * hash) + TAC_FIELD_NUMBER;
+      hash = (53 * hash) + getTac().hashCode();
+      hash = (37 * hash) + ARFCN_FIELD_NUMBER;
+      hash = (53 * hash) + getArfcn().hashCode();
+      hash = (37 * hash) + BAND_FIELD_NUMBER;
+      hash = (53 * hash) + getBand().hashCode();
+      hash = (37 * hash) + NR_DL_BANDWIDTH_FIELD_NUMBER;
+      hash = (53 * hash) + getNrDlBandwidth().hashCode();
+      hash = (37 * hash) + RSRP_FIELD_NUMBER;
+      hash = (53 * hash) + getRsrp().hashCode();
+      hash = (37 * hash) + RSRQ_FIELD_NUMBER;
+      hash = (53 * hash) + getRsrq().hashCode();
+      hash = (37 * hash) + SINR_FIELD_NUMBER;
+      hash = (53 * hash) + getSinr().hashCode();
+      hash = (37 * hash) + TX_POWER_FIELD_NUMBER;
+      hash = (53 * hash) + getTxPower().hashCode();
+      hash = (37 * hash) + SRXLEV_FIELD_NUMBER;
+      hash = (53 * hash) + getSrxlev().hashCode();
+      hash = (37 * hash) + CQI_FIELD_NUMBER;
+      hash = (53 * hash) + getCqi().hashCode();
+      hash = (37 * hash) + EARFCN_FIELD_NUMBER;
+      hash = (53 * hash) + getEarfcn().hashCode();
+      hash = (37 * hash) + FREQ_BAND_IND_FIELD_NUMBER;
+      hash = (53 * hash) + getFreqBandInd().hashCode();
+      hash = (37 * hash) + UL_BANDWIDTH_FIELD_NUMBER;
+      hash = (53 * hash) + getUlBandwidth().hashCode();
+      hash = (37 * hash) + DL_BANDWIDTH_FIELD_NUMBER;
+      hash = (53 * hash) + getDlBandwidth().hashCode();
+      hash = (37 * hash) + IS_TDD_FIELD_NUMBER;
+      hash = (53 * hash) + getIsTdd().hashCode();
+      hash = (37 * hash) + RSSI_FIELD_NUMBER;
+      hash = (53 * hash) + getRssi().hashCode();
+      hash = (37 * hash) + DUPLEX_MODE_FIELD_NUMBER;
+      hash = (53 * hash) + getDuplexMode().hashCode();
+      hash = (37 * hash) + LNG_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          java.lang.Double.doubleToLongBits(getLng()));
+      hash = (37 * hash) + LAT_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          java.lang.Double.doubleToLongBits(getLat()));
+      hash = (37 * hash) + HEIGHT_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getHeight());
+      hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
+      hash = (53 * hash) + getTimestamp();
+      hash = (37 * hash) + BOXSTATE_FIELD_NUMBER;
+      hash = (53 * hash) + getBoxstate();
+      hash = (37 * hash) + ISP_FIELD_NUMBER;
+      hash = (53 * hash) + getIsp().hashCode();
+      hash = (37 * hash) + TEMPMAX_FIELD_NUMBER;
+      hash = (53 * hash) + getTempMax();
+      hash = (37 * hash) + PRX_RSRP_FIELD_NUMBER;
+      hash = (53 * hash) + getPrxRsrp().hashCode();
+      hash = (37 * hash) + DRX_RSRP_FIELD_NUMBER;
+      hash = (53 * hash) + getDrxRsrp().hashCode();
+      hash = (37 * hash) + RX2_RSRP_FIELD_NUMBER;
+      hash = (53 * hash) + getRx2Rsrp().hashCode();
+      hash = (37 * hash) + RX3_RSRP_FIELD_NUMBER;
+      hash = (53 * hash) + getRx3Rsrp().hashCode();
+      hash = (37 * hash) + BOX_SN_FIELD_NUMBER;
+      hash = (53 * hash) + getBoxSn().hashCode();
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     *信道质量
+     * </pre>
+     *
+     * Protobuf type {@code SignalInfo}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:SignalInfo)
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfoOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_SignalInfo_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_SignalInfo_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo.class, com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo.Builder.class);
+      }
+
+      // Construct using com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        mode_ = "";
+
+        mcc_ = "";
+
+        mnc_ = "";
+
+        cellid_ = "";
+
+        pcid_ = "";
+
+        tac_ = "";
+
+        arfcn_ = "";
+
+        band_ = "";
+
+        nrDlBandwidth_ = "";
+
+        rsrp_ = "";
+
+        rsrq_ = "";
+
+        sinr_ = "";
+
+        txPower_ = "";
+
+        srxlev_ = "";
+
+        cqi_ = "";
+
+        earfcn_ = "";
+
+        freqBandInd_ = "";
+
+        ulBandwidth_ = "";
+
+        dlBandwidth_ = "";
+
+        isTdd_ = "";
+
+        rssi_ = "";
+
+        duplexMode_ = "";
+
+        lng_ = 0D;
+
+        lat_ = 0D;
+
+        height_ = 0F;
+
+        timestamp_ = 0;
+
+        boxstate_ = 0;
+
+        isp_ = "";
+
+        tempMax_ = 0;
+
+        prxRsrp_ = "";
+
+        drxRsrp_ = "";
+
+        rx2Rsrp_ = "";
+
+        rx3Rsrp_ = "";
+
+        boxSn_ = "";
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_SignalInfo_descriptor;
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo getDefaultInstanceForType() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo build() {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo buildPartial() {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo result = new com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo(this);
+        result.mode_ = mode_;
+        result.mcc_ = mcc_;
+        result.mnc_ = mnc_;
+        result.cellid_ = cellid_;
+        result.pcid_ = pcid_;
+        result.tac_ = tac_;
+        result.arfcn_ = arfcn_;
+        result.band_ = band_;
+        result.nrDlBandwidth_ = nrDlBandwidth_;
+        result.rsrp_ = rsrp_;
+        result.rsrq_ = rsrq_;
+        result.sinr_ = sinr_;
+        result.txPower_ = txPower_;
+        result.srxlev_ = srxlev_;
+        result.cqi_ = cqi_;
+        result.earfcn_ = earfcn_;
+        result.freqBandInd_ = freqBandInd_;
+        result.ulBandwidth_ = ulBandwidth_;
+        result.dlBandwidth_ = dlBandwidth_;
+        result.isTdd_ = isTdd_;
+        result.rssi_ = rssi_;
+        result.duplexMode_ = duplexMode_;
+        result.lng_ = lng_;
+        result.lat_ = lat_;
+        result.height_ = height_;
+        result.timestamp_ = timestamp_;
+        result.boxstate_ = boxstate_;
+        result.isp_ = isp_;
+        result.tempMax_ = tempMax_;
+        result.prxRsrp_ = prxRsrp_;
+        result.drxRsrp_ = drxRsrp_;
+        result.rx2Rsrp_ = rx2Rsrp_;
+        result.rx3Rsrp_ = rx3Rsrp_;
+        result.boxSn_ = boxSn_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo) {
+          return mergeFrom((com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo other) {
+        if (other == com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo.getDefaultInstance()) return this;
+        if (!other.getMode().isEmpty()) {
+          mode_ = other.mode_;
+          onChanged();
+        }
+        if (!other.getMcc().isEmpty()) {
+          mcc_ = other.mcc_;
+          onChanged();
+        }
+        if (!other.getMnc().isEmpty()) {
+          mnc_ = other.mnc_;
+          onChanged();
+        }
+        if (!other.getCellid().isEmpty()) {
+          cellid_ = other.cellid_;
+          onChanged();
+        }
+        if (!other.getPcid().isEmpty()) {
+          pcid_ = other.pcid_;
+          onChanged();
+        }
+        if (!other.getTac().isEmpty()) {
+          tac_ = other.tac_;
+          onChanged();
+        }
+        if (!other.getArfcn().isEmpty()) {
+          arfcn_ = other.arfcn_;
+          onChanged();
+        }
+        if (!other.getBand().isEmpty()) {
+          band_ = other.band_;
+          onChanged();
+        }
+        if (!other.getNrDlBandwidth().isEmpty()) {
+          nrDlBandwidth_ = other.nrDlBandwidth_;
+          onChanged();
+        }
+        if (!other.getRsrp().isEmpty()) {
+          rsrp_ = other.rsrp_;
+          onChanged();
+        }
+        if (!other.getRsrq().isEmpty()) {
+          rsrq_ = other.rsrq_;
+          onChanged();
+        }
+        if (!other.getSinr().isEmpty()) {
+          sinr_ = other.sinr_;
+          onChanged();
+        }
+        if (!other.getTxPower().isEmpty()) {
+          txPower_ = other.txPower_;
+          onChanged();
+        }
+        if (!other.getSrxlev().isEmpty()) {
+          srxlev_ = other.srxlev_;
+          onChanged();
+        }
+        if (!other.getCqi().isEmpty()) {
+          cqi_ = other.cqi_;
+          onChanged();
+        }
+        if (!other.getEarfcn().isEmpty()) {
+          earfcn_ = other.earfcn_;
+          onChanged();
+        }
+        if (!other.getFreqBandInd().isEmpty()) {
+          freqBandInd_ = other.freqBandInd_;
+          onChanged();
+        }
+        if (!other.getUlBandwidth().isEmpty()) {
+          ulBandwidth_ = other.ulBandwidth_;
+          onChanged();
+        }
+        if (!other.getDlBandwidth().isEmpty()) {
+          dlBandwidth_ = other.dlBandwidth_;
+          onChanged();
+        }
+        if (!other.getIsTdd().isEmpty()) {
+          isTdd_ = other.isTdd_;
+          onChanged();
+        }
+        if (!other.getRssi().isEmpty()) {
+          rssi_ = other.rssi_;
+          onChanged();
+        }
+        if (!other.getDuplexMode().isEmpty()) {
+          duplexMode_ = other.duplexMode_;
+          onChanged();
+        }
+        if (other.getLng() != 0D) {
+          setLng(other.getLng());
+        }
+        if (other.getLat() != 0D) {
+          setLat(other.getLat());
+        }
+        if (other.getHeight() != 0F) {
+          setHeight(other.getHeight());
+        }
+        if (other.getTimestamp() != 0) {
+          setTimestamp(other.getTimestamp());
+        }
+        if (other.getBoxstate() != 0) {
+          setBoxstate(other.getBoxstate());
+        }
+        if (!other.getIsp().isEmpty()) {
+          isp_ = other.isp_;
+          onChanged();
+        }
+        if (other.getTempMax() != 0) {
+          setTempMax(other.getTempMax());
+        }
+        if (!other.getPrxRsrp().isEmpty()) {
+          prxRsrp_ = other.prxRsrp_;
+          onChanged();
+        }
+        if (!other.getDrxRsrp().isEmpty()) {
+          drxRsrp_ = other.drxRsrp_;
+          onChanged();
+        }
+        if (!other.getRx2Rsrp().isEmpty()) {
+          rx2Rsrp_ = other.rx2Rsrp_;
+          onChanged();
+        }
+        if (!other.getRx3Rsrp().isEmpty()) {
+          rx3Rsrp_ = other.rx3Rsrp_;
+          onChanged();
+        }
+        if (!other.getBoxSn().isEmpty()) {
+          boxSn_ = other.boxSn_;
+          onChanged();
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private java.lang.Object mode_ = "";
+      /**
+       * <pre>
+       *入网模式:NR5G-SA,NR5G-NSA,LTE
+       * </pre>
+       *
+       * <code>string mode = 1;</code>
+       * @return The mode.
+       */
+      public java.lang.String getMode() {
+        java.lang.Object ref = mode_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          mode_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       *入网模式:NR5G-SA,NR5G-NSA,LTE
+       * </pre>
+       *
+       * <code>string mode = 1;</code>
+       * @return The bytes for mode.
+       */
+      public com.google.protobuf.ByteString
+          getModeBytes() {
+        java.lang.Object ref = mode_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          mode_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       *入网模式:NR5G-SA,NR5G-NSA,LTE
+       * </pre>
+       *
+       * <code>string mode = 1;</code>
+       * @param value The mode to set.
+       * @return This builder for chaining.
+       */
+      public Builder setMode(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        mode_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *入网模式:NR5G-SA,NR5G-NSA,LTE
+       * </pre>
+       *
+       * <code>string mode = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearMode() {
+        
+        mode_ = getDefaultInstance().getMode();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *入网模式:NR5G-SA,NR5G-NSA,LTE
+       * </pre>
+       *
+       * <code>string mode = 1;</code>
+       * @param value The bytes for mode to set.
+       * @return This builder for chaining.
+       */
+      public Builder setModeBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        mode_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object mcc_ = "";
+      /**
+       * <pre>
+       *NR5G-SA,NR5G-NSA,LTE
+       * </pre>
+       *
+       * <code>string mcc = 2;</code>
+       * @return The mcc.
+       */
+      public java.lang.String getMcc() {
+        java.lang.Object ref = mcc_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          mcc_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       *NR5G-SA,NR5G-NSA,LTE
+       * </pre>
+       *
+       * <code>string mcc = 2;</code>
+       * @return The bytes for mcc.
+       */
+      public com.google.protobuf.ByteString
+          getMccBytes() {
+        java.lang.Object ref = mcc_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          mcc_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       *NR5G-SA,NR5G-NSA,LTE
+       * </pre>
+       *
+       * <code>string mcc = 2;</code>
+       * @param value The mcc to set.
+       * @return This builder for chaining.
+       */
+      public Builder setMcc(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        mcc_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *NR5G-SA,NR5G-NSA,LTE
+       * </pre>
+       *
+       * <code>string mcc = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearMcc() {
+        
+        mcc_ = getDefaultInstance().getMcc();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *NR5G-SA,NR5G-NSA,LTE
+       * </pre>
+       *
+       * <code>string mcc = 2;</code>
+       * @param value The bytes for mcc to set.
+       * @return This builder for chaining.
+       */
+      public Builder setMccBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        mcc_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object mnc_ = "";
+      /**
+       * <pre>
+       *NR5G-SA,NR5G-NSA,LTE
+       * </pre>
+       *
+       * <code>string mnc = 3;</code>
+       * @return The mnc.
+       */
+      public java.lang.String getMnc() {
+        java.lang.Object ref = mnc_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          mnc_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       *NR5G-SA,NR5G-NSA,LTE
+       * </pre>
+       *
+       * <code>string mnc = 3;</code>
+       * @return The bytes for mnc.
+       */
+      public com.google.protobuf.ByteString
+          getMncBytes() {
+        java.lang.Object ref = mnc_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          mnc_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       *NR5G-SA,NR5G-NSA,LTE
+       * </pre>
+       *
+       * <code>string mnc = 3;</code>
+       * @param value The mnc to set.
+       * @return This builder for chaining.
+       */
+      public Builder setMnc(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        mnc_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *NR5G-SA,NR5G-NSA,LTE
+       * </pre>
+       *
+       * <code>string mnc = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearMnc() {
+        
+        mnc_ = getDefaultInstance().getMnc();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *NR5G-SA,NR5G-NSA,LTE
+       * </pre>
+       *
+       * <code>string mnc = 3;</code>
+       * @param value The bytes for mnc to set.
+       * @return This builder for chaining.
+       */
+      public Builder setMncBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        mnc_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object cellid_ = "";
+      /**
+       * <pre>
+       *NR5G-SA,LTE
+       * </pre>
+       *
+       * <code>string cellid = 4;</code>
+       * @return The cellid.
+       */
+      public java.lang.String getCellid() {
+        java.lang.Object ref = cellid_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          cellid_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       *NR5G-SA,LTE
+       * </pre>
+       *
+       * <code>string cellid = 4;</code>
+       * @return The bytes for cellid.
+       */
+      public com.google.protobuf.ByteString
+          getCellidBytes() {
+        java.lang.Object ref = cellid_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          cellid_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       *NR5G-SA,LTE
+       * </pre>
+       *
+       * <code>string cellid = 4;</code>
+       * @param value The cellid to set.
+       * @return This builder for chaining.
+       */
+      public Builder setCellid(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        cellid_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *NR5G-SA,LTE
+       * </pre>
+       *
+       * <code>string cellid = 4;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearCellid() {
+        
+        cellid_ = getDefaultInstance().getCellid();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *NR5G-SA,LTE
+       * </pre>
+       *
+       * <code>string cellid = 4;</code>
+       * @param value The bytes for cellid to set.
+       * @return This builder for chaining.
+       */
+      public Builder setCellidBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        cellid_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object pcid_ = "";
+      /**
+       * <pre>
+       *NR5G-SA,NR5G-NSA,LTE
+       * </pre>
+       *
+       * <code>string pcid = 5;</code>
+       * @return The pcid.
+       */
+      public java.lang.String getPcid() {
+        java.lang.Object ref = pcid_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          pcid_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       *NR5G-SA,NR5G-NSA,LTE
+       * </pre>
+       *
+       * <code>string pcid = 5;</code>
+       * @return The bytes for pcid.
+       */
+      public com.google.protobuf.ByteString
+          getPcidBytes() {
+        java.lang.Object ref = pcid_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          pcid_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       *NR5G-SA,NR5G-NSA,LTE
+       * </pre>
+       *
+       * <code>string pcid = 5;</code>
+       * @param value The pcid to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPcid(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        pcid_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *NR5G-SA,NR5G-NSA,LTE
+       * </pre>
+       *
+       * <code>string pcid = 5;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearPcid() {
+        
+        pcid_ = getDefaultInstance().getPcid();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *NR5G-SA,NR5G-NSA,LTE
+       * </pre>
+       *
+       * <code>string pcid = 5;</code>
+       * @param value The bytes for pcid to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPcidBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        pcid_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object tac_ = "";
+      /**
+       * <pre>
+       *NR5G-SA,LTE
+       * </pre>
+       *
+       * <code>string tac = 6;</code>
+       * @return The tac.
+       */
+      public java.lang.String getTac() {
+        java.lang.Object ref = tac_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          tac_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       *NR5G-SA,LTE
+       * </pre>
+       *
+       * <code>string tac = 6;</code>
+       * @return The bytes for tac.
+       */
+      public com.google.protobuf.ByteString
+          getTacBytes() {
+        java.lang.Object ref = tac_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          tac_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       *NR5G-SA,LTE
+       * </pre>
+       *
+       * <code>string tac = 6;</code>
+       * @param value The tac to set.
+       * @return This builder for chaining.
+       */
+      public Builder setTac(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        tac_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *NR5G-SA,LTE
+       * </pre>
+       *
+       * <code>string tac = 6;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearTac() {
+        
+        tac_ = getDefaultInstance().getTac();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *NR5G-SA,LTE
+       * </pre>
+       *
+       * <code>string tac = 6;</code>
+       * @param value The bytes for tac to set.
+       * @return This builder for chaining.
+       */
+      public Builder setTacBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        tac_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object arfcn_ = "";
+      /**
+       * <pre>
+       *NR5G-SA,NR5G-NSA
+       * </pre>
+       *
+       * <code>string arfcn = 7;</code>
+       * @return The arfcn.
+       */
+      public java.lang.String getArfcn() {
+        java.lang.Object ref = arfcn_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          arfcn_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       *NR5G-SA,NR5G-NSA
+       * </pre>
+       *
+       * <code>string arfcn = 7;</code>
+       * @return The bytes for arfcn.
+       */
+      public com.google.protobuf.ByteString
+          getArfcnBytes() {
+        java.lang.Object ref = arfcn_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          arfcn_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       *NR5G-SA,NR5G-NSA
+       * </pre>
+       *
+       * <code>string arfcn = 7;</code>
+       * @param value The arfcn to set.
+       * @return This builder for chaining.
+       */
+      public Builder setArfcn(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        arfcn_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *NR5G-SA,NR5G-NSA
+       * </pre>
+       *
+       * <code>string arfcn = 7;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearArfcn() {
+        
+        arfcn_ = getDefaultInstance().getArfcn();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *NR5G-SA,NR5G-NSA
+       * </pre>
+       *
+       * <code>string arfcn = 7;</code>
+       * @param value The bytes for arfcn to set.
+       * @return This builder for chaining.
+       */
+      public Builder setArfcnBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        arfcn_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object band_ = "";
+      /**
+       * <pre>
+       *NR5G-SA,NR5G-NSA
+       * </pre>
+       *
+       * <code>string band = 8;</code>
+       * @return The band.
+       */
+      public java.lang.String getBand() {
+        java.lang.Object ref = band_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          band_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       *NR5G-SA,NR5G-NSA
+       * </pre>
+       *
+       * <code>string band = 8;</code>
+       * @return The bytes for band.
+       */
+      public com.google.protobuf.ByteString
+          getBandBytes() {
+        java.lang.Object ref = band_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          band_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       *NR5G-SA,NR5G-NSA
+       * </pre>
+       *
+       * <code>string band = 8;</code>
+       * @param value The band to set.
+       * @return This builder for chaining.
+       */
+      public Builder setBand(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        band_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *NR5G-SA,NR5G-NSA
+       * </pre>
+       *
+       * <code>string band = 8;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearBand() {
+        
+        band_ = getDefaultInstance().getBand();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *NR5G-SA,NR5G-NSA
+       * </pre>
+       *
+       * <code>string band = 8;</code>
+       * @param value The bytes for band to set.
+       * @return This builder for chaining.
+       */
+      public Builder setBandBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        band_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object nrDlBandwidth_ = "";
+      /**
+       * <pre>
+       *NR5G-SA
+       * </pre>
+       *
+       * <code>string nr_dl_bandwidth = 9;</code>
+       * @return The nrDlBandwidth.
+       */
+      public java.lang.String getNrDlBandwidth() {
+        java.lang.Object ref = nrDlBandwidth_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          nrDlBandwidth_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       *NR5G-SA
+       * </pre>
+       *
+       * <code>string nr_dl_bandwidth = 9;</code>
+       * @return The bytes for nrDlBandwidth.
+       */
+      public com.google.protobuf.ByteString
+          getNrDlBandwidthBytes() {
+        java.lang.Object ref = nrDlBandwidth_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          nrDlBandwidth_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       *NR5G-SA
+       * </pre>
+       *
+       * <code>string nr_dl_bandwidth = 9;</code>
+       * @param value The nrDlBandwidth to set.
+       * @return This builder for chaining.
+       */
+      public Builder setNrDlBandwidth(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        nrDlBandwidth_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *NR5G-SA
+       * </pre>
+       *
+       * <code>string nr_dl_bandwidth = 9;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearNrDlBandwidth() {
+        
+        nrDlBandwidth_ = getDefaultInstance().getNrDlBandwidth();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *NR5G-SA
+       * </pre>
+       *
+       * <code>string nr_dl_bandwidth = 9;</code>
+       * @param value The bytes for nrDlBandwidth to set.
+       * @return This builder for chaining.
+       */
+      public Builder setNrDlBandwidthBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        nrDlBandwidth_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object rsrp_ = "";
+      /**
+       * <pre>
+       *NR5G-SA,NR5G-NSA,LTE
+       * </pre>
+       *
+       * <code>string rsrp = 10;</code>
+       * @return The rsrp.
+       */
+      public java.lang.String getRsrp() {
+        java.lang.Object ref = rsrp_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          rsrp_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       *NR5G-SA,NR5G-NSA,LTE
+       * </pre>
+       *
+       * <code>string rsrp = 10;</code>
+       * @return The bytes for rsrp.
+       */
+      public com.google.protobuf.ByteString
+          getRsrpBytes() {
+        java.lang.Object ref = rsrp_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          rsrp_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       *NR5G-SA,NR5G-NSA,LTE
+       * </pre>
+       *
+       * <code>string rsrp = 10;</code>
+       * @param value The rsrp to set.
+       * @return This builder for chaining.
+       */
+      public Builder setRsrp(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        rsrp_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *NR5G-SA,NR5G-NSA,LTE
+       * </pre>
+       *
+       * <code>string rsrp = 10;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearRsrp() {
+        
+        rsrp_ = getDefaultInstance().getRsrp();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *NR5G-SA,NR5G-NSA,LTE
+       * </pre>
+       *
+       * <code>string rsrp = 10;</code>
+       * @param value The bytes for rsrp to set.
+       * @return This builder for chaining.
+       */
+      public Builder setRsrpBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        rsrp_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object rsrq_ = "";
+      /**
+       * <pre>
+       *NR5G-SA,NR5G-NSA,LTE
+       * </pre>
+       *
+       * <code>string rsrq = 11;</code>
+       * @return The rsrq.
+       */
+      public java.lang.String getRsrq() {
+        java.lang.Object ref = rsrq_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          rsrq_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       *NR5G-SA,NR5G-NSA,LTE
+       * </pre>
+       *
+       * <code>string rsrq = 11;</code>
+       * @return The bytes for rsrq.
+       */
+      public com.google.protobuf.ByteString
+          getRsrqBytes() {
+        java.lang.Object ref = rsrq_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          rsrq_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       *NR5G-SA,NR5G-NSA,LTE
+       * </pre>
+       *
+       * <code>string rsrq = 11;</code>
+       * @param value The rsrq to set.
+       * @return This builder for chaining.
+       */
+      public Builder setRsrq(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        rsrq_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *NR5G-SA,NR5G-NSA,LTE
+       * </pre>
+       *
+       * <code>string rsrq = 11;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearRsrq() {
+        
+        rsrq_ = getDefaultInstance().getRsrq();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *NR5G-SA,NR5G-NSA,LTE
+       * </pre>
+       *
+       * <code>string rsrq = 11;</code>
+       * @param value The bytes for rsrq to set.
+       * @return This builder for chaining.
+       */
+      public Builder setRsrqBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        rsrq_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object sinr_ = "";
+      /**
+       * <pre>
+       *NR5G-SA,NR5G-NSA,LTE
+       * </pre>
+       *
+       * <code>string sinr = 12;</code>
+       * @return The sinr.
+       */
+      public java.lang.String getSinr() {
+        java.lang.Object ref = sinr_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          sinr_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       *NR5G-SA,NR5G-NSA,LTE
+       * </pre>
+       *
+       * <code>string sinr = 12;</code>
+       * @return The bytes for sinr.
+       */
+      public com.google.protobuf.ByteString
+          getSinrBytes() {
+        java.lang.Object ref = sinr_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          sinr_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       *NR5G-SA,NR5G-NSA,LTE
+       * </pre>
+       *
+       * <code>string sinr = 12;</code>
+       * @param value The sinr to set.
+       * @return This builder for chaining.
+       */
+      public Builder setSinr(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        sinr_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *NR5G-SA,NR5G-NSA,LTE
+       * </pre>
+       *
+       * <code>string sinr = 12;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearSinr() {
+        
+        sinr_ = getDefaultInstance().getSinr();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *NR5G-SA,NR5G-NSA,LTE
+       * </pre>
+       *
+       * <code>string sinr = 12;</code>
+       * @param value The bytes for sinr to set.
+       * @return This builder for chaining.
+       */
+      public Builder setSinrBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        sinr_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object txPower_ = "";
+      /**
+       * <pre>
+       *NR5G-SA,LTE
+       * </pre>
+       *
+       * <code>string tx_power = 13;</code>
+       * @return The txPower.
+       */
+      public java.lang.String getTxPower() {
+        java.lang.Object ref = txPower_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          txPower_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       *NR5G-SA,LTE
+       * </pre>
+       *
+       * <code>string tx_power = 13;</code>
+       * @return The bytes for txPower.
+       */
+      public com.google.protobuf.ByteString
+          getTxPowerBytes() {
+        java.lang.Object ref = txPower_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          txPower_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       *NR5G-SA,LTE
+       * </pre>
+       *
+       * <code>string tx_power = 13;</code>
+       * @param value The txPower to set.
+       * @return This builder for chaining.
+       */
+      public Builder setTxPower(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        txPower_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *NR5G-SA,LTE
+       * </pre>
+       *
+       * <code>string tx_power = 13;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearTxPower() {
+        
+        txPower_ = getDefaultInstance().getTxPower();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *NR5G-SA,LTE
+       * </pre>
+       *
+       * <code>string tx_power = 13;</code>
+       * @param value The bytes for txPower to set.
+       * @return This builder for chaining.
+       */
+      public Builder setTxPowerBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        txPower_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object srxlev_ = "";
+      /**
+       * <pre>
+       *NR5G-SA,LTE
+       * </pre>
+       *
+       * <code>string srxlev = 14;</code>
+       * @return The srxlev.
+       */
+      public java.lang.String getSrxlev() {
+        java.lang.Object ref = srxlev_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          srxlev_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       *NR5G-SA,LTE
+       * </pre>
+       *
+       * <code>string srxlev = 14;</code>
+       * @return The bytes for srxlev.
+       */
+      public com.google.protobuf.ByteString
+          getSrxlevBytes() {
+        java.lang.Object ref = srxlev_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          srxlev_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       *NR5G-SA,LTE
+       * </pre>
+       *
+       * <code>string srxlev = 14;</code>
+       * @param value The srxlev to set.
+       * @return This builder for chaining.
+       */
+      public Builder setSrxlev(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        srxlev_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *NR5G-SA,LTE
+       * </pre>
+       *
+       * <code>string srxlev = 14;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearSrxlev() {
+        
+        srxlev_ = getDefaultInstance().getSrxlev();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *NR5G-SA,LTE
+       * </pre>
+       *
+       * <code>string srxlev = 14;</code>
+       * @param value The bytes for srxlev to set.
+       * @return This builder for chaining.
+       */
+      public Builder setSrxlevBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        srxlev_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object cqi_ = "";
+      /**
+       * <pre>
+       *LTE
+       * </pre>
+       *
+       * <code>string cqi = 15;</code>
+       * @return The cqi.
+       */
+      public java.lang.String getCqi() {
+        java.lang.Object ref = cqi_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          cqi_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       *LTE
+       * </pre>
+       *
+       * <code>string cqi = 15;</code>
+       * @return The bytes for cqi.
+       */
+      public com.google.protobuf.ByteString
+          getCqiBytes() {
+        java.lang.Object ref = cqi_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          cqi_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       *LTE
+       * </pre>
+       *
+       * <code>string cqi = 15;</code>
+       * @param value The cqi to set.
+       * @return This builder for chaining.
+       */
+      public Builder setCqi(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        cqi_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *LTE
+       * </pre>
+       *
+       * <code>string cqi = 15;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearCqi() {
+        
+        cqi_ = getDefaultInstance().getCqi();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *LTE
+       * </pre>
+       *
+       * <code>string cqi = 15;</code>
+       * @param value The bytes for cqi to set.
+       * @return This builder for chaining.
+       */
+      public Builder setCqiBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        cqi_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object earfcn_ = "";
+      /**
+       * <pre>
+       *LTE
+       * </pre>
+       *
+       * <code>string earfcn = 16;</code>
+       * @return The earfcn.
+       */
+      public java.lang.String getEarfcn() {
+        java.lang.Object ref = earfcn_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          earfcn_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       *LTE
+       * </pre>
+       *
+       * <code>string earfcn = 16;</code>
+       * @return The bytes for earfcn.
+       */
+      public com.google.protobuf.ByteString
+          getEarfcnBytes() {
+        java.lang.Object ref = earfcn_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          earfcn_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       *LTE
+       * </pre>
+       *
+       * <code>string earfcn = 16;</code>
+       * @param value The earfcn to set.
+       * @return This builder for chaining.
+       */
+      public Builder setEarfcn(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        earfcn_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *LTE
+       * </pre>
+       *
+       * <code>string earfcn = 16;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearEarfcn() {
+        
+        earfcn_ = getDefaultInstance().getEarfcn();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *LTE
+       * </pre>
+       *
+       * <code>string earfcn = 16;</code>
+       * @param value The bytes for earfcn to set.
+       * @return This builder for chaining.
+       */
+      public Builder setEarfcnBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        earfcn_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object freqBandInd_ = "";
+      /**
+       * <pre>
+       *LTE
+       * </pre>
+       *
+       * <code>string freq_band_ind = 17;</code>
+       * @return The freqBandInd.
+       */
+      public java.lang.String getFreqBandInd() {
+        java.lang.Object ref = freqBandInd_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          freqBandInd_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       *LTE
+       * </pre>
+       *
+       * <code>string freq_band_ind = 17;</code>
+       * @return The bytes for freqBandInd.
+       */
+      public com.google.protobuf.ByteString
+          getFreqBandIndBytes() {
+        java.lang.Object ref = freqBandInd_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          freqBandInd_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       *LTE
+       * </pre>
+       *
+       * <code>string freq_band_ind = 17;</code>
+       * @param value The freqBandInd to set.
+       * @return This builder for chaining.
+       */
+      public Builder setFreqBandInd(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        freqBandInd_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *LTE
+       * </pre>
+       *
+       * <code>string freq_band_ind = 17;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearFreqBandInd() {
+        
+        freqBandInd_ = getDefaultInstance().getFreqBandInd();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *LTE
+       * </pre>
+       *
+       * <code>string freq_band_ind = 17;</code>
+       * @param value The bytes for freqBandInd to set.
+       * @return This builder for chaining.
+       */
+      public Builder setFreqBandIndBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        freqBandInd_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object ulBandwidth_ = "";
+      /**
+       * <pre>
+       *LTE
+       * </pre>
+       *
+       * <code>string ul_bandwidth = 18;</code>
+       * @return The ulBandwidth.
+       */
+      public java.lang.String getUlBandwidth() {
+        java.lang.Object ref = ulBandwidth_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          ulBandwidth_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       *LTE
+       * </pre>
+       *
+       * <code>string ul_bandwidth = 18;</code>
+       * @return The bytes for ulBandwidth.
+       */
+      public com.google.protobuf.ByteString
+          getUlBandwidthBytes() {
+        java.lang.Object ref = ulBandwidth_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          ulBandwidth_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       *LTE
+       * </pre>
+       *
+       * <code>string ul_bandwidth = 18;</code>
+       * @param value The ulBandwidth to set.
+       * @return This builder for chaining.
+       */
+      public Builder setUlBandwidth(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        ulBandwidth_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *LTE
+       * </pre>
+       *
+       * <code>string ul_bandwidth = 18;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearUlBandwidth() {
+        
+        ulBandwidth_ = getDefaultInstance().getUlBandwidth();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *LTE
+       * </pre>
+       *
+       * <code>string ul_bandwidth = 18;</code>
+       * @param value The bytes for ulBandwidth to set.
+       * @return This builder for chaining.
+       */
+      public Builder setUlBandwidthBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        ulBandwidth_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object dlBandwidth_ = "";
+      /**
+       * <pre>
+       *LTE
+       * </pre>
+       *
+       * <code>string dl_bandwidth = 19;</code>
+       * @return The dlBandwidth.
+       */
+      public java.lang.String getDlBandwidth() {
+        java.lang.Object ref = dlBandwidth_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          dlBandwidth_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       *LTE
+       * </pre>
+       *
+       * <code>string dl_bandwidth = 19;</code>
+       * @return The bytes for dlBandwidth.
+       */
+      public com.google.protobuf.ByteString
+          getDlBandwidthBytes() {
+        java.lang.Object ref = dlBandwidth_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          dlBandwidth_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       *LTE
+       * </pre>
+       *
+       * <code>string dl_bandwidth = 19;</code>
+       * @param value The dlBandwidth to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDlBandwidth(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        dlBandwidth_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *LTE
+       * </pre>
+       *
+       * <code>string dl_bandwidth = 19;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearDlBandwidth() {
+        
+        dlBandwidth_ = getDefaultInstance().getDlBandwidth();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *LTE
+       * </pre>
+       *
+       * <code>string dl_bandwidth = 19;</code>
+       * @param value The bytes for dlBandwidth to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDlBandwidthBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        dlBandwidth_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object isTdd_ = "";
+      /**
+       * <pre>
+       *LTE
+       * </pre>
+       *
+       * <code>string is_tdd = 20;</code>
+       * @return The isTdd.
+       */
+      public java.lang.String getIsTdd() {
+        java.lang.Object ref = isTdd_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          isTdd_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       *LTE
+       * </pre>
+       *
+       * <code>string is_tdd = 20;</code>
+       * @return The bytes for isTdd.
+       */
+      public com.google.protobuf.ByteString
+          getIsTddBytes() {
+        java.lang.Object ref = isTdd_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          isTdd_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       *LTE
+       * </pre>
+       *
+       * <code>string is_tdd = 20;</code>
+       * @param value The isTdd to set.
+       * @return This builder for chaining.
+       */
+      public Builder setIsTdd(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        isTdd_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *LTE
+       * </pre>
+       *
+       * <code>string is_tdd = 20;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearIsTdd() {
+        
+        isTdd_ = getDefaultInstance().getIsTdd();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *LTE
+       * </pre>
+       *
+       * <code>string is_tdd = 20;</code>
+       * @param value The bytes for isTdd to set.
+       * @return This builder for chaining.
+       */
+      public Builder setIsTddBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        isTdd_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object rssi_ = "";
+      /**
+       * <pre>
+       *LTE
+       * </pre>
+       *
+       * <code>string rssi = 21;</code>
+       * @return The rssi.
+       */
+      public java.lang.String getRssi() {
+        java.lang.Object ref = rssi_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          rssi_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       *LTE
+       * </pre>
+       *
+       * <code>string rssi = 21;</code>
+       * @return The bytes for rssi.
+       */
+      public com.google.protobuf.ByteString
+          getRssiBytes() {
+        java.lang.Object ref = rssi_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          rssi_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       *LTE
+       * </pre>
+       *
+       * <code>string rssi = 21;</code>
+       * @param value The rssi to set.
+       * @return This builder for chaining.
+       */
+      public Builder setRssi(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        rssi_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *LTE
+       * </pre>
+       *
+       * <code>string rssi = 21;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearRssi() {
+        
+        rssi_ = getDefaultInstance().getRssi();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *LTE
+       * </pre>
+       *
+       * <code>string rssi = 21;</code>
+       * @param value The bytes for rssi to set.
+       * @return This builder for chaining.
+       */
+      public Builder setRssiBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        rssi_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object duplexMode_ = "";
+      /**
+       * <pre>
+       *NR5G-SA
+       * </pre>
+       *
+       * <code>string duplex_mode = 22;</code>
+       * @return The duplexMode.
+       */
+      public java.lang.String getDuplexMode() {
+        java.lang.Object ref = duplexMode_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          duplexMode_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       *NR5G-SA
+       * </pre>
+       *
+       * <code>string duplex_mode = 22;</code>
+       * @return The bytes for duplexMode.
+       */
+      public com.google.protobuf.ByteString
+          getDuplexModeBytes() {
+        java.lang.Object ref = duplexMode_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          duplexMode_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       *NR5G-SA
+       * </pre>
+       *
+       * <code>string duplex_mode = 22;</code>
+       * @param value The duplexMode to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDuplexMode(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        duplexMode_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *NR5G-SA
+       * </pre>
+       *
+       * <code>string duplex_mode = 22;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearDuplexMode() {
+        
+        duplexMode_ = getDefaultInstance().getDuplexMode();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *NR5G-SA
+       * </pre>
+       *
+       * <code>string duplex_mode = 22;</code>
+       * @param value The bytes for duplexMode to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDuplexModeBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        duplexMode_ = value;
+        onChanged();
+        return this;
+      }
+
+      private double lng_ ;
+      /**
+       * <pre>
+       *经度
+       * </pre>
+       *
+       * <code>double lng = 23;</code>
+       * @return The lng.
+       */
+      @java.lang.Override
+      public double getLng() {
+        return lng_;
+      }
+      /**
+       * <pre>
+       *经度
+       * </pre>
+       *
+       * <code>double lng = 23;</code>
+       * @param value The lng to set.
+       * @return This builder for chaining.
+       */
+      public Builder setLng(double value) {
+        
+        lng_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *经度
+       * </pre>
+       *
+       * <code>double lng = 23;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearLng() {
+        
+        lng_ = 0D;
+        onChanged();
+        return this;
+      }
+
+      private double lat_ ;
+      /**
+       * <pre>
+       *纬度
+       * </pre>
+       *
+       * <code>double lat = 24;</code>
+       * @return The lat.
+       */
+      @java.lang.Override
+      public double getLat() {
+        return lat_;
+      }
+      /**
+       * <pre>
+       *纬度
+       * </pre>
+       *
+       * <code>double lat = 24;</code>
+       * @param value The lat to set.
+       * @return This builder for chaining.
+       */
+      public Builder setLat(double value) {
+        
+        lat_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *纬度
+       * </pre>
+       *
+       * <code>double lat = 24;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearLat() {
+        
+        lat_ = 0D;
+        onChanged();
+        return this;
+      }
+
+      private float height_ ;
+      /**
+       * <pre>
+       *高度(单位:米)
+       * </pre>
+       *
+       * <code>float height = 25;</code>
+       * @return The height.
+       */
+      @java.lang.Override
+      public float getHeight() {
+        return height_;
+      }
+      /**
+       * <pre>
+       *高度(单位:米)
+       * </pre>
+       *
+       * <code>float height = 25;</code>
+       * @param value The height to set.
+       * @return This builder for chaining.
+       */
+      public Builder setHeight(float value) {
+        
+        height_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *高度(单位:米)
+       * </pre>
+       *
+       * <code>float height = 25;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearHeight() {
+        
+        height_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private int timestamp_ ;
+      /**
+       * <pre>
+       *时间戳(单位:秒)
+       * </pre>
+       *
+       * <code>uint32 timestamp = 26;</code>
+       * @return The timestamp.
+       */
+      @java.lang.Override
+      public int getTimestamp() {
+        return timestamp_;
+      }
+      /**
+       * <pre>
+       *时间戳(单位:秒)
+       * </pre>
+       *
+       * <code>uint32 timestamp = 26;</code>
+       * @param value The timestamp to set.
+       * @return This builder for chaining.
+       */
+      public Builder setTimestamp(int value) {
+        
+        timestamp_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *时间戳(单位:秒)
+       * </pre>
+       *
+       * <code>uint32 timestamp = 26;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearTimestamp() {
+        
+        timestamp_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int boxstate_ ;
+      /**
+       * <pre>
+       *1=线缆故障,2=OSDK未激活,3=正常,4=云盒固件更新
+       * </pre>
+       *
+       * <code>uint32 boxstate = 27;</code>
+       * @return The boxstate.
+       */
+      @java.lang.Override
+      public int getBoxstate() {
+        return boxstate_;
+      }
+      /**
+       * <pre>
+       *1=线缆故障,2=OSDK未激活,3=正常,4=云盒固件更新
+       * </pre>
+       *
+       * <code>uint32 boxstate = 27;</code>
+       * @param value The boxstate to set.
+       * @return This builder for chaining.
+       */
+      public Builder setBoxstate(int value) {
+        
+        boxstate_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *1=线缆故障,2=OSDK未激活,3=正常,4=云盒固件更新
+       * </pre>
+       *
+       * <code>uint32 boxstate = 27;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearBoxstate() {
+        
+        boxstate_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object isp_ = "";
+      /**
+       * <pre>
+       *运营商
+       * </pre>
+       *
+       * <code>string isp = 28;</code>
+       * @return The isp.
+       */
+      public java.lang.String getIsp() {
+        java.lang.Object ref = isp_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          isp_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       *运营商
+       * </pre>
+       *
+       * <code>string isp = 28;</code>
+       * @return The bytes for isp.
+       */
+      public com.google.protobuf.ByteString
+          getIspBytes() {
+        java.lang.Object ref = isp_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          isp_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       *运营商
+       * </pre>
+       *
+       * <code>string isp = 28;</code>
+       * @param value The isp to set.
+       * @return This builder for chaining.
+       */
+      public Builder setIsp(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        isp_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *运营商
+       * </pre>
+       *
+       * <code>string isp = 28;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearIsp() {
+        
+        isp_ = getDefaultInstance().getIsp();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *运营商
+       * </pre>
+       *
+       * <code>string isp = 28;</code>
+       * @param value The bytes for isp to set.
+       * @return This builder for chaining.
+       */
+      public Builder setIspBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        isp_ = value;
+        onChanged();
+        return this;
+      }
+
+      private int tempMax_ ;
+      /**
+       * <pre>
+       *模组芯片温度(单位:摄氏度)
+       * </pre>
+       *
+       * <code>uint32 tempMax = 29;</code>
+       * @return The tempMax.
+       */
+      @java.lang.Override
+      public int getTempMax() {
+        return tempMax_;
+      }
+      /**
+       * <pre>
+       *模组芯片温度(单位:摄氏度)
+       * </pre>
+       *
+       * <code>uint32 tempMax = 29;</code>
+       * @param value The tempMax to set.
+       * @return This builder for chaining.
+       */
+      public Builder setTempMax(int value) {
+        
+        tempMax_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *模组芯片温度(单位:摄氏度)
+       * </pre>
+       *
+       * <code>uint32 tempMax = 29;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearTempMax() {
+        
+        tempMax_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object prxRsrp_ = "";
+      /**
+       * <pre>
+       *prx路径的rsrp值
+       * </pre>
+       *
+       * <code>string prx_rsrp = 30;</code>
+       * @return The prxRsrp.
+       */
+      public java.lang.String getPrxRsrp() {
+        java.lang.Object ref = prxRsrp_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          prxRsrp_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       *prx路径的rsrp值
+       * </pre>
+       *
+       * <code>string prx_rsrp = 30;</code>
+       * @return The bytes for prxRsrp.
+       */
+      public com.google.protobuf.ByteString
+          getPrxRsrpBytes() {
+        java.lang.Object ref = prxRsrp_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          prxRsrp_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       *prx路径的rsrp值
+       * </pre>
+       *
+       * <code>string prx_rsrp = 30;</code>
+       * @param value The prxRsrp to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPrxRsrp(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        prxRsrp_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *prx路径的rsrp值
+       * </pre>
+       *
+       * <code>string prx_rsrp = 30;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearPrxRsrp() {
+        
+        prxRsrp_ = getDefaultInstance().getPrxRsrp();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *prx路径的rsrp值
+       * </pre>
+       *
+       * <code>string prx_rsrp = 30;</code>
+       * @param value The bytes for prxRsrp to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPrxRsrpBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        prxRsrp_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object drxRsrp_ = "";
+      /**
+       * <pre>
+       *drx路径的rsrp值
+       * </pre>
+       *
+       * <code>string drx_rsrp = 31;</code>
+       * @return The drxRsrp.
+       */
+      public java.lang.String getDrxRsrp() {
+        java.lang.Object ref = drxRsrp_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          drxRsrp_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       *drx路径的rsrp值
+       * </pre>
+       *
+       * <code>string drx_rsrp = 31;</code>
+       * @return The bytes for drxRsrp.
+       */
+      public com.google.protobuf.ByteString
+          getDrxRsrpBytes() {
+        java.lang.Object ref = drxRsrp_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          drxRsrp_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       *drx路径的rsrp值
+       * </pre>
+       *
+       * <code>string drx_rsrp = 31;</code>
+       * @param value The drxRsrp to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDrxRsrp(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        drxRsrp_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *drx路径的rsrp值
+       * </pre>
+       *
+       * <code>string drx_rsrp = 31;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearDrxRsrp() {
+        
+        drxRsrp_ = getDefaultInstance().getDrxRsrp();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *drx路径的rsrp值
+       * </pre>
+       *
+       * <code>string drx_rsrp = 31;</code>
+       * @param value The bytes for drxRsrp to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDrxRsrpBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        drxRsrp_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object rx2Rsrp_ = "";
+      /**
+       * <pre>
+       *rx2路径的rsrp值
+       * </pre>
+       *
+       * <code>string rx2_rsrp = 32;</code>
+       * @return The rx2Rsrp.
+       */
+      public java.lang.String getRx2Rsrp() {
+        java.lang.Object ref = rx2Rsrp_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          rx2Rsrp_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       *rx2路径的rsrp值
+       * </pre>
+       *
+       * <code>string rx2_rsrp = 32;</code>
+       * @return The bytes for rx2Rsrp.
+       */
+      public com.google.protobuf.ByteString
+          getRx2RsrpBytes() {
+        java.lang.Object ref = rx2Rsrp_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          rx2Rsrp_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       *rx2路径的rsrp值
+       * </pre>
+       *
+       * <code>string rx2_rsrp = 32;</code>
+       * @param value The rx2Rsrp to set.
+       * @return This builder for chaining.
+       */
+      public Builder setRx2Rsrp(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        rx2Rsrp_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *rx2路径的rsrp值
+       * </pre>
+       *
+       * <code>string rx2_rsrp = 32;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearRx2Rsrp() {
+        
+        rx2Rsrp_ = getDefaultInstance().getRx2Rsrp();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *rx2路径的rsrp值
+       * </pre>
+       *
+       * <code>string rx2_rsrp = 32;</code>
+       * @param value The bytes for rx2Rsrp to set.
+       * @return This builder for chaining.
+       */
+      public Builder setRx2RsrpBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        rx2Rsrp_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object rx3Rsrp_ = "";
+      /**
+       * <pre>
+       *rx3路径的rsrp值
+       * </pre>
+       *
+       * <code>string rx3_rsrp = 33;</code>
+       * @return The rx3Rsrp.
+       */
+      public java.lang.String getRx3Rsrp() {
+        java.lang.Object ref = rx3Rsrp_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          rx3Rsrp_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       *rx3路径的rsrp值
+       * </pre>
+       *
+       * <code>string rx3_rsrp = 33;</code>
+       * @return The bytes for rx3Rsrp.
+       */
+      public com.google.protobuf.ByteString
+          getRx3RsrpBytes() {
+        java.lang.Object ref = rx3Rsrp_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          rx3Rsrp_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       *rx3路径的rsrp值
+       * </pre>
+       *
+       * <code>string rx3_rsrp = 33;</code>
+       * @param value The rx3Rsrp to set.
+       * @return This builder for chaining.
+       */
+      public Builder setRx3Rsrp(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        rx3Rsrp_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *rx3路径的rsrp值
+       * </pre>
+       *
+       * <code>string rx3_rsrp = 33;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearRx3Rsrp() {
+        
+        rx3Rsrp_ = getDefaultInstance().getRx3Rsrp();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *rx3路径的rsrp值
+       * </pre>
+       *
+       * <code>string rx3_rsrp = 33;</code>
+       * @param value The bytes for rx3Rsrp to set.
+       * @return This builder for chaining.
+       */
+      public Builder setRx3RsrpBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        rx3Rsrp_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object boxSn_ = "";
+      /**
+       * <pre>
+       *云盒编号
+       * </pre>
+       *
+       * <code>string box_sn = 34;</code>
+       * @return The boxSn.
+       */
+      public java.lang.String getBoxSn() {
+        java.lang.Object ref = boxSn_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          boxSn_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       *云盒编号
+       * </pre>
+       *
+       * <code>string box_sn = 34;</code>
+       * @return The bytes for boxSn.
+       */
+      public com.google.protobuf.ByteString
+          getBoxSnBytes() {
+        java.lang.Object ref = boxSn_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          boxSn_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       *云盒编号
+       * </pre>
+       *
+       * <code>string box_sn = 34;</code>
+       * @param value The boxSn to set.
+       * @return This builder for chaining.
+       */
+      public Builder setBoxSn(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        boxSn_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *云盒编号
+       * </pre>
+       *
+       * <code>string box_sn = 34;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearBoxSn() {
+        
+        boxSn_ = getDefaultInstance().getBoxSn();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *云盒编号
+       * </pre>
+       *
+       * <code>string box_sn = 34;</code>
+       * @param value The bytes for boxSn to set.
+       * @return This builder for chaining.
+       */
+      public Builder setBoxSnBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        boxSn_ = value;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:SignalInfo)
+    }
+
+    // @@protoc_insertion_point(class_scope:SignalInfo)
+    private static final com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo();
+    }
+
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<SignalInfo>
+        PARSER = new com.google.protobuf.AbstractParser<SignalInfo>() {
+      @java.lang.Override
+      public SignalInfo parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new SignalInfo(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<SignalInfo> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<SignalInfo> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface SignalListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:SignalList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .SignalInfo signalInfo = 1;</code>
+     */
+    java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo> 
+        getSignalInfoList();
+    /**
+     * <code>repeated .SignalInfo signalInfo = 1;</code>
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo getSignalInfo(int index);
+    /**
+     * <code>repeated .SignalInfo signalInfo = 1;</code>
+     */
+    int getSignalInfoCount();
+    /**
+     * <code>repeated .SignalInfo signalInfo = 1;</code>
+     */
+    java.util.List<? extends com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfoOrBuilder> 
+        getSignalInfoOrBuilderList();
+    /**
+     * <code>repeated .SignalInfo signalInfo = 1;</code>
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfoOrBuilder getSignalInfoOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code SignalList}
+   */
+  public static final class SignalList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:SignalList)
+      SignalListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use SignalList.newBuilder() to construct.
+    private SignalList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private SignalList() {
+      signalInfo_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new SignalList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private SignalList(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                signalInfo_ = new java.util.ArrayList<com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              signalInfo_.add(
+                  input.readMessage(com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          signalInfo_ = java.util.Collections.unmodifiableList(signalInfo_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_SignalList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_SignalList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalList.class, com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalList.Builder.class);
+    }
+
+    public static final int SIGNALINFO_FIELD_NUMBER = 1;
+    private java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo> signalInfo_;
+    /**
+     * <code>repeated .SignalInfo signalInfo = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo> getSignalInfoList() {
+      return signalInfo_;
+    }
+    /**
+     * <code>repeated .SignalInfo signalInfo = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfoOrBuilder> 
+        getSignalInfoOrBuilderList() {
+      return signalInfo_;
+    }
+    /**
+     * <code>repeated .SignalInfo signalInfo = 1;</code>
+     */
+    @java.lang.Override
+    public int getSignalInfoCount() {
+      return signalInfo_.size();
+    }
+    /**
+     * <code>repeated .SignalInfo signalInfo = 1;</code>
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo getSignalInfo(int index) {
+      return signalInfo_.get(index);
+    }
+    /**
+     * <code>repeated .SignalInfo signalInfo = 1;</code>
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfoOrBuilder getSignalInfoOrBuilder(
+        int index) {
+      return signalInfo_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < signalInfo_.size(); i++) {
+        output.writeMessage(1, signalInfo_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < signalInfo_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, signalInfo_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalList)) {
+        return super.equals(obj);
+      }
+      com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalList other = (com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalList) obj;
+
+      if (!getSignalInfoList()
+          .equals(other.getSignalInfoList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getSignalInfoCount() > 0) {
+        hash = (37 * hash) + SIGNALINFO_FIELD_NUMBER;
+        hash = (53 * hash) + getSignalInfoList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalList parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalList parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalList parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalList parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalList parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalList parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalList prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code SignalList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:SignalList)
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_SignalList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_SignalList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalList.class, com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalList.Builder.class);
+      }
+
+      // Construct using com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getSignalInfoFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (signalInfoBuilder_ == null) {
+          signalInfo_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          signalInfoBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_SignalList_descriptor;
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalList getDefaultInstanceForType() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalList build() {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalList buildPartial() {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalList result = new com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalList(this);
+        int from_bitField0_ = bitField0_;
+        if (signalInfoBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            signalInfo_ = java.util.Collections.unmodifiableList(signalInfo_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.signalInfo_ = signalInfo_;
+        } else {
+          result.signalInfo_ = signalInfoBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalList) {
+          return mergeFrom((com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalList)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalList other) {
+        if (other == com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalList.getDefaultInstance()) return this;
+        if (signalInfoBuilder_ == null) {
+          if (!other.signalInfo_.isEmpty()) {
+            if (signalInfo_.isEmpty()) {
+              signalInfo_ = other.signalInfo_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureSignalInfoIsMutable();
+              signalInfo_.addAll(other.signalInfo_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.signalInfo_.isEmpty()) {
+            if (signalInfoBuilder_.isEmpty()) {
+              signalInfoBuilder_.dispose();
+              signalInfoBuilder_ = null;
+              signalInfo_ = other.signalInfo_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              signalInfoBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getSignalInfoFieldBuilder() : null;
+            } else {
+              signalInfoBuilder_.addAllMessages(other.signalInfo_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo> signalInfo_ =
+        java.util.Collections.emptyList();
+      private void ensureSignalInfoIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          signalInfo_ = new java.util.ArrayList<com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo>(signalInfo_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo, com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfoOrBuilder> signalInfoBuilder_;
+
+      /**
+       * <code>repeated .SignalInfo signalInfo = 1;</code>
+       */
+      public java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo> getSignalInfoList() {
+        if (signalInfoBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(signalInfo_);
+        } else {
+          return signalInfoBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .SignalInfo signalInfo = 1;</code>
+       */
+      public int getSignalInfoCount() {
+        if (signalInfoBuilder_ == null) {
+          return signalInfo_.size();
+        } else {
+          return signalInfoBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .SignalInfo signalInfo = 1;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo getSignalInfo(int index) {
+        if (signalInfoBuilder_ == null) {
+          return signalInfo_.get(index);
+        } else {
+          return signalInfoBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .SignalInfo signalInfo = 1;</code>
+       */
+      public Builder setSignalInfo(
+          int index, com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo value) {
+        if (signalInfoBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSignalInfoIsMutable();
+          signalInfo_.set(index, value);
+          onChanged();
+        } else {
+          signalInfoBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .SignalInfo signalInfo = 1;</code>
+       */
+      public Builder setSignalInfo(
+          int index, com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo.Builder builderForValue) {
+        if (signalInfoBuilder_ == null) {
+          ensureSignalInfoIsMutable();
+          signalInfo_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          signalInfoBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .SignalInfo signalInfo = 1;</code>
+       */
+      public Builder addSignalInfo(com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo value) {
+        if (signalInfoBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSignalInfoIsMutable();
+          signalInfo_.add(value);
+          onChanged();
+        } else {
+          signalInfoBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .SignalInfo signalInfo = 1;</code>
+       */
+      public Builder addSignalInfo(
+          int index, com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo value) {
+        if (signalInfoBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSignalInfoIsMutable();
+          signalInfo_.add(index, value);
+          onChanged();
+        } else {
+          signalInfoBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .SignalInfo signalInfo = 1;</code>
+       */
+      public Builder addSignalInfo(
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo.Builder builderForValue) {
+        if (signalInfoBuilder_ == null) {
+          ensureSignalInfoIsMutable();
+          signalInfo_.add(builderForValue.build());
+          onChanged();
+        } else {
+          signalInfoBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .SignalInfo signalInfo = 1;</code>
+       */
+      public Builder addSignalInfo(
+          int index, com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo.Builder builderForValue) {
+        if (signalInfoBuilder_ == null) {
+          ensureSignalInfoIsMutable();
+          signalInfo_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          signalInfoBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .SignalInfo signalInfo = 1;</code>
+       */
+      public Builder addAllSignalInfo(
+          java.lang.Iterable<? extends com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo> values) {
+        if (signalInfoBuilder_ == null) {
+          ensureSignalInfoIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, signalInfo_);
+          onChanged();
+        } else {
+          signalInfoBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .SignalInfo signalInfo = 1;</code>
+       */
+      public Builder clearSignalInfo() {
+        if (signalInfoBuilder_ == null) {
+          signalInfo_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          signalInfoBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .SignalInfo signalInfo = 1;</code>
+       */
+      public Builder removeSignalInfo(int index) {
+        if (signalInfoBuilder_ == null) {
+          ensureSignalInfoIsMutable();
+          signalInfo_.remove(index);
+          onChanged();
+        } else {
+          signalInfoBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .SignalInfo signalInfo = 1;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo.Builder getSignalInfoBuilder(
+          int index) {
+        return getSignalInfoFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .SignalInfo signalInfo = 1;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfoOrBuilder getSignalInfoOrBuilder(
+          int index) {
+        if (signalInfoBuilder_ == null) {
+          return signalInfo_.get(index);  } else {
+          return signalInfoBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .SignalInfo signalInfo = 1;</code>
+       */
+      public java.util.List<? extends com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfoOrBuilder> 
+           getSignalInfoOrBuilderList() {
+        if (signalInfoBuilder_ != null) {
+          return signalInfoBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(signalInfo_);
+        }
+      }
+      /**
+       * <code>repeated .SignalInfo signalInfo = 1;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo.Builder addSignalInfoBuilder() {
+        return getSignalInfoFieldBuilder().addBuilder(
+            com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .SignalInfo signalInfo = 1;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo.Builder addSignalInfoBuilder(
+          int index) {
+        return getSignalInfoFieldBuilder().addBuilder(
+            index, com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .SignalInfo signalInfo = 1;</code>
+       */
+      public java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo.Builder> 
+           getSignalInfoBuilderList() {
+        return getSignalInfoFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo, com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfoOrBuilder> 
+          getSignalInfoFieldBuilder() {
+        if (signalInfoBuilder_ == null) {
+          signalInfoBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo, com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfo.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalInfoOrBuilder>(
+                  signalInfo_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          signalInfo_ = null;
+        }
+        return signalInfoBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:SignalList)
+    }
+
+    // @@protoc_insertion_point(class_scope:SignalList)
+    private static final com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalList();
+    }
+
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<SignalList>
+        PARSER = new com.google.protobuf.AbstractParser<SignalList>() {
+      @java.lang.Override
+      public SignalList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new SignalList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<SignalList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<SignalList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.SignalList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface UavStateOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:UavState)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <pre>
+     *飞控状态
+     * </pre>
+     *
+     * <code>.FlightControllerState flightControllerState = 1;</code>
+     * @return Whether the flightControllerState field is set.
+     */
+    boolean hasFlightControllerState();
+    /**
+     * <pre>
+     *飞控状态
+     * </pre>
+     *
+     * <code>.FlightControllerState flightControllerState = 1;</code>
+     * @return The flightControllerState.
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState getFlightControllerState();
+    /**
+     * <pre>
+     *飞控状态
+     * </pre>
+     *
+     * <code>.FlightControllerState flightControllerState = 1;</code>
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerStateOrBuilder getFlightControllerStateOrBuilder();
+
+    /**
+     * <pre>
+     *电池状态
+     * </pre>
+     *
+     * <code>.BatteryState batteryState = 2;</code>
+     * @return Whether the batteryState field is set.
+     */
+    boolean hasBatteryState();
+    /**
+     * <pre>
+     *电池状态
+     * </pre>
+     *
+     * <code>.BatteryState batteryState = 2;</code>
+     * @return The batteryState.
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState getBatteryState();
+    /**
+     * <pre>
+     *电池状态
+     * </pre>
+     *
+     * <code>.BatteryState batteryState = 2;</code>
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateOrBuilder getBatteryStateOrBuilder();
+
+    /**
+     * <pre>
+     *云台状态
+     * </pre>
+     *
+     * <code>.PtzState ptzState = 3;</code>
+     * @return Whether the ptzState field is set.
+     */
+    boolean hasPtzState();
+    /**
+     * <pre>
+     *云台状态
+     * </pre>
+     *
+     * <code>.PtzState ptzState = 3;</code>
+     * @return The ptzState.
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState getPtzState();
+    /**
+     * <pre>
+     *云台状态
+     * </pre>
+     *
+     * <code>.PtzState ptzState = 3;</code>
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzStateOrBuilder getPtzStateOrBuilder();
+
+    /**
+     * <pre>
+     *相机状态
+     * </pre>
+     *
+     * <code>.CameraState cameraState = 4;</code>
+     * @return Whether the cameraState field is set.
+     */
+    boolean hasCameraState();
+    /**
+     * <pre>
+     *相机状态
+     * </pre>
+     *
+     * <code>.CameraState cameraState = 4;</code>
+     * @return The cameraState.
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState getCameraState();
+    /**
+     * <pre>
+     *相机状态
+     * </pre>
+     *
+     * <code>.CameraState cameraState = 4;</code>
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraStateOrBuilder getCameraStateOrBuilder();
+
+    /**
+     * <pre>
+     *任务状态
+     * </pre>
+     *
+     * <code>.MissionState missionState = 5;</code>
+     * @return Whether the missionState field is set.
+     */
+    boolean hasMissionState();
+    /**
+     * <pre>
+     *任务状态
+     * </pre>
+     *
+     * <code>.MissionState missionState = 5;</code>
+     * @return The missionState.
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState getMissionState();
+    /**
+     * <pre>
+     *任务状态
+     * </pre>
+     *
+     * <code>.MissionState missionState = 5;</code>
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionStateOrBuilder getMissionStateOrBuilder();
+
+    /**
+     * <pre>
+     *云盒编号
+     * </pre>
+     *
+     * <code>string boxSn = 6;</code>
+     * @return The boxSn.
+     */
+    java.lang.String getBoxSn();
+    /**
+     * <pre>
+     *云盒编号
+     * </pre>
+     *
+     * <code>string boxSn = 6;</code>
+     * @return The bytes for boxSn.
+     */
+    com.google.protobuf.ByteString
+        getBoxSnBytes();
+
+    /**
+     * <pre>
+     *避障数据
+     * </pre>
+     *
+     * <code>.AvoidanceData avoidanceData = 7;</code>
+     * @return Whether the avoidanceData field is set.
+     */
+    boolean hasAvoidanceData();
+    /**
+     * <pre>
+     *避障数据
+     * </pre>
+     *
+     * <code>.AvoidanceData avoidanceData = 7;</code>
+     * @return The avoidanceData.
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData getAvoidanceData();
+    /**
+     * <pre>
+     *避障数据
+     * </pre>
+     *
+     * <code>.AvoidanceData avoidanceData = 7;</code>
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceDataOrBuilder getAvoidanceDataOrBuilder();
+
+    /**
+     * <pre>
+     *Hms报警信息[飞机告警信息]
+     * </pre>
+     *
+     * <code>repeated .HmsAlarmData hmsAlarmData = 8;</code>
+     */
+    java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData> 
+        getHmsAlarmDataList();
+    /**
+     * <pre>
+     *Hms报警信息[飞机告警信息]
+     * </pre>
+     *
+     * <code>repeated .HmsAlarmData hmsAlarmData = 8;</code>
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData getHmsAlarmData(int index);
+    /**
+     * <pre>
+     *Hms报警信息[飞机告警信息]
+     * </pre>
+     *
+     * <code>repeated .HmsAlarmData hmsAlarmData = 8;</code>
+     */
+    int getHmsAlarmDataCount();
+    /**
+     * <pre>
+     *Hms报警信息[飞机告警信息]
+     * </pre>
+     *
+     * <code>repeated .HmsAlarmData hmsAlarmData = 8;</code>
+     */
+    java.util.List<? extends com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmDataOrBuilder> 
+        getHmsAlarmDataOrBuilderList();
+    /**
+     * <pre>
+     *Hms报警信息[飞机告警信息]
+     * </pre>
+     *
+     * <code>repeated .HmsAlarmData hmsAlarmData = 8;</code>
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmDataOrBuilder getHmsAlarmDataOrBuilder(
+        int index);
+  }
+  /**
+   * <pre>
+   *无人机状态对象
+   * </pre>
+   *
+   * Protobuf type {@code UavState}
+   */
+  public static final class UavState extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:UavState)
+      UavStateOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use UavState.newBuilder() to construct.
+    private UavState(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private UavState() {
+      boxSn_ = "";
+      hmsAlarmData_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new UavState();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private UavState(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState.Builder subBuilder = null;
+              if (flightControllerState_ != null) {
+                subBuilder = flightControllerState_.toBuilder();
+              }
+              flightControllerState_ = input.readMessage(com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(flightControllerState_);
+                flightControllerState_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState.Builder subBuilder = null;
+              if (batteryState_ != null) {
+                subBuilder = batteryState_.toBuilder();
+              }
+              batteryState_ = input.readMessage(com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(batteryState_);
+                batteryState_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 26: {
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState.Builder subBuilder = null;
+              if (ptzState_ != null) {
+                subBuilder = ptzState_.toBuilder();
+              }
+              ptzState_ = input.readMessage(com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(ptzState_);
+                ptzState_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 34: {
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState.Builder subBuilder = null;
+              if (cameraState_ != null) {
+                subBuilder = cameraState_.toBuilder();
+              }
+              cameraState_ = input.readMessage(com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(cameraState_);
+                cameraState_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 42: {
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState.Builder subBuilder = null;
+              if (missionState_ != null) {
+                subBuilder = missionState_.toBuilder();
+              }
+              missionState_ = input.readMessage(com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(missionState_);
+                missionState_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 50: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              boxSn_ = s;
+              break;
+            }
+            case 58: {
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData.Builder subBuilder = null;
+              if (avoidanceData_ != null) {
+                subBuilder = avoidanceData_.toBuilder();
+              }
+              avoidanceData_ = input.readMessage(com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(avoidanceData_);
+                avoidanceData_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 66: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                hmsAlarmData_ = new java.util.ArrayList<com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              hmsAlarmData_.add(
+                  input.readMessage(com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          hmsAlarmData_ = java.util.Collections.unmodifiableList(hmsAlarmData_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_UavState_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_UavState_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.UavState.class, com.ard.tianyu.netty.protobuf.TelemetryDataPB.UavState.Builder.class);
+    }
+
+    public static final int FLIGHTCONTROLLERSTATE_FIELD_NUMBER = 1;
+    private com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState flightControllerState_;
+    /**
+     * <pre>
+     *飞控状态
+     * </pre>
+     *
+     * <code>.FlightControllerState flightControllerState = 1;</code>
+     * @return Whether the flightControllerState field is set.
+     */
+    @java.lang.Override
+    public boolean hasFlightControllerState() {
+      return flightControllerState_ != null;
+    }
+    /**
+     * <pre>
+     *飞控状态
+     * </pre>
+     *
+     * <code>.FlightControllerState flightControllerState = 1;</code>
+     * @return The flightControllerState.
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState getFlightControllerState() {
+      return flightControllerState_ == null ? com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState.getDefaultInstance() : flightControllerState_;
+    }
+    /**
+     * <pre>
+     *飞控状态
+     * </pre>
+     *
+     * <code>.FlightControllerState flightControllerState = 1;</code>
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerStateOrBuilder getFlightControllerStateOrBuilder() {
+      return getFlightControllerState();
+    }
+
+    public static final int BATTERYSTATE_FIELD_NUMBER = 2;
+    private com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState batteryState_;
+    /**
+     * <pre>
+     *电池状态
+     * </pre>
+     *
+     * <code>.BatteryState batteryState = 2;</code>
+     * @return Whether the batteryState field is set.
+     */
+    @java.lang.Override
+    public boolean hasBatteryState() {
+      return batteryState_ != null;
+    }
+    /**
+     * <pre>
+     *电池状态
+     * </pre>
+     *
+     * <code>.BatteryState batteryState = 2;</code>
+     * @return The batteryState.
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState getBatteryState() {
+      return batteryState_ == null ? com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState.getDefaultInstance() : batteryState_;
+    }
+    /**
+     * <pre>
+     *电池状态
+     * </pre>
+     *
+     * <code>.BatteryState batteryState = 2;</code>
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateOrBuilder getBatteryStateOrBuilder() {
+      return getBatteryState();
+    }
+
+    public static final int PTZSTATE_FIELD_NUMBER = 3;
+    private com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState ptzState_;
+    /**
+     * <pre>
+     *云台状态
+     * </pre>
+     *
+     * <code>.PtzState ptzState = 3;</code>
+     * @return Whether the ptzState field is set.
+     */
+    @java.lang.Override
+    public boolean hasPtzState() {
+      return ptzState_ != null;
+    }
+    /**
+     * <pre>
+     *云台状态
+     * </pre>
+     *
+     * <code>.PtzState ptzState = 3;</code>
+     * @return The ptzState.
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState getPtzState() {
+      return ptzState_ == null ? com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState.getDefaultInstance() : ptzState_;
+    }
+    /**
+     * <pre>
+     *云台状态
+     * </pre>
+     *
+     * <code>.PtzState ptzState = 3;</code>
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzStateOrBuilder getPtzStateOrBuilder() {
+      return getPtzState();
+    }
+
+    public static final int CAMERASTATE_FIELD_NUMBER = 4;
+    private com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState cameraState_;
+    /**
+     * <pre>
+     *相机状态
+     * </pre>
+     *
+     * <code>.CameraState cameraState = 4;</code>
+     * @return Whether the cameraState field is set.
+     */
+    @java.lang.Override
+    public boolean hasCameraState() {
+      return cameraState_ != null;
+    }
+    /**
+     * <pre>
+     *相机状态
+     * </pre>
+     *
+     * <code>.CameraState cameraState = 4;</code>
+     * @return The cameraState.
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState getCameraState() {
+      return cameraState_ == null ? com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState.getDefaultInstance() : cameraState_;
+    }
+    /**
+     * <pre>
+     *相机状态
+     * </pre>
+     *
+     * <code>.CameraState cameraState = 4;</code>
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraStateOrBuilder getCameraStateOrBuilder() {
+      return getCameraState();
+    }
+
+    public static final int MISSIONSTATE_FIELD_NUMBER = 5;
+    private com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState missionState_;
+    /**
+     * <pre>
+     *任务状态
+     * </pre>
+     *
+     * <code>.MissionState missionState = 5;</code>
+     * @return Whether the missionState field is set.
+     */
+    @java.lang.Override
+    public boolean hasMissionState() {
+      return missionState_ != null;
+    }
+    /**
+     * <pre>
+     *任务状态
+     * </pre>
+     *
+     * <code>.MissionState missionState = 5;</code>
+     * @return The missionState.
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState getMissionState() {
+      return missionState_ == null ? com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState.getDefaultInstance() : missionState_;
+    }
+    /**
+     * <pre>
+     *任务状态
+     * </pre>
+     *
+     * <code>.MissionState missionState = 5;</code>
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionStateOrBuilder getMissionStateOrBuilder() {
+      return getMissionState();
+    }
+
+    public static final int BOXSN_FIELD_NUMBER = 6;
+    private volatile java.lang.Object boxSn_;
+    /**
+     * <pre>
+     *云盒编号
+     * </pre>
+     *
+     * <code>string boxSn = 6;</code>
+     * @return The boxSn.
+     */
+    @java.lang.Override
+    public java.lang.String getBoxSn() {
+      java.lang.Object ref = boxSn_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        boxSn_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     *云盒编号
+     * </pre>
+     *
+     * <code>string boxSn = 6;</code>
+     * @return The bytes for boxSn.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getBoxSnBytes() {
+      java.lang.Object ref = boxSn_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        boxSn_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int AVOIDANCEDATA_FIELD_NUMBER = 7;
+    private com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData avoidanceData_;
+    /**
+     * <pre>
+     *避障数据
+     * </pre>
+     *
+     * <code>.AvoidanceData avoidanceData = 7;</code>
+     * @return Whether the avoidanceData field is set.
+     */
+    @java.lang.Override
+    public boolean hasAvoidanceData() {
+      return avoidanceData_ != null;
+    }
+    /**
+     * <pre>
+     *避障数据
+     * </pre>
+     *
+     * <code>.AvoidanceData avoidanceData = 7;</code>
+     * @return The avoidanceData.
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData getAvoidanceData() {
+      return avoidanceData_ == null ? com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData.getDefaultInstance() : avoidanceData_;
+    }
+    /**
+     * <pre>
+     *避障数据
+     * </pre>
+     *
+     * <code>.AvoidanceData avoidanceData = 7;</code>
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceDataOrBuilder getAvoidanceDataOrBuilder() {
+      return getAvoidanceData();
+    }
+
+    public static final int HMSALARMDATA_FIELD_NUMBER = 8;
+    private java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData> hmsAlarmData_;
+    /**
+     * <pre>
+     *Hms报警信息[飞机告警信息]
+     * </pre>
+     *
+     * <code>repeated .HmsAlarmData hmsAlarmData = 8;</code>
+     */
+    @java.lang.Override
+    public java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData> getHmsAlarmDataList() {
+      return hmsAlarmData_;
+    }
+    /**
+     * <pre>
+     *Hms报警信息[飞机告警信息]
+     * </pre>
+     *
+     * <code>repeated .HmsAlarmData hmsAlarmData = 8;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmDataOrBuilder> 
+        getHmsAlarmDataOrBuilderList() {
+      return hmsAlarmData_;
+    }
+    /**
+     * <pre>
+     *Hms报警信息[飞机告警信息]
+     * </pre>
+     *
+     * <code>repeated .HmsAlarmData hmsAlarmData = 8;</code>
+     */
+    @java.lang.Override
+    public int getHmsAlarmDataCount() {
+      return hmsAlarmData_.size();
+    }
+    /**
+     * <pre>
+     *Hms报警信息[飞机告警信息]
+     * </pre>
+     *
+     * <code>repeated .HmsAlarmData hmsAlarmData = 8;</code>
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData getHmsAlarmData(int index) {
+      return hmsAlarmData_.get(index);
+    }
+    /**
+     * <pre>
+     *Hms报警信息[飞机告警信息]
+     * </pre>
+     *
+     * <code>repeated .HmsAlarmData hmsAlarmData = 8;</code>
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmDataOrBuilder getHmsAlarmDataOrBuilder(
+        int index) {
+      return hmsAlarmData_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (flightControllerState_ != null) {
+        output.writeMessage(1, getFlightControllerState());
+      }
+      if (batteryState_ != null) {
+        output.writeMessage(2, getBatteryState());
+      }
+      if (ptzState_ != null) {
+        output.writeMessage(3, getPtzState());
+      }
+      if (cameraState_ != null) {
+        output.writeMessage(4, getCameraState());
+      }
+      if (missionState_ != null) {
+        output.writeMessage(5, getMissionState());
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(boxSn_)) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 6, boxSn_);
+      }
+      if (avoidanceData_ != null) {
+        output.writeMessage(7, getAvoidanceData());
+      }
+      for (int i = 0; i < hmsAlarmData_.size(); i++) {
+        output.writeMessage(8, hmsAlarmData_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (flightControllerState_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getFlightControllerState());
+      }
+      if (batteryState_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getBatteryState());
+      }
+      if (ptzState_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, getPtzState());
+      }
+      if (cameraState_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, getCameraState());
+      }
+      if (missionState_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, getMissionState());
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(boxSn_)) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, boxSn_);
+      }
+      if (avoidanceData_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(7, getAvoidanceData());
+      }
+      for (int i = 0; i < hmsAlarmData_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(8, hmsAlarmData_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof com.ard.tianyu.netty.protobuf.TelemetryDataPB.UavState)) {
+        return super.equals(obj);
+      }
+      com.ard.tianyu.netty.protobuf.TelemetryDataPB.UavState other = (com.ard.tianyu.netty.protobuf.TelemetryDataPB.UavState) obj;
+
+      if (hasFlightControllerState() != other.hasFlightControllerState()) return false;
+      if (hasFlightControllerState()) {
+        if (!getFlightControllerState()
+            .equals(other.getFlightControllerState())) return false;
+      }
+      if (hasBatteryState() != other.hasBatteryState()) return false;
+      if (hasBatteryState()) {
+        if (!getBatteryState()
+            .equals(other.getBatteryState())) return false;
+      }
+      if (hasPtzState() != other.hasPtzState()) return false;
+      if (hasPtzState()) {
+        if (!getPtzState()
+            .equals(other.getPtzState())) return false;
+      }
+      if (hasCameraState() != other.hasCameraState()) return false;
+      if (hasCameraState()) {
+        if (!getCameraState()
+            .equals(other.getCameraState())) return false;
+      }
+      if (hasMissionState() != other.hasMissionState()) return false;
+      if (hasMissionState()) {
+        if (!getMissionState()
+            .equals(other.getMissionState())) return false;
+      }
+      if (!getBoxSn()
+          .equals(other.getBoxSn())) return false;
+      if (hasAvoidanceData() != other.hasAvoidanceData()) return false;
+      if (hasAvoidanceData()) {
+        if (!getAvoidanceData()
+            .equals(other.getAvoidanceData())) return false;
+      }
+      if (!getHmsAlarmDataList()
+          .equals(other.getHmsAlarmDataList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasFlightControllerState()) {
+        hash = (37 * hash) + FLIGHTCONTROLLERSTATE_FIELD_NUMBER;
+        hash = (53 * hash) + getFlightControllerState().hashCode();
+      }
+      if (hasBatteryState()) {
+        hash = (37 * hash) + BATTERYSTATE_FIELD_NUMBER;
+        hash = (53 * hash) + getBatteryState().hashCode();
+      }
+      if (hasPtzState()) {
+        hash = (37 * hash) + PTZSTATE_FIELD_NUMBER;
+        hash = (53 * hash) + getPtzState().hashCode();
+      }
+      if (hasCameraState()) {
+        hash = (37 * hash) + CAMERASTATE_FIELD_NUMBER;
+        hash = (53 * hash) + getCameraState().hashCode();
+      }
+      if (hasMissionState()) {
+        hash = (37 * hash) + MISSIONSTATE_FIELD_NUMBER;
+        hash = (53 * hash) + getMissionState().hashCode();
+      }
+      hash = (37 * hash) + BOXSN_FIELD_NUMBER;
+      hash = (53 * hash) + getBoxSn().hashCode();
+      if (hasAvoidanceData()) {
+        hash = (37 * hash) + AVOIDANCEDATA_FIELD_NUMBER;
+        hash = (53 * hash) + getAvoidanceData().hashCode();
+      }
+      if (getHmsAlarmDataCount() > 0) {
+        hash = (37 * hash) + HMSALARMDATA_FIELD_NUMBER;
+        hash = (53 * hash) + getHmsAlarmDataList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.UavState parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.UavState parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.UavState parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.UavState parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.UavState parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.UavState parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.UavState parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.UavState parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.UavState parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.UavState parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.UavState parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.UavState parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(com.ard.tianyu.netty.protobuf.TelemetryDataPB.UavState prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     *无人机状态对象
+     * </pre>
+     *
+     * Protobuf type {@code UavState}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:UavState)
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.UavStateOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_UavState_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_UavState_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.ard.tianyu.netty.protobuf.TelemetryDataPB.UavState.class, com.ard.tianyu.netty.protobuf.TelemetryDataPB.UavState.Builder.class);
+      }
+
+      // Construct using com.ard.tianyu.netty.protobuf.TelemetryDataPB.UavState.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getHmsAlarmDataFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (flightControllerStateBuilder_ == null) {
+          flightControllerState_ = null;
+        } else {
+          flightControllerState_ = null;
+          flightControllerStateBuilder_ = null;
+        }
+        if (batteryStateBuilder_ == null) {
+          batteryState_ = null;
+        } else {
+          batteryState_ = null;
+          batteryStateBuilder_ = null;
+        }
+        if (ptzStateBuilder_ == null) {
+          ptzState_ = null;
+        } else {
+          ptzState_ = null;
+          ptzStateBuilder_ = null;
+        }
+        if (cameraStateBuilder_ == null) {
+          cameraState_ = null;
+        } else {
+          cameraState_ = null;
+          cameraStateBuilder_ = null;
+        }
+        if (missionStateBuilder_ == null) {
+          missionState_ = null;
+        } else {
+          missionState_ = null;
+          missionStateBuilder_ = null;
+        }
+        boxSn_ = "";
+
+        if (avoidanceDataBuilder_ == null) {
+          avoidanceData_ = null;
+        } else {
+          avoidanceData_ = null;
+          avoidanceDataBuilder_ = null;
+        }
+        if (hmsAlarmDataBuilder_ == null) {
+          hmsAlarmData_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          hmsAlarmDataBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_UavState_descriptor;
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.UavState getDefaultInstanceForType() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.UavState.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.UavState build() {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.UavState result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.UavState buildPartial() {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.UavState result = new com.ard.tianyu.netty.protobuf.TelemetryDataPB.UavState(this);
+        int from_bitField0_ = bitField0_;
+        if (flightControllerStateBuilder_ == null) {
+          result.flightControllerState_ = flightControllerState_;
+        } else {
+          result.flightControllerState_ = flightControllerStateBuilder_.build();
+        }
+        if (batteryStateBuilder_ == null) {
+          result.batteryState_ = batteryState_;
+        } else {
+          result.batteryState_ = batteryStateBuilder_.build();
+        }
+        if (ptzStateBuilder_ == null) {
+          result.ptzState_ = ptzState_;
+        } else {
+          result.ptzState_ = ptzStateBuilder_.build();
+        }
+        if (cameraStateBuilder_ == null) {
+          result.cameraState_ = cameraState_;
+        } else {
+          result.cameraState_ = cameraStateBuilder_.build();
+        }
+        if (missionStateBuilder_ == null) {
+          result.missionState_ = missionState_;
+        } else {
+          result.missionState_ = missionStateBuilder_.build();
+        }
+        result.boxSn_ = boxSn_;
+        if (avoidanceDataBuilder_ == null) {
+          result.avoidanceData_ = avoidanceData_;
+        } else {
+          result.avoidanceData_ = avoidanceDataBuilder_.build();
+        }
+        if (hmsAlarmDataBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            hmsAlarmData_ = java.util.Collections.unmodifiableList(hmsAlarmData_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.hmsAlarmData_ = hmsAlarmData_;
+        } else {
+          result.hmsAlarmData_ = hmsAlarmDataBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.ard.tianyu.netty.protobuf.TelemetryDataPB.UavState) {
+          return mergeFrom((com.ard.tianyu.netty.protobuf.TelemetryDataPB.UavState)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(com.ard.tianyu.netty.protobuf.TelemetryDataPB.UavState other) {
+        if (other == com.ard.tianyu.netty.protobuf.TelemetryDataPB.UavState.getDefaultInstance()) return this;
+        if (other.hasFlightControllerState()) {
+          mergeFlightControllerState(other.getFlightControllerState());
+        }
+        if (other.hasBatteryState()) {
+          mergeBatteryState(other.getBatteryState());
+        }
+        if (other.hasPtzState()) {
+          mergePtzState(other.getPtzState());
+        }
+        if (other.hasCameraState()) {
+          mergeCameraState(other.getCameraState());
+        }
+        if (other.hasMissionState()) {
+          mergeMissionState(other.getMissionState());
+        }
+        if (!other.getBoxSn().isEmpty()) {
+          boxSn_ = other.boxSn_;
+          onChanged();
+        }
+        if (other.hasAvoidanceData()) {
+          mergeAvoidanceData(other.getAvoidanceData());
+        }
+        if (hmsAlarmDataBuilder_ == null) {
+          if (!other.hmsAlarmData_.isEmpty()) {
+            if (hmsAlarmData_.isEmpty()) {
+              hmsAlarmData_ = other.hmsAlarmData_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureHmsAlarmDataIsMutable();
+              hmsAlarmData_.addAll(other.hmsAlarmData_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.hmsAlarmData_.isEmpty()) {
+            if (hmsAlarmDataBuilder_.isEmpty()) {
+              hmsAlarmDataBuilder_.dispose();
+              hmsAlarmDataBuilder_ = null;
+              hmsAlarmData_ = other.hmsAlarmData_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              hmsAlarmDataBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getHmsAlarmDataFieldBuilder() : null;
+            } else {
+              hmsAlarmDataBuilder_.addAllMessages(other.hmsAlarmData_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.UavState parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (com.ard.tianyu.netty.protobuf.TelemetryDataPB.UavState) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState flightControllerState_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState, com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerStateOrBuilder> flightControllerStateBuilder_;
+      /**
+       * <pre>
+       *飞控状态
+       * </pre>
+       *
+       * <code>.FlightControllerState flightControllerState = 1;</code>
+       * @return Whether the flightControllerState field is set.
+       */
+      public boolean hasFlightControllerState() {
+        return flightControllerStateBuilder_ != null || flightControllerState_ != null;
+      }
+      /**
+       * <pre>
+       *飞控状态
+       * </pre>
+       *
+       * <code>.FlightControllerState flightControllerState = 1;</code>
+       * @return The flightControllerState.
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState getFlightControllerState() {
+        if (flightControllerStateBuilder_ == null) {
+          return flightControllerState_ == null ? com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState.getDefaultInstance() : flightControllerState_;
+        } else {
+          return flightControllerStateBuilder_.getMessage();
+        }
+      }
+      /**
+       * <pre>
+       *飞控状态
+       * </pre>
+       *
+       * <code>.FlightControllerState flightControllerState = 1;</code>
+       */
+      public Builder setFlightControllerState(com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState value) {
+        if (flightControllerStateBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          flightControllerState_ = value;
+          onChanged();
+        } else {
+          flightControllerStateBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *飞控状态
+       * </pre>
+       *
+       * <code>.FlightControllerState flightControllerState = 1;</code>
+       */
+      public Builder setFlightControllerState(
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState.Builder builderForValue) {
+        if (flightControllerStateBuilder_ == null) {
+          flightControllerState_ = builderForValue.build();
+          onChanged();
+        } else {
+          flightControllerStateBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *飞控状态
+       * </pre>
+       *
+       * <code>.FlightControllerState flightControllerState = 1;</code>
+       */
+      public Builder mergeFlightControllerState(com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState value) {
+        if (flightControllerStateBuilder_ == null) {
+          if (flightControllerState_ != null) {
+            flightControllerState_ =
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState.newBuilder(flightControllerState_).mergeFrom(value).buildPartial();
+          } else {
+            flightControllerState_ = value;
+          }
+          onChanged();
+        } else {
+          flightControllerStateBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *飞控状态
+       * </pre>
+       *
+       * <code>.FlightControllerState flightControllerState = 1;</code>
+       */
+      public Builder clearFlightControllerState() {
+        if (flightControllerStateBuilder_ == null) {
+          flightControllerState_ = null;
+          onChanged();
+        } else {
+          flightControllerState_ = null;
+          flightControllerStateBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *飞控状态
+       * </pre>
+       *
+       * <code>.FlightControllerState flightControllerState = 1;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState.Builder getFlightControllerStateBuilder() {
+        
+        onChanged();
+        return getFlightControllerStateFieldBuilder().getBuilder();
+      }
+      /**
+       * <pre>
+       *飞控状态
+       * </pre>
+       *
+       * <code>.FlightControllerState flightControllerState = 1;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerStateOrBuilder getFlightControllerStateOrBuilder() {
+        if (flightControllerStateBuilder_ != null) {
+          return flightControllerStateBuilder_.getMessageOrBuilder();
+        } else {
+          return flightControllerState_ == null ?
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState.getDefaultInstance() : flightControllerState_;
+        }
+      }
+      /**
+       * <pre>
+       *飞控状态
+       * </pre>
+       *
+       * <code>.FlightControllerState flightControllerState = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState, com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerStateOrBuilder> 
+          getFlightControllerStateFieldBuilder() {
+        if (flightControllerStateBuilder_ == null) {
+          flightControllerStateBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState, com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerStateOrBuilder>(
+                  getFlightControllerState(),
+                  getParentForChildren(),
+                  isClean());
+          flightControllerState_ = null;
+        }
+        return flightControllerStateBuilder_;
+      }
+
+      private com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState batteryState_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState, com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateOrBuilder> batteryStateBuilder_;
+      /**
+       * <pre>
+       *电池状态
+       * </pre>
+       *
+       * <code>.BatteryState batteryState = 2;</code>
+       * @return Whether the batteryState field is set.
+       */
+      public boolean hasBatteryState() {
+        return batteryStateBuilder_ != null || batteryState_ != null;
+      }
+      /**
+       * <pre>
+       *电池状态
+       * </pre>
+       *
+       * <code>.BatteryState batteryState = 2;</code>
+       * @return The batteryState.
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState getBatteryState() {
+        if (batteryStateBuilder_ == null) {
+          return batteryState_ == null ? com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState.getDefaultInstance() : batteryState_;
+        } else {
+          return batteryStateBuilder_.getMessage();
+        }
+      }
+      /**
+       * <pre>
+       *电池状态
+       * </pre>
+       *
+       * <code>.BatteryState batteryState = 2;</code>
+       */
+      public Builder setBatteryState(com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState value) {
+        if (batteryStateBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          batteryState_ = value;
+          onChanged();
+        } else {
+          batteryStateBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *电池状态
+       * </pre>
+       *
+       * <code>.BatteryState batteryState = 2;</code>
+       */
+      public Builder setBatteryState(
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState.Builder builderForValue) {
+        if (batteryStateBuilder_ == null) {
+          batteryState_ = builderForValue.build();
+          onChanged();
+        } else {
+          batteryStateBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *电池状态
+       * </pre>
+       *
+       * <code>.BatteryState batteryState = 2;</code>
+       */
+      public Builder mergeBatteryState(com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState value) {
+        if (batteryStateBuilder_ == null) {
+          if (batteryState_ != null) {
+            batteryState_ =
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState.newBuilder(batteryState_).mergeFrom(value).buildPartial();
+          } else {
+            batteryState_ = value;
+          }
+          onChanged();
+        } else {
+          batteryStateBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *电池状态
+       * </pre>
+       *
+       * <code>.BatteryState batteryState = 2;</code>
+       */
+      public Builder clearBatteryState() {
+        if (batteryStateBuilder_ == null) {
+          batteryState_ = null;
+          onChanged();
+        } else {
+          batteryState_ = null;
+          batteryStateBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *电池状态
+       * </pre>
+       *
+       * <code>.BatteryState batteryState = 2;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState.Builder getBatteryStateBuilder() {
+        
+        onChanged();
+        return getBatteryStateFieldBuilder().getBuilder();
+      }
+      /**
+       * <pre>
+       *电池状态
+       * </pre>
+       *
+       * <code>.BatteryState batteryState = 2;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateOrBuilder getBatteryStateOrBuilder() {
+        if (batteryStateBuilder_ != null) {
+          return batteryStateBuilder_.getMessageOrBuilder();
+        } else {
+          return batteryState_ == null ?
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState.getDefaultInstance() : batteryState_;
+        }
+      }
+      /**
+       * <pre>
+       *电池状态
+       * </pre>
+       *
+       * <code>.BatteryState batteryState = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState, com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateOrBuilder> 
+          getBatteryStateFieldBuilder() {
+        if (batteryStateBuilder_ == null) {
+          batteryStateBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState, com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateOrBuilder>(
+                  getBatteryState(),
+                  getParentForChildren(),
+                  isClean());
+          batteryState_ = null;
+        }
+        return batteryStateBuilder_;
+      }
+
+      private com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState ptzState_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzStateOrBuilder> ptzStateBuilder_;
+      /**
+       * <pre>
+       *云台状态
+       * </pre>
+       *
+       * <code>.PtzState ptzState = 3;</code>
+       * @return Whether the ptzState field is set.
+       */
+      public boolean hasPtzState() {
+        return ptzStateBuilder_ != null || ptzState_ != null;
+      }
+      /**
+       * <pre>
+       *云台状态
+       * </pre>
+       *
+       * <code>.PtzState ptzState = 3;</code>
+       * @return The ptzState.
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState getPtzState() {
+        if (ptzStateBuilder_ == null) {
+          return ptzState_ == null ? com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState.getDefaultInstance() : ptzState_;
+        } else {
+          return ptzStateBuilder_.getMessage();
+        }
+      }
+      /**
+       * <pre>
+       *云台状态
+       * </pre>
+       *
+       * <code>.PtzState ptzState = 3;</code>
+       */
+      public Builder setPtzState(com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState value) {
+        if (ptzStateBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ptzState_ = value;
+          onChanged();
+        } else {
+          ptzStateBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *云台状态
+       * </pre>
+       *
+       * <code>.PtzState ptzState = 3;</code>
+       */
+      public Builder setPtzState(
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState.Builder builderForValue) {
+        if (ptzStateBuilder_ == null) {
+          ptzState_ = builderForValue.build();
+          onChanged();
+        } else {
+          ptzStateBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *云台状态
+       * </pre>
+       *
+       * <code>.PtzState ptzState = 3;</code>
+       */
+      public Builder mergePtzState(com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState value) {
+        if (ptzStateBuilder_ == null) {
+          if (ptzState_ != null) {
+            ptzState_ =
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState.newBuilder(ptzState_).mergeFrom(value).buildPartial();
+          } else {
+            ptzState_ = value;
+          }
+          onChanged();
+        } else {
+          ptzStateBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *云台状态
+       * </pre>
+       *
+       * <code>.PtzState ptzState = 3;</code>
+       */
+      public Builder clearPtzState() {
+        if (ptzStateBuilder_ == null) {
+          ptzState_ = null;
+          onChanged();
+        } else {
+          ptzState_ = null;
+          ptzStateBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *云台状态
+       * </pre>
+       *
+       * <code>.PtzState ptzState = 3;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState.Builder getPtzStateBuilder() {
+        
+        onChanged();
+        return getPtzStateFieldBuilder().getBuilder();
+      }
+      /**
+       * <pre>
+       *云台状态
+       * </pre>
+       *
+       * <code>.PtzState ptzState = 3;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzStateOrBuilder getPtzStateOrBuilder() {
+        if (ptzStateBuilder_ != null) {
+          return ptzStateBuilder_.getMessageOrBuilder();
+        } else {
+          return ptzState_ == null ?
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState.getDefaultInstance() : ptzState_;
+        }
+      }
+      /**
+       * <pre>
+       *云台状态
+       * </pre>
+       *
+       * <code>.PtzState ptzState = 3;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzStateOrBuilder> 
+          getPtzStateFieldBuilder() {
+        if (ptzStateBuilder_ == null) {
+          ptzStateBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzStateOrBuilder>(
+                  getPtzState(),
+                  getParentForChildren(),
+                  isClean());
+          ptzState_ = null;
+        }
+        return ptzStateBuilder_;
+      }
+
+      private com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState cameraState_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState, com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraStateOrBuilder> cameraStateBuilder_;
+      /**
+       * <pre>
+       *相机状态
+       * </pre>
+       *
+       * <code>.CameraState cameraState = 4;</code>
+       * @return Whether the cameraState field is set.
+       */
+      public boolean hasCameraState() {
+        return cameraStateBuilder_ != null || cameraState_ != null;
+      }
+      /**
+       * <pre>
+       *相机状态
+       * </pre>
+       *
+       * <code>.CameraState cameraState = 4;</code>
+       * @return The cameraState.
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState getCameraState() {
+        if (cameraStateBuilder_ == null) {
+          return cameraState_ == null ? com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState.getDefaultInstance() : cameraState_;
+        } else {
+          return cameraStateBuilder_.getMessage();
+        }
+      }
+      /**
+       * <pre>
+       *相机状态
+       * </pre>
+       *
+       * <code>.CameraState cameraState = 4;</code>
+       */
+      public Builder setCameraState(com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState value) {
+        if (cameraStateBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          cameraState_ = value;
+          onChanged();
+        } else {
+          cameraStateBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *相机状态
+       * </pre>
+       *
+       * <code>.CameraState cameraState = 4;</code>
+       */
+      public Builder setCameraState(
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState.Builder builderForValue) {
+        if (cameraStateBuilder_ == null) {
+          cameraState_ = builderForValue.build();
+          onChanged();
+        } else {
+          cameraStateBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *相机状态
+       * </pre>
+       *
+       * <code>.CameraState cameraState = 4;</code>
+       */
+      public Builder mergeCameraState(com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState value) {
+        if (cameraStateBuilder_ == null) {
+          if (cameraState_ != null) {
+            cameraState_ =
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState.newBuilder(cameraState_).mergeFrom(value).buildPartial();
+          } else {
+            cameraState_ = value;
+          }
+          onChanged();
+        } else {
+          cameraStateBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *相机状态
+       * </pre>
+       *
+       * <code>.CameraState cameraState = 4;</code>
+       */
+      public Builder clearCameraState() {
+        if (cameraStateBuilder_ == null) {
+          cameraState_ = null;
+          onChanged();
+        } else {
+          cameraState_ = null;
+          cameraStateBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *相机状态
+       * </pre>
+       *
+       * <code>.CameraState cameraState = 4;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState.Builder getCameraStateBuilder() {
+        
+        onChanged();
+        return getCameraStateFieldBuilder().getBuilder();
+      }
+      /**
+       * <pre>
+       *相机状态
+       * </pre>
+       *
+       * <code>.CameraState cameraState = 4;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraStateOrBuilder getCameraStateOrBuilder() {
+        if (cameraStateBuilder_ != null) {
+          return cameraStateBuilder_.getMessageOrBuilder();
+        } else {
+          return cameraState_ == null ?
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState.getDefaultInstance() : cameraState_;
+        }
+      }
+      /**
+       * <pre>
+       *相机状态
+       * </pre>
+       *
+       * <code>.CameraState cameraState = 4;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState, com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraStateOrBuilder> 
+          getCameraStateFieldBuilder() {
+        if (cameraStateBuilder_ == null) {
+          cameraStateBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState, com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraStateOrBuilder>(
+                  getCameraState(),
+                  getParentForChildren(),
+                  isClean());
+          cameraState_ = null;
+        }
+        return cameraStateBuilder_;
+      }
+
+      private com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState missionState_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState, com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionStateOrBuilder> missionStateBuilder_;
+      /**
+       * <pre>
+       *任务状态
+       * </pre>
+       *
+       * <code>.MissionState missionState = 5;</code>
+       * @return Whether the missionState field is set.
+       */
+      public boolean hasMissionState() {
+        return missionStateBuilder_ != null || missionState_ != null;
+      }
+      /**
+       * <pre>
+       *任务状态
+       * </pre>
+       *
+       * <code>.MissionState missionState = 5;</code>
+       * @return The missionState.
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState getMissionState() {
+        if (missionStateBuilder_ == null) {
+          return missionState_ == null ? com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState.getDefaultInstance() : missionState_;
+        } else {
+          return missionStateBuilder_.getMessage();
+        }
+      }
+      /**
+       * <pre>
+       *任务状态
+       * </pre>
+       *
+       * <code>.MissionState missionState = 5;</code>
+       */
+      public Builder setMissionState(com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState value) {
+        if (missionStateBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          missionState_ = value;
+          onChanged();
+        } else {
+          missionStateBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *任务状态
+       * </pre>
+       *
+       * <code>.MissionState missionState = 5;</code>
+       */
+      public Builder setMissionState(
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState.Builder builderForValue) {
+        if (missionStateBuilder_ == null) {
+          missionState_ = builderForValue.build();
+          onChanged();
+        } else {
+          missionStateBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *任务状态
+       * </pre>
+       *
+       * <code>.MissionState missionState = 5;</code>
+       */
+      public Builder mergeMissionState(com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState value) {
+        if (missionStateBuilder_ == null) {
+          if (missionState_ != null) {
+            missionState_ =
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState.newBuilder(missionState_).mergeFrom(value).buildPartial();
+          } else {
+            missionState_ = value;
+          }
+          onChanged();
+        } else {
+          missionStateBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *任务状态
+       * </pre>
+       *
+       * <code>.MissionState missionState = 5;</code>
+       */
+      public Builder clearMissionState() {
+        if (missionStateBuilder_ == null) {
+          missionState_ = null;
+          onChanged();
+        } else {
+          missionState_ = null;
+          missionStateBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *任务状态
+       * </pre>
+       *
+       * <code>.MissionState missionState = 5;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState.Builder getMissionStateBuilder() {
+        
+        onChanged();
+        return getMissionStateFieldBuilder().getBuilder();
+      }
+      /**
+       * <pre>
+       *任务状态
+       * </pre>
+       *
+       * <code>.MissionState missionState = 5;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionStateOrBuilder getMissionStateOrBuilder() {
+        if (missionStateBuilder_ != null) {
+          return missionStateBuilder_.getMessageOrBuilder();
+        } else {
+          return missionState_ == null ?
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState.getDefaultInstance() : missionState_;
+        }
+      }
+      /**
+       * <pre>
+       *任务状态
+       * </pre>
+       *
+       * <code>.MissionState missionState = 5;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState, com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionStateOrBuilder> 
+          getMissionStateFieldBuilder() {
+        if (missionStateBuilder_ == null) {
+          missionStateBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState, com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionStateOrBuilder>(
+                  getMissionState(),
+                  getParentForChildren(),
+                  isClean());
+          missionState_ = null;
+        }
+        return missionStateBuilder_;
+      }
+
+      private java.lang.Object boxSn_ = "";
+      /**
+       * <pre>
+       *云盒编号
+       * </pre>
+       *
+       * <code>string boxSn = 6;</code>
+       * @return The boxSn.
+       */
+      public java.lang.String getBoxSn() {
+        java.lang.Object ref = boxSn_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          boxSn_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       *云盒编号
+       * </pre>
+       *
+       * <code>string boxSn = 6;</code>
+       * @return The bytes for boxSn.
+       */
+      public com.google.protobuf.ByteString
+          getBoxSnBytes() {
+        java.lang.Object ref = boxSn_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          boxSn_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       *云盒编号
+       * </pre>
+       *
+       * <code>string boxSn = 6;</code>
+       * @param value The boxSn to set.
+       * @return This builder for chaining.
+       */
+      public Builder setBoxSn(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        boxSn_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *云盒编号
+       * </pre>
+       *
+       * <code>string boxSn = 6;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearBoxSn() {
+        
+        boxSn_ = getDefaultInstance().getBoxSn();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *云盒编号
+       * </pre>
+       *
+       * <code>string boxSn = 6;</code>
+       * @param value The bytes for boxSn to set.
+       * @return This builder for chaining.
+       */
+      public Builder setBoxSnBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        boxSn_ = value;
+        onChanged();
+        return this;
+      }
+
+      private com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData avoidanceData_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData, com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceDataOrBuilder> avoidanceDataBuilder_;
+      /**
+       * <pre>
+       *避障数据
+       * </pre>
+       *
+       * <code>.AvoidanceData avoidanceData = 7;</code>
+       * @return Whether the avoidanceData field is set.
+       */
+      public boolean hasAvoidanceData() {
+        return avoidanceDataBuilder_ != null || avoidanceData_ != null;
+      }
+      /**
+       * <pre>
+       *避障数据
+       * </pre>
+       *
+       * <code>.AvoidanceData avoidanceData = 7;</code>
+       * @return The avoidanceData.
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData getAvoidanceData() {
+        if (avoidanceDataBuilder_ == null) {
+          return avoidanceData_ == null ? com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData.getDefaultInstance() : avoidanceData_;
+        } else {
+          return avoidanceDataBuilder_.getMessage();
+        }
+      }
+      /**
+       * <pre>
+       *避障数据
+       * </pre>
+       *
+       * <code>.AvoidanceData avoidanceData = 7;</code>
+       */
+      public Builder setAvoidanceData(com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData value) {
+        if (avoidanceDataBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          avoidanceData_ = value;
+          onChanged();
+        } else {
+          avoidanceDataBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *避障数据
+       * </pre>
+       *
+       * <code>.AvoidanceData avoidanceData = 7;</code>
+       */
+      public Builder setAvoidanceData(
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData.Builder builderForValue) {
+        if (avoidanceDataBuilder_ == null) {
+          avoidanceData_ = builderForValue.build();
+          onChanged();
+        } else {
+          avoidanceDataBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *避障数据
+       * </pre>
+       *
+       * <code>.AvoidanceData avoidanceData = 7;</code>
+       */
+      public Builder mergeAvoidanceData(com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData value) {
+        if (avoidanceDataBuilder_ == null) {
+          if (avoidanceData_ != null) {
+            avoidanceData_ =
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData.newBuilder(avoidanceData_).mergeFrom(value).buildPartial();
+          } else {
+            avoidanceData_ = value;
+          }
+          onChanged();
+        } else {
+          avoidanceDataBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *避障数据
+       * </pre>
+       *
+       * <code>.AvoidanceData avoidanceData = 7;</code>
+       */
+      public Builder clearAvoidanceData() {
+        if (avoidanceDataBuilder_ == null) {
+          avoidanceData_ = null;
+          onChanged();
+        } else {
+          avoidanceData_ = null;
+          avoidanceDataBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *避障数据
+       * </pre>
+       *
+       * <code>.AvoidanceData avoidanceData = 7;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData.Builder getAvoidanceDataBuilder() {
+        
+        onChanged();
+        return getAvoidanceDataFieldBuilder().getBuilder();
+      }
+      /**
+       * <pre>
+       *避障数据
+       * </pre>
+       *
+       * <code>.AvoidanceData avoidanceData = 7;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceDataOrBuilder getAvoidanceDataOrBuilder() {
+        if (avoidanceDataBuilder_ != null) {
+          return avoidanceDataBuilder_.getMessageOrBuilder();
+        } else {
+          return avoidanceData_ == null ?
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData.getDefaultInstance() : avoidanceData_;
+        }
+      }
+      /**
+       * <pre>
+       *避障数据
+       * </pre>
+       *
+       * <code>.AvoidanceData avoidanceData = 7;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData, com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceDataOrBuilder> 
+          getAvoidanceDataFieldBuilder() {
+        if (avoidanceDataBuilder_ == null) {
+          avoidanceDataBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData, com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceDataOrBuilder>(
+                  getAvoidanceData(),
+                  getParentForChildren(),
+                  isClean());
+          avoidanceData_ = null;
+        }
+        return avoidanceDataBuilder_;
+      }
+
+      private java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData> hmsAlarmData_ =
+        java.util.Collections.emptyList();
+      private void ensureHmsAlarmDataIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          hmsAlarmData_ = new java.util.ArrayList<com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData>(hmsAlarmData_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData, com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmDataOrBuilder> hmsAlarmDataBuilder_;
+
+      /**
+       * <pre>
+       *Hms报警信息[飞机告警信息]
+       * </pre>
+       *
+       * <code>repeated .HmsAlarmData hmsAlarmData = 8;</code>
+       */
+      public java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData> getHmsAlarmDataList() {
+        if (hmsAlarmDataBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(hmsAlarmData_);
+        } else {
+          return hmsAlarmDataBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <pre>
+       *Hms报警信息[飞机告警信息]
+       * </pre>
+       *
+       * <code>repeated .HmsAlarmData hmsAlarmData = 8;</code>
+       */
+      public int getHmsAlarmDataCount() {
+        if (hmsAlarmDataBuilder_ == null) {
+          return hmsAlarmData_.size();
+        } else {
+          return hmsAlarmDataBuilder_.getCount();
+        }
+      }
+      /**
+       * <pre>
+       *Hms报警信息[飞机告警信息]
+       * </pre>
+       *
+       * <code>repeated .HmsAlarmData hmsAlarmData = 8;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData getHmsAlarmData(int index) {
+        if (hmsAlarmDataBuilder_ == null) {
+          return hmsAlarmData_.get(index);
+        } else {
+          return hmsAlarmDataBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <pre>
+       *Hms报警信息[飞机告警信息]
+       * </pre>
+       *
+       * <code>repeated .HmsAlarmData hmsAlarmData = 8;</code>
+       */
+      public Builder setHmsAlarmData(
+          int index, com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData value) {
+        if (hmsAlarmDataBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureHmsAlarmDataIsMutable();
+          hmsAlarmData_.set(index, value);
+          onChanged();
+        } else {
+          hmsAlarmDataBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *Hms报警信息[飞机告警信息]
+       * </pre>
+       *
+       * <code>repeated .HmsAlarmData hmsAlarmData = 8;</code>
+       */
+      public Builder setHmsAlarmData(
+          int index, com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData.Builder builderForValue) {
+        if (hmsAlarmDataBuilder_ == null) {
+          ensureHmsAlarmDataIsMutable();
+          hmsAlarmData_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          hmsAlarmDataBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *Hms报警信息[飞机告警信息]
+       * </pre>
+       *
+       * <code>repeated .HmsAlarmData hmsAlarmData = 8;</code>
+       */
+      public Builder addHmsAlarmData(com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData value) {
+        if (hmsAlarmDataBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureHmsAlarmDataIsMutable();
+          hmsAlarmData_.add(value);
+          onChanged();
+        } else {
+          hmsAlarmDataBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *Hms报警信息[飞机告警信息]
+       * </pre>
+       *
+       * <code>repeated .HmsAlarmData hmsAlarmData = 8;</code>
+       */
+      public Builder addHmsAlarmData(
+          int index, com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData value) {
+        if (hmsAlarmDataBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureHmsAlarmDataIsMutable();
+          hmsAlarmData_.add(index, value);
+          onChanged();
+        } else {
+          hmsAlarmDataBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *Hms报警信息[飞机告警信息]
+       * </pre>
+       *
+       * <code>repeated .HmsAlarmData hmsAlarmData = 8;</code>
+       */
+      public Builder addHmsAlarmData(
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData.Builder builderForValue) {
+        if (hmsAlarmDataBuilder_ == null) {
+          ensureHmsAlarmDataIsMutable();
+          hmsAlarmData_.add(builderForValue.build());
+          onChanged();
+        } else {
+          hmsAlarmDataBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *Hms报警信息[飞机告警信息]
+       * </pre>
+       *
+       * <code>repeated .HmsAlarmData hmsAlarmData = 8;</code>
+       */
+      public Builder addHmsAlarmData(
+          int index, com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData.Builder builderForValue) {
+        if (hmsAlarmDataBuilder_ == null) {
+          ensureHmsAlarmDataIsMutable();
+          hmsAlarmData_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          hmsAlarmDataBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *Hms报警信息[飞机告警信息]
+       * </pre>
+       *
+       * <code>repeated .HmsAlarmData hmsAlarmData = 8;</code>
+       */
+      public Builder addAllHmsAlarmData(
+          java.lang.Iterable<? extends com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData> values) {
+        if (hmsAlarmDataBuilder_ == null) {
+          ensureHmsAlarmDataIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, hmsAlarmData_);
+          onChanged();
+        } else {
+          hmsAlarmDataBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *Hms报警信息[飞机告警信息]
+       * </pre>
+       *
+       * <code>repeated .HmsAlarmData hmsAlarmData = 8;</code>
+       */
+      public Builder clearHmsAlarmData() {
+        if (hmsAlarmDataBuilder_ == null) {
+          hmsAlarmData_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          hmsAlarmDataBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *Hms报警信息[飞机告警信息]
+       * </pre>
+       *
+       * <code>repeated .HmsAlarmData hmsAlarmData = 8;</code>
+       */
+      public Builder removeHmsAlarmData(int index) {
+        if (hmsAlarmDataBuilder_ == null) {
+          ensureHmsAlarmDataIsMutable();
+          hmsAlarmData_.remove(index);
+          onChanged();
+        } else {
+          hmsAlarmDataBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *Hms报警信息[飞机告警信息]
+       * </pre>
+       *
+       * <code>repeated .HmsAlarmData hmsAlarmData = 8;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData.Builder getHmsAlarmDataBuilder(
+          int index) {
+        return getHmsAlarmDataFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <pre>
+       *Hms报警信息[飞机告警信息]
+       * </pre>
+       *
+       * <code>repeated .HmsAlarmData hmsAlarmData = 8;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmDataOrBuilder getHmsAlarmDataOrBuilder(
+          int index) {
+        if (hmsAlarmDataBuilder_ == null) {
+          return hmsAlarmData_.get(index);  } else {
+          return hmsAlarmDataBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <pre>
+       *Hms报警信息[飞机告警信息]
+       * </pre>
+       *
+       * <code>repeated .HmsAlarmData hmsAlarmData = 8;</code>
+       */
+      public java.util.List<? extends com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmDataOrBuilder> 
+           getHmsAlarmDataOrBuilderList() {
+        if (hmsAlarmDataBuilder_ != null) {
+          return hmsAlarmDataBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(hmsAlarmData_);
+        }
+      }
+      /**
+       * <pre>
+       *Hms报警信息[飞机告警信息]
+       * </pre>
+       *
+       * <code>repeated .HmsAlarmData hmsAlarmData = 8;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData.Builder addHmsAlarmDataBuilder() {
+        return getHmsAlarmDataFieldBuilder().addBuilder(
+            com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData.getDefaultInstance());
+      }
+      /**
+       * <pre>
+       *Hms报警信息[飞机告警信息]
+       * </pre>
+       *
+       * <code>repeated .HmsAlarmData hmsAlarmData = 8;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData.Builder addHmsAlarmDataBuilder(
+          int index) {
+        return getHmsAlarmDataFieldBuilder().addBuilder(
+            index, com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData.getDefaultInstance());
+      }
+      /**
+       * <pre>
+       *Hms报警信息[飞机告警信息]
+       * </pre>
+       *
+       * <code>repeated .HmsAlarmData hmsAlarmData = 8;</code>
+       */
+      public java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData.Builder> 
+           getHmsAlarmDataBuilderList() {
+        return getHmsAlarmDataFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData, com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmDataOrBuilder> 
+          getHmsAlarmDataFieldBuilder() {
+        if (hmsAlarmDataBuilder_ == null) {
+          hmsAlarmDataBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData, com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmDataOrBuilder>(
+                  hmsAlarmData_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          hmsAlarmData_ = null;
+        }
+        return hmsAlarmDataBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:UavState)
+    }
+
+    // @@protoc_insertion_point(class_scope:UavState)
+    private static final com.ard.tianyu.netty.protobuf.TelemetryDataPB.UavState DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new com.ard.tianyu.netty.protobuf.TelemetryDataPB.UavState();
+    }
+
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.UavState getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<UavState>
+        PARSER = new com.google.protobuf.AbstractParser<UavState>() {
+      @java.lang.Override
+      public UavState parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new UavState(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<UavState> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<UavState> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.UavState getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface FlightControllerStateOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:FlightControllerState)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <pre>
+     *卫星计数
+     * </pre>
+     *
+     * <code>uint32 satelliteCount = 1;</code>
+     * @return The satelliteCount.
+     */
+    int getSatelliteCount();
+
+    /**
+     * <pre>
+     *GPS信号级别,0~5[4,5等级可以执行航线]
+     * </pre>
+     *
+     * <code>uint32 gpsSignalLevel = 2;</code>
+     * @return The gpsSignalLevel.
+     */
+    int getGpsSignalLevel();
+
+    /**
+     * <pre>
+     *飞行模式:1=手动控制模式,2=姿态模式,6=MODE_P_GPS,9=热点任务中,11=自动起飞中,12=降落中,14=航线中,15=返航中,17=虚拟摇杆控制中,33=强制降落中,41=解锁电机准备起飞中
+     * </pre>
+     *
+     * <code>uint32 flightMode = 3;</code>
+     * @return The flightMode.
+     */
+    int getFlightMode();
+
+    /**
+     * <pre>
+     *飞行状态:0=电机未启动(地面),1=电机启动未起飞(地面),2=起飞在空中(空中)
+     * </pre>
+     *
+     * <code>uint32 flightStatus = 4;</code>
+     * @return The flightStatus.
+     */
+    int getFlightStatus();
+
+    /**
+     * <pre>
+     *起飞点(只包含lat和lng信息)
+     * </pre>
+     *
+     * <code>.PointData startPoint = 5;</code>
+     * @return Whether the startPoint field is set.
+     */
+    boolean hasStartPoint();
+    /**
+     * <pre>
+     *起飞点(只包含lat和lng信息)
+     * </pre>
+     *
+     * <code>.PointData startPoint = 5;</code>
+     * @return The startPoint.
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData getStartPoint();
+    /**
+     * <pre>
+     *起飞点(只包含lat和lng信息)
+     * </pre>
+     *
+     * <code>.PointData startPoint = 5;</code>
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder getStartPointOrBuilder();
+
+    /**
+     * <pre>
+     *返航点(只包含lat和lng信息)
+     * </pre>
+     *
+     * <code>.PointData homePoint = 6;</code>
+     * @return Whether the homePoint field is set.
+     */
+    boolean hasHomePoint();
+    /**
+     * <pre>
+     *返航点(只包含lat和lng信息)
+     * </pre>
+     *
+     * <code>.PointData homePoint = 6;</code>
+     * @return The homePoint.
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData getHomePoint();
+    /**
+     * <pre>
+     *返航点(只包含lat和lng信息)
+     * </pre>
+     *
+     * <code>.PointData homePoint = 6;</code>
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder getHomePointOrBuilder();
+
+    /**
+     * <pre>
+     *返航高度(单位:米)
+     * </pre>
+     *
+     * <code>int32 homeHeight = 7;</code>
+     * @return The homeHeight.
+     */
+    int getHomeHeight();
+
+    /**
+     * <pre>
+     *打点飞行模式:0=节能模式【飞机直线飞到目标点,需飞机在空中并且有控制权】,1=安全模式【飞机飞行至目标点高度再平飞到目标点,飞机可以在地面】 默认为节能模式
+     * </pre>
+     *
+     * <code>uint32 safeLine = 8;</code>
+     * @return The safeLine.
+     */
+    int getSafeLine();
+
+    /**
+     * <pre>
+     *控制权状态:0=遥控器,1=msdk,4=云盒[此控制权只针对虚拟摇杆控制权,起飞、降落、强制降落、航线操作、返航不需要此控制权,但是遥控器断连情况下,如果云盒没有控制权,飞机会执行遥控器的失联策略]
+     * </pre>
+     *
+     * <code>uint32 deviceStatus = 9;</code>
+     * @return The deviceStatus.
+     */
+    int getDeviceStatus();
+
+    /**
+     * <pre>
+     *UWB星数(只有等于4时,才可以开启uwb精准降落模式)
+     * </pre>
+     *
+     * <code>uint32 uwbNodeCount = 10;</code>
+     * @return The uwbNodeCount.
+     */
+    int getUwbNodeCount();
+
+    /**
+     * <pre>
+     *遥控器档位模式(说明:1.遥控器与飞机正常连接:(M300:T-P-S/M30:F-S-N/M3:C-N-S),2.遥控器与飞机未连接:W,3.只有在M300-P挡、M30-N挡、M3-N挡下云盒才能正常控制无人机)    
+     * </pre>
+     *
+     * <code>string rcMode = 11;</code>
+     * @return The rcMode.
+     */
+    java.lang.String getRcMode();
+    /**
+     * <pre>
+     *遥控器档位模式(说明:1.遥控器与飞机正常连接:(M300:T-P-S/M30:F-S-N/M3:C-N-S),2.遥控器与飞机未连接:W,3.只有在M300-P挡、M30-N挡、M3-N挡下云盒才能正常控制无人机)    
+     * </pre>
+     *
+     * <code>string rcMode = 11;</code>
+     * @return The bytes for rcMode.
+     */
+    com.google.protobuf.ByteString
+        getRcModeBytes();
+
+    /**
+     * <pre>
+     *是否紧急制动中,0=否,1=是 【飞行器在地面限制起飞,飞行器在空中限制飞行.如果想操作飞行,请先解除紧急制动】
+     * </pre>
+     *
+     * <code>uint32 isEmergencyBrakeing = 12;</code>
+     * @return The isEmergencyBrakeing.
+     */
+    int getIsEmergencyBrakeing();
+
+    /**
+     * <pre>
+     *飞行器是否在所有自定义电子围栏外,0=电子围栏内 1=电子围栏外
+     * </pre>
+     *
+     * <code>uint32 outFlyAreaFlag = 13;</code>
+     * @return The outFlyAreaFlag.
+     */
+    int getOutFlyAreaFlag();
+
+    /**
+     * <pre>
+     *飞行器是否在自定义禁飞区内,0=禁飞区外 1=禁飞区内
+     * </pre>
+     *
+     * <code>uint32 inNoFlyAreaFlag = 14;</code>
+     * @return The inNoFlyAreaFlag.
+     */
+    int getInNoFlyAreaFlag();
+  }
+  /**
+   * Protobuf type {@code FlightControllerState}
+   */
+  public static final class FlightControllerState extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:FlightControllerState)
+      FlightControllerStateOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use FlightControllerState.newBuilder() to construct.
+    private FlightControllerState(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private FlightControllerState() {
+      rcMode_ = "";
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new FlightControllerState();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private FlightControllerState(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 8: {
+
+              satelliteCount_ = input.readUInt32();
+              break;
+            }
+            case 16: {
+
+              gpsSignalLevel_ = input.readUInt32();
+              break;
+            }
+            case 24: {
+
+              flightMode_ = input.readUInt32();
+              break;
+            }
+            case 32: {
+
+              flightStatus_ = input.readUInt32();
+              break;
+            }
+            case 42: {
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder subBuilder = null;
+              if (startPoint_ != null) {
+                subBuilder = startPoint_.toBuilder();
+              }
+              startPoint_ = input.readMessage(com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(startPoint_);
+                startPoint_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 50: {
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder subBuilder = null;
+              if (homePoint_ != null) {
+                subBuilder = homePoint_.toBuilder();
+              }
+              homePoint_ = input.readMessage(com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(homePoint_);
+                homePoint_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 56: {
+
+              homeHeight_ = input.readInt32();
+              break;
+            }
+            case 64: {
+
+              safeLine_ = input.readUInt32();
+              break;
+            }
+            case 72: {
+
+              deviceStatus_ = input.readUInt32();
+              break;
+            }
+            case 80: {
+
+              uwbNodeCount_ = input.readUInt32();
+              break;
+            }
+            case 90: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              rcMode_ = s;
+              break;
+            }
+            case 96: {
+
+              isEmergencyBrakeing_ = input.readUInt32();
+              break;
+            }
+            case 104: {
+
+              outFlyAreaFlag_ = input.readUInt32();
+              break;
+            }
+            case 112: {
+
+              inNoFlyAreaFlag_ = input.readUInt32();
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_FlightControllerState_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_FlightControllerState_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState.class, com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState.Builder.class);
+    }
+
+    public static final int SATELLITECOUNT_FIELD_NUMBER = 1;
+    private int satelliteCount_;
+    /**
+     * <pre>
+     *卫星计数
+     * </pre>
+     *
+     * <code>uint32 satelliteCount = 1;</code>
+     * @return The satelliteCount.
+     */
+    @java.lang.Override
+    public int getSatelliteCount() {
+      return satelliteCount_;
+    }
+
+    public static final int GPSSIGNALLEVEL_FIELD_NUMBER = 2;
+    private int gpsSignalLevel_;
+    /**
+     * <pre>
+     *GPS信号级别,0~5[4,5等级可以执行航线]
+     * </pre>
+     *
+     * <code>uint32 gpsSignalLevel = 2;</code>
+     * @return The gpsSignalLevel.
+     */
+    @java.lang.Override
+    public int getGpsSignalLevel() {
+      return gpsSignalLevel_;
+    }
+
+    public static final int FLIGHTMODE_FIELD_NUMBER = 3;
+    private int flightMode_;
+    /**
+     * <pre>
+     *飞行模式:1=手动控制模式,2=姿态模式,6=MODE_P_GPS,9=热点任务中,11=自动起飞中,12=降落中,14=航线中,15=返航中,17=虚拟摇杆控制中,33=强制降落中,41=解锁电机准备起飞中
+     * </pre>
+     *
+     * <code>uint32 flightMode = 3;</code>
+     * @return The flightMode.
+     */
+    @java.lang.Override
+    public int getFlightMode() {
+      return flightMode_;
+    }
+
+    public static final int FLIGHTSTATUS_FIELD_NUMBER = 4;
+    private int flightStatus_;
+    /**
+     * <pre>
+     *飞行状态:0=电机未启动(地面),1=电机启动未起飞(地面),2=起飞在空中(空中)
+     * </pre>
+     *
+     * <code>uint32 flightStatus = 4;</code>
+     * @return The flightStatus.
+     */
+    @java.lang.Override
+    public int getFlightStatus() {
+      return flightStatus_;
+    }
+
+    public static final int STARTPOINT_FIELD_NUMBER = 5;
+    private com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData startPoint_;
+    /**
+     * <pre>
+     *起飞点(只包含lat和lng信息)
+     * </pre>
+     *
+     * <code>.PointData startPoint = 5;</code>
+     * @return Whether the startPoint field is set.
+     */
+    @java.lang.Override
+    public boolean hasStartPoint() {
+      return startPoint_ != null;
+    }
+    /**
+     * <pre>
+     *起飞点(只包含lat和lng信息)
+     * </pre>
+     *
+     * <code>.PointData startPoint = 5;</code>
+     * @return The startPoint.
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData getStartPoint() {
+      return startPoint_ == null ? com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.getDefaultInstance() : startPoint_;
+    }
+    /**
+     * <pre>
+     *起飞点(只包含lat和lng信息)
+     * </pre>
+     *
+     * <code>.PointData startPoint = 5;</code>
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder getStartPointOrBuilder() {
+      return getStartPoint();
+    }
+
+    public static final int HOMEPOINT_FIELD_NUMBER = 6;
+    private com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData homePoint_;
+    /**
+     * <pre>
+     *返航点(只包含lat和lng信息)
+     * </pre>
+     *
+     * <code>.PointData homePoint = 6;</code>
+     * @return Whether the homePoint field is set.
+     */
+    @java.lang.Override
+    public boolean hasHomePoint() {
+      return homePoint_ != null;
+    }
+    /**
+     * <pre>
+     *返航点(只包含lat和lng信息)
+     * </pre>
+     *
+     * <code>.PointData homePoint = 6;</code>
+     * @return The homePoint.
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData getHomePoint() {
+      return homePoint_ == null ? com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.getDefaultInstance() : homePoint_;
+    }
+    /**
+     * <pre>
+     *返航点(只包含lat和lng信息)
+     * </pre>
+     *
+     * <code>.PointData homePoint = 6;</code>
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder getHomePointOrBuilder() {
+      return getHomePoint();
+    }
+
+    public static final int HOMEHEIGHT_FIELD_NUMBER = 7;
+    private int homeHeight_;
+    /**
+     * <pre>
+     *返航高度(单位:米)
+     * </pre>
+     *
+     * <code>int32 homeHeight = 7;</code>
+     * @return The homeHeight.
+     */
+    @java.lang.Override
+    public int getHomeHeight() {
+      return homeHeight_;
+    }
+
+    public static final int SAFELINE_FIELD_NUMBER = 8;
+    private int safeLine_;
+    /**
+     * <pre>
+     *打点飞行模式:0=节能模式【飞机直线飞到目标点,需飞机在空中并且有控制权】,1=安全模式【飞机飞行至目标点高度再平飞到目标点,飞机可以在地面】 默认为节能模式
+     * </pre>
+     *
+     * <code>uint32 safeLine = 8;</code>
+     * @return The safeLine.
+     */
+    @java.lang.Override
+    public int getSafeLine() {
+      return safeLine_;
+    }
+
+    public static final int DEVICESTATUS_FIELD_NUMBER = 9;
+    private int deviceStatus_;
+    /**
+     * <pre>
+     *控制权状态:0=遥控器,1=msdk,4=云盒[此控制权只针对虚拟摇杆控制权,起飞、降落、强制降落、航线操作、返航不需要此控制权,但是遥控器断连情况下,如果云盒没有控制权,飞机会执行遥控器的失联策略]
+     * </pre>
+     *
+     * <code>uint32 deviceStatus = 9;</code>
+     * @return The deviceStatus.
+     */
+    @java.lang.Override
+    public int getDeviceStatus() {
+      return deviceStatus_;
+    }
+
+    public static final int UWBNODECOUNT_FIELD_NUMBER = 10;
+    private int uwbNodeCount_;
+    /**
+     * <pre>
+     *UWB星数(只有等于4时,才可以开启uwb精准降落模式)
+     * </pre>
+     *
+     * <code>uint32 uwbNodeCount = 10;</code>
+     * @return The uwbNodeCount.
+     */
+    @java.lang.Override
+    public int getUwbNodeCount() {
+      return uwbNodeCount_;
+    }
+
+    public static final int RCMODE_FIELD_NUMBER = 11;
+    private volatile java.lang.Object rcMode_;
+    /**
+     * <pre>
+     *遥控器档位模式(说明:1.遥控器与飞机正常连接:(M300:T-P-S/M30:F-S-N/M3:C-N-S),2.遥控器与飞机未连接:W,3.只有在M300-P挡、M30-N挡、M3-N挡下云盒才能正常控制无人机)    
+     * </pre>
+     *
+     * <code>string rcMode = 11;</code>
+     * @return The rcMode.
+     */
+    @java.lang.Override
+    public java.lang.String getRcMode() {
+      java.lang.Object ref = rcMode_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        rcMode_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     *遥控器档位模式(说明:1.遥控器与飞机正常连接:(M300:T-P-S/M30:F-S-N/M3:C-N-S),2.遥控器与飞机未连接:W,3.只有在M300-P挡、M30-N挡、M3-N挡下云盒才能正常控制无人机)    
+     * </pre>
+     *
+     * <code>string rcMode = 11;</code>
+     * @return The bytes for rcMode.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getRcModeBytes() {
+      java.lang.Object ref = rcMode_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        rcMode_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int ISEMERGENCYBRAKEING_FIELD_NUMBER = 12;
+    private int isEmergencyBrakeing_;
+    /**
+     * <pre>
+     *是否紧急制动中,0=否,1=是 【飞行器在地面限制起飞,飞行器在空中限制飞行.如果想操作飞行,请先解除紧急制动】
+     * </pre>
+     *
+     * <code>uint32 isEmergencyBrakeing = 12;</code>
+     * @return The isEmergencyBrakeing.
+     */
+    @java.lang.Override
+    public int getIsEmergencyBrakeing() {
+      return isEmergencyBrakeing_;
+    }
+
+    public static final int OUTFLYAREAFLAG_FIELD_NUMBER = 13;
+    private int outFlyAreaFlag_;
+    /**
+     * <pre>
+     *飞行器是否在所有自定义电子围栏外,0=电子围栏内 1=电子围栏外
+     * </pre>
+     *
+     * <code>uint32 outFlyAreaFlag = 13;</code>
+     * @return The outFlyAreaFlag.
+     */
+    @java.lang.Override
+    public int getOutFlyAreaFlag() {
+      return outFlyAreaFlag_;
+    }
+
+    public static final int INNOFLYAREAFLAG_FIELD_NUMBER = 14;
+    private int inNoFlyAreaFlag_;
+    /**
+     * <pre>
+     *飞行器是否在自定义禁飞区内,0=禁飞区外 1=禁飞区内
+     * </pre>
+     *
+     * <code>uint32 inNoFlyAreaFlag = 14;</code>
+     * @return The inNoFlyAreaFlag.
+     */
+    @java.lang.Override
+    public int getInNoFlyAreaFlag() {
+      return inNoFlyAreaFlag_;
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (satelliteCount_ != 0) {
+        output.writeUInt32(1, satelliteCount_);
+      }
+      if (gpsSignalLevel_ != 0) {
+        output.writeUInt32(2, gpsSignalLevel_);
+      }
+      if (flightMode_ != 0) {
+        output.writeUInt32(3, flightMode_);
+      }
+      if (flightStatus_ != 0) {
+        output.writeUInt32(4, flightStatus_);
+      }
+      if (startPoint_ != null) {
+        output.writeMessage(5, getStartPoint());
+      }
+      if (homePoint_ != null) {
+        output.writeMessage(6, getHomePoint());
+      }
+      if (homeHeight_ != 0) {
+        output.writeInt32(7, homeHeight_);
+      }
+      if (safeLine_ != 0) {
+        output.writeUInt32(8, safeLine_);
+      }
+      if (deviceStatus_ != 0) {
+        output.writeUInt32(9, deviceStatus_);
+      }
+      if (uwbNodeCount_ != 0) {
+        output.writeUInt32(10, uwbNodeCount_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(rcMode_)) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 11, rcMode_);
+      }
+      if (isEmergencyBrakeing_ != 0) {
+        output.writeUInt32(12, isEmergencyBrakeing_);
+      }
+      if (outFlyAreaFlag_ != 0) {
+        output.writeUInt32(13, outFlyAreaFlag_);
+      }
+      if (inNoFlyAreaFlag_ != 0) {
+        output.writeUInt32(14, inNoFlyAreaFlag_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (satelliteCount_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(1, satelliteCount_);
+      }
+      if (gpsSignalLevel_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(2, gpsSignalLevel_);
+      }
+      if (flightMode_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(3, flightMode_);
+      }
+      if (flightStatus_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(4, flightStatus_);
+      }
+      if (startPoint_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, getStartPoint());
+      }
+      if (homePoint_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(6, getHomePoint());
+      }
+      if (homeHeight_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(7, homeHeight_);
+      }
+      if (safeLine_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(8, safeLine_);
+      }
+      if (deviceStatus_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(9, deviceStatus_);
+      }
+      if (uwbNodeCount_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(10, uwbNodeCount_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(rcMode_)) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(11, rcMode_);
+      }
+      if (isEmergencyBrakeing_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(12, isEmergencyBrakeing_);
+      }
+      if (outFlyAreaFlag_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(13, outFlyAreaFlag_);
+      }
+      if (inNoFlyAreaFlag_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(14, inNoFlyAreaFlag_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState)) {
+        return super.equals(obj);
+      }
+      com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState other = (com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState) obj;
+
+      if (getSatelliteCount()
+          != other.getSatelliteCount()) return false;
+      if (getGpsSignalLevel()
+          != other.getGpsSignalLevel()) return false;
+      if (getFlightMode()
+          != other.getFlightMode()) return false;
+      if (getFlightStatus()
+          != other.getFlightStatus()) return false;
+      if (hasStartPoint() != other.hasStartPoint()) return false;
+      if (hasStartPoint()) {
+        if (!getStartPoint()
+            .equals(other.getStartPoint())) return false;
+      }
+      if (hasHomePoint() != other.hasHomePoint()) return false;
+      if (hasHomePoint()) {
+        if (!getHomePoint()
+            .equals(other.getHomePoint())) return false;
+      }
+      if (getHomeHeight()
+          != other.getHomeHeight()) return false;
+      if (getSafeLine()
+          != other.getSafeLine()) return false;
+      if (getDeviceStatus()
+          != other.getDeviceStatus()) return false;
+      if (getUwbNodeCount()
+          != other.getUwbNodeCount()) return false;
+      if (!getRcMode()
+          .equals(other.getRcMode())) return false;
+      if (getIsEmergencyBrakeing()
+          != other.getIsEmergencyBrakeing()) return false;
+      if (getOutFlyAreaFlag()
+          != other.getOutFlyAreaFlag()) return false;
+      if (getInNoFlyAreaFlag()
+          != other.getInNoFlyAreaFlag()) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + SATELLITECOUNT_FIELD_NUMBER;
+      hash = (53 * hash) + getSatelliteCount();
+      hash = (37 * hash) + GPSSIGNALLEVEL_FIELD_NUMBER;
+      hash = (53 * hash) + getGpsSignalLevel();
+      hash = (37 * hash) + FLIGHTMODE_FIELD_NUMBER;
+      hash = (53 * hash) + getFlightMode();
+      hash = (37 * hash) + FLIGHTSTATUS_FIELD_NUMBER;
+      hash = (53 * hash) + getFlightStatus();
+      if (hasStartPoint()) {
+        hash = (37 * hash) + STARTPOINT_FIELD_NUMBER;
+        hash = (53 * hash) + getStartPoint().hashCode();
+      }
+      if (hasHomePoint()) {
+        hash = (37 * hash) + HOMEPOINT_FIELD_NUMBER;
+        hash = (53 * hash) + getHomePoint().hashCode();
+      }
+      hash = (37 * hash) + HOMEHEIGHT_FIELD_NUMBER;
+      hash = (53 * hash) + getHomeHeight();
+      hash = (37 * hash) + SAFELINE_FIELD_NUMBER;
+      hash = (53 * hash) + getSafeLine();
+      hash = (37 * hash) + DEVICESTATUS_FIELD_NUMBER;
+      hash = (53 * hash) + getDeviceStatus();
+      hash = (37 * hash) + UWBNODECOUNT_FIELD_NUMBER;
+      hash = (53 * hash) + getUwbNodeCount();
+      hash = (37 * hash) + RCMODE_FIELD_NUMBER;
+      hash = (53 * hash) + getRcMode().hashCode();
+      hash = (37 * hash) + ISEMERGENCYBRAKEING_FIELD_NUMBER;
+      hash = (53 * hash) + getIsEmergencyBrakeing();
+      hash = (37 * hash) + OUTFLYAREAFLAG_FIELD_NUMBER;
+      hash = (53 * hash) + getOutFlyAreaFlag();
+      hash = (37 * hash) + INNOFLYAREAFLAG_FIELD_NUMBER;
+      hash = (53 * hash) + getInNoFlyAreaFlag();
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code FlightControllerState}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:FlightControllerState)
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerStateOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_FlightControllerState_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_FlightControllerState_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState.class, com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState.Builder.class);
+      }
+
+      // Construct using com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        satelliteCount_ = 0;
+
+        gpsSignalLevel_ = 0;
+
+        flightMode_ = 0;
+
+        flightStatus_ = 0;
+
+        if (startPointBuilder_ == null) {
+          startPoint_ = null;
+        } else {
+          startPoint_ = null;
+          startPointBuilder_ = null;
+        }
+        if (homePointBuilder_ == null) {
+          homePoint_ = null;
+        } else {
+          homePoint_ = null;
+          homePointBuilder_ = null;
+        }
+        homeHeight_ = 0;
+
+        safeLine_ = 0;
+
+        deviceStatus_ = 0;
+
+        uwbNodeCount_ = 0;
+
+        rcMode_ = "";
+
+        isEmergencyBrakeing_ = 0;
+
+        outFlyAreaFlag_ = 0;
+
+        inNoFlyAreaFlag_ = 0;
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_FlightControllerState_descriptor;
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState getDefaultInstanceForType() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState build() {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState buildPartial() {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState result = new com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState(this);
+        result.satelliteCount_ = satelliteCount_;
+        result.gpsSignalLevel_ = gpsSignalLevel_;
+        result.flightMode_ = flightMode_;
+        result.flightStatus_ = flightStatus_;
+        if (startPointBuilder_ == null) {
+          result.startPoint_ = startPoint_;
+        } else {
+          result.startPoint_ = startPointBuilder_.build();
+        }
+        if (homePointBuilder_ == null) {
+          result.homePoint_ = homePoint_;
+        } else {
+          result.homePoint_ = homePointBuilder_.build();
+        }
+        result.homeHeight_ = homeHeight_;
+        result.safeLine_ = safeLine_;
+        result.deviceStatus_ = deviceStatus_;
+        result.uwbNodeCount_ = uwbNodeCount_;
+        result.rcMode_ = rcMode_;
+        result.isEmergencyBrakeing_ = isEmergencyBrakeing_;
+        result.outFlyAreaFlag_ = outFlyAreaFlag_;
+        result.inNoFlyAreaFlag_ = inNoFlyAreaFlag_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState) {
+          return mergeFrom((com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState other) {
+        if (other == com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState.getDefaultInstance()) return this;
+        if (other.getSatelliteCount() != 0) {
+          setSatelliteCount(other.getSatelliteCount());
+        }
+        if (other.getGpsSignalLevel() != 0) {
+          setGpsSignalLevel(other.getGpsSignalLevel());
+        }
+        if (other.getFlightMode() != 0) {
+          setFlightMode(other.getFlightMode());
+        }
+        if (other.getFlightStatus() != 0) {
+          setFlightStatus(other.getFlightStatus());
+        }
+        if (other.hasStartPoint()) {
+          mergeStartPoint(other.getStartPoint());
+        }
+        if (other.hasHomePoint()) {
+          mergeHomePoint(other.getHomePoint());
+        }
+        if (other.getHomeHeight() != 0) {
+          setHomeHeight(other.getHomeHeight());
+        }
+        if (other.getSafeLine() != 0) {
+          setSafeLine(other.getSafeLine());
+        }
+        if (other.getDeviceStatus() != 0) {
+          setDeviceStatus(other.getDeviceStatus());
+        }
+        if (other.getUwbNodeCount() != 0) {
+          setUwbNodeCount(other.getUwbNodeCount());
+        }
+        if (!other.getRcMode().isEmpty()) {
+          rcMode_ = other.rcMode_;
+          onChanged();
+        }
+        if (other.getIsEmergencyBrakeing() != 0) {
+          setIsEmergencyBrakeing(other.getIsEmergencyBrakeing());
+        }
+        if (other.getOutFlyAreaFlag() != 0) {
+          setOutFlyAreaFlag(other.getOutFlyAreaFlag());
+        }
+        if (other.getInNoFlyAreaFlag() != 0) {
+          setInNoFlyAreaFlag(other.getInNoFlyAreaFlag());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private int satelliteCount_ ;
+      /**
+       * <pre>
+       *卫星计数
+       * </pre>
+       *
+       * <code>uint32 satelliteCount = 1;</code>
+       * @return The satelliteCount.
+       */
+      @java.lang.Override
+      public int getSatelliteCount() {
+        return satelliteCount_;
+      }
+      /**
+       * <pre>
+       *卫星计数
+       * </pre>
+       *
+       * <code>uint32 satelliteCount = 1;</code>
+       * @param value The satelliteCount to set.
+       * @return This builder for chaining.
+       */
+      public Builder setSatelliteCount(int value) {
+        
+        satelliteCount_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *卫星计数
+       * </pre>
+       *
+       * <code>uint32 satelliteCount = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearSatelliteCount() {
+        
+        satelliteCount_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int gpsSignalLevel_ ;
+      /**
+       * <pre>
+       *GPS信号级别,0~5[4,5等级可以执行航线]
+       * </pre>
+       *
+       * <code>uint32 gpsSignalLevel = 2;</code>
+       * @return The gpsSignalLevel.
+       */
+      @java.lang.Override
+      public int getGpsSignalLevel() {
+        return gpsSignalLevel_;
+      }
+      /**
+       * <pre>
+       *GPS信号级别,0~5[4,5等级可以执行航线]
+       * </pre>
+       *
+       * <code>uint32 gpsSignalLevel = 2;</code>
+       * @param value The gpsSignalLevel to set.
+       * @return This builder for chaining.
+       */
+      public Builder setGpsSignalLevel(int value) {
+        
+        gpsSignalLevel_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *GPS信号级别,0~5[4,5等级可以执行航线]
+       * </pre>
+       *
+       * <code>uint32 gpsSignalLevel = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearGpsSignalLevel() {
+        
+        gpsSignalLevel_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int flightMode_ ;
+      /**
+       * <pre>
+       *飞行模式:1=手动控制模式,2=姿态模式,6=MODE_P_GPS,9=热点任务中,11=自动起飞中,12=降落中,14=航线中,15=返航中,17=虚拟摇杆控制中,33=强制降落中,41=解锁电机准备起飞中
+       * </pre>
+       *
+       * <code>uint32 flightMode = 3;</code>
+       * @return The flightMode.
+       */
+      @java.lang.Override
+      public int getFlightMode() {
+        return flightMode_;
+      }
+      /**
+       * <pre>
+       *飞行模式:1=手动控制模式,2=姿态模式,6=MODE_P_GPS,9=热点任务中,11=自动起飞中,12=降落中,14=航线中,15=返航中,17=虚拟摇杆控制中,33=强制降落中,41=解锁电机准备起飞中
+       * </pre>
+       *
+       * <code>uint32 flightMode = 3;</code>
+       * @param value The flightMode to set.
+       * @return This builder for chaining.
+       */
+      public Builder setFlightMode(int value) {
+        
+        flightMode_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *飞行模式:1=手动控制模式,2=姿态模式,6=MODE_P_GPS,9=热点任务中,11=自动起飞中,12=降落中,14=航线中,15=返航中,17=虚拟摇杆控制中,33=强制降落中,41=解锁电机准备起飞中
+       * </pre>
+       *
+       * <code>uint32 flightMode = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearFlightMode() {
+        
+        flightMode_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int flightStatus_ ;
+      /**
+       * <pre>
+       *飞行状态:0=电机未启动(地面),1=电机启动未起飞(地面),2=起飞在空中(空中)
+       * </pre>
+       *
+       * <code>uint32 flightStatus = 4;</code>
+       * @return The flightStatus.
+       */
+      @java.lang.Override
+      public int getFlightStatus() {
+        return flightStatus_;
+      }
+      /**
+       * <pre>
+       *飞行状态:0=电机未启动(地面),1=电机启动未起飞(地面),2=起飞在空中(空中)
+       * </pre>
+       *
+       * <code>uint32 flightStatus = 4;</code>
+       * @param value The flightStatus to set.
+       * @return This builder for chaining.
+       */
+      public Builder setFlightStatus(int value) {
+        
+        flightStatus_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *飞行状态:0=电机未启动(地面),1=电机启动未起飞(地面),2=起飞在空中(空中)
+       * </pre>
+       *
+       * <code>uint32 flightStatus = 4;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearFlightStatus() {
+        
+        flightStatus_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData startPoint_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder> startPointBuilder_;
+      /**
+       * <pre>
+       *起飞点(只包含lat和lng信息)
+       * </pre>
+       *
+       * <code>.PointData startPoint = 5;</code>
+       * @return Whether the startPoint field is set.
+       */
+      public boolean hasStartPoint() {
+        return startPointBuilder_ != null || startPoint_ != null;
+      }
+      /**
+       * <pre>
+       *起飞点(只包含lat和lng信息)
+       * </pre>
+       *
+       * <code>.PointData startPoint = 5;</code>
+       * @return The startPoint.
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData getStartPoint() {
+        if (startPointBuilder_ == null) {
+          return startPoint_ == null ? com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.getDefaultInstance() : startPoint_;
+        } else {
+          return startPointBuilder_.getMessage();
+        }
+      }
+      /**
+       * <pre>
+       *起飞点(只包含lat和lng信息)
+       * </pre>
+       *
+       * <code>.PointData startPoint = 5;</code>
+       */
+      public Builder setStartPoint(com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData value) {
+        if (startPointBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          startPoint_ = value;
+          onChanged();
+        } else {
+          startPointBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *起飞点(只包含lat和lng信息)
+       * </pre>
+       *
+       * <code>.PointData startPoint = 5;</code>
+       */
+      public Builder setStartPoint(
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder builderForValue) {
+        if (startPointBuilder_ == null) {
+          startPoint_ = builderForValue.build();
+          onChanged();
+        } else {
+          startPointBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *起飞点(只包含lat和lng信息)
+       * </pre>
+       *
+       * <code>.PointData startPoint = 5;</code>
+       */
+      public Builder mergeStartPoint(com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData value) {
+        if (startPointBuilder_ == null) {
+          if (startPoint_ != null) {
+            startPoint_ =
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.newBuilder(startPoint_).mergeFrom(value).buildPartial();
+          } else {
+            startPoint_ = value;
+          }
+          onChanged();
+        } else {
+          startPointBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *起飞点(只包含lat和lng信息)
+       * </pre>
+       *
+       * <code>.PointData startPoint = 5;</code>
+       */
+      public Builder clearStartPoint() {
+        if (startPointBuilder_ == null) {
+          startPoint_ = null;
+          onChanged();
+        } else {
+          startPoint_ = null;
+          startPointBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *起飞点(只包含lat和lng信息)
+       * </pre>
+       *
+       * <code>.PointData startPoint = 5;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder getStartPointBuilder() {
+        
+        onChanged();
+        return getStartPointFieldBuilder().getBuilder();
+      }
+      /**
+       * <pre>
+       *起飞点(只包含lat和lng信息)
+       * </pre>
+       *
+       * <code>.PointData startPoint = 5;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder getStartPointOrBuilder() {
+        if (startPointBuilder_ != null) {
+          return startPointBuilder_.getMessageOrBuilder();
+        } else {
+          return startPoint_ == null ?
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.getDefaultInstance() : startPoint_;
+        }
+      }
+      /**
+       * <pre>
+       *起飞点(只包含lat和lng信息)
+       * </pre>
+       *
+       * <code>.PointData startPoint = 5;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder> 
+          getStartPointFieldBuilder() {
+        if (startPointBuilder_ == null) {
+          startPointBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder>(
+                  getStartPoint(),
+                  getParentForChildren(),
+                  isClean());
+          startPoint_ = null;
+        }
+        return startPointBuilder_;
+      }
+
+      private com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData homePoint_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder> homePointBuilder_;
+      /**
+       * <pre>
+       *返航点(只包含lat和lng信息)
+       * </pre>
+       *
+       * <code>.PointData homePoint = 6;</code>
+       * @return Whether the homePoint field is set.
+       */
+      public boolean hasHomePoint() {
+        return homePointBuilder_ != null || homePoint_ != null;
+      }
+      /**
+       * <pre>
+       *返航点(只包含lat和lng信息)
+       * </pre>
+       *
+       * <code>.PointData homePoint = 6;</code>
+       * @return The homePoint.
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData getHomePoint() {
+        if (homePointBuilder_ == null) {
+          return homePoint_ == null ? com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.getDefaultInstance() : homePoint_;
+        } else {
+          return homePointBuilder_.getMessage();
+        }
+      }
+      /**
+       * <pre>
+       *返航点(只包含lat和lng信息)
+       * </pre>
+       *
+       * <code>.PointData homePoint = 6;</code>
+       */
+      public Builder setHomePoint(com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData value) {
+        if (homePointBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          homePoint_ = value;
+          onChanged();
+        } else {
+          homePointBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *返航点(只包含lat和lng信息)
+       * </pre>
+       *
+       * <code>.PointData homePoint = 6;</code>
+       */
+      public Builder setHomePoint(
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder builderForValue) {
+        if (homePointBuilder_ == null) {
+          homePoint_ = builderForValue.build();
+          onChanged();
+        } else {
+          homePointBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *返航点(只包含lat和lng信息)
+       * </pre>
+       *
+       * <code>.PointData homePoint = 6;</code>
+       */
+      public Builder mergeHomePoint(com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData value) {
+        if (homePointBuilder_ == null) {
+          if (homePoint_ != null) {
+            homePoint_ =
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.newBuilder(homePoint_).mergeFrom(value).buildPartial();
+          } else {
+            homePoint_ = value;
+          }
+          onChanged();
+        } else {
+          homePointBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *返航点(只包含lat和lng信息)
+       * </pre>
+       *
+       * <code>.PointData homePoint = 6;</code>
+       */
+      public Builder clearHomePoint() {
+        if (homePointBuilder_ == null) {
+          homePoint_ = null;
+          onChanged();
+        } else {
+          homePoint_ = null;
+          homePointBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *返航点(只包含lat和lng信息)
+       * </pre>
+       *
+       * <code>.PointData homePoint = 6;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder getHomePointBuilder() {
+        
+        onChanged();
+        return getHomePointFieldBuilder().getBuilder();
+      }
+      /**
+       * <pre>
+       *返航点(只包含lat和lng信息)
+       * </pre>
+       *
+       * <code>.PointData homePoint = 6;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder getHomePointOrBuilder() {
+        if (homePointBuilder_ != null) {
+          return homePointBuilder_.getMessageOrBuilder();
+        } else {
+          return homePoint_ == null ?
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.getDefaultInstance() : homePoint_;
+        }
+      }
+      /**
+       * <pre>
+       *返航点(只包含lat和lng信息)
+       * </pre>
+       *
+       * <code>.PointData homePoint = 6;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder> 
+          getHomePointFieldBuilder() {
+        if (homePointBuilder_ == null) {
+          homePointBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder>(
+                  getHomePoint(),
+                  getParentForChildren(),
+                  isClean());
+          homePoint_ = null;
+        }
+        return homePointBuilder_;
+      }
+
+      private int homeHeight_ ;
+      /**
+       * <pre>
+       *返航高度(单位:米)
+       * </pre>
+       *
+       * <code>int32 homeHeight = 7;</code>
+       * @return The homeHeight.
+       */
+      @java.lang.Override
+      public int getHomeHeight() {
+        return homeHeight_;
+      }
+      /**
+       * <pre>
+       *返航高度(单位:米)
+       * </pre>
+       *
+       * <code>int32 homeHeight = 7;</code>
+       * @param value The homeHeight to set.
+       * @return This builder for chaining.
+       */
+      public Builder setHomeHeight(int value) {
+        
+        homeHeight_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *返航高度(单位:米)
+       * </pre>
+       *
+       * <code>int32 homeHeight = 7;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearHomeHeight() {
+        
+        homeHeight_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int safeLine_ ;
+      /**
+       * <pre>
+       *打点飞行模式:0=节能模式【飞机直线飞到目标点,需飞机在空中并且有控制权】,1=安全模式【飞机飞行至目标点高度再平飞到目标点,飞机可以在地面】 默认为节能模式
+       * </pre>
+       *
+       * <code>uint32 safeLine = 8;</code>
+       * @return The safeLine.
+       */
+      @java.lang.Override
+      public int getSafeLine() {
+        return safeLine_;
+      }
+      /**
+       * <pre>
+       *打点飞行模式:0=节能模式【飞机直线飞到目标点,需飞机在空中并且有控制权】,1=安全模式【飞机飞行至目标点高度再平飞到目标点,飞机可以在地面】 默认为节能模式
+       * </pre>
+       *
+       * <code>uint32 safeLine = 8;</code>
+       * @param value The safeLine to set.
+       * @return This builder for chaining.
+       */
+      public Builder setSafeLine(int value) {
+        
+        safeLine_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *打点飞行模式:0=节能模式【飞机直线飞到目标点,需飞机在空中并且有控制权】,1=安全模式【飞机飞行至目标点高度再平飞到目标点,飞机可以在地面】 默认为节能模式
+       * </pre>
+       *
+       * <code>uint32 safeLine = 8;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearSafeLine() {
+        
+        safeLine_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int deviceStatus_ ;
+      /**
+       * <pre>
+       *控制权状态:0=遥控器,1=msdk,4=云盒[此控制权只针对虚拟摇杆控制权,起飞、降落、强制降落、航线操作、返航不需要此控制权,但是遥控器断连情况下,如果云盒没有控制权,飞机会执行遥控器的失联策略]
+       * </pre>
+       *
+       * <code>uint32 deviceStatus = 9;</code>
+       * @return The deviceStatus.
+       */
+      @java.lang.Override
+      public int getDeviceStatus() {
+        return deviceStatus_;
+      }
+      /**
+       * <pre>
+       *控制权状态:0=遥控器,1=msdk,4=云盒[此控制权只针对虚拟摇杆控制权,起飞、降落、强制降落、航线操作、返航不需要此控制权,但是遥控器断连情况下,如果云盒没有控制权,飞机会执行遥控器的失联策略]
+       * </pre>
+       *
+       * <code>uint32 deviceStatus = 9;</code>
+       * @param value The deviceStatus to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDeviceStatus(int value) {
+        
+        deviceStatus_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *控制权状态:0=遥控器,1=msdk,4=云盒[此控制权只针对虚拟摇杆控制权,起飞、降落、强制降落、航线操作、返航不需要此控制权,但是遥控器断连情况下,如果云盒没有控制权,飞机会执行遥控器的失联策略]
+       * </pre>
+       *
+       * <code>uint32 deviceStatus = 9;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearDeviceStatus() {
+        
+        deviceStatus_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int uwbNodeCount_ ;
+      /**
+       * <pre>
+       *UWB星数(只有等于4时,才可以开启uwb精准降落模式)
+       * </pre>
+       *
+       * <code>uint32 uwbNodeCount = 10;</code>
+       * @return The uwbNodeCount.
+       */
+      @java.lang.Override
+      public int getUwbNodeCount() {
+        return uwbNodeCount_;
+      }
+      /**
+       * <pre>
+       *UWB星数(只有等于4时,才可以开启uwb精准降落模式)
+       * </pre>
+       *
+       * <code>uint32 uwbNodeCount = 10;</code>
+       * @param value The uwbNodeCount to set.
+       * @return This builder for chaining.
+       */
+      public Builder setUwbNodeCount(int value) {
+        
+        uwbNodeCount_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *UWB星数(只有等于4时,才可以开启uwb精准降落模式)
+       * </pre>
+       *
+       * <code>uint32 uwbNodeCount = 10;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearUwbNodeCount() {
+        
+        uwbNodeCount_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object rcMode_ = "";
+      /**
+       * <pre>
+       *遥控器档位模式(说明:1.遥控器与飞机正常连接:(M300:T-P-S/M30:F-S-N/M3:C-N-S),2.遥控器与飞机未连接:W,3.只有在M300-P挡、M30-N挡、M3-N挡下云盒才能正常控制无人机)    
+       * </pre>
+       *
+       * <code>string rcMode = 11;</code>
+       * @return The rcMode.
+       */
+      public java.lang.String getRcMode() {
+        java.lang.Object ref = rcMode_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          rcMode_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       *遥控器档位模式(说明:1.遥控器与飞机正常连接:(M300:T-P-S/M30:F-S-N/M3:C-N-S),2.遥控器与飞机未连接:W,3.只有在M300-P挡、M30-N挡、M3-N挡下云盒才能正常控制无人机)    
+       * </pre>
+       *
+       * <code>string rcMode = 11;</code>
+       * @return The bytes for rcMode.
+       */
+      public com.google.protobuf.ByteString
+          getRcModeBytes() {
+        java.lang.Object ref = rcMode_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          rcMode_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       *遥控器档位模式(说明:1.遥控器与飞机正常连接:(M300:T-P-S/M30:F-S-N/M3:C-N-S),2.遥控器与飞机未连接:W,3.只有在M300-P挡、M30-N挡、M3-N挡下云盒才能正常控制无人机)    
+       * </pre>
+       *
+       * <code>string rcMode = 11;</code>
+       * @param value The rcMode to set.
+       * @return This builder for chaining.
+       */
+      public Builder setRcMode(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        rcMode_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *遥控器档位模式(说明:1.遥控器与飞机正常连接:(M300:T-P-S/M30:F-S-N/M3:C-N-S),2.遥控器与飞机未连接:W,3.只有在M300-P挡、M30-N挡、M3-N挡下云盒才能正常控制无人机)    
+       * </pre>
+       *
+       * <code>string rcMode = 11;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearRcMode() {
+        
+        rcMode_ = getDefaultInstance().getRcMode();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *遥控器档位模式(说明:1.遥控器与飞机正常连接:(M300:T-P-S/M30:F-S-N/M3:C-N-S),2.遥控器与飞机未连接:W,3.只有在M300-P挡、M30-N挡、M3-N挡下云盒才能正常控制无人机)    
+       * </pre>
+       *
+       * <code>string rcMode = 11;</code>
+       * @param value The bytes for rcMode to set.
+       * @return This builder for chaining.
+       */
+      public Builder setRcModeBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        rcMode_ = value;
+        onChanged();
+        return this;
+      }
+
+      private int isEmergencyBrakeing_ ;
+      /**
+       * <pre>
+       *是否紧急制动中,0=否,1=是 【飞行器在地面限制起飞,飞行器在空中限制飞行.如果想操作飞行,请先解除紧急制动】
+       * </pre>
+       *
+       * <code>uint32 isEmergencyBrakeing = 12;</code>
+       * @return The isEmergencyBrakeing.
+       */
+      @java.lang.Override
+      public int getIsEmergencyBrakeing() {
+        return isEmergencyBrakeing_;
+      }
+      /**
+       * <pre>
+       *是否紧急制动中,0=否,1=是 【飞行器在地面限制起飞,飞行器在空中限制飞行.如果想操作飞行,请先解除紧急制动】
+       * </pre>
+       *
+       * <code>uint32 isEmergencyBrakeing = 12;</code>
+       * @param value The isEmergencyBrakeing to set.
+       * @return This builder for chaining.
+       */
+      public Builder setIsEmergencyBrakeing(int value) {
+        
+        isEmergencyBrakeing_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *是否紧急制动中,0=否,1=是 【飞行器在地面限制起飞,飞行器在空中限制飞行.如果想操作飞行,请先解除紧急制动】
+       * </pre>
+       *
+       * <code>uint32 isEmergencyBrakeing = 12;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearIsEmergencyBrakeing() {
+        
+        isEmergencyBrakeing_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int outFlyAreaFlag_ ;
+      /**
+       * <pre>
+       *飞行器是否在所有自定义电子围栏外,0=电子围栏内 1=电子围栏外
+       * </pre>
+       *
+       * <code>uint32 outFlyAreaFlag = 13;</code>
+       * @return The outFlyAreaFlag.
+       */
+      @java.lang.Override
+      public int getOutFlyAreaFlag() {
+        return outFlyAreaFlag_;
+      }
+      /**
+       * <pre>
+       *飞行器是否在所有自定义电子围栏外,0=电子围栏内 1=电子围栏外
+       * </pre>
+       *
+       * <code>uint32 outFlyAreaFlag = 13;</code>
+       * @param value The outFlyAreaFlag to set.
+       * @return This builder for chaining.
+       */
+      public Builder setOutFlyAreaFlag(int value) {
+        
+        outFlyAreaFlag_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *飞行器是否在所有自定义电子围栏外,0=电子围栏内 1=电子围栏外
+       * </pre>
+       *
+       * <code>uint32 outFlyAreaFlag = 13;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearOutFlyAreaFlag() {
+        
+        outFlyAreaFlag_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int inNoFlyAreaFlag_ ;
+      /**
+       * <pre>
+       *飞行器是否在自定义禁飞区内,0=禁飞区外 1=禁飞区内
+       * </pre>
+       *
+       * <code>uint32 inNoFlyAreaFlag = 14;</code>
+       * @return The inNoFlyAreaFlag.
+       */
+      @java.lang.Override
+      public int getInNoFlyAreaFlag() {
+        return inNoFlyAreaFlag_;
+      }
+      /**
+       * <pre>
+       *飞行器是否在自定义禁飞区内,0=禁飞区外 1=禁飞区内
+       * </pre>
+       *
+       * <code>uint32 inNoFlyAreaFlag = 14;</code>
+       * @param value The inNoFlyAreaFlag to set.
+       * @return This builder for chaining.
+       */
+      public Builder setInNoFlyAreaFlag(int value) {
+        
+        inNoFlyAreaFlag_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *飞行器是否在自定义禁飞区内,0=禁飞区外 1=禁飞区内
+       * </pre>
+       *
+       * <code>uint32 inNoFlyAreaFlag = 14;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearInNoFlyAreaFlag() {
+        
+        inNoFlyAreaFlag_ = 0;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:FlightControllerState)
+    }
+
+    // @@protoc_insertion_point(class_scope:FlightControllerState)
+    private static final com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState();
+    }
+
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<FlightControllerState>
+        PARSER = new com.google.protobuf.AbstractParser<FlightControllerState>() {
+      @java.lang.Override
+      public FlightControllerState parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new FlightControllerState(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<FlightControllerState> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<FlightControllerState> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.FlightControllerState getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface BatteryStateOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:BatteryState)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <pre>
+     *电池数量
+     * </pre>
+     *
+     * <code>uint32 batteryNum = 1;</code>
+     * @return The batteryNum.
+     */
+    int getBatteryNum();
+
+    /**
+     * <pre>
+     *电池电量,多个电池以下划线分割,如:80_60
+     * </pre>
+     *
+     * <code>string batteryPower = 2;</code>
+     * @return The batteryPower.
+     */
+    java.lang.String getBatteryPower();
+    /**
+     * <pre>
+     *电池电量,多个电池以下划线分割,如:80_60
+     * </pre>
+     *
+     * <code>string batteryPower = 2;</code>
+     * @return The bytes for batteryPower.
+     */
+    com.google.protobuf.ByteString
+        getBatteryPowerBytes();
+
+    /**
+     * <pre>
+     *电池电压,多个电池以下划线分割,如:40_30(单位:V)[注意:如果2块电池电压差大于0.7V,飞机限制起飞]
+     * </pre>
+     *
+     * <code>string batteryVoltage = 3;</code>
+     * @return The batteryVoltage.
+     */
+    java.lang.String getBatteryVoltage();
+    /**
+     * <pre>
+     *电池电压,多个电池以下划线分割,如:40_30(单位:V)[注意:如果2块电池电压差大于0.7V,飞机限制起飞]
+     * </pre>
+     *
+     * <code>string batteryVoltage = 3;</code>
+     * @return The bytes for batteryVoltage.
+     */
+    com.google.protobuf.ByteString
+        getBatteryVoltageBytes();
+
+    /**
+     * <pre>
+     *第一块电池状态信息(安装在飞机左边电池槽)
+     * </pre>
+     *
+     * <code>.BatteryStateInfo firstBatteryInfo = 4;</code>
+     * @return Whether the firstBatteryInfo field is set.
+     */
+    boolean hasFirstBatteryInfo();
+    /**
+     * <pre>
+     *第一块电池状态信息(安装在飞机左边电池槽)
+     * </pre>
+     *
+     * <code>.BatteryStateInfo firstBatteryInfo = 4;</code>
+     * @return The firstBatteryInfo.
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo getFirstBatteryInfo();
+    /**
+     * <pre>
+     *第一块电池状态信息(安装在飞机左边电池槽)
+     * </pre>
+     *
+     * <code>.BatteryStateInfo firstBatteryInfo = 4;</code>
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfoOrBuilder getFirstBatteryInfoOrBuilder();
+
+    /**
+     * <pre>
+     *第二块电池状态信息(安装在飞机右边电池槽)
+     * </pre>
+     *
+     * <code>.BatteryStateInfo secondBatteryInfo = 5;</code>
+     * @return Whether the secondBatteryInfo field is set.
+     */
+    boolean hasSecondBatteryInfo();
+    /**
+     * <pre>
+     *第二块电池状态信息(安装在飞机右边电池槽)
+     * </pre>
+     *
+     * <code>.BatteryStateInfo secondBatteryInfo = 5;</code>
+     * @return The secondBatteryInfo.
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo getSecondBatteryInfo();
+    /**
+     * <pre>
+     *第二块电池状态信息(安装在飞机右边电池槽)
+     * </pre>
+     *
+     * <code>.BatteryStateInfo secondBatteryInfo = 5;</code>
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfoOrBuilder getSecondBatteryInfoOrBuilder();
+  }
+  /**
+   * <pre>
+   *电池状态
+   * </pre>
+   *
+   * Protobuf type {@code BatteryState}
+   */
+  public static final class BatteryState extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:BatteryState)
+      BatteryStateOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use BatteryState.newBuilder() to construct.
+    private BatteryState(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private BatteryState() {
+      batteryPower_ = "";
+      batteryVoltage_ = "";
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new BatteryState();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private BatteryState(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 8: {
+
+              batteryNum_ = input.readUInt32();
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              batteryPower_ = s;
+              break;
+            }
+            case 26: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              batteryVoltage_ = s;
+              break;
+            }
+            case 34: {
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo.Builder subBuilder = null;
+              if (firstBatteryInfo_ != null) {
+                subBuilder = firstBatteryInfo_.toBuilder();
+              }
+              firstBatteryInfo_ = input.readMessage(com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(firstBatteryInfo_);
+                firstBatteryInfo_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 42: {
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo.Builder subBuilder = null;
+              if (secondBatteryInfo_ != null) {
+                subBuilder = secondBatteryInfo_.toBuilder();
+              }
+              secondBatteryInfo_ = input.readMessage(com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(secondBatteryInfo_);
+                secondBatteryInfo_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_BatteryState_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_BatteryState_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState.class, com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState.Builder.class);
+    }
+
+    public static final int BATTERYNUM_FIELD_NUMBER = 1;
+    private int batteryNum_;
+    /**
+     * <pre>
+     *电池数量
+     * </pre>
+     *
+     * <code>uint32 batteryNum = 1;</code>
+     * @return The batteryNum.
+     */
+    @java.lang.Override
+    public int getBatteryNum() {
+      return batteryNum_;
+    }
+
+    public static final int BATTERYPOWER_FIELD_NUMBER = 2;
+    private volatile java.lang.Object batteryPower_;
+    /**
+     * <pre>
+     *电池电量,多个电池以下划线分割,如:80_60
+     * </pre>
+     *
+     * <code>string batteryPower = 2;</code>
+     * @return The batteryPower.
+     */
+    @java.lang.Override
+    public java.lang.String getBatteryPower() {
+      java.lang.Object ref = batteryPower_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        batteryPower_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     *电池电量,多个电池以下划线分割,如:80_60
+     * </pre>
+     *
+     * <code>string batteryPower = 2;</code>
+     * @return The bytes for batteryPower.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getBatteryPowerBytes() {
+      java.lang.Object ref = batteryPower_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        batteryPower_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int BATTERYVOLTAGE_FIELD_NUMBER = 3;
+    private volatile java.lang.Object batteryVoltage_;
+    /**
+     * <pre>
+     *电池电压,多个电池以下划线分割,如:40_30(单位:V)[注意:如果2块电池电压差大于0.7V,飞机限制起飞]
+     * </pre>
+     *
+     * <code>string batteryVoltage = 3;</code>
+     * @return The batteryVoltage.
+     */
+    @java.lang.Override
+    public java.lang.String getBatteryVoltage() {
+      java.lang.Object ref = batteryVoltage_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        batteryVoltage_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     *电池电压,多个电池以下划线分割,如:40_30(单位:V)[注意:如果2块电池电压差大于0.7V,飞机限制起飞]
+     * </pre>
+     *
+     * <code>string batteryVoltage = 3;</code>
+     * @return The bytes for batteryVoltage.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getBatteryVoltageBytes() {
+      java.lang.Object ref = batteryVoltage_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        batteryVoltage_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int FIRSTBATTERYINFO_FIELD_NUMBER = 4;
+    private com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo firstBatteryInfo_;
+    /**
+     * <pre>
+     *第一块电池状态信息(安装在飞机左边电池槽)
+     * </pre>
+     *
+     * <code>.BatteryStateInfo firstBatteryInfo = 4;</code>
+     * @return Whether the firstBatteryInfo field is set.
+     */
+    @java.lang.Override
+    public boolean hasFirstBatteryInfo() {
+      return firstBatteryInfo_ != null;
+    }
+    /**
+     * <pre>
+     *第一块电池状态信息(安装在飞机左边电池槽)
+     * </pre>
+     *
+     * <code>.BatteryStateInfo firstBatteryInfo = 4;</code>
+     * @return The firstBatteryInfo.
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo getFirstBatteryInfo() {
+      return firstBatteryInfo_ == null ? com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo.getDefaultInstance() : firstBatteryInfo_;
+    }
+    /**
+     * <pre>
+     *第一块电池状态信息(安装在飞机左边电池槽)
+     * </pre>
+     *
+     * <code>.BatteryStateInfo firstBatteryInfo = 4;</code>
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfoOrBuilder getFirstBatteryInfoOrBuilder() {
+      return getFirstBatteryInfo();
+    }
+
+    public static final int SECONDBATTERYINFO_FIELD_NUMBER = 5;
+    private com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo secondBatteryInfo_;
+    /**
+     * <pre>
+     *第二块电池状态信息(安装在飞机右边电池槽)
+     * </pre>
+     *
+     * <code>.BatteryStateInfo secondBatteryInfo = 5;</code>
+     * @return Whether the secondBatteryInfo field is set.
+     */
+    @java.lang.Override
+    public boolean hasSecondBatteryInfo() {
+      return secondBatteryInfo_ != null;
+    }
+    /**
+     * <pre>
+     *第二块电池状态信息(安装在飞机右边电池槽)
+     * </pre>
+     *
+     * <code>.BatteryStateInfo secondBatteryInfo = 5;</code>
+     * @return The secondBatteryInfo.
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo getSecondBatteryInfo() {
+      return secondBatteryInfo_ == null ? com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo.getDefaultInstance() : secondBatteryInfo_;
+    }
+    /**
+     * <pre>
+     *第二块电池状态信息(安装在飞机右边电池槽)
+     * </pre>
+     *
+     * <code>.BatteryStateInfo secondBatteryInfo = 5;</code>
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfoOrBuilder getSecondBatteryInfoOrBuilder() {
+      return getSecondBatteryInfo();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (batteryNum_ != 0) {
+        output.writeUInt32(1, batteryNum_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(batteryPower_)) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, batteryPower_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(batteryVoltage_)) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, batteryVoltage_);
+      }
+      if (firstBatteryInfo_ != null) {
+        output.writeMessage(4, getFirstBatteryInfo());
+      }
+      if (secondBatteryInfo_ != null) {
+        output.writeMessage(5, getSecondBatteryInfo());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (batteryNum_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(1, batteryNum_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(batteryPower_)) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, batteryPower_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(batteryVoltage_)) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, batteryVoltage_);
+      }
+      if (firstBatteryInfo_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, getFirstBatteryInfo());
+      }
+      if (secondBatteryInfo_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, getSecondBatteryInfo());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState)) {
+        return super.equals(obj);
+      }
+      com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState other = (com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState) obj;
+
+      if (getBatteryNum()
+          != other.getBatteryNum()) return false;
+      if (!getBatteryPower()
+          .equals(other.getBatteryPower())) return false;
+      if (!getBatteryVoltage()
+          .equals(other.getBatteryVoltage())) return false;
+      if (hasFirstBatteryInfo() != other.hasFirstBatteryInfo()) return false;
+      if (hasFirstBatteryInfo()) {
+        if (!getFirstBatteryInfo()
+            .equals(other.getFirstBatteryInfo())) return false;
+      }
+      if (hasSecondBatteryInfo() != other.hasSecondBatteryInfo()) return false;
+      if (hasSecondBatteryInfo()) {
+        if (!getSecondBatteryInfo()
+            .equals(other.getSecondBatteryInfo())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + BATTERYNUM_FIELD_NUMBER;
+      hash = (53 * hash) + getBatteryNum();
+      hash = (37 * hash) + BATTERYPOWER_FIELD_NUMBER;
+      hash = (53 * hash) + getBatteryPower().hashCode();
+      hash = (37 * hash) + BATTERYVOLTAGE_FIELD_NUMBER;
+      hash = (53 * hash) + getBatteryVoltage().hashCode();
+      if (hasFirstBatteryInfo()) {
+        hash = (37 * hash) + FIRSTBATTERYINFO_FIELD_NUMBER;
+        hash = (53 * hash) + getFirstBatteryInfo().hashCode();
+      }
+      if (hasSecondBatteryInfo()) {
+        hash = (37 * hash) + SECONDBATTERYINFO_FIELD_NUMBER;
+        hash = (53 * hash) + getSecondBatteryInfo().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     *电池状态
+     * </pre>
+     *
+     * Protobuf type {@code BatteryState}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:BatteryState)
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_BatteryState_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_BatteryState_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState.class, com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState.Builder.class);
+      }
+
+      // Construct using com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        batteryNum_ = 0;
+
+        batteryPower_ = "";
+
+        batteryVoltage_ = "";
+
+        if (firstBatteryInfoBuilder_ == null) {
+          firstBatteryInfo_ = null;
+        } else {
+          firstBatteryInfo_ = null;
+          firstBatteryInfoBuilder_ = null;
+        }
+        if (secondBatteryInfoBuilder_ == null) {
+          secondBatteryInfo_ = null;
+        } else {
+          secondBatteryInfo_ = null;
+          secondBatteryInfoBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_BatteryState_descriptor;
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState getDefaultInstanceForType() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState build() {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState buildPartial() {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState result = new com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState(this);
+        result.batteryNum_ = batteryNum_;
+        result.batteryPower_ = batteryPower_;
+        result.batteryVoltage_ = batteryVoltage_;
+        if (firstBatteryInfoBuilder_ == null) {
+          result.firstBatteryInfo_ = firstBatteryInfo_;
+        } else {
+          result.firstBatteryInfo_ = firstBatteryInfoBuilder_.build();
+        }
+        if (secondBatteryInfoBuilder_ == null) {
+          result.secondBatteryInfo_ = secondBatteryInfo_;
+        } else {
+          result.secondBatteryInfo_ = secondBatteryInfoBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState) {
+          return mergeFrom((com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState other) {
+        if (other == com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState.getDefaultInstance()) return this;
+        if (other.getBatteryNum() != 0) {
+          setBatteryNum(other.getBatteryNum());
+        }
+        if (!other.getBatteryPower().isEmpty()) {
+          batteryPower_ = other.batteryPower_;
+          onChanged();
+        }
+        if (!other.getBatteryVoltage().isEmpty()) {
+          batteryVoltage_ = other.batteryVoltage_;
+          onChanged();
+        }
+        if (other.hasFirstBatteryInfo()) {
+          mergeFirstBatteryInfo(other.getFirstBatteryInfo());
+        }
+        if (other.hasSecondBatteryInfo()) {
+          mergeSecondBatteryInfo(other.getSecondBatteryInfo());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private int batteryNum_ ;
+      /**
+       * <pre>
+       *电池数量
+       * </pre>
+       *
+       * <code>uint32 batteryNum = 1;</code>
+       * @return The batteryNum.
+       */
+      @java.lang.Override
+      public int getBatteryNum() {
+        return batteryNum_;
+      }
+      /**
+       * <pre>
+       *电池数量
+       * </pre>
+       *
+       * <code>uint32 batteryNum = 1;</code>
+       * @param value The batteryNum to set.
+       * @return This builder for chaining.
+       */
+      public Builder setBatteryNum(int value) {
+        
+        batteryNum_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *电池数量
+       * </pre>
+       *
+       * <code>uint32 batteryNum = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearBatteryNum() {
+        
+        batteryNum_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object batteryPower_ = "";
+      /**
+       * <pre>
+       *电池电量,多个电池以下划线分割,如:80_60
+       * </pre>
+       *
+       * <code>string batteryPower = 2;</code>
+       * @return The batteryPower.
+       */
+      public java.lang.String getBatteryPower() {
+        java.lang.Object ref = batteryPower_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          batteryPower_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       *电池电量,多个电池以下划线分割,如:80_60
+       * </pre>
+       *
+       * <code>string batteryPower = 2;</code>
+       * @return The bytes for batteryPower.
+       */
+      public com.google.protobuf.ByteString
+          getBatteryPowerBytes() {
+        java.lang.Object ref = batteryPower_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          batteryPower_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       *电池电量,多个电池以下划线分割,如:80_60
+       * </pre>
+       *
+       * <code>string batteryPower = 2;</code>
+       * @param value The batteryPower to set.
+       * @return This builder for chaining.
+       */
+      public Builder setBatteryPower(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        batteryPower_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *电池电量,多个电池以下划线分割,如:80_60
+       * </pre>
+       *
+       * <code>string batteryPower = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearBatteryPower() {
+        
+        batteryPower_ = getDefaultInstance().getBatteryPower();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *电池电量,多个电池以下划线分割,如:80_60
+       * </pre>
+       *
+       * <code>string batteryPower = 2;</code>
+       * @param value The bytes for batteryPower to set.
+       * @return This builder for chaining.
+       */
+      public Builder setBatteryPowerBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        batteryPower_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object batteryVoltage_ = "";
+      /**
+       * <pre>
+       *电池电压,多个电池以下划线分割,如:40_30(单位:V)[注意:如果2块电池电压差大于0.7V,飞机限制起飞]
+       * </pre>
+       *
+       * <code>string batteryVoltage = 3;</code>
+       * @return The batteryVoltage.
+       */
+      public java.lang.String getBatteryVoltage() {
+        java.lang.Object ref = batteryVoltage_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          batteryVoltage_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       *电池电压,多个电池以下划线分割,如:40_30(单位:V)[注意:如果2块电池电压差大于0.7V,飞机限制起飞]
+       * </pre>
+       *
+       * <code>string batteryVoltage = 3;</code>
+       * @return The bytes for batteryVoltage.
+       */
+      public com.google.protobuf.ByteString
+          getBatteryVoltageBytes() {
+        java.lang.Object ref = batteryVoltage_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          batteryVoltage_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       *电池电压,多个电池以下划线分割,如:40_30(单位:V)[注意:如果2块电池电压差大于0.7V,飞机限制起飞]
+       * </pre>
+       *
+       * <code>string batteryVoltage = 3;</code>
+       * @param value The batteryVoltage to set.
+       * @return This builder for chaining.
+       */
+      public Builder setBatteryVoltage(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        batteryVoltage_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *电池电压,多个电池以下划线分割,如:40_30(单位:V)[注意:如果2块电池电压差大于0.7V,飞机限制起飞]
+       * </pre>
+       *
+       * <code>string batteryVoltage = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearBatteryVoltage() {
+        
+        batteryVoltage_ = getDefaultInstance().getBatteryVoltage();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *电池电压,多个电池以下划线分割,如:40_30(单位:V)[注意:如果2块电池电压差大于0.7V,飞机限制起飞]
+       * </pre>
+       *
+       * <code>string batteryVoltage = 3;</code>
+       * @param value The bytes for batteryVoltage to set.
+       * @return This builder for chaining.
+       */
+      public Builder setBatteryVoltageBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        batteryVoltage_ = value;
+        onChanged();
+        return this;
+      }
+
+      private com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo firstBatteryInfo_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo, com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfoOrBuilder> firstBatteryInfoBuilder_;
+      /**
+       * <pre>
+       *第一块电池状态信息(安装在飞机左边电池槽)
+       * </pre>
+       *
+       * <code>.BatteryStateInfo firstBatteryInfo = 4;</code>
+       * @return Whether the firstBatteryInfo field is set.
+       */
+      public boolean hasFirstBatteryInfo() {
+        return firstBatteryInfoBuilder_ != null || firstBatteryInfo_ != null;
+      }
+      /**
+       * <pre>
+       *第一块电池状态信息(安装在飞机左边电池槽)
+       * </pre>
+       *
+       * <code>.BatteryStateInfo firstBatteryInfo = 4;</code>
+       * @return The firstBatteryInfo.
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo getFirstBatteryInfo() {
+        if (firstBatteryInfoBuilder_ == null) {
+          return firstBatteryInfo_ == null ? com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo.getDefaultInstance() : firstBatteryInfo_;
+        } else {
+          return firstBatteryInfoBuilder_.getMessage();
+        }
+      }
+      /**
+       * <pre>
+       *第一块电池状态信息(安装在飞机左边电池槽)
+       * </pre>
+       *
+       * <code>.BatteryStateInfo firstBatteryInfo = 4;</code>
+       */
+      public Builder setFirstBatteryInfo(com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo value) {
+        if (firstBatteryInfoBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          firstBatteryInfo_ = value;
+          onChanged();
+        } else {
+          firstBatteryInfoBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *第一块电池状态信息(安装在飞机左边电池槽)
+       * </pre>
+       *
+       * <code>.BatteryStateInfo firstBatteryInfo = 4;</code>
+       */
+      public Builder setFirstBatteryInfo(
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo.Builder builderForValue) {
+        if (firstBatteryInfoBuilder_ == null) {
+          firstBatteryInfo_ = builderForValue.build();
+          onChanged();
+        } else {
+          firstBatteryInfoBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *第一块电池状态信息(安装在飞机左边电池槽)
+       * </pre>
+       *
+       * <code>.BatteryStateInfo firstBatteryInfo = 4;</code>
+       */
+      public Builder mergeFirstBatteryInfo(com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo value) {
+        if (firstBatteryInfoBuilder_ == null) {
+          if (firstBatteryInfo_ != null) {
+            firstBatteryInfo_ =
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo.newBuilder(firstBatteryInfo_).mergeFrom(value).buildPartial();
+          } else {
+            firstBatteryInfo_ = value;
+          }
+          onChanged();
+        } else {
+          firstBatteryInfoBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *第一块电池状态信息(安装在飞机左边电池槽)
+       * </pre>
+       *
+       * <code>.BatteryStateInfo firstBatteryInfo = 4;</code>
+       */
+      public Builder clearFirstBatteryInfo() {
+        if (firstBatteryInfoBuilder_ == null) {
+          firstBatteryInfo_ = null;
+          onChanged();
+        } else {
+          firstBatteryInfo_ = null;
+          firstBatteryInfoBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *第一块电池状态信息(安装在飞机左边电池槽)
+       * </pre>
+       *
+       * <code>.BatteryStateInfo firstBatteryInfo = 4;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo.Builder getFirstBatteryInfoBuilder() {
+        
+        onChanged();
+        return getFirstBatteryInfoFieldBuilder().getBuilder();
+      }
+      /**
+       * <pre>
+       *第一块电池状态信息(安装在飞机左边电池槽)
+       * </pre>
+       *
+       * <code>.BatteryStateInfo firstBatteryInfo = 4;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfoOrBuilder getFirstBatteryInfoOrBuilder() {
+        if (firstBatteryInfoBuilder_ != null) {
+          return firstBatteryInfoBuilder_.getMessageOrBuilder();
+        } else {
+          return firstBatteryInfo_ == null ?
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo.getDefaultInstance() : firstBatteryInfo_;
+        }
+      }
+      /**
+       * <pre>
+       *第一块电池状态信息(安装在飞机左边电池槽)
+       * </pre>
+       *
+       * <code>.BatteryStateInfo firstBatteryInfo = 4;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo, com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfoOrBuilder> 
+          getFirstBatteryInfoFieldBuilder() {
+        if (firstBatteryInfoBuilder_ == null) {
+          firstBatteryInfoBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo, com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfoOrBuilder>(
+                  getFirstBatteryInfo(),
+                  getParentForChildren(),
+                  isClean());
+          firstBatteryInfo_ = null;
+        }
+        return firstBatteryInfoBuilder_;
+      }
+
+      private com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo secondBatteryInfo_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo, com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfoOrBuilder> secondBatteryInfoBuilder_;
+      /**
+       * <pre>
+       *第二块电池状态信息(安装在飞机右边电池槽)
+       * </pre>
+       *
+       * <code>.BatteryStateInfo secondBatteryInfo = 5;</code>
+       * @return Whether the secondBatteryInfo field is set.
+       */
+      public boolean hasSecondBatteryInfo() {
+        return secondBatteryInfoBuilder_ != null || secondBatteryInfo_ != null;
+      }
+      /**
+       * <pre>
+       *第二块电池状态信息(安装在飞机右边电池槽)
+       * </pre>
+       *
+       * <code>.BatteryStateInfo secondBatteryInfo = 5;</code>
+       * @return The secondBatteryInfo.
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo getSecondBatteryInfo() {
+        if (secondBatteryInfoBuilder_ == null) {
+          return secondBatteryInfo_ == null ? com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo.getDefaultInstance() : secondBatteryInfo_;
+        } else {
+          return secondBatteryInfoBuilder_.getMessage();
+        }
+      }
+      /**
+       * <pre>
+       *第二块电池状态信息(安装在飞机右边电池槽)
+       * </pre>
+       *
+       * <code>.BatteryStateInfo secondBatteryInfo = 5;</code>
+       */
+      public Builder setSecondBatteryInfo(com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo value) {
+        if (secondBatteryInfoBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          secondBatteryInfo_ = value;
+          onChanged();
+        } else {
+          secondBatteryInfoBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *第二块电池状态信息(安装在飞机右边电池槽)
+       * </pre>
+       *
+       * <code>.BatteryStateInfo secondBatteryInfo = 5;</code>
+       */
+      public Builder setSecondBatteryInfo(
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo.Builder builderForValue) {
+        if (secondBatteryInfoBuilder_ == null) {
+          secondBatteryInfo_ = builderForValue.build();
+          onChanged();
+        } else {
+          secondBatteryInfoBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *第二块电池状态信息(安装在飞机右边电池槽)
+       * </pre>
+       *
+       * <code>.BatteryStateInfo secondBatteryInfo = 5;</code>
+       */
+      public Builder mergeSecondBatteryInfo(com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo value) {
+        if (secondBatteryInfoBuilder_ == null) {
+          if (secondBatteryInfo_ != null) {
+            secondBatteryInfo_ =
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo.newBuilder(secondBatteryInfo_).mergeFrom(value).buildPartial();
+          } else {
+            secondBatteryInfo_ = value;
+          }
+          onChanged();
+        } else {
+          secondBatteryInfoBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *第二块电池状态信息(安装在飞机右边电池槽)
+       * </pre>
+       *
+       * <code>.BatteryStateInfo secondBatteryInfo = 5;</code>
+       */
+      public Builder clearSecondBatteryInfo() {
+        if (secondBatteryInfoBuilder_ == null) {
+          secondBatteryInfo_ = null;
+          onChanged();
+        } else {
+          secondBatteryInfo_ = null;
+          secondBatteryInfoBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *第二块电池状态信息(安装在飞机右边电池槽)
+       * </pre>
+       *
+       * <code>.BatteryStateInfo secondBatteryInfo = 5;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo.Builder getSecondBatteryInfoBuilder() {
+        
+        onChanged();
+        return getSecondBatteryInfoFieldBuilder().getBuilder();
+      }
+      /**
+       * <pre>
+       *第二块电池状态信息(安装在飞机右边电池槽)
+       * </pre>
+       *
+       * <code>.BatteryStateInfo secondBatteryInfo = 5;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfoOrBuilder getSecondBatteryInfoOrBuilder() {
+        if (secondBatteryInfoBuilder_ != null) {
+          return secondBatteryInfoBuilder_.getMessageOrBuilder();
+        } else {
+          return secondBatteryInfo_ == null ?
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo.getDefaultInstance() : secondBatteryInfo_;
+        }
+      }
+      /**
+       * <pre>
+       *第二块电池状态信息(安装在飞机右边电池槽)
+       * </pre>
+       *
+       * <code>.BatteryStateInfo secondBatteryInfo = 5;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo, com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfoOrBuilder> 
+          getSecondBatteryInfoFieldBuilder() {
+        if (secondBatteryInfoBuilder_ == null) {
+          secondBatteryInfoBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo, com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfoOrBuilder>(
+                  getSecondBatteryInfo(),
+                  getParentForChildren(),
+                  isClean());
+          secondBatteryInfo_ = null;
+        }
+        return secondBatteryInfoBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:BatteryState)
+    }
+
+    // @@protoc_insertion_point(class_scope:BatteryState)
+    private static final com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState();
+    }
+
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<BatteryState>
+        PARSER = new com.google.protobuf.AbstractParser<BatteryState>() {
+      @java.lang.Override
+      public BatteryState parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new BatteryState(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<BatteryState> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<BatteryState> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryState getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface BatteryStateInfoOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:BatteryStateInfo)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <pre>
+     *电池插入飞机状态(注意:如果未插入所有电池信息不可用):0=插入,1=未插入
+     * </pre>
+     *
+     * <code>uint32 isBatteryEmbed = 1;</code>
+     * @return The isBatteryEmbed.
+     */
+    int getIsBatteryEmbed();
+
+    /**
+     * <pre>
+     *电池电量百分比
+     * </pre>
+     *
+     * <code>uint32 batteryCapacityPercent = 2;</code>
+     * @return The batteryCapacityPercent.
+     */
+    int getBatteryCapacityPercent();
+
+    /**
+     * <pre>
+     *电池电压(单位:mV)
+     * </pre>
+     *
+     * <code>int32 currentVoltage = 3;</code>
+     * @return The currentVoltage.
+     */
+    int getCurrentVoltage();
+
+    /**
+     * <pre>
+     *当前电池电流(单位:mA)
+     * </pre>
+     *
+     * <code>int32 currentElectric = 4;</code>
+     * @return The currentElectric.
+     */
+    int getCurrentElectric();
+
+    /**
+     * <pre>
+     *满电池容量(单位:mAh)
+     * </pre>
+     *
+     * <code>uint32 fullCapacity = 5;</code>
+     * @return The fullCapacity.
+     */
+    int getFullCapacity();
+
+    /**
+     * <pre>
+     *剩余电池容量(单位:mAh)
+     * </pre>
+     *
+     * <code>uint32 remainedCapacity = 6;</code>
+     * @return The remainedCapacity.
+     */
+    int getRemainedCapacity();
+
+    /**
+     * <pre>
+     *电池温度(单位:摄氏度)
+     * </pre>
+     *
+     * <code>float batteryTemperature = 7;</code>
+     * @return The batteryTemperature.
+     */
+    float getBatteryTemperature();
+
+    /**
+     * <pre>
+     *电池组数(电池硬件型号有关)
+     * </pre>
+     *
+     * <code>uint32 cellCount = 8;</code>
+     * @return The cellCount.
+     */
+    int getCellCount();
+
+    /**
+     * <pre>
+     *电池循环健康状态:0=正常,1=警报,2=注意安全
+     * </pre>
+     *
+     * <code>uint32 batSOHState = 9;</code>
+     * @return The batSOHState.
+     */
+    int getBatSOHState();
+
+    /**
+     * <pre>
+     *相对功率百分比(Relative power percentage)	
+     * </pre>
+     *
+     * <code>uint32 sop = 10;</code>
+     * @return The sop.
+     */
+    int getSop();
+
+    /**
+     * <pre>
+     *电池加热状态:0=未加热,1=加热中,2=保持恒温
+     * </pre>
+     *
+     * <code>uint32 heatState = 11;</code>
+     * @return The heatState.
+     */
+    int getHeatState();
+
+    /**
+     * <pre>
+     *电池SOC荷电状态: 0=SOC正常,1=SOC_ABNORMAL_HIGH,2=SOC_JUMP_DOWN,3=SOC_JUMP_UP,4=SOC_INVALID
+     * </pre>
+     *
+     * <code>uint32 socState = 12;</code>
+     * @return The socState.
+     */
+    int getSocState();
+
+    /**
+     * <pre>
+     *电池自检错误标志(注意:如果此值非0,就是电池损坏需要维修):0=正常,1=电池自检NTC异常,2=电池自检MOS异常,3=电池自检采样电阻异常,4=电池电芯损坏,5=电池未校准,6=电量计参数异常
+     * </pre>
+     *
+     * <code>uint32 selfCheckError = 13;</code>
+     * @return The selfCheckError.
+     */
+    int getSelfCheckError();
+  }
+  /**
+   * <pre>
+   *电池状态信息
+   * </pre>
+   *
+   * Protobuf type {@code BatteryStateInfo}
+   */
+  public static final class BatteryStateInfo extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:BatteryStateInfo)
+      BatteryStateInfoOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use BatteryStateInfo.newBuilder() to construct.
+    private BatteryStateInfo(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private BatteryStateInfo() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new BatteryStateInfo();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private BatteryStateInfo(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 8: {
+
+              isBatteryEmbed_ = input.readUInt32();
+              break;
+            }
+            case 16: {
+
+              batteryCapacityPercent_ = input.readUInt32();
+              break;
+            }
+            case 24: {
+
+              currentVoltage_ = input.readInt32();
+              break;
+            }
+            case 32: {
+
+              currentElectric_ = input.readInt32();
+              break;
+            }
+            case 40: {
+
+              fullCapacity_ = input.readUInt32();
+              break;
+            }
+            case 48: {
+
+              remainedCapacity_ = input.readUInt32();
+              break;
+            }
+            case 61: {
+
+              batteryTemperature_ = input.readFloat();
+              break;
+            }
+            case 64: {
+
+              cellCount_ = input.readUInt32();
+              break;
+            }
+            case 72: {
+
+              batSOHState_ = input.readUInt32();
+              break;
+            }
+            case 80: {
+
+              sop_ = input.readUInt32();
+              break;
+            }
+            case 88: {
+
+              heatState_ = input.readUInt32();
+              break;
+            }
+            case 96: {
+
+              socState_ = input.readUInt32();
+              break;
+            }
+            case 104: {
+
+              selfCheckError_ = input.readUInt32();
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_BatteryStateInfo_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_BatteryStateInfo_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo.class, com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo.Builder.class);
+    }
+
+    public static final int ISBATTERYEMBED_FIELD_NUMBER = 1;
+    private int isBatteryEmbed_;
+    /**
+     * <pre>
+     *电池插入飞机状态(注意:如果未插入所有电池信息不可用):0=插入,1=未插入
+     * </pre>
+     *
+     * <code>uint32 isBatteryEmbed = 1;</code>
+     * @return The isBatteryEmbed.
+     */
+    @java.lang.Override
+    public int getIsBatteryEmbed() {
+      return isBatteryEmbed_;
+    }
+
+    public static final int BATTERYCAPACITYPERCENT_FIELD_NUMBER = 2;
+    private int batteryCapacityPercent_;
+    /**
+     * <pre>
+     *电池电量百分比
+     * </pre>
+     *
+     * <code>uint32 batteryCapacityPercent = 2;</code>
+     * @return The batteryCapacityPercent.
+     */
+    @java.lang.Override
+    public int getBatteryCapacityPercent() {
+      return batteryCapacityPercent_;
+    }
+
+    public static final int CURRENTVOLTAGE_FIELD_NUMBER = 3;
+    private int currentVoltage_;
+    /**
+     * <pre>
+     *电池电压(单位:mV)
+     * </pre>
+     *
+     * <code>int32 currentVoltage = 3;</code>
+     * @return The currentVoltage.
+     */
+    @java.lang.Override
+    public int getCurrentVoltage() {
+      return currentVoltage_;
+    }
+
+    public static final int CURRENTELECTRIC_FIELD_NUMBER = 4;
+    private int currentElectric_;
+    /**
+     * <pre>
+     *当前电池电流(单位:mA)
+     * </pre>
+     *
+     * <code>int32 currentElectric = 4;</code>
+     * @return The currentElectric.
+     */
+    @java.lang.Override
+    public int getCurrentElectric() {
+      return currentElectric_;
+    }
+
+    public static final int FULLCAPACITY_FIELD_NUMBER = 5;
+    private int fullCapacity_;
+    /**
+     * <pre>
+     *满电池容量(单位:mAh)
+     * </pre>
+     *
+     * <code>uint32 fullCapacity = 5;</code>
+     * @return The fullCapacity.
+     */
+    @java.lang.Override
+    public int getFullCapacity() {
+      return fullCapacity_;
+    }
+
+    public static final int REMAINEDCAPACITY_FIELD_NUMBER = 6;
+    private int remainedCapacity_;
+    /**
+     * <pre>
+     *剩余电池容量(单位:mAh)
+     * </pre>
+     *
+     * <code>uint32 remainedCapacity = 6;</code>
+     * @return The remainedCapacity.
+     */
+    @java.lang.Override
+    public int getRemainedCapacity() {
+      return remainedCapacity_;
+    }
+
+    public static final int BATTERYTEMPERATURE_FIELD_NUMBER = 7;
+    private float batteryTemperature_;
+    /**
+     * <pre>
+     *电池温度(单位:摄氏度)
+     * </pre>
+     *
+     * <code>float batteryTemperature = 7;</code>
+     * @return The batteryTemperature.
+     */
+    @java.lang.Override
+    public float getBatteryTemperature() {
+      return batteryTemperature_;
+    }
+
+    public static final int CELLCOUNT_FIELD_NUMBER = 8;
+    private int cellCount_;
+    /**
+     * <pre>
+     *电池组数(电池硬件型号有关)
+     * </pre>
+     *
+     * <code>uint32 cellCount = 8;</code>
+     * @return The cellCount.
+     */
+    @java.lang.Override
+    public int getCellCount() {
+      return cellCount_;
+    }
+
+    public static final int BATSOHSTATE_FIELD_NUMBER = 9;
+    private int batSOHState_;
+    /**
+     * <pre>
+     *电池循环健康状态:0=正常,1=警报,2=注意安全
+     * </pre>
+     *
+     * <code>uint32 batSOHState = 9;</code>
+     * @return The batSOHState.
+     */
+    @java.lang.Override
+    public int getBatSOHState() {
+      return batSOHState_;
+    }
+
+    public static final int SOP_FIELD_NUMBER = 10;
+    private int sop_;
+    /**
+     * <pre>
+     *相对功率百分比(Relative power percentage)	
+     * </pre>
+     *
+     * <code>uint32 sop = 10;</code>
+     * @return The sop.
+     */
+    @java.lang.Override
+    public int getSop() {
+      return sop_;
+    }
+
+    public static final int HEATSTATE_FIELD_NUMBER = 11;
+    private int heatState_;
+    /**
+     * <pre>
+     *电池加热状态:0=未加热,1=加热中,2=保持恒温
+     * </pre>
+     *
+     * <code>uint32 heatState = 11;</code>
+     * @return The heatState.
+     */
+    @java.lang.Override
+    public int getHeatState() {
+      return heatState_;
+    }
+
+    public static final int SOCSTATE_FIELD_NUMBER = 12;
+    private int socState_;
+    /**
+     * <pre>
+     *电池SOC荷电状态: 0=SOC正常,1=SOC_ABNORMAL_HIGH,2=SOC_JUMP_DOWN,3=SOC_JUMP_UP,4=SOC_INVALID
+     * </pre>
+     *
+     * <code>uint32 socState = 12;</code>
+     * @return The socState.
+     */
+    @java.lang.Override
+    public int getSocState() {
+      return socState_;
+    }
+
+    public static final int SELFCHECKERROR_FIELD_NUMBER = 13;
+    private int selfCheckError_;
+    /**
+     * <pre>
+     *电池自检错误标志(注意:如果此值非0,就是电池损坏需要维修):0=正常,1=电池自检NTC异常,2=电池自检MOS异常,3=电池自检采样电阻异常,4=电池电芯损坏,5=电池未校准,6=电量计参数异常
+     * </pre>
+     *
+     * <code>uint32 selfCheckError = 13;</code>
+     * @return The selfCheckError.
+     */
+    @java.lang.Override
+    public int getSelfCheckError() {
+      return selfCheckError_;
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (isBatteryEmbed_ != 0) {
+        output.writeUInt32(1, isBatteryEmbed_);
+      }
+      if (batteryCapacityPercent_ != 0) {
+        output.writeUInt32(2, batteryCapacityPercent_);
+      }
+      if (currentVoltage_ != 0) {
+        output.writeInt32(3, currentVoltage_);
+      }
+      if (currentElectric_ != 0) {
+        output.writeInt32(4, currentElectric_);
+      }
+      if (fullCapacity_ != 0) {
+        output.writeUInt32(5, fullCapacity_);
+      }
+      if (remainedCapacity_ != 0) {
+        output.writeUInt32(6, remainedCapacity_);
+      }
+      if (java.lang.Float.floatToRawIntBits(batteryTemperature_) != 0) {
+        output.writeFloat(7, batteryTemperature_);
+      }
+      if (cellCount_ != 0) {
+        output.writeUInt32(8, cellCount_);
+      }
+      if (batSOHState_ != 0) {
+        output.writeUInt32(9, batSOHState_);
+      }
+      if (sop_ != 0) {
+        output.writeUInt32(10, sop_);
+      }
+      if (heatState_ != 0) {
+        output.writeUInt32(11, heatState_);
+      }
+      if (socState_ != 0) {
+        output.writeUInt32(12, socState_);
+      }
+      if (selfCheckError_ != 0) {
+        output.writeUInt32(13, selfCheckError_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (isBatteryEmbed_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(1, isBatteryEmbed_);
+      }
+      if (batteryCapacityPercent_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(2, batteryCapacityPercent_);
+      }
+      if (currentVoltage_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(3, currentVoltage_);
+      }
+      if (currentElectric_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(4, currentElectric_);
+      }
+      if (fullCapacity_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(5, fullCapacity_);
+      }
+      if (remainedCapacity_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(6, remainedCapacity_);
+      }
+      if (java.lang.Float.floatToRawIntBits(batteryTemperature_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(7, batteryTemperature_);
+      }
+      if (cellCount_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(8, cellCount_);
+      }
+      if (batSOHState_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(9, batSOHState_);
+      }
+      if (sop_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(10, sop_);
+      }
+      if (heatState_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(11, heatState_);
+      }
+      if (socState_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(12, socState_);
+      }
+      if (selfCheckError_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(13, selfCheckError_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo)) {
+        return super.equals(obj);
+      }
+      com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo other = (com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo) obj;
+
+      if (getIsBatteryEmbed()
+          != other.getIsBatteryEmbed()) return false;
+      if (getBatteryCapacityPercent()
+          != other.getBatteryCapacityPercent()) return false;
+      if (getCurrentVoltage()
+          != other.getCurrentVoltage()) return false;
+      if (getCurrentElectric()
+          != other.getCurrentElectric()) return false;
+      if (getFullCapacity()
+          != other.getFullCapacity()) return false;
+      if (getRemainedCapacity()
+          != other.getRemainedCapacity()) return false;
+      if (java.lang.Float.floatToIntBits(getBatteryTemperature())
+          != java.lang.Float.floatToIntBits(
+              other.getBatteryTemperature())) return false;
+      if (getCellCount()
+          != other.getCellCount()) return false;
+      if (getBatSOHState()
+          != other.getBatSOHState()) return false;
+      if (getSop()
+          != other.getSop()) return false;
+      if (getHeatState()
+          != other.getHeatState()) return false;
+      if (getSocState()
+          != other.getSocState()) return false;
+      if (getSelfCheckError()
+          != other.getSelfCheckError()) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + ISBATTERYEMBED_FIELD_NUMBER;
+      hash = (53 * hash) + getIsBatteryEmbed();
+      hash = (37 * hash) + BATTERYCAPACITYPERCENT_FIELD_NUMBER;
+      hash = (53 * hash) + getBatteryCapacityPercent();
+      hash = (37 * hash) + CURRENTVOLTAGE_FIELD_NUMBER;
+      hash = (53 * hash) + getCurrentVoltage();
+      hash = (37 * hash) + CURRENTELECTRIC_FIELD_NUMBER;
+      hash = (53 * hash) + getCurrentElectric();
+      hash = (37 * hash) + FULLCAPACITY_FIELD_NUMBER;
+      hash = (53 * hash) + getFullCapacity();
+      hash = (37 * hash) + REMAINEDCAPACITY_FIELD_NUMBER;
+      hash = (53 * hash) + getRemainedCapacity();
+      hash = (37 * hash) + BATTERYTEMPERATURE_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getBatteryTemperature());
+      hash = (37 * hash) + CELLCOUNT_FIELD_NUMBER;
+      hash = (53 * hash) + getCellCount();
+      hash = (37 * hash) + BATSOHSTATE_FIELD_NUMBER;
+      hash = (53 * hash) + getBatSOHState();
+      hash = (37 * hash) + SOP_FIELD_NUMBER;
+      hash = (53 * hash) + getSop();
+      hash = (37 * hash) + HEATSTATE_FIELD_NUMBER;
+      hash = (53 * hash) + getHeatState();
+      hash = (37 * hash) + SOCSTATE_FIELD_NUMBER;
+      hash = (53 * hash) + getSocState();
+      hash = (37 * hash) + SELFCHECKERROR_FIELD_NUMBER;
+      hash = (53 * hash) + getSelfCheckError();
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     *电池状态信息
+     * </pre>
+     *
+     * Protobuf type {@code BatteryStateInfo}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:BatteryStateInfo)
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfoOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_BatteryStateInfo_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_BatteryStateInfo_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo.class, com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo.Builder.class);
+      }
+
+      // Construct using com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        isBatteryEmbed_ = 0;
+
+        batteryCapacityPercent_ = 0;
+
+        currentVoltage_ = 0;
+
+        currentElectric_ = 0;
+
+        fullCapacity_ = 0;
+
+        remainedCapacity_ = 0;
+
+        batteryTemperature_ = 0F;
+
+        cellCount_ = 0;
+
+        batSOHState_ = 0;
+
+        sop_ = 0;
+
+        heatState_ = 0;
+
+        socState_ = 0;
+
+        selfCheckError_ = 0;
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_BatteryStateInfo_descriptor;
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo getDefaultInstanceForType() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo build() {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo buildPartial() {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo result = new com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo(this);
+        result.isBatteryEmbed_ = isBatteryEmbed_;
+        result.batteryCapacityPercent_ = batteryCapacityPercent_;
+        result.currentVoltage_ = currentVoltage_;
+        result.currentElectric_ = currentElectric_;
+        result.fullCapacity_ = fullCapacity_;
+        result.remainedCapacity_ = remainedCapacity_;
+        result.batteryTemperature_ = batteryTemperature_;
+        result.cellCount_ = cellCount_;
+        result.batSOHState_ = batSOHState_;
+        result.sop_ = sop_;
+        result.heatState_ = heatState_;
+        result.socState_ = socState_;
+        result.selfCheckError_ = selfCheckError_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo) {
+          return mergeFrom((com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo other) {
+        if (other == com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo.getDefaultInstance()) return this;
+        if (other.getIsBatteryEmbed() != 0) {
+          setIsBatteryEmbed(other.getIsBatteryEmbed());
+        }
+        if (other.getBatteryCapacityPercent() != 0) {
+          setBatteryCapacityPercent(other.getBatteryCapacityPercent());
+        }
+        if (other.getCurrentVoltage() != 0) {
+          setCurrentVoltage(other.getCurrentVoltage());
+        }
+        if (other.getCurrentElectric() != 0) {
+          setCurrentElectric(other.getCurrentElectric());
+        }
+        if (other.getFullCapacity() != 0) {
+          setFullCapacity(other.getFullCapacity());
+        }
+        if (other.getRemainedCapacity() != 0) {
+          setRemainedCapacity(other.getRemainedCapacity());
+        }
+        if (other.getBatteryTemperature() != 0F) {
+          setBatteryTemperature(other.getBatteryTemperature());
+        }
+        if (other.getCellCount() != 0) {
+          setCellCount(other.getCellCount());
+        }
+        if (other.getBatSOHState() != 0) {
+          setBatSOHState(other.getBatSOHState());
+        }
+        if (other.getSop() != 0) {
+          setSop(other.getSop());
+        }
+        if (other.getHeatState() != 0) {
+          setHeatState(other.getHeatState());
+        }
+        if (other.getSocState() != 0) {
+          setSocState(other.getSocState());
+        }
+        if (other.getSelfCheckError() != 0) {
+          setSelfCheckError(other.getSelfCheckError());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private int isBatteryEmbed_ ;
+      /**
+       * <pre>
+       *电池插入飞机状态(注意:如果未插入所有电池信息不可用):0=插入,1=未插入
+       * </pre>
+       *
+       * <code>uint32 isBatteryEmbed = 1;</code>
+       * @return The isBatteryEmbed.
+       */
+      @java.lang.Override
+      public int getIsBatteryEmbed() {
+        return isBatteryEmbed_;
+      }
+      /**
+       * <pre>
+       *电池插入飞机状态(注意:如果未插入所有电池信息不可用):0=插入,1=未插入
+       * </pre>
+       *
+       * <code>uint32 isBatteryEmbed = 1;</code>
+       * @param value The isBatteryEmbed to set.
+       * @return This builder for chaining.
+       */
+      public Builder setIsBatteryEmbed(int value) {
+        
+        isBatteryEmbed_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *电池插入飞机状态(注意:如果未插入所有电池信息不可用):0=插入,1=未插入
+       * </pre>
+       *
+       * <code>uint32 isBatteryEmbed = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearIsBatteryEmbed() {
+        
+        isBatteryEmbed_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int batteryCapacityPercent_ ;
+      /**
+       * <pre>
+       *电池电量百分比
+       * </pre>
+       *
+       * <code>uint32 batteryCapacityPercent = 2;</code>
+       * @return The batteryCapacityPercent.
+       */
+      @java.lang.Override
+      public int getBatteryCapacityPercent() {
+        return batteryCapacityPercent_;
+      }
+      /**
+       * <pre>
+       *电池电量百分比
+       * </pre>
+       *
+       * <code>uint32 batteryCapacityPercent = 2;</code>
+       * @param value The batteryCapacityPercent to set.
+       * @return This builder for chaining.
+       */
+      public Builder setBatteryCapacityPercent(int value) {
+        
+        batteryCapacityPercent_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *电池电量百分比
+       * </pre>
+       *
+       * <code>uint32 batteryCapacityPercent = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearBatteryCapacityPercent() {
+        
+        batteryCapacityPercent_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int currentVoltage_ ;
+      /**
+       * <pre>
+       *电池电压(单位:mV)
+       * </pre>
+       *
+       * <code>int32 currentVoltage = 3;</code>
+       * @return The currentVoltage.
+       */
+      @java.lang.Override
+      public int getCurrentVoltage() {
+        return currentVoltage_;
+      }
+      /**
+       * <pre>
+       *电池电压(单位:mV)
+       * </pre>
+       *
+       * <code>int32 currentVoltage = 3;</code>
+       * @param value The currentVoltage to set.
+       * @return This builder for chaining.
+       */
+      public Builder setCurrentVoltage(int value) {
+        
+        currentVoltage_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *电池电压(单位:mV)
+       * </pre>
+       *
+       * <code>int32 currentVoltage = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearCurrentVoltage() {
+        
+        currentVoltage_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int currentElectric_ ;
+      /**
+       * <pre>
+       *当前电池电流(单位:mA)
+       * </pre>
+       *
+       * <code>int32 currentElectric = 4;</code>
+       * @return The currentElectric.
+       */
+      @java.lang.Override
+      public int getCurrentElectric() {
+        return currentElectric_;
+      }
+      /**
+       * <pre>
+       *当前电池电流(单位:mA)
+       * </pre>
+       *
+       * <code>int32 currentElectric = 4;</code>
+       * @param value The currentElectric to set.
+       * @return This builder for chaining.
+       */
+      public Builder setCurrentElectric(int value) {
+        
+        currentElectric_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *当前电池电流(单位:mA)
+       * </pre>
+       *
+       * <code>int32 currentElectric = 4;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearCurrentElectric() {
+        
+        currentElectric_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int fullCapacity_ ;
+      /**
+       * <pre>
+       *满电池容量(单位:mAh)
+       * </pre>
+       *
+       * <code>uint32 fullCapacity = 5;</code>
+       * @return The fullCapacity.
+       */
+      @java.lang.Override
+      public int getFullCapacity() {
+        return fullCapacity_;
+      }
+      /**
+       * <pre>
+       *满电池容量(单位:mAh)
+       * </pre>
+       *
+       * <code>uint32 fullCapacity = 5;</code>
+       * @param value The fullCapacity to set.
+       * @return This builder for chaining.
+       */
+      public Builder setFullCapacity(int value) {
+        
+        fullCapacity_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *满电池容量(单位:mAh)
+       * </pre>
+       *
+       * <code>uint32 fullCapacity = 5;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearFullCapacity() {
+        
+        fullCapacity_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int remainedCapacity_ ;
+      /**
+       * <pre>
+       *剩余电池容量(单位:mAh)
+       * </pre>
+       *
+       * <code>uint32 remainedCapacity = 6;</code>
+       * @return The remainedCapacity.
+       */
+      @java.lang.Override
+      public int getRemainedCapacity() {
+        return remainedCapacity_;
+      }
+      /**
+       * <pre>
+       *剩余电池容量(单位:mAh)
+       * </pre>
+       *
+       * <code>uint32 remainedCapacity = 6;</code>
+       * @param value The remainedCapacity to set.
+       * @return This builder for chaining.
+       */
+      public Builder setRemainedCapacity(int value) {
+        
+        remainedCapacity_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *剩余电池容量(单位:mAh)
+       * </pre>
+       *
+       * <code>uint32 remainedCapacity = 6;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearRemainedCapacity() {
+        
+        remainedCapacity_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private float batteryTemperature_ ;
+      /**
+       * <pre>
+       *电池温度(单位:摄氏度)
+       * </pre>
+       *
+       * <code>float batteryTemperature = 7;</code>
+       * @return The batteryTemperature.
+       */
+      @java.lang.Override
+      public float getBatteryTemperature() {
+        return batteryTemperature_;
+      }
+      /**
+       * <pre>
+       *电池温度(单位:摄氏度)
+       * </pre>
+       *
+       * <code>float batteryTemperature = 7;</code>
+       * @param value The batteryTemperature to set.
+       * @return This builder for chaining.
+       */
+      public Builder setBatteryTemperature(float value) {
+        
+        batteryTemperature_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *电池温度(单位:摄氏度)
+       * </pre>
+       *
+       * <code>float batteryTemperature = 7;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearBatteryTemperature() {
+        
+        batteryTemperature_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private int cellCount_ ;
+      /**
+       * <pre>
+       *电池组数(电池硬件型号有关)
+       * </pre>
+       *
+       * <code>uint32 cellCount = 8;</code>
+       * @return The cellCount.
+       */
+      @java.lang.Override
+      public int getCellCount() {
+        return cellCount_;
+      }
+      /**
+       * <pre>
+       *电池组数(电池硬件型号有关)
+       * </pre>
+       *
+       * <code>uint32 cellCount = 8;</code>
+       * @param value The cellCount to set.
+       * @return This builder for chaining.
+       */
+      public Builder setCellCount(int value) {
+        
+        cellCount_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *电池组数(电池硬件型号有关)
+       * </pre>
+       *
+       * <code>uint32 cellCount = 8;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearCellCount() {
+        
+        cellCount_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int batSOHState_ ;
+      /**
+       * <pre>
+       *电池循环健康状态:0=正常,1=警报,2=注意安全
+       * </pre>
+       *
+       * <code>uint32 batSOHState = 9;</code>
+       * @return The batSOHState.
+       */
+      @java.lang.Override
+      public int getBatSOHState() {
+        return batSOHState_;
+      }
+      /**
+       * <pre>
+       *电池循环健康状态:0=正常,1=警报,2=注意安全
+       * </pre>
+       *
+       * <code>uint32 batSOHState = 9;</code>
+       * @param value The batSOHState to set.
+       * @return This builder for chaining.
+       */
+      public Builder setBatSOHState(int value) {
+        
+        batSOHState_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *电池循环健康状态:0=正常,1=警报,2=注意安全
+       * </pre>
+       *
+       * <code>uint32 batSOHState = 9;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearBatSOHState() {
+        
+        batSOHState_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int sop_ ;
+      /**
+       * <pre>
+       *相对功率百分比(Relative power percentage)	
+       * </pre>
+       *
+       * <code>uint32 sop = 10;</code>
+       * @return The sop.
+       */
+      @java.lang.Override
+      public int getSop() {
+        return sop_;
+      }
+      /**
+       * <pre>
+       *相对功率百分比(Relative power percentage)	
+       * </pre>
+       *
+       * <code>uint32 sop = 10;</code>
+       * @param value The sop to set.
+       * @return This builder for chaining.
+       */
+      public Builder setSop(int value) {
+        
+        sop_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *相对功率百分比(Relative power percentage)	
+       * </pre>
+       *
+       * <code>uint32 sop = 10;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearSop() {
+        
+        sop_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int heatState_ ;
+      /**
+       * <pre>
+       *电池加热状态:0=未加热,1=加热中,2=保持恒温
+       * </pre>
+       *
+       * <code>uint32 heatState = 11;</code>
+       * @return The heatState.
+       */
+      @java.lang.Override
+      public int getHeatState() {
+        return heatState_;
+      }
+      /**
+       * <pre>
+       *电池加热状态:0=未加热,1=加热中,2=保持恒温
+       * </pre>
+       *
+       * <code>uint32 heatState = 11;</code>
+       * @param value The heatState to set.
+       * @return This builder for chaining.
+       */
+      public Builder setHeatState(int value) {
+        
+        heatState_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *电池加热状态:0=未加热,1=加热中,2=保持恒温
+       * </pre>
+       *
+       * <code>uint32 heatState = 11;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearHeatState() {
+        
+        heatState_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int socState_ ;
+      /**
+       * <pre>
+       *电池SOC荷电状态: 0=SOC正常,1=SOC_ABNORMAL_HIGH,2=SOC_JUMP_DOWN,3=SOC_JUMP_UP,4=SOC_INVALID
+       * </pre>
+       *
+       * <code>uint32 socState = 12;</code>
+       * @return The socState.
+       */
+      @java.lang.Override
+      public int getSocState() {
+        return socState_;
+      }
+      /**
+       * <pre>
+       *电池SOC荷电状态: 0=SOC正常,1=SOC_ABNORMAL_HIGH,2=SOC_JUMP_DOWN,3=SOC_JUMP_UP,4=SOC_INVALID
+       * </pre>
+       *
+       * <code>uint32 socState = 12;</code>
+       * @param value The socState to set.
+       * @return This builder for chaining.
+       */
+      public Builder setSocState(int value) {
+        
+        socState_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *电池SOC荷电状态: 0=SOC正常,1=SOC_ABNORMAL_HIGH,2=SOC_JUMP_DOWN,3=SOC_JUMP_UP,4=SOC_INVALID
+       * </pre>
+       *
+       * <code>uint32 socState = 12;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearSocState() {
+        
+        socState_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int selfCheckError_ ;
+      /**
+       * <pre>
+       *电池自检错误标志(注意:如果此值非0,就是电池损坏需要维修):0=正常,1=电池自检NTC异常,2=电池自检MOS异常,3=电池自检采样电阻异常,4=电池电芯损坏,5=电池未校准,6=电量计参数异常
+       * </pre>
+       *
+       * <code>uint32 selfCheckError = 13;</code>
+       * @return The selfCheckError.
+       */
+      @java.lang.Override
+      public int getSelfCheckError() {
+        return selfCheckError_;
+      }
+      /**
+       * <pre>
+       *电池自检错误标志(注意:如果此值非0,就是电池损坏需要维修):0=正常,1=电池自检NTC异常,2=电池自检MOS异常,3=电池自检采样电阻异常,4=电池电芯损坏,5=电池未校准,6=电量计参数异常
+       * </pre>
+       *
+       * <code>uint32 selfCheckError = 13;</code>
+       * @param value The selfCheckError to set.
+       * @return This builder for chaining.
+       */
+      public Builder setSelfCheckError(int value) {
+        
+        selfCheckError_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *电池自检错误标志(注意:如果此值非0,就是电池损坏需要维修):0=正常,1=电池自检NTC异常,2=电池自检MOS异常,3=电池自检采样电阻异常,4=电池电芯损坏,5=电池未校准,6=电量计参数异常
+       * </pre>
+       *
+       * <code>uint32 selfCheckError = 13;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearSelfCheckError() {
+        
+        selfCheckError_ = 0;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:BatteryStateInfo)
+    }
+
+    // @@protoc_insertion_point(class_scope:BatteryStateInfo)
+    private static final com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo();
+    }
+
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<BatteryStateInfo>
+        PARSER = new com.google.protobuf.AbstractParser<BatteryStateInfo>() {
+      @java.lang.Override
+      public BatteryStateInfo parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new BatteryStateInfo(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<BatteryStateInfo> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<BatteryStateInfo> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.BatteryStateInfo getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface PtzStateOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:PtzState)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <pre>
+     *俯仰角 范围:-120° ~ 30°
+     * </pre>
+     *
+     * <code>float pitch = 1;</code>
+     * @return The pitch.
+     */
+    float getPitch();
+
+    /**
+     * <pre>
+     *横滚角 范围:-90° ~ 60°
+     * </pre>
+     *
+     * <code>float roll = 2;</code>
+     * @return The roll.
+     */
+    float getRoll();
+
+    /**
+     * <pre>
+     *偏航角  范围:-180° ~ 180°
+     * </pre>
+     *
+     * <code>float yaw = 3;</code>
+     * @return The yaw.
+     */
+    float getYaw();
+
+    /**
+     * <pre>
+     *云台模式 1=自由模式,2=跟随模式,3=FPV模式
+     * </pre>
+     *
+     * <code>uint32 gimbalMode = 4;</code>
+     * @return The gimbalMode.
+     */
+    int getGimbalMode();
+  }
+  /**
+   * <pre>
+   *云台状态
+   * </pre>
+   *
+   * Protobuf type {@code PtzState}
+   */
+  public static final class PtzState extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:PtzState)
+      PtzStateOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use PtzState.newBuilder() to construct.
+    private PtzState(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private PtzState() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new PtzState();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private PtzState(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 13: {
+
+              pitch_ = input.readFloat();
+              break;
+            }
+            case 21: {
+
+              roll_ = input.readFloat();
+              break;
+            }
+            case 29: {
+
+              yaw_ = input.readFloat();
+              break;
+            }
+            case 32: {
+
+              gimbalMode_ = input.readUInt32();
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_PtzState_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_PtzState_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState.class, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState.Builder.class);
+    }
+
+    public static final int PITCH_FIELD_NUMBER = 1;
+    private float pitch_;
+    /**
+     * <pre>
+     *俯仰角 范围:-120° ~ 30°
+     * </pre>
+     *
+     * <code>float pitch = 1;</code>
+     * @return The pitch.
+     */
+    @java.lang.Override
+    public float getPitch() {
+      return pitch_;
+    }
+
+    public static final int ROLL_FIELD_NUMBER = 2;
+    private float roll_;
+    /**
+     * <pre>
+     *横滚角 范围:-90° ~ 60°
+     * </pre>
+     *
+     * <code>float roll = 2;</code>
+     * @return The roll.
+     */
+    @java.lang.Override
+    public float getRoll() {
+      return roll_;
+    }
+
+    public static final int YAW_FIELD_NUMBER = 3;
+    private float yaw_;
+    /**
+     * <pre>
+     *偏航角  范围:-180° ~ 180°
+     * </pre>
+     *
+     * <code>float yaw = 3;</code>
+     * @return The yaw.
+     */
+    @java.lang.Override
+    public float getYaw() {
+      return yaw_;
+    }
+
+    public static final int GIMBALMODE_FIELD_NUMBER = 4;
+    private int gimbalMode_;
+    /**
+     * <pre>
+     *云台模式 1=自由模式,2=跟随模式,3=FPV模式
+     * </pre>
+     *
+     * <code>uint32 gimbalMode = 4;</code>
+     * @return The gimbalMode.
+     */
+    @java.lang.Override
+    public int getGimbalMode() {
+      return gimbalMode_;
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (java.lang.Float.floatToRawIntBits(pitch_) != 0) {
+        output.writeFloat(1, pitch_);
+      }
+      if (java.lang.Float.floatToRawIntBits(roll_) != 0) {
+        output.writeFloat(2, roll_);
+      }
+      if (java.lang.Float.floatToRawIntBits(yaw_) != 0) {
+        output.writeFloat(3, yaw_);
+      }
+      if (gimbalMode_ != 0) {
+        output.writeUInt32(4, gimbalMode_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (java.lang.Float.floatToRawIntBits(pitch_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(1, pitch_);
+      }
+      if (java.lang.Float.floatToRawIntBits(roll_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(2, roll_);
+      }
+      if (java.lang.Float.floatToRawIntBits(yaw_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(3, yaw_);
+      }
+      if (gimbalMode_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(4, gimbalMode_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState)) {
+        return super.equals(obj);
+      }
+      com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState other = (com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState) obj;
+
+      if (java.lang.Float.floatToIntBits(getPitch())
+          != java.lang.Float.floatToIntBits(
+              other.getPitch())) return false;
+      if (java.lang.Float.floatToIntBits(getRoll())
+          != java.lang.Float.floatToIntBits(
+              other.getRoll())) return false;
+      if (java.lang.Float.floatToIntBits(getYaw())
+          != java.lang.Float.floatToIntBits(
+              other.getYaw())) return false;
+      if (getGimbalMode()
+          != other.getGimbalMode()) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + PITCH_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getPitch());
+      hash = (37 * hash) + ROLL_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getRoll());
+      hash = (37 * hash) + YAW_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getYaw());
+      hash = (37 * hash) + GIMBALMODE_FIELD_NUMBER;
+      hash = (53 * hash) + getGimbalMode();
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     *云台状态
+     * </pre>
+     *
+     * Protobuf type {@code PtzState}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:PtzState)
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzStateOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_PtzState_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_PtzState_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState.class, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState.Builder.class);
+      }
+
+      // Construct using com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        pitch_ = 0F;
+
+        roll_ = 0F;
+
+        yaw_ = 0F;
+
+        gimbalMode_ = 0;
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_PtzState_descriptor;
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState getDefaultInstanceForType() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState build() {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState buildPartial() {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState result = new com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState(this);
+        result.pitch_ = pitch_;
+        result.roll_ = roll_;
+        result.yaw_ = yaw_;
+        result.gimbalMode_ = gimbalMode_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState) {
+          return mergeFrom((com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState other) {
+        if (other == com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState.getDefaultInstance()) return this;
+        if (other.getPitch() != 0F) {
+          setPitch(other.getPitch());
+        }
+        if (other.getRoll() != 0F) {
+          setRoll(other.getRoll());
+        }
+        if (other.getYaw() != 0F) {
+          setYaw(other.getYaw());
+        }
+        if (other.getGimbalMode() != 0) {
+          setGimbalMode(other.getGimbalMode());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private float pitch_ ;
+      /**
+       * <pre>
+       *俯仰角 范围:-120° ~ 30°
+       * </pre>
+       *
+       * <code>float pitch = 1;</code>
+       * @return The pitch.
+       */
+      @java.lang.Override
+      public float getPitch() {
+        return pitch_;
+      }
+      /**
+       * <pre>
+       *俯仰角 范围:-120° ~ 30°
+       * </pre>
+       *
+       * <code>float pitch = 1;</code>
+       * @param value The pitch to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPitch(float value) {
+        
+        pitch_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *俯仰角 范围:-120° ~ 30°
+       * </pre>
+       *
+       * <code>float pitch = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearPitch() {
+        
+        pitch_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private float roll_ ;
+      /**
+       * <pre>
+       *横滚角 范围:-90° ~ 60°
+       * </pre>
+       *
+       * <code>float roll = 2;</code>
+       * @return The roll.
+       */
+      @java.lang.Override
+      public float getRoll() {
+        return roll_;
+      }
+      /**
+       * <pre>
+       *横滚角 范围:-90° ~ 60°
+       * </pre>
+       *
+       * <code>float roll = 2;</code>
+       * @param value The roll to set.
+       * @return This builder for chaining.
+       */
+      public Builder setRoll(float value) {
+        
+        roll_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *横滚角 范围:-90° ~ 60°
+       * </pre>
+       *
+       * <code>float roll = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearRoll() {
+        
+        roll_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private float yaw_ ;
+      /**
+       * <pre>
+       *偏航角  范围:-180° ~ 180°
+       * </pre>
+       *
+       * <code>float yaw = 3;</code>
+       * @return The yaw.
+       */
+      @java.lang.Override
+      public float getYaw() {
+        return yaw_;
+      }
+      /**
+       * <pre>
+       *偏航角  范围:-180° ~ 180°
+       * </pre>
+       *
+       * <code>float yaw = 3;</code>
+       * @param value The yaw to set.
+       * @return This builder for chaining.
+       */
+      public Builder setYaw(float value) {
+        
+        yaw_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *偏航角  范围:-180° ~ 180°
+       * </pre>
+       *
+       * <code>float yaw = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearYaw() {
+        
+        yaw_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private int gimbalMode_ ;
+      /**
+       * <pre>
+       *云台模式 1=自由模式,2=跟随模式,3=FPV模式
+       * </pre>
+       *
+       * <code>uint32 gimbalMode = 4;</code>
+       * @return The gimbalMode.
+       */
+      @java.lang.Override
+      public int getGimbalMode() {
+        return gimbalMode_;
+      }
+      /**
+       * <pre>
+       *云台模式 1=自由模式,2=跟随模式,3=FPV模式
+       * </pre>
+       *
+       * <code>uint32 gimbalMode = 4;</code>
+       * @param value The gimbalMode to set.
+       * @return This builder for chaining.
+       */
+      public Builder setGimbalMode(int value) {
+        
+        gimbalMode_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *云台模式 1=自由模式,2=跟随模式,3=FPV模式
+       * </pre>
+       *
+       * <code>uint32 gimbalMode = 4;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearGimbalMode() {
+        
+        gimbalMode_ = 0;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:PtzState)
+    }
+
+    // @@protoc_insertion_point(class_scope:PtzState)
+    private static final com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState();
+    }
+
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<PtzState>
+        PARSER = new com.google.protobuf.AbstractParser<PtzState>() {
+      @java.lang.Override
+      public PtzState parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new PtzState(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<PtzState> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<PtzState> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PtzState getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface CameraStateOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:CameraState)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <pre>
+     *相机模式:1=拍照模式,2=录像模式,0=未知
+     * </pre>
+     *
+     * <code>uint32 mode = 1;</code>
+     * @return The mode.
+     */
+    int getMode();
+
+    /**
+     * <pre>
+     *是否录制中:1=录制中,0=未录制
+     * </pre>
+     *
+     * <code>uint32 isRecording = 2;</code>
+     * @return The isRecording.
+     */
+    int getIsRecording();
+
+    /**
+     * <pre>
+     *录制时长(单位:秒)
+     * </pre>
+     *
+     * <code>uint32 recordDuration = 3;</code>
+     * @return The recordDuration.
+     */
+    int getRecordDuration();
+
+    /**
+     * <pre>
+     *相机视源:0=可见,1=变焦,2=红外
+     * </pre>
+     *
+     * <code>uint32 source = 4;</code>
+     * @return The source.
+     */
+    int getSource();
+
+    /**
+     * <pre>
+     *相机: 0=FPV,1=相机(1),2=相机(2)
+     * </pre>
+     *
+     * <code>uint32 camera = 5;</code>
+     * @return The camera.
+     */
+    int getCamera();
+
+    /**
+     * <pre>
+     *相机当前变焦倍数
+     * </pre>
+     *
+     * <code>float zoomfactor = 6;</code>
+     * @return The zoomfactor.
+     */
+    float getZoomfactor();
+
+    /**
+     * <pre>
+     *水平像素(例如:1920)
+     * </pre>
+     *
+     * <code>uint32 width = 7;</code>
+     * @return The width.
+     */
+    int getWidth();
+
+    /**
+     * <pre>
+     *垂直像素(例如:1080)
+     * </pre>
+     *
+     * <code>uint32 height = 8;</code>
+     * @return The height.
+     */
+    int getHeight();
+
+    /**
+     * <pre>
+     *帧率(例如:30)
+     * </pre>
+     *
+     * <code>uint32 frameRate = 9;</code>
+     * @return The frameRate.
+     */
+    int getFrameRate();
+
+    /**
+     * <pre>
+     *码率(单位:0.001)(例如:6兆设置值为6000)
+     * </pre>
+     *
+     * <code>uint32 bitstream = 10;</code>
+     * @return The bitstream.
+     */
+    int getBitstream();
+
+    /**
+     * <pre>
+     *单点测温状态:0=非单点测温中,1=单点测温中
+     * </pre>
+     *
+     * <code>uint32 pointThermometrying = 11;</code>
+     * @return The pointThermometrying.
+     */
+    int getPointThermometrying();
+
+    /**
+     * <pre>
+     *区域测温状态:0=非区域测温中,1=区域测温中
+     * </pre>
+     *
+     * <code>uint32 areaThermometrying = 12;</code>
+     * @return The areaThermometrying.
+     */
+    int getAreaThermometrying();
+
+    /**
+     * <pre>
+     *激光测距状态:0=非激光测距中,1=激光测距中
+     * </pre>
+     *
+     * <code>uint32 laserRanging = 13;</code>
+     * @return The laserRanging.
+     */
+    int getLaserRanging();
+  }
+  /**
+   * <pre>
+   *相机状态
+   * </pre>
+   *
+   * Protobuf type {@code CameraState}
+   */
+  public static final class CameraState extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:CameraState)
+      CameraStateOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use CameraState.newBuilder() to construct.
+    private CameraState(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private CameraState() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new CameraState();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private CameraState(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 8: {
+
+              mode_ = input.readUInt32();
+              break;
+            }
+            case 16: {
+
+              isRecording_ = input.readUInt32();
+              break;
+            }
+            case 24: {
+
+              recordDuration_ = input.readUInt32();
+              break;
+            }
+            case 32: {
+
+              source_ = input.readUInt32();
+              break;
+            }
+            case 40: {
+
+              camera_ = input.readUInt32();
+              break;
+            }
+            case 53: {
+
+              zoomfactor_ = input.readFloat();
+              break;
+            }
+            case 56: {
+
+              width_ = input.readUInt32();
+              break;
+            }
+            case 64: {
+
+              height_ = input.readUInt32();
+              break;
+            }
+            case 72: {
+
+              frameRate_ = input.readUInt32();
+              break;
+            }
+            case 80: {
+
+              bitstream_ = input.readUInt32();
+              break;
+            }
+            case 88: {
+
+              pointThermometrying_ = input.readUInt32();
+              break;
+            }
+            case 96: {
+
+              areaThermometrying_ = input.readUInt32();
+              break;
+            }
+            case 104: {
+
+              laserRanging_ = input.readUInt32();
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_CameraState_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_CameraState_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState.class, com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState.Builder.class);
+    }
+
+    public static final int MODE_FIELD_NUMBER = 1;
+    private int mode_;
+    /**
+     * <pre>
+     *相机模式:1=拍照模式,2=录像模式,0=未知
+     * </pre>
+     *
+     * <code>uint32 mode = 1;</code>
+     * @return The mode.
+     */
+    @java.lang.Override
+    public int getMode() {
+      return mode_;
+    }
+
+    public static final int ISRECORDING_FIELD_NUMBER = 2;
+    private int isRecording_;
+    /**
+     * <pre>
+     *是否录制中:1=录制中,0=未录制
+     * </pre>
+     *
+     * <code>uint32 isRecording = 2;</code>
+     * @return The isRecording.
+     */
+    @java.lang.Override
+    public int getIsRecording() {
+      return isRecording_;
+    }
+
+    public static final int RECORDDURATION_FIELD_NUMBER = 3;
+    private int recordDuration_;
+    /**
+     * <pre>
+     *录制时长(单位:秒)
+     * </pre>
+     *
+     * <code>uint32 recordDuration = 3;</code>
+     * @return The recordDuration.
+     */
+    @java.lang.Override
+    public int getRecordDuration() {
+      return recordDuration_;
+    }
+
+    public static final int SOURCE_FIELD_NUMBER = 4;
+    private int source_;
+    /**
+     * <pre>
+     *相机视源:0=可见,1=变焦,2=红外
+     * </pre>
+     *
+     * <code>uint32 source = 4;</code>
+     * @return The source.
+     */
+    @java.lang.Override
+    public int getSource() {
+      return source_;
+    }
+
+    public static final int CAMERA_FIELD_NUMBER = 5;
+    private int camera_;
+    /**
+     * <pre>
+     *相机: 0=FPV,1=相机(1),2=相机(2)
+     * </pre>
+     *
+     * <code>uint32 camera = 5;</code>
+     * @return The camera.
+     */
+    @java.lang.Override
+    public int getCamera() {
+      return camera_;
+    }
+
+    public static final int ZOOMFACTOR_FIELD_NUMBER = 6;
+    private float zoomfactor_;
+    /**
+     * <pre>
+     *相机当前变焦倍数
+     * </pre>
+     *
+     * <code>float zoomfactor = 6;</code>
+     * @return The zoomfactor.
+     */
+    @java.lang.Override
+    public float getZoomfactor() {
+      return zoomfactor_;
+    }
+
+    public static final int WIDTH_FIELD_NUMBER = 7;
+    private int width_;
+    /**
+     * <pre>
+     *水平像素(例如:1920)
+     * </pre>
+     *
+     * <code>uint32 width = 7;</code>
+     * @return The width.
+     */
+    @java.lang.Override
+    public int getWidth() {
+      return width_;
+    }
+
+    public static final int HEIGHT_FIELD_NUMBER = 8;
+    private int height_;
+    /**
+     * <pre>
+     *垂直像素(例如:1080)
+     * </pre>
+     *
+     * <code>uint32 height = 8;</code>
+     * @return The height.
+     */
+    @java.lang.Override
+    public int getHeight() {
+      return height_;
+    }
+
+    public static final int FRAMERATE_FIELD_NUMBER = 9;
+    private int frameRate_;
+    /**
+     * <pre>
+     *帧率(例如:30)
+     * </pre>
+     *
+     * <code>uint32 frameRate = 9;</code>
+     * @return The frameRate.
+     */
+    @java.lang.Override
+    public int getFrameRate() {
+      return frameRate_;
+    }
+
+    public static final int BITSTREAM_FIELD_NUMBER = 10;
+    private int bitstream_;
+    /**
+     * <pre>
+     *码率(单位:0.001)(例如:6兆设置值为6000)
+     * </pre>
+     *
+     * <code>uint32 bitstream = 10;</code>
+     * @return The bitstream.
+     */
+    @java.lang.Override
+    public int getBitstream() {
+      return bitstream_;
+    }
+
+    public static final int POINTTHERMOMETRYING_FIELD_NUMBER = 11;
+    private int pointThermometrying_;
+    /**
+     * <pre>
+     *单点测温状态:0=非单点测温中,1=单点测温中
+     * </pre>
+     *
+     * <code>uint32 pointThermometrying = 11;</code>
+     * @return The pointThermometrying.
+     */
+    @java.lang.Override
+    public int getPointThermometrying() {
+      return pointThermometrying_;
+    }
+
+    public static final int AREATHERMOMETRYING_FIELD_NUMBER = 12;
+    private int areaThermometrying_;
+    /**
+     * <pre>
+     *区域测温状态:0=非区域测温中,1=区域测温中
+     * </pre>
+     *
+     * <code>uint32 areaThermometrying = 12;</code>
+     * @return The areaThermometrying.
+     */
+    @java.lang.Override
+    public int getAreaThermometrying() {
+      return areaThermometrying_;
+    }
+
+    public static final int LASERRANGING_FIELD_NUMBER = 13;
+    private int laserRanging_;
+    /**
+     * <pre>
+     *激光测距状态:0=非激光测距中,1=激光测距中
+     * </pre>
+     *
+     * <code>uint32 laserRanging = 13;</code>
+     * @return The laserRanging.
+     */
+    @java.lang.Override
+    public int getLaserRanging() {
+      return laserRanging_;
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (mode_ != 0) {
+        output.writeUInt32(1, mode_);
+      }
+      if (isRecording_ != 0) {
+        output.writeUInt32(2, isRecording_);
+      }
+      if (recordDuration_ != 0) {
+        output.writeUInt32(3, recordDuration_);
+      }
+      if (source_ != 0) {
+        output.writeUInt32(4, source_);
+      }
+      if (camera_ != 0) {
+        output.writeUInt32(5, camera_);
+      }
+      if (java.lang.Float.floatToRawIntBits(zoomfactor_) != 0) {
+        output.writeFloat(6, zoomfactor_);
+      }
+      if (width_ != 0) {
+        output.writeUInt32(7, width_);
+      }
+      if (height_ != 0) {
+        output.writeUInt32(8, height_);
+      }
+      if (frameRate_ != 0) {
+        output.writeUInt32(9, frameRate_);
+      }
+      if (bitstream_ != 0) {
+        output.writeUInt32(10, bitstream_);
+      }
+      if (pointThermometrying_ != 0) {
+        output.writeUInt32(11, pointThermometrying_);
+      }
+      if (areaThermometrying_ != 0) {
+        output.writeUInt32(12, areaThermometrying_);
+      }
+      if (laserRanging_ != 0) {
+        output.writeUInt32(13, laserRanging_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (mode_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(1, mode_);
+      }
+      if (isRecording_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(2, isRecording_);
+      }
+      if (recordDuration_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(3, recordDuration_);
+      }
+      if (source_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(4, source_);
+      }
+      if (camera_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(5, camera_);
+      }
+      if (java.lang.Float.floatToRawIntBits(zoomfactor_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(6, zoomfactor_);
+      }
+      if (width_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(7, width_);
+      }
+      if (height_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(8, height_);
+      }
+      if (frameRate_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(9, frameRate_);
+      }
+      if (bitstream_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(10, bitstream_);
+      }
+      if (pointThermometrying_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(11, pointThermometrying_);
+      }
+      if (areaThermometrying_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(12, areaThermometrying_);
+      }
+      if (laserRanging_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(13, laserRanging_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState)) {
+        return super.equals(obj);
+      }
+      com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState other = (com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState) obj;
+
+      if (getMode()
+          != other.getMode()) return false;
+      if (getIsRecording()
+          != other.getIsRecording()) return false;
+      if (getRecordDuration()
+          != other.getRecordDuration()) return false;
+      if (getSource()
+          != other.getSource()) return false;
+      if (getCamera()
+          != other.getCamera()) return false;
+      if (java.lang.Float.floatToIntBits(getZoomfactor())
+          != java.lang.Float.floatToIntBits(
+              other.getZoomfactor())) return false;
+      if (getWidth()
+          != other.getWidth()) return false;
+      if (getHeight()
+          != other.getHeight()) return false;
+      if (getFrameRate()
+          != other.getFrameRate()) return false;
+      if (getBitstream()
+          != other.getBitstream()) return false;
+      if (getPointThermometrying()
+          != other.getPointThermometrying()) return false;
+      if (getAreaThermometrying()
+          != other.getAreaThermometrying()) return false;
+      if (getLaserRanging()
+          != other.getLaserRanging()) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + MODE_FIELD_NUMBER;
+      hash = (53 * hash) + getMode();
+      hash = (37 * hash) + ISRECORDING_FIELD_NUMBER;
+      hash = (53 * hash) + getIsRecording();
+      hash = (37 * hash) + RECORDDURATION_FIELD_NUMBER;
+      hash = (53 * hash) + getRecordDuration();
+      hash = (37 * hash) + SOURCE_FIELD_NUMBER;
+      hash = (53 * hash) + getSource();
+      hash = (37 * hash) + CAMERA_FIELD_NUMBER;
+      hash = (53 * hash) + getCamera();
+      hash = (37 * hash) + ZOOMFACTOR_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getZoomfactor());
+      hash = (37 * hash) + WIDTH_FIELD_NUMBER;
+      hash = (53 * hash) + getWidth();
+      hash = (37 * hash) + HEIGHT_FIELD_NUMBER;
+      hash = (53 * hash) + getHeight();
+      hash = (37 * hash) + FRAMERATE_FIELD_NUMBER;
+      hash = (53 * hash) + getFrameRate();
+      hash = (37 * hash) + BITSTREAM_FIELD_NUMBER;
+      hash = (53 * hash) + getBitstream();
+      hash = (37 * hash) + POINTTHERMOMETRYING_FIELD_NUMBER;
+      hash = (53 * hash) + getPointThermometrying();
+      hash = (37 * hash) + AREATHERMOMETRYING_FIELD_NUMBER;
+      hash = (53 * hash) + getAreaThermometrying();
+      hash = (37 * hash) + LASERRANGING_FIELD_NUMBER;
+      hash = (53 * hash) + getLaserRanging();
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     *相机状态
+     * </pre>
+     *
+     * Protobuf type {@code CameraState}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:CameraState)
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraStateOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_CameraState_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_CameraState_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState.class, com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState.Builder.class);
+      }
+
+      // Construct using com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        mode_ = 0;
+
+        isRecording_ = 0;
+
+        recordDuration_ = 0;
+
+        source_ = 0;
+
+        camera_ = 0;
+
+        zoomfactor_ = 0F;
+
+        width_ = 0;
+
+        height_ = 0;
+
+        frameRate_ = 0;
+
+        bitstream_ = 0;
+
+        pointThermometrying_ = 0;
+
+        areaThermometrying_ = 0;
+
+        laserRanging_ = 0;
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_CameraState_descriptor;
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState getDefaultInstanceForType() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState build() {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState buildPartial() {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState result = new com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState(this);
+        result.mode_ = mode_;
+        result.isRecording_ = isRecording_;
+        result.recordDuration_ = recordDuration_;
+        result.source_ = source_;
+        result.camera_ = camera_;
+        result.zoomfactor_ = zoomfactor_;
+        result.width_ = width_;
+        result.height_ = height_;
+        result.frameRate_ = frameRate_;
+        result.bitstream_ = bitstream_;
+        result.pointThermometrying_ = pointThermometrying_;
+        result.areaThermometrying_ = areaThermometrying_;
+        result.laserRanging_ = laserRanging_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState) {
+          return mergeFrom((com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState other) {
+        if (other == com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState.getDefaultInstance()) return this;
+        if (other.getMode() != 0) {
+          setMode(other.getMode());
+        }
+        if (other.getIsRecording() != 0) {
+          setIsRecording(other.getIsRecording());
+        }
+        if (other.getRecordDuration() != 0) {
+          setRecordDuration(other.getRecordDuration());
+        }
+        if (other.getSource() != 0) {
+          setSource(other.getSource());
+        }
+        if (other.getCamera() != 0) {
+          setCamera(other.getCamera());
+        }
+        if (other.getZoomfactor() != 0F) {
+          setZoomfactor(other.getZoomfactor());
+        }
+        if (other.getWidth() != 0) {
+          setWidth(other.getWidth());
+        }
+        if (other.getHeight() != 0) {
+          setHeight(other.getHeight());
+        }
+        if (other.getFrameRate() != 0) {
+          setFrameRate(other.getFrameRate());
+        }
+        if (other.getBitstream() != 0) {
+          setBitstream(other.getBitstream());
+        }
+        if (other.getPointThermometrying() != 0) {
+          setPointThermometrying(other.getPointThermometrying());
+        }
+        if (other.getAreaThermometrying() != 0) {
+          setAreaThermometrying(other.getAreaThermometrying());
+        }
+        if (other.getLaserRanging() != 0) {
+          setLaserRanging(other.getLaserRanging());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private int mode_ ;
+      /**
+       * <pre>
+       *相机模式:1=拍照模式,2=录像模式,0=未知
+       * </pre>
+       *
+       * <code>uint32 mode = 1;</code>
+       * @return The mode.
+       */
+      @java.lang.Override
+      public int getMode() {
+        return mode_;
+      }
+      /**
+       * <pre>
+       *相机模式:1=拍照模式,2=录像模式,0=未知
+       * </pre>
+       *
+       * <code>uint32 mode = 1;</code>
+       * @param value The mode to set.
+       * @return This builder for chaining.
+       */
+      public Builder setMode(int value) {
+        
+        mode_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *相机模式:1=拍照模式,2=录像模式,0=未知
+       * </pre>
+       *
+       * <code>uint32 mode = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearMode() {
+        
+        mode_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int isRecording_ ;
+      /**
+       * <pre>
+       *是否录制中:1=录制中,0=未录制
+       * </pre>
+       *
+       * <code>uint32 isRecording = 2;</code>
+       * @return The isRecording.
+       */
+      @java.lang.Override
+      public int getIsRecording() {
+        return isRecording_;
+      }
+      /**
+       * <pre>
+       *是否录制中:1=录制中,0=未录制
+       * </pre>
+       *
+       * <code>uint32 isRecording = 2;</code>
+       * @param value The isRecording to set.
+       * @return This builder for chaining.
+       */
+      public Builder setIsRecording(int value) {
+        
+        isRecording_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *是否录制中:1=录制中,0=未录制
+       * </pre>
+       *
+       * <code>uint32 isRecording = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearIsRecording() {
+        
+        isRecording_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int recordDuration_ ;
+      /**
+       * <pre>
+       *录制时长(单位:秒)
+       * </pre>
+       *
+       * <code>uint32 recordDuration = 3;</code>
+       * @return The recordDuration.
+       */
+      @java.lang.Override
+      public int getRecordDuration() {
+        return recordDuration_;
+      }
+      /**
+       * <pre>
+       *录制时长(单位:秒)
+       * </pre>
+       *
+       * <code>uint32 recordDuration = 3;</code>
+       * @param value The recordDuration to set.
+       * @return This builder for chaining.
+       */
+      public Builder setRecordDuration(int value) {
+        
+        recordDuration_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *录制时长(单位:秒)
+       * </pre>
+       *
+       * <code>uint32 recordDuration = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearRecordDuration() {
+        
+        recordDuration_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int source_ ;
+      /**
+       * <pre>
+       *相机视源:0=可见,1=变焦,2=红外
+       * </pre>
+       *
+       * <code>uint32 source = 4;</code>
+       * @return The source.
+       */
+      @java.lang.Override
+      public int getSource() {
+        return source_;
+      }
+      /**
+       * <pre>
+       *相机视源:0=可见,1=变焦,2=红外
+       * </pre>
+       *
+       * <code>uint32 source = 4;</code>
+       * @param value The source to set.
+       * @return This builder for chaining.
+       */
+      public Builder setSource(int value) {
+        
+        source_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *相机视源:0=可见,1=变焦,2=红外
+       * </pre>
+       *
+       * <code>uint32 source = 4;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearSource() {
+        
+        source_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int camera_ ;
+      /**
+       * <pre>
+       *相机: 0=FPV,1=相机(1),2=相机(2)
+       * </pre>
+       *
+       * <code>uint32 camera = 5;</code>
+       * @return The camera.
+       */
+      @java.lang.Override
+      public int getCamera() {
+        return camera_;
+      }
+      /**
+       * <pre>
+       *相机: 0=FPV,1=相机(1),2=相机(2)
+       * </pre>
+       *
+       * <code>uint32 camera = 5;</code>
+       * @param value The camera to set.
+       * @return This builder for chaining.
+       */
+      public Builder setCamera(int value) {
+        
+        camera_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *相机: 0=FPV,1=相机(1),2=相机(2)
+       * </pre>
+       *
+       * <code>uint32 camera = 5;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearCamera() {
+        
+        camera_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private float zoomfactor_ ;
+      /**
+       * <pre>
+       *相机当前变焦倍数
+       * </pre>
+       *
+       * <code>float zoomfactor = 6;</code>
+       * @return The zoomfactor.
+       */
+      @java.lang.Override
+      public float getZoomfactor() {
+        return zoomfactor_;
+      }
+      /**
+       * <pre>
+       *相机当前变焦倍数
+       * </pre>
+       *
+       * <code>float zoomfactor = 6;</code>
+       * @param value The zoomfactor to set.
+       * @return This builder for chaining.
+       */
+      public Builder setZoomfactor(float value) {
+        
+        zoomfactor_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *相机当前变焦倍数
+       * </pre>
+       *
+       * <code>float zoomfactor = 6;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearZoomfactor() {
+        
+        zoomfactor_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private int width_ ;
+      /**
+       * <pre>
+       *水平像素(例如:1920)
+       * </pre>
+       *
+       * <code>uint32 width = 7;</code>
+       * @return The width.
+       */
+      @java.lang.Override
+      public int getWidth() {
+        return width_;
+      }
+      /**
+       * <pre>
+       *水平像素(例如:1920)
+       * </pre>
+       *
+       * <code>uint32 width = 7;</code>
+       * @param value The width to set.
+       * @return This builder for chaining.
+       */
+      public Builder setWidth(int value) {
+        
+        width_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *水平像素(例如:1920)
+       * </pre>
+       *
+       * <code>uint32 width = 7;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearWidth() {
+        
+        width_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int height_ ;
+      /**
+       * <pre>
+       *垂直像素(例如:1080)
+       * </pre>
+       *
+       * <code>uint32 height = 8;</code>
+       * @return The height.
+       */
+      @java.lang.Override
+      public int getHeight() {
+        return height_;
+      }
+      /**
+       * <pre>
+       *垂直像素(例如:1080)
+       * </pre>
+       *
+       * <code>uint32 height = 8;</code>
+       * @param value The height to set.
+       * @return This builder for chaining.
+       */
+      public Builder setHeight(int value) {
+        
+        height_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *垂直像素(例如:1080)
+       * </pre>
+       *
+       * <code>uint32 height = 8;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearHeight() {
+        
+        height_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int frameRate_ ;
+      /**
+       * <pre>
+       *帧率(例如:30)
+       * </pre>
+       *
+       * <code>uint32 frameRate = 9;</code>
+       * @return The frameRate.
+       */
+      @java.lang.Override
+      public int getFrameRate() {
+        return frameRate_;
+      }
+      /**
+       * <pre>
+       *帧率(例如:30)
+       * </pre>
+       *
+       * <code>uint32 frameRate = 9;</code>
+       * @param value The frameRate to set.
+       * @return This builder for chaining.
+       */
+      public Builder setFrameRate(int value) {
+        
+        frameRate_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *帧率(例如:30)
+       * </pre>
+       *
+       * <code>uint32 frameRate = 9;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearFrameRate() {
+        
+        frameRate_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int bitstream_ ;
+      /**
+       * <pre>
+       *码率(单位:0.001)(例如:6兆设置值为6000)
+       * </pre>
+       *
+       * <code>uint32 bitstream = 10;</code>
+       * @return The bitstream.
+       */
+      @java.lang.Override
+      public int getBitstream() {
+        return bitstream_;
+      }
+      /**
+       * <pre>
+       *码率(单位:0.001)(例如:6兆设置值为6000)
+       * </pre>
+       *
+       * <code>uint32 bitstream = 10;</code>
+       * @param value The bitstream to set.
+       * @return This builder for chaining.
+       */
+      public Builder setBitstream(int value) {
+        
+        bitstream_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *码率(单位:0.001)(例如:6兆设置值为6000)
+       * </pre>
+       *
+       * <code>uint32 bitstream = 10;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearBitstream() {
+        
+        bitstream_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int pointThermometrying_ ;
+      /**
+       * <pre>
+       *单点测温状态:0=非单点测温中,1=单点测温中
+       * </pre>
+       *
+       * <code>uint32 pointThermometrying = 11;</code>
+       * @return The pointThermometrying.
+       */
+      @java.lang.Override
+      public int getPointThermometrying() {
+        return pointThermometrying_;
+      }
+      /**
+       * <pre>
+       *单点测温状态:0=非单点测温中,1=单点测温中
+       * </pre>
+       *
+       * <code>uint32 pointThermometrying = 11;</code>
+       * @param value The pointThermometrying to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPointThermometrying(int value) {
+        
+        pointThermometrying_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *单点测温状态:0=非单点测温中,1=单点测温中
+       * </pre>
+       *
+       * <code>uint32 pointThermometrying = 11;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearPointThermometrying() {
+        
+        pointThermometrying_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int areaThermometrying_ ;
+      /**
+       * <pre>
+       *区域测温状态:0=非区域测温中,1=区域测温中
+       * </pre>
+       *
+       * <code>uint32 areaThermometrying = 12;</code>
+       * @return The areaThermometrying.
+       */
+      @java.lang.Override
+      public int getAreaThermometrying() {
+        return areaThermometrying_;
+      }
+      /**
+       * <pre>
+       *区域测温状态:0=非区域测温中,1=区域测温中
+       * </pre>
+       *
+       * <code>uint32 areaThermometrying = 12;</code>
+       * @param value The areaThermometrying to set.
+       * @return This builder for chaining.
+       */
+      public Builder setAreaThermometrying(int value) {
+        
+        areaThermometrying_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *区域测温状态:0=非区域测温中,1=区域测温中
+       * </pre>
+       *
+       * <code>uint32 areaThermometrying = 12;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearAreaThermometrying() {
+        
+        areaThermometrying_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int laserRanging_ ;
+      /**
+       * <pre>
+       *激光测距状态:0=非激光测距中,1=激光测距中
+       * </pre>
+       *
+       * <code>uint32 laserRanging = 13;</code>
+       * @return The laserRanging.
+       */
+      @java.lang.Override
+      public int getLaserRanging() {
+        return laserRanging_;
+      }
+      /**
+       * <pre>
+       *激光测距状态:0=非激光测距中,1=激光测距中
+       * </pre>
+       *
+       * <code>uint32 laserRanging = 13;</code>
+       * @param value The laserRanging to set.
+       * @return This builder for chaining.
+       */
+      public Builder setLaserRanging(int value) {
+        
+        laserRanging_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *激光测距状态:0=非激光测距中,1=激光测距中
+       * </pre>
+       *
+       * <code>uint32 laserRanging = 13;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearLaserRanging() {
+        
+        laserRanging_ = 0;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:CameraState)
+    }
+
+    // @@protoc_insertion_point(class_scope:CameraState)
+    private static final com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState();
+    }
+
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<CameraState>
+        PARSER = new com.google.protobuf.AbstractParser<CameraState>() {
+      @java.lang.Override
+      public CameraState parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new CameraState(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<CameraState> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<CameraState> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.CameraState getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface MissionStateOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:MissionState)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <pre>
+     *航线是否暂停中:0=未暂停,1=暂停中
+     * </pre>
+     *
+     * <code>uint32 isPause = 1;</code>
+     * @return The isPause.
+     */
+    int getIsPause();
+
+    /**
+     * <pre>
+     *目标航点下标(说明:开始成功到第一个航点之间此值为0,到达第一个航点此值为1,到达第二个航点此值为2,以此类推,航线结束后此值不清空直到下一次开始航线)
+     * </pre>
+     *
+     * <code>uint32 targetWaypointIndex = 2;</code>
+     * @return The targetWaypointIndex.
+     */
+    int getTargetWaypointIndex();
+
+    /**
+     * <pre>
+     *是否航点完成:1完成、0未完成(此值废弃)
+     * </pre>
+     *
+     * <code>uint32 isWaypointFinished = 3;</code>
+     * @return The isWaypointFinished.
+     */
+    int getIsWaypointFinished();
+
+    /**
+     * <pre>
+     *云盒是否发送视频数据:0=不发送,1=发送
+     * </pre>
+     *
+     * <code>uint32 pushVideo = 4;</code>
+     * @return The pushVideo.
+     */
+    int getPushVideo();
+
+    /**
+     * <pre>
+     *是否锁定4G:0=不锁定,1=锁定
+     * </pre>
+     *
+     * <code>uint32 lock4g = 5;</code>
+     * @return The lock4g.
+     */
+    int getLock4G();
+
+    /**
+     * <pre>
+     *是否开通图片自动回传功能:0=未开通,1=已开通
+     * </pre>
+     *
+     * <code>uint32 boxModel = 6;</code>
+     * @return The boxModel.
+     */
+    int getBoxModel();
+
+    /**
+     * <pre>
+     *自动拍照间隔:0未开始,3~255间隔时间
+     * </pre>
+     *
+     * <code>uint32 mapPlay = 7;</code>
+     * @return The mapPlay.
+     */
+    int getMapPlay();
+
+    /**
+     * <pre>
+     *网络失联后动作:0=返回HOME点,1=继续航线
+     * </pre>
+     *
+     * <code>uint32 loseAction = 8;</code>
+     * @return The loseAction.
+     */
+    int getLoseAction();
+
+    /**
+     * <pre>
+     *是否打点飞行控制中:0=否,1=是
+     * </pre>
+     *
+     * <code>uint32 isPointControl = 9;</code>
+     * @return The isPointControl.
+     */
+    int getIsPointControl();
+
+    /**
+     * <pre>
+     *是否UWB精准降落中:0=不是,1=是
+     * </pre>
+     *
+     * <code>uint32 isUwbLanding = 10;</code>
+     * @return The isUwbLanding.
+     */
+    int getIsUwbLanding();
+
+    /**
+     * <pre>
+     *视频是否推流中:0=不是,1=是
+     * </pre>
+     *
+     * <code>uint32 isPushVideoing = 11;</code>
+     * @return The isPushVideoing.
+     */
+    int getIsPushVideoing();
+
+    /**
+     * <pre>
+     *是否二维码精准降落中:0=不是,1=是
+     * </pre>
+     *
+     * <code>uint32 isDLanding = 12;</code>
+     * @return The isDLanding.
+     */
+    int getIsDLanding();
+
+    /**
+     * <pre>
+     *二维码精准降落模式:0=载荷降落,1=下视降落
+     * </pre>
+     *
+     * <code>uint32 perceptionFlag = 13;</code>
+     * @return The perceptionFlag.
+     */
+    int getPerceptionFlag();
+
+    /**
+     * <pre>
+     *是否指定距离飞行控制中:0=否,1=是
+     * </pre>
+     *
+     * <code>uint32 isPositionControl = 14;</code>
+     * @return The isPositionControl.
+     */
+    int getIsPositionControl();
+  }
+  /**
+   * <pre>
+   *任务状态
+   * </pre>
+   *
+   * Protobuf type {@code MissionState}
+   */
+  public static final class MissionState extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:MissionState)
+      MissionStateOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use MissionState.newBuilder() to construct.
+    private MissionState(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private MissionState() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new MissionState();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private MissionState(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 8: {
+
+              isPause_ = input.readUInt32();
+              break;
+            }
+            case 16: {
+
+              targetWaypointIndex_ = input.readUInt32();
+              break;
+            }
+            case 24: {
+
+              isWaypointFinished_ = input.readUInt32();
+              break;
+            }
+            case 32: {
+
+              pushVideo_ = input.readUInt32();
+              break;
+            }
+            case 40: {
+
+              lock4G_ = input.readUInt32();
+              break;
+            }
+            case 48: {
+
+              boxModel_ = input.readUInt32();
+              break;
+            }
+            case 56: {
+
+              mapPlay_ = input.readUInt32();
+              break;
+            }
+            case 64: {
+
+              loseAction_ = input.readUInt32();
+              break;
+            }
+            case 72: {
+
+              isPointControl_ = input.readUInt32();
+              break;
+            }
+            case 80: {
+
+              isUwbLanding_ = input.readUInt32();
+              break;
+            }
+            case 88: {
+
+              isPushVideoing_ = input.readUInt32();
+              break;
+            }
+            case 96: {
+
+              isDLanding_ = input.readUInt32();
+              break;
+            }
+            case 104: {
+
+              perceptionFlag_ = input.readUInt32();
+              break;
+            }
+            case 112: {
+
+              isPositionControl_ = input.readUInt32();
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_MissionState_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_MissionState_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState.class, com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState.Builder.class);
+    }
+
+    public static final int ISPAUSE_FIELD_NUMBER = 1;
+    private int isPause_;
+    /**
+     * <pre>
+     *航线是否暂停中:0=未暂停,1=暂停中
+     * </pre>
+     *
+     * <code>uint32 isPause = 1;</code>
+     * @return The isPause.
+     */
+    @java.lang.Override
+    public int getIsPause() {
+      return isPause_;
+    }
+
+    public static final int TARGETWAYPOINTINDEX_FIELD_NUMBER = 2;
+    private int targetWaypointIndex_;
+    /**
+     * <pre>
+     *目标航点下标(说明:开始成功到第一个航点之间此值为0,到达第一个航点此值为1,到达第二个航点此值为2,以此类推,航线结束后此值不清空直到下一次开始航线)
+     * </pre>
+     *
+     * <code>uint32 targetWaypointIndex = 2;</code>
+     * @return The targetWaypointIndex.
+     */
+    @java.lang.Override
+    public int getTargetWaypointIndex() {
+      return targetWaypointIndex_;
+    }
+
+    public static final int ISWAYPOINTFINISHED_FIELD_NUMBER = 3;
+    private int isWaypointFinished_;
+    /**
+     * <pre>
+     *是否航点完成:1完成、0未完成(此值废弃)
+     * </pre>
+     *
+     * <code>uint32 isWaypointFinished = 3;</code>
+     * @return The isWaypointFinished.
+     */
+    @java.lang.Override
+    public int getIsWaypointFinished() {
+      return isWaypointFinished_;
+    }
+
+    public static final int PUSHVIDEO_FIELD_NUMBER = 4;
+    private int pushVideo_;
+    /**
+     * <pre>
+     *云盒是否发送视频数据:0=不发送,1=发送
+     * </pre>
+     *
+     * <code>uint32 pushVideo = 4;</code>
+     * @return The pushVideo.
+     */
+    @java.lang.Override
+    public int getPushVideo() {
+      return pushVideo_;
+    }
+
+    public static final int LOCK4G_FIELD_NUMBER = 5;
+    private int lock4G_;
+    /**
+     * <pre>
+     *是否锁定4G:0=不锁定,1=锁定
+     * </pre>
+     *
+     * <code>uint32 lock4g = 5;</code>
+     * @return The lock4g.
+     */
+    @java.lang.Override
+    public int getLock4G() {
+      return lock4G_;
+    }
+
+    public static final int BOXMODEL_FIELD_NUMBER = 6;
+    private int boxModel_;
+    /**
+     * <pre>
+     *是否开通图片自动回传功能:0=未开通,1=已开通
+     * </pre>
+     *
+     * <code>uint32 boxModel = 6;</code>
+     * @return The boxModel.
+     */
+    @java.lang.Override
+    public int getBoxModel() {
+      return boxModel_;
+    }
+
+    public static final int MAPPLAY_FIELD_NUMBER = 7;
+    private int mapPlay_;
+    /**
+     * <pre>
+     *自动拍照间隔:0未开始,3~255间隔时间
+     * </pre>
+     *
+     * <code>uint32 mapPlay = 7;</code>
+     * @return The mapPlay.
+     */
+    @java.lang.Override
+    public int getMapPlay() {
+      return mapPlay_;
+    }
+
+    public static final int LOSEACTION_FIELD_NUMBER = 8;
+    private int loseAction_;
+    /**
+     * <pre>
+     *网络失联后动作:0=返回HOME点,1=继续航线
+     * </pre>
+     *
+     * <code>uint32 loseAction = 8;</code>
+     * @return The loseAction.
+     */
+    @java.lang.Override
+    public int getLoseAction() {
+      return loseAction_;
+    }
+
+    public static final int ISPOINTCONTROL_FIELD_NUMBER = 9;
+    private int isPointControl_;
+    /**
+     * <pre>
+     *是否打点飞行控制中:0=否,1=是
+     * </pre>
+     *
+     * <code>uint32 isPointControl = 9;</code>
+     * @return The isPointControl.
+     */
+    @java.lang.Override
+    public int getIsPointControl() {
+      return isPointControl_;
+    }
+
+    public static final int ISUWBLANDING_FIELD_NUMBER = 10;
+    private int isUwbLanding_;
+    /**
+     * <pre>
+     *是否UWB精准降落中:0=不是,1=是
+     * </pre>
+     *
+     * <code>uint32 isUwbLanding = 10;</code>
+     * @return The isUwbLanding.
+     */
+    @java.lang.Override
+    public int getIsUwbLanding() {
+      return isUwbLanding_;
+    }
+
+    public static final int ISPUSHVIDEOING_FIELD_NUMBER = 11;
+    private int isPushVideoing_;
+    /**
+     * <pre>
+     *视频是否推流中:0=不是,1=是
+     * </pre>
+     *
+     * <code>uint32 isPushVideoing = 11;</code>
+     * @return The isPushVideoing.
+     */
+    @java.lang.Override
+    public int getIsPushVideoing() {
+      return isPushVideoing_;
+    }
+
+    public static final int ISDLANDING_FIELD_NUMBER = 12;
+    private int isDLanding_;
+    /**
+     * <pre>
+     *是否二维码精准降落中:0=不是,1=是
+     * </pre>
+     *
+     * <code>uint32 isDLanding = 12;</code>
+     * @return The isDLanding.
+     */
+    @java.lang.Override
+    public int getIsDLanding() {
+      return isDLanding_;
+    }
+
+    public static final int PERCEPTIONFLAG_FIELD_NUMBER = 13;
+    private int perceptionFlag_;
+    /**
+     * <pre>
+     *二维码精准降落模式:0=载荷降落,1=下视降落
+     * </pre>
+     *
+     * <code>uint32 perceptionFlag = 13;</code>
+     * @return The perceptionFlag.
+     */
+    @java.lang.Override
+    public int getPerceptionFlag() {
+      return perceptionFlag_;
+    }
+
+    public static final int ISPOSITIONCONTROL_FIELD_NUMBER = 14;
+    private int isPositionControl_;
+    /**
+     * <pre>
+     *是否指定距离飞行控制中:0=否,1=是
+     * </pre>
+     *
+     * <code>uint32 isPositionControl = 14;</code>
+     * @return The isPositionControl.
+     */
+    @java.lang.Override
+    public int getIsPositionControl() {
+      return isPositionControl_;
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (isPause_ != 0) {
+        output.writeUInt32(1, isPause_);
+      }
+      if (targetWaypointIndex_ != 0) {
+        output.writeUInt32(2, targetWaypointIndex_);
+      }
+      if (isWaypointFinished_ != 0) {
+        output.writeUInt32(3, isWaypointFinished_);
+      }
+      if (pushVideo_ != 0) {
+        output.writeUInt32(4, pushVideo_);
+      }
+      if (lock4G_ != 0) {
+        output.writeUInt32(5, lock4G_);
+      }
+      if (boxModel_ != 0) {
+        output.writeUInt32(6, boxModel_);
+      }
+      if (mapPlay_ != 0) {
+        output.writeUInt32(7, mapPlay_);
+      }
+      if (loseAction_ != 0) {
+        output.writeUInt32(8, loseAction_);
+      }
+      if (isPointControl_ != 0) {
+        output.writeUInt32(9, isPointControl_);
+      }
+      if (isUwbLanding_ != 0) {
+        output.writeUInt32(10, isUwbLanding_);
+      }
+      if (isPushVideoing_ != 0) {
+        output.writeUInt32(11, isPushVideoing_);
+      }
+      if (isDLanding_ != 0) {
+        output.writeUInt32(12, isDLanding_);
+      }
+      if (perceptionFlag_ != 0) {
+        output.writeUInt32(13, perceptionFlag_);
+      }
+      if (isPositionControl_ != 0) {
+        output.writeUInt32(14, isPositionControl_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (isPause_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(1, isPause_);
+      }
+      if (targetWaypointIndex_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(2, targetWaypointIndex_);
+      }
+      if (isWaypointFinished_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(3, isWaypointFinished_);
+      }
+      if (pushVideo_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(4, pushVideo_);
+      }
+      if (lock4G_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(5, lock4G_);
+      }
+      if (boxModel_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(6, boxModel_);
+      }
+      if (mapPlay_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(7, mapPlay_);
+      }
+      if (loseAction_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(8, loseAction_);
+      }
+      if (isPointControl_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(9, isPointControl_);
+      }
+      if (isUwbLanding_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(10, isUwbLanding_);
+      }
+      if (isPushVideoing_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(11, isPushVideoing_);
+      }
+      if (isDLanding_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(12, isDLanding_);
+      }
+      if (perceptionFlag_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(13, perceptionFlag_);
+      }
+      if (isPositionControl_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(14, isPositionControl_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState)) {
+        return super.equals(obj);
+      }
+      com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState other = (com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState) obj;
+
+      if (getIsPause()
+          != other.getIsPause()) return false;
+      if (getTargetWaypointIndex()
+          != other.getTargetWaypointIndex()) return false;
+      if (getIsWaypointFinished()
+          != other.getIsWaypointFinished()) return false;
+      if (getPushVideo()
+          != other.getPushVideo()) return false;
+      if (getLock4G()
+          != other.getLock4G()) return false;
+      if (getBoxModel()
+          != other.getBoxModel()) return false;
+      if (getMapPlay()
+          != other.getMapPlay()) return false;
+      if (getLoseAction()
+          != other.getLoseAction()) return false;
+      if (getIsPointControl()
+          != other.getIsPointControl()) return false;
+      if (getIsUwbLanding()
+          != other.getIsUwbLanding()) return false;
+      if (getIsPushVideoing()
+          != other.getIsPushVideoing()) return false;
+      if (getIsDLanding()
+          != other.getIsDLanding()) return false;
+      if (getPerceptionFlag()
+          != other.getPerceptionFlag()) return false;
+      if (getIsPositionControl()
+          != other.getIsPositionControl()) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + ISPAUSE_FIELD_NUMBER;
+      hash = (53 * hash) + getIsPause();
+      hash = (37 * hash) + TARGETWAYPOINTINDEX_FIELD_NUMBER;
+      hash = (53 * hash) + getTargetWaypointIndex();
+      hash = (37 * hash) + ISWAYPOINTFINISHED_FIELD_NUMBER;
+      hash = (53 * hash) + getIsWaypointFinished();
+      hash = (37 * hash) + PUSHVIDEO_FIELD_NUMBER;
+      hash = (53 * hash) + getPushVideo();
+      hash = (37 * hash) + LOCK4G_FIELD_NUMBER;
+      hash = (53 * hash) + getLock4G();
+      hash = (37 * hash) + BOXMODEL_FIELD_NUMBER;
+      hash = (53 * hash) + getBoxModel();
+      hash = (37 * hash) + MAPPLAY_FIELD_NUMBER;
+      hash = (53 * hash) + getMapPlay();
+      hash = (37 * hash) + LOSEACTION_FIELD_NUMBER;
+      hash = (53 * hash) + getLoseAction();
+      hash = (37 * hash) + ISPOINTCONTROL_FIELD_NUMBER;
+      hash = (53 * hash) + getIsPointControl();
+      hash = (37 * hash) + ISUWBLANDING_FIELD_NUMBER;
+      hash = (53 * hash) + getIsUwbLanding();
+      hash = (37 * hash) + ISPUSHVIDEOING_FIELD_NUMBER;
+      hash = (53 * hash) + getIsPushVideoing();
+      hash = (37 * hash) + ISDLANDING_FIELD_NUMBER;
+      hash = (53 * hash) + getIsDLanding();
+      hash = (37 * hash) + PERCEPTIONFLAG_FIELD_NUMBER;
+      hash = (53 * hash) + getPerceptionFlag();
+      hash = (37 * hash) + ISPOSITIONCONTROL_FIELD_NUMBER;
+      hash = (53 * hash) + getIsPositionControl();
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     *任务状态
+     * </pre>
+     *
+     * Protobuf type {@code MissionState}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:MissionState)
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionStateOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_MissionState_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_MissionState_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState.class, com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState.Builder.class);
+      }
+
+      // Construct using com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        isPause_ = 0;
+
+        targetWaypointIndex_ = 0;
+
+        isWaypointFinished_ = 0;
+
+        pushVideo_ = 0;
+
+        lock4G_ = 0;
+
+        boxModel_ = 0;
+
+        mapPlay_ = 0;
+
+        loseAction_ = 0;
+
+        isPointControl_ = 0;
+
+        isUwbLanding_ = 0;
+
+        isPushVideoing_ = 0;
+
+        isDLanding_ = 0;
+
+        perceptionFlag_ = 0;
+
+        isPositionControl_ = 0;
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_MissionState_descriptor;
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState getDefaultInstanceForType() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState build() {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState buildPartial() {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState result = new com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState(this);
+        result.isPause_ = isPause_;
+        result.targetWaypointIndex_ = targetWaypointIndex_;
+        result.isWaypointFinished_ = isWaypointFinished_;
+        result.pushVideo_ = pushVideo_;
+        result.lock4G_ = lock4G_;
+        result.boxModel_ = boxModel_;
+        result.mapPlay_ = mapPlay_;
+        result.loseAction_ = loseAction_;
+        result.isPointControl_ = isPointControl_;
+        result.isUwbLanding_ = isUwbLanding_;
+        result.isPushVideoing_ = isPushVideoing_;
+        result.isDLanding_ = isDLanding_;
+        result.perceptionFlag_ = perceptionFlag_;
+        result.isPositionControl_ = isPositionControl_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState) {
+          return mergeFrom((com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState other) {
+        if (other == com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState.getDefaultInstance()) return this;
+        if (other.getIsPause() != 0) {
+          setIsPause(other.getIsPause());
+        }
+        if (other.getTargetWaypointIndex() != 0) {
+          setTargetWaypointIndex(other.getTargetWaypointIndex());
+        }
+        if (other.getIsWaypointFinished() != 0) {
+          setIsWaypointFinished(other.getIsWaypointFinished());
+        }
+        if (other.getPushVideo() != 0) {
+          setPushVideo(other.getPushVideo());
+        }
+        if (other.getLock4G() != 0) {
+          setLock4G(other.getLock4G());
+        }
+        if (other.getBoxModel() != 0) {
+          setBoxModel(other.getBoxModel());
+        }
+        if (other.getMapPlay() != 0) {
+          setMapPlay(other.getMapPlay());
+        }
+        if (other.getLoseAction() != 0) {
+          setLoseAction(other.getLoseAction());
+        }
+        if (other.getIsPointControl() != 0) {
+          setIsPointControl(other.getIsPointControl());
+        }
+        if (other.getIsUwbLanding() != 0) {
+          setIsUwbLanding(other.getIsUwbLanding());
+        }
+        if (other.getIsPushVideoing() != 0) {
+          setIsPushVideoing(other.getIsPushVideoing());
+        }
+        if (other.getIsDLanding() != 0) {
+          setIsDLanding(other.getIsDLanding());
+        }
+        if (other.getPerceptionFlag() != 0) {
+          setPerceptionFlag(other.getPerceptionFlag());
+        }
+        if (other.getIsPositionControl() != 0) {
+          setIsPositionControl(other.getIsPositionControl());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private int isPause_ ;
+      /**
+       * <pre>
+       *航线是否暂停中:0=未暂停,1=暂停中
+       * </pre>
+       *
+       * <code>uint32 isPause = 1;</code>
+       * @return The isPause.
+       */
+      @java.lang.Override
+      public int getIsPause() {
+        return isPause_;
+      }
+      /**
+       * <pre>
+       *航线是否暂停中:0=未暂停,1=暂停中
+       * </pre>
+       *
+       * <code>uint32 isPause = 1;</code>
+       * @param value The isPause to set.
+       * @return This builder for chaining.
+       */
+      public Builder setIsPause(int value) {
+        
+        isPause_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *航线是否暂停中:0=未暂停,1=暂停中
+       * </pre>
+       *
+       * <code>uint32 isPause = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearIsPause() {
+        
+        isPause_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int targetWaypointIndex_ ;
+      /**
+       * <pre>
+       *目标航点下标(说明:开始成功到第一个航点之间此值为0,到达第一个航点此值为1,到达第二个航点此值为2,以此类推,航线结束后此值不清空直到下一次开始航线)
+       * </pre>
+       *
+       * <code>uint32 targetWaypointIndex = 2;</code>
+       * @return The targetWaypointIndex.
+       */
+      @java.lang.Override
+      public int getTargetWaypointIndex() {
+        return targetWaypointIndex_;
+      }
+      /**
+       * <pre>
+       *目标航点下标(说明:开始成功到第一个航点之间此值为0,到达第一个航点此值为1,到达第二个航点此值为2,以此类推,航线结束后此值不清空直到下一次开始航线)
+       * </pre>
+       *
+       * <code>uint32 targetWaypointIndex = 2;</code>
+       * @param value The targetWaypointIndex to set.
+       * @return This builder for chaining.
+       */
+      public Builder setTargetWaypointIndex(int value) {
+        
+        targetWaypointIndex_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *目标航点下标(说明:开始成功到第一个航点之间此值为0,到达第一个航点此值为1,到达第二个航点此值为2,以此类推,航线结束后此值不清空直到下一次开始航线)
+       * </pre>
+       *
+       * <code>uint32 targetWaypointIndex = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearTargetWaypointIndex() {
+        
+        targetWaypointIndex_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int isWaypointFinished_ ;
+      /**
+       * <pre>
+       *是否航点完成:1完成、0未完成(此值废弃)
+       * </pre>
+       *
+       * <code>uint32 isWaypointFinished = 3;</code>
+       * @return The isWaypointFinished.
+       */
+      @java.lang.Override
+      public int getIsWaypointFinished() {
+        return isWaypointFinished_;
+      }
+      /**
+       * <pre>
+       *是否航点完成:1完成、0未完成(此值废弃)
+       * </pre>
+       *
+       * <code>uint32 isWaypointFinished = 3;</code>
+       * @param value The isWaypointFinished to set.
+       * @return This builder for chaining.
+       */
+      public Builder setIsWaypointFinished(int value) {
+        
+        isWaypointFinished_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *是否航点完成:1完成、0未完成(此值废弃)
+       * </pre>
+       *
+       * <code>uint32 isWaypointFinished = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearIsWaypointFinished() {
+        
+        isWaypointFinished_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int pushVideo_ ;
+      /**
+       * <pre>
+       *云盒是否发送视频数据:0=不发送,1=发送
+       * </pre>
+       *
+       * <code>uint32 pushVideo = 4;</code>
+       * @return The pushVideo.
+       */
+      @java.lang.Override
+      public int getPushVideo() {
+        return pushVideo_;
+      }
+      /**
+       * <pre>
+       *云盒是否发送视频数据:0=不发送,1=发送
+       * </pre>
+       *
+       * <code>uint32 pushVideo = 4;</code>
+       * @param value The pushVideo to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPushVideo(int value) {
+        
+        pushVideo_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *云盒是否发送视频数据:0=不发送,1=发送
+       * </pre>
+       *
+       * <code>uint32 pushVideo = 4;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearPushVideo() {
+        
+        pushVideo_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int lock4G_ ;
+      /**
+       * <pre>
+       *是否锁定4G:0=不锁定,1=锁定
+       * </pre>
+       *
+       * <code>uint32 lock4g = 5;</code>
+       * @return The lock4g.
+       */
+      @java.lang.Override
+      public int getLock4G() {
+        return lock4G_;
+      }
+      /**
+       * <pre>
+       *是否锁定4G:0=不锁定,1=锁定
+       * </pre>
+       *
+       * <code>uint32 lock4g = 5;</code>
+       * @param value The lock4g to set.
+       * @return This builder for chaining.
+       */
+      public Builder setLock4G(int value) {
+        
+        lock4G_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *是否锁定4G:0=不锁定,1=锁定
+       * </pre>
+       *
+       * <code>uint32 lock4g = 5;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearLock4G() {
+        
+        lock4G_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int boxModel_ ;
+      /**
+       * <pre>
+       *是否开通图片自动回传功能:0=未开通,1=已开通
+       * </pre>
+       *
+       * <code>uint32 boxModel = 6;</code>
+       * @return The boxModel.
+       */
+      @java.lang.Override
+      public int getBoxModel() {
+        return boxModel_;
+      }
+      /**
+       * <pre>
+       *是否开通图片自动回传功能:0=未开通,1=已开通
+       * </pre>
+       *
+       * <code>uint32 boxModel = 6;</code>
+       * @param value The boxModel to set.
+       * @return This builder for chaining.
+       */
+      public Builder setBoxModel(int value) {
+        
+        boxModel_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *是否开通图片自动回传功能:0=未开通,1=已开通
+       * </pre>
+       *
+       * <code>uint32 boxModel = 6;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearBoxModel() {
+        
+        boxModel_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int mapPlay_ ;
+      /**
+       * <pre>
+       *自动拍照间隔:0未开始,3~255间隔时间
+       * </pre>
+       *
+       * <code>uint32 mapPlay = 7;</code>
+       * @return The mapPlay.
+       */
+      @java.lang.Override
+      public int getMapPlay() {
+        return mapPlay_;
+      }
+      /**
+       * <pre>
+       *自动拍照间隔:0未开始,3~255间隔时间
+       * </pre>
+       *
+       * <code>uint32 mapPlay = 7;</code>
+       * @param value The mapPlay to set.
+       * @return This builder for chaining.
+       */
+      public Builder setMapPlay(int value) {
+        
+        mapPlay_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *自动拍照间隔:0未开始,3~255间隔时间
+       * </pre>
+       *
+       * <code>uint32 mapPlay = 7;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearMapPlay() {
+        
+        mapPlay_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int loseAction_ ;
+      /**
+       * <pre>
+       *网络失联后动作:0=返回HOME点,1=继续航线
+       * </pre>
+       *
+       * <code>uint32 loseAction = 8;</code>
+       * @return The loseAction.
+       */
+      @java.lang.Override
+      public int getLoseAction() {
+        return loseAction_;
+      }
+      /**
+       * <pre>
+       *网络失联后动作:0=返回HOME点,1=继续航线
+       * </pre>
+       *
+       * <code>uint32 loseAction = 8;</code>
+       * @param value The loseAction to set.
+       * @return This builder for chaining.
+       */
+      public Builder setLoseAction(int value) {
+        
+        loseAction_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *网络失联后动作:0=返回HOME点,1=继续航线
+       * </pre>
+       *
+       * <code>uint32 loseAction = 8;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearLoseAction() {
+        
+        loseAction_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int isPointControl_ ;
+      /**
+       * <pre>
+       *是否打点飞行控制中:0=否,1=是
+       * </pre>
+       *
+       * <code>uint32 isPointControl = 9;</code>
+       * @return The isPointControl.
+       */
+      @java.lang.Override
+      public int getIsPointControl() {
+        return isPointControl_;
+      }
+      /**
+       * <pre>
+       *是否打点飞行控制中:0=否,1=是
+       * </pre>
+       *
+       * <code>uint32 isPointControl = 9;</code>
+       * @param value The isPointControl to set.
+       * @return This builder for chaining.
+       */
+      public Builder setIsPointControl(int value) {
+        
+        isPointControl_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *是否打点飞行控制中:0=否,1=是
+       * </pre>
+       *
+       * <code>uint32 isPointControl = 9;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearIsPointControl() {
+        
+        isPointControl_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int isUwbLanding_ ;
+      /**
+       * <pre>
+       *是否UWB精准降落中:0=不是,1=是
+       * </pre>
+       *
+       * <code>uint32 isUwbLanding = 10;</code>
+       * @return The isUwbLanding.
+       */
+      @java.lang.Override
+      public int getIsUwbLanding() {
+        return isUwbLanding_;
+      }
+      /**
+       * <pre>
+       *是否UWB精准降落中:0=不是,1=是
+       * </pre>
+       *
+       * <code>uint32 isUwbLanding = 10;</code>
+       * @param value The isUwbLanding to set.
+       * @return This builder for chaining.
+       */
+      public Builder setIsUwbLanding(int value) {
+        
+        isUwbLanding_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *是否UWB精准降落中:0=不是,1=是
+       * </pre>
+       *
+       * <code>uint32 isUwbLanding = 10;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearIsUwbLanding() {
+        
+        isUwbLanding_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int isPushVideoing_ ;
+      /**
+       * <pre>
+       *视频是否推流中:0=不是,1=是
+       * </pre>
+       *
+       * <code>uint32 isPushVideoing = 11;</code>
+       * @return The isPushVideoing.
+       */
+      @java.lang.Override
+      public int getIsPushVideoing() {
+        return isPushVideoing_;
+      }
+      /**
+       * <pre>
+       *视频是否推流中:0=不是,1=是
+       * </pre>
+       *
+       * <code>uint32 isPushVideoing = 11;</code>
+       * @param value The isPushVideoing to set.
+       * @return This builder for chaining.
+       */
+      public Builder setIsPushVideoing(int value) {
+        
+        isPushVideoing_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *视频是否推流中:0=不是,1=是
+       * </pre>
+       *
+       * <code>uint32 isPushVideoing = 11;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearIsPushVideoing() {
+        
+        isPushVideoing_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int isDLanding_ ;
+      /**
+       * <pre>
+       *是否二维码精准降落中:0=不是,1=是
+       * </pre>
+       *
+       * <code>uint32 isDLanding = 12;</code>
+       * @return The isDLanding.
+       */
+      @java.lang.Override
+      public int getIsDLanding() {
+        return isDLanding_;
+      }
+      /**
+       * <pre>
+       *是否二维码精准降落中:0=不是,1=是
+       * </pre>
+       *
+       * <code>uint32 isDLanding = 12;</code>
+       * @param value The isDLanding to set.
+       * @return This builder for chaining.
+       */
+      public Builder setIsDLanding(int value) {
+        
+        isDLanding_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *是否二维码精准降落中:0=不是,1=是
+       * </pre>
+       *
+       * <code>uint32 isDLanding = 12;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearIsDLanding() {
+        
+        isDLanding_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int perceptionFlag_ ;
+      /**
+       * <pre>
+       *二维码精准降落模式:0=载荷降落,1=下视降落
+       * </pre>
+       *
+       * <code>uint32 perceptionFlag = 13;</code>
+       * @return The perceptionFlag.
+       */
+      @java.lang.Override
+      public int getPerceptionFlag() {
+        return perceptionFlag_;
+      }
+      /**
+       * <pre>
+       *二维码精准降落模式:0=载荷降落,1=下视降落
+       * </pre>
+       *
+       * <code>uint32 perceptionFlag = 13;</code>
+       * @param value The perceptionFlag to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPerceptionFlag(int value) {
+        
+        perceptionFlag_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *二维码精准降落模式:0=载荷降落,1=下视降落
+       * </pre>
+       *
+       * <code>uint32 perceptionFlag = 13;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearPerceptionFlag() {
+        
+        perceptionFlag_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int isPositionControl_ ;
+      /**
+       * <pre>
+       *是否指定距离飞行控制中:0=否,1=是
+       * </pre>
+       *
+       * <code>uint32 isPositionControl = 14;</code>
+       * @return The isPositionControl.
+       */
+      @java.lang.Override
+      public int getIsPositionControl() {
+        return isPositionControl_;
+      }
+      /**
+       * <pre>
+       *是否指定距离飞行控制中:0=否,1=是
+       * </pre>
+       *
+       * <code>uint32 isPositionControl = 14;</code>
+       * @param value The isPositionControl to set.
+       * @return This builder for chaining.
+       */
+      public Builder setIsPositionControl(int value) {
+        
+        isPositionControl_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *是否指定距离飞行控制中:0=否,1=是
+       * </pre>
+       *
+       * <code>uint32 isPositionControl = 14;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearIsPositionControl() {
+        
+        isPositionControl_ = 0;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:MissionState)
+    }
+
+    // @@protoc_insertion_point(class_scope:MissionState)
+    private static final com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState();
+    }
+
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<MissionState>
+        PARSER = new com.google.protobuf.AbstractParser<MissionState>() {
+      @java.lang.Override
+      public MissionState parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new MissionState(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<MissionState> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<MissionState> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.MissionState getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface AvoidanceDataOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:AvoidanceData)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>uint32 downHealth = 1;</code>
+     * @return The downHealth.
+     */
+    int getDownHealth();
+
+    /**
+     * <pre>
+     *距下障碍物的距离(单位:米),downHealth为1时值有效
+     * </pre>
+     *
+     * <code>float down = 2;</code>
+     * @return The down.
+     */
+    float getDown();
+
+    /**
+     * <code>uint32 frontHealth = 3;</code>
+     * @return The frontHealth.
+     */
+    int getFrontHealth();
+
+    /**
+     * <pre>
+     *距前障碍物的距离(单位:米),frontHealth为1时值有效 
+     * </pre>
+     *
+     * <code>float front = 4;</code>
+     * @return The front.
+     */
+    float getFront();
+
+    /**
+     * <code>uint32 rightHealth = 5;</code>
+     * @return The rightHealth.
+     */
+    int getRightHealth();
+
+    /**
+     * <pre>
+     *距右障碍物的距离(单位:米),rightHealth为1时值有效
+     * </pre>
+     *
+     * <code>float right = 6;</code>
+     * @return The right.
+     */
+    float getRight();
+
+    /**
+     * <code>uint32 backHealth = 7;</code>
+     * @return The backHealth.
+     */
+    int getBackHealth();
+
+    /**
+     * <pre>
+     *距后障碍物的距离(单位:米),backHealth为1时值有效
+     * </pre>
+     *
+     * <code>float back = 8;</code>
+     * @return The back.
+     */
+    float getBack();
+
+    /**
+     * <code>uint32 leftHealth = 9;</code>
+     * @return The leftHealth.
+     */
+    int getLeftHealth();
+
+    /**
+     * <pre>
+     *距左障碍物的距离(单位:米),leftHealth为1时值有效
+     * </pre>
+     *
+     * <code>float left = 10;</code>
+     * @return The left.
+     */
+    float getLeft();
+
+    /**
+     * <code>uint32 upHealth = 11;</code>
+     * @return The upHealth.
+     */
+    int getUpHealth();
+
+    /**
+     * <pre>
+     *距上障碍物的距离(单位:米),upHealth为1时值有效
+     * </pre>
+     *
+     * <code>float up = 12;</code>
+     * @return The up.
+     */
+    float getUp();
+
+    /**
+     * <pre>
+     *下视觉避障开关状态:0-关闭 1-打开
+     * </pre>
+     *
+     * <code>uint32 avoidanceEnableStatusDown = 13;</code>
+     * @return The avoidanceEnableStatusDown.
+     */
+    int getAvoidanceEnableStatusDown();
+
+    /**
+     * <pre>
+     *上视觉避障开关状态:0-关闭 1-打开
+     * </pre>
+     *
+     * <code>uint32 avoidanceEnableStatusUp = 14;</code>
+     * @return The avoidanceEnableStatusUp.
+     */
+    int getAvoidanceEnableStatusUp();
+
+    /**
+     * <pre>
+     *水平视觉避障开关状态:0-关闭 1-打开
+     * </pre>
+     *
+     * <code>uint32 avoidanceEnableStatusHorizontal = 15;</code>
+     * @return The avoidanceEnableStatusHorizontal.
+     */
+    int getAvoidanceEnableStatusHorizontal();
+  }
+  /**
+   * <pre>
+   *避障数据
+   * </pre>
+   *
+   * Protobuf type {@code AvoidanceData}
+   */
+  public static final class AvoidanceData extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:AvoidanceData)
+      AvoidanceDataOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use AvoidanceData.newBuilder() to construct.
+    private AvoidanceData(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private AvoidanceData() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new AvoidanceData();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private AvoidanceData(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 8: {
+
+              downHealth_ = input.readUInt32();
+              break;
+            }
+            case 21: {
+
+              down_ = input.readFloat();
+              break;
+            }
+            case 24: {
+
+              frontHealth_ = input.readUInt32();
+              break;
+            }
+            case 37: {
+
+              front_ = input.readFloat();
+              break;
+            }
+            case 40: {
+
+              rightHealth_ = input.readUInt32();
+              break;
+            }
+            case 53: {
+
+              right_ = input.readFloat();
+              break;
+            }
+            case 56: {
+
+              backHealth_ = input.readUInt32();
+              break;
+            }
+            case 69: {
+
+              back_ = input.readFloat();
+              break;
+            }
+            case 72: {
+
+              leftHealth_ = input.readUInt32();
+              break;
+            }
+            case 85: {
+
+              left_ = input.readFloat();
+              break;
+            }
+            case 88: {
+
+              upHealth_ = input.readUInt32();
+              break;
+            }
+            case 101: {
+
+              up_ = input.readFloat();
+              break;
+            }
+            case 104: {
+
+              avoidanceEnableStatusDown_ = input.readUInt32();
+              break;
+            }
+            case 112: {
+
+              avoidanceEnableStatusUp_ = input.readUInt32();
+              break;
+            }
+            case 120: {
+
+              avoidanceEnableStatusHorizontal_ = input.readUInt32();
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_AvoidanceData_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_AvoidanceData_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData.class, com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData.Builder.class);
+    }
+
+    public static final int DOWNHEALTH_FIELD_NUMBER = 1;
+    private int downHealth_;
+    /**
+     * <code>uint32 downHealth = 1;</code>
+     * @return The downHealth.
+     */
+    @java.lang.Override
+    public int getDownHealth() {
+      return downHealth_;
+    }
+
+    public static final int DOWN_FIELD_NUMBER = 2;
+    private float down_;
+    /**
+     * <pre>
+     *距下障碍物的距离(单位:米),downHealth为1时值有效
+     * </pre>
+     *
+     * <code>float down = 2;</code>
+     * @return The down.
+     */
+    @java.lang.Override
+    public float getDown() {
+      return down_;
+    }
+
+    public static final int FRONTHEALTH_FIELD_NUMBER = 3;
+    private int frontHealth_;
+    /**
+     * <code>uint32 frontHealth = 3;</code>
+     * @return The frontHealth.
+     */
+    @java.lang.Override
+    public int getFrontHealth() {
+      return frontHealth_;
+    }
+
+    public static final int FRONT_FIELD_NUMBER = 4;
+    private float front_;
+    /**
+     * <pre>
+     *距前障碍物的距离(单位:米),frontHealth为1时值有效 
+     * </pre>
+     *
+     * <code>float front = 4;</code>
+     * @return The front.
+     */
+    @java.lang.Override
+    public float getFront() {
+      return front_;
+    }
+
+    public static final int RIGHTHEALTH_FIELD_NUMBER = 5;
+    private int rightHealth_;
+    /**
+     * <code>uint32 rightHealth = 5;</code>
+     * @return The rightHealth.
+     */
+    @java.lang.Override
+    public int getRightHealth() {
+      return rightHealth_;
+    }
+
+    public static final int RIGHT_FIELD_NUMBER = 6;
+    private float right_;
+    /**
+     * <pre>
+     *距右障碍物的距离(单位:米),rightHealth为1时值有效
+     * </pre>
+     *
+     * <code>float right = 6;</code>
+     * @return The right.
+     */
+    @java.lang.Override
+    public float getRight() {
+      return right_;
+    }
+
+    public static final int BACKHEALTH_FIELD_NUMBER = 7;
+    private int backHealth_;
+    /**
+     * <code>uint32 backHealth = 7;</code>
+     * @return The backHealth.
+     */
+    @java.lang.Override
+    public int getBackHealth() {
+      return backHealth_;
+    }
+
+    public static final int BACK_FIELD_NUMBER = 8;
+    private float back_;
+    /**
+     * <pre>
+     *距后障碍物的距离(单位:米),backHealth为1时值有效
+     * </pre>
+     *
+     * <code>float back = 8;</code>
+     * @return The back.
+     */
+    @java.lang.Override
+    public float getBack() {
+      return back_;
+    }
+
+    public static final int LEFTHEALTH_FIELD_NUMBER = 9;
+    private int leftHealth_;
+    /**
+     * <code>uint32 leftHealth = 9;</code>
+     * @return The leftHealth.
+     */
+    @java.lang.Override
+    public int getLeftHealth() {
+      return leftHealth_;
+    }
+
+    public static final int LEFT_FIELD_NUMBER = 10;
+    private float left_;
+    /**
+     * <pre>
+     *距左障碍物的距离(单位:米),leftHealth为1时值有效
+     * </pre>
+     *
+     * <code>float left = 10;</code>
+     * @return The left.
+     */
+    @java.lang.Override
+    public float getLeft() {
+      return left_;
+    }
+
+    public static final int UPHEALTH_FIELD_NUMBER = 11;
+    private int upHealth_;
+    /**
+     * <code>uint32 upHealth = 11;</code>
+     * @return The upHealth.
+     */
+    @java.lang.Override
+    public int getUpHealth() {
+      return upHealth_;
+    }
+
+    public static final int UP_FIELD_NUMBER = 12;
+    private float up_;
+    /**
+     * <pre>
+     *距上障碍物的距离(单位:米),upHealth为1时值有效
+     * </pre>
+     *
+     * <code>float up = 12;</code>
+     * @return The up.
+     */
+    @java.lang.Override
+    public float getUp() {
+      return up_;
+    }
+
+    public static final int AVOIDANCEENABLESTATUSDOWN_FIELD_NUMBER = 13;
+    private int avoidanceEnableStatusDown_;
+    /**
+     * <pre>
+     *下视觉避障开关状态:0-关闭 1-打开
+     * </pre>
+     *
+     * <code>uint32 avoidanceEnableStatusDown = 13;</code>
+     * @return The avoidanceEnableStatusDown.
+     */
+    @java.lang.Override
+    public int getAvoidanceEnableStatusDown() {
+      return avoidanceEnableStatusDown_;
+    }
+
+    public static final int AVOIDANCEENABLESTATUSUP_FIELD_NUMBER = 14;
+    private int avoidanceEnableStatusUp_;
+    /**
+     * <pre>
+     *上视觉避障开关状态:0-关闭 1-打开
+     * </pre>
+     *
+     * <code>uint32 avoidanceEnableStatusUp = 14;</code>
+     * @return The avoidanceEnableStatusUp.
+     */
+    @java.lang.Override
+    public int getAvoidanceEnableStatusUp() {
+      return avoidanceEnableStatusUp_;
+    }
+
+    public static final int AVOIDANCEENABLESTATUSHORIZONTAL_FIELD_NUMBER = 15;
+    private int avoidanceEnableStatusHorizontal_;
+    /**
+     * <pre>
+     *水平视觉避障开关状态:0-关闭 1-打开
+     * </pre>
+     *
+     * <code>uint32 avoidanceEnableStatusHorizontal = 15;</code>
+     * @return The avoidanceEnableStatusHorizontal.
+     */
+    @java.lang.Override
+    public int getAvoidanceEnableStatusHorizontal() {
+      return avoidanceEnableStatusHorizontal_;
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (downHealth_ != 0) {
+        output.writeUInt32(1, downHealth_);
+      }
+      if (java.lang.Float.floatToRawIntBits(down_) != 0) {
+        output.writeFloat(2, down_);
+      }
+      if (frontHealth_ != 0) {
+        output.writeUInt32(3, frontHealth_);
+      }
+      if (java.lang.Float.floatToRawIntBits(front_) != 0) {
+        output.writeFloat(4, front_);
+      }
+      if (rightHealth_ != 0) {
+        output.writeUInt32(5, rightHealth_);
+      }
+      if (java.lang.Float.floatToRawIntBits(right_) != 0) {
+        output.writeFloat(6, right_);
+      }
+      if (backHealth_ != 0) {
+        output.writeUInt32(7, backHealth_);
+      }
+      if (java.lang.Float.floatToRawIntBits(back_) != 0) {
+        output.writeFloat(8, back_);
+      }
+      if (leftHealth_ != 0) {
+        output.writeUInt32(9, leftHealth_);
+      }
+      if (java.lang.Float.floatToRawIntBits(left_) != 0) {
+        output.writeFloat(10, left_);
+      }
+      if (upHealth_ != 0) {
+        output.writeUInt32(11, upHealth_);
+      }
+      if (java.lang.Float.floatToRawIntBits(up_) != 0) {
+        output.writeFloat(12, up_);
+      }
+      if (avoidanceEnableStatusDown_ != 0) {
+        output.writeUInt32(13, avoidanceEnableStatusDown_);
+      }
+      if (avoidanceEnableStatusUp_ != 0) {
+        output.writeUInt32(14, avoidanceEnableStatusUp_);
+      }
+      if (avoidanceEnableStatusHorizontal_ != 0) {
+        output.writeUInt32(15, avoidanceEnableStatusHorizontal_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (downHealth_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(1, downHealth_);
+      }
+      if (java.lang.Float.floatToRawIntBits(down_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(2, down_);
+      }
+      if (frontHealth_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(3, frontHealth_);
+      }
+      if (java.lang.Float.floatToRawIntBits(front_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(4, front_);
+      }
+      if (rightHealth_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(5, rightHealth_);
+      }
+      if (java.lang.Float.floatToRawIntBits(right_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(6, right_);
+      }
+      if (backHealth_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(7, backHealth_);
+      }
+      if (java.lang.Float.floatToRawIntBits(back_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(8, back_);
+      }
+      if (leftHealth_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(9, leftHealth_);
+      }
+      if (java.lang.Float.floatToRawIntBits(left_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(10, left_);
+      }
+      if (upHealth_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(11, upHealth_);
+      }
+      if (java.lang.Float.floatToRawIntBits(up_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(12, up_);
+      }
+      if (avoidanceEnableStatusDown_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(13, avoidanceEnableStatusDown_);
+      }
+      if (avoidanceEnableStatusUp_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(14, avoidanceEnableStatusUp_);
+      }
+      if (avoidanceEnableStatusHorizontal_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(15, avoidanceEnableStatusHorizontal_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData)) {
+        return super.equals(obj);
+      }
+      com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData other = (com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData) obj;
+
+      if (getDownHealth()
+          != other.getDownHealth()) return false;
+      if (java.lang.Float.floatToIntBits(getDown())
+          != java.lang.Float.floatToIntBits(
+              other.getDown())) return false;
+      if (getFrontHealth()
+          != other.getFrontHealth()) return false;
+      if (java.lang.Float.floatToIntBits(getFront())
+          != java.lang.Float.floatToIntBits(
+              other.getFront())) return false;
+      if (getRightHealth()
+          != other.getRightHealth()) return false;
+      if (java.lang.Float.floatToIntBits(getRight())
+          != java.lang.Float.floatToIntBits(
+              other.getRight())) return false;
+      if (getBackHealth()
+          != other.getBackHealth()) return false;
+      if (java.lang.Float.floatToIntBits(getBack())
+          != java.lang.Float.floatToIntBits(
+              other.getBack())) return false;
+      if (getLeftHealth()
+          != other.getLeftHealth()) return false;
+      if (java.lang.Float.floatToIntBits(getLeft())
+          != java.lang.Float.floatToIntBits(
+              other.getLeft())) return false;
+      if (getUpHealth()
+          != other.getUpHealth()) return false;
+      if (java.lang.Float.floatToIntBits(getUp())
+          != java.lang.Float.floatToIntBits(
+              other.getUp())) return false;
+      if (getAvoidanceEnableStatusDown()
+          != other.getAvoidanceEnableStatusDown()) return false;
+      if (getAvoidanceEnableStatusUp()
+          != other.getAvoidanceEnableStatusUp()) return false;
+      if (getAvoidanceEnableStatusHorizontal()
+          != other.getAvoidanceEnableStatusHorizontal()) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + DOWNHEALTH_FIELD_NUMBER;
+      hash = (53 * hash) + getDownHealth();
+      hash = (37 * hash) + DOWN_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getDown());
+      hash = (37 * hash) + FRONTHEALTH_FIELD_NUMBER;
+      hash = (53 * hash) + getFrontHealth();
+      hash = (37 * hash) + FRONT_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getFront());
+      hash = (37 * hash) + RIGHTHEALTH_FIELD_NUMBER;
+      hash = (53 * hash) + getRightHealth();
+      hash = (37 * hash) + RIGHT_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getRight());
+      hash = (37 * hash) + BACKHEALTH_FIELD_NUMBER;
+      hash = (53 * hash) + getBackHealth();
+      hash = (37 * hash) + BACK_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getBack());
+      hash = (37 * hash) + LEFTHEALTH_FIELD_NUMBER;
+      hash = (53 * hash) + getLeftHealth();
+      hash = (37 * hash) + LEFT_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getLeft());
+      hash = (37 * hash) + UPHEALTH_FIELD_NUMBER;
+      hash = (53 * hash) + getUpHealth();
+      hash = (37 * hash) + UP_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getUp());
+      hash = (37 * hash) + AVOIDANCEENABLESTATUSDOWN_FIELD_NUMBER;
+      hash = (53 * hash) + getAvoidanceEnableStatusDown();
+      hash = (37 * hash) + AVOIDANCEENABLESTATUSUP_FIELD_NUMBER;
+      hash = (53 * hash) + getAvoidanceEnableStatusUp();
+      hash = (37 * hash) + AVOIDANCEENABLESTATUSHORIZONTAL_FIELD_NUMBER;
+      hash = (53 * hash) + getAvoidanceEnableStatusHorizontal();
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     *避障数据
+     * </pre>
+     *
+     * Protobuf type {@code AvoidanceData}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:AvoidanceData)
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceDataOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_AvoidanceData_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_AvoidanceData_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData.class, com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData.Builder.class);
+      }
+
+      // Construct using com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        downHealth_ = 0;
+
+        down_ = 0F;
+
+        frontHealth_ = 0;
+
+        front_ = 0F;
+
+        rightHealth_ = 0;
+
+        right_ = 0F;
+
+        backHealth_ = 0;
+
+        back_ = 0F;
+
+        leftHealth_ = 0;
+
+        left_ = 0F;
+
+        upHealth_ = 0;
+
+        up_ = 0F;
+
+        avoidanceEnableStatusDown_ = 0;
+
+        avoidanceEnableStatusUp_ = 0;
+
+        avoidanceEnableStatusHorizontal_ = 0;
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_AvoidanceData_descriptor;
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData getDefaultInstanceForType() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData build() {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData buildPartial() {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData result = new com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData(this);
+        result.downHealth_ = downHealth_;
+        result.down_ = down_;
+        result.frontHealth_ = frontHealth_;
+        result.front_ = front_;
+        result.rightHealth_ = rightHealth_;
+        result.right_ = right_;
+        result.backHealth_ = backHealth_;
+        result.back_ = back_;
+        result.leftHealth_ = leftHealth_;
+        result.left_ = left_;
+        result.upHealth_ = upHealth_;
+        result.up_ = up_;
+        result.avoidanceEnableStatusDown_ = avoidanceEnableStatusDown_;
+        result.avoidanceEnableStatusUp_ = avoidanceEnableStatusUp_;
+        result.avoidanceEnableStatusHorizontal_ = avoidanceEnableStatusHorizontal_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData) {
+          return mergeFrom((com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData other) {
+        if (other == com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData.getDefaultInstance()) return this;
+        if (other.getDownHealth() != 0) {
+          setDownHealth(other.getDownHealth());
+        }
+        if (other.getDown() != 0F) {
+          setDown(other.getDown());
+        }
+        if (other.getFrontHealth() != 0) {
+          setFrontHealth(other.getFrontHealth());
+        }
+        if (other.getFront() != 0F) {
+          setFront(other.getFront());
+        }
+        if (other.getRightHealth() != 0) {
+          setRightHealth(other.getRightHealth());
+        }
+        if (other.getRight() != 0F) {
+          setRight(other.getRight());
+        }
+        if (other.getBackHealth() != 0) {
+          setBackHealth(other.getBackHealth());
+        }
+        if (other.getBack() != 0F) {
+          setBack(other.getBack());
+        }
+        if (other.getLeftHealth() != 0) {
+          setLeftHealth(other.getLeftHealth());
+        }
+        if (other.getLeft() != 0F) {
+          setLeft(other.getLeft());
+        }
+        if (other.getUpHealth() != 0) {
+          setUpHealth(other.getUpHealth());
+        }
+        if (other.getUp() != 0F) {
+          setUp(other.getUp());
+        }
+        if (other.getAvoidanceEnableStatusDown() != 0) {
+          setAvoidanceEnableStatusDown(other.getAvoidanceEnableStatusDown());
+        }
+        if (other.getAvoidanceEnableStatusUp() != 0) {
+          setAvoidanceEnableStatusUp(other.getAvoidanceEnableStatusUp());
+        }
+        if (other.getAvoidanceEnableStatusHorizontal() != 0) {
+          setAvoidanceEnableStatusHorizontal(other.getAvoidanceEnableStatusHorizontal());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private int downHealth_ ;
+      /**
+       * <code>uint32 downHealth = 1;</code>
+       * @return The downHealth.
+       */
+      @java.lang.Override
+      public int getDownHealth() {
+        return downHealth_;
+      }
+      /**
+       * <code>uint32 downHealth = 1;</code>
+       * @param value The downHealth to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDownHealth(int value) {
+        
+        downHealth_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>uint32 downHealth = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearDownHealth() {
+        
+        downHealth_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private float down_ ;
+      /**
+       * <pre>
+       *距下障碍物的距离(单位:米),downHealth为1时值有效
+       * </pre>
+       *
+       * <code>float down = 2;</code>
+       * @return The down.
+       */
+      @java.lang.Override
+      public float getDown() {
+        return down_;
+      }
+      /**
+       * <pre>
+       *距下障碍物的距离(单位:米),downHealth为1时值有效
+       * </pre>
+       *
+       * <code>float down = 2;</code>
+       * @param value The down to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDown(float value) {
+        
+        down_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *距下障碍物的距离(单位:米),downHealth为1时值有效
+       * </pre>
+       *
+       * <code>float down = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearDown() {
+        
+        down_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private int frontHealth_ ;
+      /**
+       * <code>uint32 frontHealth = 3;</code>
+       * @return The frontHealth.
+       */
+      @java.lang.Override
+      public int getFrontHealth() {
+        return frontHealth_;
+      }
+      /**
+       * <code>uint32 frontHealth = 3;</code>
+       * @param value The frontHealth to set.
+       * @return This builder for chaining.
+       */
+      public Builder setFrontHealth(int value) {
+        
+        frontHealth_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>uint32 frontHealth = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearFrontHealth() {
+        
+        frontHealth_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private float front_ ;
+      /**
+       * <pre>
+       *距前障碍物的距离(单位:米),frontHealth为1时值有效 
+       * </pre>
+       *
+       * <code>float front = 4;</code>
+       * @return The front.
+       */
+      @java.lang.Override
+      public float getFront() {
+        return front_;
+      }
+      /**
+       * <pre>
+       *距前障碍物的距离(单位:米),frontHealth为1时值有效 
+       * </pre>
+       *
+       * <code>float front = 4;</code>
+       * @param value The front to set.
+       * @return This builder for chaining.
+       */
+      public Builder setFront(float value) {
+        
+        front_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *距前障碍物的距离(单位:米),frontHealth为1时值有效 
+       * </pre>
+       *
+       * <code>float front = 4;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearFront() {
+        
+        front_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private int rightHealth_ ;
+      /**
+       * <code>uint32 rightHealth = 5;</code>
+       * @return The rightHealth.
+       */
+      @java.lang.Override
+      public int getRightHealth() {
+        return rightHealth_;
+      }
+      /**
+       * <code>uint32 rightHealth = 5;</code>
+       * @param value The rightHealth to set.
+       * @return This builder for chaining.
+       */
+      public Builder setRightHealth(int value) {
+        
+        rightHealth_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>uint32 rightHealth = 5;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearRightHealth() {
+        
+        rightHealth_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private float right_ ;
+      /**
+       * <pre>
+       *距右障碍物的距离(单位:米),rightHealth为1时值有效
+       * </pre>
+       *
+       * <code>float right = 6;</code>
+       * @return The right.
+       */
+      @java.lang.Override
+      public float getRight() {
+        return right_;
+      }
+      /**
+       * <pre>
+       *距右障碍物的距离(单位:米),rightHealth为1时值有效
+       * </pre>
+       *
+       * <code>float right = 6;</code>
+       * @param value The right to set.
+       * @return This builder for chaining.
+       */
+      public Builder setRight(float value) {
+        
+        right_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *距右障碍物的距离(单位:米),rightHealth为1时值有效
+       * </pre>
+       *
+       * <code>float right = 6;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearRight() {
+        
+        right_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private int backHealth_ ;
+      /**
+       * <code>uint32 backHealth = 7;</code>
+       * @return The backHealth.
+       */
+      @java.lang.Override
+      public int getBackHealth() {
+        return backHealth_;
+      }
+      /**
+       * <code>uint32 backHealth = 7;</code>
+       * @param value The backHealth to set.
+       * @return This builder for chaining.
+       */
+      public Builder setBackHealth(int value) {
+        
+        backHealth_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>uint32 backHealth = 7;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearBackHealth() {
+        
+        backHealth_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private float back_ ;
+      /**
+       * <pre>
+       *距后障碍物的距离(单位:米),backHealth为1时值有效
+       * </pre>
+       *
+       * <code>float back = 8;</code>
+       * @return The back.
+       */
+      @java.lang.Override
+      public float getBack() {
+        return back_;
+      }
+      /**
+       * <pre>
+       *距后障碍物的距离(单位:米),backHealth为1时值有效
+       * </pre>
+       *
+       * <code>float back = 8;</code>
+       * @param value The back to set.
+       * @return This builder for chaining.
+       */
+      public Builder setBack(float value) {
+        
+        back_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *距后障碍物的距离(单位:米),backHealth为1时值有效
+       * </pre>
+       *
+       * <code>float back = 8;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearBack() {
+        
+        back_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private int leftHealth_ ;
+      /**
+       * <code>uint32 leftHealth = 9;</code>
+       * @return The leftHealth.
+       */
+      @java.lang.Override
+      public int getLeftHealth() {
+        return leftHealth_;
+      }
+      /**
+       * <code>uint32 leftHealth = 9;</code>
+       * @param value The leftHealth to set.
+       * @return This builder for chaining.
+       */
+      public Builder setLeftHealth(int value) {
+        
+        leftHealth_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>uint32 leftHealth = 9;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearLeftHealth() {
+        
+        leftHealth_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private float left_ ;
+      /**
+       * <pre>
+       *距左障碍物的距离(单位:米),leftHealth为1时值有效
+       * </pre>
+       *
+       * <code>float left = 10;</code>
+       * @return The left.
+       */
+      @java.lang.Override
+      public float getLeft() {
+        return left_;
+      }
+      /**
+       * <pre>
+       *距左障碍物的距离(单位:米),leftHealth为1时值有效
+       * </pre>
+       *
+       * <code>float left = 10;</code>
+       * @param value The left to set.
+       * @return This builder for chaining.
+       */
+      public Builder setLeft(float value) {
+        
+        left_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *距左障碍物的距离(单位:米),leftHealth为1时值有效
+       * </pre>
+       *
+       * <code>float left = 10;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearLeft() {
+        
+        left_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private int upHealth_ ;
+      /**
+       * <code>uint32 upHealth = 11;</code>
+       * @return The upHealth.
+       */
+      @java.lang.Override
+      public int getUpHealth() {
+        return upHealth_;
+      }
+      /**
+       * <code>uint32 upHealth = 11;</code>
+       * @param value The upHealth to set.
+       * @return This builder for chaining.
+       */
+      public Builder setUpHealth(int value) {
+        
+        upHealth_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>uint32 upHealth = 11;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearUpHealth() {
+        
+        upHealth_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private float up_ ;
+      /**
+       * <pre>
+       *距上障碍物的距离(单位:米),upHealth为1时值有效
+       * </pre>
+       *
+       * <code>float up = 12;</code>
+       * @return The up.
+       */
+      @java.lang.Override
+      public float getUp() {
+        return up_;
+      }
+      /**
+       * <pre>
+       *距上障碍物的距离(单位:米),upHealth为1时值有效
+       * </pre>
+       *
+       * <code>float up = 12;</code>
+       * @param value The up to set.
+       * @return This builder for chaining.
+       */
+      public Builder setUp(float value) {
+        
+        up_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *距上障碍物的距离(单位:米),upHealth为1时值有效
+       * </pre>
+       *
+       * <code>float up = 12;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearUp() {
+        
+        up_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private int avoidanceEnableStatusDown_ ;
+      /**
+       * <pre>
+       *下视觉避障开关状态:0-关闭 1-打开
+       * </pre>
+       *
+       * <code>uint32 avoidanceEnableStatusDown = 13;</code>
+       * @return The avoidanceEnableStatusDown.
+       */
+      @java.lang.Override
+      public int getAvoidanceEnableStatusDown() {
+        return avoidanceEnableStatusDown_;
+      }
+      /**
+       * <pre>
+       *下视觉避障开关状态:0-关闭 1-打开
+       * </pre>
+       *
+       * <code>uint32 avoidanceEnableStatusDown = 13;</code>
+       * @param value The avoidanceEnableStatusDown to set.
+       * @return This builder for chaining.
+       */
+      public Builder setAvoidanceEnableStatusDown(int value) {
+        
+        avoidanceEnableStatusDown_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *下视觉避障开关状态:0-关闭 1-打开
+       * </pre>
+       *
+       * <code>uint32 avoidanceEnableStatusDown = 13;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearAvoidanceEnableStatusDown() {
+        
+        avoidanceEnableStatusDown_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int avoidanceEnableStatusUp_ ;
+      /**
+       * <pre>
+       *上视觉避障开关状态:0-关闭 1-打开
+       * </pre>
+       *
+       * <code>uint32 avoidanceEnableStatusUp = 14;</code>
+       * @return The avoidanceEnableStatusUp.
+       */
+      @java.lang.Override
+      public int getAvoidanceEnableStatusUp() {
+        return avoidanceEnableStatusUp_;
+      }
+      /**
+       * <pre>
+       *上视觉避障开关状态:0-关闭 1-打开
+       * </pre>
+       *
+       * <code>uint32 avoidanceEnableStatusUp = 14;</code>
+       * @param value The avoidanceEnableStatusUp to set.
+       * @return This builder for chaining.
+       */
+      public Builder setAvoidanceEnableStatusUp(int value) {
+        
+        avoidanceEnableStatusUp_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *上视觉避障开关状态:0-关闭 1-打开
+       * </pre>
+       *
+       * <code>uint32 avoidanceEnableStatusUp = 14;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearAvoidanceEnableStatusUp() {
+        
+        avoidanceEnableStatusUp_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int avoidanceEnableStatusHorizontal_ ;
+      /**
+       * <pre>
+       *水平视觉避障开关状态:0-关闭 1-打开
+       * </pre>
+       *
+       * <code>uint32 avoidanceEnableStatusHorizontal = 15;</code>
+       * @return The avoidanceEnableStatusHorizontal.
+       */
+      @java.lang.Override
+      public int getAvoidanceEnableStatusHorizontal() {
+        return avoidanceEnableStatusHorizontal_;
+      }
+      /**
+       * <pre>
+       *水平视觉避障开关状态:0-关闭 1-打开
+       * </pre>
+       *
+       * <code>uint32 avoidanceEnableStatusHorizontal = 15;</code>
+       * @param value The avoidanceEnableStatusHorizontal to set.
+       * @return This builder for chaining.
+       */
+      public Builder setAvoidanceEnableStatusHorizontal(int value) {
+        
+        avoidanceEnableStatusHorizontal_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *水平视觉避障开关状态:0-关闭 1-打开
+       * </pre>
+       *
+       * <code>uint32 avoidanceEnableStatusHorizontal = 15;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearAvoidanceEnableStatusHorizontal() {
+        
+        avoidanceEnableStatusHorizontal_ = 0;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:AvoidanceData)
+    }
+
+    // @@protoc_insertion_point(class_scope:AvoidanceData)
+    private static final com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData();
+    }
+
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<AvoidanceData>
+        PARSER = new com.google.protobuf.AbstractParser<AvoidanceData>() {
+      @java.lang.Override
+      public AvoidanceData parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new AvoidanceData(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<AvoidanceData> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<AvoidanceData> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.AvoidanceData getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface HmsAlarmDataOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:HmsAlarmData)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <pre>
+     *报警信息ID
+     * </pre>
+     *
+     * <code>uint32 alarmId = 1;</code>
+     * @return The alarmId.
+     */
+    int getAlarmId();
+
+    /**
+     * <pre>
+     *等级[1/2-警告 3/4/5-错误]
+     * </pre>
+     *
+     * <code>uint32 reportLevel = 2;</code>
+     * @return The reportLevel.
+     */
+    int getReportLevel();
+
+    /**
+     * <pre>
+     *报警信息描述(说明:支持中文和英文版本,默认中文,如需切换请联系技术支持)
+     * </pre>
+     *
+     * <code>string alarmMssInfo = 3;</code>
+     * @return The alarmMssInfo.
+     */
+    java.lang.String getAlarmMssInfo();
+    /**
+     * <pre>
+     *报警信息描述(说明:支持中文和英文版本,默认中文,如需切换请联系技术支持)
+     * </pre>
+     *
+     * <code>string alarmMssInfo = 3;</code>
+     * @return The bytes for alarmMssInfo.
+     */
+    com.google.protobuf.ByteString
+        getAlarmMssInfoBytes();
+  }
+  /**
+   * <pre>
+   *Hms报警信息
+   * </pre>
+   *
+   * Protobuf type {@code HmsAlarmData}
+   */
+  public static final class HmsAlarmData extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:HmsAlarmData)
+      HmsAlarmDataOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use HmsAlarmData.newBuilder() to construct.
+    private HmsAlarmData(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private HmsAlarmData() {
+      alarmMssInfo_ = "";
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new HmsAlarmData();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private HmsAlarmData(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 8: {
+
+              alarmId_ = input.readUInt32();
+              break;
+            }
+            case 16: {
+
+              reportLevel_ = input.readUInt32();
+              break;
+            }
+            case 26: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              alarmMssInfo_ = s;
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_HmsAlarmData_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_HmsAlarmData_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData.class, com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData.Builder.class);
+    }
+
+    public static final int ALARMID_FIELD_NUMBER = 1;
+    private int alarmId_;
+    /**
+     * <pre>
+     *报警信息ID
+     * </pre>
+     *
+     * <code>uint32 alarmId = 1;</code>
+     * @return The alarmId.
+     */
+    @java.lang.Override
+    public int getAlarmId() {
+      return alarmId_;
+    }
+
+    public static final int REPORTLEVEL_FIELD_NUMBER = 2;
+    private int reportLevel_;
+    /**
+     * <pre>
+     *等级[1/2-警告 3/4/5-错误]
+     * </pre>
+     *
+     * <code>uint32 reportLevel = 2;</code>
+     * @return The reportLevel.
+     */
+    @java.lang.Override
+    public int getReportLevel() {
+      return reportLevel_;
+    }
+
+    public static final int ALARMMSSINFO_FIELD_NUMBER = 3;
+    private volatile java.lang.Object alarmMssInfo_;
+    /**
+     * <pre>
+     *报警信息描述(说明:支持中文和英文版本,默认中文,如需切换请联系技术支持)
+     * </pre>
+     *
+     * <code>string alarmMssInfo = 3;</code>
+     * @return The alarmMssInfo.
+     */
+    @java.lang.Override
+    public java.lang.String getAlarmMssInfo() {
+      java.lang.Object ref = alarmMssInfo_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        alarmMssInfo_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     *报警信息描述(说明:支持中文和英文版本,默认中文,如需切换请联系技术支持)
+     * </pre>
+     *
+     * <code>string alarmMssInfo = 3;</code>
+     * @return The bytes for alarmMssInfo.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getAlarmMssInfoBytes() {
+      java.lang.Object ref = alarmMssInfo_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        alarmMssInfo_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (alarmId_ != 0) {
+        output.writeUInt32(1, alarmId_);
+      }
+      if (reportLevel_ != 0) {
+        output.writeUInt32(2, reportLevel_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(alarmMssInfo_)) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, alarmMssInfo_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (alarmId_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(1, alarmId_);
+      }
+      if (reportLevel_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(2, reportLevel_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(alarmMssInfo_)) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, alarmMssInfo_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData)) {
+        return super.equals(obj);
+      }
+      com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData other = (com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData) obj;
+
+      if (getAlarmId()
+          != other.getAlarmId()) return false;
+      if (getReportLevel()
+          != other.getReportLevel()) return false;
+      if (!getAlarmMssInfo()
+          .equals(other.getAlarmMssInfo())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + ALARMID_FIELD_NUMBER;
+      hash = (53 * hash) + getAlarmId();
+      hash = (37 * hash) + REPORTLEVEL_FIELD_NUMBER;
+      hash = (53 * hash) + getReportLevel();
+      hash = (37 * hash) + ALARMMSSINFO_FIELD_NUMBER;
+      hash = (53 * hash) + getAlarmMssInfo().hashCode();
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     *Hms报警信息
+     * </pre>
+     *
+     * Protobuf type {@code HmsAlarmData}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:HmsAlarmData)
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmDataOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_HmsAlarmData_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_HmsAlarmData_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData.class, com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData.Builder.class);
+      }
+
+      // Construct using com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        alarmId_ = 0;
+
+        reportLevel_ = 0;
+
+        alarmMssInfo_ = "";
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_HmsAlarmData_descriptor;
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData getDefaultInstanceForType() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData build() {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData buildPartial() {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData result = new com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData(this);
+        result.alarmId_ = alarmId_;
+        result.reportLevel_ = reportLevel_;
+        result.alarmMssInfo_ = alarmMssInfo_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData) {
+          return mergeFrom((com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData other) {
+        if (other == com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData.getDefaultInstance()) return this;
+        if (other.getAlarmId() != 0) {
+          setAlarmId(other.getAlarmId());
+        }
+        if (other.getReportLevel() != 0) {
+          setReportLevel(other.getReportLevel());
+        }
+        if (!other.getAlarmMssInfo().isEmpty()) {
+          alarmMssInfo_ = other.alarmMssInfo_;
+          onChanged();
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private int alarmId_ ;
+      /**
+       * <pre>
+       *报警信息ID
+       * </pre>
+       *
+       * <code>uint32 alarmId = 1;</code>
+       * @return The alarmId.
+       */
+      @java.lang.Override
+      public int getAlarmId() {
+        return alarmId_;
+      }
+      /**
+       * <pre>
+       *报警信息ID
+       * </pre>
+       *
+       * <code>uint32 alarmId = 1;</code>
+       * @param value The alarmId to set.
+       * @return This builder for chaining.
+       */
+      public Builder setAlarmId(int value) {
+        
+        alarmId_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *报警信息ID
+       * </pre>
+       *
+       * <code>uint32 alarmId = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearAlarmId() {
+        
+        alarmId_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int reportLevel_ ;
+      /**
+       * <pre>
+       *等级[1/2-警告 3/4/5-错误]
+       * </pre>
+       *
+       * <code>uint32 reportLevel = 2;</code>
+       * @return The reportLevel.
+       */
+      @java.lang.Override
+      public int getReportLevel() {
+        return reportLevel_;
+      }
+      /**
+       * <pre>
+       *等级[1/2-警告 3/4/5-错误]
+       * </pre>
+       *
+       * <code>uint32 reportLevel = 2;</code>
+       * @param value The reportLevel to set.
+       * @return This builder for chaining.
+       */
+      public Builder setReportLevel(int value) {
+        
+        reportLevel_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *等级[1/2-警告 3/4/5-错误]
+       * </pre>
+       *
+       * <code>uint32 reportLevel = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearReportLevel() {
+        
+        reportLevel_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object alarmMssInfo_ = "";
+      /**
+       * <pre>
+       *报警信息描述(说明:支持中文和英文版本,默认中文,如需切换请联系技术支持)
+       * </pre>
+       *
+       * <code>string alarmMssInfo = 3;</code>
+       * @return The alarmMssInfo.
+       */
+      public java.lang.String getAlarmMssInfo() {
+        java.lang.Object ref = alarmMssInfo_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          alarmMssInfo_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       *报警信息描述(说明:支持中文和英文版本,默认中文,如需切换请联系技术支持)
+       * </pre>
+       *
+       * <code>string alarmMssInfo = 3;</code>
+       * @return The bytes for alarmMssInfo.
+       */
+      public com.google.protobuf.ByteString
+          getAlarmMssInfoBytes() {
+        java.lang.Object ref = alarmMssInfo_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          alarmMssInfo_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       *报警信息描述(说明:支持中文和英文版本,默认中文,如需切换请联系技术支持)
+       * </pre>
+       *
+       * <code>string alarmMssInfo = 3;</code>
+       * @param value The alarmMssInfo to set.
+       * @return This builder for chaining.
+       */
+      public Builder setAlarmMssInfo(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        alarmMssInfo_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *报警信息描述(说明:支持中文和英文版本,默认中文,如需切换请联系技术支持)
+       * </pre>
+       *
+       * <code>string alarmMssInfo = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearAlarmMssInfo() {
+        
+        alarmMssInfo_ = getDefaultInstance().getAlarmMssInfo();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *报警信息描述(说明:支持中文和英文版本,默认中文,如需切换请联系技术支持)
+       * </pre>
+       *
+       * <code>string alarmMssInfo = 3;</code>
+       * @param value The bytes for alarmMssInfo to set.
+       * @return This builder for chaining.
+       */
+      public Builder setAlarmMssInfoBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        alarmMssInfo_ = value;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:HmsAlarmData)
+    }
+
+    // @@protoc_insertion_point(class_scope:HmsAlarmData)
+    private static final com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData();
+    }
+
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<HmsAlarmData>
+        PARSER = new com.google.protobuf.AbstractParser<HmsAlarmData>() {
+      @java.lang.Override
+      public HmsAlarmData parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new HmsAlarmData(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<HmsAlarmData> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<HmsAlarmData> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.HmsAlarmData getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface PlanLineDataOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:PlanLineData)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <pre>
+     *结束航线后动作:1=返航,2=原地悬停,3=原地降落,4=原地绕飞[目前只osdk4.1版本支持,中心点为最后一个航点,飞机绕此点画圆飞行],5=返回至第一个航点并悬停[如果飞机到最后一个点时RC和飞机失联,飞机会在最后一个点悬停]
+     * </pre>
+     *
+     * <code>uint32 finishedAction = 1;</code>
+     * @return The finishedAction.
+     */
+    int getFinishedAction();
+
+    /**
+     * <pre>
+     *最大飞行速度(单位:米/秒,范围0~15),默认15
+     * </pre>
+     *
+     * <code>float maxSpeed = 2;</code>
+     * @return The maxSpeed.
+     */
+    float getMaxSpeed();
+
+    /**
+     * <pre>
+     *自动飞行速度(单位:米/秒,范围0~15),默认8
+     * </pre>
+     *
+     * <code>float autoSpeed = 3;</code>
+     * @return The autoSpeed.
+     */
+    float getAutoSpeed();
+
+    /**
+     * <pre>
+     *坐标点数组
+     * </pre>
+     *
+     * <code>repeated .PointData points = 4;</code>
+     */
+    java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData> 
+        getPointsList();
+    /**
+     * <pre>
+     *坐标点数组
+     * </pre>
+     *
+     * <code>repeated .PointData points = 4;</code>
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData getPoints(int index);
+    /**
+     * <pre>
+     *坐标点数组
+     * </pre>
+     *
+     * <code>repeated .PointData points = 4;</code>
+     */
+    int getPointsCount();
+    /**
+     * <pre>
+     *坐标点数组
+     * </pre>
+     *
+     * <code>repeated .PointData points = 4;</code>
+     */
+    java.util.List<? extends com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder> 
+        getPointsOrBuilderList();
+    /**
+     * <pre>
+     *坐标点数组
+     * </pre>
+     *
+     * <code>repeated .PointData points = 4;</code>
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder getPointsOrBuilder(
+        int index);
+
+    /**
+     * <pre>
+     *网络失联后动作:0=返回HOME点,1=继续航线,默认0
+     * </pre>
+     *
+     * <code>uint32 loseAction = 5;</code>
+     * @return The loseAction.
+     */
+    int getLoseAction();
+
+    /**
+     * <pre>
+     *返航高度:(单位:米,范围20~1500),说明:此值为相对起飞点高度,如果太高会有失去网络覆盖风险。不同飞行器返航逻辑不一样,若飞行器距HOME点距离过近,可能不会升高再返航。具体逻辑请咨询大疆DJI
+     * </pre>
+     *
+     * <code>uint32 homeHeight = 6;</code>
+     * @return The homeHeight.
+     */
+    int getHomeHeight();
+
+    /**
+     * <pre>
+     *是否开启节能模式:0=不是,1=是(说明:节能模式下,飞机沿最短直线距离由起飞点到航线第一个航点,非升高到第一个航点高度再飞往第一个航点)
+     * </pre>
+     *
+     * <code>uint32 isSaveEnergyMode = 7;</code>
+     * @return The isSaveEnergyMode.
+     */
+    int getIsSaveEnergyMode();
+
+    /**
+     * <pre>
+     *起飞点机库信息
+     * </pre>
+     *
+     * <code>.HangarPoint takePoint = 8;</code>
+     * @return Whether the takePoint field is set.
+     */
+    boolean hasTakePoint();
+    /**
+     * <pre>
+     *起飞点机库信息
+     * </pre>
+     *
+     * <code>.HangarPoint takePoint = 8;</code>
+     * @return The takePoint.
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint getTakePoint();
+    /**
+     * <pre>
+     *起飞点机库信息
+     * </pre>
+     *
+     * <code>.HangarPoint takePoint = 8;</code>
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPointOrBuilder getTakePointOrBuilder();
+
+    /**
+     * <pre>
+     *降落点机库信息
+     * </pre>
+     *
+     * <code>.HangarPoint landPoint = 9;</code>
+     * @return Whether the landPoint field is set.
+     */
+    boolean hasLandPoint();
+    /**
+     * <pre>
+     *降落点机库信息
+     * </pre>
+     *
+     * <code>.HangarPoint landPoint = 9;</code>
+     * @return The landPoint.
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint getLandPoint();
+    /**
+     * <pre>
+     *降落点机库信息
+     * </pre>
+     *
+     * <code>.HangarPoint landPoint = 9;</code>
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPointOrBuilder getLandPointOrBuilder();
+
+    /**
+     * <pre>
+     *兴趣点数组(对象只包含经纬高)
+     * </pre>
+     *
+     * <code>repeated .PointData interests = 10;</code>
+     */
+    java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData> 
+        getInterestsList();
+    /**
+     * <pre>
+     *兴趣点数组(对象只包含经纬高)
+     * </pre>
+     *
+     * <code>repeated .PointData interests = 10;</code>
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData getInterests(int index);
+    /**
+     * <pre>
+     *兴趣点数组(对象只包含经纬高)
+     * </pre>
+     *
+     * <code>repeated .PointData interests = 10;</code>
+     */
+    int getInterestsCount();
+    /**
+     * <pre>
+     *兴趣点数组(对象只包含经纬高)
+     * </pre>
+     *
+     * <code>repeated .PointData interests = 10;</code>
+     */
+    java.util.List<? extends com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder> 
+        getInterestsOrBuilderList();
+    /**
+     * <pre>
+     *兴趣点数组(对象只包含经纬高)
+     * </pre>
+     *
+     * <code>repeated .PointData interests = 10;</code>
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder getInterestsOrBuilder(
+        int index);
+
+    /**
+     * <pre>
+     *普通建模
+     * </pre>
+     *
+     * <code>.NormalModel normalModel = 11;</code>
+     * @return Whether the normalModel field is set.
+     */
+    boolean hasNormalModel();
+    /**
+     * <pre>
+     *普通建模
+     * </pre>
+     *
+     * <code>.NormalModel normalModel = 11;</code>
+     * @return The normalModel.
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel getNormalModel();
+    /**
+     * <pre>
+     *普通建模
+     * </pre>
+     *
+     * <code>.NormalModel normalModel = 11;</code>
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModelOrBuilder getNormalModelOrBuilder();
+
+    /**
+     * <pre>
+     *环绕建模
+     * </pre>
+     *
+     * <code>.SurroundModel surroundModel = 12;</code>
+     * @return Whether the surroundModel field is set.
+     */
+    boolean hasSurroundModel();
+    /**
+     * <pre>
+     *环绕建模
+     * </pre>
+     *
+     * <code>.SurroundModel surroundModel = 12;</code>
+     * @return The surroundModel.
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel getSurroundModel();
+    /**
+     * <pre>
+     *环绕建模
+     * </pre>
+     *
+     * <code>.SurroundModel surroundModel = 12;</code>
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModelOrBuilder getSurroundModelOrBuilder();
+
+    /**
+     * <pre>
+     *起飞点(对象只包含经纬高)
+     * </pre>
+     *
+     * <code>.PointData takeOffPoint = 13;</code>
+     * @return Whether the takeOffPoint field is set.
+     */
+    boolean hasTakeOffPoint();
+    /**
+     * <pre>
+     *起飞点(对象只包含经纬高)
+     * </pre>
+     *
+     * <code>.PointData takeOffPoint = 13;</code>
+     * @return The takeOffPoint.
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData getTakeOffPoint();
+    /**
+     * <pre>
+     *起飞点(对象只包含经纬高)
+     * </pre>
+     *
+     * <code>.PointData takeOffPoint = 13;</code>
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder getTakeOffPointOrBuilder();
+  }
+  /**
+   * <pre>
+   *航线
+   * </pre>
+   *
+   * Protobuf type {@code PlanLineData}
+   */
+  public static final class PlanLineData extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:PlanLineData)
+      PlanLineDataOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use PlanLineData.newBuilder() to construct.
+    private PlanLineData(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private PlanLineData() {
+      points_ = java.util.Collections.emptyList();
+      interests_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new PlanLineData();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private PlanLineData(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 8: {
+
+              finishedAction_ = input.readUInt32();
+              break;
+            }
+            case 21: {
+
+              maxSpeed_ = input.readFloat();
+              break;
+            }
+            case 29: {
+
+              autoSpeed_ = input.readFloat();
+              break;
+            }
+            case 34: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                points_ = new java.util.ArrayList<com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              points_.add(
+                  input.readMessage(com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.parser(), extensionRegistry));
+              break;
+            }
+            case 40: {
+
+              loseAction_ = input.readUInt32();
+              break;
+            }
+            case 48: {
+
+              homeHeight_ = input.readUInt32();
+              break;
+            }
+            case 56: {
+
+              isSaveEnergyMode_ = input.readUInt32();
+              break;
+            }
+            case 66: {
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint.Builder subBuilder = null;
+              if (takePoint_ != null) {
+                subBuilder = takePoint_.toBuilder();
+              }
+              takePoint_ = input.readMessage(com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(takePoint_);
+                takePoint_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 74: {
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint.Builder subBuilder = null;
+              if (landPoint_ != null) {
+                subBuilder = landPoint_.toBuilder();
+              }
+              landPoint_ = input.readMessage(com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(landPoint_);
+                landPoint_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 82: {
+              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
+                interests_ = new java.util.ArrayList<com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData>();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              interests_.add(
+                  input.readMessage(com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.parser(), extensionRegistry));
+              break;
+            }
+            case 90: {
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel.Builder subBuilder = null;
+              if (normalModel_ != null) {
+                subBuilder = normalModel_.toBuilder();
+              }
+              normalModel_ = input.readMessage(com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(normalModel_);
+                normalModel_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 98: {
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel.Builder subBuilder = null;
+              if (surroundModel_ != null) {
+                subBuilder = surroundModel_.toBuilder();
+              }
+              surroundModel_ = input.readMessage(com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(surroundModel_);
+                surroundModel_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 106: {
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder subBuilder = null;
+              if (takeOffPoint_ != null) {
+                subBuilder = takeOffPoint_.toBuilder();
+              }
+              takeOffPoint_ = input.readMessage(com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(takeOffPoint_);
+                takeOffPoint_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          points_ = java.util.Collections.unmodifiableList(points_);
+        }
+        if (((mutable_bitField0_ & 0x00000002) != 0)) {
+          interests_ = java.util.Collections.unmodifiableList(interests_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_PlanLineData_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_PlanLineData_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.PlanLineData.class, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PlanLineData.Builder.class);
+    }
+
+    public static final int FINISHEDACTION_FIELD_NUMBER = 1;
+    private int finishedAction_;
+    /**
+     * <pre>
+     *结束航线后动作:1=返航,2=原地悬停,3=原地降落,4=原地绕飞[目前只osdk4.1版本支持,中心点为最后一个航点,飞机绕此点画圆飞行],5=返回至第一个航点并悬停[如果飞机到最后一个点时RC和飞机失联,飞机会在最后一个点悬停]
+     * </pre>
+     *
+     * <code>uint32 finishedAction = 1;</code>
+     * @return The finishedAction.
+     */
+    @java.lang.Override
+    public int getFinishedAction() {
+      return finishedAction_;
+    }
+
+    public static final int MAXSPEED_FIELD_NUMBER = 2;
+    private float maxSpeed_;
+    /**
+     * <pre>
+     *最大飞行速度(单位:米/秒,范围0~15),默认15
+     * </pre>
+     *
+     * <code>float maxSpeed = 2;</code>
+     * @return The maxSpeed.
+     */
+    @java.lang.Override
+    public float getMaxSpeed() {
+      return maxSpeed_;
+    }
+
+    public static final int AUTOSPEED_FIELD_NUMBER = 3;
+    private float autoSpeed_;
+    /**
+     * <pre>
+     *自动飞行速度(单位:米/秒,范围0~15),默认8
+     * </pre>
+     *
+     * <code>float autoSpeed = 3;</code>
+     * @return The autoSpeed.
+     */
+    @java.lang.Override
+    public float getAutoSpeed() {
+      return autoSpeed_;
+    }
+
+    public static final int POINTS_FIELD_NUMBER = 4;
+    private java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData> points_;
+    /**
+     * <pre>
+     *坐标点数组
+     * </pre>
+     *
+     * <code>repeated .PointData points = 4;</code>
+     */
+    @java.lang.Override
+    public java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData> getPointsList() {
+      return points_;
+    }
+    /**
+     * <pre>
+     *坐标点数组
+     * </pre>
+     *
+     * <code>repeated .PointData points = 4;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder> 
+        getPointsOrBuilderList() {
+      return points_;
+    }
+    /**
+     * <pre>
+     *坐标点数组
+     * </pre>
+     *
+     * <code>repeated .PointData points = 4;</code>
+     */
+    @java.lang.Override
+    public int getPointsCount() {
+      return points_.size();
+    }
+    /**
+     * <pre>
+     *坐标点数组
+     * </pre>
+     *
+     * <code>repeated .PointData points = 4;</code>
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData getPoints(int index) {
+      return points_.get(index);
+    }
+    /**
+     * <pre>
+     *坐标点数组
+     * </pre>
+     *
+     * <code>repeated .PointData points = 4;</code>
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder getPointsOrBuilder(
+        int index) {
+      return points_.get(index);
+    }
+
+    public static final int LOSEACTION_FIELD_NUMBER = 5;
+    private int loseAction_;
+    /**
+     * <pre>
+     *网络失联后动作:0=返回HOME点,1=继续航线,默认0
+     * </pre>
+     *
+     * <code>uint32 loseAction = 5;</code>
+     * @return The loseAction.
+     */
+    @java.lang.Override
+    public int getLoseAction() {
+      return loseAction_;
+    }
+
+    public static final int HOMEHEIGHT_FIELD_NUMBER = 6;
+    private int homeHeight_;
+    /**
+     * <pre>
+     *返航高度:(单位:米,范围20~1500),说明:此值为相对起飞点高度,如果太高会有失去网络覆盖风险。不同飞行器返航逻辑不一样,若飞行器距HOME点距离过近,可能不会升高再返航。具体逻辑请咨询大疆DJI
+     * </pre>
+     *
+     * <code>uint32 homeHeight = 6;</code>
+     * @return The homeHeight.
+     */
+    @java.lang.Override
+    public int getHomeHeight() {
+      return homeHeight_;
+    }
+
+    public static final int ISSAVEENERGYMODE_FIELD_NUMBER = 7;
+    private int isSaveEnergyMode_;
+    /**
+     * <pre>
+     *是否开启节能模式:0=不是,1=是(说明:节能模式下,飞机沿最短直线距离由起飞点到航线第一个航点,非升高到第一个航点高度再飞往第一个航点)
+     * </pre>
+     *
+     * <code>uint32 isSaveEnergyMode = 7;</code>
+     * @return The isSaveEnergyMode.
+     */
+    @java.lang.Override
+    public int getIsSaveEnergyMode() {
+      return isSaveEnergyMode_;
+    }
+
+    public static final int TAKEPOINT_FIELD_NUMBER = 8;
+    private com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint takePoint_;
+    /**
+     * <pre>
+     *起飞点机库信息
+     * </pre>
+     *
+     * <code>.HangarPoint takePoint = 8;</code>
+     * @return Whether the takePoint field is set.
+     */
+    @java.lang.Override
+    public boolean hasTakePoint() {
+      return takePoint_ != null;
+    }
+    /**
+     * <pre>
+     *起飞点机库信息
+     * </pre>
+     *
+     * <code>.HangarPoint takePoint = 8;</code>
+     * @return The takePoint.
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint getTakePoint() {
+      return takePoint_ == null ? com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint.getDefaultInstance() : takePoint_;
+    }
+    /**
+     * <pre>
+     *起飞点机库信息
+     * </pre>
+     *
+     * <code>.HangarPoint takePoint = 8;</code>
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPointOrBuilder getTakePointOrBuilder() {
+      return getTakePoint();
+    }
+
+    public static final int LANDPOINT_FIELD_NUMBER = 9;
+    private com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint landPoint_;
+    /**
+     * <pre>
+     *降落点机库信息
+     * </pre>
+     *
+     * <code>.HangarPoint landPoint = 9;</code>
+     * @return Whether the landPoint field is set.
+     */
+    @java.lang.Override
+    public boolean hasLandPoint() {
+      return landPoint_ != null;
+    }
+    /**
+     * <pre>
+     *降落点机库信息
+     * </pre>
+     *
+     * <code>.HangarPoint landPoint = 9;</code>
+     * @return The landPoint.
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint getLandPoint() {
+      return landPoint_ == null ? com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint.getDefaultInstance() : landPoint_;
+    }
+    /**
+     * <pre>
+     *降落点机库信息
+     * </pre>
+     *
+     * <code>.HangarPoint landPoint = 9;</code>
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPointOrBuilder getLandPointOrBuilder() {
+      return getLandPoint();
+    }
+
+    public static final int INTERESTS_FIELD_NUMBER = 10;
+    private java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData> interests_;
+    /**
+     * <pre>
+     *兴趣点数组(对象只包含经纬高)
+     * </pre>
+     *
+     * <code>repeated .PointData interests = 10;</code>
+     */
+    @java.lang.Override
+    public java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData> getInterestsList() {
+      return interests_;
+    }
+    /**
+     * <pre>
+     *兴趣点数组(对象只包含经纬高)
+     * </pre>
+     *
+     * <code>repeated .PointData interests = 10;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder> 
+        getInterestsOrBuilderList() {
+      return interests_;
+    }
+    /**
+     * <pre>
+     *兴趣点数组(对象只包含经纬高)
+     * </pre>
+     *
+     * <code>repeated .PointData interests = 10;</code>
+     */
+    @java.lang.Override
+    public int getInterestsCount() {
+      return interests_.size();
+    }
+    /**
+     * <pre>
+     *兴趣点数组(对象只包含经纬高)
+     * </pre>
+     *
+     * <code>repeated .PointData interests = 10;</code>
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData getInterests(int index) {
+      return interests_.get(index);
+    }
+    /**
+     * <pre>
+     *兴趣点数组(对象只包含经纬高)
+     * </pre>
+     *
+     * <code>repeated .PointData interests = 10;</code>
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder getInterestsOrBuilder(
+        int index) {
+      return interests_.get(index);
+    }
+
+    public static final int NORMALMODEL_FIELD_NUMBER = 11;
+    private com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel normalModel_;
+    /**
+     * <pre>
+     *普通建模
+     * </pre>
+     *
+     * <code>.NormalModel normalModel = 11;</code>
+     * @return Whether the normalModel field is set.
+     */
+    @java.lang.Override
+    public boolean hasNormalModel() {
+      return normalModel_ != null;
+    }
+    /**
+     * <pre>
+     *普通建模
+     * </pre>
+     *
+     * <code>.NormalModel normalModel = 11;</code>
+     * @return The normalModel.
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel getNormalModel() {
+      return normalModel_ == null ? com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel.getDefaultInstance() : normalModel_;
+    }
+    /**
+     * <pre>
+     *普通建模
+     * </pre>
+     *
+     * <code>.NormalModel normalModel = 11;</code>
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModelOrBuilder getNormalModelOrBuilder() {
+      return getNormalModel();
+    }
+
+    public static final int SURROUNDMODEL_FIELD_NUMBER = 12;
+    private com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel surroundModel_;
+    /**
+     * <pre>
+     *环绕建模
+     * </pre>
+     *
+     * <code>.SurroundModel surroundModel = 12;</code>
+     * @return Whether the surroundModel field is set.
+     */
+    @java.lang.Override
+    public boolean hasSurroundModel() {
+      return surroundModel_ != null;
+    }
+    /**
+     * <pre>
+     *环绕建模
+     * </pre>
+     *
+     * <code>.SurroundModel surroundModel = 12;</code>
+     * @return The surroundModel.
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel getSurroundModel() {
+      return surroundModel_ == null ? com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel.getDefaultInstance() : surroundModel_;
+    }
+    /**
+     * <pre>
+     *环绕建模
+     * </pre>
+     *
+     * <code>.SurroundModel surroundModel = 12;</code>
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModelOrBuilder getSurroundModelOrBuilder() {
+      return getSurroundModel();
+    }
+
+    public static final int TAKEOFFPOINT_FIELD_NUMBER = 13;
+    private com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData takeOffPoint_;
+    /**
+     * <pre>
+     *起飞点(对象只包含经纬高)
+     * </pre>
+     *
+     * <code>.PointData takeOffPoint = 13;</code>
+     * @return Whether the takeOffPoint field is set.
+     */
+    @java.lang.Override
+    public boolean hasTakeOffPoint() {
+      return takeOffPoint_ != null;
+    }
+    /**
+     * <pre>
+     *起飞点(对象只包含经纬高)
+     * </pre>
+     *
+     * <code>.PointData takeOffPoint = 13;</code>
+     * @return The takeOffPoint.
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData getTakeOffPoint() {
+      return takeOffPoint_ == null ? com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.getDefaultInstance() : takeOffPoint_;
+    }
+    /**
+     * <pre>
+     *起飞点(对象只包含经纬高)
+     * </pre>
+     *
+     * <code>.PointData takeOffPoint = 13;</code>
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder getTakeOffPointOrBuilder() {
+      return getTakeOffPoint();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (finishedAction_ != 0) {
+        output.writeUInt32(1, finishedAction_);
+      }
+      if (java.lang.Float.floatToRawIntBits(maxSpeed_) != 0) {
+        output.writeFloat(2, maxSpeed_);
+      }
+      if (java.lang.Float.floatToRawIntBits(autoSpeed_) != 0) {
+        output.writeFloat(3, autoSpeed_);
+      }
+      for (int i = 0; i < points_.size(); i++) {
+        output.writeMessage(4, points_.get(i));
+      }
+      if (loseAction_ != 0) {
+        output.writeUInt32(5, loseAction_);
+      }
+      if (homeHeight_ != 0) {
+        output.writeUInt32(6, homeHeight_);
+      }
+      if (isSaveEnergyMode_ != 0) {
+        output.writeUInt32(7, isSaveEnergyMode_);
+      }
+      if (takePoint_ != null) {
+        output.writeMessage(8, getTakePoint());
+      }
+      if (landPoint_ != null) {
+        output.writeMessage(9, getLandPoint());
+      }
+      for (int i = 0; i < interests_.size(); i++) {
+        output.writeMessage(10, interests_.get(i));
+      }
+      if (normalModel_ != null) {
+        output.writeMessage(11, getNormalModel());
+      }
+      if (surroundModel_ != null) {
+        output.writeMessage(12, getSurroundModel());
+      }
+      if (takeOffPoint_ != null) {
+        output.writeMessage(13, getTakeOffPoint());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (finishedAction_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(1, finishedAction_);
+      }
+      if (java.lang.Float.floatToRawIntBits(maxSpeed_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(2, maxSpeed_);
+      }
+      if (java.lang.Float.floatToRawIntBits(autoSpeed_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(3, autoSpeed_);
+      }
+      for (int i = 0; i < points_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, points_.get(i));
+      }
+      if (loseAction_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(5, loseAction_);
+      }
+      if (homeHeight_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(6, homeHeight_);
+      }
+      if (isSaveEnergyMode_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(7, isSaveEnergyMode_);
+      }
+      if (takePoint_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(8, getTakePoint());
+      }
+      if (landPoint_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(9, getLandPoint());
+      }
+      for (int i = 0; i < interests_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(10, interests_.get(i));
+      }
+      if (normalModel_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(11, getNormalModel());
+      }
+      if (surroundModel_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(12, getSurroundModel());
+      }
+      if (takeOffPoint_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(13, getTakeOffPoint());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof com.ard.tianyu.netty.protobuf.TelemetryDataPB.PlanLineData)) {
+        return super.equals(obj);
+      }
+      com.ard.tianyu.netty.protobuf.TelemetryDataPB.PlanLineData other = (com.ard.tianyu.netty.protobuf.TelemetryDataPB.PlanLineData) obj;
+
+      if (getFinishedAction()
+          != other.getFinishedAction()) return false;
+      if (java.lang.Float.floatToIntBits(getMaxSpeed())
+          != java.lang.Float.floatToIntBits(
+              other.getMaxSpeed())) return false;
+      if (java.lang.Float.floatToIntBits(getAutoSpeed())
+          != java.lang.Float.floatToIntBits(
+              other.getAutoSpeed())) return false;
+      if (!getPointsList()
+          .equals(other.getPointsList())) return false;
+      if (getLoseAction()
+          != other.getLoseAction()) return false;
+      if (getHomeHeight()
+          != other.getHomeHeight()) return false;
+      if (getIsSaveEnergyMode()
+          != other.getIsSaveEnergyMode()) return false;
+      if (hasTakePoint() != other.hasTakePoint()) return false;
+      if (hasTakePoint()) {
+        if (!getTakePoint()
+            .equals(other.getTakePoint())) return false;
+      }
+      if (hasLandPoint() != other.hasLandPoint()) return false;
+      if (hasLandPoint()) {
+        if (!getLandPoint()
+            .equals(other.getLandPoint())) return false;
+      }
+      if (!getInterestsList()
+          .equals(other.getInterestsList())) return false;
+      if (hasNormalModel() != other.hasNormalModel()) return false;
+      if (hasNormalModel()) {
+        if (!getNormalModel()
+            .equals(other.getNormalModel())) return false;
+      }
+      if (hasSurroundModel() != other.hasSurroundModel()) return false;
+      if (hasSurroundModel()) {
+        if (!getSurroundModel()
+            .equals(other.getSurroundModel())) return false;
+      }
+      if (hasTakeOffPoint() != other.hasTakeOffPoint()) return false;
+      if (hasTakeOffPoint()) {
+        if (!getTakeOffPoint()
+            .equals(other.getTakeOffPoint())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + FINISHEDACTION_FIELD_NUMBER;
+      hash = (53 * hash) + getFinishedAction();
+      hash = (37 * hash) + MAXSPEED_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getMaxSpeed());
+      hash = (37 * hash) + AUTOSPEED_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getAutoSpeed());
+      if (getPointsCount() > 0) {
+        hash = (37 * hash) + POINTS_FIELD_NUMBER;
+        hash = (53 * hash) + getPointsList().hashCode();
+      }
+      hash = (37 * hash) + LOSEACTION_FIELD_NUMBER;
+      hash = (53 * hash) + getLoseAction();
+      hash = (37 * hash) + HOMEHEIGHT_FIELD_NUMBER;
+      hash = (53 * hash) + getHomeHeight();
+      hash = (37 * hash) + ISSAVEENERGYMODE_FIELD_NUMBER;
+      hash = (53 * hash) + getIsSaveEnergyMode();
+      if (hasTakePoint()) {
+        hash = (37 * hash) + TAKEPOINT_FIELD_NUMBER;
+        hash = (53 * hash) + getTakePoint().hashCode();
+      }
+      if (hasLandPoint()) {
+        hash = (37 * hash) + LANDPOINT_FIELD_NUMBER;
+        hash = (53 * hash) + getLandPoint().hashCode();
+      }
+      if (getInterestsCount() > 0) {
+        hash = (37 * hash) + INTERESTS_FIELD_NUMBER;
+        hash = (53 * hash) + getInterestsList().hashCode();
+      }
+      if (hasNormalModel()) {
+        hash = (37 * hash) + NORMALMODEL_FIELD_NUMBER;
+        hash = (53 * hash) + getNormalModel().hashCode();
+      }
+      if (hasSurroundModel()) {
+        hash = (37 * hash) + SURROUNDMODEL_FIELD_NUMBER;
+        hash = (53 * hash) + getSurroundModel().hashCode();
+      }
+      if (hasTakeOffPoint()) {
+        hash = (37 * hash) + TAKEOFFPOINT_FIELD_NUMBER;
+        hash = (53 * hash) + getTakeOffPoint().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PlanLineData parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PlanLineData parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PlanLineData parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PlanLineData parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PlanLineData parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PlanLineData parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PlanLineData parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PlanLineData parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PlanLineData parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PlanLineData parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PlanLineData parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PlanLineData parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(com.ard.tianyu.netty.protobuf.TelemetryDataPB.PlanLineData prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     *航线
+     * </pre>
+     *
+     * Protobuf type {@code PlanLineData}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:PlanLineData)
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.PlanLineDataOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_PlanLineData_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_PlanLineData_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.ard.tianyu.netty.protobuf.TelemetryDataPB.PlanLineData.class, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PlanLineData.Builder.class);
+      }
+
+      // Construct using com.ard.tianyu.netty.protobuf.TelemetryDataPB.PlanLineData.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getPointsFieldBuilder();
+          getInterestsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        finishedAction_ = 0;
+
+        maxSpeed_ = 0F;
+
+        autoSpeed_ = 0F;
+
+        if (pointsBuilder_ == null) {
+          points_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          pointsBuilder_.clear();
+        }
+        loseAction_ = 0;
+
+        homeHeight_ = 0;
+
+        isSaveEnergyMode_ = 0;
+
+        if (takePointBuilder_ == null) {
+          takePoint_ = null;
+        } else {
+          takePoint_ = null;
+          takePointBuilder_ = null;
+        }
+        if (landPointBuilder_ == null) {
+          landPoint_ = null;
+        } else {
+          landPoint_ = null;
+          landPointBuilder_ = null;
+        }
+        if (interestsBuilder_ == null) {
+          interests_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+        } else {
+          interestsBuilder_.clear();
+        }
+        if (normalModelBuilder_ == null) {
+          normalModel_ = null;
+        } else {
+          normalModel_ = null;
+          normalModelBuilder_ = null;
+        }
+        if (surroundModelBuilder_ == null) {
+          surroundModel_ = null;
+        } else {
+          surroundModel_ = null;
+          surroundModelBuilder_ = null;
+        }
+        if (takeOffPointBuilder_ == null) {
+          takeOffPoint_ = null;
+        } else {
+          takeOffPoint_ = null;
+          takeOffPointBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_PlanLineData_descriptor;
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PlanLineData getDefaultInstanceForType() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.PlanLineData.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PlanLineData build() {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.PlanLineData result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PlanLineData buildPartial() {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.PlanLineData result = new com.ard.tianyu.netty.protobuf.TelemetryDataPB.PlanLineData(this);
+        int from_bitField0_ = bitField0_;
+        result.finishedAction_ = finishedAction_;
+        result.maxSpeed_ = maxSpeed_;
+        result.autoSpeed_ = autoSpeed_;
+        if (pointsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            points_ = java.util.Collections.unmodifiableList(points_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.points_ = points_;
+        } else {
+          result.points_ = pointsBuilder_.build();
+        }
+        result.loseAction_ = loseAction_;
+        result.homeHeight_ = homeHeight_;
+        result.isSaveEnergyMode_ = isSaveEnergyMode_;
+        if (takePointBuilder_ == null) {
+          result.takePoint_ = takePoint_;
+        } else {
+          result.takePoint_ = takePointBuilder_.build();
+        }
+        if (landPointBuilder_ == null) {
+          result.landPoint_ = landPoint_;
+        } else {
+          result.landPoint_ = landPointBuilder_.build();
+        }
+        if (interestsBuilder_ == null) {
+          if (((bitField0_ & 0x00000002) != 0)) {
+            interests_ = java.util.Collections.unmodifiableList(interests_);
+            bitField0_ = (bitField0_ & ~0x00000002);
+          }
+          result.interests_ = interests_;
+        } else {
+          result.interests_ = interestsBuilder_.build();
+        }
+        if (normalModelBuilder_ == null) {
+          result.normalModel_ = normalModel_;
+        } else {
+          result.normalModel_ = normalModelBuilder_.build();
+        }
+        if (surroundModelBuilder_ == null) {
+          result.surroundModel_ = surroundModel_;
+        } else {
+          result.surroundModel_ = surroundModelBuilder_.build();
+        }
+        if (takeOffPointBuilder_ == null) {
+          result.takeOffPoint_ = takeOffPoint_;
+        } else {
+          result.takeOffPoint_ = takeOffPointBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.ard.tianyu.netty.protobuf.TelemetryDataPB.PlanLineData) {
+          return mergeFrom((com.ard.tianyu.netty.protobuf.TelemetryDataPB.PlanLineData)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(com.ard.tianyu.netty.protobuf.TelemetryDataPB.PlanLineData other) {
+        if (other == com.ard.tianyu.netty.protobuf.TelemetryDataPB.PlanLineData.getDefaultInstance()) return this;
+        if (other.getFinishedAction() != 0) {
+          setFinishedAction(other.getFinishedAction());
+        }
+        if (other.getMaxSpeed() != 0F) {
+          setMaxSpeed(other.getMaxSpeed());
+        }
+        if (other.getAutoSpeed() != 0F) {
+          setAutoSpeed(other.getAutoSpeed());
+        }
+        if (pointsBuilder_ == null) {
+          if (!other.points_.isEmpty()) {
+            if (points_.isEmpty()) {
+              points_ = other.points_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensurePointsIsMutable();
+              points_.addAll(other.points_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.points_.isEmpty()) {
+            if (pointsBuilder_.isEmpty()) {
+              pointsBuilder_.dispose();
+              pointsBuilder_ = null;
+              points_ = other.points_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              pointsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getPointsFieldBuilder() : null;
+            } else {
+              pointsBuilder_.addAllMessages(other.points_);
+            }
+          }
+        }
+        if (other.getLoseAction() != 0) {
+          setLoseAction(other.getLoseAction());
+        }
+        if (other.getHomeHeight() != 0) {
+          setHomeHeight(other.getHomeHeight());
+        }
+        if (other.getIsSaveEnergyMode() != 0) {
+          setIsSaveEnergyMode(other.getIsSaveEnergyMode());
+        }
+        if (other.hasTakePoint()) {
+          mergeTakePoint(other.getTakePoint());
+        }
+        if (other.hasLandPoint()) {
+          mergeLandPoint(other.getLandPoint());
+        }
+        if (interestsBuilder_ == null) {
+          if (!other.interests_.isEmpty()) {
+            if (interests_.isEmpty()) {
+              interests_ = other.interests_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+            } else {
+              ensureInterestsIsMutable();
+              interests_.addAll(other.interests_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.interests_.isEmpty()) {
+            if (interestsBuilder_.isEmpty()) {
+              interestsBuilder_.dispose();
+              interestsBuilder_ = null;
+              interests_ = other.interests_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+              interestsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getInterestsFieldBuilder() : null;
+            } else {
+              interestsBuilder_.addAllMessages(other.interests_);
+            }
+          }
+        }
+        if (other.hasNormalModel()) {
+          mergeNormalModel(other.getNormalModel());
+        }
+        if (other.hasSurroundModel()) {
+          mergeSurroundModel(other.getSurroundModel());
+        }
+        if (other.hasTakeOffPoint()) {
+          mergeTakeOffPoint(other.getTakeOffPoint());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.PlanLineData parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (com.ard.tianyu.netty.protobuf.TelemetryDataPB.PlanLineData) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private int finishedAction_ ;
+      /**
+       * <pre>
+       *结束航线后动作:1=返航,2=原地悬停,3=原地降落,4=原地绕飞[目前只osdk4.1版本支持,中心点为最后一个航点,飞机绕此点画圆飞行],5=返回至第一个航点并悬停[如果飞机到最后一个点时RC和飞机失联,飞机会在最后一个点悬停]
+       * </pre>
+       *
+       * <code>uint32 finishedAction = 1;</code>
+       * @return The finishedAction.
+       */
+      @java.lang.Override
+      public int getFinishedAction() {
+        return finishedAction_;
+      }
+      /**
+       * <pre>
+       *结束航线后动作:1=返航,2=原地悬停,3=原地降落,4=原地绕飞[目前只osdk4.1版本支持,中心点为最后一个航点,飞机绕此点画圆飞行],5=返回至第一个航点并悬停[如果飞机到最后一个点时RC和飞机失联,飞机会在最后一个点悬停]
+       * </pre>
+       *
+       * <code>uint32 finishedAction = 1;</code>
+       * @param value The finishedAction to set.
+       * @return This builder for chaining.
+       */
+      public Builder setFinishedAction(int value) {
+        
+        finishedAction_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *结束航线后动作:1=返航,2=原地悬停,3=原地降落,4=原地绕飞[目前只osdk4.1版本支持,中心点为最后一个航点,飞机绕此点画圆飞行],5=返回至第一个航点并悬停[如果飞机到最后一个点时RC和飞机失联,飞机会在最后一个点悬停]
+       * </pre>
+       *
+       * <code>uint32 finishedAction = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearFinishedAction() {
+        
+        finishedAction_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private float maxSpeed_ ;
+      /**
+       * <pre>
+       *最大飞行速度(单位:米/秒,范围0~15),默认15
+       * </pre>
+       *
+       * <code>float maxSpeed = 2;</code>
+       * @return The maxSpeed.
+       */
+      @java.lang.Override
+      public float getMaxSpeed() {
+        return maxSpeed_;
+      }
+      /**
+       * <pre>
+       *最大飞行速度(单位:米/秒,范围0~15),默认15
+       * </pre>
+       *
+       * <code>float maxSpeed = 2;</code>
+       * @param value The maxSpeed to set.
+       * @return This builder for chaining.
+       */
+      public Builder setMaxSpeed(float value) {
+        
+        maxSpeed_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *最大飞行速度(单位:米/秒,范围0~15),默认15
+       * </pre>
+       *
+       * <code>float maxSpeed = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearMaxSpeed() {
+        
+        maxSpeed_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private float autoSpeed_ ;
+      /**
+       * <pre>
+       *自动飞行速度(单位:米/秒,范围0~15),默认8
+       * </pre>
+       *
+       * <code>float autoSpeed = 3;</code>
+       * @return The autoSpeed.
+       */
+      @java.lang.Override
+      public float getAutoSpeed() {
+        return autoSpeed_;
+      }
+      /**
+       * <pre>
+       *自动飞行速度(单位:米/秒,范围0~15),默认8
+       * </pre>
+       *
+       * <code>float autoSpeed = 3;</code>
+       * @param value The autoSpeed to set.
+       * @return This builder for chaining.
+       */
+      public Builder setAutoSpeed(float value) {
+        
+        autoSpeed_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *自动飞行速度(单位:米/秒,范围0~15),默认8
+       * </pre>
+       *
+       * <code>float autoSpeed = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearAutoSpeed() {
+        
+        autoSpeed_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData> points_ =
+        java.util.Collections.emptyList();
+      private void ensurePointsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          points_ = new java.util.ArrayList<com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData>(points_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder> pointsBuilder_;
+
+      /**
+       * <pre>
+       *坐标点数组
+       * </pre>
+       *
+       * <code>repeated .PointData points = 4;</code>
+       */
+      public java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData> getPointsList() {
+        if (pointsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(points_);
+        } else {
+          return pointsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <pre>
+       *坐标点数组
+       * </pre>
+       *
+       * <code>repeated .PointData points = 4;</code>
+       */
+      public int getPointsCount() {
+        if (pointsBuilder_ == null) {
+          return points_.size();
+        } else {
+          return pointsBuilder_.getCount();
+        }
+      }
+      /**
+       * <pre>
+       *坐标点数组
+       * </pre>
+       *
+       * <code>repeated .PointData points = 4;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData getPoints(int index) {
+        if (pointsBuilder_ == null) {
+          return points_.get(index);
+        } else {
+          return pointsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <pre>
+       *坐标点数组
+       * </pre>
+       *
+       * <code>repeated .PointData points = 4;</code>
+       */
+      public Builder setPoints(
+          int index, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData value) {
+        if (pointsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensurePointsIsMutable();
+          points_.set(index, value);
+          onChanged();
+        } else {
+          pointsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *坐标点数组
+       * </pre>
+       *
+       * <code>repeated .PointData points = 4;</code>
+       */
+      public Builder setPoints(
+          int index, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder builderForValue) {
+        if (pointsBuilder_ == null) {
+          ensurePointsIsMutable();
+          points_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          pointsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *坐标点数组
+       * </pre>
+       *
+       * <code>repeated .PointData points = 4;</code>
+       */
+      public Builder addPoints(com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData value) {
+        if (pointsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensurePointsIsMutable();
+          points_.add(value);
+          onChanged();
+        } else {
+          pointsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *坐标点数组
+       * </pre>
+       *
+       * <code>repeated .PointData points = 4;</code>
+       */
+      public Builder addPoints(
+          int index, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData value) {
+        if (pointsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensurePointsIsMutable();
+          points_.add(index, value);
+          onChanged();
+        } else {
+          pointsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *坐标点数组
+       * </pre>
+       *
+       * <code>repeated .PointData points = 4;</code>
+       */
+      public Builder addPoints(
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder builderForValue) {
+        if (pointsBuilder_ == null) {
+          ensurePointsIsMutable();
+          points_.add(builderForValue.build());
+          onChanged();
+        } else {
+          pointsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *坐标点数组
+       * </pre>
+       *
+       * <code>repeated .PointData points = 4;</code>
+       */
+      public Builder addPoints(
+          int index, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder builderForValue) {
+        if (pointsBuilder_ == null) {
+          ensurePointsIsMutable();
+          points_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          pointsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *坐标点数组
+       * </pre>
+       *
+       * <code>repeated .PointData points = 4;</code>
+       */
+      public Builder addAllPoints(
+          java.lang.Iterable<? extends com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData> values) {
+        if (pointsBuilder_ == null) {
+          ensurePointsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, points_);
+          onChanged();
+        } else {
+          pointsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *坐标点数组
+       * </pre>
+       *
+       * <code>repeated .PointData points = 4;</code>
+       */
+      public Builder clearPoints() {
+        if (pointsBuilder_ == null) {
+          points_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          pointsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *坐标点数组
+       * </pre>
+       *
+       * <code>repeated .PointData points = 4;</code>
+       */
+      public Builder removePoints(int index) {
+        if (pointsBuilder_ == null) {
+          ensurePointsIsMutable();
+          points_.remove(index);
+          onChanged();
+        } else {
+          pointsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *坐标点数组
+       * </pre>
+       *
+       * <code>repeated .PointData points = 4;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder getPointsBuilder(
+          int index) {
+        return getPointsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <pre>
+       *坐标点数组
+       * </pre>
+       *
+       * <code>repeated .PointData points = 4;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder getPointsOrBuilder(
+          int index) {
+        if (pointsBuilder_ == null) {
+          return points_.get(index);  } else {
+          return pointsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <pre>
+       *坐标点数组
+       * </pre>
+       *
+       * <code>repeated .PointData points = 4;</code>
+       */
+      public java.util.List<? extends com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder> 
+           getPointsOrBuilderList() {
+        if (pointsBuilder_ != null) {
+          return pointsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(points_);
+        }
+      }
+      /**
+       * <pre>
+       *坐标点数组
+       * </pre>
+       *
+       * <code>repeated .PointData points = 4;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder addPointsBuilder() {
+        return getPointsFieldBuilder().addBuilder(
+            com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.getDefaultInstance());
+      }
+      /**
+       * <pre>
+       *坐标点数组
+       * </pre>
+       *
+       * <code>repeated .PointData points = 4;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder addPointsBuilder(
+          int index) {
+        return getPointsFieldBuilder().addBuilder(
+            index, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.getDefaultInstance());
+      }
+      /**
+       * <pre>
+       *坐标点数组
+       * </pre>
+       *
+       * <code>repeated .PointData points = 4;</code>
+       */
+      public java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder> 
+           getPointsBuilderList() {
+        return getPointsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder> 
+          getPointsFieldBuilder() {
+        if (pointsBuilder_ == null) {
+          pointsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder>(
+                  points_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          points_ = null;
+        }
+        return pointsBuilder_;
+      }
+
+      private int loseAction_ ;
+      /**
+       * <pre>
+       *网络失联后动作:0=返回HOME点,1=继续航线,默认0
+       * </pre>
+       *
+       * <code>uint32 loseAction = 5;</code>
+       * @return The loseAction.
+       */
+      @java.lang.Override
+      public int getLoseAction() {
+        return loseAction_;
+      }
+      /**
+       * <pre>
+       *网络失联后动作:0=返回HOME点,1=继续航线,默认0
+       * </pre>
+       *
+       * <code>uint32 loseAction = 5;</code>
+       * @param value The loseAction to set.
+       * @return This builder for chaining.
+       */
+      public Builder setLoseAction(int value) {
+        
+        loseAction_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *网络失联后动作:0=返回HOME点,1=继续航线,默认0
+       * </pre>
+       *
+       * <code>uint32 loseAction = 5;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearLoseAction() {
+        
+        loseAction_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int homeHeight_ ;
+      /**
+       * <pre>
+       *返航高度:(单位:米,范围20~1500),说明:此值为相对起飞点高度,如果太高会有失去网络覆盖风险。不同飞行器返航逻辑不一样,若飞行器距HOME点距离过近,可能不会升高再返航。具体逻辑请咨询大疆DJI
+       * </pre>
+       *
+       * <code>uint32 homeHeight = 6;</code>
+       * @return The homeHeight.
+       */
+      @java.lang.Override
+      public int getHomeHeight() {
+        return homeHeight_;
+      }
+      /**
+       * <pre>
+       *返航高度:(单位:米,范围20~1500),说明:此值为相对起飞点高度,如果太高会有失去网络覆盖风险。不同飞行器返航逻辑不一样,若飞行器距HOME点距离过近,可能不会升高再返航。具体逻辑请咨询大疆DJI
+       * </pre>
+       *
+       * <code>uint32 homeHeight = 6;</code>
+       * @param value The homeHeight to set.
+       * @return This builder for chaining.
+       */
+      public Builder setHomeHeight(int value) {
+        
+        homeHeight_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *返航高度:(单位:米,范围20~1500),说明:此值为相对起飞点高度,如果太高会有失去网络覆盖风险。不同飞行器返航逻辑不一样,若飞行器距HOME点距离过近,可能不会升高再返航。具体逻辑请咨询大疆DJI
+       * </pre>
+       *
+       * <code>uint32 homeHeight = 6;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearHomeHeight() {
+        
+        homeHeight_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int isSaveEnergyMode_ ;
+      /**
+       * <pre>
+       *是否开启节能模式:0=不是,1=是(说明:节能模式下,飞机沿最短直线距离由起飞点到航线第一个航点,非升高到第一个航点高度再飞往第一个航点)
+       * </pre>
+       *
+       * <code>uint32 isSaveEnergyMode = 7;</code>
+       * @return The isSaveEnergyMode.
+       */
+      @java.lang.Override
+      public int getIsSaveEnergyMode() {
+        return isSaveEnergyMode_;
+      }
+      /**
+       * <pre>
+       *是否开启节能模式:0=不是,1=是(说明:节能模式下,飞机沿最短直线距离由起飞点到航线第一个航点,非升高到第一个航点高度再飞往第一个航点)
+       * </pre>
+       *
+       * <code>uint32 isSaveEnergyMode = 7;</code>
+       * @param value The isSaveEnergyMode to set.
+       * @return This builder for chaining.
+       */
+      public Builder setIsSaveEnergyMode(int value) {
+        
+        isSaveEnergyMode_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *是否开启节能模式:0=不是,1=是(说明:节能模式下,飞机沿最短直线距离由起飞点到航线第一个航点,非升高到第一个航点高度再飞往第一个航点)
+       * </pre>
+       *
+       * <code>uint32 isSaveEnergyMode = 7;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearIsSaveEnergyMode() {
+        
+        isSaveEnergyMode_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint takePoint_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint, com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPointOrBuilder> takePointBuilder_;
+      /**
+       * <pre>
+       *起飞点机库信息
+       * </pre>
+       *
+       * <code>.HangarPoint takePoint = 8;</code>
+       * @return Whether the takePoint field is set.
+       */
+      public boolean hasTakePoint() {
+        return takePointBuilder_ != null || takePoint_ != null;
+      }
+      /**
+       * <pre>
+       *起飞点机库信息
+       * </pre>
+       *
+       * <code>.HangarPoint takePoint = 8;</code>
+       * @return The takePoint.
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint getTakePoint() {
+        if (takePointBuilder_ == null) {
+          return takePoint_ == null ? com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint.getDefaultInstance() : takePoint_;
+        } else {
+          return takePointBuilder_.getMessage();
+        }
+      }
+      /**
+       * <pre>
+       *起飞点机库信息
+       * </pre>
+       *
+       * <code>.HangarPoint takePoint = 8;</code>
+       */
+      public Builder setTakePoint(com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint value) {
+        if (takePointBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          takePoint_ = value;
+          onChanged();
+        } else {
+          takePointBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *起飞点机库信息
+       * </pre>
+       *
+       * <code>.HangarPoint takePoint = 8;</code>
+       */
+      public Builder setTakePoint(
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint.Builder builderForValue) {
+        if (takePointBuilder_ == null) {
+          takePoint_ = builderForValue.build();
+          onChanged();
+        } else {
+          takePointBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *起飞点机库信息
+       * </pre>
+       *
+       * <code>.HangarPoint takePoint = 8;</code>
+       */
+      public Builder mergeTakePoint(com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint value) {
+        if (takePointBuilder_ == null) {
+          if (takePoint_ != null) {
+            takePoint_ =
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint.newBuilder(takePoint_).mergeFrom(value).buildPartial();
+          } else {
+            takePoint_ = value;
+          }
+          onChanged();
+        } else {
+          takePointBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *起飞点机库信息
+       * </pre>
+       *
+       * <code>.HangarPoint takePoint = 8;</code>
+       */
+      public Builder clearTakePoint() {
+        if (takePointBuilder_ == null) {
+          takePoint_ = null;
+          onChanged();
+        } else {
+          takePoint_ = null;
+          takePointBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *起飞点机库信息
+       * </pre>
+       *
+       * <code>.HangarPoint takePoint = 8;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint.Builder getTakePointBuilder() {
+        
+        onChanged();
+        return getTakePointFieldBuilder().getBuilder();
+      }
+      /**
+       * <pre>
+       *起飞点机库信息
+       * </pre>
+       *
+       * <code>.HangarPoint takePoint = 8;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPointOrBuilder getTakePointOrBuilder() {
+        if (takePointBuilder_ != null) {
+          return takePointBuilder_.getMessageOrBuilder();
+        } else {
+          return takePoint_ == null ?
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint.getDefaultInstance() : takePoint_;
+        }
+      }
+      /**
+       * <pre>
+       *起飞点机库信息
+       * </pre>
+       *
+       * <code>.HangarPoint takePoint = 8;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint, com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPointOrBuilder> 
+          getTakePointFieldBuilder() {
+        if (takePointBuilder_ == null) {
+          takePointBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint, com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPointOrBuilder>(
+                  getTakePoint(),
+                  getParentForChildren(),
+                  isClean());
+          takePoint_ = null;
+        }
+        return takePointBuilder_;
+      }
+
+      private com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint landPoint_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint, com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPointOrBuilder> landPointBuilder_;
+      /**
+       * <pre>
+       *降落点机库信息
+       * </pre>
+       *
+       * <code>.HangarPoint landPoint = 9;</code>
+       * @return Whether the landPoint field is set.
+       */
+      public boolean hasLandPoint() {
+        return landPointBuilder_ != null || landPoint_ != null;
+      }
+      /**
+       * <pre>
+       *降落点机库信息
+       * </pre>
+       *
+       * <code>.HangarPoint landPoint = 9;</code>
+       * @return The landPoint.
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint getLandPoint() {
+        if (landPointBuilder_ == null) {
+          return landPoint_ == null ? com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint.getDefaultInstance() : landPoint_;
+        } else {
+          return landPointBuilder_.getMessage();
+        }
+      }
+      /**
+       * <pre>
+       *降落点机库信息
+       * </pre>
+       *
+       * <code>.HangarPoint landPoint = 9;</code>
+       */
+      public Builder setLandPoint(com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint value) {
+        if (landPointBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          landPoint_ = value;
+          onChanged();
+        } else {
+          landPointBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *降落点机库信息
+       * </pre>
+       *
+       * <code>.HangarPoint landPoint = 9;</code>
+       */
+      public Builder setLandPoint(
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint.Builder builderForValue) {
+        if (landPointBuilder_ == null) {
+          landPoint_ = builderForValue.build();
+          onChanged();
+        } else {
+          landPointBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *降落点机库信息
+       * </pre>
+       *
+       * <code>.HangarPoint landPoint = 9;</code>
+       */
+      public Builder mergeLandPoint(com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint value) {
+        if (landPointBuilder_ == null) {
+          if (landPoint_ != null) {
+            landPoint_ =
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint.newBuilder(landPoint_).mergeFrom(value).buildPartial();
+          } else {
+            landPoint_ = value;
+          }
+          onChanged();
+        } else {
+          landPointBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *降落点机库信息
+       * </pre>
+       *
+       * <code>.HangarPoint landPoint = 9;</code>
+       */
+      public Builder clearLandPoint() {
+        if (landPointBuilder_ == null) {
+          landPoint_ = null;
+          onChanged();
+        } else {
+          landPoint_ = null;
+          landPointBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *降落点机库信息
+       * </pre>
+       *
+       * <code>.HangarPoint landPoint = 9;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint.Builder getLandPointBuilder() {
+        
+        onChanged();
+        return getLandPointFieldBuilder().getBuilder();
+      }
+      /**
+       * <pre>
+       *降落点机库信息
+       * </pre>
+       *
+       * <code>.HangarPoint landPoint = 9;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPointOrBuilder getLandPointOrBuilder() {
+        if (landPointBuilder_ != null) {
+          return landPointBuilder_.getMessageOrBuilder();
+        } else {
+          return landPoint_ == null ?
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint.getDefaultInstance() : landPoint_;
+        }
+      }
+      /**
+       * <pre>
+       *降落点机库信息
+       * </pre>
+       *
+       * <code>.HangarPoint landPoint = 9;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint, com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPointOrBuilder> 
+          getLandPointFieldBuilder() {
+        if (landPointBuilder_ == null) {
+          landPointBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint, com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPointOrBuilder>(
+                  getLandPoint(),
+                  getParentForChildren(),
+                  isClean());
+          landPoint_ = null;
+        }
+        return landPointBuilder_;
+      }
+
+      private java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData> interests_ =
+        java.util.Collections.emptyList();
+      private void ensureInterestsIsMutable() {
+        if (!((bitField0_ & 0x00000002) != 0)) {
+          interests_ = new java.util.ArrayList<com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData>(interests_);
+          bitField0_ |= 0x00000002;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder> interestsBuilder_;
+
+      /**
+       * <pre>
+       *兴趣点数组(对象只包含经纬高)
+       * </pre>
+       *
+       * <code>repeated .PointData interests = 10;</code>
+       */
+      public java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData> getInterestsList() {
+        if (interestsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(interests_);
+        } else {
+          return interestsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <pre>
+       *兴趣点数组(对象只包含经纬高)
+       * </pre>
+       *
+       * <code>repeated .PointData interests = 10;</code>
+       */
+      public int getInterestsCount() {
+        if (interestsBuilder_ == null) {
+          return interests_.size();
+        } else {
+          return interestsBuilder_.getCount();
+        }
+      }
+      /**
+       * <pre>
+       *兴趣点数组(对象只包含经纬高)
+       * </pre>
+       *
+       * <code>repeated .PointData interests = 10;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData getInterests(int index) {
+        if (interestsBuilder_ == null) {
+          return interests_.get(index);
+        } else {
+          return interestsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <pre>
+       *兴趣点数组(对象只包含经纬高)
+       * </pre>
+       *
+       * <code>repeated .PointData interests = 10;</code>
+       */
+      public Builder setInterests(
+          int index, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData value) {
+        if (interestsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureInterestsIsMutable();
+          interests_.set(index, value);
+          onChanged();
+        } else {
+          interestsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *兴趣点数组(对象只包含经纬高)
+       * </pre>
+       *
+       * <code>repeated .PointData interests = 10;</code>
+       */
+      public Builder setInterests(
+          int index, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder builderForValue) {
+        if (interestsBuilder_ == null) {
+          ensureInterestsIsMutable();
+          interests_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          interestsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *兴趣点数组(对象只包含经纬高)
+       * </pre>
+       *
+       * <code>repeated .PointData interests = 10;</code>
+       */
+      public Builder addInterests(com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData value) {
+        if (interestsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureInterestsIsMutable();
+          interests_.add(value);
+          onChanged();
+        } else {
+          interestsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *兴趣点数组(对象只包含经纬高)
+       * </pre>
+       *
+       * <code>repeated .PointData interests = 10;</code>
+       */
+      public Builder addInterests(
+          int index, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData value) {
+        if (interestsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureInterestsIsMutable();
+          interests_.add(index, value);
+          onChanged();
+        } else {
+          interestsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *兴趣点数组(对象只包含经纬高)
+       * </pre>
+       *
+       * <code>repeated .PointData interests = 10;</code>
+       */
+      public Builder addInterests(
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder builderForValue) {
+        if (interestsBuilder_ == null) {
+          ensureInterestsIsMutable();
+          interests_.add(builderForValue.build());
+          onChanged();
+        } else {
+          interestsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *兴趣点数组(对象只包含经纬高)
+       * </pre>
+       *
+       * <code>repeated .PointData interests = 10;</code>
+       */
+      public Builder addInterests(
+          int index, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder builderForValue) {
+        if (interestsBuilder_ == null) {
+          ensureInterestsIsMutable();
+          interests_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          interestsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *兴趣点数组(对象只包含经纬高)
+       * </pre>
+       *
+       * <code>repeated .PointData interests = 10;</code>
+       */
+      public Builder addAllInterests(
+          java.lang.Iterable<? extends com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData> values) {
+        if (interestsBuilder_ == null) {
+          ensureInterestsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, interests_);
+          onChanged();
+        } else {
+          interestsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *兴趣点数组(对象只包含经纬高)
+       * </pre>
+       *
+       * <code>repeated .PointData interests = 10;</code>
+       */
+      public Builder clearInterests() {
+        if (interestsBuilder_ == null) {
+          interests_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+          onChanged();
+        } else {
+          interestsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *兴趣点数组(对象只包含经纬高)
+       * </pre>
+       *
+       * <code>repeated .PointData interests = 10;</code>
+       */
+      public Builder removeInterests(int index) {
+        if (interestsBuilder_ == null) {
+          ensureInterestsIsMutable();
+          interests_.remove(index);
+          onChanged();
+        } else {
+          interestsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *兴趣点数组(对象只包含经纬高)
+       * </pre>
+       *
+       * <code>repeated .PointData interests = 10;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder getInterestsBuilder(
+          int index) {
+        return getInterestsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <pre>
+       *兴趣点数组(对象只包含经纬高)
+       * </pre>
+       *
+       * <code>repeated .PointData interests = 10;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder getInterestsOrBuilder(
+          int index) {
+        if (interestsBuilder_ == null) {
+          return interests_.get(index);  } else {
+          return interestsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <pre>
+       *兴趣点数组(对象只包含经纬高)
+       * </pre>
+       *
+       * <code>repeated .PointData interests = 10;</code>
+       */
+      public java.util.List<? extends com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder> 
+           getInterestsOrBuilderList() {
+        if (interestsBuilder_ != null) {
+          return interestsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(interests_);
+        }
+      }
+      /**
+       * <pre>
+       *兴趣点数组(对象只包含经纬高)
+       * </pre>
+       *
+       * <code>repeated .PointData interests = 10;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder addInterestsBuilder() {
+        return getInterestsFieldBuilder().addBuilder(
+            com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.getDefaultInstance());
+      }
+      /**
+       * <pre>
+       *兴趣点数组(对象只包含经纬高)
+       * </pre>
+       *
+       * <code>repeated .PointData interests = 10;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder addInterestsBuilder(
+          int index) {
+        return getInterestsFieldBuilder().addBuilder(
+            index, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.getDefaultInstance());
+      }
+      /**
+       * <pre>
+       *兴趣点数组(对象只包含经纬高)
+       * </pre>
+       *
+       * <code>repeated .PointData interests = 10;</code>
+       */
+      public java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder> 
+           getInterestsBuilderList() {
+        return getInterestsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder> 
+          getInterestsFieldBuilder() {
+        if (interestsBuilder_ == null) {
+          interestsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder>(
+                  interests_,
+                  ((bitField0_ & 0x00000002) != 0),
+                  getParentForChildren(),
+                  isClean());
+          interests_ = null;
+        }
+        return interestsBuilder_;
+      }
+
+      private com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel normalModel_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel, com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModelOrBuilder> normalModelBuilder_;
+      /**
+       * <pre>
+       *普通建模
+       * </pre>
+       *
+       * <code>.NormalModel normalModel = 11;</code>
+       * @return Whether the normalModel field is set.
+       */
+      public boolean hasNormalModel() {
+        return normalModelBuilder_ != null || normalModel_ != null;
+      }
+      /**
+       * <pre>
+       *普通建模
+       * </pre>
+       *
+       * <code>.NormalModel normalModel = 11;</code>
+       * @return The normalModel.
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel getNormalModel() {
+        if (normalModelBuilder_ == null) {
+          return normalModel_ == null ? com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel.getDefaultInstance() : normalModel_;
+        } else {
+          return normalModelBuilder_.getMessage();
+        }
+      }
+      /**
+       * <pre>
+       *普通建模
+       * </pre>
+       *
+       * <code>.NormalModel normalModel = 11;</code>
+       */
+      public Builder setNormalModel(com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel value) {
+        if (normalModelBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          normalModel_ = value;
+          onChanged();
+        } else {
+          normalModelBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *普通建模
+       * </pre>
+       *
+       * <code>.NormalModel normalModel = 11;</code>
+       */
+      public Builder setNormalModel(
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel.Builder builderForValue) {
+        if (normalModelBuilder_ == null) {
+          normalModel_ = builderForValue.build();
+          onChanged();
+        } else {
+          normalModelBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *普通建模
+       * </pre>
+       *
+       * <code>.NormalModel normalModel = 11;</code>
+       */
+      public Builder mergeNormalModel(com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel value) {
+        if (normalModelBuilder_ == null) {
+          if (normalModel_ != null) {
+            normalModel_ =
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel.newBuilder(normalModel_).mergeFrom(value).buildPartial();
+          } else {
+            normalModel_ = value;
+          }
+          onChanged();
+        } else {
+          normalModelBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *普通建模
+       * </pre>
+       *
+       * <code>.NormalModel normalModel = 11;</code>
+       */
+      public Builder clearNormalModel() {
+        if (normalModelBuilder_ == null) {
+          normalModel_ = null;
+          onChanged();
+        } else {
+          normalModel_ = null;
+          normalModelBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *普通建模
+       * </pre>
+       *
+       * <code>.NormalModel normalModel = 11;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel.Builder getNormalModelBuilder() {
+        
+        onChanged();
+        return getNormalModelFieldBuilder().getBuilder();
+      }
+      /**
+       * <pre>
+       *普通建模
+       * </pre>
+       *
+       * <code>.NormalModel normalModel = 11;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModelOrBuilder getNormalModelOrBuilder() {
+        if (normalModelBuilder_ != null) {
+          return normalModelBuilder_.getMessageOrBuilder();
+        } else {
+          return normalModel_ == null ?
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel.getDefaultInstance() : normalModel_;
+        }
+      }
+      /**
+       * <pre>
+       *普通建模
+       * </pre>
+       *
+       * <code>.NormalModel normalModel = 11;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel, com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModelOrBuilder> 
+          getNormalModelFieldBuilder() {
+        if (normalModelBuilder_ == null) {
+          normalModelBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel, com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModelOrBuilder>(
+                  getNormalModel(),
+                  getParentForChildren(),
+                  isClean());
+          normalModel_ = null;
+        }
+        return normalModelBuilder_;
+      }
+
+      private com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel surroundModel_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel, com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModelOrBuilder> surroundModelBuilder_;
+      /**
+       * <pre>
+       *环绕建模
+       * </pre>
+       *
+       * <code>.SurroundModel surroundModel = 12;</code>
+       * @return Whether the surroundModel field is set.
+       */
+      public boolean hasSurroundModel() {
+        return surroundModelBuilder_ != null || surroundModel_ != null;
+      }
+      /**
+       * <pre>
+       *环绕建模
+       * </pre>
+       *
+       * <code>.SurroundModel surroundModel = 12;</code>
+       * @return The surroundModel.
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel getSurroundModel() {
+        if (surroundModelBuilder_ == null) {
+          return surroundModel_ == null ? com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel.getDefaultInstance() : surroundModel_;
+        } else {
+          return surroundModelBuilder_.getMessage();
+        }
+      }
+      /**
+       * <pre>
+       *环绕建模
+       * </pre>
+       *
+       * <code>.SurroundModel surroundModel = 12;</code>
+       */
+      public Builder setSurroundModel(com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel value) {
+        if (surroundModelBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          surroundModel_ = value;
+          onChanged();
+        } else {
+          surroundModelBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *环绕建模
+       * </pre>
+       *
+       * <code>.SurroundModel surroundModel = 12;</code>
+       */
+      public Builder setSurroundModel(
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel.Builder builderForValue) {
+        if (surroundModelBuilder_ == null) {
+          surroundModel_ = builderForValue.build();
+          onChanged();
+        } else {
+          surroundModelBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *环绕建模
+       * </pre>
+       *
+       * <code>.SurroundModel surroundModel = 12;</code>
+       */
+      public Builder mergeSurroundModel(com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel value) {
+        if (surroundModelBuilder_ == null) {
+          if (surroundModel_ != null) {
+            surroundModel_ =
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel.newBuilder(surroundModel_).mergeFrom(value).buildPartial();
+          } else {
+            surroundModel_ = value;
+          }
+          onChanged();
+        } else {
+          surroundModelBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *环绕建模
+       * </pre>
+       *
+       * <code>.SurroundModel surroundModel = 12;</code>
+       */
+      public Builder clearSurroundModel() {
+        if (surroundModelBuilder_ == null) {
+          surroundModel_ = null;
+          onChanged();
+        } else {
+          surroundModel_ = null;
+          surroundModelBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *环绕建模
+       * </pre>
+       *
+       * <code>.SurroundModel surroundModel = 12;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel.Builder getSurroundModelBuilder() {
+        
+        onChanged();
+        return getSurroundModelFieldBuilder().getBuilder();
+      }
+      /**
+       * <pre>
+       *环绕建模
+       * </pre>
+       *
+       * <code>.SurroundModel surroundModel = 12;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModelOrBuilder getSurroundModelOrBuilder() {
+        if (surroundModelBuilder_ != null) {
+          return surroundModelBuilder_.getMessageOrBuilder();
+        } else {
+          return surroundModel_ == null ?
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel.getDefaultInstance() : surroundModel_;
+        }
+      }
+      /**
+       * <pre>
+       *环绕建模
+       * </pre>
+       *
+       * <code>.SurroundModel surroundModel = 12;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel, com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModelOrBuilder> 
+          getSurroundModelFieldBuilder() {
+        if (surroundModelBuilder_ == null) {
+          surroundModelBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel, com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModelOrBuilder>(
+                  getSurroundModel(),
+                  getParentForChildren(),
+                  isClean());
+          surroundModel_ = null;
+        }
+        return surroundModelBuilder_;
+      }
+
+      private com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData takeOffPoint_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder> takeOffPointBuilder_;
+      /**
+       * <pre>
+       *起飞点(对象只包含经纬高)
+       * </pre>
+       *
+       * <code>.PointData takeOffPoint = 13;</code>
+       * @return Whether the takeOffPoint field is set.
+       */
+      public boolean hasTakeOffPoint() {
+        return takeOffPointBuilder_ != null || takeOffPoint_ != null;
+      }
+      /**
+       * <pre>
+       *起飞点(对象只包含经纬高)
+       * </pre>
+       *
+       * <code>.PointData takeOffPoint = 13;</code>
+       * @return The takeOffPoint.
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData getTakeOffPoint() {
+        if (takeOffPointBuilder_ == null) {
+          return takeOffPoint_ == null ? com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.getDefaultInstance() : takeOffPoint_;
+        } else {
+          return takeOffPointBuilder_.getMessage();
+        }
+      }
+      /**
+       * <pre>
+       *起飞点(对象只包含经纬高)
+       * </pre>
+       *
+       * <code>.PointData takeOffPoint = 13;</code>
+       */
+      public Builder setTakeOffPoint(com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData value) {
+        if (takeOffPointBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          takeOffPoint_ = value;
+          onChanged();
+        } else {
+          takeOffPointBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *起飞点(对象只包含经纬高)
+       * </pre>
+       *
+       * <code>.PointData takeOffPoint = 13;</code>
+       */
+      public Builder setTakeOffPoint(
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder builderForValue) {
+        if (takeOffPointBuilder_ == null) {
+          takeOffPoint_ = builderForValue.build();
+          onChanged();
+        } else {
+          takeOffPointBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *起飞点(对象只包含经纬高)
+       * </pre>
+       *
+       * <code>.PointData takeOffPoint = 13;</code>
+       */
+      public Builder mergeTakeOffPoint(com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData value) {
+        if (takeOffPointBuilder_ == null) {
+          if (takeOffPoint_ != null) {
+            takeOffPoint_ =
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.newBuilder(takeOffPoint_).mergeFrom(value).buildPartial();
+          } else {
+            takeOffPoint_ = value;
+          }
+          onChanged();
+        } else {
+          takeOffPointBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *起飞点(对象只包含经纬高)
+       * </pre>
+       *
+       * <code>.PointData takeOffPoint = 13;</code>
+       */
+      public Builder clearTakeOffPoint() {
+        if (takeOffPointBuilder_ == null) {
+          takeOffPoint_ = null;
+          onChanged();
+        } else {
+          takeOffPoint_ = null;
+          takeOffPointBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *起飞点(对象只包含经纬高)
+       * </pre>
+       *
+       * <code>.PointData takeOffPoint = 13;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder getTakeOffPointBuilder() {
+        
+        onChanged();
+        return getTakeOffPointFieldBuilder().getBuilder();
+      }
+      /**
+       * <pre>
+       *起飞点(对象只包含经纬高)
+       * </pre>
+       *
+       * <code>.PointData takeOffPoint = 13;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder getTakeOffPointOrBuilder() {
+        if (takeOffPointBuilder_ != null) {
+          return takeOffPointBuilder_.getMessageOrBuilder();
+        } else {
+          return takeOffPoint_ == null ?
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.getDefaultInstance() : takeOffPoint_;
+        }
+      }
+      /**
+       * <pre>
+       *起飞点(对象只包含经纬高)
+       * </pre>
+       *
+       * <code>.PointData takeOffPoint = 13;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder> 
+          getTakeOffPointFieldBuilder() {
+        if (takeOffPointBuilder_ == null) {
+          takeOffPointBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder>(
+                  getTakeOffPoint(),
+                  getParentForChildren(),
+                  isClean());
+          takeOffPoint_ = null;
+        }
+        return takeOffPointBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:PlanLineData)
+    }
+
+    // @@protoc_insertion_point(class_scope:PlanLineData)
+    private static final com.ard.tianyu.netty.protobuf.TelemetryDataPB.PlanLineData DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new com.ard.tianyu.netty.protobuf.TelemetryDataPB.PlanLineData();
+    }
+
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PlanLineData getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<PlanLineData>
+        PARSER = new com.google.protobuf.AbstractParser<PlanLineData>() {
+      @java.lang.Override
+      public PlanLineData parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new PlanLineData(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<PlanLineData> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<PlanLineData> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PlanLineData getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface PointDataOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:PointData)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <pre>
+     *经度
+     * </pre>
+     *
+     * <code>double lng = 1;</code>
+     * @return The lng.
+     */
+    double getLng();
+
+    /**
+     * <pre>
+     *纬度
+     * </pre>
+     *
+     * <code>double lat = 2;</code>
+     * @return The lat.
+     */
+    double getLat();
+
+    /**
+     * <pre>
+     *高度(单位:米,范围0~遥控器限高),说明:此值为相对起飞点高度,如果太高会有失去网络覆盖风险
+     * </pre>
+     *
+     * <code>float height = 3;</code>
+     * @return The height.
+     */
+    float getHeight();
+
+    /**
+     * <pre>
+     *速度(单位:米/秒,范围0~15),默认8
+     * </pre>
+     *
+     * <code>float speed = 4;</code>
+     * @return The speed.
+     */
+    float getSpeed();
+
+    /**
+     * <pre>
+     *动作数组
+     * </pre>
+     *
+     * <code>repeated .PointAction actions = 5;</code>
+     */
+    java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction> 
+        getActionsList();
+    /**
+     * <pre>
+     *动作数组
+     * </pre>
+     *
+     * <code>repeated .PointAction actions = 5;</code>
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction getActions(int index);
+    /**
+     * <pre>
+     *动作数组
+     * </pre>
+     *
+     * <code>repeated .PointAction actions = 5;</code>
+     */
+    int getActionsCount();
+    /**
+     * <pre>
+     *动作数组
+     * </pre>
+     *
+     * <code>repeated .PointAction actions = 5;</code>
+     */
+    java.util.List<? extends com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointActionOrBuilder> 
+        getActionsOrBuilderList();
+    /**
+     * <pre>
+     *动作数组
+     * </pre>
+     *
+     * <code>repeated .PointAction actions = 5;</code>
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointActionOrBuilder getActionsOrBuilder(
+        int index);
+
+    /**
+     * <pre>
+     *航线飞行模式:1=直线飞行,2=协调转弯,3=曲线飞行(停),4=曲线飞行(不停)
+     * </pre>
+     *
+     * <code>uint32 flightPathMode = 6;</code>
+     * @return The flightPathMode.
+     */
+    int getFlightPathMode();
+
+    /**
+     * <pre>
+     *转弯半径(仅协调转弯模式下有效),取值范围1~655.35单位:米,两点间距离要小于此值,此值要根据实际情况计算,切勿随便设此值[可能导致航线开始失败],具体计算方法可以咨询售后支持或者大疆DJI
+     * </pre>
+     *
+     * <code>float dampingDistance = 7;</code>
+     * @return The dampingDistance.
+     */
+    float getDampingDistance();
+
+    /**
+     * <pre>
+     *是否为安全返航点 0=不是,1=是 (暂时未启用)
+     * </pre>
+     *
+     * <code>uint32 safeGohomeFlag = 8;</code>
+     * @return The safeGohomeFlag.
+     */
+    int getSafeGohomeFlag();
+
+    /**
+     * <pre>
+     *偏航模式 0=自动,1=锁定,2=遥控器控制,3=云台依照航点方向旋转,4=朝向兴趣点,5=飞机和云台的偏航同时旋转
+     * </pre>
+     *
+     * <code>uint32 headingMode = 9;</code>
+     * @return The headingMode.
+     */
+    int getHeadingMode();
+
+    /**
+     * <pre>
+     *航点偏航 -180~180
+     * </pre>
+     *
+     * <code>float heading = 10;</code>
+     * @return The heading.
+     */
+    float getHeading();
+
+    /**
+     * <pre>
+     *兴趣点下标,默认-1
+     * </pre>
+     *
+     * <code>int32 interestIndex = 11;</code>
+     * @return The interestIndex.
+     */
+    int getInterestIndex();
+
+    /**
+     * <pre>
+     *组下标
+     * </pre>
+     *
+     * <code>uint32 groupIndex = 12;</code>
+     * @return The groupIndex.
+     */
+    int getGroupIndex();
+  }
+  /**
+   * <pre>
+   *航线点
+   * </pre>
+   *
+   * Protobuf type {@code PointData}
+   */
+  public static final class PointData extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:PointData)
+      PointDataOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use PointData.newBuilder() to construct.
+    private PointData(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private PointData() {
+      actions_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new PointData();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private PointData(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 9: {
+
+              lng_ = input.readDouble();
+              break;
+            }
+            case 17: {
+
+              lat_ = input.readDouble();
+              break;
+            }
+            case 29: {
+
+              height_ = input.readFloat();
+              break;
+            }
+            case 37: {
+
+              speed_ = input.readFloat();
+              break;
+            }
+            case 42: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                actions_ = new java.util.ArrayList<com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              actions_.add(
+                  input.readMessage(com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction.parser(), extensionRegistry));
+              break;
+            }
+            case 48: {
+
+              flightPathMode_ = input.readUInt32();
+              break;
+            }
+            case 61: {
+
+              dampingDistance_ = input.readFloat();
+              break;
+            }
+            case 64: {
+
+              safeGohomeFlag_ = input.readUInt32();
+              break;
+            }
+            case 72: {
+
+              headingMode_ = input.readUInt32();
+              break;
+            }
+            case 85: {
+
+              heading_ = input.readFloat();
+              break;
+            }
+            case 88: {
+
+              interestIndex_ = input.readInt32();
+              break;
+            }
+            case 96: {
+
+              groupIndex_ = input.readUInt32();
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          actions_ = java.util.Collections.unmodifiableList(actions_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_PointData_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_PointData_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.class, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder.class);
+    }
+
+    public static final int LNG_FIELD_NUMBER = 1;
+    private double lng_;
+    /**
+     * <pre>
+     *经度
+     * </pre>
+     *
+     * <code>double lng = 1;</code>
+     * @return The lng.
+     */
+    @java.lang.Override
+    public double getLng() {
+      return lng_;
+    }
+
+    public static final int LAT_FIELD_NUMBER = 2;
+    private double lat_;
+    /**
+     * <pre>
+     *纬度
+     * </pre>
+     *
+     * <code>double lat = 2;</code>
+     * @return The lat.
+     */
+    @java.lang.Override
+    public double getLat() {
+      return lat_;
+    }
+
+    public static final int HEIGHT_FIELD_NUMBER = 3;
+    private float height_;
+    /**
+     * <pre>
+     *高度(单位:米,范围0~遥控器限高),说明:此值为相对起飞点高度,如果太高会有失去网络覆盖风险
+     * </pre>
+     *
+     * <code>float height = 3;</code>
+     * @return The height.
+     */
+    @java.lang.Override
+    public float getHeight() {
+      return height_;
+    }
+
+    public static final int SPEED_FIELD_NUMBER = 4;
+    private float speed_;
+    /**
+     * <pre>
+     *速度(单位:米/秒,范围0~15),默认8
+     * </pre>
+     *
+     * <code>float speed = 4;</code>
+     * @return The speed.
+     */
+    @java.lang.Override
+    public float getSpeed() {
+      return speed_;
+    }
+
+    public static final int ACTIONS_FIELD_NUMBER = 5;
+    private java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction> actions_;
+    /**
+     * <pre>
+     *动作数组
+     * </pre>
+     *
+     * <code>repeated .PointAction actions = 5;</code>
+     */
+    @java.lang.Override
+    public java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction> getActionsList() {
+      return actions_;
+    }
+    /**
+     * <pre>
+     *动作数组
+     * </pre>
+     *
+     * <code>repeated .PointAction actions = 5;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointActionOrBuilder> 
+        getActionsOrBuilderList() {
+      return actions_;
+    }
+    /**
+     * <pre>
+     *动作数组
+     * </pre>
+     *
+     * <code>repeated .PointAction actions = 5;</code>
+     */
+    @java.lang.Override
+    public int getActionsCount() {
+      return actions_.size();
+    }
+    /**
+     * <pre>
+     *动作数组
+     * </pre>
+     *
+     * <code>repeated .PointAction actions = 5;</code>
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction getActions(int index) {
+      return actions_.get(index);
+    }
+    /**
+     * <pre>
+     *动作数组
+     * </pre>
+     *
+     * <code>repeated .PointAction actions = 5;</code>
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointActionOrBuilder getActionsOrBuilder(
+        int index) {
+      return actions_.get(index);
+    }
+
+    public static final int FLIGHTPATHMODE_FIELD_NUMBER = 6;
+    private int flightPathMode_;
+    /**
+     * <pre>
+     *航线飞行模式:1=直线飞行,2=协调转弯,3=曲线飞行(停),4=曲线飞行(不停)
+     * </pre>
+     *
+     * <code>uint32 flightPathMode = 6;</code>
+     * @return The flightPathMode.
+     */
+    @java.lang.Override
+    public int getFlightPathMode() {
+      return flightPathMode_;
+    }
+
+    public static final int DAMPINGDISTANCE_FIELD_NUMBER = 7;
+    private float dampingDistance_;
+    /**
+     * <pre>
+     *转弯半径(仅协调转弯模式下有效),取值范围1~655.35单位:米,两点间距离要小于此值,此值要根据实际情况计算,切勿随便设此值[可能导致航线开始失败],具体计算方法可以咨询售后支持或者大疆DJI
+     * </pre>
+     *
+     * <code>float dampingDistance = 7;</code>
+     * @return The dampingDistance.
+     */
+    @java.lang.Override
+    public float getDampingDistance() {
+      return dampingDistance_;
+    }
+
+    public static final int SAFEGOHOMEFLAG_FIELD_NUMBER = 8;
+    private int safeGohomeFlag_;
+    /**
+     * <pre>
+     *是否为安全返航点 0=不是,1=是 (暂时未启用)
+     * </pre>
+     *
+     * <code>uint32 safeGohomeFlag = 8;</code>
+     * @return The safeGohomeFlag.
+     */
+    @java.lang.Override
+    public int getSafeGohomeFlag() {
+      return safeGohomeFlag_;
+    }
+
+    public static final int HEADINGMODE_FIELD_NUMBER = 9;
+    private int headingMode_;
+    /**
+     * <pre>
+     *偏航模式 0=自动,1=锁定,2=遥控器控制,3=云台依照航点方向旋转,4=朝向兴趣点,5=飞机和云台的偏航同时旋转
+     * </pre>
+     *
+     * <code>uint32 headingMode = 9;</code>
+     * @return The headingMode.
+     */
+    @java.lang.Override
+    public int getHeadingMode() {
+      return headingMode_;
+    }
+
+    public static final int HEADING_FIELD_NUMBER = 10;
+    private float heading_;
+    /**
+     * <pre>
+     *航点偏航 -180~180
+     * </pre>
+     *
+     * <code>float heading = 10;</code>
+     * @return The heading.
+     */
+    @java.lang.Override
+    public float getHeading() {
+      return heading_;
+    }
+
+    public static final int INTERESTINDEX_FIELD_NUMBER = 11;
+    private int interestIndex_;
+    /**
+     * <pre>
+     *兴趣点下标,默认-1
+     * </pre>
+     *
+     * <code>int32 interestIndex = 11;</code>
+     * @return The interestIndex.
+     */
+    @java.lang.Override
+    public int getInterestIndex() {
+      return interestIndex_;
+    }
+
+    public static final int GROUPINDEX_FIELD_NUMBER = 12;
+    private int groupIndex_;
+    /**
+     * <pre>
+     *组下标
+     * </pre>
+     *
+     * <code>uint32 groupIndex = 12;</code>
+     * @return The groupIndex.
+     */
+    @java.lang.Override
+    public int getGroupIndex() {
+      return groupIndex_;
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (java.lang.Double.doubleToRawLongBits(lng_) != 0) {
+        output.writeDouble(1, lng_);
+      }
+      if (java.lang.Double.doubleToRawLongBits(lat_) != 0) {
+        output.writeDouble(2, lat_);
+      }
+      if (java.lang.Float.floatToRawIntBits(height_) != 0) {
+        output.writeFloat(3, height_);
+      }
+      if (java.lang.Float.floatToRawIntBits(speed_) != 0) {
+        output.writeFloat(4, speed_);
+      }
+      for (int i = 0; i < actions_.size(); i++) {
+        output.writeMessage(5, actions_.get(i));
+      }
+      if (flightPathMode_ != 0) {
+        output.writeUInt32(6, flightPathMode_);
+      }
+      if (java.lang.Float.floatToRawIntBits(dampingDistance_) != 0) {
+        output.writeFloat(7, dampingDistance_);
+      }
+      if (safeGohomeFlag_ != 0) {
+        output.writeUInt32(8, safeGohomeFlag_);
+      }
+      if (headingMode_ != 0) {
+        output.writeUInt32(9, headingMode_);
+      }
+      if (java.lang.Float.floatToRawIntBits(heading_) != 0) {
+        output.writeFloat(10, heading_);
+      }
+      if (interestIndex_ != 0) {
+        output.writeInt32(11, interestIndex_);
+      }
+      if (groupIndex_ != 0) {
+        output.writeUInt32(12, groupIndex_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (java.lang.Double.doubleToRawLongBits(lng_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeDoubleSize(1, lng_);
+      }
+      if (java.lang.Double.doubleToRawLongBits(lat_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeDoubleSize(2, lat_);
+      }
+      if (java.lang.Float.floatToRawIntBits(height_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(3, height_);
+      }
+      if (java.lang.Float.floatToRawIntBits(speed_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(4, speed_);
+      }
+      for (int i = 0; i < actions_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, actions_.get(i));
+      }
+      if (flightPathMode_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(6, flightPathMode_);
+      }
+      if (java.lang.Float.floatToRawIntBits(dampingDistance_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(7, dampingDistance_);
+      }
+      if (safeGohomeFlag_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(8, safeGohomeFlag_);
+      }
+      if (headingMode_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(9, headingMode_);
+      }
+      if (java.lang.Float.floatToRawIntBits(heading_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(10, heading_);
+      }
+      if (interestIndex_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(11, interestIndex_);
+      }
+      if (groupIndex_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(12, groupIndex_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData)) {
+        return super.equals(obj);
+      }
+      com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData other = (com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData) obj;
+
+      if (java.lang.Double.doubleToLongBits(getLng())
+          != java.lang.Double.doubleToLongBits(
+              other.getLng())) return false;
+      if (java.lang.Double.doubleToLongBits(getLat())
+          != java.lang.Double.doubleToLongBits(
+              other.getLat())) return false;
+      if (java.lang.Float.floatToIntBits(getHeight())
+          != java.lang.Float.floatToIntBits(
+              other.getHeight())) return false;
+      if (java.lang.Float.floatToIntBits(getSpeed())
+          != java.lang.Float.floatToIntBits(
+              other.getSpeed())) return false;
+      if (!getActionsList()
+          .equals(other.getActionsList())) return false;
+      if (getFlightPathMode()
+          != other.getFlightPathMode()) return false;
+      if (java.lang.Float.floatToIntBits(getDampingDistance())
+          != java.lang.Float.floatToIntBits(
+              other.getDampingDistance())) return false;
+      if (getSafeGohomeFlag()
+          != other.getSafeGohomeFlag()) return false;
+      if (getHeadingMode()
+          != other.getHeadingMode()) return false;
+      if (java.lang.Float.floatToIntBits(getHeading())
+          != java.lang.Float.floatToIntBits(
+              other.getHeading())) return false;
+      if (getInterestIndex()
+          != other.getInterestIndex()) return false;
+      if (getGroupIndex()
+          != other.getGroupIndex()) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + LNG_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          java.lang.Double.doubleToLongBits(getLng()));
+      hash = (37 * hash) + LAT_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          java.lang.Double.doubleToLongBits(getLat()));
+      hash = (37 * hash) + HEIGHT_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getHeight());
+      hash = (37 * hash) + SPEED_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getSpeed());
+      if (getActionsCount() > 0) {
+        hash = (37 * hash) + ACTIONS_FIELD_NUMBER;
+        hash = (53 * hash) + getActionsList().hashCode();
+      }
+      hash = (37 * hash) + FLIGHTPATHMODE_FIELD_NUMBER;
+      hash = (53 * hash) + getFlightPathMode();
+      hash = (37 * hash) + DAMPINGDISTANCE_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getDampingDistance());
+      hash = (37 * hash) + SAFEGOHOMEFLAG_FIELD_NUMBER;
+      hash = (53 * hash) + getSafeGohomeFlag();
+      hash = (37 * hash) + HEADINGMODE_FIELD_NUMBER;
+      hash = (53 * hash) + getHeadingMode();
+      hash = (37 * hash) + HEADING_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getHeading());
+      hash = (37 * hash) + INTERESTINDEX_FIELD_NUMBER;
+      hash = (53 * hash) + getInterestIndex();
+      hash = (37 * hash) + GROUPINDEX_FIELD_NUMBER;
+      hash = (53 * hash) + getGroupIndex();
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     *航线点
+     * </pre>
+     *
+     * Protobuf type {@code PointData}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:PointData)
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_PointData_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_PointData_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.class, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder.class);
+      }
+
+      // Construct using com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getActionsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        lng_ = 0D;
+
+        lat_ = 0D;
+
+        height_ = 0F;
+
+        speed_ = 0F;
+
+        if (actionsBuilder_ == null) {
+          actions_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          actionsBuilder_.clear();
+        }
+        flightPathMode_ = 0;
+
+        dampingDistance_ = 0F;
+
+        safeGohomeFlag_ = 0;
+
+        headingMode_ = 0;
+
+        heading_ = 0F;
+
+        interestIndex_ = 0;
+
+        groupIndex_ = 0;
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_PointData_descriptor;
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData getDefaultInstanceForType() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData build() {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData buildPartial() {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData result = new com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData(this);
+        int from_bitField0_ = bitField0_;
+        result.lng_ = lng_;
+        result.lat_ = lat_;
+        result.height_ = height_;
+        result.speed_ = speed_;
+        if (actionsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            actions_ = java.util.Collections.unmodifiableList(actions_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.actions_ = actions_;
+        } else {
+          result.actions_ = actionsBuilder_.build();
+        }
+        result.flightPathMode_ = flightPathMode_;
+        result.dampingDistance_ = dampingDistance_;
+        result.safeGohomeFlag_ = safeGohomeFlag_;
+        result.headingMode_ = headingMode_;
+        result.heading_ = heading_;
+        result.interestIndex_ = interestIndex_;
+        result.groupIndex_ = groupIndex_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData) {
+          return mergeFrom((com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData other) {
+        if (other == com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.getDefaultInstance()) return this;
+        if (other.getLng() != 0D) {
+          setLng(other.getLng());
+        }
+        if (other.getLat() != 0D) {
+          setLat(other.getLat());
+        }
+        if (other.getHeight() != 0F) {
+          setHeight(other.getHeight());
+        }
+        if (other.getSpeed() != 0F) {
+          setSpeed(other.getSpeed());
+        }
+        if (actionsBuilder_ == null) {
+          if (!other.actions_.isEmpty()) {
+            if (actions_.isEmpty()) {
+              actions_ = other.actions_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureActionsIsMutable();
+              actions_.addAll(other.actions_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.actions_.isEmpty()) {
+            if (actionsBuilder_.isEmpty()) {
+              actionsBuilder_.dispose();
+              actionsBuilder_ = null;
+              actions_ = other.actions_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              actionsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getActionsFieldBuilder() : null;
+            } else {
+              actionsBuilder_.addAllMessages(other.actions_);
+            }
+          }
+        }
+        if (other.getFlightPathMode() != 0) {
+          setFlightPathMode(other.getFlightPathMode());
+        }
+        if (other.getDampingDistance() != 0F) {
+          setDampingDistance(other.getDampingDistance());
+        }
+        if (other.getSafeGohomeFlag() != 0) {
+          setSafeGohomeFlag(other.getSafeGohomeFlag());
+        }
+        if (other.getHeadingMode() != 0) {
+          setHeadingMode(other.getHeadingMode());
+        }
+        if (other.getHeading() != 0F) {
+          setHeading(other.getHeading());
+        }
+        if (other.getInterestIndex() != 0) {
+          setInterestIndex(other.getInterestIndex());
+        }
+        if (other.getGroupIndex() != 0) {
+          setGroupIndex(other.getGroupIndex());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private double lng_ ;
+      /**
+       * <pre>
+       *经度
+       * </pre>
+       *
+       * <code>double lng = 1;</code>
+       * @return The lng.
+       */
+      @java.lang.Override
+      public double getLng() {
+        return lng_;
+      }
+      /**
+       * <pre>
+       *经度
+       * </pre>
+       *
+       * <code>double lng = 1;</code>
+       * @param value The lng to set.
+       * @return This builder for chaining.
+       */
+      public Builder setLng(double value) {
+        
+        lng_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *经度
+       * </pre>
+       *
+       * <code>double lng = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearLng() {
+        
+        lng_ = 0D;
+        onChanged();
+        return this;
+      }
+
+      private double lat_ ;
+      /**
+       * <pre>
+       *纬度
+       * </pre>
+       *
+       * <code>double lat = 2;</code>
+       * @return The lat.
+       */
+      @java.lang.Override
+      public double getLat() {
+        return lat_;
+      }
+      /**
+       * <pre>
+       *纬度
+       * </pre>
+       *
+       * <code>double lat = 2;</code>
+       * @param value The lat to set.
+       * @return This builder for chaining.
+       */
+      public Builder setLat(double value) {
+        
+        lat_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *纬度
+       * </pre>
+       *
+       * <code>double lat = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearLat() {
+        
+        lat_ = 0D;
+        onChanged();
+        return this;
+      }
+
+      private float height_ ;
+      /**
+       * <pre>
+       *高度(单位:米,范围0~遥控器限高),说明:此值为相对起飞点高度,如果太高会有失去网络覆盖风险
+       * </pre>
+       *
+       * <code>float height = 3;</code>
+       * @return The height.
+       */
+      @java.lang.Override
+      public float getHeight() {
+        return height_;
+      }
+      /**
+       * <pre>
+       *高度(单位:米,范围0~遥控器限高),说明:此值为相对起飞点高度,如果太高会有失去网络覆盖风险
+       * </pre>
+       *
+       * <code>float height = 3;</code>
+       * @param value The height to set.
+       * @return This builder for chaining.
+       */
+      public Builder setHeight(float value) {
+        
+        height_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *高度(单位:米,范围0~遥控器限高),说明:此值为相对起飞点高度,如果太高会有失去网络覆盖风险
+       * </pre>
+       *
+       * <code>float height = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearHeight() {
+        
+        height_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private float speed_ ;
+      /**
+       * <pre>
+       *速度(单位:米/秒,范围0~15),默认8
+       * </pre>
+       *
+       * <code>float speed = 4;</code>
+       * @return The speed.
+       */
+      @java.lang.Override
+      public float getSpeed() {
+        return speed_;
+      }
+      /**
+       * <pre>
+       *速度(单位:米/秒,范围0~15),默认8
+       * </pre>
+       *
+       * <code>float speed = 4;</code>
+       * @param value The speed to set.
+       * @return This builder for chaining.
+       */
+      public Builder setSpeed(float value) {
+        
+        speed_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *速度(单位:米/秒,范围0~15),默认8
+       * </pre>
+       *
+       * <code>float speed = 4;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearSpeed() {
+        
+        speed_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction> actions_ =
+        java.util.Collections.emptyList();
+      private void ensureActionsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          actions_ = new java.util.ArrayList<com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction>(actions_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointActionOrBuilder> actionsBuilder_;
+
+      /**
+       * <pre>
+       *动作数组
+       * </pre>
+       *
+       * <code>repeated .PointAction actions = 5;</code>
+       */
+      public java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction> getActionsList() {
+        if (actionsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(actions_);
+        } else {
+          return actionsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <pre>
+       *动作数组
+       * </pre>
+       *
+       * <code>repeated .PointAction actions = 5;</code>
+       */
+      public int getActionsCount() {
+        if (actionsBuilder_ == null) {
+          return actions_.size();
+        } else {
+          return actionsBuilder_.getCount();
+        }
+      }
+      /**
+       * <pre>
+       *动作数组
+       * </pre>
+       *
+       * <code>repeated .PointAction actions = 5;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction getActions(int index) {
+        if (actionsBuilder_ == null) {
+          return actions_.get(index);
+        } else {
+          return actionsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <pre>
+       *动作数组
+       * </pre>
+       *
+       * <code>repeated .PointAction actions = 5;</code>
+       */
+      public Builder setActions(
+          int index, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction value) {
+        if (actionsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureActionsIsMutable();
+          actions_.set(index, value);
+          onChanged();
+        } else {
+          actionsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *动作数组
+       * </pre>
+       *
+       * <code>repeated .PointAction actions = 5;</code>
+       */
+      public Builder setActions(
+          int index, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction.Builder builderForValue) {
+        if (actionsBuilder_ == null) {
+          ensureActionsIsMutable();
+          actions_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          actionsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *动作数组
+       * </pre>
+       *
+       * <code>repeated .PointAction actions = 5;</code>
+       */
+      public Builder addActions(com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction value) {
+        if (actionsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureActionsIsMutable();
+          actions_.add(value);
+          onChanged();
+        } else {
+          actionsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *动作数组
+       * </pre>
+       *
+       * <code>repeated .PointAction actions = 5;</code>
+       */
+      public Builder addActions(
+          int index, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction value) {
+        if (actionsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureActionsIsMutable();
+          actions_.add(index, value);
+          onChanged();
+        } else {
+          actionsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *动作数组
+       * </pre>
+       *
+       * <code>repeated .PointAction actions = 5;</code>
+       */
+      public Builder addActions(
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction.Builder builderForValue) {
+        if (actionsBuilder_ == null) {
+          ensureActionsIsMutable();
+          actions_.add(builderForValue.build());
+          onChanged();
+        } else {
+          actionsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *动作数组
+       * </pre>
+       *
+       * <code>repeated .PointAction actions = 5;</code>
+       */
+      public Builder addActions(
+          int index, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction.Builder builderForValue) {
+        if (actionsBuilder_ == null) {
+          ensureActionsIsMutable();
+          actions_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          actionsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *动作数组
+       * </pre>
+       *
+       * <code>repeated .PointAction actions = 5;</code>
+       */
+      public Builder addAllActions(
+          java.lang.Iterable<? extends com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction> values) {
+        if (actionsBuilder_ == null) {
+          ensureActionsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, actions_);
+          onChanged();
+        } else {
+          actionsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *动作数组
+       * </pre>
+       *
+       * <code>repeated .PointAction actions = 5;</code>
+       */
+      public Builder clearActions() {
+        if (actionsBuilder_ == null) {
+          actions_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          actionsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *动作数组
+       * </pre>
+       *
+       * <code>repeated .PointAction actions = 5;</code>
+       */
+      public Builder removeActions(int index) {
+        if (actionsBuilder_ == null) {
+          ensureActionsIsMutable();
+          actions_.remove(index);
+          onChanged();
+        } else {
+          actionsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *动作数组
+       * </pre>
+       *
+       * <code>repeated .PointAction actions = 5;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction.Builder getActionsBuilder(
+          int index) {
+        return getActionsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <pre>
+       *动作数组
+       * </pre>
+       *
+       * <code>repeated .PointAction actions = 5;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointActionOrBuilder getActionsOrBuilder(
+          int index) {
+        if (actionsBuilder_ == null) {
+          return actions_.get(index);  } else {
+          return actionsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <pre>
+       *动作数组
+       * </pre>
+       *
+       * <code>repeated .PointAction actions = 5;</code>
+       */
+      public java.util.List<? extends com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointActionOrBuilder> 
+           getActionsOrBuilderList() {
+        if (actionsBuilder_ != null) {
+          return actionsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(actions_);
+        }
+      }
+      /**
+       * <pre>
+       *动作数组
+       * </pre>
+       *
+       * <code>repeated .PointAction actions = 5;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction.Builder addActionsBuilder() {
+        return getActionsFieldBuilder().addBuilder(
+            com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction.getDefaultInstance());
+      }
+      /**
+       * <pre>
+       *动作数组
+       * </pre>
+       *
+       * <code>repeated .PointAction actions = 5;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction.Builder addActionsBuilder(
+          int index) {
+        return getActionsFieldBuilder().addBuilder(
+            index, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction.getDefaultInstance());
+      }
+      /**
+       * <pre>
+       *动作数组
+       * </pre>
+       *
+       * <code>repeated .PointAction actions = 5;</code>
+       */
+      public java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction.Builder> 
+           getActionsBuilderList() {
+        return getActionsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointActionOrBuilder> 
+          getActionsFieldBuilder() {
+        if (actionsBuilder_ == null) {
+          actionsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointActionOrBuilder>(
+                  actions_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          actions_ = null;
+        }
+        return actionsBuilder_;
+      }
+
+      private int flightPathMode_ ;
+      /**
+       * <pre>
+       *航线飞行模式:1=直线飞行,2=协调转弯,3=曲线飞行(停),4=曲线飞行(不停)
+       * </pre>
+       *
+       * <code>uint32 flightPathMode = 6;</code>
+       * @return The flightPathMode.
+       */
+      @java.lang.Override
+      public int getFlightPathMode() {
+        return flightPathMode_;
+      }
+      /**
+       * <pre>
+       *航线飞行模式:1=直线飞行,2=协调转弯,3=曲线飞行(停),4=曲线飞行(不停)
+       * </pre>
+       *
+       * <code>uint32 flightPathMode = 6;</code>
+       * @param value The flightPathMode to set.
+       * @return This builder for chaining.
+       */
+      public Builder setFlightPathMode(int value) {
+        
+        flightPathMode_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *航线飞行模式:1=直线飞行,2=协调转弯,3=曲线飞行(停),4=曲线飞行(不停)
+       * </pre>
+       *
+       * <code>uint32 flightPathMode = 6;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearFlightPathMode() {
+        
+        flightPathMode_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private float dampingDistance_ ;
+      /**
+       * <pre>
+       *转弯半径(仅协调转弯模式下有效),取值范围1~655.35单位:米,两点间距离要小于此值,此值要根据实际情况计算,切勿随便设此值[可能导致航线开始失败],具体计算方法可以咨询售后支持或者大疆DJI
+       * </pre>
+       *
+       * <code>float dampingDistance = 7;</code>
+       * @return The dampingDistance.
+       */
+      @java.lang.Override
+      public float getDampingDistance() {
+        return dampingDistance_;
+      }
+      /**
+       * <pre>
+       *转弯半径(仅协调转弯模式下有效),取值范围1~655.35单位:米,两点间距离要小于此值,此值要根据实际情况计算,切勿随便设此值[可能导致航线开始失败],具体计算方法可以咨询售后支持或者大疆DJI
+       * </pre>
+       *
+       * <code>float dampingDistance = 7;</code>
+       * @param value The dampingDistance to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDampingDistance(float value) {
+        
+        dampingDistance_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *转弯半径(仅协调转弯模式下有效),取值范围1~655.35单位:米,两点间距离要小于此值,此值要根据实际情况计算,切勿随便设此值[可能导致航线开始失败],具体计算方法可以咨询售后支持或者大疆DJI
+       * </pre>
+       *
+       * <code>float dampingDistance = 7;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearDampingDistance() {
+        
+        dampingDistance_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private int safeGohomeFlag_ ;
+      /**
+       * <pre>
+       *是否为安全返航点 0=不是,1=是 (暂时未启用)
+       * </pre>
+       *
+       * <code>uint32 safeGohomeFlag = 8;</code>
+       * @return The safeGohomeFlag.
+       */
+      @java.lang.Override
+      public int getSafeGohomeFlag() {
+        return safeGohomeFlag_;
+      }
+      /**
+       * <pre>
+       *是否为安全返航点 0=不是,1=是 (暂时未启用)
+       * </pre>
+       *
+       * <code>uint32 safeGohomeFlag = 8;</code>
+       * @param value The safeGohomeFlag to set.
+       * @return This builder for chaining.
+       */
+      public Builder setSafeGohomeFlag(int value) {
+        
+        safeGohomeFlag_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *是否为安全返航点 0=不是,1=是 (暂时未启用)
+       * </pre>
+       *
+       * <code>uint32 safeGohomeFlag = 8;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearSafeGohomeFlag() {
+        
+        safeGohomeFlag_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int headingMode_ ;
+      /**
+       * <pre>
+       *偏航模式 0=自动,1=锁定,2=遥控器控制,3=云台依照航点方向旋转,4=朝向兴趣点,5=飞机和云台的偏航同时旋转
+       * </pre>
+       *
+       * <code>uint32 headingMode = 9;</code>
+       * @return The headingMode.
+       */
+      @java.lang.Override
+      public int getHeadingMode() {
+        return headingMode_;
+      }
+      /**
+       * <pre>
+       *偏航模式 0=自动,1=锁定,2=遥控器控制,3=云台依照航点方向旋转,4=朝向兴趣点,5=飞机和云台的偏航同时旋转
+       * </pre>
+       *
+       * <code>uint32 headingMode = 9;</code>
+       * @param value The headingMode to set.
+       * @return This builder for chaining.
+       */
+      public Builder setHeadingMode(int value) {
+        
+        headingMode_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *偏航模式 0=自动,1=锁定,2=遥控器控制,3=云台依照航点方向旋转,4=朝向兴趣点,5=飞机和云台的偏航同时旋转
+       * </pre>
+       *
+       * <code>uint32 headingMode = 9;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearHeadingMode() {
+        
+        headingMode_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private float heading_ ;
+      /**
+       * <pre>
+       *航点偏航 -180~180
+       * </pre>
+       *
+       * <code>float heading = 10;</code>
+       * @return The heading.
+       */
+      @java.lang.Override
+      public float getHeading() {
+        return heading_;
+      }
+      /**
+       * <pre>
+       *航点偏航 -180~180
+       * </pre>
+       *
+       * <code>float heading = 10;</code>
+       * @param value The heading to set.
+       * @return This builder for chaining.
+       */
+      public Builder setHeading(float value) {
+        
+        heading_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *航点偏航 -180~180
+       * </pre>
+       *
+       * <code>float heading = 10;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearHeading() {
+        
+        heading_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private int interestIndex_ ;
+      /**
+       * <pre>
+       *兴趣点下标,默认-1
+       * </pre>
+       *
+       * <code>int32 interestIndex = 11;</code>
+       * @return The interestIndex.
+       */
+      @java.lang.Override
+      public int getInterestIndex() {
+        return interestIndex_;
+      }
+      /**
+       * <pre>
+       *兴趣点下标,默认-1
+       * </pre>
+       *
+       * <code>int32 interestIndex = 11;</code>
+       * @param value The interestIndex to set.
+       * @return This builder for chaining.
+       */
+      public Builder setInterestIndex(int value) {
+        
+        interestIndex_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *兴趣点下标,默认-1
+       * </pre>
+       *
+       * <code>int32 interestIndex = 11;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearInterestIndex() {
+        
+        interestIndex_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int groupIndex_ ;
+      /**
+       * <pre>
+       *组下标
+       * </pre>
+       *
+       * <code>uint32 groupIndex = 12;</code>
+       * @return The groupIndex.
+       */
+      @java.lang.Override
+      public int getGroupIndex() {
+        return groupIndex_;
+      }
+      /**
+       * <pre>
+       *组下标
+       * </pre>
+       *
+       * <code>uint32 groupIndex = 12;</code>
+       * @param value The groupIndex to set.
+       * @return This builder for chaining.
+       */
+      public Builder setGroupIndex(int value) {
+        
+        groupIndex_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *组下标
+       * </pre>
+       *
+       * <code>uint32 groupIndex = 12;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearGroupIndex() {
+        
+        groupIndex_ = 0;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:PointData)
+    }
+
+    // @@protoc_insertion_point(class_scope:PointData)
+    private static final com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData();
+    }
+
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<PointData>
+        PARSER = new com.google.protobuf.AbstractParser<PointData>() {
+      @java.lang.Override
+      public PointData parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new PointData(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<PointData> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<PointData> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface PointActionOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:PointAction)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <pre>
+     *类型:1.变焦 2.拍照 3.录像 4.停录 5.控制飞机机头偏航 6.控制云台俯仰 7.控制云台偏航 8.控制云台横滚 9.悬停 10.等距间隔拍照 11.等时间隔拍照 12.结束间隔拍照 13.单条喊话 14.开始循环喊话 15.结束循环喊话 16.对焦
+     * </pre>
+     *
+     * <code>uint32 type = 1;</code>
+     * @return The type.
+     */
+    int getType();
+
+    /**
+     * <pre>
+     *参数:[1.变焦]-&gt;变焦倍数(范围:2~200) 、 [5.控制飞机机头偏航(范围:-180~180)、6.控制云台俯仰(范围:-120~30)、7.控制云台偏航(范围:-180~180)、8.控制云台横滚(范围:-90~60)]-&gt;角度(按正北坐标系绝对值控制) 、[9.悬停]-&gt;时间(单位:秒,范围:1~25,如果想停留大于25秒时长,可以加多组悬停动作) [10.等距间隔拍照]-&gt;距离(单位:米,范围:1~100)  [11.等时间隔拍照]-&gt;时间(单位:秒,范围:1~30)  [13/14-&gt;喊话器俯仰角度,如果此值为0默认改成-90](范围:0~-90)
+     * </pre>
+     *
+     * <code>float param = 2;</code>
+     * @return The param.
+     */
+    float getParam();
+
+    /**
+     * <pre>
+     *动作触发后等待时长(单位:秒) [此值如果不需要可以不传,如需悬停可添加类型9悬停动作] [13/14-&gt;喊话器声音,如果此值不传默认50](范围:0~100)
+     * </pre>
+     *
+     * <code>int32 waitTime = 3;</code>
+     * @return The waitTime.
+     */
+    int getWaitTime();
+
+    /**
+     * <pre>
+     *喊话内容[type=13和type=14时生效]
+     * </pre>
+     *
+     * <code>string speakInfo = 4;</code>
+     * @return The speakInfo.
+     */
+    java.lang.String getSpeakInfo();
+    /**
+     * <pre>
+     *喊话内容[type=13和type=14时生效]
+     * </pre>
+     *
+     * <code>string speakInfo = 4;</code>
+     * @return The bytes for speakInfo.
+     */
+    com.google.protobuf.ByteString
+        getSpeakInfoBytes();
+  }
+  /**
+   * <pre>
+   *航线点动作
+   * </pre>
+   *
+   * Protobuf type {@code PointAction}
+   */
+  public static final class PointAction extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:PointAction)
+      PointActionOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use PointAction.newBuilder() to construct.
+    private PointAction(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private PointAction() {
+      speakInfo_ = "";
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new PointAction();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private PointAction(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 8: {
+
+              type_ = input.readUInt32();
+              break;
+            }
+            case 21: {
+
+              param_ = input.readFloat();
+              break;
+            }
+            case 24: {
+
+              waitTime_ = input.readInt32();
+              break;
+            }
+            case 34: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              speakInfo_ = s;
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_PointAction_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_PointAction_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction.class, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction.Builder.class);
+    }
+
+    public static final int TYPE_FIELD_NUMBER = 1;
+    private int type_;
+    /**
+     * <pre>
+     *类型:1.变焦 2.拍照 3.录像 4.停录 5.控制飞机机头偏航 6.控制云台俯仰 7.控制云台偏航 8.控制云台横滚 9.悬停 10.等距间隔拍照 11.等时间隔拍照 12.结束间隔拍照 13.单条喊话 14.开始循环喊话 15.结束循环喊话 16.对焦
+     * </pre>
+     *
+     * <code>uint32 type = 1;</code>
+     * @return The type.
+     */
+    @java.lang.Override
+    public int getType() {
+      return type_;
+    }
+
+    public static final int PARAM_FIELD_NUMBER = 2;
+    private float param_;
+    /**
+     * <pre>
+     *参数:[1.变焦]-&gt;变焦倍数(范围:2~200) 、 [5.控制飞机机头偏航(范围:-180~180)、6.控制云台俯仰(范围:-120~30)、7.控制云台偏航(范围:-180~180)、8.控制云台横滚(范围:-90~60)]-&gt;角度(按正北坐标系绝对值控制) 、[9.悬停]-&gt;时间(单位:秒,范围:1~25,如果想停留大于25秒时长,可以加多组悬停动作) [10.等距间隔拍照]-&gt;距离(单位:米,范围:1~100)  [11.等时间隔拍照]-&gt;时间(单位:秒,范围:1~30)  [13/14-&gt;喊话器俯仰角度,如果此值为0默认改成-90](范围:0~-90)
+     * </pre>
+     *
+     * <code>float param = 2;</code>
+     * @return The param.
+     */
+    @java.lang.Override
+    public float getParam() {
+      return param_;
+    }
+
+    public static final int WAITTIME_FIELD_NUMBER = 3;
+    private int waitTime_;
+    /**
+     * <pre>
+     *动作触发后等待时长(单位:秒) [此值如果不需要可以不传,如需悬停可添加类型9悬停动作] [13/14-&gt;喊话器声音,如果此值不传默认50](范围:0~100)
+     * </pre>
+     *
+     * <code>int32 waitTime = 3;</code>
+     * @return The waitTime.
+     */
+    @java.lang.Override
+    public int getWaitTime() {
+      return waitTime_;
+    }
+
+    public static final int SPEAKINFO_FIELD_NUMBER = 4;
+    private volatile java.lang.Object speakInfo_;
+    /**
+     * <pre>
+     *喊话内容[type=13和type=14时生效]
+     * </pre>
+     *
+     * <code>string speakInfo = 4;</code>
+     * @return The speakInfo.
+     */
+    @java.lang.Override
+    public java.lang.String getSpeakInfo() {
+      java.lang.Object ref = speakInfo_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        speakInfo_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     *喊话内容[type=13和type=14时生效]
+     * </pre>
+     *
+     * <code>string speakInfo = 4;</code>
+     * @return The bytes for speakInfo.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getSpeakInfoBytes() {
+      java.lang.Object ref = speakInfo_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        speakInfo_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (type_ != 0) {
+        output.writeUInt32(1, type_);
+      }
+      if (java.lang.Float.floatToRawIntBits(param_) != 0) {
+        output.writeFloat(2, param_);
+      }
+      if (waitTime_ != 0) {
+        output.writeInt32(3, waitTime_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(speakInfo_)) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, speakInfo_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (type_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(1, type_);
+      }
+      if (java.lang.Float.floatToRawIntBits(param_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(2, param_);
+      }
+      if (waitTime_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(3, waitTime_);
+      }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(speakInfo_)) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, speakInfo_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction)) {
+        return super.equals(obj);
+      }
+      com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction other = (com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction) obj;
+
+      if (getType()
+          != other.getType()) return false;
+      if (java.lang.Float.floatToIntBits(getParam())
+          != java.lang.Float.floatToIntBits(
+              other.getParam())) return false;
+      if (getWaitTime()
+          != other.getWaitTime()) return false;
+      if (!getSpeakInfo()
+          .equals(other.getSpeakInfo())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + TYPE_FIELD_NUMBER;
+      hash = (53 * hash) + getType();
+      hash = (37 * hash) + PARAM_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getParam());
+      hash = (37 * hash) + WAITTIME_FIELD_NUMBER;
+      hash = (53 * hash) + getWaitTime();
+      hash = (37 * hash) + SPEAKINFO_FIELD_NUMBER;
+      hash = (53 * hash) + getSpeakInfo().hashCode();
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     *航线点动作
+     * </pre>
+     *
+     * Protobuf type {@code PointAction}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:PointAction)
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointActionOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_PointAction_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_PointAction_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction.class, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction.Builder.class);
+      }
+
+      // Construct using com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        type_ = 0;
+
+        param_ = 0F;
+
+        waitTime_ = 0;
+
+        speakInfo_ = "";
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_PointAction_descriptor;
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction getDefaultInstanceForType() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction build() {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction buildPartial() {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction result = new com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction(this);
+        result.type_ = type_;
+        result.param_ = param_;
+        result.waitTime_ = waitTime_;
+        result.speakInfo_ = speakInfo_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction) {
+          return mergeFrom((com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction other) {
+        if (other == com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction.getDefaultInstance()) return this;
+        if (other.getType() != 0) {
+          setType(other.getType());
+        }
+        if (other.getParam() != 0F) {
+          setParam(other.getParam());
+        }
+        if (other.getWaitTime() != 0) {
+          setWaitTime(other.getWaitTime());
+        }
+        if (!other.getSpeakInfo().isEmpty()) {
+          speakInfo_ = other.speakInfo_;
+          onChanged();
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private int type_ ;
+      /**
+       * <pre>
+       *类型:1.变焦 2.拍照 3.录像 4.停录 5.控制飞机机头偏航 6.控制云台俯仰 7.控制云台偏航 8.控制云台横滚 9.悬停 10.等距间隔拍照 11.等时间隔拍照 12.结束间隔拍照 13.单条喊话 14.开始循环喊话 15.结束循环喊话 16.对焦
+       * </pre>
+       *
+       * <code>uint32 type = 1;</code>
+       * @return The type.
+       */
+      @java.lang.Override
+      public int getType() {
+        return type_;
+      }
+      /**
+       * <pre>
+       *类型:1.变焦 2.拍照 3.录像 4.停录 5.控制飞机机头偏航 6.控制云台俯仰 7.控制云台偏航 8.控制云台横滚 9.悬停 10.等距间隔拍照 11.等时间隔拍照 12.结束间隔拍照 13.单条喊话 14.开始循环喊话 15.结束循环喊话 16.对焦
+       * </pre>
+       *
+       * <code>uint32 type = 1;</code>
+       * @param value The type to set.
+       * @return This builder for chaining.
+       */
+      public Builder setType(int value) {
+        
+        type_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *类型:1.变焦 2.拍照 3.录像 4.停录 5.控制飞机机头偏航 6.控制云台俯仰 7.控制云台偏航 8.控制云台横滚 9.悬停 10.等距间隔拍照 11.等时间隔拍照 12.结束间隔拍照 13.单条喊话 14.开始循环喊话 15.结束循环喊话 16.对焦
+       * </pre>
+       *
+       * <code>uint32 type = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearType() {
+        
+        type_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private float param_ ;
+      /**
+       * <pre>
+       *参数:[1.变焦]-&gt;变焦倍数(范围:2~200) 、 [5.控制飞机机头偏航(范围:-180~180)、6.控制云台俯仰(范围:-120~30)、7.控制云台偏航(范围:-180~180)、8.控制云台横滚(范围:-90~60)]-&gt;角度(按正北坐标系绝对值控制) 、[9.悬停]-&gt;时间(单位:秒,范围:1~25,如果想停留大于25秒时长,可以加多组悬停动作) [10.等距间隔拍照]-&gt;距离(单位:米,范围:1~100)  [11.等时间隔拍照]-&gt;时间(单位:秒,范围:1~30)  [13/14-&gt;喊话器俯仰角度,如果此值为0默认改成-90](范围:0~-90)
+       * </pre>
+       *
+       * <code>float param = 2;</code>
+       * @return The param.
+       */
+      @java.lang.Override
+      public float getParam() {
+        return param_;
+      }
+      /**
+       * <pre>
+       *参数:[1.变焦]-&gt;变焦倍数(范围:2~200) 、 [5.控制飞机机头偏航(范围:-180~180)、6.控制云台俯仰(范围:-120~30)、7.控制云台偏航(范围:-180~180)、8.控制云台横滚(范围:-90~60)]-&gt;角度(按正北坐标系绝对值控制) 、[9.悬停]-&gt;时间(单位:秒,范围:1~25,如果想停留大于25秒时长,可以加多组悬停动作) [10.等距间隔拍照]-&gt;距离(单位:米,范围:1~100)  [11.等时间隔拍照]-&gt;时间(单位:秒,范围:1~30)  [13/14-&gt;喊话器俯仰角度,如果此值为0默认改成-90](范围:0~-90)
+       * </pre>
+       *
+       * <code>float param = 2;</code>
+       * @param value The param to set.
+       * @return This builder for chaining.
+       */
+      public Builder setParam(float value) {
+        
+        param_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *参数:[1.变焦]-&gt;变焦倍数(范围:2~200) 、 [5.控制飞机机头偏航(范围:-180~180)、6.控制云台俯仰(范围:-120~30)、7.控制云台偏航(范围:-180~180)、8.控制云台横滚(范围:-90~60)]-&gt;角度(按正北坐标系绝对值控制) 、[9.悬停]-&gt;时间(单位:秒,范围:1~25,如果想停留大于25秒时长,可以加多组悬停动作) [10.等距间隔拍照]-&gt;距离(单位:米,范围:1~100)  [11.等时间隔拍照]-&gt;时间(单位:秒,范围:1~30)  [13/14-&gt;喊话器俯仰角度,如果此值为0默认改成-90](范围:0~-90)
+       * </pre>
+       *
+       * <code>float param = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearParam() {
+        
+        param_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private int waitTime_ ;
+      /**
+       * <pre>
+       *动作触发后等待时长(单位:秒) [此值如果不需要可以不传,如需悬停可添加类型9悬停动作] [13/14-&gt;喊话器声音,如果此值不传默认50](范围:0~100)
+       * </pre>
+       *
+       * <code>int32 waitTime = 3;</code>
+       * @return The waitTime.
+       */
+      @java.lang.Override
+      public int getWaitTime() {
+        return waitTime_;
+      }
+      /**
+       * <pre>
+       *动作触发后等待时长(单位:秒) [此值如果不需要可以不传,如需悬停可添加类型9悬停动作] [13/14-&gt;喊话器声音,如果此值不传默认50](范围:0~100)
+       * </pre>
+       *
+       * <code>int32 waitTime = 3;</code>
+       * @param value The waitTime to set.
+       * @return This builder for chaining.
+       */
+      public Builder setWaitTime(int value) {
+        
+        waitTime_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *动作触发后等待时长(单位:秒) [此值如果不需要可以不传,如需悬停可添加类型9悬停动作] [13/14-&gt;喊话器声音,如果此值不传默认50](范围:0~100)
+       * </pre>
+       *
+       * <code>int32 waitTime = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearWaitTime() {
+        
+        waitTime_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object speakInfo_ = "";
+      /**
+       * <pre>
+       *喊话内容[type=13和type=14时生效]
+       * </pre>
+       *
+       * <code>string speakInfo = 4;</code>
+       * @return The speakInfo.
+       */
+      public java.lang.String getSpeakInfo() {
+        java.lang.Object ref = speakInfo_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          speakInfo_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       *喊话内容[type=13和type=14时生效]
+       * </pre>
+       *
+       * <code>string speakInfo = 4;</code>
+       * @return The bytes for speakInfo.
+       */
+      public com.google.protobuf.ByteString
+          getSpeakInfoBytes() {
+        java.lang.Object ref = speakInfo_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          speakInfo_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       *喊话内容[type=13和type=14时生效]
+       * </pre>
+       *
+       * <code>string speakInfo = 4;</code>
+       * @param value The speakInfo to set.
+       * @return This builder for chaining.
+       */
+      public Builder setSpeakInfo(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        speakInfo_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *喊话内容[type=13和type=14时生效]
+       * </pre>
+       *
+       * <code>string speakInfo = 4;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearSpeakInfo() {
+        
+        speakInfo_ = getDefaultInstance().getSpeakInfo();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *喊话内容[type=13和type=14时生效]
+       * </pre>
+       *
+       * <code>string speakInfo = 4;</code>
+       * @param value The bytes for speakInfo to set.
+       * @return This builder for chaining.
+       */
+      public Builder setSpeakInfoBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        speakInfo_ = value;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:PointAction)
+    }
+
+    // @@protoc_insertion_point(class_scope:PointAction)
+    private static final com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction();
+    }
+
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<PointAction>
+        PARSER = new com.google.protobuf.AbstractParser<PointAction>() {
+      @java.lang.Override
+      public PointAction parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new PointAction(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<PointAction> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<PointAction> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointAction getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface HangarPointOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:HangarPoint)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <pre>
+     *机库ID
+     * </pre>
+     *
+     * <code>string hangarId = 1;</code>
+     * @return The hangarId.
+     */
+    java.lang.String getHangarId();
+    /**
+     * <pre>
+     *机库ID
+     * </pre>
+     *
+     * <code>string hangarId = 1;</code>
+     * @return The bytes for hangarId.
+     */
+    com.google.protobuf.ByteString
+        getHangarIdBytes();
+
+    /**
+     * <pre>
+     *机库经度
+     * </pre>
+     *
+     * <code>double hangarLng = 2;</code>
+     * @return The hangarLng.
+     */
+    double getHangarLng();
+
+    /**
+     * <pre>
+     *机库纬度
+     * </pre>
+     *
+     * <code>double hangarLat = 3;</code>
+     * @return The hangarLat.
+     */
+    double getHangarLat();
+
+    /**
+     * <pre>
+     *备降点经度
+     * </pre>
+     *
+     * <code>double alternateLng = 4;</code>
+     * @return The alternateLng.
+     */
+    double getAlternateLng();
+
+    /**
+     * <pre>
+     *备降点纬度
+     * </pre>
+     *
+     * <code>double alternateLat = 5;</code>
+     * @return The alternateLat.
+     */
+    double getAlternateLat();
+  }
+  /**
+   * <pre>
+   *机库信息
+   * </pre>
+   *
+   * Protobuf type {@code HangarPoint}
+   */
+  public static final class HangarPoint extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:HangarPoint)
+      HangarPointOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use HangarPoint.newBuilder() to construct.
+    private HangarPoint(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private HangarPoint() {
+      hangarId_ = "";
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new HangarPoint();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private HangarPoint(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              hangarId_ = s;
+              break;
+            }
+            case 17: {
+
+              hangarLng_ = input.readDouble();
+              break;
+            }
+            case 25: {
+
+              hangarLat_ = input.readDouble();
+              break;
+            }
+            case 33: {
+
+              alternateLng_ = input.readDouble();
+              break;
+            }
+            case 41: {
+
+              alternateLat_ = input.readDouble();
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_HangarPoint_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_HangarPoint_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint.class, com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint.Builder.class);
+    }
+
+    public static final int HANGARID_FIELD_NUMBER = 1;
+    private volatile java.lang.Object hangarId_;
+    /**
+     * <pre>
+     *机库ID
+     * </pre>
+     *
+     * <code>string hangarId = 1;</code>
+     * @return The hangarId.
+     */
+    @java.lang.Override
+    public java.lang.String getHangarId() {
+      java.lang.Object ref = hangarId_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        hangarId_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     *机库ID
+     * </pre>
+     *
+     * <code>string hangarId = 1;</code>
+     * @return The bytes for hangarId.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getHangarIdBytes() {
+      java.lang.Object ref = hangarId_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        hangarId_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int HANGARLNG_FIELD_NUMBER = 2;
+    private double hangarLng_;
+    /**
+     * <pre>
+     *机库经度
+     * </pre>
+     *
+     * <code>double hangarLng = 2;</code>
+     * @return The hangarLng.
+     */
+    @java.lang.Override
+    public double getHangarLng() {
+      return hangarLng_;
+    }
+
+    public static final int HANGARLAT_FIELD_NUMBER = 3;
+    private double hangarLat_;
+    /**
+     * <pre>
+     *机库纬度
+     * </pre>
+     *
+     * <code>double hangarLat = 3;</code>
+     * @return The hangarLat.
+     */
+    @java.lang.Override
+    public double getHangarLat() {
+      return hangarLat_;
+    }
+
+    public static final int ALTERNATELNG_FIELD_NUMBER = 4;
+    private double alternateLng_;
+    /**
+     * <pre>
+     *备降点经度
+     * </pre>
+     *
+     * <code>double alternateLng = 4;</code>
+     * @return The alternateLng.
+     */
+    @java.lang.Override
+    public double getAlternateLng() {
+      return alternateLng_;
+    }
+
+    public static final int ALTERNATELAT_FIELD_NUMBER = 5;
+    private double alternateLat_;
+    /**
+     * <pre>
+     *备降点纬度
+     * </pre>
+     *
+     * <code>double alternateLat = 5;</code>
+     * @return The alternateLat.
+     */
+    @java.lang.Override
+    public double getAlternateLat() {
+      return alternateLat_;
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(hangarId_)) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, hangarId_);
+      }
+      if (java.lang.Double.doubleToRawLongBits(hangarLng_) != 0) {
+        output.writeDouble(2, hangarLng_);
+      }
+      if (java.lang.Double.doubleToRawLongBits(hangarLat_) != 0) {
+        output.writeDouble(3, hangarLat_);
+      }
+      if (java.lang.Double.doubleToRawLongBits(alternateLng_) != 0) {
+        output.writeDouble(4, alternateLng_);
+      }
+      if (java.lang.Double.doubleToRawLongBits(alternateLat_) != 0) {
+        output.writeDouble(5, alternateLat_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(hangarId_)) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, hangarId_);
+      }
+      if (java.lang.Double.doubleToRawLongBits(hangarLng_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeDoubleSize(2, hangarLng_);
+      }
+      if (java.lang.Double.doubleToRawLongBits(hangarLat_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeDoubleSize(3, hangarLat_);
+      }
+      if (java.lang.Double.doubleToRawLongBits(alternateLng_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeDoubleSize(4, alternateLng_);
+      }
+      if (java.lang.Double.doubleToRawLongBits(alternateLat_) != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeDoubleSize(5, alternateLat_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint)) {
+        return super.equals(obj);
+      }
+      com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint other = (com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint) obj;
+
+      if (!getHangarId()
+          .equals(other.getHangarId())) return false;
+      if (java.lang.Double.doubleToLongBits(getHangarLng())
+          != java.lang.Double.doubleToLongBits(
+              other.getHangarLng())) return false;
+      if (java.lang.Double.doubleToLongBits(getHangarLat())
+          != java.lang.Double.doubleToLongBits(
+              other.getHangarLat())) return false;
+      if (java.lang.Double.doubleToLongBits(getAlternateLng())
+          != java.lang.Double.doubleToLongBits(
+              other.getAlternateLng())) return false;
+      if (java.lang.Double.doubleToLongBits(getAlternateLat())
+          != java.lang.Double.doubleToLongBits(
+              other.getAlternateLat())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + HANGARID_FIELD_NUMBER;
+      hash = (53 * hash) + getHangarId().hashCode();
+      hash = (37 * hash) + HANGARLNG_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          java.lang.Double.doubleToLongBits(getHangarLng()));
+      hash = (37 * hash) + HANGARLAT_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          java.lang.Double.doubleToLongBits(getHangarLat()));
+      hash = (37 * hash) + ALTERNATELNG_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          java.lang.Double.doubleToLongBits(getAlternateLng()));
+      hash = (37 * hash) + ALTERNATELAT_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          java.lang.Double.doubleToLongBits(getAlternateLat()));
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     *机库信息
+     * </pre>
+     *
+     * Protobuf type {@code HangarPoint}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:HangarPoint)
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPointOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_HangarPoint_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_HangarPoint_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint.class, com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint.Builder.class);
+      }
+
+      // Construct using com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        hangarId_ = "";
+
+        hangarLng_ = 0D;
+
+        hangarLat_ = 0D;
+
+        alternateLng_ = 0D;
+
+        alternateLat_ = 0D;
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_HangarPoint_descriptor;
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint getDefaultInstanceForType() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint build() {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint buildPartial() {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint result = new com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint(this);
+        result.hangarId_ = hangarId_;
+        result.hangarLng_ = hangarLng_;
+        result.hangarLat_ = hangarLat_;
+        result.alternateLng_ = alternateLng_;
+        result.alternateLat_ = alternateLat_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint) {
+          return mergeFrom((com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint other) {
+        if (other == com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint.getDefaultInstance()) return this;
+        if (!other.getHangarId().isEmpty()) {
+          hangarId_ = other.hangarId_;
+          onChanged();
+        }
+        if (other.getHangarLng() != 0D) {
+          setHangarLng(other.getHangarLng());
+        }
+        if (other.getHangarLat() != 0D) {
+          setHangarLat(other.getHangarLat());
+        }
+        if (other.getAlternateLng() != 0D) {
+          setAlternateLng(other.getAlternateLng());
+        }
+        if (other.getAlternateLat() != 0D) {
+          setAlternateLat(other.getAlternateLat());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private java.lang.Object hangarId_ = "";
+      /**
+       * <pre>
+       *机库ID
+       * </pre>
+       *
+       * <code>string hangarId = 1;</code>
+       * @return The hangarId.
+       */
+      public java.lang.String getHangarId() {
+        java.lang.Object ref = hangarId_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          hangarId_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       *机库ID
+       * </pre>
+       *
+       * <code>string hangarId = 1;</code>
+       * @return The bytes for hangarId.
+       */
+      public com.google.protobuf.ByteString
+          getHangarIdBytes() {
+        java.lang.Object ref = hangarId_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          hangarId_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       *机库ID
+       * </pre>
+       *
+       * <code>string hangarId = 1;</code>
+       * @param value The hangarId to set.
+       * @return This builder for chaining.
+       */
+      public Builder setHangarId(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        hangarId_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *机库ID
+       * </pre>
+       *
+       * <code>string hangarId = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearHangarId() {
+        
+        hangarId_ = getDefaultInstance().getHangarId();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *机库ID
+       * </pre>
+       *
+       * <code>string hangarId = 1;</code>
+       * @param value The bytes for hangarId to set.
+       * @return This builder for chaining.
+       */
+      public Builder setHangarIdBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        hangarId_ = value;
+        onChanged();
+        return this;
+      }
+
+      private double hangarLng_ ;
+      /**
+       * <pre>
+       *机库经度
+       * </pre>
+       *
+       * <code>double hangarLng = 2;</code>
+       * @return The hangarLng.
+       */
+      @java.lang.Override
+      public double getHangarLng() {
+        return hangarLng_;
+      }
+      /**
+       * <pre>
+       *机库经度
+       * </pre>
+       *
+       * <code>double hangarLng = 2;</code>
+       * @param value The hangarLng to set.
+       * @return This builder for chaining.
+       */
+      public Builder setHangarLng(double value) {
+        
+        hangarLng_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *机库经度
+       * </pre>
+       *
+       * <code>double hangarLng = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearHangarLng() {
+        
+        hangarLng_ = 0D;
+        onChanged();
+        return this;
+      }
+
+      private double hangarLat_ ;
+      /**
+       * <pre>
+       *机库纬度
+       * </pre>
+       *
+       * <code>double hangarLat = 3;</code>
+       * @return The hangarLat.
+       */
+      @java.lang.Override
+      public double getHangarLat() {
+        return hangarLat_;
+      }
+      /**
+       * <pre>
+       *机库纬度
+       * </pre>
+       *
+       * <code>double hangarLat = 3;</code>
+       * @param value The hangarLat to set.
+       * @return This builder for chaining.
+       */
+      public Builder setHangarLat(double value) {
+        
+        hangarLat_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *机库纬度
+       * </pre>
+       *
+       * <code>double hangarLat = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearHangarLat() {
+        
+        hangarLat_ = 0D;
+        onChanged();
+        return this;
+      }
+
+      private double alternateLng_ ;
+      /**
+       * <pre>
+       *备降点经度
+       * </pre>
+       *
+       * <code>double alternateLng = 4;</code>
+       * @return The alternateLng.
+       */
+      @java.lang.Override
+      public double getAlternateLng() {
+        return alternateLng_;
+      }
+      /**
+       * <pre>
+       *备降点经度
+       * </pre>
+       *
+       * <code>double alternateLng = 4;</code>
+       * @param value The alternateLng to set.
+       * @return This builder for chaining.
+       */
+      public Builder setAlternateLng(double value) {
+        
+        alternateLng_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *备降点经度
+       * </pre>
+       *
+       * <code>double alternateLng = 4;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearAlternateLng() {
+        
+        alternateLng_ = 0D;
+        onChanged();
+        return this;
+      }
+
+      private double alternateLat_ ;
+      /**
+       * <pre>
+       *备降点纬度
+       * </pre>
+       *
+       * <code>double alternateLat = 5;</code>
+       * @return The alternateLat.
+       */
+      @java.lang.Override
+      public double getAlternateLat() {
+        return alternateLat_;
+      }
+      /**
+       * <pre>
+       *备降点纬度
+       * </pre>
+       *
+       * <code>double alternateLat = 5;</code>
+       * @param value The alternateLat to set.
+       * @return This builder for chaining.
+       */
+      public Builder setAlternateLat(double value) {
+        
+        alternateLat_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *备降点纬度
+       * </pre>
+       *
+       * <code>double alternateLat = 5;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearAlternateLat() {
+        
+        alternateLat_ = 0D;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:HangarPoint)
+    }
+
+    // @@protoc_insertion_point(class_scope:HangarPoint)
+    private static final com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint();
+    }
+
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<HangarPoint>
+        PARSER = new com.google.protobuf.AbstractParser<HangarPoint>() {
+      @java.lang.Override
+      public HangarPoint parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new HangarPoint(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<HangarPoint> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<HangarPoint> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.HangarPoint getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface NormalModelOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:NormalModel)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <pre>
+     *作业区域
+     * </pre>
+     *
+     * <code>repeated .PointData area = 1;</code>
+     */
+    java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData> 
+        getAreaList();
+    /**
+     * <pre>
+     *作业区域
+     * </pre>
+     *
+     * <code>repeated .PointData area = 1;</code>
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData getArea(int index);
+    /**
+     * <pre>
+     *作业区域
+     * </pre>
+     *
+     * <code>repeated .PointData area = 1;</code>
+     */
+    int getAreaCount();
+    /**
+     * <pre>
+     *作业区域
+     * </pre>
+     *
+     * <code>repeated .PointData area = 1;</code>
+     */
+    java.util.List<? extends com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder> 
+        getAreaOrBuilderList();
+    /**
+     * <pre>
+     *作业区域
+     * </pre>
+     *
+     * <code>repeated .PointData area = 1;</code>
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder getAreaOrBuilder(
+        int index);
+
+    /**
+     * <pre>
+     *建模平台编号:1=瞰景,2=大势,默认1
+     * </pre>
+     *
+     * <code>uint32 serviceId = 2;</code>
+     * @return The serviceId.
+     */
+    int getServiceId();
+
+    /**
+     * <pre>
+     *相机编号
+     * </pre>
+     *
+     * <code>uint32 cameraId = 3;</code>
+     * @return The cameraId.
+     */
+    int getCameraId();
+
+    /**
+     * <pre>
+     *是否实时建模:0=不,1=是
+     * </pre>
+     *
+     * <code>uint32 isModeling = 4;</code>
+     * @return The isModeling.
+     */
+    int getIsModeling();
+
+    /**
+     * <pre>
+     *作业模式:1=倾斜,2=正摄
+     * </pre>
+     *
+     * <code>uint32 mode = 5;</code>
+     * @return The mode.
+     */
+    int getMode();
+
+    /**
+     * <pre>
+     *横向重叠率
+     * </pre>
+     *
+     * <code>uint32 hOverlap = 6;</code>
+     * @return The hOverlap.
+     */
+    int getHOverlap();
+
+    /**
+     * <pre>
+     *纵向重叠率
+     * </pre>
+     *
+     * <code>uint32 vOverlap = 7;</code>
+     * @return The vOverlap.
+     */
+    int getVOverlap();
+
+    /**
+     * <pre>
+     *方向正反
+     * </pre>
+     *
+     * <code>uint32 mirror = 8;</code>
+     * @return The mirror.
+     */
+    int getMirror();
+  }
+  /**
+   * <pre>
+   *普通建模
+   * </pre>
+   *
+   * Protobuf type {@code NormalModel}
+   */
+  public static final class NormalModel extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:NormalModel)
+      NormalModelOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use NormalModel.newBuilder() to construct.
+    private NormalModel(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private NormalModel() {
+      area_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new NormalModel();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private NormalModel(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                area_ = new java.util.ArrayList<com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              area_.add(
+                  input.readMessage(com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.parser(), extensionRegistry));
+              break;
+            }
+            case 16: {
+
+              serviceId_ = input.readUInt32();
+              break;
+            }
+            case 24: {
+
+              cameraId_ = input.readUInt32();
+              break;
+            }
+            case 32: {
+
+              isModeling_ = input.readUInt32();
+              break;
+            }
+            case 40: {
+
+              mode_ = input.readUInt32();
+              break;
+            }
+            case 48: {
+
+              hOverlap_ = input.readUInt32();
+              break;
+            }
+            case 56: {
+
+              vOverlap_ = input.readUInt32();
+              break;
+            }
+            case 64: {
+
+              mirror_ = input.readUInt32();
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          area_ = java.util.Collections.unmodifiableList(area_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_NormalModel_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_NormalModel_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel.class, com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel.Builder.class);
+    }
+
+    public static final int AREA_FIELD_NUMBER = 1;
+    private java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData> area_;
+    /**
+     * <pre>
+     *作业区域
+     * </pre>
+     *
+     * <code>repeated .PointData area = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData> getAreaList() {
+      return area_;
+    }
+    /**
+     * <pre>
+     *作业区域
+     * </pre>
+     *
+     * <code>repeated .PointData area = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder> 
+        getAreaOrBuilderList() {
+      return area_;
+    }
+    /**
+     * <pre>
+     *作业区域
+     * </pre>
+     *
+     * <code>repeated .PointData area = 1;</code>
+     */
+    @java.lang.Override
+    public int getAreaCount() {
+      return area_.size();
+    }
+    /**
+     * <pre>
+     *作业区域
+     * </pre>
+     *
+     * <code>repeated .PointData area = 1;</code>
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData getArea(int index) {
+      return area_.get(index);
+    }
+    /**
+     * <pre>
+     *作业区域
+     * </pre>
+     *
+     * <code>repeated .PointData area = 1;</code>
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder getAreaOrBuilder(
+        int index) {
+      return area_.get(index);
+    }
+
+    public static final int SERVICEID_FIELD_NUMBER = 2;
+    private int serviceId_;
+    /**
+     * <pre>
+     *建模平台编号:1=瞰景,2=大势,默认1
+     * </pre>
+     *
+     * <code>uint32 serviceId = 2;</code>
+     * @return The serviceId.
+     */
+    @java.lang.Override
+    public int getServiceId() {
+      return serviceId_;
+    }
+
+    public static final int CAMERAID_FIELD_NUMBER = 3;
+    private int cameraId_;
+    /**
+     * <pre>
+     *相机编号
+     * </pre>
+     *
+     * <code>uint32 cameraId = 3;</code>
+     * @return The cameraId.
+     */
+    @java.lang.Override
+    public int getCameraId() {
+      return cameraId_;
+    }
+
+    public static final int ISMODELING_FIELD_NUMBER = 4;
+    private int isModeling_;
+    /**
+     * <pre>
+     *是否实时建模:0=不,1=是
+     * </pre>
+     *
+     * <code>uint32 isModeling = 4;</code>
+     * @return The isModeling.
+     */
+    @java.lang.Override
+    public int getIsModeling() {
+      return isModeling_;
+    }
+
+    public static final int MODE_FIELD_NUMBER = 5;
+    private int mode_;
+    /**
+     * <pre>
+     *作业模式:1=倾斜,2=正摄
+     * </pre>
+     *
+     * <code>uint32 mode = 5;</code>
+     * @return The mode.
+     */
+    @java.lang.Override
+    public int getMode() {
+      return mode_;
+    }
+
+    public static final int HOVERLAP_FIELD_NUMBER = 6;
+    private int hOverlap_;
+    /**
+     * <pre>
+     *横向重叠率
+     * </pre>
+     *
+     * <code>uint32 hOverlap = 6;</code>
+     * @return The hOverlap.
+     */
+    @java.lang.Override
+    public int getHOverlap() {
+      return hOverlap_;
+    }
+
+    public static final int VOVERLAP_FIELD_NUMBER = 7;
+    private int vOverlap_;
+    /**
+     * <pre>
+     *纵向重叠率
+     * </pre>
+     *
+     * <code>uint32 vOverlap = 7;</code>
+     * @return The vOverlap.
+     */
+    @java.lang.Override
+    public int getVOverlap() {
+      return vOverlap_;
+    }
+
+    public static final int MIRROR_FIELD_NUMBER = 8;
+    private int mirror_;
+    /**
+     * <pre>
+     *方向正反
+     * </pre>
+     *
+     * <code>uint32 mirror = 8;</code>
+     * @return The mirror.
+     */
+    @java.lang.Override
+    public int getMirror() {
+      return mirror_;
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < area_.size(); i++) {
+        output.writeMessage(1, area_.get(i));
+      }
+      if (serviceId_ != 0) {
+        output.writeUInt32(2, serviceId_);
+      }
+      if (cameraId_ != 0) {
+        output.writeUInt32(3, cameraId_);
+      }
+      if (isModeling_ != 0) {
+        output.writeUInt32(4, isModeling_);
+      }
+      if (mode_ != 0) {
+        output.writeUInt32(5, mode_);
+      }
+      if (hOverlap_ != 0) {
+        output.writeUInt32(6, hOverlap_);
+      }
+      if (vOverlap_ != 0) {
+        output.writeUInt32(7, vOverlap_);
+      }
+      if (mirror_ != 0) {
+        output.writeUInt32(8, mirror_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < area_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, area_.get(i));
+      }
+      if (serviceId_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(2, serviceId_);
+      }
+      if (cameraId_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(3, cameraId_);
+      }
+      if (isModeling_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(4, isModeling_);
+      }
+      if (mode_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(5, mode_);
+      }
+      if (hOverlap_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(6, hOverlap_);
+      }
+      if (vOverlap_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(7, vOverlap_);
+      }
+      if (mirror_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(8, mirror_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel)) {
+        return super.equals(obj);
+      }
+      com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel other = (com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel) obj;
+
+      if (!getAreaList()
+          .equals(other.getAreaList())) return false;
+      if (getServiceId()
+          != other.getServiceId()) return false;
+      if (getCameraId()
+          != other.getCameraId()) return false;
+      if (getIsModeling()
+          != other.getIsModeling()) return false;
+      if (getMode()
+          != other.getMode()) return false;
+      if (getHOverlap()
+          != other.getHOverlap()) return false;
+      if (getVOverlap()
+          != other.getVOverlap()) return false;
+      if (getMirror()
+          != other.getMirror()) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getAreaCount() > 0) {
+        hash = (37 * hash) + AREA_FIELD_NUMBER;
+        hash = (53 * hash) + getAreaList().hashCode();
+      }
+      hash = (37 * hash) + SERVICEID_FIELD_NUMBER;
+      hash = (53 * hash) + getServiceId();
+      hash = (37 * hash) + CAMERAID_FIELD_NUMBER;
+      hash = (53 * hash) + getCameraId();
+      hash = (37 * hash) + ISMODELING_FIELD_NUMBER;
+      hash = (53 * hash) + getIsModeling();
+      hash = (37 * hash) + MODE_FIELD_NUMBER;
+      hash = (53 * hash) + getMode();
+      hash = (37 * hash) + HOVERLAP_FIELD_NUMBER;
+      hash = (53 * hash) + getHOverlap();
+      hash = (37 * hash) + VOVERLAP_FIELD_NUMBER;
+      hash = (53 * hash) + getVOverlap();
+      hash = (37 * hash) + MIRROR_FIELD_NUMBER;
+      hash = (53 * hash) + getMirror();
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     *普通建模
+     * </pre>
+     *
+     * Protobuf type {@code NormalModel}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:NormalModel)
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModelOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_NormalModel_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_NormalModel_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel.class, com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel.Builder.class);
+      }
+
+      // Construct using com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getAreaFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (areaBuilder_ == null) {
+          area_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          areaBuilder_.clear();
+        }
+        serviceId_ = 0;
+
+        cameraId_ = 0;
+
+        isModeling_ = 0;
+
+        mode_ = 0;
+
+        hOverlap_ = 0;
+
+        vOverlap_ = 0;
+
+        mirror_ = 0;
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_NormalModel_descriptor;
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel getDefaultInstanceForType() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel build() {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel buildPartial() {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel result = new com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel(this);
+        int from_bitField0_ = bitField0_;
+        if (areaBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            area_ = java.util.Collections.unmodifiableList(area_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.area_ = area_;
+        } else {
+          result.area_ = areaBuilder_.build();
+        }
+        result.serviceId_ = serviceId_;
+        result.cameraId_ = cameraId_;
+        result.isModeling_ = isModeling_;
+        result.mode_ = mode_;
+        result.hOverlap_ = hOverlap_;
+        result.vOverlap_ = vOverlap_;
+        result.mirror_ = mirror_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel) {
+          return mergeFrom((com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel other) {
+        if (other == com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel.getDefaultInstance()) return this;
+        if (areaBuilder_ == null) {
+          if (!other.area_.isEmpty()) {
+            if (area_.isEmpty()) {
+              area_ = other.area_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureAreaIsMutable();
+              area_.addAll(other.area_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.area_.isEmpty()) {
+            if (areaBuilder_.isEmpty()) {
+              areaBuilder_.dispose();
+              areaBuilder_ = null;
+              area_ = other.area_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              areaBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getAreaFieldBuilder() : null;
+            } else {
+              areaBuilder_.addAllMessages(other.area_);
+            }
+          }
+        }
+        if (other.getServiceId() != 0) {
+          setServiceId(other.getServiceId());
+        }
+        if (other.getCameraId() != 0) {
+          setCameraId(other.getCameraId());
+        }
+        if (other.getIsModeling() != 0) {
+          setIsModeling(other.getIsModeling());
+        }
+        if (other.getMode() != 0) {
+          setMode(other.getMode());
+        }
+        if (other.getHOverlap() != 0) {
+          setHOverlap(other.getHOverlap());
+        }
+        if (other.getVOverlap() != 0) {
+          setVOverlap(other.getVOverlap());
+        }
+        if (other.getMirror() != 0) {
+          setMirror(other.getMirror());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData> area_ =
+        java.util.Collections.emptyList();
+      private void ensureAreaIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          area_ = new java.util.ArrayList<com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData>(area_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder> areaBuilder_;
+
+      /**
+       * <pre>
+       *作业区域
+       * </pre>
+       *
+       * <code>repeated .PointData area = 1;</code>
+       */
+      public java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData> getAreaList() {
+        if (areaBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(area_);
+        } else {
+          return areaBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <pre>
+       *作业区域
+       * </pre>
+       *
+       * <code>repeated .PointData area = 1;</code>
+       */
+      public int getAreaCount() {
+        if (areaBuilder_ == null) {
+          return area_.size();
+        } else {
+          return areaBuilder_.getCount();
+        }
+      }
+      /**
+       * <pre>
+       *作业区域
+       * </pre>
+       *
+       * <code>repeated .PointData area = 1;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData getArea(int index) {
+        if (areaBuilder_ == null) {
+          return area_.get(index);
+        } else {
+          return areaBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <pre>
+       *作业区域
+       * </pre>
+       *
+       * <code>repeated .PointData area = 1;</code>
+       */
+      public Builder setArea(
+          int index, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData value) {
+        if (areaBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureAreaIsMutable();
+          area_.set(index, value);
+          onChanged();
+        } else {
+          areaBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *作业区域
+       * </pre>
+       *
+       * <code>repeated .PointData area = 1;</code>
+       */
+      public Builder setArea(
+          int index, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder builderForValue) {
+        if (areaBuilder_ == null) {
+          ensureAreaIsMutable();
+          area_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          areaBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *作业区域
+       * </pre>
+       *
+       * <code>repeated .PointData area = 1;</code>
+       */
+      public Builder addArea(com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData value) {
+        if (areaBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureAreaIsMutable();
+          area_.add(value);
+          onChanged();
+        } else {
+          areaBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *作业区域
+       * </pre>
+       *
+       * <code>repeated .PointData area = 1;</code>
+       */
+      public Builder addArea(
+          int index, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData value) {
+        if (areaBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureAreaIsMutable();
+          area_.add(index, value);
+          onChanged();
+        } else {
+          areaBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *作业区域
+       * </pre>
+       *
+       * <code>repeated .PointData area = 1;</code>
+       */
+      public Builder addArea(
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder builderForValue) {
+        if (areaBuilder_ == null) {
+          ensureAreaIsMutable();
+          area_.add(builderForValue.build());
+          onChanged();
+        } else {
+          areaBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *作业区域
+       * </pre>
+       *
+       * <code>repeated .PointData area = 1;</code>
+       */
+      public Builder addArea(
+          int index, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder builderForValue) {
+        if (areaBuilder_ == null) {
+          ensureAreaIsMutable();
+          area_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          areaBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *作业区域
+       * </pre>
+       *
+       * <code>repeated .PointData area = 1;</code>
+       */
+      public Builder addAllArea(
+          java.lang.Iterable<? extends com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData> values) {
+        if (areaBuilder_ == null) {
+          ensureAreaIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, area_);
+          onChanged();
+        } else {
+          areaBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *作业区域
+       * </pre>
+       *
+       * <code>repeated .PointData area = 1;</code>
+       */
+      public Builder clearArea() {
+        if (areaBuilder_ == null) {
+          area_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          areaBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *作业区域
+       * </pre>
+       *
+       * <code>repeated .PointData area = 1;</code>
+       */
+      public Builder removeArea(int index) {
+        if (areaBuilder_ == null) {
+          ensureAreaIsMutable();
+          area_.remove(index);
+          onChanged();
+        } else {
+          areaBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *作业区域
+       * </pre>
+       *
+       * <code>repeated .PointData area = 1;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder getAreaBuilder(
+          int index) {
+        return getAreaFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <pre>
+       *作业区域
+       * </pre>
+       *
+       * <code>repeated .PointData area = 1;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder getAreaOrBuilder(
+          int index) {
+        if (areaBuilder_ == null) {
+          return area_.get(index);  } else {
+          return areaBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <pre>
+       *作业区域
+       * </pre>
+       *
+       * <code>repeated .PointData area = 1;</code>
+       */
+      public java.util.List<? extends com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder> 
+           getAreaOrBuilderList() {
+        if (areaBuilder_ != null) {
+          return areaBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(area_);
+        }
+      }
+      /**
+       * <pre>
+       *作业区域
+       * </pre>
+       *
+       * <code>repeated .PointData area = 1;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder addAreaBuilder() {
+        return getAreaFieldBuilder().addBuilder(
+            com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.getDefaultInstance());
+      }
+      /**
+       * <pre>
+       *作业区域
+       * </pre>
+       *
+       * <code>repeated .PointData area = 1;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder addAreaBuilder(
+          int index) {
+        return getAreaFieldBuilder().addBuilder(
+            index, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.getDefaultInstance());
+      }
+      /**
+       * <pre>
+       *作业区域
+       * </pre>
+       *
+       * <code>repeated .PointData area = 1;</code>
+       */
+      public java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder> 
+           getAreaBuilderList() {
+        return getAreaFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder> 
+          getAreaFieldBuilder() {
+        if (areaBuilder_ == null) {
+          areaBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder>(
+                  area_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          area_ = null;
+        }
+        return areaBuilder_;
+      }
+
+      private int serviceId_ ;
+      /**
+       * <pre>
+       *建模平台编号:1=瞰景,2=大势,默认1
+       * </pre>
+       *
+       * <code>uint32 serviceId = 2;</code>
+       * @return The serviceId.
+       */
+      @java.lang.Override
+      public int getServiceId() {
+        return serviceId_;
+      }
+      /**
+       * <pre>
+       *建模平台编号:1=瞰景,2=大势,默认1
+       * </pre>
+       *
+       * <code>uint32 serviceId = 2;</code>
+       * @param value The serviceId to set.
+       * @return This builder for chaining.
+       */
+      public Builder setServiceId(int value) {
+        
+        serviceId_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *建模平台编号:1=瞰景,2=大势,默认1
+       * </pre>
+       *
+       * <code>uint32 serviceId = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearServiceId() {
+        
+        serviceId_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int cameraId_ ;
+      /**
+       * <pre>
+       *相机编号
+       * </pre>
+       *
+       * <code>uint32 cameraId = 3;</code>
+       * @return The cameraId.
+       */
+      @java.lang.Override
+      public int getCameraId() {
+        return cameraId_;
+      }
+      /**
+       * <pre>
+       *相机编号
+       * </pre>
+       *
+       * <code>uint32 cameraId = 3;</code>
+       * @param value The cameraId to set.
+       * @return This builder for chaining.
+       */
+      public Builder setCameraId(int value) {
+        
+        cameraId_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *相机编号
+       * </pre>
+       *
+       * <code>uint32 cameraId = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearCameraId() {
+        
+        cameraId_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int isModeling_ ;
+      /**
+       * <pre>
+       *是否实时建模:0=不,1=是
+       * </pre>
+       *
+       * <code>uint32 isModeling = 4;</code>
+       * @return The isModeling.
+       */
+      @java.lang.Override
+      public int getIsModeling() {
+        return isModeling_;
+      }
+      /**
+       * <pre>
+       *是否实时建模:0=不,1=是
+       * </pre>
+       *
+       * <code>uint32 isModeling = 4;</code>
+       * @param value The isModeling to set.
+       * @return This builder for chaining.
+       */
+      public Builder setIsModeling(int value) {
+        
+        isModeling_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *是否实时建模:0=不,1=是
+       * </pre>
+       *
+       * <code>uint32 isModeling = 4;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearIsModeling() {
+        
+        isModeling_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int mode_ ;
+      /**
+       * <pre>
+       *作业模式:1=倾斜,2=正摄
+       * </pre>
+       *
+       * <code>uint32 mode = 5;</code>
+       * @return The mode.
+       */
+      @java.lang.Override
+      public int getMode() {
+        return mode_;
+      }
+      /**
+       * <pre>
+       *作业模式:1=倾斜,2=正摄
+       * </pre>
+       *
+       * <code>uint32 mode = 5;</code>
+       * @param value The mode to set.
+       * @return This builder for chaining.
+       */
+      public Builder setMode(int value) {
+        
+        mode_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *作业模式:1=倾斜,2=正摄
+       * </pre>
+       *
+       * <code>uint32 mode = 5;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearMode() {
+        
+        mode_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int hOverlap_ ;
+      /**
+       * <pre>
+       *横向重叠率
+       * </pre>
+       *
+       * <code>uint32 hOverlap = 6;</code>
+       * @return The hOverlap.
+       */
+      @java.lang.Override
+      public int getHOverlap() {
+        return hOverlap_;
+      }
+      /**
+       * <pre>
+       *横向重叠率
+       * </pre>
+       *
+       * <code>uint32 hOverlap = 6;</code>
+       * @param value The hOverlap to set.
+       * @return This builder for chaining.
+       */
+      public Builder setHOverlap(int value) {
+        
+        hOverlap_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *横向重叠率
+       * </pre>
+       *
+       * <code>uint32 hOverlap = 6;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearHOverlap() {
+        
+        hOverlap_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int vOverlap_ ;
+      /**
+       * <pre>
+       *纵向重叠率
+       * </pre>
+       *
+       * <code>uint32 vOverlap = 7;</code>
+       * @return The vOverlap.
+       */
+      @java.lang.Override
+      public int getVOverlap() {
+        return vOverlap_;
+      }
+      /**
+       * <pre>
+       *纵向重叠率
+       * </pre>
+       *
+       * <code>uint32 vOverlap = 7;</code>
+       * @param value The vOverlap to set.
+       * @return This builder for chaining.
+       */
+      public Builder setVOverlap(int value) {
+        
+        vOverlap_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *纵向重叠率
+       * </pre>
+       *
+       * <code>uint32 vOverlap = 7;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearVOverlap() {
+        
+        vOverlap_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int mirror_ ;
+      /**
+       * <pre>
+       *方向正反
+       * </pre>
+       *
+       * <code>uint32 mirror = 8;</code>
+       * @return The mirror.
+       */
+      @java.lang.Override
+      public int getMirror() {
+        return mirror_;
+      }
+      /**
+       * <pre>
+       *方向正反
+       * </pre>
+       *
+       * <code>uint32 mirror = 8;</code>
+       * @param value The mirror to set.
+       * @return This builder for chaining.
+       */
+      public Builder setMirror(int value) {
+        
+        mirror_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *方向正反
+       * </pre>
+       *
+       * <code>uint32 mirror = 8;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearMirror() {
+        
+        mirror_ = 0;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:NormalModel)
+    }
+
+    // @@protoc_insertion_point(class_scope:NormalModel)
+    private static final com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel();
+    }
+
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<NormalModel>
+        PARSER = new com.google.protobuf.AbstractParser<NormalModel>() {
+      @java.lang.Override
+      public NormalModel parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new NormalModel(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<NormalModel> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<NormalModel> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.NormalModel getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface SurroundModelOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:SurroundModel)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <pre>
+     *作业区域
+     * </pre>
+     *
+     * <code>repeated .PointData area = 1;</code>
+     */
+    java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData> 
+        getAreaList();
+    /**
+     * <pre>
+     *作业区域
+     * </pre>
+     *
+     * <code>repeated .PointData area = 1;</code>
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData getArea(int index);
+    /**
+     * <pre>
+     *作业区域
+     * </pre>
+     *
+     * <code>repeated .PointData area = 1;</code>
+     */
+    int getAreaCount();
+    /**
+     * <pre>
+     *作业区域
+     * </pre>
+     *
+     * <code>repeated .PointData area = 1;</code>
+     */
+    java.util.List<? extends com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder> 
+        getAreaOrBuilderList();
+    /**
+     * <pre>
+     *作业区域
+     * </pre>
+     *
+     * <code>repeated .PointData area = 1;</code>
+     */
+    com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder getAreaOrBuilder(
+        int index);
+
+    /**
+     * <pre>
+     *建模平台编号:1=瞰景
+     * </pre>
+     *
+     * <code>uint32 serviceId = 2;</code>
+     * @return The serviceId.
+     */
+    int getServiceId();
+
+    /**
+     * <pre>
+     *相机编号
+     * </pre>
+     *
+     * <code>uint32 cameraId = 3;</code>
+     * @return The cameraId.
+     */
+    int getCameraId();
+
+    /**
+     * <pre>
+     *是否实时建模:0=不,1=是
+     * </pre>
+     *
+     * <code>uint32 isModeling = 4;</code>
+     * @return The isModeling.
+     */
+    int getIsModeling();
+  }
+  /**
+   * <pre>
+   *环绕建模
+   * </pre>
+   *
+   * Protobuf type {@code SurroundModel}
+   */
+  public static final class SurroundModel extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:SurroundModel)
+      SurroundModelOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use SurroundModel.newBuilder() to construct.
+    private SurroundModel(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private SurroundModel() {
+      area_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new SurroundModel();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private SurroundModel(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                area_ = new java.util.ArrayList<com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              area_.add(
+                  input.readMessage(com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.parser(), extensionRegistry));
+              break;
+            }
+            case 16: {
+
+              serviceId_ = input.readUInt32();
+              break;
+            }
+            case 24: {
+
+              cameraId_ = input.readUInt32();
+              break;
+            }
+            case 32: {
+
+              isModeling_ = input.readUInt32();
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          area_ = java.util.Collections.unmodifiableList(area_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_SurroundModel_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_SurroundModel_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel.class, com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel.Builder.class);
+    }
+
+    public static final int AREA_FIELD_NUMBER = 1;
+    private java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData> area_;
+    /**
+     * <pre>
+     *作业区域
+     * </pre>
+     *
+     * <code>repeated .PointData area = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData> getAreaList() {
+      return area_;
+    }
+    /**
+     * <pre>
+     *作业区域
+     * </pre>
+     *
+     * <code>repeated .PointData area = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder> 
+        getAreaOrBuilderList() {
+      return area_;
+    }
+    /**
+     * <pre>
+     *作业区域
+     * </pre>
+     *
+     * <code>repeated .PointData area = 1;</code>
+     */
+    @java.lang.Override
+    public int getAreaCount() {
+      return area_.size();
+    }
+    /**
+     * <pre>
+     *作业区域
+     * </pre>
+     *
+     * <code>repeated .PointData area = 1;</code>
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData getArea(int index) {
+      return area_.get(index);
+    }
+    /**
+     * <pre>
+     *作业区域
+     * </pre>
+     *
+     * <code>repeated .PointData area = 1;</code>
+     */
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder getAreaOrBuilder(
+        int index) {
+      return area_.get(index);
+    }
+
+    public static final int SERVICEID_FIELD_NUMBER = 2;
+    private int serviceId_;
+    /**
+     * <pre>
+     *建模平台编号:1=瞰景
+     * </pre>
+     *
+     * <code>uint32 serviceId = 2;</code>
+     * @return The serviceId.
+     */
+    @java.lang.Override
+    public int getServiceId() {
+      return serviceId_;
+    }
+
+    public static final int CAMERAID_FIELD_NUMBER = 3;
+    private int cameraId_;
+    /**
+     * <pre>
+     *相机编号
+     * </pre>
+     *
+     * <code>uint32 cameraId = 3;</code>
+     * @return The cameraId.
+     */
+    @java.lang.Override
+    public int getCameraId() {
+      return cameraId_;
+    }
+
+    public static final int ISMODELING_FIELD_NUMBER = 4;
+    private int isModeling_;
+    /**
+     * <pre>
+     *是否实时建模:0=不,1=是
+     * </pre>
+     *
+     * <code>uint32 isModeling = 4;</code>
+     * @return The isModeling.
+     */
+    @java.lang.Override
+    public int getIsModeling() {
+      return isModeling_;
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < area_.size(); i++) {
+        output.writeMessage(1, area_.get(i));
+      }
+      if (serviceId_ != 0) {
+        output.writeUInt32(2, serviceId_);
+      }
+      if (cameraId_ != 0) {
+        output.writeUInt32(3, cameraId_);
+      }
+      if (isModeling_ != 0) {
+        output.writeUInt32(4, isModeling_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < area_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, area_.get(i));
+      }
+      if (serviceId_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(2, serviceId_);
+      }
+      if (cameraId_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(3, cameraId_);
+      }
+      if (isModeling_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(4, isModeling_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel)) {
+        return super.equals(obj);
+      }
+      com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel other = (com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel) obj;
+
+      if (!getAreaList()
+          .equals(other.getAreaList())) return false;
+      if (getServiceId()
+          != other.getServiceId()) return false;
+      if (getCameraId()
+          != other.getCameraId()) return false;
+      if (getIsModeling()
+          != other.getIsModeling()) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getAreaCount() > 0) {
+        hash = (37 * hash) + AREA_FIELD_NUMBER;
+        hash = (53 * hash) + getAreaList().hashCode();
+      }
+      hash = (37 * hash) + SERVICEID_FIELD_NUMBER;
+      hash = (53 * hash) + getServiceId();
+      hash = (37 * hash) + CAMERAID_FIELD_NUMBER;
+      hash = (53 * hash) + getCameraId();
+      hash = (37 * hash) + ISMODELING_FIELD_NUMBER;
+      hash = (53 * hash) + getIsModeling();
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     *环绕建模
+     * </pre>
+     *
+     * Protobuf type {@code SurroundModel}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:SurroundModel)
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModelOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_SurroundModel_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_SurroundModel_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel.class, com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel.Builder.class);
+      }
+
+      // Construct using com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getAreaFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (areaBuilder_ == null) {
+          area_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          areaBuilder_.clear();
+        }
+        serviceId_ = 0;
+
+        cameraId_ = 0;
+
+        isModeling_ = 0;
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.internal_static_SurroundModel_descriptor;
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel getDefaultInstanceForType() {
+        return com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel build() {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel buildPartial() {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel result = new com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel(this);
+        int from_bitField0_ = bitField0_;
+        if (areaBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            area_ = java.util.Collections.unmodifiableList(area_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.area_ = area_;
+        } else {
+          result.area_ = areaBuilder_.build();
+        }
+        result.serviceId_ = serviceId_;
+        result.cameraId_ = cameraId_;
+        result.isModeling_ = isModeling_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel) {
+          return mergeFrom((com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel other) {
+        if (other == com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel.getDefaultInstance()) return this;
+        if (areaBuilder_ == null) {
+          if (!other.area_.isEmpty()) {
+            if (area_.isEmpty()) {
+              area_ = other.area_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureAreaIsMutable();
+              area_.addAll(other.area_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.area_.isEmpty()) {
+            if (areaBuilder_.isEmpty()) {
+              areaBuilder_.dispose();
+              areaBuilder_ = null;
+              area_ = other.area_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              areaBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getAreaFieldBuilder() : null;
+            } else {
+              areaBuilder_.addAllMessages(other.area_);
+            }
+          }
+        }
+        if (other.getServiceId() != 0) {
+          setServiceId(other.getServiceId());
+        }
+        if (other.getCameraId() != 0) {
+          setCameraId(other.getCameraId());
+        }
+        if (other.getIsModeling() != 0) {
+          setIsModeling(other.getIsModeling());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData> area_ =
+        java.util.Collections.emptyList();
+      private void ensureAreaIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          area_ = new java.util.ArrayList<com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData>(area_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder> areaBuilder_;
+
+      /**
+       * <pre>
+       *作业区域
+       * </pre>
+       *
+       * <code>repeated .PointData area = 1;</code>
+       */
+      public java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData> getAreaList() {
+        if (areaBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(area_);
+        } else {
+          return areaBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <pre>
+       *作业区域
+       * </pre>
+       *
+       * <code>repeated .PointData area = 1;</code>
+       */
+      public int getAreaCount() {
+        if (areaBuilder_ == null) {
+          return area_.size();
+        } else {
+          return areaBuilder_.getCount();
+        }
+      }
+      /**
+       * <pre>
+       *作业区域
+       * </pre>
+       *
+       * <code>repeated .PointData area = 1;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData getArea(int index) {
+        if (areaBuilder_ == null) {
+          return area_.get(index);
+        } else {
+          return areaBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <pre>
+       *作业区域
+       * </pre>
+       *
+       * <code>repeated .PointData area = 1;</code>
+       */
+      public Builder setArea(
+          int index, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData value) {
+        if (areaBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureAreaIsMutable();
+          area_.set(index, value);
+          onChanged();
+        } else {
+          areaBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *作业区域
+       * </pre>
+       *
+       * <code>repeated .PointData area = 1;</code>
+       */
+      public Builder setArea(
+          int index, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder builderForValue) {
+        if (areaBuilder_ == null) {
+          ensureAreaIsMutable();
+          area_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          areaBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *作业区域
+       * </pre>
+       *
+       * <code>repeated .PointData area = 1;</code>
+       */
+      public Builder addArea(com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData value) {
+        if (areaBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureAreaIsMutable();
+          area_.add(value);
+          onChanged();
+        } else {
+          areaBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *作业区域
+       * </pre>
+       *
+       * <code>repeated .PointData area = 1;</code>
+       */
+      public Builder addArea(
+          int index, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData value) {
+        if (areaBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureAreaIsMutable();
+          area_.add(index, value);
+          onChanged();
+        } else {
+          areaBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *作业区域
+       * </pre>
+       *
+       * <code>repeated .PointData area = 1;</code>
+       */
+      public Builder addArea(
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder builderForValue) {
+        if (areaBuilder_ == null) {
+          ensureAreaIsMutable();
+          area_.add(builderForValue.build());
+          onChanged();
+        } else {
+          areaBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *作业区域
+       * </pre>
+       *
+       * <code>repeated .PointData area = 1;</code>
+       */
+      public Builder addArea(
+          int index, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder builderForValue) {
+        if (areaBuilder_ == null) {
+          ensureAreaIsMutable();
+          area_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          areaBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *作业区域
+       * </pre>
+       *
+       * <code>repeated .PointData area = 1;</code>
+       */
+      public Builder addAllArea(
+          java.lang.Iterable<? extends com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData> values) {
+        if (areaBuilder_ == null) {
+          ensureAreaIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, area_);
+          onChanged();
+        } else {
+          areaBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *作业区域
+       * </pre>
+       *
+       * <code>repeated .PointData area = 1;</code>
+       */
+      public Builder clearArea() {
+        if (areaBuilder_ == null) {
+          area_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          areaBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *作业区域
+       * </pre>
+       *
+       * <code>repeated .PointData area = 1;</code>
+       */
+      public Builder removeArea(int index) {
+        if (areaBuilder_ == null) {
+          ensureAreaIsMutable();
+          area_.remove(index);
+          onChanged();
+        } else {
+          areaBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <pre>
+       *作业区域
+       * </pre>
+       *
+       * <code>repeated .PointData area = 1;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder getAreaBuilder(
+          int index) {
+        return getAreaFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <pre>
+       *作业区域
+       * </pre>
+       *
+       * <code>repeated .PointData area = 1;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder getAreaOrBuilder(
+          int index) {
+        if (areaBuilder_ == null) {
+          return area_.get(index);  } else {
+          return areaBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <pre>
+       *作业区域
+       * </pre>
+       *
+       * <code>repeated .PointData area = 1;</code>
+       */
+      public java.util.List<? extends com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder> 
+           getAreaOrBuilderList() {
+        if (areaBuilder_ != null) {
+          return areaBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(area_);
+        }
+      }
+      /**
+       * <pre>
+       *作业区域
+       * </pre>
+       *
+       * <code>repeated .PointData area = 1;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder addAreaBuilder() {
+        return getAreaFieldBuilder().addBuilder(
+            com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.getDefaultInstance());
+      }
+      /**
+       * <pre>
+       *作业区域
+       * </pre>
+       *
+       * <code>repeated .PointData area = 1;</code>
+       */
+      public com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder addAreaBuilder(
+          int index) {
+        return getAreaFieldBuilder().addBuilder(
+            index, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.getDefaultInstance());
+      }
+      /**
+       * <pre>
+       *作业区域
+       * </pre>
+       *
+       * <code>repeated .PointData area = 1;</code>
+       */
+      public java.util.List<com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder> 
+           getAreaBuilderList() {
+        return getAreaFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder> 
+          getAreaFieldBuilder() {
+        if (areaBuilder_ == null) {
+          areaBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointData.Builder, com.ard.tianyu.netty.protobuf.TelemetryDataPB.PointDataOrBuilder>(
+                  area_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          area_ = null;
+        }
+        return areaBuilder_;
+      }
+
+      private int serviceId_ ;
+      /**
+       * <pre>
+       *建模平台编号:1=瞰景
+       * </pre>
+       *
+       * <code>uint32 serviceId = 2;</code>
+       * @return The serviceId.
+       */
+      @java.lang.Override
+      public int getServiceId() {
+        return serviceId_;
+      }
+      /**
+       * <pre>
+       *建模平台编号:1=瞰景
+       * </pre>
+       *
+       * <code>uint32 serviceId = 2;</code>
+       * @param value The serviceId to set.
+       * @return This builder for chaining.
+       */
+      public Builder setServiceId(int value) {
+        
+        serviceId_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *建模平台编号:1=瞰景
+       * </pre>
+       *
+       * <code>uint32 serviceId = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearServiceId() {
+        
+        serviceId_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int cameraId_ ;
+      /**
+       * <pre>
+       *相机编号
+       * </pre>
+       *
+       * <code>uint32 cameraId = 3;</code>
+       * @return The cameraId.
+       */
+      @java.lang.Override
+      public int getCameraId() {
+        return cameraId_;
+      }
+      /**
+       * <pre>
+       *相机编号
+       * </pre>
+       *
+       * <code>uint32 cameraId = 3;</code>
+       * @param value The cameraId to set.
+       * @return This builder for chaining.
+       */
+      public Builder setCameraId(int value) {
+        
+        cameraId_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *相机编号
+       * </pre>
+       *
+       * <code>uint32 cameraId = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearCameraId() {
+        
+        cameraId_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int isModeling_ ;
+      /**
+       * <pre>
+       *是否实时建模:0=不,1=是
+       * </pre>
+       *
+       * <code>uint32 isModeling = 4;</code>
+       * @return The isModeling.
+       */
+      @java.lang.Override
+      public int getIsModeling() {
+        return isModeling_;
+      }
+      /**
+       * <pre>
+       *是否实时建模:0=不,1=是
+       * </pre>
+       *
+       * <code>uint32 isModeling = 4;</code>
+       * @param value The isModeling to set.
+       * @return This builder for chaining.
+       */
+      public Builder setIsModeling(int value) {
+        
+        isModeling_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       *是否实时建模:0=不,1=是
+       * </pre>
+       *
+       * <code>uint32 isModeling = 4;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearIsModeling() {
+        
+        isModeling_ = 0;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:SurroundModel)
+    }
+
+    // @@protoc_insertion_point(class_scope:SurroundModel)
+    private static final com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel();
+    }
+
+    public static com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<SurroundModel>
+        PARSER = new com.google.protobuf.AbstractParser<SurroundModel>() {
+      @java.lang.Override
+      public SurroundModel parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new SurroundModel(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<SurroundModel> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<SurroundModel> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.ard.tianyu.netty.protobuf.TelemetryDataPB.SurroundModel getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_TelemetryData_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_TelemetryData_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_TelemetryList_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_TelemetryList_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_SignalInfo_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_SignalInfo_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_SignalList_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_SignalList_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_UavState_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_UavState_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_FlightControllerState_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_FlightControllerState_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_BatteryState_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_BatteryState_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_BatteryStateInfo_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_BatteryStateInfo_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_PtzState_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_PtzState_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_CameraState_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_CameraState_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_MissionState_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_MissionState_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_AvoidanceData_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_AvoidanceData_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_HmsAlarmData_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_HmsAlarmData_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_PlanLineData_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_PlanLineData_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_PointData_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_PointData_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_PointAction_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_PointAction_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_HangarPoint_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_HangarPoint_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_NormalModel_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_NormalModel_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_SurroundModel_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_SurroundModel_fieldAccessorTable;
+
+  public static com.google.protobuf.Descriptors.FileDescriptor
+      getDescriptor() {
+    return descriptor;
+  }
+  private static  com.google.protobuf.Descriptors.FileDescriptor
+      descriptor;
+  static {
+    java.lang.String[] descriptorData = {
+      "\n\032TelemetryDataBuf-new.proto\"\336\004\n\rTelemet" +
+      "ryData\022\013\n\003lng\030\001 \001(\001\022\013\n\003lat\030\002 \001(\001\022\020\n\010alti" +
+      "tude\030\003 \001(\002\022\022\n\nultrasonic\030\004 \001(\002\022\r\n\005pitch\030" +
+      "\005 \001(\002\022\014\n\004roll\030\006 \001(\002\022\013\n\003yaw\030\007 \001(\002\022\020\n\010airs" +
+      "peed\030\010 \001(\002\022\020\n\010velocity\030\t \001(\002\022\021\n\ttimestam" +
+      "p\030\n \001(\004\022\017\n\007ptpitch\030\013 \001(\002\022\016\n\006ptroll\030\014 \001(\002" +
+      "\022\r\n\005ptyaw\030\r \001(\002\022\022\n\nzoomfactor\030\016 \001(\002\022\r\n\005b" +
+      "oxSn\030\017 \001(\t\022\024\n\014batteryPower\030\020 \001(\t\022\026\n\016sate" +
+      "lliteCount\030\021 \001(\r\022\016\n\006taskId\030\022 \001(\004\022\016\n\006rtkL" +
+      "ng\030\023 \001(\001\022\016\n\006rtkLat\030\024 \001(\001\022\017\n\007rtkHFSL\030\025 \001(" +
+      "\002\022\027\n\017rtkPositionInfo\030\026 \001(\r\022\023\n\013airFlyTime" +
+      "s\030\027 \001(\r\022\026\n\016airFlyDistance\030\030 \001(\002\022\r\n\005uavSn" +
+      "\030\031 \001(\t\022\020\n\010uavModel\030\032 \001(\t\022\021\n\thomeRange\030\033 " +
+      "\001(\002\022\022\n\nflightMode\030\034 \001(\r\022\026\n\016targetDistanc" +
+      "e\030\035 \001(\002\022\026\n\016predictFlyTime\030\036 \001(\r\022\025\n\rultra" +
+      "sonicMax\030\037 \001(\002\022\025\n\rultrasonicMin\030  \001(\002\"6\n" +
+      "\rTelemetryList\022%\n\rtelemetryList\030\001 \003(\0132\016." +
+      "TelemetryData\"\271\004\n\nSignalInfo\022\014\n\004mode\030\001 \001" +
+      "(\t\022\013\n\003mcc\030\002 \001(\t\022\013\n\003mnc\030\003 \001(\t\022\016\n\006cellid\030\004" +
+      " \001(\t\022\014\n\004pcid\030\005 \001(\t\022\013\n\003tac\030\006 \001(\t\022\r\n\005arfcn" +
+      "\030\007 \001(\t\022\014\n\004band\030\010 \001(\t\022\027\n\017nr_dl_bandwidth\030" +
+      "\t \001(\t\022\014\n\004rsrp\030\n \001(\t\022\014\n\004rsrq\030\013 \001(\t\022\014\n\004sin" +
+      "r\030\014 \001(\t\022\020\n\010tx_power\030\r \001(\t\022\016\n\006srxlev\030\016 \001(" +
+      "\t\022\013\n\003cqi\030\017 \001(\t\022\016\n\006earfcn\030\020 \001(\t\022\025\n\rfreq_b" +
+      "and_ind\030\021 \001(\t\022\024\n\014ul_bandwidth\030\022 \001(\t\022\024\n\014d" +
+      "l_bandwidth\030\023 \001(\t\022\016\n\006is_tdd\030\024 \001(\t\022\014\n\004rss" +
+      "i\030\025 \001(\t\022\023\n\013duplex_mode\030\026 \001(\t\022\013\n\003lng\030\027 \001(" +
+      "\001\022\013\n\003lat\030\030 \001(\001\022\016\n\006height\030\031 \001(\002\022\021\n\ttimest" +
+      "amp\030\032 \001(\r\022\020\n\010boxstate\030\033 \001(\r\022\013\n\003isp\030\034 \001(\t" +
+      "\022\017\n\007tempMax\030\035 \001(\r\022\020\n\010prx_rsrp\030\036 \001(\t\022\020\n\010d" +
+      "rx_rsrp\030\037 \001(\t\022\020\n\010rx2_rsrp\030  \001(\t\022\020\n\010rx3_r" +
+      "srp\030! \001(\t\022\016\n\006box_sn\030\" \001(\t\"-\n\nSignalList\022" +
+      "\037\n\nsignalInfo\030\001 \003(\0132\013.SignalInfo\"\246\002\n\010Uav" +
+      "State\0225\n\025flightControllerState\030\001 \001(\0132\026.F" +
+      "lightControllerState\022#\n\014batteryState\030\002 \001" +
+      "(\0132\r.BatteryState\022\033\n\010ptzState\030\003 \001(\0132\t.Pt" +
+      "zState\022!\n\013cameraState\030\004 \001(\0132\014.CameraStat" +
+      "e\022#\n\014missionState\030\005 \001(\0132\r.MissionState\022\r" +
+      "\n\005boxSn\030\006 \001(\t\022%\n\ravoidanceData\030\007 \001(\0132\016.A" +
+      "voidanceData\022#\n\014hmsAlarmData\030\010 \003(\0132\r.Hms" +
+      "AlarmData\"\340\002\n\025FlightControllerState\022\026\n\016s" +
+      "atelliteCount\030\001 \001(\r\022\026\n\016gpsSignalLevel\030\002 " +
+      "\001(\r\022\022\n\nflightMode\030\003 \001(\r\022\024\n\014flightStatus\030" +
+      "\004 \001(\r\022\036\n\nstartPoint\030\005 \001(\0132\n.PointData\022\035\n" +
+      "\thomePoint\030\006 \001(\0132\n.PointData\022\022\n\nhomeHeig" +
+      "ht\030\007 \001(\005\022\020\n\010safeLine\030\010 \001(\r\022\024\n\014deviceStat" +
+      "us\030\t \001(\r\022\024\n\014uwbNodeCount\030\n \001(\r\022\016\n\006rcMode" +
+      "\030\013 \001(\t\022\033\n\023isEmergencyBrakeing\030\014 \001(\r\022\026\n\016o" +
+      "utFlyAreaFlag\030\r \001(\r\022\027\n\017inNoFlyAreaFlag\030\016" +
+      " \001(\r\"\253\001\n\014BatteryState\022\022\n\nbatteryNum\030\001 \001(" +
+      "\r\022\024\n\014batteryPower\030\002 \001(\t\022\026\n\016batteryVoltag" +
+      "e\030\003 \001(\t\022+\n\020firstBatteryInfo\030\004 \001(\0132\021.Batt" +
+      "eryStateInfo\022,\n\021secondBatteryInfo\030\005 \001(\0132" +
+      "\021.BatteryStateInfo\"\271\002\n\020BatteryStateInfo\022" +
+      "\026\n\016isBatteryEmbed\030\001 \001(\r\022\036\n\026batteryCapaci" +
+      "tyPercent\030\002 \001(\r\022\026\n\016currentVoltage\030\003 \001(\005\022" +
+      "\027\n\017currentElectric\030\004 \001(\005\022\024\n\014fullCapacity" +
+      "\030\005 \001(\r\022\030\n\020remainedCapacity\030\006 \001(\r\022\032\n\022batt" +
+      "eryTemperature\030\007 \001(\002\022\021\n\tcellCount\030\010 \001(\r\022" +
+      "\023\n\013batSOHState\030\t \001(\r\022\013\n\003sop\030\n \001(\r\022\021\n\thea" +
+      "tState\030\013 \001(\r\022\020\n\010socState\030\014 \001(\r\022\026\n\016selfCh" +
+      "eckError\030\r \001(\r\"H\n\010PtzState\022\r\n\005pitch\030\001 \001(" +
+      "\002\022\014\n\004roll\030\002 \001(\002\022\013\n\003yaw\030\003 \001(\002\022\022\n\ngimbalMo" +
+      "de\030\004 \001(\r\"\220\002\n\013CameraState\022\014\n\004mode\030\001 \001(\r\022\023" +
+      "\n\013isRecording\030\002 \001(\r\022\026\n\016recordDuration\030\003 " +
+      "\001(\r\022\016\n\006source\030\004 \001(\r\022\016\n\006camera\030\005 \001(\r\022\022\n\nz" +
+      "oomfactor\030\006 \001(\002\022\r\n\005width\030\007 \001(\r\022\016\n\006height" +
+      "\030\010 \001(\r\022\021\n\tframeRate\030\t \001(\r\022\021\n\tbitstream\030\n" +
+      " \001(\r\022\033\n\023pointThermometrying\030\013 \001(\r\022\032\n\022are" +
+      "aThermometrying\030\014 \001(\r\022\024\n\014laserRanging\030\r " +
+      "\001(\r\"\277\002\n\014MissionState\022\017\n\007isPause\030\001 \001(\r\022\033\n" +
+      "\023targetWaypointIndex\030\002 \001(\r\022\032\n\022isWaypoint" +
+      "Finished\030\003 \001(\r\022\021\n\tpushVideo\030\004 \001(\r\022\016\n\006loc" +
+      "k4g\030\005 \001(\r\022\020\n\010boxModel\030\006 \001(\r\022\017\n\007mapPlay\030\007" +
+      " \001(\r\022\022\n\nloseAction\030\010 \001(\r\022\026\n\016isPointContr" +
+      "ol\030\t \001(\r\022\024\n\014isUwbLanding\030\n \001(\r\022\026\n\016isPush" +
+      "Videoing\030\013 \001(\r\022\022\n\nisDLanding\030\014 \001(\r\022\026\n\016pe" +
+      "rceptionFlag\030\r \001(\r\022\031\n\021isPositionControl\030" +
+      "\016 \001(\r\"\310\002\n\rAvoidanceData\022\022\n\ndownHealth\030\001 " +
+      "\001(\r\022\014\n\004down\030\002 \001(\002\022\023\n\013frontHealth\030\003 \001(\r\022\r" +
+      "\n\005front\030\004 \001(\002\022\023\n\013rightHealth\030\005 \001(\r\022\r\n\005ri" +
+      "ght\030\006 \001(\002\022\022\n\nbackHealth\030\007 \001(\r\022\014\n\004back\030\010 " +
+      "\001(\002\022\022\n\nleftHealth\030\t \001(\r\022\014\n\004left\030\n \001(\002\022\020\n" +
+      "\010upHealth\030\013 \001(\r\022\n\n\002up\030\014 \001(\002\022!\n\031avoidance" +
+      "EnableStatusDown\030\r \001(\r\022\037\n\027avoidanceEnabl" +
+      "eStatusUp\030\016 \001(\r\022\'\n\037avoidanceEnableStatus" +
+      "Horizontal\030\017 \001(\r\"J\n\014HmsAlarmData\022\017\n\007alar" +
+      "mId\030\001 \001(\r\022\023\n\013reportLevel\030\002 \001(\r\022\024\n\014alarmM" +
+      "ssInfo\030\003 \001(\t\"\366\002\n\014PlanLineData\022\026\n\016finishe" +
+      "dAction\030\001 \001(\r\022\020\n\010maxSpeed\030\002 \001(\002\022\021\n\tautoS" +
+      "peed\030\003 \001(\002\022\032\n\006points\030\004 \003(\0132\n.PointData\022\022" +
+      "\n\nloseAction\030\005 \001(\r\022\022\n\nhomeHeight\030\006 \001(\r\022\030" +
+      "\n\020isSaveEnergyMode\030\007 \001(\r\022\037\n\ttakePoint\030\010 " +
+      "\001(\0132\014.HangarPoint\022\037\n\tlandPoint\030\t \001(\0132\014.H" +
+      "angarPoint\022\035\n\tinterests\030\n \003(\0132\n.PointDat" +
+      "a\022!\n\013normalModel\030\013 \001(\0132\014.NormalModel\022%\n\r" +
+      "surroundModel\030\014 \001(\0132\016.SurroundModel\022 \n\014t" +
+      "akeOffPoint\030\r \001(\0132\n.PointData\"\375\001\n\tPointD" +
+      "ata\022\013\n\003lng\030\001 \001(\001\022\013\n\003lat\030\002 \001(\001\022\016\n\006height\030" +
+      "\003 \001(\002\022\r\n\005speed\030\004 \001(\002\022\035\n\007actions\030\005 \003(\0132\014." +
+      "PointAction\022\026\n\016flightPathMode\030\006 \001(\r\022\027\n\017d" +
+      "ampingDistance\030\007 \001(\002\022\026\n\016safeGohomeFlag\030\010" +
+      " \001(\r\022\023\n\013headingMode\030\t \001(\r\022\017\n\007heading\030\n \001" +
+      "(\002\022\025\n\rinterestIndex\030\013 \001(\005\022\022\n\ngroupIndex\030" +
+      "\014 \001(\r\"O\n\013PointAction\022\014\n\004type\030\001 \001(\r\022\r\n\005pa" +
+      "ram\030\002 \001(\002\022\020\n\010waitTime\030\003 \001(\005\022\021\n\tspeakInfo" +
+      "\030\004 \001(\t\"q\n\013HangarPoint\022\020\n\010hangarId\030\001 \001(\t\022" +
+      "\021\n\thangarLng\030\002 \001(\001\022\021\n\thangarLat\030\003 \001(\001\022\024\n" +
+      "\014alternateLng\030\004 \001(\001\022\024\n\014alternateLat\030\005 \001(" +
+      "\001\"\242\001\n\013NormalModel\022\030\n\004area\030\001 \003(\0132\n.PointD" +
+      "ata\022\021\n\tserviceId\030\002 \001(\r\022\020\n\010cameraId\030\003 \001(\r" +
+      "\022\022\n\nisModeling\030\004 \001(\r\022\014\n\004mode\030\005 \001(\r\022\020\n\010hO" +
+      "verlap\030\006 \001(\r\022\020\n\010vOverlap\030\007 \001(\r\022\016\n\006mirror" +
+      "\030\010 \001(\r\"b\n\rSurroundModel\022\030\n\004area\030\001 \003(\0132\n." +
+      "PointData\022\021\n\tserviceId\030\002 \001(\r\022\020\n\010cameraId" +
+      "\030\003 \001(\r\022\022\n\nisModeling\030\004 \001(\rB.\n\033com.dji.ar" +
+      "d.tianyu.protobufB\017TelemetryDataPBb\006prot" +
+      "o3"
+    };
+    descriptor = com.google.protobuf.Descriptors.FileDescriptor
+      .internalBuildGeneratedFileFrom(descriptorData,
+        new com.google.protobuf.Descriptors.FileDescriptor[] {
+        });
+    internal_static_TelemetryData_descriptor =
+      getDescriptor().getMessageTypes().get(0);
+    internal_static_TelemetryData_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_TelemetryData_descriptor,
+        new java.lang.String[] { "Lng", "Lat", "Altitude", "Ultrasonic", "Pitch", "Roll", "Yaw", "Airspeed", "Velocity", "Timestamp", "Ptpitch", "Ptroll", "Ptyaw", "Zoomfactor", "BoxSn", "BatteryPower", "SatelliteCount", "TaskId", "RtkLng", "RtkLat", "RtkHFSL", "RtkPositionInfo", "AirFlyTimes", "AirFlyDistance", "UavSn", "UavModel", "HomeRange", "FlightMode", "TargetDistance", "PredictFlyTime", "UltrasonicMax", "UltrasonicMin", });
+    internal_static_TelemetryList_descriptor =
+      getDescriptor().getMessageTypes().get(1);
+    internal_static_TelemetryList_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_TelemetryList_descriptor,
+        new java.lang.String[] { "TelemetryList", });
+    internal_static_SignalInfo_descriptor =
+      getDescriptor().getMessageTypes().get(2);
+    internal_static_SignalInfo_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_SignalInfo_descriptor,
+        new java.lang.String[] { "Mode", "Mcc", "Mnc", "Cellid", "Pcid", "Tac", "Arfcn", "Band", "NrDlBandwidth", "Rsrp", "Rsrq", "Sinr", "TxPower", "Srxlev", "Cqi", "Earfcn", "FreqBandInd", "UlBandwidth", "DlBandwidth", "IsTdd", "Rssi", "DuplexMode", "Lng", "Lat", "Height", "Timestamp", "Boxstate", "Isp", "TempMax", "PrxRsrp", "DrxRsrp", "Rx2Rsrp", "Rx3Rsrp", "BoxSn", });
+    internal_static_SignalList_descriptor =
+      getDescriptor().getMessageTypes().get(3);
+    internal_static_SignalList_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_SignalList_descriptor,
+        new java.lang.String[] { "SignalInfo", });
+    internal_static_UavState_descriptor =
+      getDescriptor().getMessageTypes().get(4);
+    internal_static_UavState_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_UavState_descriptor,
+        new java.lang.String[] { "FlightControllerState", "BatteryState", "PtzState", "CameraState", "MissionState", "BoxSn", "AvoidanceData", "HmsAlarmData", });
+    internal_static_FlightControllerState_descriptor =
+      getDescriptor().getMessageTypes().get(5);
+    internal_static_FlightControllerState_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_FlightControllerState_descriptor,
+        new java.lang.String[] { "SatelliteCount", "GpsSignalLevel", "FlightMode", "FlightStatus", "StartPoint", "HomePoint", "HomeHeight", "SafeLine", "DeviceStatus", "UwbNodeCount", "RcMode", "IsEmergencyBrakeing", "OutFlyAreaFlag", "InNoFlyAreaFlag", });
+    internal_static_BatteryState_descriptor =
+      getDescriptor().getMessageTypes().get(6);
+    internal_static_BatteryState_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_BatteryState_descriptor,
+        new java.lang.String[] { "BatteryNum", "BatteryPower", "BatteryVoltage", "FirstBatteryInfo", "SecondBatteryInfo", });
+    internal_static_BatteryStateInfo_descriptor =
+      getDescriptor().getMessageTypes().get(7);
+    internal_static_BatteryStateInfo_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_BatteryStateInfo_descriptor,
+        new java.lang.String[] { "IsBatteryEmbed", "BatteryCapacityPercent", "CurrentVoltage", "CurrentElectric", "FullCapacity", "RemainedCapacity", "BatteryTemperature", "CellCount", "BatSOHState", "Sop", "HeatState", "SocState", "SelfCheckError", });
+    internal_static_PtzState_descriptor =
+      getDescriptor().getMessageTypes().get(8);
+    internal_static_PtzState_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_PtzState_descriptor,
+        new java.lang.String[] { "Pitch", "Roll", "Yaw", "GimbalMode", });
+    internal_static_CameraState_descriptor =
+      getDescriptor().getMessageTypes().get(9);
+    internal_static_CameraState_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_CameraState_descriptor,
+        new java.lang.String[] { "Mode", "IsRecording", "RecordDuration", "Source", "Camera", "Zoomfactor", "Width", "Height", "FrameRate", "Bitstream", "PointThermometrying", "AreaThermometrying", "LaserRanging", });
+    internal_static_MissionState_descriptor =
+      getDescriptor().getMessageTypes().get(10);
+    internal_static_MissionState_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_MissionState_descriptor,
+        new java.lang.String[] { "IsPause", "TargetWaypointIndex", "IsWaypointFinished", "PushVideo", "Lock4G", "BoxModel", "MapPlay", "LoseAction", "IsPointControl", "IsUwbLanding", "IsPushVideoing", "IsDLanding", "PerceptionFlag", "IsPositionControl", });
+    internal_static_AvoidanceData_descriptor =
+      getDescriptor().getMessageTypes().get(11);
+    internal_static_AvoidanceData_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_AvoidanceData_descriptor,
+        new java.lang.String[] { "DownHealth", "Down", "FrontHealth", "Front", "RightHealth", "Right", "BackHealth", "Back", "LeftHealth", "Left", "UpHealth", "Up", "AvoidanceEnableStatusDown", "AvoidanceEnableStatusUp", "AvoidanceEnableStatusHorizontal", });
+    internal_static_HmsAlarmData_descriptor =
+      getDescriptor().getMessageTypes().get(12);
+    internal_static_HmsAlarmData_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_HmsAlarmData_descriptor,
+        new java.lang.String[] { "AlarmId", "ReportLevel", "AlarmMssInfo", });
+    internal_static_PlanLineData_descriptor =
+      getDescriptor().getMessageTypes().get(13);
+    internal_static_PlanLineData_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_PlanLineData_descriptor,
+        new java.lang.String[] { "FinishedAction", "MaxSpeed", "AutoSpeed", "Points", "LoseAction", "HomeHeight", "IsSaveEnergyMode", "TakePoint", "LandPoint", "Interests", "NormalModel", "SurroundModel", "TakeOffPoint", });
+    internal_static_PointData_descriptor =
+      getDescriptor().getMessageTypes().get(14);
+    internal_static_PointData_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_PointData_descriptor,
+        new java.lang.String[] { "Lng", "Lat", "Height", "Speed", "Actions", "FlightPathMode", "DampingDistance", "SafeGohomeFlag", "HeadingMode", "Heading", "InterestIndex", "GroupIndex", });
+    internal_static_PointAction_descriptor =
+      getDescriptor().getMessageTypes().get(15);
+    internal_static_PointAction_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_PointAction_descriptor,
+        new java.lang.String[] { "Type", "Param", "WaitTime", "SpeakInfo", });
+    internal_static_HangarPoint_descriptor =
+      getDescriptor().getMessageTypes().get(16);
+    internal_static_HangarPoint_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_HangarPoint_descriptor,
+        new java.lang.String[] { "HangarId", "HangarLng", "HangarLat", "AlternateLng", "AlternateLat", });
+    internal_static_NormalModel_descriptor =
+      getDescriptor().getMessageTypes().get(17);
+    internal_static_NormalModel_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_NormalModel_descriptor,
+        new java.lang.String[] { "Area", "ServiceId", "CameraId", "IsModeling", "Mode", "HOverlap", "VOverlap", "Mirror", });
+    internal_static_SurroundModel_descriptor =
+      getDescriptor().getMessageTypes().get(18);
+    internal_static_SurroundModel_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_SurroundModel_descriptor,
+        new java.lang.String[] { "Area", "ServiceId", "CameraId", "IsModeling", });
+  }
+
+  // @@protoc_insertion_point(outer_class_scope)
+}
diff --git a/ard-work/src/main/java/com/ard/tianyu/service/ITyService.java b/ard-work/src/main/java/com/ard/tianyu/service/ITyService.java
index 1452687..85f64d5 100644
--- a/ard-work/src/main/java/com/ard/tianyu/service/ITyService.java
+++ b/ard-work/src/main/java/com/ard/tianyu/service/ITyService.java
@@ -4,6 +4,7 @@
 import com.ard.tianyu.model.dto.BoxPhotosDTO;
 import com.ard.tianyu.model.dto.BoxSettingsDTO;
 import com.ard.tianyu.model.receiver.*;
+import com.ard.tianyu.netty.command.BaseCommand;
 import com.dtflys.forest.annotation.Var;
 
 import java.util.List;
@@ -61,4 +62,9 @@
      * 云台转动(基于角度)
      */
     void controlAngle(String boxSn);
+
+    /**
+     * 解析天宇服务端发来的消息
+     */
+    void processMessage(String key, BaseCommand tyMessage);
 }
diff --git a/ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java b/ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java
index de07206..98c5c51 100644
--- a/ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java
+++ b/ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java
@@ -6,10 +6,7 @@
 import com.ard.tianyu.model.dto.BoxPhotosDTO;
 import com.ard.tianyu.model.dto.BoxSettingsDTO;
 import com.ard.tianyu.model.receiver.*;
-import com.ard.tianyu.netty.command.BaseCommand;
-import com.ard.tianyu.netty.command.ControlAngleCommand;
-import com.ard.tianyu.netty.command.HeartbeatCommand;
-import com.ard.tianyu.netty.command.RegisterCommand;
+import com.ard.tianyu.netty.command.*;
 import com.ard.tianyu.netty.TyNettyTcpClient;
 import com.ard.tianyu.service.ITyService;
 import io.netty.buffer.ByteBuf;
@@ -22,6 +19,7 @@
 
 import javax.annotation.Resource;
 import java.net.InetSocketAddress;
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -58,8 +56,13 @@
     @Override
     public List<BoxInfoReceiver> getBoxList() {
         //请求云盒列表
-        TyHttpCommonReceiver<List<BoxInfoReceiver>> boxListReveiver = tyClient.getBoxList(tyConfiguration.getAccessToken().convertFromDTO());
-        return boxListReveiver.getContent();
+        try {
+            TyHttpCommonReceiver<List<BoxInfoReceiver>> boxListReveiver = tyClient.getBoxList(tyConfiguration.getAccessToken().convertFromDTO());
+            return boxListReveiver.getContent();
+        } catch (Exception e) {
+            log.error("获取云盒列表失败:{}", e.getMessage());
+            return new ArrayList<>();
+        }
     }
 
     /**
@@ -145,6 +148,32 @@
         this.sendMessage(tyConfiguration.getIpPort(), controlAngleCommand);
     }
 
+    @Override
+    public void processMessage(String key, BaseCommand tyCommand) {
+        byte cmdCode = tyCommand.getCmdCode();
+        switch (cmdCode) {
+            case 0x01:
+                // 处理心跳消息
+                log.info("收到心跳消息-->处理心跳消息");
+                break;
+            case 0x02:
+                // 处理注册消息
+                HeartbeatReplyCommand heartbeatReplyCommand = (HeartbeatReplyCommand) tyCommand;
+                log.info("收到心跳消息-->处理心跳消息{}", heartbeatReplyCommand.getTimestamp());
+                break;
+            case (byte) 0xA8:
+                // 处理无人机状态消息
+                log.info("收到无人机状态消息-->无人机状态消息");
+                break;
+            case (byte) 0xA9:
+                // 处理无人机遥测消息
+                log.info("收到无人机遥测消息-->无人机遥测消息");
+                break;
+            default:
+                // 处理其他消息
+        }
+    }
+
     @Scheduled(fixedRate = 5000)
     public void sendHeartBeat() {
         long timestamp = System.currentTimeMillis();

--
Gitblit v1.9.3