From db21de901bb1bbc6ec66b59e7b0766d0d2c5c6cc Mon Sep 17 00:00:00 2001
From: JLChen <551775569@qq.com>
Date: 星期二, 16 七月 2019 13:54:44 +0800
Subject: [PATCH] 20190716 1.提供声必可SDK,部分数据处理调整; 2.演示DemoAPP,地热和新风页面调整;

---
 hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLAppliances/HDLFreshAir/Parser/FreshAirParser.java       |   62 ++--
 app/src/main/res/layout/activity_geothermal.xml                                                        |    4 
 hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLDeviceManger/Parser/DeviceParser.java                   |   23 +
 app/src/main/java/com/hdl/sdk/hdl_sdk/activity/GeothermalActivity.java                                 |   71 ++++-
 hdl_core/src/main/java/com/hdl/sdk/hdl_core/Config/Configuration.java                                  |    7 
 hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLAppliances/HDLFreshAir/FreshAirBackInfo.java            |   14 
 hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLDeviceManger/Core/HDLUdpCore.java                       |    4 
 hdl_core/build.gradle                                                                                  |    6 
 hdl_core/src/main/java/com/hdl/sdk/hdl_core/Util/TransformUtil/HDLUtlis.java                           |   94 +++++++
 hdl_core/src/main/java/com/hdl/sdk/hdl_core/Util/TransformUtil/StringUtil.java                         |   46 +--
 README.md                                                                                              |    4 
 hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLDeviceManger/Core/HDLDeviceManager.java                 |  116 +++++++--
 app/src/main/java/com/hdl/sdk/hdl_sdk/activity/MainActivity.java                                       |    1 
 /dev/null                                                                                              |   39 ---
 app/src/main/java/com/hdl/sdk/hdl_sdk/activity/CtrlActivity.java                                       |    2 
 hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLDeviceManger/Core/HDLCommand.java                       |   15 
 hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLDeviceManger/EventBusEvent/EventCode.java               |   10 
 app/src/main/java/com/hdl/sdk/hdl_sdk/activity/FreshAirActivity.java                                   |   60 +++-
 hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLAppliances/HDLGeothermal/Parser/GeothermalParser.java   |  103 ++++----
 hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLDeviceManger/EventBusEvent/GeothermalFeedBackEvent.java |   26 +
 app/build.gradle                                                                                       |   11 
 21 files changed, 470 insertions(+), 248 deletions(-)

diff --git a/README.md b/README.md
index 283083e..fc98032 100644
--- a/README.md
+++ b/README.md
@@ -4,3 +4,7 @@
 
 鎻愪緵鍚戝線SDK椤圭洰
 
+##Version 1.0.2
+1.鏂板鍦扮儹妯″潡鍜屾柊椋庣郴缁熸帶鍒跺拰璇诲彇鐘舵�佹帴鍙o紱
+2.鏂板鍦扮儹妯″潡鍜屾柊椋庣郴缁熸帶鍒舵紨绀洪〉闈紱
+3.targetSdkVersion 28锛�
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 9e8dba2..7e631d3 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -1,13 +1,14 @@
 apply plugin: 'com.android.application'
 
 android {
-    compileSdkVersion 27
+    compileSdkVersion 28
+    buildToolsVersion '28.0.3'
     defaultConfig {
         applicationId "com.hdl.sdk.hdl_sdk"
         minSdkVersion 17
-        targetSdkVersion 27
+        targetSdkVersion 28
         versionCode 1
-        versionName "1.0"
+        versionName "1.0.1"
         testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
     }
     buildTypes {
@@ -16,12 +17,12 @@
             proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
         }
     }
-//    buildToolsVersion '28.0.3'
+
 }
 
 dependencies {
     implementation fileTree(include: ['*.jar'], dir: 'libs')
-    implementation 'com.android.support:appcompat-v7:27.1.1'
+    implementation 'com.android.support:appcompat-v7:28+'
     implementation 'com.android.support.constraint:constraint-layout:1.1.0'
     testImplementation 'junit:junit:4.12'
     androidTestImplementation 'com.android.support.test:runner:1.0.2'
diff --git a/app/src/main/java/com/hdl/sdk/hdl_sdk/activity/CtrlActivity.java b/app/src/main/java/com/hdl/sdk/hdl_sdk/activity/CtrlActivity.java
index 979c3fc..ba76b9f 100644
--- a/app/src/main/java/com/hdl/sdk/hdl_sdk/activity/CtrlActivity.java
+++ b/app/src/main/java/com/hdl/sdk/hdl_sdk/activity/CtrlActivity.java
@@ -62,7 +62,7 @@
         initView();
         initClickOnEvent();
 
-
+        HDLCommand.getDeviceState(appliancesInfo);
 
     }
 
diff --git a/app/src/main/java/com/hdl/sdk/hdl_sdk/activity/FreshAirActivity.java b/app/src/main/java/com/hdl/sdk/hdl_sdk/activity/FreshAirActivity.java
index 3169827..12d84e4 100644
--- a/app/src/main/java/com/hdl/sdk/hdl_sdk/activity/FreshAirActivity.java
+++ b/app/src/main/java/com/hdl/sdk/hdl_sdk/activity/FreshAirActivity.java
@@ -1,6 +1,7 @@
 package com.hdl.sdk.hdl_sdk.activity;
 
 
+import android.app.ProgressDialog;
 import android.os.Bundle;
 import android.view.View;
 import android.widget.Button;
@@ -34,6 +35,8 @@
     private int airSpeedState;
     private int ctrlId;
 
+    private ProgressDialog proDialog;
+
     /**
      * 瑕佹敞鍐屼娇鐢‥ventBus锛岃繖閲岃璁剧疆杩斿洖true
      *
@@ -61,6 +64,8 @@
     @Override
     protected void onDestroy() {
         super.onDestroy();
+        proDialog.dismiss();
+        HDLLog.I("onDestroy: FreshAirActivity");
     }
 
     private void initcurState() {
@@ -73,7 +78,10 @@
         btn_speed = findViewById(com.hdl.sdk.hdl_sdk.R.id.btn_speed);
         btn_mode = findViewById(com.hdl.sdk.hdl_sdk.R.id.btn_mode);
 
-
+        proDialog = new ProgressDialog(this);
+        proDialog.setTitle("姝e湪鍙戦�佹帶鍒跺懡浠�...");
+        proDialog.setMessage("璇疯�愬績绛夊緟");
+        proDialog.onStart();
     }
 
     private void initClickOnEvent() {
@@ -81,6 +89,7 @@
         btn_switch.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
+                proDialog.show();
                 ctrlId = FreshAirParser.freshAirSwich;
                 //婕旂ず褰撳墠鐘舵�佷负鍏筹紝璁剧疆涓哄紑銆傚紑锛岃缃负鍏炽��
                 if (airSwitchState == 0) {
@@ -97,6 +106,7 @@
         btn_speed.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
+                proDialog.show();
                 ctrlId = FreshAirParser.freshAirSpeed;
                 switch (airSpeedState) {
                     case 0:
@@ -130,6 +140,7 @@
         btn_mode.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
+                proDialog.show();
                 ctrlId = FreshAirParser.freshAirMode;
                 switch (airModeState) {
                     case 0:
@@ -142,7 +153,7 @@
                         break;
                     case 2:
                         //鑻ュ綋鍓嶆ā寮忔櫤鑳斤紝鍒欑偣鍑绘寜閽缃负瀹氭椂
-                        HDLCommand.freshAirCtrl(appliancesInfo, FreshAirParser.freshAirMode, FreshAirParser.freshAirModeAuto);
+                        HDLCommand.freshAirCtrl(appliancesInfo, FreshAirParser.freshAirMode, FreshAirParser.freshAirModeTiming);
                         break;
                     case 3:
                         //鑻ュ綋鍓嶆ā寮忓畾鏃讹紝鍒欑偣鍑绘寜閽缃负鎵嬪姩
@@ -218,13 +229,14 @@
 
     @Subscribe(threadMode = ThreadMode.MAIN)
     public void onFreshAirFeedBackEventMain(FreshAirFeedBackEvent event) {
+        proDialog.dismiss();
         if (event.getFreshAirBackInfo().getAppliancesInfo().getDeviceDeviceID() == appliancesInfo.getDeviceDeviceID()
                 && event.getFreshAirBackInfo().getAppliancesInfo().getDeviceSubnetID() == appliancesInfo.getDeviceSubnetID()
                 && event.getFreshAirBackInfo().getAppliancesInfo().getChannelNum() == appliancesInfo.getChannelNum()
         ) {
             //鍏堝垽鏂槸鍚﹁秴鏃�
             if (!event.isSuccess()) {
-                showToast("绌鸿皟鎺у埗瓒呮椂锛岃閲嶆柊鍐嶈瘯");
+                showToast("鏂伴鎺у埗瓒呮椂锛岃閲嶆柊鍐嶈瘯");
                 return;
             }
 
@@ -245,12 +257,14 @@
 
             }
 
+            //*********鏍规嵁闇�姹傛樉绀�*********
             message += "\n" + "瀹ゅ唴娓╁害锛�" + mFreshAirBackInfo.getInTemp();
             message += "\n" + "瀹ゅ娓╁害锛�" + mFreshAirBackInfo.getOutTemp();
             message += "\n" + "瀹ゅ唴婀垮害锛�" + mFreshAirBackInfo.getHumidty();
             message += "\n" + "PM2.5锛�" + mFreshAirBackInfo.getInTemp();
             message += "\n" + "TVOC锛�" + mFreshAirBackInfo.getInTemp();
             message += "\n" + "CO2锛�" + mFreshAirBackInfo.getInTemp();
+            //*********鏍规嵁闇�姹傛樉绀�*********
 
             mTextView.setText(message);
             showToast(message);
@@ -260,6 +274,7 @@
 
     @Subscribe(threadMode = ThreadMode.MAIN)
     public void onDeviceStateEventMain(DeviceStateEvent event) {
+        proDialog.dismiss();
         if (event.getAppliancesInfo().getDeviceSubnetID() == appliancesInfo.getDeviceSubnetID()
                 && event.getAppliancesInfo().getDeviceDeviceID() == appliancesInfo.getDeviceDeviceID()
         ) {
@@ -278,15 +293,20 @@
                             return;
                         }
 
-                        message += "\n" + getSwichStateString(mFreshAirBackInfo.getIsOn());
-                        message += "\n" + getSpeedStateString(mFreshAirBackInfo.getFreshAirSpeed());
-                        message += "\n" + getModeStateString(mFreshAirBackInfo.getFreshAirMode());
-                        message += "\n" + "瀹ゅ唴娓╁害锛�" + mFreshAirBackInfo.getInTemp();
-                        message += "\n" + "瀹ゅ娓╁害锛�" + mFreshAirBackInfo.getOutTemp();
-                        message += "\n" + "瀹ゅ唴婀垮害锛�" + mFreshAirBackInfo.getHumidty();
-                        message += "\n" + "PM2.5锛�" + mFreshAirBackInfo.getInTemp();
-                        message += "\n" + "TVOC锛�" + mFreshAirBackInfo.getInTemp();
-                        message += "\n" + "CO2锛�" + mFreshAirBackInfo.getInTemp();
+                        if(mFreshAirBackInfo.getIsOn() == FreshAirParser.freshAirOn) {
+                            message = getSwichStateString(mFreshAirBackInfo.getIsOn());
+                            message += "\n" + getSpeedStateString(mFreshAirBackInfo.getFreshAirSpeed());
+                            message += "\n" + getModeStateString(mFreshAirBackInfo.getFreshAirMode());
+
+                            message += "\n" + "瀹ゅ唴娓╁害锛�" + mFreshAirBackInfo.getInTemp();
+                            message += "\n" + "瀹ゅ娓╁害锛�" + mFreshAirBackInfo.getOutTemp();
+                            message += "\n" + "瀹ゅ唴婀垮害锛�" + mFreshAirBackInfo.getHumidty();
+                            message += "\n" + "PM2.5锛�" + mFreshAirBackInfo.getInTemp();
+                            message += "\n" + "TVOC锛�" + mFreshAirBackInfo.getInTemp();
+                            message += "\n" + "CO2锛�" + mFreshAirBackInfo.getInTemp();
+                        }else {
+                            message = getSwichStateString(mFreshAirBackInfo.getIsOn());
+                        }
 
                         mTextView.setText(message);
                         showToast(message);
@@ -335,16 +355,16 @@
         airSpeedState = mState; //鏇存柊褰撳墠椋庨�熺姸鎬�
         switch (mState) {
             case FreshAirParser.freshAirSpeedOff:
-                mStrState = " 椋庨�燂細鍏�";
+                mStrState = "椋庨�燂細鍏�";
                 break;
             case FreshAirParser.freshAirSpeedLow:
-                mStrState = " 椋庨�燂細浣�";
+                mStrState = "椋庨�燂細浣�";
                 break;
             case FreshAirParser.freshAirSpeedMid:
-                mStrState = " 椋庨�燂細涓�";
+                mStrState = "椋庨�燂細涓�";
                 break;
             case FreshAirParser.freshAirSpeedHigh:
-                mStrState = " 椋庨�燂細楂�";
+                mStrState = "椋庨�燂細楂�";
                 break;
 
             default:
@@ -365,16 +385,16 @@
         airModeState = mState;  //鏇存柊妯″紡鐘舵��
         switch (mState) {
             case FreshAirParser.freshAirModeManual:
-                mStrState = " 妯″紡锛氭墜鍔�";
+                mStrState = "妯″紡锛氭墜鍔�";
                 break;
             case FreshAirParser.freshAirModeAuto:
-                mStrState = " 妯″紡锛氳嚜鍔�";
+                mStrState = "妯″紡锛氳嚜鍔�";
                 break;
             case FreshAirParser.freshAirModeIntelligent:
-                mStrState = " 妯″紡锛氭櫤鑳�";
+                mStrState = "妯″紡锛氭櫤鑳�";
                 break;
             case FreshAirParser.freshAirModeTiming:
-                mStrState = " 妯″紡锛氬畾鏃�";
+                mStrState = "妯″紡锛氬畾鏃�";
                 break;
 
             default:
diff --git a/app/src/main/java/com/hdl/sdk/hdl_sdk/activity/GeothermalActivity.java b/app/src/main/java/com/hdl/sdk/hdl_sdk/activity/GeothermalActivity.java
index 7a752f0..740955b 100644
--- a/app/src/main/java/com/hdl/sdk/hdl_sdk/activity/GeothermalActivity.java
+++ b/app/src/main/java/com/hdl/sdk/hdl_sdk/activity/GeothermalActivity.java
@@ -1,6 +1,7 @@
 package com.hdl.sdk.hdl_sdk.activity;
 
 
+import android.app.ProgressDialog;
 import android.os.Bundle;
 import android.text.TextUtils;
 import android.view.View;
@@ -9,12 +10,12 @@
 import android.widget.TextView;
 
 import com.hdl.sdk.hdl_core.HDLAppliances.Config.HDLApConfig;
-import com.hdl.sdk.hdl_core.HDLAppliances.HDLFreshAir.Parser.FreshAirParser;
 import com.hdl.sdk.hdl_core.HDLAppliances.HDLGeothermal.GeothermalBackInfo;
 import com.hdl.sdk.hdl_core.HDLAppliances.HDLGeothermal.Parser.GeothermalParser;
 import com.hdl.sdk.hdl_core.HDLDeviceManger.Bean.AppliancesInfo;
 import com.hdl.sdk.hdl_core.HDLDeviceManger.Core.HDLCommand;
 import com.hdl.sdk.hdl_core.HDLDeviceManger.EventBusEvent.DeviceStateEvent;
+import com.hdl.sdk.hdl_core.HDLDeviceManger.EventBusEvent.EventCode;
 import com.hdl.sdk.hdl_core.HDLDeviceManger.EventBusEvent.GeothermalFeedBackEvent;
 import com.hdl.sdk.hdl_sdk.R;
 import com.hdl.sdk.hdl_sdk.base.BaseActivity;
@@ -37,7 +38,7 @@
     private int gModeState;
     private int gTempState;
     private int ctrlId;
-
+    private ProgressDialog proDialog;
     /**
      * 瑕佹敞鍐屼娇鐢‥ventBus锛岃繖閲岃璁剧疆杩斿洖true
      *
@@ -63,6 +64,13 @@
         HDLCommand.getDeviceState(appliancesInfo);
     }
 
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        proDialog.dismiss();
+        HDLLog.I("onDestroy: GeothermalActivity");
+    }
+
     private void initcurState() {
         appliancesInfo = (AppliancesInfo) getIntent().getSerializableExtra("hdl");
     }
@@ -74,12 +82,17 @@
         btn_temp = findViewById(R.id.btn_temp);
         tempEditText = findViewById(R.id.et_temp);
 
+        proDialog = new ProgressDialog(this);
+        proDialog.setTitle("姝e湪鍙戦�佹帶鍒跺懡浠�...");
+        proDialog.setMessage("璇疯�愬績绛夊緟");
+        proDialog.onStart();
     }
 
     private void initClickOnEvent() {
         btn_switch.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
+                proDialog.show();
                 ctrlId = GeothermalParser.gSwich;
                 //婕旂ず褰撳墠鐘舵�佷负鍏筹紝璁剧疆涓哄紑銆傚紑锛岃缃负鍏炽��
                 if (gSwitchState == 0) {
@@ -97,6 +110,7 @@
         btn_mode.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
+                proDialog.show();
                 ctrlId = GeothermalParser.gMode;
                 switch (gModeState) {
                     case 1:
@@ -146,11 +160,10 @@
                     showToast("娓╁害璁剧疆鑼冨洿涓猴細16~35鎽勬皬搴�(鈩�)");
                     return;
                 }
-
+                proDialog.show();
                 switch (gModeState) {
 
                     case 1:
-
                         //褰撳墠鍦扮儹妯″紡涓烘櫘閫�
                         HDLCommand.geothermalCtrl(appliancesInfo, GeothermalParser.gNormalTemp, tempInt);//鏅�氭俯搴�
                         ctrlId = GeothermalParser.gNormalTemp;
@@ -171,10 +184,14 @@
                         ctrlId = GeothermalParser.gLeaveTemp;
                         break;
                     case 5:
+                        proDialog.dismiss();
                         //褰撳墠鍦扮儹妯″紡涓鸿嚜鍔�
-                        showToast("鑷姩妯″紡涓嶈兘鎺у埗娓╁害");
+                        showToast("鑷姩妯″紡锛屼笉鑳芥帶鍒舵俯搴�");
                         break;
                     default:
+                        proDialog.dismiss();
+                        //褰撳墠鍦扮儹妯″紡涓鸿嚜鍔�
+                        showToast("鏈煡妯″紡锛屼笉鑳芥帶鍒舵俯搴�");
                         break;
 
                 }
@@ -191,9 +208,9 @@
             GeothermalBackInfo mGeothermalBackInfo = new GeothermalBackInfo(appliancesInfo, false);
 
             String stringState = "";
-            if (mGeothermalBackInfo.getIsOn() == 0) {
+            if (mGeothermalBackInfo.getIsOn() == GeothermalParser.gSwichOff) {
                 stringState = "鍦扮儹妯″潡锛氬叧闂�";
-            } else if (mGeothermalBackInfo.getIsOn() == 1) {
+            } else if (mGeothermalBackInfo.getIsOn() == GeothermalParser.gSwichOn) {
                 stringState = "鍦扮儹妯″潡锛氭墦寮�";
 
                 stringState += "\n" + getModeStateString(mGeothermalBackInfo.getgMode());
@@ -227,10 +244,10 @@
         String mStrState = "鏈煡";
         gSwitchState = mState; //鏇存柊寮�鍏崇姸鎬�
         switch (mState) {
-            case FreshAirParser.freshAirOn:
+            case GeothermalParser.gSwichOn:
                 mStrState = "鍦扮儹妯″潡锛氭墦寮�";
                 break;
-            case FreshAirParser.freshAirOff:
+            case GeothermalParser.gSwichOff:
                 mStrState = "鍦扮儹妯″潡锛氬叧闂�";
                 break;
 
@@ -253,19 +270,19 @@
         gModeState = mState;  //鏇存柊妯″紡鐘舵��
         switch (mState) {
             case GeothermalParser.gModeNormal:
-                mStrState = " 妯″紡锛氭櫘閫�";
+                mStrState = "妯″紡锛氭櫘閫�";
                 break;
             case GeothermalParser.gModeDay:
-                mStrState = " 妯″紡锛氱櫧澶�";
+                mStrState = "妯″紡锛氱櫧澶�";
                 break;
             case GeothermalParser.gModeNight:
-                mStrState = " 妯″紡锛氬闂�";
+                mStrState = "妯″紡锛氬闂�";
                 break;
             case GeothermalParser.gModeLeave:
-                mStrState = " 妯″紡锛氱寮�";
+                mStrState = "妯″紡锛氱寮�";
                 break;
             case GeothermalParser.gModeAuto:
-                mStrState = " 妯″紡锛氳嚜鍔�";
+                mStrState = "妯″紡锛氳嚜鍔�";
                 break;
 
             default:
@@ -277,13 +294,19 @@
 
     @Subscribe(threadMode = ThreadMode.MAIN)
     public void onGeothermalFeedBackEventMain(GeothermalFeedBackEvent event) {
+        proDialog.dismiss();
         if (event.getGeothermalBackInfo().getAppliancesInfo().getDeviceDeviceID() == appliancesInfo.getDeviceDeviceID()
                 && event.getGeothermalBackInfo().getAppliancesInfo().getDeviceSubnetID() == appliancesInfo.getDeviceSubnetID()
                 && event.getGeothermalBackInfo().getAppliancesInfo().getChannelNum() == appliancesInfo.getChannelNum()
         ) {
             //鍏堝垽鏂槸鍚﹁秴鏃�
-            if (!event.isSuccess()) {
+            if (event.getStatusID() == EventCode.FAILURE) {
                 showToast("鍦扮儹妯″潡鎺у埗瓒呮椂锛岃閲嶆柊鍐嶈瘯");
+                return;
+            }
+
+            if (event.getStatusID() == EventCode.DATAEMPTY) {
+                showToast("鍦扮儹妯″潡,杩斿洖鏁版嵁涓虹┖");
                 return;
             }
 
@@ -326,6 +349,7 @@
 
     @Subscribe(threadMode = ThreadMode.MAIN)
     public void onDeviceStateEventMain(DeviceStateEvent event) {
+        proDialog.dismiss();
         if (event.getAppliancesInfo().getDeviceSubnetID() == appliancesInfo.getDeviceSubnetID()
                 && event.getAppliancesInfo().getDeviceDeviceID() == appliancesInfo.getDeviceDeviceID()
         ) {
@@ -345,12 +369,17 @@
                             return;
                         }
 
-                        message += "\n" + getSwichStateString(mGeothermalBackInfo.getIsOn());
-                        message += "\n" + getModeStateString(mGeothermalBackInfo.getgMode());
-                        message += "\n" + "鏅�氭ā寮忔俯搴︼細" + mGeothermalBackInfo.getgNormalTemp();
-                        message += "\n" + "鐧藉ぉ妯″紡娓╁害锛�" + mGeothermalBackInfo.getgDayTemp();
-                        message += "\n" + "澶滈棿妯″紡娓╁害锛�" + mGeothermalBackInfo.getgNightTemp();
-                        message += "\n" + "绂诲紑妯″紡娓╁害锛�" + mGeothermalBackInfo.getgLeaveTemp();
+                        if(mGeothermalBackInfo.getIsOn() == GeothermalParser.gSwichOn) {
+                            message = getSwichStateString(mGeothermalBackInfo.getIsOn());
+
+                            message += "\n" + getModeStateString(mGeothermalBackInfo.getgMode());
+                            message += "\n" + "鏅�氭ā寮忔俯搴︼細" + mGeothermalBackInfo.getgNormalTemp();
+                            message += "\n" + "鐧藉ぉ妯″紡娓╁害锛�" + mGeothermalBackInfo.getgDayTemp();
+                            message += "\n" + "澶滈棿妯″紡娓╁害锛�" + mGeothermalBackInfo.getgNightTemp();
+                            message += "\n" + "绂诲紑妯″紡娓╁害锛�" + mGeothermalBackInfo.getgLeaveTemp();
+                        }else {
+                            message = getSwichStateString(mGeothermalBackInfo.getIsOn());
+                        }
 
 
                         mTextView.setText(message);
diff --git a/app/src/main/java/com/hdl/sdk/hdl_sdk/activity/MainActivity.java b/app/src/main/java/com/hdl/sdk/hdl_sdk/activity/MainActivity.java
index 29fa5ed..a1936d2 100644
--- a/app/src/main/java/com/hdl/sdk/hdl_sdk/activity/MainActivity.java
+++ b/app/src/main/java/com/hdl/sdk/hdl_sdk/activity/MainActivity.java
@@ -95,7 +95,6 @@
                 HDLCommand.getHomeDevices(MainActivity.this);
                 proDia.show();
 
-
             }
         });
 
diff --git a/app/src/main/java/com/hdl/sdk/hdl_sdk/utlis/HDLUtlis.java b/app/src/main/java/com/hdl/sdk/hdl_sdk/utlis/HDLUtlis.java
deleted file mode 100644
index 08ccee5..0000000
--- a/app/src/main/java/com/hdl/sdk/hdl_sdk/utlis/HDLUtlis.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.hdl.sdk.hdl_sdk.utlis;
-
-import android.content.Context;
-import android.os.Build;
-
-import java.math.BigDecimal;
-
-/**
- * Created by JLChen on 2019/7/4
- */
-public class HDLUtlis {
-
-    /**
-     * 灏唎bject杞负Integer绫诲瀷
-     * @param object
-     * @return
-     */
-    public static Integer getIntegerByObject(Object object){
-        Integer in = null;
-        if(object!=null){
-            if(object instanceof Integer){
-                in = (Integer)object;
-            }else if(object instanceof String){
-                in = Integer.parseInt((String)object);
-            }else if(object instanceof Double){
-                in = (int)((double)object);
-            }else if(object instanceof Float){
-                in = (int)((float)object);
-            }else if(object instanceof BigDecimal){
-                in = ((BigDecimal)object).intValue();
-            }else if(object instanceof Long){
-                in = ((Long)object).intValue();
-            }
-        }
-        return in;
-    }
-
-
-}
diff --git a/app/src/main/res/layout/activity_geothermal.xml b/app/src/main/res/layout/activity_geothermal.xml
index 8596b09..1ea914d 100644
--- a/app/src/main/res/layout/activity_geothermal.xml
+++ b/app/src/main/res/layout/activity_geothermal.xml
@@ -26,7 +26,9 @@
         <LinearLayout
             android:orientation="horizontal"
             android:layout_width="match_parent"
-            android:layout_height="50dp">
+            android:layout_height="50dp"
+            android:focusable="true"
+            android:focusableInTouchMode="true">
             <Button
                 android:id="@+id/btn_temp"
                 android:layout_width="wrap_content"
diff --git a/hdl_core/build.gradle b/hdl_core/build.gradle
index 8601e16..fb4b6ab 100644
--- a/hdl_core/build.gradle
+++ b/hdl_core/build.gradle
@@ -2,10 +2,10 @@
 //apply plugin: 'com.novoda.bintray-release'
 
 android {
-    compileSdkVersion 27
+    compileSdkVersion 28
     defaultConfig {
         minSdkVersion 17
-        targetSdkVersion 27
+        targetSdkVersion 28
         versionCode 1
         versionName "1.0.2"
 
@@ -28,7 +28,7 @@
 
 dependencies {
     implementation fileTree(include: ['*.jar'], dir: 'libs')
-    implementation 'com.android.support:appcompat-v7:27.1.1'
+    implementation 'com.android.support:appcompat-v7:28+'
     api 'org.greenrobot:eventbus:3.0.0'
     testImplementation 'junit:junit:4.12'
     androidTestImplementation 'com.android.support.test:runner:1.0.2'
diff --git a/hdl_core/src/main/java/com/hdl/sdk/hdl_core/Config/Configuration.java b/hdl_core/src/main/java/com/hdl/sdk/hdl_core/Config/Configuration.java
index d595e8b..6a84fd1 100644
--- a/hdl_core/src/main/java/com/hdl/sdk/hdl_core/Config/Configuration.java
+++ b/hdl_core/src/main/java/com/hdl/sdk/hdl_core/Config/Configuration.java
@@ -22,6 +22,11 @@
      */
     public static final int FRESH_AIR_BIG_TYPE = 19;
 
+    //鏀寔鐨勫皬绫�
+    public static final int FRESH_AIR_LITTLE_TYPE_0 = 0;
+    public static final int GEOTHERMAL_LITTLE_TYPE_0 = 0;
+
+
     //灏忕被 鍏堜笉鍋氬垎绫�
 //    public static final int AIR_LITTLE_TYPE = 0;
 
@@ -147,8 +152,6 @@
     /**
      * RCU 閰嶇疆鏁版嵁
      */
-
-
     //鍥哄畾RCU鍙戦�佺鍙�
     public static final int RCU_SEND_PORT = 6006;
     //鍥哄畾RCU鎺ユ敹绔彛
diff --git a/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLAppliances/HDLFreshAir/FreshAirBackInfo.java b/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLAppliances/HDLFreshAir/FreshAirBackInfo.java
index a4fdca6..6e986f5 100644
--- a/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLAppliances/HDLFreshAir/FreshAirBackInfo.java
+++ b/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLAppliances/HDLFreshAir/FreshAirBackInfo.java
@@ -1,7 +1,7 @@
 package com.hdl.sdk.hdl_core.HDLAppliances.HDLFreshAir;
 
 import com.hdl.sdk.hdl_core.HDLDeviceManger.Bean.AppliancesInfo;
-import com.hdl.sdk.hdl_core.Util.TransformUtil.StringUtil;
+import com.hdl.sdk.hdl_core.Util.TransformUtil.HDLUtlis;
 
 import java.io.Serializable;
 
@@ -47,12 +47,12 @@
             this.freshAirMode = this.curState[3] & 0xFF;
             this.enableValue1 = this.curState[4] & 0xFF;
             this.enableValue2 = this.curState[5] & 0xFF;
-            this.mInTemp = StringUtil.byteToFloat(this.curState[6], this.curState[7], this.curState[8], this.curState[9]);
-            this.mOutTemp = StringUtil.byteToFloat(this.curState[10], this.curState[11], this.curState[12], this.curState[13]);
-            this.mHumidty = StringUtil.byteToFloat(this.curState[14], this.curState[15], this.curState[16], this.curState[17]);
-            this.mPM25 = StringUtil.byteToFloat(this.curState[18], this.curState[19], this.curState[20], this.curState[21]);
-            this.mTVOC = StringUtil.byteToFloat(this.curState[22], this.curState[23], this.curState[24], this.curState[25]);
-            this.mCO2 = StringUtil.byteToFloat(this.curState[26], this.curState[27], this.curState[28], this.curState[29]);
+            this.mInTemp = HDLUtlis.byteToFloat(this.curState[6], this.curState[7], this.curState[8], this.curState[9]);
+            this.mOutTemp = HDLUtlis.byteToFloat(this.curState[10], this.curState[11], this.curState[12], this.curState[13]);
+            this.mHumidty = HDLUtlis.byteToFloat(this.curState[14], this.curState[15], this.curState[16], this.curState[17]);
+            this.mPM25 = HDLUtlis.byteToFloat(this.curState[18], this.curState[19], this.curState[20], this.curState[21]);
+            this.mTVOC = HDLUtlis.byteToFloat(this.curState[22], this.curState[23], this.curState[24], this.curState[25]);
+            this.mCO2 = HDLUtlis.byteToFloat(this.curState[26], this.curState[27], this.curState[28], this.curState[29]);
         }
 
     }
diff --git a/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLAppliances/HDLFreshAir/Parser/FreshAirParser.java b/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLAppliances/HDLFreshAir/Parser/FreshAirParser.java
index 4c9b432..88e7b29 100644
--- a/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLAppliances/HDLFreshAir/Parser/FreshAirParser.java
+++ b/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLAppliances/HDLFreshAir/Parser/FreshAirParser.java
@@ -33,37 +33,43 @@
             return new byte[]{fail};
         }
 
-        AppliancesInfo newInfo = null;
-        byte[] freshAirBytes = null;
+        try {
+            AppliancesInfo newInfo = null;
+            byte[] freshAirBytes = null;
 
-        outter:
-        for (int i = 0; i < HDLDeviceManager.devicesDataList.size(); i++) {
-            if (appliancesInfo.getDeviceSubnetID() == HDLDeviceManager.devicesDataList.get(i).getSourceSubnetID()
-                    && appliancesInfo.getDeviceDeviceID() == HDLDeviceManager.devicesDataList.get(i).getSourceDeviceID()) {
-                for (int j = 0; j < HDLDeviceManager.devicesDataList.get(i).getAppliancesInfoList().size(); j++) {
-                    if (HDLDeviceManager.devicesDataList.get(i).getAppliancesInfoList().get(j).getBigType() == Configuration.AIR_BIG_TYPE
-                            && HDLDeviceManager.devicesDataList.get(i).getAppliancesInfoList().get(j).getDeviceType() != HDLApConfig.TYPE_AC_PANEL
-                            && appliancesInfo.getChannelNum() == HDLDeviceManager.devicesDataList.get(i).getAppliancesInfoList().get(j).getChannelNum()) {
-                        newInfo = HDLDeviceManager.devicesDataList.get(i).getAppliancesInfoList().get(j);
-                        if (newInfo.getFeedbackState() == null) {
-                            newInfo.setFeedbackState(new byte[30]);
+            outter:
+            for (int i = 0; i < HDLDeviceManager.devicesDataList.size(); i++) {
+                if (appliancesInfo.getDeviceSubnetID() == HDLDeviceManager.devicesDataList.get(i).getSourceSubnetID()
+                        && appliancesInfo.getDeviceDeviceID() == HDLDeviceManager.devicesDataList.get(i).getSourceDeviceID()) {
+                    for (int j = 0; j < HDLDeviceManager.devicesDataList.get(i).getAppliancesInfoList().size(); j++) {
+                        if (HDLDeviceManager.devicesDataList.get(i).getAppliancesInfoList().get(j).getBigType() == Configuration.FRESH_AIR_BIG_TYPE
+                                && HDLDeviceManager.devicesDataList.get(i).getAppliancesInfoList().get(j).getDeviceType() == HDLApConfig.TYPE_FRESH_AIR
+                                && appliancesInfo.getChannelNum() == HDLDeviceManager.devicesDataList.get(i).getAppliancesInfoList().get(j).getChannelNum()) {
+                            newInfo = HDLDeviceManager.devicesDataList.get(i).getAppliancesInfoList().get(j);
+                            if (newInfo.getFeedbackState() == null) {
+                                newInfo.setFeedbackState(new byte[30]);
+                            }
+                            freshAirBytes = newInfo.getFeedbackState();
+                            break outter;
                         }
-                        break outter;
-                    }
 
+                    }
                 }
             }
-        }
 
-
-        freshAirBytes = newInfo.getFeedbackState();
-
-        if (freshAirBytes != null && freshAirBytes.length >= 4) {
             byte[] addBytes = new byte[4];
-            addBytes[0] = (byte) appliancesInfo.getChannelNum();
-            addBytes[1] = freshAirBytes[1];
-            addBytes[2] = freshAirBytes[2];
-            addBytes[3] = freshAirBytes[3];
+            if (freshAirBytes != null && freshAirBytes.length >= 4) {
+                addBytes[0] = (byte) appliancesInfo.getChannelNum();
+                addBytes[1] = freshAirBytes[1];
+                addBytes[2] = freshAirBytes[2];
+                addBytes[3] = freshAirBytes[3];
+
+            } else {
+                addBytes[0] = (byte) appliancesInfo.getChannelNum();
+                addBytes[1] = 0;//鍙戦�侀粯璁ゅ弬鏁�
+                addBytes[2] = 0;
+                addBytes[3] = 0;
+            }
 
             switch (type) {
                 case freshAirSwich:
@@ -74,16 +80,18 @@
                     }
                     break;
                 case freshAirSpeed:
+                    addBytes[1] = 1;//鎵撳紑鎿嶄綔
                     addBytes[2] = (byte) state;
-
                     break;
                 case freshAirMode:
+                    addBytes[1] = 1;//鎵撳紑鎿嶄綔
                     addBytes[3] = (byte) state;
                     break;
             }
             return addBytes;
-        } else {
-            return null;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new byte[]{fail};
         }
 
     }
diff --git a/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLAppliances/HDLGeothermal/Parser/GeothermalParser.java b/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLAppliances/HDLGeothermal/Parser/GeothermalParser.java
index 870ec37..f099917 100644
--- a/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLAppliances/HDLGeothermal/Parser/GeothermalParser.java
+++ b/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLAppliances/HDLGeothermal/Parser/GeothermalParser.java
@@ -18,56 +18,66 @@
 
 
     public static final int gMode = 4;      //妯″紡
-    public static final int gModeNormal = 0;//鏅�氭ā寮�
-    public static final int gModeDay = 1;//鐧藉ぉ妯″紡
-    public static final int gModeNight = 2;//澶滈棿妯″紡
-    public static final int gModeLeave = 3;//绂诲紑妯″紡
-    public static final int gModeAuto = 4;//鑷姩妯″紡
+    public static final int gModeNormal = 1;//鏅�氭ā寮�
+    public static final int gModeDay = 2;//鐧藉ぉ妯″紡
+    public static final int gModeNight = 3;//澶滈棿妯″紡
+    public static final int gModeLeave = 4;//绂诲紑妯″紡
+    public static final int gModeAuto = 5;//鑷姩妯″紡
 
     public static final int gNormalTemp = 5;//鏅�氭ā寮忔俯搴�
     public static final int gDayTemp = 6;//鐧藉ぉ妯″紡娓╁害
     public static final int gNightTemp = 7;//澶滈棿妯″紡娓╁害
     public static final int gLeaveTemp = 8;//绂诲紑妯″紡娓╁害
 
-//    [鍥炶矾锛屽紑鍏崇姸鎬侊紝娓╁害绫诲瀷锛屾ā寮忥紝鏅�氭俯搴︼紝鐧藉ぉ娓╁害锛屽闂存俯搴︼紝绂诲紑娓╁害锛岃嚜鍔ㄦ俯搴︼紝褰撳墠娓╁害]
+    //    feedbackState [鍥炶矾锛屽紑鍏崇姸鎬侊紝娓╁害绫诲瀷锛屾ā寮忥紝鏅�氭俯搴︼紝鐧藉ぉ娓╁害锛屽闂存俯搴︼紝绂诲紑娓╁害锛岃嚜鍔ㄦ俯搴︼紝褰撳墠娓╁害]
     public static byte[] getGeothermalAddByte(AppliancesInfo appliancesInfo, int type, int state) {
-        AppliancesInfo newInfo = null;
-        byte[] airBytes = null;
-        outter:
-        for (int i = 0; i < HDLDeviceManager.devicesDataList.size(); i++) {
-            if (appliancesInfo.getDeviceSubnetID() == HDLDeviceManager.devicesDataList.get(i).getSourceSubnetID()
-                    && appliancesInfo.getDeviceDeviceID() == HDLDeviceManager.devicesDataList.get(i).getSourceDeviceID()) {
-                for (int j = 0; j < HDLDeviceManager.devicesDataList.get(i).getAppliancesInfoList().size(); j++) {
-                    if (HDLDeviceManager.devicesDataList.get(i).getAppliancesInfoList().get(j).getBigType() == Configuration.AIR_BIG_TYPE
-                            && HDLDeviceManager.devicesDataList.get(i).getAppliancesInfoList().get(j).getDeviceType() != HDLApConfig.TYPE_AC_PANEL
-                            && appliancesInfo.getChannelNum() == HDLDeviceManager.devicesDataList.get(i).getAppliancesInfoList().get(j).getChannelNum()) {
-                        newInfo = HDLDeviceManager.devicesDataList.get(i).getAppliancesInfoList().get(j);
-                        if (newInfo.getFeedbackState() == null) {
-                            newInfo.setFeedbackState(new byte[10]);
+        try {
+            AppliancesInfo newInfo = null;
+            byte[] airBytes = null;
+            outter:
+            for (int i = 0; i < HDLDeviceManager.devicesDataList.size(); i++) {
+                if (appliancesInfo.getDeviceSubnetID() == HDLDeviceManager.devicesDataList.get(i).getSourceSubnetID()
+                        && appliancesInfo.getDeviceDeviceID() == HDLDeviceManager.devicesDataList.get(i).getSourceDeviceID()) {
+                    for (int j = 0; j < HDLDeviceManager.devicesDataList.get(i).getAppliancesInfoList().size(); j++) {
+                        if (HDLDeviceManager.devicesDataList.get(i).getAppliancesInfoList().get(j).getBigType() == Configuration.GEOTHERMAL_BIG_TYPE
+                                && HDLDeviceManager.devicesDataList.get(i).getAppliancesInfoList().get(j).getDeviceType() == HDLApConfig.TYPE_GEOTHERMAL_MODULE
+                                && appliancesInfo.getChannelNum() == HDLDeviceManager.devicesDataList.get(i).getAppliancesInfoList().get(j).getChannelNum()) {
+                            newInfo = HDLDeviceManager.devicesDataList.get(i).getAppliancesInfoList().get(j);
+                            if (newInfo.getFeedbackState() == null) {
+                                newInfo.setFeedbackState(new byte[10]);
+                            }
+                            airBytes = newInfo.getFeedbackState();
+                            break outter;
                         }
-                        break outter;
-                    }
 
+                    }
                 }
             }
-        }
 
-        airBytes =  newInfo.getFeedbackState();
-
-        if (airBytes != null && airBytes.length >= 10) {
             byte[] addBytes = new byte[10];
-            addBytes[0] = (byte) newInfo.getChannelNum();
-            addBytes[1] = airBytes[1];
-            addBytes[2] = 0;
-            addBytes[3] = airBytes[3];
-            addBytes[4] = airBytes[4];
-            addBytes[5] = airBytes[5];
-            addBytes[6] = airBytes[6];
-            addBytes[7] = airBytes[7];
-            addBytes[8] = airBytes[8];
-            addBytes[9] = 0;
-            addBytes[10] = 0;
-
+            if (airBytes != null && airBytes.length >= 10) {
+                addBytes[0] = (byte) newInfo.getChannelNum();
+                addBytes[1] = airBytes[1];
+                addBytes[2] = 0;
+                addBytes[3] = airBytes[3];
+                addBytes[4] = airBytes[4];
+                addBytes[5] = airBytes[5];
+                addBytes[6] = airBytes[6];
+                addBytes[7] = airBytes[7];
+                addBytes[8] = 0;
+                addBytes[9] = 0;
+            } else {
+                addBytes[0] = (byte) newInfo.getChannelNum();
+                addBytes[1] = 0;
+                addBytes[2] = 0;
+                addBytes[3] = 1;
+                addBytes[4] = 30;
+                addBytes[5] = 30;
+                addBytes[6] = 30;
+                addBytes[7] = 30;
+                addBytes[8] = 0;
+                addBytes[9] = 0;
+            }
 
             switch (type) {
                 case gSwich:
@@ -79,7 +89,7 @@
                     break;
                 case gMode:
                     addBytes[1] = 1;
-                    addBytes[3] =  (byte) state;
+                    addBytes[3] = (byte) state;
                     break;
                 case gNormalTemp:
                     addBytes[1] = 1;//鎵撳紑
@@ -99,21 +109,14 @@
                     break;
             }
             return addBytes;
-        } else {
-            return null;
+
+
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new byte[]{fail};
         }
 
     }
-
-
-
-
-
-
-
-
-
-
 
 
 }
diff --git a/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLDeviceManger/Core/HDLCommand.java b/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLDeviceManger/Core/HDLCommand.java
index 0b6f7b8..6324e04 100644
--- a/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLDeviceManger/Core/HDLCommand.java
+++ b/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLDeviceManger/Core/HDLCommand.java
@@ -21,12 +21,14 @@
 import com.hdl.sdk.hdl_core.HDLDeviceManger.EventBusEvent.AirFeedBackEvent;
 import com.hdl.sdk.hdl_core.HDLDeviceManger.EventBusEvent.CurtainFeedBackEvent;
 import com.hdl.sdk.hdl_core.HDLDeviceManger.EventBusEvent.DeviceStateEvent;
+import com.hdl.sdk.hdl_core.HDLDeviceManger.EventBusEvent.EventCode;
 import com.hdl.sdk.hdl_core.HDLDeviceManger.EventBusEvent.FreshAirFeedBackEvent;
 import com.hdl.sdk.hdl_core.HDLDeviceManger.EventBusEvent.GeothermalFeedBackEvent;
 import com.hdl.sdk.hdl_core.HDLDeviceManger.EventBusEvent.LightFeedBackEvent;
 import com.hdl.sdk.hdl_core.HDLDeviceManger.EventBusEvent.LogicFeedBackEvent;
 import com.hdl.sdk.hdl_core.Util.LogUtil.HDLLog;
 import com.hdl.sdk.hdl_core.Util.SPUtil.SPUtils;
+import com.hdl.sdk.hdl_core.Util.TransformUtil.HDLUtlis;
 
 import org.greenrobot.eventbus.EventBus;
 
@@ -399,7 +401,7 @@
                     if (!HDLDeviceManager.isGeothermalCtrlSuccess) {
                         GeothermalBackInfo mGeothermalBackInfo = new GeothermalBackInfo();
                         mGeothermalBackInfo.setAppliancesInfo(info);
-                        EventBus.getDefault().post(new GeothermalFeedBackEvent(mGeothermalBackInfo, false));
+                        EventBus.getDefault().post(new GeothermalFeedBackEvent(mGeothermalBackInfo, EventCode.FAILURE));
                     }
                 }
             }, 5000);
@@ -640,7 +642,9 @@
                             && info.getLittleType() == infos.get(j).getLittleType()
                             && info.getChannelNum() == infos.get(j).getChannelNum()
                     ) {
-                        curState = (int) infos.get(j).getCurState();
+//                        curState = (int) infos.get(j).getCurState();//鏃�
+                        //20190712瑙e喅寮哄埗杞崲int绫诲瀷闂��
+                        curState = HDLUtlis.getIntegerByObject(infos.get(j).getCurState());
                         break outter;
                     }
 
@@ -670,7 +674,9 @@
                             && info.getChannelNum() == infos.get(j).getChannelNum()
                     ) {
                         //杩欓噷搴旇鏄淇鐨勶紝鏆傛椂鏈壘鍒般��
-                        switch ((int) infos.get(j).getCurState()) {
+                         //20190712瑙e喅寮哄埗杞崲int绫诲瀷闂��
+                        int  state = HDLUtlis.getIntegerByObject(infos.get(j).getCurState());
+                        switch (state) {
                             case -1:
                                 curState = 0;
                                 break;
@@ -681,7 +687,8 @@
                                 curState = 2;
                                 break;
                             default:
-                                curState = (int) infos.get(j).getCurState();
+//                                curState = (int) infos.get(j).getCurState();
+                                curState = state;
                                 break;
 
                         }
diff --git a/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLDeviceManger/Core/HDLDeviceManager.java b/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLDeviceManger/Core/HDLDeviceManager.java
index 2e581fe..721b46f 100644
--- a/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLDeviceManger/Core/HDLDeviceManager.java
+++ b/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLDeviceManger/Core/HDLDeviceManager.java
@@ -27,6 +27,7 @@
 import com.hdl.sdk.hdl_core.HDLDeviceManger.EventBusEvent.AirFeedBackEvent;
 import com.hdl.sdk.hdl_core.HDLDeviceManger.EventBusEvent.CurtainFeedBackEvent;
 import com.hdl.sdk.hdl_core.HDLDeviceManger.EventBusEvent.DeviceStateEvent;
+import com.hdl.sdk.hdl_core.HDLDeviceManger.EventBusEvent.EventCode;
 import com.hdl.sdk.hdl_core.HDLDeviceManger.EventBusEvent.FreshAirFeedBackEvent;
 import com.hdl.sdk.hdl_core.HDLDeviceManger.EventBusEvent.GeothermalFeedBackEvent;
 import com.hdl.sdk.hdl_core.HDLDeviceManger.EventBusEvent.LightFeedBackEvent;
@@ -169,8 +170,11 @@
             case Configuration.CURTAIN_STATE_BACK_COMMAND:
             case Configuration.AIR_STATE_BACK_COMMAND:
             case Configuration.SENSOR_STATE_BACK_COMMAND:
-            case Configuration.FRESH_AIR_STATE_BACK_COMMAND://20190709鏂板
                 handleStateData(getDatas);
+                break;
+            //鑾峰彇鏂伴璁惧鐘舵�� 20190709鏂板
+            case Configuration.FRESH_AIR_STATE_BACK_COMMAND:
+                handleFreshAirStateData(getDatas);
                 break;
             //鑾峰彇鍦扮儹璁惧鐘舵��
             case Configuration.GEOTHERMAL_MODULE_STATE_BACK_COMMAND:
@@ -1040,26 +1044,32 @@
 
                         List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
                         for (int j = 0, len2 = infos.size(); j < len2; j++) {
-                            if (infos.get(j).getChannelNum() == (getDatas.addBytes[0] & 0xFF)) {
-                                if(getDatas.addBytes.length >= 8){
-                                    byte[] getBytes =  devicesDataList.get(i).getAppliancesInfoList().get(j).getFeedbackState();
-                                    if(getBytes.length < 10){
-                                        getBytes = new byte[10];
+                            if(getDatas.addBytes.length > 0) {
+                                if (infos.get(j).getChannelNum() == (getDatas.addBytes[0] & 0xFF)) {
+                                    if (getDatas.addBytes.length >= 8) {
+                                        byte[] getBytes = devicesDataList.get(i).getAppliancesInfoList().get(j).getFeedbackState();
+                                        if (getBytes == null || getBytes.length < 10) {
+                                            getBytes = new byte[10];
+                                        }
+                                        System.arraycopy(getDatas.addBytes, 0, getBytes, 0, 8);//鎺у埗鍦扮儹鐘舵�佸弽棣堬紝鍙彇鍓�8浣嶆暟鎹�
+                                        devicesDataList.get(i).getAppliancesInfoList().get(j).setFeedbackState(getBytes);
+                                        AppliancesInfo mInfo = devicesDataList.get(i).getAppliancesInfoList().get(j);
+
+                                        GeothermalBackInfo info = new GeothermalBackInfo(mInfo, true);
+                                        isGeothermalCtrlSuccess = true;
+                                        EventBus.getDefault().post(new GeothermalFeedBackEvent(info, EventCode.SUCCESS));
+                                    } else {
+
+//                                        AppliancesInfo mInfo = devicesDataList.get(i).getAppliancesInfoList().get(j);
+//                                        GeothermalBackInfo info = new GeothermalBackInfo(mInfo, true);
+//                                        isGeothermalCtrlSuccess = true;
+//                                        EventBus.getDefault().post(new GeothermalFeedBackEvent(info, EventCode.DATAEMPTY));
+
+                                        HDLLog.E("鎺у埗鍦扮儹鐘舵�佸弽棣堟暟鎹紓甯�");
                                     }
-                                    System.arraycopy(getDatas.addBytes, 0, getBytes, 0, 8);//鎺у埗鍦扮儹鐘舵�佸弽棣堬紝鍙彇鍓�8浣嶆暟鎹�
-                                    devicesDataList.get(i).getAppliancesInfoList().get(j).setFeedbackState(getBytes);
-                                    AppliancesInfo mInfo = devicesDataList.get(i).getAppliancesInfoList().get(j);
-
-                                    GeothermalBackInfo info = new GeothermalBackInfo(mInfo , true);
-                                    isGeothermalCtrlSuccess = true;
-                                    EventBus.getDefault().post(new GeothermalFeedBackEvent(info, true));
-                                }else{
-                                    HDLLog.E("鎺у埗鍦扮儹鐘舵�佸弽棣堟暟鎹紓甯�");
+                                    break outter;
                                 }
-
-                                break outter;
                             }
-
                         }
                     }
                 }
@@ -1844,6 +1854,28 @@
                                 devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).setCurState(curState);
                                 devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).setIntCurState((int) curState);
                                 break;
+                            case Configuration.FRESH_AIR_BIG_TYPE://20190711鏂板
+                                switch (infos.get(appPos).getLittleType()) {
+                                    case Configuration.FRESH_AIR_LITTLE_TYPE_0:
+                                        byte[] hvacBytes = new byte[getDatas.addBytes.length - 23];
+                                        for (int i = 23; i < getDatas.addBytes.length; i++) {
+                                            hvacBytes[i - 23] = getDatas.addBytes[i];
+                                        }
+                                        devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).setFeedbackState(hvacBytes);
+                                        break;
+                                }
+                                break;
+                            case Configuration.GEOTHERMAL_BIG_TYPE://20190711鏂板
+                                switch (infos.get(appPos).getLittleType()) {
+                                    case Configuration.GEOTHERMAL_LITTLE_TYPE_0:
+                                        byte[] hvacBytes = new byte[getDatas.addBytes.length - 23];
+                                        for (int i = 23; i < getDatas.addBytes.length; i++) {
+                                            hvacBytes[i - 23] = getDatas.addBytes[i];
+                                        }
+                                        devicesDataList.get(devPos).getAppliancesInfoList().get(appPos).setFeedbackState(hvacBytes);
+                                        break;
+                                }
+                                break;
                             default:
                                 HDLLog.info("鏈壘鍒版绫诲瀷璁惧锛�" + infos.get(appPos).getBigType());
                                 break;
@@ -1910,6 +1942,7 @@
             ) {
                 List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
                 for (int j = 0, len2 = infos.size(); j < len2; j++) {
+                    HDLLog.info("HDL big:锛�"+devicesDataList.get(i).getAppliancesInfoList().get(j).getBigType());
                     switch (devicesDataList.get(i).getAppliancesInfoList().get(j).getBigType()) {
                         case Configuration.LIGTH_BIG_TYPE:
                             isGetDeviceStateSuccess = true;
@@ -2157,23 +2190,48 @@
                             HDLLog.info("鍙戦�佷紶鎰熷櫒閫氱煡鏇存柊");
                             EventBus.getDefault().post(new SensorStateBackInfo(sensorInfo, true, unite));
                             break;
-                        case Configuration.FRESH_AIR_BIG_TYPE://20190709鏂板
-                            isGetDeviceStateSuccess = true;
-                            devicesDataList.get(i).getAppliancesInfoList().get(j).setFeedbackState(getDatas.addBytes);
-
-                            EventBus.getDefault().post(new DeviceStateEvent(devicesDataList.get(i).getAppliancesInfoList().get(j), true));
-
-                            break;
                         default:
                             HDLLog.info("handle state 娌℃湁鎵惧埌鍖归厤绫诲瀷");
                             break;
                     }
-                    break outter;
+//                    break outter;
                 }
                 break outter;
             }
         }
     }
+
+    /**
+     * 澶勭悊鏂伴璁惧鐘舵�佹暟鎹�
+     * 20190710鏂板
+     * @param getDatas
+     */
+    private static void handleFreshAirStateData(UdpDataBean getDatas) {
+        outter:
+        for (int i = 0, len = devicesDataList.size(); i < len; i++) {
+            if (devicesDataList.get(i).getSourceSubnetID() == getDatas.sourceSubnetID
+                    && devicesDataList.get(i).getSourceDeviceID() == getDatas.sourceDeviceID
+            ) {
+                List<AppliancesInfo> infos = devicesDataList.get(i).getAppliancesInfoList();
+                for (int j = 0, len2 = infos.size(); j < len2; j++) {
+                    switch (devicesDataList.get(i).getAppliancesInfoList().get(j).getDeviceType()) {
+                        case HDLApConfig.TYPE_FRESH_AIR:
+                            isGetDeviceStateSuccess = true;
+                            devicesDataList.get(i).getAppliancesInfoList().get(j).setFeedbackState(getDatas.addBytes);
+                            EventBus.getDefault().post(new DeviceStateEvent(devicesDataList.get(i).getAppliancesInfoList().get(j), true));
+
+                            break;
+                        default:
+                            HDLLog.info("handleFreshAirStateData 娌℃湁鎵惧埌鍖归厤绫诲瀷");
+                            break;
+                    }
+
+                }
+                break outter;
+            }
+        }
+    }
+
 
     /**
      * 澶勭悊鍦扮儹璁惧鐘舵�佹暟鎹�
@@ -2193,7 +2251,7 @@
 
                             if(getDatas.addBytes.length >= 10) {
                                 byte[] getBytes = devicesDataList.get(i).getAppliancesInfoList().get(j).getFeedbackState();
-                                if (getBytes.length < 10) {
+                                if (getBytes == null || getBytes.length < 10) {
                                     getBytes = new byte[10];
                                 }
                                 System.arraycopy(getDatas.addBytes, 0, getBytes, 0, 10);//20190710鏌ヨ鍦扮儹鐘舵�佸弽棣堬紝鍙彇鍓�10浣嶆暟鎹�
@@ -2206,10 +2264,10 @@
 
                             break;
                         default:
-                            HDLLog.info("handle state 娌℃湁鎵惧埌鍖归厤绫诲瀷");
+                            HDLLog.info("handleGeothermalStateData 娌℃湁鎵惧埌鍖归厤绫诲瀷");
                             break;
                     }
-                    break outter;
+
                 }
                 break outter;
             }
diff --git a/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLDeviceManger/Core/HDLUdpCore.java b/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLDeviceManger/Core/HDLUdpCore.java
index dd85682..3f26a0e 100644
--- a/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLDeviceManger/Core/HDLUdpCore.java
+++ b/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLDeviceManger/Core/HDLUdpCore.java
@@ -39,6 +39,8 @@
      * @param sendDatas
      */
     public static void sendData(final Crc sendDatas) {
+//        HDLLog.info("HDLsendData锛�  "+ StringUtil.ByteArrToHex(sendDatas.GetSendBytes(),0, sendDatas.GetSendBytes().length));
+
 //        sendTestCMD(sendDatas.GetSendBytes(), HDLTest.SEND_TEST_PORT);
         new Thread(new Runnable() {
 
@@ -335,6 +337,8 @@
             return;
         }
 
+//        HDLLog.info("HDL ReceiveBytes锛�  "+ StringUtil.ByteArrToHex(receiveBytes,0, receiveBytes.length));
+
         //鏍¢獙鏄惁涓篐DL 鏁版嵁
         byte[] hdlDataVerify = new byte[10];
         System.arraycopy(receiveBytes, 4, hdlDataVerify, 0, 10);
diff --git a/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLDeviceManger/EventBusEvent/EventCode.java b/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLDeviceManger/EventBusEvent/EventCode.java
new file mode 100644
index 0000000..568171d
--- /dev/null
+++ b/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLDeviceManger/EventBusEvent/EventCode.java
@@ -0,0 +1,10 @@
+package com.hdl.sdk.hdl_core.HDLDeviceManger.EventBusEvent;
+
+/**
+ * Created by JLChen on 2019/7/15
+ */
+public class EventCode {
+    public static final int SUCCESS = 0;
+    public static final int FAILURE = -1;//澶辫触瓒呮椂
+    public static final int DATAEMPTY = -2;//鏁版嵁涓虹┖
+}
diff --git a/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLDeviceManger/EventBusEvent/GeothermalFeedBackEvent.java b/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLDeviceManger/EventBusEvent/GeothermalFeedBackEvent.java
index d70de83..a372f6c 100644
--- a/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLDeviceManger/EventBusEvent/GeothermalFeedBackEvent.java
+++ b/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLDeviceManger/EventBusEvent/GeothermalFeedBackEvent.java
@@ -7,21 +7,35 @@
  * 鍦扮儹妯″潡
  */
 public class GeothermalFeedBackEvent {
-
     GeothermalBackInfo mGeothermalBackInfo;
+//    boolean isSuccess;
 
-    boolean isSuccess;
+    int mStatusID;
 
-    public GeothermalFeedBackEvent( GeothermalBackInfo geothermalBackInfo, boolean isSuccess){
+    public GeothermalFeedBackEvent( GeothermalBackInfo geothermalBackInfo, int mStatusID){
         this.mGeothermalBackInfo = geothermalBackInfo;
-        this.isSuccess = isSuccess;
+        this.mStatusID = mStatusID;
     }
 
     public GeothermalBackInfo getGeothermalBackInfo() {
         return mGeothermalBackInfo;
     }
 
-    public boolean isSuccess() {
-        return isSuccess;
+    public int getStatusID() {
+        return mStatusID;
     }
+
+
+//    public GeothermalFeedBackEvent( GeothermalBackInfo geothermalBackInfo, boolean isSuccess){
+//        this.mGeothermalBackInfo = geothermalBackInfo;
+//        this.isSuccess = isSuccess;
+//    }
+//
+//    public GeothermalBackInfo getGeothermalBackInfo() {
+//        return mGeothermalBackInfo;
+//    }
+//
+//    public boolean isSuccess() {
+//        return isSuccess;
+//    }
 }
diff --git a/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLDeviceManger/Parser/DeviceParser.java b/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLDeviceManger/Parser/DeviceParser.java
index 90a070a..6e673ad 100644
--- a/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLDeviceManger/Parser/DeviceParser.java
+++ b/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLDeviceManger/Parser/DeviceParser.java
@@ -104,6 +104,7 @@
      * @return
      */
     private static boolean isWantData(int bigType, int littleType) {
+//        HDLLog.info("isWantData锛歜igType锛�" + bigType + "littleType锛�" + littleType);
         boolean isWant;
         switch (bigType) {
             case Configuration.LIGTH_BIG_TYPE:
@@ -190,6 +191,26 @@
             case Configuration.GLOBAL_LOGIC_BIG_TYPE:
                 switch (littleType) {
                     case 0:
+                        isWant = true;
+                        break;
+                    default:
+                        isWant = false;
+                        break;
+                }
+                break;
+            case Configuration.GEOTHERMAL_BIG_TYPE://20190711 鏂板
+                switch (littleType) {
+                    case Configuration.GEOTHERMAL_LITTLE_TYPE_0:
+                        isWant = true;
+                        break;
+                    default:
+                        isWant = false;
+                        break;
+                }
+                break;
+            case Configuration.FRESH_AIR_BIG_TYPE:
+                switch (littleType) {
+                    case Configuration.FRESH_AIR_LITTLE_TYPE_0:
                         isWant = true;
                         break;
                     default:
@@ -574,7 +595,7 @@
      */
     private static void parseGeothermalData(int littleType, AppliancesInfo appliancesInfo, DevicesData devicesData, String parentRemarks, int channelNum, int port, String ipAddress) {
         switch (littleType) {
-            case 0:
+            case Configuration.GEOTHERMAL_LITTLE_TYPE_0:
                 appliancesInfo.setDeviceName("鍦扮儹妯″潡");
                 appliancesInfo.setDeviceType(HDLApConfig.TYPE_GEOTHERMAL_MODULE);
                 break;
diff --git a/hdl_core/src/main/java/com/hdl/sdk/hdl_core/Util/TransformUtil/HDLUtlis.java b/hdl_core/src/main/java/com/hdl/sdk/hdl_core/Util/TransformUtil/HDLUtlis.java
new file mode 100644
index 0000000..ed18c79
--- /dev/null
+++ b/hdl_core/src/main/java/com/hdl/sdk/hdl_core/Util/TransformUtil/HDLUtlis.java
@@ -0,0 +1,94 @@
+package com.hdl.sdk.hdl_core.Util.TransformUtil;
+
+import java.math.BigDecimal;
+
+/**
+ * Created by JLChen on 2019/7/4
+ */
+public class HDLUtlis {
+
+    /**
+     * 灏唎bject杞负Integer绫诲瀷
+     *
+     * @param object
+     * @return
+     */
+    public static Integer getIntegerByObject(Object object) {
+        Integer in = 0;
+        if (object != null) {
+            if (object instanceof Integer) {
+                in = (Integer) object;
+            } else if (object instanceof String) {
+                in = Integer.parseInt((String) object);
+            } else if (object instanceof Double) {
+                in = (int) ((double) object);
+            } else if (object instanceof Float) {
+                in = (int) ((float) object);
+            } else if (object instanceof BigDecimal) {
+                in = ((BigDecimal) object).intValue();
+            } else if (object instanceof Long) {
+                in = ((Long) object).intValue();
+            }
+        }
+        return in;
+    }
+
+    /**
+     * 4 byte 杞崲涓篺loat绫诲瀷
+     *
+     * @param b1
+     * @param b2
+     * @param b3
+     * @param b4
+     * @return
+     */
+    public static float byteToFloat(byte b1, byte b2, byte b3, byte b4) {
+        byte[] mByte = new byte[4];
+        mByte[0] = b1;
+        mByte[1] = b2;
+        mByte[2] = b3;
+        mByte[3] = b4;
+        return byteArrayToFloat(mByte);
+    }
+
+    /**
+     * byte[4]鏁扮粍 杞崲涓篺loat绫诲瀷
+     *
+     * @param arr 闀垮害涓�4
+     * @return
+     */
+    public static float byteArrayToFloat(byte[] arr) {
+        try {
+            return Float.intBitsToFloat(getInt(arr));
+        } catch (Exception e) {
+            e.printStackTrace();
+            return 0;
+        }
+    }
+
+    /**
+     * 杩炵画4涓瓧鑺傝幏寰椾竴涓猧nt
+     *
+     * @param arr
+     * @return int
+     */
+    public static int getInt(byte[] arr) {
+        return (0xff000000 & (arr[0] << 24)) |
+                (0x00ff0000 & (arr[1] << 16)) |
+                (0x0000ff00 & (arr[2] << 8)) |
+                (0x000000ff & arr[3]);
+    }
+
+    /**
+     * float杞崲涓篵yte[4]鏁扮粍
+     *
+     * @param f
+     * @return
+     */
+    public static byte[] getByteArray(float f) {
+        int intbits = Float.floatToIntBits(f);//灏唂loat閲岄潰鐨勪簩杩涘埗涓茶В閲婁负int鏁存暟
+        return getByteArray(intbits);
+    }
+
+
+}
diff --git a/hdl_core/src/main/java/com/hdl/sdk/hdl_core/Util/TransformUtil/StringUtil.java b/hdl_core/src/main/java/com/hdl/sdk/hdl_core/Util/TransformUtil/StringUtil.java
index 1a66699..6e81c1c 100644
--- a/hdl_core/src/main/java/com/hdl/sdk/hdl_core/Util/TransformUtil/StringUtil.java
+++ b/hdl_core/src/main/java/com/hdl/sdk/hdl_core/Util/TransformUtil/StringUtil.java
@@ -85,38 +85,7 @@
     }
 
 
-    public static float byteToFloat(byte b1, byte b2, byte b3, byte b4){
-        byte[] mByte = new byte[4];
-        mByte[0] = b1;
-        mByte[1] = b2;
-        mByte[2] = b3;
-        mByte[3] = b4;
-        return byteArrayToFloat(mByte);
-    }
 
-    // 浠巄yte鏁扮粍鐨刬ndex澶勭殑杩炵画4涓瓧鑺傝幏寰椾竴涓猧nt
-    public static int getInt(byte[] arr) {
-        return 	(0xff000000 	& (arr[0] << 24))  |
-                (0x00ff0000 	& (arr[1] << 16))  |
-                (0x0000ff00 	& (arr[2] << 8))   |
-                (0x000000ff 	&  arr[3]);
-    }
-
-    // float杞崲涓篵yte[4]鏁扮粍
-    public static byte[] getByteArray(float f) {
-        int intbits = Float.floatToIntBits(f);//灏唂loat閲岄潰鐨勪簩杩涘埗涓茶В閲婁负int鏁存暟
-        return getByteArray(intbits);
-    }
-
-    // 浠巄yte鏁扮粍鐨刬ndex澶勭殑杩炵画4涓瓧鑺傝幏寰椾竴涓猣loat
-    public static float byteArrayToFloat(byte[] arr) {
-        try {
-            return Float.intBitsToFloat(getInt(arr));
-        } catch (Exception e) {
-            e.printStackTrace();
-            return 0;
-        }
-    }
 
 //    private byte[] formatStyleHDLResponse(String responsePart1, String responsePart2, int maxLen) throws UnsupportedEncodingException {
 //        String responsePart3 = HDL_END_STR;
@@ -191,5 +160,20 @@
 //        return;
 //    }
 
+    //-------------------------------------------------------
+    //瀛楄妭鏁扮粍杞浆hex瀛楃涓诧紝鍙�夐暱搴�
+    public static String ByteArrToHex(byte[] inBytArr, int offset, int byteCount) {
+        StringBuilder strBuilder = new StringBuilder();
+        int j = byteCount;
+        for (int i = offset; i < j; i++) {
+            strBuilder.append(Byte2Hex(Byte.valueOf(inBytArr[i])));
+        }
+        return strBuilder.toString();
+    }
 
+    //-------------------------------------------------------
+    //1瀛楄妭杞�2涓狧ex瀛楃
+    public static String Byte2Hex(Byte inByte) {
+        return String.format("%02x", new Object[]{inByte}).toUpperCase();
+    }
 }

--
Gitblit v1.8.0