From 86116427931cc724ae1e3105738a34e0619ca287 Mon Sep 17 00:00:00 2001
From: 562935844@qq.com
Date: 星期二, 04 四月 2023 16:12:47 +0800
Subject: [PATCH] 增加网关未上云密钥为空的问题处理

---
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/config/HDLLinkConfig.java                         |   34 
 HDLSDK/app/src/main/AndroidManifest.xml                                                                |    1 
 HDLSDK/app/release/output-metadata.json                                                                |   18 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/NetworkAccessBroadcastResponse.java |    1 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/MD5Utils.java                               |  121 ++
 HDLSDK/config.gradle                                                                                   |    5 
 HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/event/EventDispatcher.java                          |    2 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/event/EventDispatcher.java                         |    2 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/AuthenticateRequest.java             |  269 +++
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java                             |  199 +++
 HDLSDK_DEMO/app/src/main/java/com/hdl/hdlsdk/MainActivity.java                                         |  240 +++
 HDLSDK/app/src/main/res/layout/activity_main.xml                                                       |   10 
 HDLSDK_DEMO/app/src/main/res/layout/activity_main.xml                                                  |   10 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/AuthenticateResponse.java           |   26 
 HDLSDK_DEMO.rar                                                                                        |    0 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/HdlCloudApi.java                            |   18 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java                         |  218 +++
 HDLSDK_DEMO/app/src/main/AndroidManifest.xml                                                           |    1 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/CallBackListener.java                       |    8 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/HDLSdk.java                                        |    3 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/BaseCallBack.java                           |   10 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/interceptor/SmartHeader.java                |   16 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/IpUtils.java                                 |  154 ++
 HDLSDK/.idea/gradle.xml                                                                                |    1 
 HDLSDK/build.gradle                                                                                    |   18 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/ListUploadRequest.java               |  127 ++
 HDLSDK/app/src/main/java/com/hdl/hdlsdk/device/DevicesListAdapter.java                                 |   11 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/HdlCloudController.java                     |   38 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/GsonUtils.java                              |  247 ++++
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/config/TopicConstant.java                          |   30 
 HDLSDK_DEMO/.idea/gradle.xml                                                                           |    1 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/GatewayInfoRequest.java              |  129 ++
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/protocol/LinkMessageDecoder.java                  |  114 -
 HDLSDK/hdl-connect/libs/hxhttp_1.0.4_230201.aar                                                        |    0 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/DeviceAuthRequest.java               |   48 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HDLLink.java                                      |  172 ++
 HDLSDK/app/src/main/res/values/strings.xml                                                             |    1 
 HDLSDK/gradle.properties                                                                               |    4 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/exception/HDLLinkCode.java                         |    5 
 HDLSDK/app/src/main/java/com/hdl/hdlsdk/device/DevicesListActivity.java                                |   12 
 HDLSDK_DEMO/app/build.gradle                                                                           |    4 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/client/UdpClient.java                              |    2 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/ParameterizedTypeImpl.java                  |   43 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/BaseInfo.java                               |   48 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/CloudLinkCode.java                          |   46 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/interceptor/EncryptInterceptor.java         |  175 +++
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/interceptor/SmartHeaderInterceptor.java     |   27 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/HDLResponse.java                            |   51 
 /dev/null                                                                                              |    0 
 HDLSDK/hdl-connect/build.gradle                                                                        |    9 
 HDLSDK_DEMO/app/libs/com.hdl.sdk-v1.1.0.aar                                                            |    0 
 HDLSDK/com.hdl.sdk/build.gradle                                                                        |   57 
 HDLSDK_DEMO/config.gradle                                                                              |    2 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/DeviceInfoResponse.java             |    9 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/ListOidRequest.java                  |   29 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/HDLException.java                           |  114 ++
 HDLSDK_DEMO/.idea/misc.xml                                                                             |    1 
 HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java                                              |  370 ++++--
 58 files changed, 2,880 insertions(+), 431 deletions(-)

diff --git a/HDLSDK/.idea/gradle.xml b/HDLSDK/.idea/gradle.xml
index e6ea393..92c877d 100644
--- a/HDLSDK/.idea/gradle.xml
+++ b/HDLSDK/.idea/gradle.xml
@@ -7,6 +7,7 @@
         <option name="testRunner" value="GRADLE" />
         <option name="distributionType" value="DEFAULT_WRAPPED" />
         <option name="externalProjectPath" value="$PROJECT_DIR$" />
+        <option name="gradleJvm" value="JDK" />
         <option name="modules">
           <set>
             <option value="$PROJECT_DIR$" />
diff --git a/HDLSDK/app/release/output-metadata.json b/HDLSDK/app/release/output-metadata.json
new file mode 100644
index 0000000..3885049
--- /dev/null
+++ b/HDLSDK/app/release/output-metadata.json
@@ -0,0 +1,18 @@
+{
+  "version": 2,
+  "artifactType": {
+    "type": "APK",
+    "kind": "Directory"
+  },
+  "applicationId": "com.hdl.hdlsdk",
+  "variantName": "processReleaseResources",
+  "elements": [
+    {
+      "type": "SINGLE",
+      "filters": [],
+      "versionCode": 1,
+      "versionName": "1.0",
+      "outputFile": "app-release.apk"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/HDLSDK/app/src/main/AndroidManifest.xml b/HDLSDK/app/src/main/AndroidManifest.xml
index fbb77a0..cd2cfe7 100644
--- a/HDLSDK/app/src/main/AndroidManifest.xml
+++ b/HDLSDK/app/src/main/AndroidManifest.xml
@@ -10,6 +10,7 @@
         android:name="android.permission.WRITE_EXTERNAL_STORAGE"
         tools:ignore="ScopedStorage" />
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
+    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEM"/>
 
     <application
         android:name=".App"
diff --git a/HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java b/HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java
index 002f8dd..00f4264 100644
--- a/HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java
+++ b/HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java
@@ -1,5 +1,16 @@
 package com.hdl.hdlsdk;
 
+import android.Manifest;
+import android.content.Intent;
+import android.os.Build;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.TextView;
+import android.widget.Toast;
+
 import androidx.activity.result.ActivityResultCallback;
 import androidx.activity.result.ActivityResultLauncher;
 import androidx.activity.result.contract.ActivityResultContracts;
@@ -9,47 +20,29 @@
 import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
 
-import android.Manifest;
-import android.content.Intent;
-import android.os.Build;
-import android.os.Bundle;
-import android.text.TextUtils;
-import android.util.Log;
-import android.view.View;
-import android.widget.TextView;
-import android.widget.Toast;
-
 import com.chad.library.adapter.base.BaseQuickAdapter;
 import com.chad.library.adapter.base.listener.OnItemClickListener;
-import com.google.gson.JsonObject;
 import com.google.gson.reflect.TypeToken;
 import com.hdl.hdlsdk.device.DevicesListActivity;
 import com.hdl.sdk.common.config.TopicConstant;
 import com.hdl.sdk.common.event.EventListener;
 import com.hdl.sdk.common.exception.HDLLinkException;
 import com.hdl.sdk.common.utils.IdUtils;
-import com.hdl.sdk.common.utils.IpUtils;
-import com.hdl.sdk.common.utils.LogUtils;
 import com.hdl.sdk.common.utils.gson.GsonConvert;
 import com.hdl.sdk.connect.HDLLink;
-import com.hdl.sdk.connect.bean.LinkRequest;
 import com.hdl.sdk.connect.bean.LinkResponse;
 import com.hdl.sdk.connect.bean.request.AuthenticateRequest;
-import com.hdl.sdk.connect.bean.request.BroadcastRequest;
-import com.hdl.sdk.connect.bean.request.PropertyReadRequest;
+import com.hdl.sdk.connect.bean.request.DeviceControlRequest;
+import com.hdl.sdk.connect.bean.request.ListUploadRequest;
 import com.hdl.sdk.connect.bean.response.BaseLocalResponse;
 import com.hdl.sdk.connect.bean.response.GatewaySearchBean;
 import com.hdl.sdk.connect.callback.HDLLinkCallBack;
 import com.hdl.sdk.connect.callback.HDLLinkResponseCallBack;
+import com.hdl.sdk.connect.cloud.CallBackListener;
+import com.hdl.sdk.connect.cloud.HDLException;
 import com.hdl.sdk.connect.config.HDLLinkConfig;
 import com.hdl.sdk.connect.socket.HDLAuthSocket;
-import com.hdl.sdk.connect.socket.HDLSocket;
-import com.hdl.sdk.connect.bean.request.DeviceControlRequest;
-import com.hdl.sdk.connect.protocol.LinkMessageDecoder;
-import com.hdl.sdk.connect.protocol.LinkMessageEncoder;
-import com.hdl.sdk.socket.SocketOptions;
-import com.hdl.sdk.socket.codec.MessagePipeLine;
-import java.util.Base64;
+import com.hdl.sdk.connect.utils.AesUtil;
 
 import java.io.UnsupportedEncodingException;
 import java.security.MessageDigest;
@@ -59,9 +52,6 @@
 import java.util.List;
 import java.util.Map;
 
-import static com.hdl.sdk.common.config.TopicConstant.GATEWAY_SEARCH_REPLY;
-import static java.util.Base64.*;
-
 public class MainActivity extends AppCompatActivity {
 
     private static final String TAG = "MainActivity";
@@ -69,34 +59,168 @@
     private RecyclerView rv;
     private TextView tv;
     private TextView responseTv;
+    private EditText editText;
     boolean isOn;
     private EventListener allTopicsListener;
     private String testLightSid = "0001010D48C71B02020100010101";
+    private String secret = "";
 
     @Override
     protected void onDestroy() {
         super.onDestroy();
         removeAllTopicsListener();
     }
-void init() {
-//    HDLLinkConfig.getInstance().setLocalSecret("7d04c4e3c2b7d600");
-//    HDLLinkConfig.getInstance().setGatewayId("1473119283609321473");
-//    HDLLinkConfig.getInstance().setLocalEncrypt(true);
-}
-    @RequiresApi(api = Build.VERSION_CODES.O)
+
+    void initDeviceInfo() {
+        AuthenticateRequest.AuthenticateDeviceInfoBean infoBean = new AuthenticateRequest.AuthenticateDeviceInfoBean();
+        infoBean.setDeviceMAC("f2c5d8bad48f");
+        infoBean.setIPMAC("f2c5d8bad48f");
+        infoBean.setDeviceName("闊充箰鎾斁鍣�");//璁惧鍚嶅瓧
+        infoBean.setDeviceModel("MCLog.431");//璁惧鍨嬪彿
+        infoBean.setAccessMode("WIFI");
+        infoBean.setIPGateway("192.168.1.1");
+        infoBean.setIPAddress("192.168.1.103");
+        infoBean.setGateway_type("screen.touch");
+        infoBean.setHw_version("HW2.0");
+        infoBean.setFw_version("Fw1.0");
+        infoBean.setOID("010105000000FE11");//姣忎釜璁惧oid閮借涓嶄竴鏍�
+        infoBean.setSid("110105000000FE08110100000011");//姣忎釜璁惧鐨剆id閮借涓嶄竴鏍�
+        infoBean.setSupplier("JINMAOYUN");
+        HDLLinkConfig.getInstance().setDeviceInfoBean(infoBean);
+    }
+
+    void applyDeviceSecret() {
+        tv.setText("寮�濮嬬敵璇疯澶囧瘑閽�...");
+        responseTv.setText("");
+
+//        //姝e紡鏈嶅姟鍣�
+        String appKey = "i8hR07jzrIS";//appkey
+        String appSecret = "BmnJ8RWTtaVEBk24zPPF4UMwfYu0lAWU";//appsecret
+
+        //娴嬭瘯鏈嶅姟鍣�
+//        String appKey ="FcRyUJlLJFF";
+//        String appSecret = "wz8wn75ABidx8vXcFGUotqhwFkTaYvvJ";
+
+//        String appKey = "L2OZliZRxHc";
+//        String appSecret = "aCIWSvJDOukXfx3kivsKW11x9xdR3IbV";
+        String supplier = "JINMAOYUN";//鍘傚晢
+//        String mac = "AA00000000000100";//璁惧鍞竴MAC鍦板潃
+        String mac = editText.getText().toString();
+        String spk = "screen.touch";//浜у搧spk
+
+        if (TextUtils.isEmpty(mac)) {
+            Toast.makeText(this, "mac涓嶈兘涓虹┖锛�", Toast.LENGTH_SHORT).show();
+            return;
+        }
+
+        HDLLink.getInstance().applyDeviceSecret(this, appKey, appSecret, supplier, mac, spk, new CallBackListener() {
+            @Override
+            public void onError(HDLException e) {
+                tv.setText("鐢宠澶辫触");
+                responseTv.setText(e.getMsg());
+                secret = "";
+            }
+
+            @Override
+            public void onSuccess(String msg) {
+                tv.setText("鐢宠鎴愬姛");
+                responseTv.setText(msg.toString());
+                secret = msg.toString();
+            }
+        });
+
+    }
+
+    /**
+     * 鍏ョ綉璁よ瘉
+     */
+    void sendAuthenticateRequest() {
+        tv.setText("寮�濮嬪叆缃戣璇�...");
+        responseTv.setText("");
+        //璁よ瘉鎻愪氦鍙傛暟鍑嗗
+//
+//        //娴嬭瘯鏈嶅姟鍣�
+//        String spkStr = "music.standard";//浜у搧spk
+//        String macStr = "AA000000000000AF";//璁惧鍞竴MAC鍦板潃
+//        String secret = "44b360eb74b7ba64";//閫氳繃spk鍜宮ac鎻愪氦浜戠璁よ瘉鍚庡垎閰嶇殑secret
+
+//        姝e紡鏈嶅姟鍣�
+        String spkStr = "screen.touch";//浜у搧spk
+//        String macStr = "AA00000000000100";//璁惧鍞竴MAC鍦板潃
+        String macStr = editText.getText().toString();//璁惧鍞竴MAC鍦板潃
+//        String secret = "e186beeb7974998e";//閫氳繃spk鍜宮ac鎻愪氦浜戠璁よ瘉鍚庡垎閰嶇殑secret
+
+        String mac_key = stringToMD5(stringToMD5(macStr + secret));
+        String versionString = "HDL_V1.0.1";//
+        String time = String.valueOf(System.currentTimeMillis());
+        HDLLinkConfig.getInstance().getDeviceInfoBean().setDeviceMAC(macStr);
+//        HDLLinkConfig.getInstance().setCurrentGateway(infoBean);
+
+        //1.璁剧疆璁よ瘉淇℃伅
+        AuthenticateRequest.RequestBean requestBean = new AuthenticateRequest.RequestBean();
+        requestBean.setMAC(macStr);
+        requestBean.setSupplier("JINMAOYUN");
+        requestBean.setFirmwareVersion(versionString);
+        requestBean.setHardwareModel("1956F");
+//        HDLLinkConfig.getInstance().setRequestBean(requestBean);
+
+        AuthenticateRequest.AuthBean authbean = new AuthenticateRequest.AuthBean();
+        authbean.setSpk(spkStr);
+        authbean.setMACKey(mac_key);
+        authbean.setRequest(requestBean);
+        HDLLinkConfig.getInstance().setAuthBean(authbean);
+
+        //HDLLinkConfig.getInstance().getDeviceInfoBean()杩欎釜鍒濆鍖栫殑鏃跺�欒鍏堣缃ソ
+        AuthenticateRequest request = new AuthenticateRequest(IdUtils.getUUId(), time, HDLLinkConfig.getInstance().getDeviceInfoBean(), authbean);
+        HDLLink.getInstance().startAuthenticateRequest(request, new HDLLinkCallBack() {
+            @Override
+            public void onError(HDLLinkException e) {
+                tv.setText("璁よ瘉澶辫触" + e.getCode());
+                responseTv.setText(e.getMsg());
+                Log.e(TAG, "onError: 璁よ瘉澶辫触 " + e.getCode());
+            }
+
+            @RequiresApi(api = Build.VERSION_CODES.O)
+            @Override
+            public void onSuccess(String msg) {
+                tv.setText("璁よ瘉鎴愬姛");
+                responseTv.setText(msg.toString());
+            }
+        });
+    }
+
+    public void UploadDeviceAuth(String mac, String result, String message, String auth_code) {
+        //灏嗚璇佺粨鏋滀笂鎶ョ粰缃戝叧
+        HDLLink.getInstance().UploadDeviceAuth(mac, result, message, auth_code, new HDLLinkCallBack() {
+            @Override
+            public void onSuccess(String s) {
+                tv.setText("涓婃姤缁撴灉鎴愬姛");
+                responseTv.setText(s.toString());
+            }
+
+            @Override
+            public void onError(HDLLinkException e) {
+                tv.setText("涓婃姤缁撴灉澶辫触");
+                responseTv.setText(e.getMsg());
+                Log.i(TAG, "onError: 涓婃姤缁撴灉澶辫触");
+            }
+        });
+    }
+
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-
         setContentView(R.layout.activity_main);
         responseTv = findViewById(R.id.response_tv);
+        editText = findViewById(R.id.edittext);
         tv = findViewById(R.id.state_tv);
         rv = findViewById(R.id.rv);
         rv.setLayoutManager(new LinearLayoutManager(this));
 
-         init();
+        selectnetwork();
         checkIfCertified();
-        initDeviceInfo();//鍒濆鍖栧熀鏈俊鎭紝闈炲父閲嶈锛岃璇佹椂瑕佺敤
+        initDeviceInfo();//鍒濆鍖�
         registerAllTopicsListener();
 
         ActivityResultLauncher<String[]> launcher = registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), new ActivityResultCallback<Map<String, Boolean>>() {
@@ -108,9 +232,11 @@
 
         launcher.launch(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE});
 
-        final List<DemoBean> beans = new ArrayList<>();
+        final List<DemoBean> beans = new ArrayList<DemoBean>();
+        beans.add(new DemoBean("鐢宠璁惧瀵嗛挜"));
         beans.add(new DemoBean("鍏ョ綉璁よ瘉"));
         beans.add(new DemoBean("鎼滅储鎸囧畾缃戝叧鏄惁鍦ㄧ嚎"));
+        beans.add(new DemoBean("涓婃姤oid鍒楄〃"));
         beans.add(new DemoBean("鑾峰彇鍔熻兘鍒楄〃"));
         beans.add(new DemoBean("鍔熻兘灞炴�ц鍙�"));
         beans.add(new DemoBean("璁惧鎺у埗"));
@@ -122,6 +248,7 @@
         beans.add(new DemoBean("TCP鍙戦��"));
         beans.add(new DemoBean("UDP鍙戦�侊紝鐩戝惉涓婚鍥炲锛屽甫閲嶅彂甯﹀洖璋�"));
         beans.add(new DemoBean("TCP鍙戦�侊紝鐩戝惉涓婚鍥炲锛屽甫閲嶅彂甯﹀洖璋�"));
+        beans.add(new DemoBean("閫�缃�"));
         demoAdapter = new DemoAdapter(beans);
         rv.setAdapter(demoAdapter);
 
@@ -137,56 +264,68 @@
             public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
                 switch (position) {
                     case 0:
+                        //鐢宠璁惧瀵嗛挜
+                        applyDeviceSecret();
+                        break;
+                    case 1:
                         //鍏ョ綉璁よ瘉
                         sendAuthenticateRequest();
                         break;
-                    case 1:
+                    case 2:
                         //鎼滅储缃戝叧
                         searchGatewayBroadcast();
                         break;
-                    case 2:
+                    case 3:
+                        //涓婃姤oid鍒楄〃
+                        UploadOidList();
+                        break;
+                    case 4:
                         //鑾峰彇鍔熻兘鍒楄〃
                         getFunctionList();
                         break;
-                    case 3:
+                    case 5:
                         //鍔熻兘灞炴�ц鍙�
                         getFunctionAttribute();
                         break;
-                    case 4:
+                    case 6:
                         //璁惧鎺у埗
                         controlDecide();
                         break;
-                    case 5:
+                    case 7:
                         //璇诲彇鐘舵��
                         propertyRead();
                         break;
-                    case 6:
+                    case 8:
                         //鑾峰彇鍦烘櫙鍒楄〃
                         getSceneList();
                         break;
-                    case 7:
-                        //鑾峰彇鍦烘櫙鍒楄〃
+                    case 9:
+                        //鍦烘櫙鎺у埗
                         controlScene();
                         break;
-                    case 8:
+                    case 10:
                         //鍔熻兘鍒楄〃
                         startDevicesListActivity();
                         break;
-                    case 9:
+                    case 11:
                         //UDP鍙戦��
                         udpSend();
                         break;
-                    case 10:
+                    case 12:
                         //TCP鍙戦��
                         tcpSend();
                         break;
-                    case 11:
+                    case 13:
                         //UDP鍙戦�侊紝鐩戝惉涓婚鍥炲锛屽甫閲嶅彂甯﹀洖璋�
                         udpSendWithCallback();
                         break;
-                    case 12:
+                    case 14:
                         //TCP鍙戦�侊紝鐩戝惉涓婚鍥炲锛屽甫閲嶅彂甯﹀洖璋�
                         tcpSendWithCallback();
+                        break;
+                    case 15:
+                        //閫�缃�
+                        deleteNetwork();
                         break;
                 }
             }
@@ -196,6 +335,10 @@
 
     public void showToast(String text) {
         Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
+    }
+
+    void selectnetwork() {
+        HDLLink.getInstance().selectNetwork("wlan0");
     }
 
     /**
@@ -216,7 +359,6 @@
             @Override
             public void onMessage(Object msg) {
                 LinkResponse response = (LinkResponse) msg;
-                handleLinkResponse(response);
             }
         };
         HDLLink.getInstance().registerAllTopicsListener(allTopicsListener);
@@ -265,74 +407,6 @@
         HDLLink.getInstance().removeAllTopicsListener(allTopicsListener);
     }
 
-    void initDeviceInfo()
-    {
-        AuthenticateRequest.AuthenticateDeviceInfoBean infoBean = new AuthenticateRequest.AuthenticateDeviceInfoBean();
-        infoBean.setDeviceMAC("AA00000000000100");
-        infoBean.setIPMAC("AA00000000000100");
-        infoBean.setDeviceName("闊充箰鎾斁鍣�");//璁惧鍚嶅瓧
-        infoBean.setDeviceModel("MCLog.431");//璁惧鍨嬪彿
-        infoBean.setAccessMode("WIFI");
-        infoBean.setIPGateway("192.168.1.1");
-        infoBean.setIPAddress("192.168.1.116");
-        infoBean.setGateway_type("music.standard");
-        infoBean.setHw_version("HW2.0");
-        infoBean.setFw_version("Fw1.0");
-        infoBean.setOID("010105000000FE11");//姣忎釜璁惧oid閮借涓嶄竴鏍�
-        infoBean.setSid("110105000000FE08110100000011");//姣忎釜璁惧鐨剆id閮借涓嶄竴鏍�
-        HDLLinkConfig.getInstance().setDeviceInfoBean(infoBean);
-    }
-
-    /**
-     * 鍏ョ綉璁よ瘉
-     */
-    void sendAuthenticateRequest() {
-        tv.setText("寮�濮嬪叆缃戣璇�...");
-        //璁よ瘉鎻愪氦鍙傛暟鍑嗗
-
-//        娴嬭瘯鏈嶅姟
-//        String spkStr = "ir.module";//浜у搧spk
-//        String macStr = "AA000000000000AF";//璁惧鍞竴MAC鍦板潃
-//        String secret = "44b360eb74b7ba64";//閫氳繃spk鍜宮ac鎻愪氦浜戠璁よ瘉鍚庡垎閰嶇殑secret
-
-//        姝e紡鏈嶅姟鍣�
-        String spkStr = "screen.mirror";//浜у搧spk
-        String macStr = "AA00000000000100";//璁惧鍞竴MAC鍦板潃
-        String secret = "e186beeb7974998e";//閫氳繃spk鍜宮ac鎻愪氦浜戠璁よ瘉鍚庡垎閰嶇殑secret
-
-        String mac_key = stringToMD5(stringToMD5(macStr + secret));
-        String versionString = "HDL_V1.0.1";//
-        String time = String.valueOf(System.currentTimeMillis());
-        HDLLinkConfig.getInstance().getDeviceInfoBean().setDeviceMAC(macStr);
-
-        //1.璁剧疆璁よ瘉淇℃伅
-        AuthenticateRequest.RequestBean requestBean = new AuthenticateRequest.RequestBean();
-        requestBean.setMAC(macStr);
-        requestBean.setSupplier("WISE");
-        requestBean.setFirmwareVersion(versionString);
-        requestBean.setHardwareModel("1956F");
-        AuthenticateRequest.AuthBean authbean = new AuthenticateRequest.AuthBean();
-        authbean.setSpk(spkStr);
-        authbean.setMACKey(mac_key);
-        authbean.setRequest(requestBean);
-        //HDLLinkConfig.getInstance().getDeviceInfoBean()杩欎釜鍒濆鍖栫殑鏃跺�欒鍏堣缃ソ
-        AuthenticateRequest request = new AuthenticateRequest(IdUtils.getUUId(), time, HDLLinkConfig.getInstance().getDeviceInfoBean(), authbean);
-        HDLLink.getInstance().startAuthenticateRequest(request, new HDLLinkCallBack() {
-            @Override
-            public void onError(HDLLinkException e) {
-                tv.setText("璁よ瘉澶辫触");
-                responseTv.setText(e.getMsg());
-                Log.i("TAG", "onError: 璁よ瘉澶辫触");
-            }
-
-            @Override
-            public void onSuccess(String msg) {
-                tv.setText("璁よ瘉鎴愬姛");
-                responseTv.setText(msg.toString());
-                Log.i("TAG", "onSuccess: 璁よ瘉鎴愬姛");
-            }
-        });
-    }
 
     String stringToMD5(String text) {
         byte[] hash;
@@ -362,6 +436,7 @@
      */
     void searchGatewayBroadcast() {
         tv.setText("鎼滅储缃戝叧涓�...");
+        responseTv.setText("");
         HDLLink.getInstance().searchGatewayBroadcast(new HDLAuthSocket.SearchGatewayCallBack() {
             @Override
             public void onError(HDLLinkException e) {
@@ -404,6 +479,7 @@
      */
     void getFunctionAttribute() {
         tv.setText("鍔熻兘灞炴�ц鍙�");
+        responseTv.setText("");
         List<String> sids = new ArrayList<>();
         sids.add(testLightSid);
         HDLLink.getInstance().getFunctionAttribute(sids, new HDLLinkCallBack() {
@@ -425,6 +501,7 @@
      */
     void propertyRead() {
         tv.setText("璇诲彇鐘舵�佷腑...");
+        responseTv.setText("");
         List<String> list = new ArrayList<>();
         list.add(testLightSid);//瑕佽鍙栬澶囩殑sid
         HDLLink.getInstance().propertyRead(list, new HDLLinkCallBack() {
@@ -448,6 +525,7 @@
      */
     void controlDecide() {
         tv.setText("鎺у埗璁惧");
+        responseTv.setText("");
         isOn = !isOn;
         List<DeviceControlRequest> requestList = new ArrayList<>();
         DeviceControlRequest request = new DeviceControlRequest();
@@ -477,6 +555,7 @@
      */
     void getSceneList() {
         tv.setText("璇诲彇鍦烘櫙鍒楄〃");
+        responseTv.setText("");
         HDLLink.getInstance().getSceneList(new HDLLinkCallBack() {
             @Override
             public void onSuccess(String msg) {
@@ -499,6 +578,7 @@
      */
     void controlScene() {
         tv.setText("鍦烘櫙鎺у埗");
+        responseTv.setText("");
         //鎺у埗鍦烘櫙sid鍒楄〃锛屾敮鎸佹壒閲忔帶鍒�
         List<String> sids = new ArrayList<>();
         isOn = !isOn;
@@ -531,6 +611,7 @@
      */
     private void tcpSend() {
         tv.setText("TCP鍙戦�� 鍙彂涓�娆★紝涓嶇洃鍚洖澶嶏紝涓嶉噸鍙�");
+        responseTv.setText("");
         String propertyDownTopic = String.format(TopicConstant.PROPERTY_DOWN, HDLLinkConfig.getInstance().getGatewayId());
         String bodyStr = getPropertyDownBodyStr();
         HDLLink.getInstance().tcpSendMsg(propertyDownTopic, bodyStr);
@@ -541,6 +622,7 @@
      */
     private void udpSend() {
         tv.setText("UDP鍙戦�� 鍙彂涓�娆★紝涓嶇洃鍚洖澶嶏紝涓嶉噸鍙�");
+        responseTv.setText("");
         String propertyDownTopic = String.format(TopicConstant.PROPERTY_DOWN, HDLLinkConfig.getInstance().getGatewayId());
         String bodyStr = getPropertyDownBodyStr();
         HDLLink.getInstance().udpSendMsg(propertyDownTopic, bodyStr);
@@ -573,6 +655,7 @@
      */
     private void udpSendWithCallback() {
         tv.setText("UDP鍙戦�侊紝鐩戝惉涓婚鍥炲锛屽甫閲嶅彂甯﹀洖璋�");
+        responseTv.setText("");
         String propertyDownTopic = String.format(TopicConstant.PROPERTY_DOWN, HDLLinkConfig.getInstance().getGatewayId());
         String bodyStr = getPropertyDownBodyStr();
         HDLLink.getInstance().udpSendMsg(propertyDownTopic, bodyStr, new HDLLinkResponseCallBack() {
@@ -594,6 +677,7 @@
      */
     private void tcpSendWithCallback() {
         tv.setText("TCP鍙戦�侊紝鐩戝惉涓婚鍥炲锛屽甫閲嶅彂甯﹀洖璋�");
+        responseTv.setText("");
         String propertyDownTopic = String.format(TopicConstant.PROPERTY_DOWN, HDLLinkConfig.getInstance().getGatewayId());
         String bodyStr = getPropertyDownBodyStr();
         HDLLink.getInstance().tcpSendMsg(propertyDownTopic, bodyStr, new HDLLinkCallBack() {
@@ -609,4 +693,54 @@
             }
         });
     }
+
+    private void deleteNetwork() {
+        tv.setText("閫�缃�");
+        responseTv.setText("");
+        String oid = HDLLinkConfig.getInstance().getDeviceInfoBean().getOID();
+        HDLLink.getInstance().deleteNetwork(oid, false, new HDLLinkCallBack() {
+            @Override
+            public void onSuccess(String msg) {
+                responseTv.setText(msg);
+                //閫�缃戞垚鍔燂紝鍒犻櫎鏁版嵁
+            }
+
+            @Override
+            public void onError(HDLLinkException e) {
+                responseTv.setText(e.getMsg());
+            }
+        });
+    }
+
+    /**
+     * 涓婃姤oid鍒楄〃
+     */
+    private void UploadOidList() {
+        tv.setText("涓婃姤oid鍒楄〃...");
+        responseTv.setText("");
+
+        //1.璁剧疆璁惧淇℃伅
+        AuthenticateRequest.AuthenticateDeviceInfoBean authenticateDeviceInfoBean = HDLLinkConfig.getInstance().getDeviceInfoBean();
+
+        ListUploadRequest request = new ListUploadRequest();
+        request.setOid(authenticateDeviceInfoBean.getOID());
+        request.setDevice_name(authenticateDeviceInfoBean.getDeviceName());
+        request.setDevice_model(authenticateDeviceInfoBean.getDeviceModel());
+        request.setDevice_mac(authenticateDeviceInfoBean.getDeviceMAC());
+        request.setSrc("LINK");//鏉ヨ嚜鍝釜椹卞姩锛屽Link璁惧娌℃湁鍒欏~"LINK"
+        request.setFrom(authenticateDeviceInfoBean.getOID());//鏉ヨ嚜鍝釜缃戝叧锛屽鏋滄椂Link缃戠粶璁惧锛屽垯濉嚜韬玱id锛涘鏋滄槸椹卞姩鍒欎笉闇�瑕佹瀛楁
+
+        HDLLink.getInstance().UploadOidList(request, new HDLLinkCallBack() {
+            @Override
+            public void onError(HDLLinkException error) {
+                tv.setText(error.getMsg());
+            }
+
+            @Override
+            public void onSuccess(String data) {
+                tv.setText("涓婃姤oid鍒楄〃鎴愬姛");
+                responseTv.setText(data);
+            }
+        });
+    }
 }
\ No newline at end of file
diff --git a/HDLSDK/app/src/main/java/com/hdl/hdlsdk/device/DevicesListActivity.java b/HDLSDK/app/src/main/java/com/hdl/hdlsdk/device/DevicesListActivity.java
index f253b34..dc7156d 100644
--- a/HDLSDK/app/src/main/java/com/hdl/hdlsdk/device/DevicesListActivity.java
+++ b/HDLSDK/app/src/main/java/com/hdl/hdlsdk/device/DevicesListActivity.java
@@ -1,24 +1,20 @@
 package com.hdl.hdlsdk.device;
 
-import androidx.appcompat.app.AppCompatActivity;
-import androidx.recyclerview.widget.LinearLayoutManager;
-import androidx.recyclerview.widget.OrientationHelper;
-import androidx.recyclerview.widget.RecyclerView;
-
 import android.annotation.SuppressLint;
 import android.os.Bundle;
 import android.util.Log;
 
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
 import com.google.gson.reflect.TypeToken;
-import com.hdl.hdlsdk.DemoAdapter;
 import com.hdl.hdlsdk.R;
 import com.hdl.sdk.common.exception.HDLLinkException;
-import com.hdl.sdk.common.utils.LogUtils;
 import com.hdl.sdk.common.utils.gson.GsonConvert;
 import com.hdl.sdk.connect.HDLLink;
 import com.hdl.sdk.connect.bean.LinkResponse;
 import com.hdl.sdk.connect.bean.response.BaseLocalResponse;
-import com.hdl.sdk.connect.bean.response.GatewaySearchBean;
 import com.hdl.sdk.connect.callback.HDLLinkCallBack;
 
 import java.util.ArrayList;
diff --git a/HDLSDK/app/src/main/java/com/hdl/hdlsdk/device/DevicesListAdapter.java b/HDLSDK/app/src/main/java/com/hdl/hdlsdk/device/DevicesListAdapter.java
index 6128305..773df27 100644
--- a/HDLSDK/app/src/main/java/com/hdl/hdlsdk/device/DevicesListAdapter.java
+++ b/HDLSDK/app/src/main/java/com/hdl/hdlsdk/device/DevicesListAdapter.java
@@ -9,24 +9,13 @@
 import android.widget.Switch;
 import android.widget.TextView;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.recyclerview.widget.RecyclerView;
 
-import com.chad.library.adapter.base.BaseMultiItemQuickAdapter;
-import com.chad.library.adapter.base.viewholder.BaseViewHolder;
-import com.hdl.hdlsdk.DemoBean;
 import com.hdl.hdlsdk.R;
-import com.hdl.sdk.common.config.TopicConstant;
 import com.hdl.sdk.common.exception.HDLLinkException;
-import com.hdl.sdk.common.utils.IdUtils;
-import com.hdl.sdk.common.utils.LogUtils;
-import com.hdl.sdk.common.utils.gson.GsonConvert;
 import com.hdl.sdk.connect.HDLLink;
 import com.hdl.sdk.connect.bean.request.DeviceControlRequest;
-import com.hdl.sdk.connect.bean.response.BaseLocalResponse;
 import com.hdl.sdk.connect.callback.HDLLinkCallBack;
-import com.hdl.sdk.connect.config.HDLLinkConfig;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/HDLSDK/app/src/main/res/layout/activity_main.xml b/HDLSDK/app/src/main/res/layout/activity_main.xml
index 6fa6c2b..2fe14f5 100644
--- a/HDLSDK/app/src/main/res/layout/activity_main.xml
+++ b/HDLSDK/app/src/main/res/layout/activity_main.xml
@@ -40,10 +40,20 @@
             android:layout_height="match_parent"
             android:orientation="vertical">
 
+            <EditText
+                android:id="@+id/edittext"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:paddingStart="10dp"
+                android:hint="璇疯緭鍏ac"
+                android:text="f2c5d8bad48f"
+                />
+
             <TextView
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:paddingStart="10dp"
+                android:layout_marginTop="@dimen/dp_10"
                 android:text="褰撳墠鐘舵�侊細" />
 
             <TextView
diff --git a/HDLSDK/app/src/main/res/values/strings.xml b/HDLSDK/app/src/main/res/values/strings.xml
index 192b55f..dc5eb5f 100644
--- a/HDLSDK/app/src/main/res/values/strings.xml
+++ b/HDLSDK/app/src/main/res/values/strings.xml
@@ -1,3 +1,4 @@
 <resources>
     <string name="app_name">HDLSDK</string>
+    <string name="http_unknown">鏈煡缃戠粶閿欒锛岃绋嶅悗鍐嶈瘯</string>
 </resources>
\ No newline at end of file
diff --git a/HDLSDK/build.gradle b/HDLSDK/build.gradle
index 8641fad..9137082 100644
--- a/HDLSDK/build.gradle
+++ b/HDLSDK/build.gradle
@@ -3,7 +3,13 @@
 buildscript {
     repositories {
         google()
+        jcenter()
         mavenCentral()
+        maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
+        maven { url = uri("https://plugins.gradle.org/m2/") }
+        maven {
+            url "https://jitpack.io"
+        }
     }
     dependencies {
         classpath "com.android.tools.build:gradle:4.1.2"
@@ -18,8 +24,20 @@
         maven { url 'https://maven.aliyun.com/repository/google' }
         maven { url 'https://maven.aliyun.com/repository/jcenter' }
         maven { url 'https://maven.aliyun.com/repository/public' }
+        maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
+        maven { url = uri("https://plugins.gradle.org/m2/") }
         google()
+        jcenter()
+        mavenCentral()
         maven { url "https://jitpack.io" }
+
+        maven {
+            credentials {
+                username rootProject.ext.ALIYUN_USER_NAME
+                password rootProject.ext.ALIYUN_PASSWORD
+            }
+            url 'https://packages.aliyun.com/maven/repository/2012126-release-Mc0DNo/'
+        }
     }
 }
 
diff --git a/HDLSDK/com.hdl.sdk/build.gradle b/HDLSDK/com.hdl.sdk/build.gradle
index c7ec494..eeb1372 100644
--- a/HDLSDK/com.hdl.sdk/build.gradle
+++ b/HDLSDK/com.hdl.sdk/build.gradle
@@ -1,6 +1,6 @@
 //鎵撳寘鐨�
 apply plugin: 'com.android.library'
-apply plugin:'com.kezong.fat-aar'
+apply plugin: 'com.kezong.fat-aar'
 
 android {
     compileSdkVersion rootProject.compileSdkVersion
@@ -9,7 +9,7 @@
         minSdkVersion rootProject.minSdkVersion
         targetSdkVersion rootProject.targetSdkVersion
         versionCode 2
-        versionName "1.0.15"
+        versionName "1.1.0"
     }
     buildTypes {
         debug {
@@ -27,14 +27,32 @@
 
     implementation fileTree(include: ['*.jar'], dir: 'libs')
 
-//    embed 'com.ezviz.sdk:ezviz-sdk:4.16.1'
-//    embed(name: 'hdl-common-release',ext: 'aar')
-//    embed(name: 'hdl-connect-release',ext: 'aar')
-//    embed(name: 'hdl-socket-release',ext: 'aar')
+    embed 'com.hdl.hdlhttp:hxhttp:1.0.4'
 
-//    embed project(path: ':hdl-common', configuration:'default')
-    embed project(path: ':hdl-connect', configuration:'default')
-//    embed project(path: ':hdl-socket', configuration:'default')
+//    api 'androidx.appcompat:appcompat:1.3.1'
+//    api 'com.google.android.material:material:1.4.0'
+
+    embed 'com.squareup.okhttp3:okhttp:4.9.1'
+    embed 'com.squareup.okhttp3:logging-interceptor:4.9.1'
+    embed 'com.squareup.okio:okio:2.8.0'
+    //retrofit
+    embed 'com.squareup.retrofit2:retrofit:2.9.0'
+    embed 'com.squareup.retrofit2:converter-scalars:2.9.0'
+    embed 'com.squareup.retrofit2:adapter-rxjava3:2.9.0'
+    embed 'io.reactivex.rxjava3:rxandroid:3.0.0'
+    embed 'io.reactivex.rxjava3:rxjava:3.1.1'
+    embed 'com.google.code.gson:gson:2.8.8'
+
+    embed 'com.trello.rxlifecycle4:rxlifecycle:4.0.2'
+    embed 'com.trello.rxlifecycle4:rxlifecycle-android:4.0.2'
+    embed 'com.trello.rxlifecycle4:rxlifecycle-android-lifecycle:4.0.2'
+
+    embed 'org.reactivestreams:reactive-streams:1.0.3'
+
+//    embed(name: 'hxhttp_1.0.4_230201',ext: 'aar')
+
+    embed project(path: ':hdl-connect', configuration: 'default')
+
 }
 
 //鎵撳寘鐨�
@@ -43,7 +61,7 @@
     repositories {
         google()
         jcenter()
-        maven {url "https://plugins.gradle.org/m2/"}
+        maven { url "https://plugins.gradle.org/m2/" }
     }
 
     dependencies {
@@ -52,16 +70,15 @@
     }
 }
 
-//allprojects {
-//    repositories {
-//        flatDir{
-//            dirs 'libs'
-//        }
-//        google()
-//        jcenter()
-//    }
-//}
-
+allprojects {
+    repositories {
+        flatDir {
+            dirs 'libs'
+        }
+        google()
+        jcenter()
+    }
+}
 
 
 ////杩愯鐨�
diff --git a/HDLSDK/config.gradle b/HDLSDK/config.gradle
index 51a8ae6..d665ff3 100644
--- a/HDLSDK/config.gradle
+++ b/HDLSDK/config.gradle
@@ -1,5 +1,8 @@
 ext {
-    minSdkVersion = 16
+    minSdkVersion = 21
     targetSdkVersion = 31
     compileSdkVersion = 31
+
+    ALIYUN_USER_NAME = "611f24277cbfb3c62b5b1d4f"
+    ALIYUN_PASSWORD = "sJA([gwZJ5Y0"
 }
\ No newline at end of file
diff --git a/HDLSDK/gradle.properties b/HDLSDK/gradle.properties
index 5822ace..31a34a4 100644
--- a/HDLSDK/gradle.properties
+++ b/HDLSDK/gradle.properties
@@ -14,6 +14,6 @@
 # AndroidX package structure to make it clearer which packages are bundled with the
 # Android operating system, and which are packaged with your app"s APK
 # https://developer.android.com/topic/libraries/support-library/androidx-rn
-#android.useAndroidX=true
+android.useAndroidX=true
 ### Automatically convert third-party libraries to use AndroidX
-#android.enableJetifier=true
\ No newline at end of file
+android.enableJetifier=true
diff --git a/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/event/EventDispatcher.java b/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/event/EventDispatcher.java
index ca3ca7d..96adb95 100644
--- a/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/event/EventDispatcher.java
+++ b/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/event/EventDispatcher.java
@@ -147,7 +147,7 @@
                                         listener.onMessage(o);
                                     }
                                 } catch (Exception e) {
-                                    LogUtils.e("post寮傚父1锛�" + e.getMessage());
+//                                    LogUtils.e("post寮傚父1锛�" + e.getMessage());
                                 }
                             }
                         });
diff --git a/HDLSDK/hdl-connect/build.gradle b/HDLSDK/hdl-connect/build.gradle
index 09f41a1..b37b85d 100644
--- a/HDLSDK/hdl-connect/build.gradle
+++ b/HDLSDK/hdl-connect/build.gradle
@@ -9,7 +9,7 @@
         minSdkVersion rootProject.minSdkVersion
         targetSdkVersion rootProject.targetSdkVersion
         versionCode 2
-        versionName "1.0.21"
+        versionName "1.1.0"
 
         consumerProguardFiles "consumer-rules.pro"
     }
@@ -27,6 +27,11 @@
 }
 
 dependencies {
-//    api project(path: ':hdl-socket')
+//    implementation fileTree(include: ['*.jar'], dir: 'libs')
+
+    api 'com.hdl.hdlhttp:hxhttp:1.0.4'
+    api 'com.squareup.okhttp3:logging-interceptor:4.9.1'
+//    embed(name: 'hxhttp_1.0.4_230201',ext: 'aar')
+
     api 'com.google.code.gson:gson:2.8.8'
 }
diff --git a/HDLSDK/hdl-connect/libs/hxhttp_1.0.4_230201.aar b/HDLSDK/hdl-connect/libs/hxhttp_1.0.4_230201.aar
new file mode 100644
index 0000000..a436691
--- /dev/null
+++ b/HDLSDK/hdl-connect/libs/hxhttp_1.0.4_230201.aar
Binary files differ
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/HDLSdk.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/HDLSdk.java
index 08db433..1db547c 100644
--- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/HDLSdk.java
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/HDLSdk.java
@@ -32,7 +32,7 @@
         return version;
     }
 
-    private String version = "1.0.22";
+    private String version = "1.1.0";
 
     private HDLSdk() {
     }
@@ -47,6 +47,7 @@
 
     public void init(Context context) {
         this.context = context.getApplicationContext();
+        HDLAuthSocket.getInstance().init();
         HDLSocket.getInstance().broadcastRequest();
         LogUtils.i("HDLSdk Version:" + version);
     }
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/config/TopicConstant.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/config/TopicConstant.java
index 07dc798..f9ce88a 100644
--- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/config/TopicConstant.java
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/config/TopicConstant.java
@@ -14,6 +14,9 @@
     //璁惧鍏ョ綉鍜岃璇佸搷搴�
     public static final String DEIVCE_AUTH_REQUEST_REPLY = "/user/all/custom/device/network_access/request_reply";
 
+    //鍏ョ綉璁よ瘉缁撴灉鍙嶉
+    public static final String DEIVCE_AUTH_RESULT_NOTIFY = "/user/%s/custom/device/auth/result_notify";
+
     //鎼滅储缃戝叧
     public static final String GATEWAY_SEARCH = "/user/all/custom/gateway/search";
 
@@ -83,19 +86,38 @@
     /**
      * 璁惧杩炴帴TCP涔嬪墠骞挎挱
      */
-    public static final String BROADCAST="/user/all/custom/gateway/broadcast";
+    public static final String BROADCAST = "/user/all/custom/gateway/broadcast";
 
     /**
      * 涓荤綉鍏冲洖澶�
      */
-    public static final String BROADCAST_REPLY="/user/all/custom/gateway/broadcast_reply";
+    public static final String BROADCAST_REPLY = "/user/all/custom/gateway/broadcast_reply";
+
+    public static final String LINK_BROADCAST = "/user/all/custom/gateway/broadcast_reply";
 
     /**
      * 蹇冭烦妫�娴�
      */
-    public static final String HEARTBEAT="/user/%s/custom/gateway/heartbeat";
+    public static final String HEARTBEAT = "/user/%s/custom/gateway/heartbeat";
     /**
      * 蹇冭烦妫�娴嬪洖澶�
      */
-    public static final String HEARTBEAT_REPLY="/user/%s/custom/gateway/heartbeat_reply";
+    public static final String HEARTBEAT_REPLY = "/user/%s/custom/gateway/heartbeat_reply";
+
+    //閫氱煡鍒犻櫎骞堕��缃戝瓙璁惧
+    public static final String DELETE_REQUEST = "/base/%s/thing/topo/delete/request";
+
+    //缃戝叧鍝嶅簲閫�缃戦�氱煡
+    public static final String DELETE_NOTIFY_REPLY = "/base/%s/thing/topo/delete/notify_reply";
+
+    //缃戝叧鐗╃悊鍒犻櫎(閫�缃�)瀛愯澶囧悗涓婃姤
+    public static final String DELETE_UP = "/base/%s/thing/topo/delete/up";
+
+    //椹卞姩涓婃姤oid鍒楄〃
+    public static final String LIST_UPLOAD = "/user/%s/custom/device/list/upload";
+
+    //椹卞姩涓婃姤oid鍒楄〃鍥炲
+    public static final String LIST_UPLOAD_REPLY = "/user/%s/custom/device/list/upload_reply";
+
+
 }
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/event/EventDispatcher.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/event/EventDispatcher.java
index 2f59e1d..13f27a1 100644
--- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/event/EventDispatcher.java
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/event/EventDispatcher.java
@@ -147,7 +147,7 @@
                                         listener.onMessage(o);
                                     }
                                 } catch (Exception e) {
-                                    LogUtils.e("post寮傚父1锛�" + e.getMessage());
+//                                    LogUtils.e("post寮傚父1锛�" + e.getMessage());
                                 }
                             }
                         });
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/exception/HDLLinkCode.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/exception/HDLLinkCode.java
index a5c9a5f..079e275 100644
--- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/exception/HDLLinkCode.java
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/exception/HDLLinkCode.java
@@ -7,6 +7,8 @@
  */
 public enum HDLLinkCode {
 
+    HDL_AUTH_124013_ERROR(124013,"璇AC瀵瑰簲鐨勮澶囧瘑閽ヤ笉瀛樺湪"),
+    HDL_AUTH_124015_ERROR(124015,"璁惧鍘傚涓嶅尮閰�"),
     HDL_DATA_ERROR(-2000,"鍙傛暟寮傚父"),
     HDL_DATA_NULL_ERROR(-2001,"鍙傛暟涓嶈兘涓虹┖"),
     HDL_AUTH_ERROR(-2002,"璁よ瘉澶辫触"),
@@ -19,7 +21,8 @@
     HDL_GET_DEVICE_LIST_ERROR(-2100,"鑾峰彇璁惧鍒楄〃澶辫触"),
     HDL_GET_FUNCTION_LIST_ERROR(-2101,"鑾峰彇鍔熻兘鍒楄〃澶辫触"),
     HDL_GET_FUNCTION_PROPERTIES_ERROR(-2102,"鑾峰彇鍔熻兘灞炴�уけ璐�"),
-    HDL_CONTROL_FAILURE_ERROR(-2103,"鎺у埗澶辫触");
+    HDL_CONTROL_FAILURE_ERROR(-2103,"鎺у埗澶辫触"),
+    HDL_UPLOAD_GATEWAYINFO_FAILURE_ERROR(-2104,"涓婃姤澶辫触");
 
     private String msg;
     private int code;
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/IpUtils.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/IpUtils.java
index 832cf2f..8fa0785 100644
--- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/IpUtils.java
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/IpUtils.java
@@ -3,6 +3,10 @@
 import android.content.Context;
 import android.net.wifi.WifiInfo;
 import android.net.wifi.WifiManager;
+import android.text.TextUtils;
+import android.util.Log;
+
+import com.hdl.sdk.connect.config.HDLLinkConfig;
 
 import java.net.InetAddress;
 import java.net.InterfaceAddress;
@@ -15,10 +19,10 @@
  */
 public class IpUtils {
 
-    /**
-     * @return 骞挎挱鍦板潃
-     */
-    public static String getBroadcastAddress() {
+//    /**
+//     * @return 骞挎挱鍦板潃
+//     */
+    /*public static String getBroadcastAddress() {
 //        try {
 //            for (Enumeration<NetworkInterface> niEnum = NetworkInterface.getNetworkInterfaces();
 //                 niEnum.hasMoreElements(); ) {
@@ -34,6 +38,45 @@
 //        } catch (SocketException e) {
 //            e.printStackTrace();
 //        }
+        return "255.255.255.255";
+    }*/
+
+
+    /**
+     * @return 骞挎挱鍦板潃
+     */
+    public static synchronized String getBroadcastAddress() {
+        try {
+            if (!TextUtils.isEmpty(HDLLinkConfig.getInstance().getNetworkName())) {
+                for (Enumeration<NetworkInterface> niEnum = NetworkInterface.getNetworkInterfaces();
+                     niEnum.hasMoreElements(); ) {
+                    NetworkInterface ni = niEnum.nextElement();
+                    if (!ni.isLoopback() && ni.getName().equalsIgnoreCase(HDLLinkConfig.getInstance().getNetworkName())) {
+                        for (InterfaceAddress interfaceAddress : ni.getInterfaceAddresses()) {
+                            if (interfaceAddress.getBroadcast() != null) {
+                                Log.d("TAG", "----->ni.getName()= " + ni.getName() + " ip= " + interfaceAddress.getBroadcast().toString().substring(1));
+                                return interfaceAddress.getBroadcast().toString().substring(1);
+                            }
+                        }
+                    }
+                }
+
+                for (Enumeration<NetworkInterface> niEnum = NetworkInterface.getNetworkInterfaces();
+                     niEnum.hasMoreElements(); ) {
+                    NetworkInterface ni = niEnum.nextElement();
+                    if (!ni.isLoopback()) {
+                        for (InterfaceAddress interfaceAddress : ni.getInterfaceAddresses()) {
+                            if (interfaceAddress.getBroadcast() != null) {
+                                Log.d("TAG", "----->ip= " + interfaceAddress.getBroadcast().toString().substring(1));
+                                return interfaceAddress.getBroadcast().toString().substring(1);
+                            }
+                        }
+                    }
+                }
+            }
+        } catch (SocketException e) {
+            e.printStackTrace();
+        }
         return "255.255.255.255";
     }
 
@@ -86,4 +129,107 @@
                 ((i >> 16) & 0xFF) + "." +
                 (i >> 24 & 0xFF);
     }
+
+    private static String getWifiManagerAddress(Context context) {
+        try {
+            if (context != null) {
+                WifiManager wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
+                if (wifiManager != null && wifiManager.isWifiEnabled()) {
+                    WifiInfo wifiInfo = wifiManager.getConnectionInfo();
+                    int ipAddress = wifiInfo.getIpAddress();
+                    return intToIp(ipAddress);
+                }
+            }
+        } catch (Exception ignored) {
+        }
+        return null;
+    }
+
+    public static String getWifiIpV4Address(Context context) {
+        try {
+            //鐩存帴浠巜ifiManager鑾峰彇
+            String managerAddress = getWifiManagerAddress(context);
+            if (!TextUtils.isEmpty(managerAddress)) {
+                return managerAddress;
+            }
+
+            Enumeration<NetworkInterface> enumeration = NetworkInterface.getNetworkInterfaces();
+            while (enumeration.hasMoreElements()) {
+                NetworkInterface network = enumeration.nextElement();
+                if (network == null || network.isVirtual() || !network.isUp() || network.isLoopback() || !network.getName().equalsIgnoreCase("eth0")) {
+                    continue;
+                } else {
+                    Enumeration<InetAddress> addresses = network.getInetAddresses();
+                    while (addresses.hasMoreElements()) {
+                        InetAddress address = addresses.nextElement();
+                        if (!address.isLoopbackAddress() && !address.isAnyLocalAddress()
+                                && !address.isLinkLocalAddress()) {
+                            String hostAddress = address.getHostAddress();
+                            if (hostAddress != null) {
+                                boolean isIPv4 = hostAddress.indexOf(':') < 0;
+                                if (isIPv4) return hostAddress;
+                            }
+
+                        }
+                    }
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return null;
+    }
+
+    public static String getEth0IpV4Address() {
+        try {
+            Enumeration<NetworkInterface> enumeration = NetworkInterface.getNetworkInterfaces();
+            while (enumeration.hasMoreElements()) {
+                NetworkInterface network = enumeration.nextElement();
+                if (network == null || network.isVirtual() || !network.isUp() || network.isLoopback() || !network.getName().equalsIgnoreCase("eth0")) {
+                    continue;
+                } else {
+                    Enumeration<InetAddress> addresses = network.getInetAddresses();
+
+                    while (addresses.hasMoreElements()) {
+                        InetAddress address = addresses.nextElement();
+                        if (!address.isLoopbackAddress() && !address.isAnyLocalAddress()
+                                && !address.isLinkLocalAddress()) {
+                            String hostAddress = address.getHostAddress();
+                            if (hostAddress != null) {
+                                boolean isIPv4 = hostAddress.indexOf(':') < 0;
+                                if (isIPv4) return hostAddress;
+                            }
+
+                        }
+                    }
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return null;
+    }
+
+    /**
+     * @return 鑾峰彇鍏ㄩ儴鏈夋晥ip鍦板潃, 浼樺厛杩斿洖鏈夌嚎ip
+     */
+    public static String getIpV4Address(Context context) {
+
+        try {
+            String eth0IpV4Address = getEth0IpV4Address();
+            if (!TextUtils.isEmpty(eth0IpV4Address)) {
+                return eth0IpV4Address;
+            }
+            String wifiIpV4Address = getWifiIpV4Address(context);
+            if (!TextUtils.isEmpty(wifiIpV4Address)) {
+                return wifiIpV4Address;
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return null;
+    }
 }
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HDLLink.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HDLLink.java
index e5e993b..e84727d 100644
--- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HDLLink.java
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HDLLink.java
@@ -1,10 +1,20 @@
 package com.hdl.sdk.connect;
 
+import android.content.Context;
+
+import com.hdl.hdlhttp.HxHttpConfig;
 import com.hdl.sdk.common.utils.LogUtils;
 import com.hdl.sdk.common.utils.ThreadToolUtils;
+import com.hdl.sdk.connect.bean.request.DeviceAuthRequest;
 import com.hdl.sdk.connect.bean.request.DeviceControlRequest;
+import com.hdl.sdk.connect.bean.request.ListUploadRequest;
 import com.hdl.sdk.connect.callback.HDLLinkCallBack;
 import com.hdl.sdk.connect.callback.HDLLinkResponseCallBack;
+import com.hdl.sdk.connect.cloud.CallBackListener;
+import com.hdl.sdk.connect.cloud.HdlCloudApi;
+import com.hdl.sdk.connect.cloud.HdlCloudController;
+import com.hdl.sdk.connect.cloud.interceptor.EncryptInterceptor;
+import com.hdl.sdk.connect.cloud.interceptor.SmartHeaderInterceptor;
 import com.hdl.sdk.connect.config.HDLLinkConfig;
 import com.hdl.sdk.common.event.EventDispatcher;
 import com.hdl.sdk.common.event.EventListener;
@@ -15,6 +25,9 @@
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 
+import io.reactivex.rxjava3.disposables.Disposable;
+import okhttp3.logging.HttpLoggingInterceptor;
+
 /**
  * Created by jlchen on 11/15/21.
  *
@@ -24,13 +37,16 @@
     /**
      * instance
      */
-    private  static final HDLLink instance=new HDLLink();
+    private static final HDLLink instance = new HDLLink();
+
+    private String appKey, appSecret;
+
     /**
      * getInstance
      *
      * @return HDLLink
      */
-    public static  HDLLink getInstance() {
+    public static HDLLink getInstance() {
 //        if (instance == null) {
 //            synchronized (HDLLink.class) {
 //                if (instance == null) {
@@ -41,19 +57,38 @@
         return instance;
     }
 
+    public String getAppKey() {
+        return appKey;
+    }
+
+    public void setAppKey(String appKey) {
+        this.appKey = appKey;
+    }
+
+    public String getAppSecret() {
+        return appSecret;
+    }
+
+    public void setAppSecret(String appSecret) {
+        this.appSecret = appSecret;
+    }
+
     /**
      * 娉ㄥ唽鎵�鏈変富棰樻秷鎭殑鐩戝惉
+     *
      * @param listener
      */
-    public synchronized void registerAllTopicsListener(EventListener listener){
+    public synchronized void registerAllTopicsListener(EventListener listener) {
         EventDispatcher.getInstance().registerAllTopicsListener(listener);
     }
+
     /**
      * 鍙栨秷鎵�鏈変富棰樻秷鎭殑鐩戝惉
+     *
      * @param listener
      */
     public synchronized void removeAllTopicsListener(EventListener listener) {
-        if(listener == null) return;
+        if (listener == null) return;
         EventDispatcher.getInstance().removeAllTopicsListener(listener);
     }
 
@@ -61,10 +96,15 @@
     /**
      * 妫�娴嬫槸鍚﹀凡缁忚璇佽繃
      * 璁よ瘉閫氳繃鎵嶈兘杩涜璁惧鎺у埗
+     *
      * @return
      */
-    public boolean checkIfCertified(){
+    public boolean checkIfCertified() {
         return HDLLinkConfig.getInstance().checkIfCertified();
+    }
+
+    public void selectNetwork(String networkName) {
+        HDLLinkConfig.getInstance().setNetworkName(networkName);
     }
 
     /**
@@ -75,7 +115,7 @@
      */
     public void startAuthenticateRequest(AuthenticateRequest request, HDLLinkCallBack callBack) {
         LogUtils.i("鍙戦�佽璇佽姹�");
-        HDLAuthSocket.getInstance().startAuthenticateRequest(request,callBack);
+        HDLAuthSocket.getInstance().startAuthenticateRequest(request, callBack);
     }
 
     /**
@@ -89,26 +129,62 @@
         HDLAuthSocket.getInstance().sendAuthenticateRequest(ip, request, callBack);
     }
 
-    //    /**
-//     * 寮�濮嬫悳绱㈡墍鏈夌綉鍏筹紝鏈夌綉鍏冲洖澶嶅氨鍥炶皟锛屼笂灞傝嚜宸卞仛鍘婚噸鍒ゆ柇
-//     *
-//     * @param callBack 鍥炶皟
-//     */
-//    public void startSearchAllGateway(HDLAuthSocket.SearchGatewayCallBack callBack) {
-//
-//    }
-//
-//    /**
-//     * 鏆傚仠鎼滅储缃戝叧
-//     */
-//    public void endSearchAllGateway() {
-//
-//    }
+    /**
+     * 鍏ョ綉璁よ瘉缁撴灉鍙嶉
+     *
+     * @param mac       mac
+     * @param result    缁撴灉0/-1
+     * @param message   璁よ瘉淇℃伅
+     * @param auth_code 浜戠璁よ瘉code
+     * @param callBack  缁撴灉鍥炶皟
+     */
+    public void UploadDeviceAuth(String mac, String result, String message, String auth_code, HDLLinkCallBack callBack) {
+        HDLSocket.getInstance().UploadDeviceAuth(mac, result, message, auth_code, callBack);
+    }
+
+    /**
+     * 鐢宠璁惧瀵嗛挜(鏍规嵁璁惧MAC)
+     *
+     * @param supplier 鍘傚晢
+     * @param mac      璁惧mac
+     * @param spk      璁惧spk
+     * @param callBack 缁撴灉鍥炶皟
+     */
+    public void applyDeviceSecret(Context context, String appKey, String appSecret, String supplier, String mac, String spk, CallBackListener callBack) {
+        LogUtils.i("鐢宠璁惧瀵嗛挜");
+        HxHttpConfig.getInstance().init(context, HdlCloudApi.BASE_CHINA_URL)
+                .addInterceptor(
+                        new EncryptInterceptor(),
+                        new SmartHeaderInterceptor());
+        this.appKey = appKey;
+        this.appSecret = appSecret;
+
+        HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
+        httpLoggingInterceptor.level(HttpLoggingInterceptor.Level.BODY);
+
+        HxHttpConfig.getInstance()
+                //.addInterceptor(new HttpCacheInterceptor())
+                .addInterceptor(httpLoggingInterceptor).ignoreSSL();
+
+        HdlCloudController.applyDeviceSecret(supplier, mac, spk, callBack);
+    }
+
+    /**
+     * 閫氱煡鍒犻櫎骞堕��缃戝瓙璁惧
+     *
+     * @param oid      浠庣綉鍏筹紙璁惧锛塷id
+     * @param isForce  鏄惁寮哄埗閫�缃�
+     * @param callBack 缁撴灉鍥炶皟
+     */
+    public void deleteNetwork(String oid, boolean isForce, HDLLinkCallBack callBack) {
+        HDLSocket.getInstance().deleteNetwork(oid, isForce, callBack);
+    }
 
     /***********************涓夋柟璁惧璇峰厛璁よ瘉鎴愬姛 鍐嶈皟鐢ㄤ笅闈㈢殑鎺ュ彛鍜岀綉鍏抽�氫俊****************************/
     /**
      * 缁勬挱鎼滅储鎸囧畾缃戝叧鏄惁鍦ㄧ嚎锛屾悳绱㈠埌鍒欒繑鍥炴寚瀹氱殑缃戝叧瀵硅薄
-     * @param callBack  鍥炶皟
+     *
+     * @param callBack 鍥炶皟
      */
     public void searchGatewayMulticast(HDLAuthSocket.SearchGatewayCallBack callBack) {
         HDLAuthSocket.getInstance().searchGatewayMulticast(callBack);
@@ -116,7 +192,8 @@
 
     /**
      * 缁勬挱鎼滅储鎸囧畾缃戝叧鏄惁鍦ㄧ嚎锛屾悳绱㈠埌鍒欒繑鍥炴寚瀹氱殑缃戝叧瀵硅薄
-     * @param callBack  鍥炶皟
+     *
+     * @param callBack 鍥炶皟
      */
     public void searchGatewayBroadcast(HDLAuthSocket.SearchGatewayCallBack callBack) {
         HDLAuthSocket.getInstance().searchGatewayBroadcast(callBack);
@@ -148,7 +225,8 @@
 
     /**
      * 璁惧鎺у埗
-     * @param request 鎺у埗鐘舵�佸弬鏁�
+     *
+     * @param request  鎺у埗鐘舵�佸弬鏁�
      * @param callBack 缁撴灉鍥炶皟
      */
     public void propertyDown(List<DeviceControlRequest> request, HDLLinkCallBack callBack) {
@@ -157,7 +235,8 @@
 
     /**
      * 璇诲彇鐘舵��
-     * @param sids 璇锋眰鍙傛暟 鎸囧畾璇诲彇鐨勮澶噑id鍒楄〃
+     *
+     * @param sids     璇锋眰鍙傛暟 鎸囧畾璇诲彇鐨勮澶噑id鍒楄〃
      * @param callBack 鍥炶皟
      */
     public void propertyRead(List<String> sids, HDLLinkCallBack callBack) {
@@ -173,7 +252,8 @@
 
     /**
      * 鍦烘櫙鎺у埗
-     * @param sids 鍦烘櫙sid鍒楄〃
+     *
+     * @param sids     鍦烘櫙sid鍒楄〃
      * @param callBack 鍥炶皟
      */
     public void controlScene(List<String> sids, HDLLinkCallBack callBack) {
@@ -181,25 +261,37 @@
     }
 
     /**
+     * 涓婃姤oid鍒楄〃
+     *
+     * @param request  璁惧淇℃伅
+     * @param callBack 鍥炶皟
+     */
+    public void UploadOidList(ListUploadRequest request, HDLLinkCallBack callBack) {
+        HDLSocket.getInstance().UploadOidList(request, callBack);
+    }
+
+    /**
      * 閫氱敤UDP鍙戦�佹寚浠�
      * 1绉掓病鍝嶅簲灏辫浠栭噸鏂板彂閫�,閲嶈瘯3娆�
-     * @param topic 鍙戦�佹暟鎹�
-     * @param bodyStr body鍐呭
+     *
+     * @param topic    鍙戦�佹暟鎹�
+     * @param bodyStr  body鍐呭
      * @param callBack 鍥炶皟
      */
     public void udpSendMsg(String topic, String bodyStr, HDLLinkResponseCallBack callBack) {
-        HDLAuthSocket.getInstance().udpSendMsg(topic, bodyStr,false, callBack);
+        HDLAuthSocket.getInstance().udpSendMsg(topic, bodyStr, false, callBack);
     }
 
     /**
      * 閫氱敤骞挎挱UDP鍙戦�佹寚浠�
      * 1绉掓病鍝嶅簲灏辫浠栭噸鏂板彂閫�,閲嶈瘯3娆�
-     * @param topic 鍙戦�佹暟鎹�
-     * @param bodyStr body鍐呭
+     *
+     * @param topic    鍙戦�佹暟鎹�
+     * @param bodyStr  body鍐呭
      * @param callBack 鍥炶皟
      */
     public void udpBroadcastSendMsg(String topic, String bodyStr, HDLLinkResponseCallBack callBack) {
-        HDLAuthSocket.getInstance().udpSendMsg(topic, bodyStr,true, callBack);
+        HDLAuthSocket.getInstance().udpSendMsg(topic, bodyStr, true, callBack);
     }
 
     /**
@@ -218,28 +310,28 @@
     /**
      * 閫氱敤鍙戦�佹寚浠� 鍙彂涓�娆★紝涓嶇洃鍚洖澶嶏紝涓嶉噸鍙�
      *
-     * @param topic    鍙戦�佹暟鎹�
-     * @param bodyStr  鍥炲鐨勪富棰�
+     * @param topic   鍙戦�佹暟鎹�
+     * @param bodyStr 鍥炲鐨勪富棰�
      */
     public void udpSendMsg(String topic, String bodyStr) {
-        HDLAuthSocket.getInstance().udpSendMsg(topic, bodyStr,false);
+        HDLAuthSocket.getInstance().udpSendMsg(topic, bodyStr, false);
     }
 
     /**
      * 閫氱敤骞挎挱鍙戦�佹寚浠� 鍙彂涓�娆★紝涓嶇洃鍚洖澶嶏紝涓嶉噸鍙�
      *
-     * @param topic    鍙戦�佹暟鎹�
-     * @param bodyStr  鍥炲鐨勪富棰�
+     * @param topic   鍙戦�佹暟鎹�
+     * @param bodyStr 鍥炲鐨勪富棰�
      */
     public void udpBroadcastSendMsg(String topic, String bodyStr) {
-        HDLAuthSocket.getInstance().udpSendMsg(topic, bodyStr,true);
+        HDLAuthSocket.getInstance().udpSendMsg(topic, bodyStr, true);
     }
 
     /**
      * 閫氱敤TCP鍙戦�佹寚浠� 鍙彂涓�娆★紝涓嶇洃鍚洖澶嶏紝涓嶉噸鍙�
      *
-     * @param topic    鍙戦�佹暟鎹�
-     * @param bodyStr  鍥炲鐨勪富棰�
+     * @param topic   鍙戦�佹暟鎹�
+     * @param bodyStr 鍥炲鐨勪富棰�
      */
     public void tcpSendMsg(String topic, String bodyStr) {
         HDLAuthSocket.getInstance();//閫氳繃杩欎釜鍙互鍏堝垵濮嬪寲UDP鐩戝惉浜嬩欢
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/AuthenticateRequest.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/AuthenticateRequest.java
index e7ba0f3..6aac1aa 100644
--- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/AuthenticateRequest.java
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/AuthenticateRequest.java
@@ -1,5 +1,7 @@
 package com.hdl.sdk.connect.bean.request;
 
+import com.hdl.sdk.common.utils.SPUtils;
+
 import java.io.Serializable;
 
 /**
@@ -15,17 +17,37 @@
     private AuthenticateDeviceInfoBean objects;//褰撳墠璁惧鍩烘湰淇℃伅
     private AuthBean auth;//璁よ瘉淇℃伅
 
-    public String getID() { return id; }
-    public void setID(String value) { this.id = value; }
+    public String getID() {
+        return id;
+    }
 
-    public String getTimeStamp() { return time_stamp; }
-    public void setTimeStamp(String value) { this.time_stamp = value; }
+    public void setID(String value) {
+        this.id = value;
+    }
 
-    public AuthenticateDeviceInfoBean getObjects() { return objects; }
-    public void setObjects(AuthenticateDeviceInfoBean value) { this.objects = value; }
+    public String getTimeStamp() {
+        return time_stamp;
+    }
 
-    public AuthBean getAuth() { return auth; }
-    public void setAuth(AuthBean value) { this.auth = value; }
+    public void setTimeStamp(String value) {
+        this.time_stamp = value;
+    }
+
+    public AuthenticateDeviceInfoBean getObjects() {
+        return objects;
+    }
+
+    public void setObjects(AuthenticateDeviceInfoBean value) {
+        this.objects = value;
+    }
+
+    public AuthBean getAuth() {
+        return auth;
+    }
+
+    public void setAuth(AuthBean value) {
+        this.auth = value;
+    }
 
     public AuthenticateRequest(String id, String time_stamp, AuthenticateDeviceInfoBean objects, AuthBean auth) {
         this.id = id;
@@ -53,39 +75,58 @@
 
         /**
          * MAC key
+         *
          * @return
          */
-        public String getMACKey() { return mac_key; }
+        public String getMACKey() {
+            return mac_key;
+        }
 
         /**
          * MACkey
+         *
          * @param value
          */
-        public void setMACKey(String value) { this.mac_key = value; }
+        public void setMACKey(String value) {
+            this.mac_key = value;
+            SPUtils.put("auth_mackey_key", mac_key);
+        }
 
         /**
          * SPK
+         *
          * @return
          */
-        public String getSpk() { return spk; }
+        public String getSpk() {
+            return spk;
+        }
 
         /**
          * SPK
+         *
          * @param value
          */
-        public void setSpk(String value) { this.spk = value; }
+        public void setSpk(String value) {
+            this.spk = value;
+        }
 
-        public RequestBean getRequest() { return request; }
-        public void setRequest(RequestBean value) { this.request = value; }
+        public RequestBean getRequest() {
+            return request;
+        }
+
+        public void setRequest(RequestBean value) {
+            this.request = value;
+        }
 
         public AuthBean() {
 
         }
 
         /**
-         *  璁よ瘉淇℃伅
+         * 璁よ瘉淇℃伅
+         *
          * @param mac_key mac key
-         * @param spk 浜у搧spk
+         * @param spk     浜у搧spk
          * @param request 璇锋眰瀵硅薄
          */
         public AuthBean(String mac_key, String spk, RequestBean request) {
@@ -95,12 +136,17 @@
         }
     }
 
-    public static class RequestBean implements Serializable{
+    public static class RequestBean implements Serializable {
         private String mac;//璁惧mac
         private String supplier;//鍘傚
         private String hardware_model;//璁惧鍨嬪彿
         private String firmware_version;//绋嬪簭鐗堟湰
-        public RequestBean(){};
+
+        public RequestBean() {
+        }
+
+        ;
+
         public RequestBean(String mac, String supplier, String hardware_model, String firmware_version) {
             this.mac = mac;
             this.supplier = supplier;
@@ -110,54 +156,78 @@
 
         /**
          * 璁惧MAC
+         *
          * @return
          */
-        public String getMAC() { return mac; }
+        public String getMAC() {
+            return mac;
+        }
 
         /**
          * 璁惧MAC
+         *
          * @param value
          */
-        public void setMAC(String value) { this.mac = value; }
+        public void setMAC(String value) {
+            this.mac = value;
+        }
 
         /**
          * 鍘傚
+         *
          * @return
          */
-        public String getSupplier() { return supplier; }
+        public String getSupplier() {
+            return supplier;
+        }
 
         /**
          * 鍘傚
+         *
          * @param value
          */
-        public void setSupplier(String value) { this.supplier = value; }
+        public void setSupplier(String value) {
+            this.supplier = value;
+        }
 
         /**
          * 纭欢鐗堟湰
+         *
          * @return
          */
-        public String getHardwareModel() { return hardware_model; }
+        public String getHardwareModel() {
+            return hardware_model;
+        }
 
         /**
          * 纭欢鐗堟湰
+         *
          * @param value
          */
-        public void setHardwareModel(String value) { this.hardware_model = value; }
+        public void setHardwareModel(String value) {
+            this.hardware_model = value;
+        }
 
         /**
          * 杞欢鐗堟湰
+         *
          * @return
          */
-        public String getFirmwareVersion() { return firmware_version; }
+        public String getFirmwareVersion() {
+            return firmware_version;
+        }
 
         /**
          * 杞欢鐗堟湰
+         *
          * @param value
          */
-        public void setFirmwareVersion(String value) { this.firmware_version = value; }
+        public void setFirmwareVersion(String value) {
+            this.firmware_version = value;
+        }
     }
 
-    public static class AuthenticateDeviceInfoBean implements Serializable{
+    public static class AuthenticateDeviceInfoBean implements Serializable {
         private String oid;//璁惧鐨凮id
         private String device_mac;//璁惧鐨凪ac
         private String device_name;//
@@ -173,148 +243,232 @@
         private String gateway_type;
         private String hw_version;
         private String fw_version;
+        private String supplier;//鍘傚晢
 
-        public String getOID() { return oid; }
+        public String getSupplier() {
+            return supplier;
+        }
+
+        public void setSupplier(String supplier) {
+            this.supplier = supplier;
+        }
+
+        public String getOID() {
+            return oid;
+        }
 
         /**
          * 璁惧Oid
+         *
          * @param value
          */
-        public void setOID(String value) { this.oid = value; }
+        public void setOID(String value) {
+            this.oid = value;
+        }
 
-        public String getDeviceMAC() { return device_mac; }
+        public String getDeviceMAC() {
+            return device_mac;
+        }
 
         /**
          * 璁惧Mac
+         *
          * @param value
          */
-        public void setDeviceMAC(String value) { this.device_mac = value; }
+        public void setDeviceMAC(String value) {
+            this.device_mac = value;
+        }
 
         /**
          * 璁惧鍚�
+         *
          * @return
          */
-        public String getDeviceName() { return device_name; }
+        public String getDeviceName() {
+            return device_name;
+        }
 
         /**
          * 璁惧鍚�
+         *
          * @param value
          */
-        public void setDeviceName(String value) { this.device_name = value; }
+        public void setDeviceName(String value) {
+            this.device_name = value;
+        }
 
         /**
          * 璁惧鍨嬪彿
+         *
          * @return
          */
-        public String getDeviceModel() { return device_model; }
+        public String getDeviceModel() {
+            return device_model;
+        }
 
         /**
          * 璁惧鍨嬪彿
+         *
          * @param value
          */
-        public void setDeviceModel(String value) { this.device_model = value; }
+        public void setDeviceModel(String value) {
+            this.device_model = value;
+        }
 
         /**
          * 杩炴帴绫诲瀷锛屾湁绾胯繕鏄棤绾�
+         *
          * @return
          */
-        public String getAccessMode() { return access_mode; }
+        public String getAccessMode() {
+            return access_mode;
+        }
 
         /**
          * 杩炴帴绫诲瀷锛屾湁绾胯繕鏄棤绾�
+         *
          * @param value
          */
-        public void setAccessMode(String value) { this.access_mode = value; }
+        public void setAccessMode(String value) {
+            this.access_mode = value;
+        }
 
         /**
          * 璁惧sid
+         *
          * @return
          */
-        public String getSid() { return sid; }
+        public String getSid() {
+            return sid;
+        }
 
         /**
          * 璁惧sid
+         *
          * @param value
          */
-        public void setSid(String value) { this.sid = value; }
+        public void setSid(String value) {
+            this.sid = value;
+        }
 
         /**
          * 璁惧IPMAC
+         *
          * @return
          */
-        public String getIPMAC() { return ip_mac; }
+        public String getIPMAC() {
+            return ip_mac;
+        }
 
         /**
          * 璁惧IPMAC
+         *
          * @param value
          */
-        public void setIPMAC(String value) { this.ip_mac = value; }
+        public void setIPMAC(String value) {
+            this.ip_mac = value;
+        }
 
         /**
          * 璁惧IP鍦板潃
+         *
          * @return
          */
-        public String getIPAddress() { return ip_address; }
+        public String getIPAddress() {
+            return ip_address;
+        }
 
         /**
          * 璁惧IP鍦板潃
+         *
          * @param value
          */
-        public void setIPAddress(String value) { this.ip_address = value; }
+        public void setIPAddress(String value) {
+            this.ip_address = value;
+        }
 
         /**
          * 瀛愮綉鎺╃爜
+         *
          * @return
          */
-        public String getNetmask() { return netmask; }
+        public String getNetmask() {
+            return netmask;
+        }
 
         /**
          * 瀛愮綉鎺╃爜
+         *
          * @param value
          */
-        public void setNetmask(String value) { this.netmask = value; }
+        public void setNetmask(String value) {
+            this.netmask = value;
+        }
 
         /**
          * 缃戝叧IP
+         *
          * @return
          */
-        public String getIPGateway() { return ip_gateway; }
+        public String getIPGateway() {
+            return ip_gateway;
+        }
 
         /**
          * 缃戝叧IP
+         *
          * @param value
          */
-        public void setIPGateway(String value) { this.ip_gateway = value; }
+        public void setIPGateway(String value) {
+            this.ip_gateway = value;
+        }
 
         /**
          * DNS1
+         *
          * @return
          */
-        public String getDns1() { return dns1; }
+        public String getDns1() {
+            return dns1;
+        }
 
         /**
          * DNS1
+         *
          * @param value
          */
-        public void setDns1(String value) { this.dns1 = value; }
+        public void setDns1(String value) {
+            this.dns1 = value;
+        }
 
         /**
          * DNS2
+         *
          * @return
          */
-        public String getDns2() { return dns2; }
+        public String getDns2() {
+            return dns2;
+        }
 
         /**
          * DNS2
+         *
          * @param value
          */
-        public void setDns2(String value) { this.dns2 = value; }
+        public void setDns2(String value) {
+            this.dns2 = value;
+        }
 
-        public VersionBean[] getVersions() {return null;  }
-        public void setVersions(VersionBean[] value) {  }
+        public VersionBean[] getVersions() {
+            return null;
+        }
+
+        public void setVersions(VersionBean[] value) {
+        }
 
         /**
          * 缃戝叧绫诲瀷
+         *
          * @return
          */
         public String getGateway_type() {
@@ -323,6 +477,7 @@
 
         /**
          * 缃戝叧绫诲瀷
+         *
          * @param gateway_type
          */
         public void setGateway_type(String gateway_type) {
@@ -331,6 +486,7 @@
 
         /**
          * 纭欢鐗堟湰
+         *
          * @return
          */
         public String getHw_version() {
@@ -338,7 +494,8 @@
         }
 
         /**
-         *纭欢鐗堟湰
+         * 纭欢鐗堟湰
+         *
          * @param
          */
         public void setHw_version(String hw_version) {
@@ -348,6 +505,7 @@
 
         /**
          * 鍥轰欢鐗堟湰
+         *
          * @return
          */
         public String getFw_version() {
@@ -356,6 +514,7 @@
 
         /**
          * 鍥轰欢鐗堟湰
+         *
          * @param fw_version
          */
         public void setFw_version(String fw_version) {
@@ -363,7 +522,7 @@
         }
     }
 
-    public static class VersionBean implements Serializable{
+    public static class VersionBean implements Serializable {
         private String module;
         private String version;
 
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/DeviceAuthRequest.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/DeviceAuthRequest.java
new file mode 100644
index 0000000..57d8946
--- /dev/null
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/DeviceAuthRequest.java
@@ -0,0 +1,48 @@
+package com.hdl.sdk.connect.bean.request;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * Created by panlili on 2023/1/31
+ * description:
+ */
+public class DeviceAuthRequest {
+
+    private String mac;//mac
+    private String result;//0涓烘垚鍔燂紝-1涓哄け璐�
+    private String message;//success
+    private String auth_code;//浜戠璁よ瘉杩斿洖鐨刢ode
+
+    public String getMac() {
+        return mac;
+    }
+
+    public void setMac(String mac) {
+        this.mac = mac;
+    }
+
+    public String getResult() {
+        return result;
+    }
+
+    public void setResult(String result) {
+        this.result = result;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    public String getAuth_code() {
+        return auth_code;
+    }
+
+    public void setAuth_code(String auth_code) {
+        this.auth_code = auth_code;
+    }
+}
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/GatewayInfoRequest.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/GatewayInfoRequest.java
new file mode 100644
index 0000000..c750cc2
--- /dev/null
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/GatewayInfoRequest.java
@@ -0,0 +1,129 @@
+package com.hdl.sdk.connect.bean.request;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * Created by panlili on 2023/1/31
+ * description:
+ */
+public class GatewayInfoRequest {
+
+    private String device_model;
+    private String device_mac;//璁惧鐨凪ac
+    private String device_name;
+    private String gateway_type;//杩欓噷濉玸pk
+    private String access_mode;
+    private String oid;//璁惧鐨凮id
+    private String sid;//璁惧鐨剆id
+    private String supplier;//鍘傚晢
+    private String hw_version;
+    private String fw_version;
+    private String ip_address;
+    private String master;
+    private boolean isLocalEncrypt;
+
+    public String getOid() {
+        return oid;
+    }
+
+    public void setOid(String oid) {
+        this.oid = oid;
+    }
+
+    public String getDevice_name() {
+        return device_name;
+    }
+
+    public void setDevice_name(String device_name) {
+        this.device_name = device_name;
+    }
+
+    public String getDevice_model() {
+        return device_model;
+    }
+
+    public void setDevice_model(String device_model) {
+        this.device_model = device_model;
+    }
+
+    public String getDevice_mac() {
+        return device_mac;
+    }
+
+    public void setDevice_mac(String device_mac) {
+        this.device_mac = device_mac;
+    }
+
+    public String getGateway_type() {
+        return gateway_type;
+    }
+
+    public void setGateway_type(String gateway_type) {
+        this.gateway_type = gateway_type;
+    }
+
+    public String getAccess_mode() {
+        return access_mode;
+    }
+
+    public void setAccess_mode(String access_mode) {
+        this.access_mode = access_mode;
+    }
+
+    public String getSid() {
+        return sid;
+    }
+
+    public void setSid(String sid) {
+        this.sid = sid;
+    }
+
+    public String getSupplier() {
+        return supplier;
+    }
+
+    public void setSupplier(String supplier) {
+        this.supplier = supplier;
+    }
+
+    public String getHw_version() {
+        return hw_version;
+    }
+
+    public void setHw_version(String hw_version) {
+        this.hw_version = hw_version;
+    }
+
+    public String getFw_version() {
+        return fw_version;
+    }
+
+    public void setFw_version(String fw_version) {
+        this.fw_version = fw_version;
+    }
+
+    public String getIp_address() {
+        return ip_address;
+    }
+
+    public void setIp_address(String ip_address) {
+        this.ip_address = ip_address;
+    }
+
+    public String getMaster() {
+        return master;
+    }
+
+    public void setMaster(String master) {
+        this.master = master;
+    }
+
+    public boolean isLocalEncrypt() {
+        return isLocalEncrypt;
+    }
+
+    public void setLocalEncrypt(boolean localEncrypt) {
+        isLocalEncrypt = localEncrypt;
+    }
+}
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/ListOidRequest.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/ListOidRequest.java
new file mode 100644
index 0000000..164f569
--- /dev/null
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/ListOidRequest.java
@@ -0,0 +1,29 @@
+package com.hdl.sdk.connect.bean.request;
+
+import java.io.Serializable;
+
+/**
+ * Created by Tong on 2022/09/23.
+ */
+
+public class ListOidRequest implements Serializable {
+
+    private String oid;
+    private String mac;
+
+    public String getOid() {
+        return oid;
+    }
+
+    public void setOid(String oid) {
+        this.oid = oid;
+    }
+
+    public String getMac() {
+        return mac;
+    }
+
+    public void setMac(String mac) {
+        this.mac = mac;
+    }
+}
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/ListUploadRequest.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/ListUploadRequest.java
new file mode 100644
index 0000000..03e78a2
--- /dev/null
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/ListUploadRequest.java
@@ -0,0 +1,127 @@
+package com.hdl.sdk.connect.bean.request;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * Created by panlili on 2023/1/31
+ * description:
+ */
+public class ListUploadRequest {
+
+    private String oid;//璁惧鐨凮id
+    private String device_name;
+    private String device_model;
+    private String device_mac;//璁惧鐨凪ac
+    private String addresses;//椹卞姩鐢ㄧ殑绉佹湁鍦板潃锛屽娌℃湁鍒欑┖鐫�灏卞彲浠�
+    private String driver_code;//椹卞姩鐢ㄧ殑id锛屽娌℃湁鍒欑┖鐫�灏卞彲浠�
+    private String src;//鏉ヨ嚜鍝釜椹卞姩锛屽Link璁惧娌℃湁鍒欏~"LINK"
+    private String from;//鏉ヨ嚜鍝釜缃戝叧锛屽鏋滄椂Link缃戠粶璁惧锛屽垯濉嚜韬玱id锛涘鏋滄槸椹卞姩鍒欎笉闇�瑕佹瀛楁
+    private List<ImageInfo> image_info;
+
+    public String getOid() {
+        return oid;
+    }
+
+    public void setOid(String oid) {
+        this.oid = oid;
+    }
+
+    public String getDevice_name() {
+        return device_name;
+    }
+
+    public void setDevice_name(String device_name) {
+        this.device_name = device_name;
+    }
+
+    public String getDevice_model() {
+        return device_model;
+    }
+
+    public void setDevice_model(String device_model) {
+        this.device_model = device_model;
+    }
+
+    public String getDevice_mac() {
+        return device_mac;
+    }
+
+    public void setDevice_mac(String device_mac) {
+        this.device_mac = device_mac;
+    }
+
+    public String getAddresses() {
+        return addresses;
+    }
+
+    public void setAddresses(String addresses) {
+        this.addresses = addresses;
+    }
+
+    public String getDriver_code() {
+        return driver_code;
+    }
+
+    public void setDriver_code(String driver_code) {
+        this.driver_code = driver_code;
+    }
+
+    public String getSrc() {
+        return src;
+    }
+
+    public void setSrc(String src) {
+        this.src = src;
+    }
+
+    public String getFrom() {
+        return from;
+    }
+
+    public void setFrom(String from) {
+        this.from = from;
+    }
+
+    public List<ImageInfo> getImage_info() {
+        return image_info;
+    }
+
+    public void setImage_info(List<ImageInfo> image_info) {
+        this.image_info = image_info;
+    }
+
+    public static class ImageInfo implements Serializable {
+
+        //闀滃儚鍙凤紝鐢ㄤ簬鍗囩骇鍖归厤
+        private String image_info;
+
+        private String hw_version;
+
+        private String fw_version;
+
+        public String getImage_info() {
+            return image_info;
+        }
+
+        public void setImage_info(String image_info) {
+            this.image_info = image_info;
+        }
+
+        public String getHw_version() {
+            return hw_version;
+        }
+
+        public void setHw_version(String hw_version) {
+            this.hw_version = hw_version;
+        }
+
+        public String getFw_version() {
+            return fw_version;
+        }
+
+        public void setFw_version(String fw_version) {
+            this.fw_version = fw_version;
+        }
+    }
+}
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/AuthenticateResponse.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/AuthenticateResponse.java
index e2b8b07..1efcb5d 100644
--- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/AuthenticateResponse.java
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/AuthenticateResponse.java
@@ -11,21 +11,35 @@
     private String code;
     private GatewayObjects objects;
     private Auth auth;
+    private String ip_address;
 
     public String getCode() { return code; }
     public void setCode(String value) { this.code = value; }
 
     public GatewayObjects getObjects() { return objects; }
-    public void setObjects(GatewayObjects value) { this.objects = value; }
+    public void setObjects(GatewayObjects value) {
+        this.objects = value;
+    }
 
     public Auth getAuth() { return auth; }
     public void setAuth(Auth value) { this.auth = value; }
+
+    public String getIp_address() {
+        return ip_address;
+    }
+
+    public void setIp_address(String ip_address) {
+        this.ip_address = ip_address;
+    }
 
     public class Auth implements Serializable {
         private String localSecret;
 
         public String getLocalSecret() { return localSecret; }
-        public void setLocalSecret(String value) { this.localSecret = value; }
+        public void setLocalSecret(String value) {
+            this.localSecret = value;
+        }
+
     }
 
     public class GatewayObjects implements Serializable  {
@@ -34,10 +48,14 @@
         private String oid;
 
         public String getIPAddress() { return ip_address; }
-        public void setIPAddress(String value) { this.ip_address = value; }
+        public void setIPAddress(String value) {
+            this.ip_address = value;
+        }
 
         public String getGatewayID() { return gatewayId; }
-        public void setGatewayID(String value) { this.gatewayId = value; }
+        public void setGatewayID(String value) {
+            this.gatewayId = value;
+        }
 
         public String getOID() { return oid; }
         public void setOID(String value) { this.oid = value; }
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/DeviceInfoResponse.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/DeviceInfoResponse.java
index 7c7ed2c..b9ffbc6 100644
--- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/DeviceInfoResponse.java
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/DeviceInfoResponse.java
@@ -24,6 +24,7 @@
         private String oid;
         private String homeId;
         private String mac;
+        private String LocalSecret;
 
         public String getIPAddress() {
             return ip_address;
@@ -64,6 +65,14 @@
         public void setMac(String mac) {
             this.mac = mac;
         }
+
+        public String getLocalSecret() {
+            return LocalSecret;
+        }
+
+        public void setLocalSecret(String localSecret) {
+            LocalSecret = localSecret;
+        }
     }
 
 
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/NetworkAccessBroadcastResponse.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/NetworkAccessBroadcastResponse.java
index 9e01eba..8478008 100644
--- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/NetworkAccessBroadcastResponse.java
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/NetworkAccessBroadcastResponse.java
@@ -18,5 +18,4 @@
 
     public String getHomeID() { return homeId; }
     public void setHomeID(String value) { this.homeId = value; }
-
 }
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/BaseCallBack.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/BaseCallBack.java
new file mode 100644
index 0000000..9573604
--- /dev/null
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/BaseCallBack.java
@@ -0,0 +1,10 @@
+package com.hdl.sdk.connect.cloud;
+
+/**
+ * Created by Tong on 2021/11/8.
+ */
+public interface BaseCallBack {
+
+    void onError(HDLException e);
+
+}
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/BaseInfo.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/BaseInfo.java
new file mode 100644
index 0000000..b2df913
--- /dev/null
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/BaseInfo.java
@@ -0,0 +1,48 @@
+package com.hdl.sdk.connect.cloud;
+
+
+import java.io.Serializable;
+
+
+/**
+ * @Author : Zoro.
+ * @Date : 2019/6/9.
+ * @Describe :
+ */
+public class BaseInfo<T> implements Serializable {
+
+    private int code;
+    private T data;
+    private String message;
+
+    public BaseInfo(int code, T data) {
+        this.code = code;
+        this.data = data;
+    }
+
+    public int getCode() {
+        return code;
+    }
+
+    public void setCode(int code) {
+        this.code = code;
+    }
+
+    public T getData() {
+        return data;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    public void setData(T data) {
+        this.data = data;
+    }
+
+}
+
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/CallBackListener.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/CallBackListener.java
new file mode 100644
index 0000000..76a9346
--- /dev/null
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/CallBackListener.java
@@ -0,0 +1,8 @@
+package com.hdl.sdk.connect.cloud;
+
+/**
+ * Created by panlili on 2022/5/17.
+ */
+public interface CallBackListener extends BaseCallBack {
+    void onSuccess(String message);
+}
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/CloudLinkCode.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/CloudLinkCode.java
new file mode 100644
index 0000000..516df1d
--- /dev/null
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/CloudLinkCode.java
@@ -0,0 +1,46 @@
+package com.hdl.sdk.connect.cloud;
+
+/**
+ * Created by Tong on 2021/11/2.
+ */
+
+public @interface CloudLinkCode {
+
+    //鎴愬姛
+    int SUCCEED = 0;
+
+    //绯荤粺绻佸繖
+    int SYSTEM_BUSY = 1;
+
+    //绯荤粺缁存姢 2
+
+    //鏈嶅姟寮傚父 3
+
+    //绛惧悕閿欒 4
+
+    //鍙傛暟寮傚父 5
+
+    //token瓒呮椂
+    int TOKEN_TIMEOUT = 10001;
+    //10002 閲嶆柊鐧诲綍
+    int Re_Login = 10002;
+    //token涓嶅悎娉�
+    int TOKEN_NOT_STANDARD = 10003;
+    //缂哄皯token鍙傛暟
+    int NO_TOKEN = 10004;
+    //鐢ㄦ埛鍚嶆垨鑰呭瘑鐮侀敊璇� 10008
+    //鐢ㄦ埛宸茶绂佺敤 10009
+    //10010	鐢ㄦ埛涓嶅瓨鍦�
+    //10012	鐢ㄦ埛宸插瓨鍦紝涓嶈兘閲嶅娉ㄥ唽
+    //10404	浣忓畢鍞竴鏍囪瘑涓嶅瓨鍦�
+    //10506	缃戝叧涓嶅瓨鍦�
+    //10805	璁惧涓嶅瓨鍦�
+    //12005	搴旂敤涓嶅瓨鍦�
+    //20000	鎺у埗澶辫触
+    //20001	缃戝叧绂荤嚎
+    //20002	璁惧绂荤嚎
+    //20101	spk涓嶆敮鎸佽鍔熻兘灞炴��
+    //20102	spk涓嶆敮鎸佽鍔熻兘灞炴�у��
+
+
+}
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/GsonUtils.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/GsonUtils.java
new file mode 100644
index 0000000..22621cb
--- /dev/null
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/GsonUtils.java
@@ -0,0 +1,247 @@
+package com.hdl.sdk.connect.cloud;
+
+import androidx.annotation.NonNull;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonDeserializationContext;
+import com.google.gson.JsonDeserializer;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonParseException;
+import com.google.gson.JsonPrimitive;
+import com.google.gson.JsonSerializationContext;
+import com.google.gson.JsonSerializer;
+import com.google.gson.JsonSyntaxException;
+import com.google.gson.TypeAdapter;
+import com.google.gson.TypeAdapterFactory;
+import com.google.gson.reflect.TypeToken;
+import com.google.gson.stream.JsonReader;
+import com.google.gson.stream.JsonToken;
+import com.google.gson.stream.JsonWriter;
+
+import java.io.IOException;
+import java.lang.reflect.Type;
+
+/**
+ * Created by Tong on 2021/11/10.
+ */
+public class GsonUtils {
+
+    private static Gson gson;
+
+    public static <T> T copy(Object o, Class<T> type) {
+        return copy(o, TypeToken.get(type));
+    }
+
+    public static <T> T copy(Object o, TypeToken<T> type) {
+        return copy(o, type.getType());
+    }
+
+    public static <T> T copy(Object o, Type type) {
+        try {
+            Gson gson = getGson();
+            return gson.fromJson(gson.toJson(o), type);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+
+    public static <T> T fromJson(String json, Type type) {
+        try {
+            Gson gson = getGson();
+            return gson.fromJson(json, type);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    public static <T> T fromJson(String json, Class<T> type) {
+        try {
+            Gson gson = getGson();
+            return gson.fromJson(json, type);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    public static <T> T fromJson(String json) {
+        try {
+            Gson gson = getGson();
+            return gson.fromJson(json, new TypeToken<T>() {
+            }.getType());
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+
+    public static String toJson(Object object) {
+        try {
+            return getGson().toJson(object);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    public static Type getType(@NonNull final Type rawType, @NonNull final Type... typeArguments) {
+        return TypeToken.getParameterized(rawType, typeArguments).getType();
+    }
+
+
+    public static Gson getGson() {
+        if (gson == null) {
+            gson = new GsonBuilder()
+                    .disableHtmlEscaping()
+                    .registerTypeAdapterFactory(new NullStringToEmptyAdapterFactory())
+                    .registerTypeAdapter(String.class, new StringAdapter())
+                    .registerTypeAdapter(Integer.class, new IntegerDefaultAdapter())
+                    .registerTypeAdapter(Double.class, new DoubleDefaultAdapter())
+                    .registerTypeAdapter(Long.class, new LongDefaultAdapter())
+                    .create();
+        }
+        return gson;
+    }
+
+    /**
+     *
+     * @param o
+     * @param <T>
+     * @return
+     */
+    public static <T> JsonArray toJsonArray(Object o) {
+        try {
+            return getGson().fromJson(GsonUtils.toJson(o), new TypeToken<JsonArray>() {
+            }.getType());
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+    private static class StringAdapter implements JsonSerializer<String>, JsonDeserializer<String> {
+        @Override
+        public String deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
+                throws JsonParseException {
+            if (json instanceof JsonPrimitive) {
+                return json.getAsString();
+            } else {
+                return json.toString();
+            }
+        }
+
+        @Override
+        public JsonElement serialize(String src, Type typeOfSrc, JsonSerializationContext context) {
+            return new JsonPrimitive(src);
+        }
+    }
+
+
+    private static class IntegerDefaultAdapter implements JsonSerializer<Integer>, JsonDeserializer<Integer> {
+        @Override
+        public Integer deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
+                throws JsonParseException {
+            try {
+                if (json.getAsString().equals("") || json.getAsString().equals("null")) {
+                    return 0;
+                }
+            } catch (Exception ignore) {
+            }
+            try {
+                return json.getAsInt();
+            } catch (NumberFormatException e) {
+                throw new JsonSyntaxException(e);
+            }
+        }
+
+        @Override
+        public JsonElement serialize(Integer src, Type typeOfSrc, JsonSerializationContext context) {
+            return new JsonPrimitive(src);
+        }
+    }
+
+    private static class DoubleDefaultAdapter implements JsonSerializer<Double>, JsonDeserializer<Double> {
+        @Override
+        public Double deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
+            try {
+                if (json.getAsString().equals("") || json.getAsString().equals("null")) {
+                    return 0.00;
+                }
+            } catch (Exception ignore) {
+            }
+            try {
+                return json.getAsDouble();
+            } catch (NumberFormatException e) {
+                throw new JsonSyntaxException(e);
+            }
+        }
+
+        @Override
+        public JsonElement serialize(Double src, Type typeOfSrc, JsonSerializationContext context) {
+            return new JsonPrimitive(src);
+        }
+    }
+
+    private static class LongDefaultAdapter implements JsonSerializer<Long>, JsonDeserializer<Long> {
+        @Override
+        public Long deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
+                throws JsonParseException {
+            try {
+                if (json.getAsString().equals("") || json.getAsString().equals("null")) {
+                    return 0L;
+                }
+            } catch (Exception ignore) {
+            }
+            try {
+                return json.getAsLong();
+            } catch (NumberFormatException e) {
+                throw new JsonSyntaxException(e);
+            }
+        }
+
+        @Override
+        public JsonElement serialize(Long src, Type typeOfSrc, JsonSerializationContext context) {
+            return new JsonPrimitive(src);
+        }
+    }
+
+    private static class NullStringToEmptyAdapterFactory implements TypeAdapterFactory {
+
+        public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) {
+            Class<T> rawType = (Class<T>) type.getRawType();
+            if (rawType != String.class) {
+                return null;
+            }
+            return (TypeAdapter<T>) new StringNullAdapter();
+        }
+    }
+
+    public static class StringNullAdapter extends TypeAdapter<String> {
+
+        @Override
+        public String read(JsonReader reader) throws IOException {
+            if (reader.peek() == JsonToken.NULL) {
+                reader.nextNull();
+                return "";
+            }
+            return reader.nextString();
+        }
+
+        @Override
+        public void write(JsonWriter writer, String value) throws IOException {
+            if (value == null) {
+                writer.nullValue();
+                return;
+            }
+            writer.value(value);
+        }
+
+    }
+
+
+}
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/HDLException.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/HDLException.java
new file mode 100644
index 0000000..ec6a21a
--- /dev/null
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/HDLException.java
@@ -0,0 +1,114 @@
+package com.hdl.sdk.connect.cloud;
+
+import android.text.TextUtils;
+
+import androidx.annotation.IntDef;
+import androidx.annotation.Nullable;
+
+import com.hdl.hdlhttp.callback.HxException;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Created by Tong on 2021/11/8.
+ */
+public class HDLException extends RuntimeException {
+
+    private int code;
+    private String msg;
+
+    @Retention(RetentionPolicy.SOURCE)
+    @Target({ElementType.FIELD, ElementType.PARAMETER})
+    @IntDef({
+            ErrorCode.UNKNOWN,
+            ErrorCode.PARSE_ERROR,
+            ErrorCode.NETWORK_ERROR,
+            ErrorCode.HTTP_ERROR,
+            ErrorCode.SSL_ERROR,
+            ErrorCode.TIMEOUT_ERROR
+    })
+    public @interface ErrorCode {
+        //鏈煡閿欒
+        int UNKNOWN = -40000;
+        //瑙f瀽閿欒
+        int PARSE_ERROR = -40001;
+        //缃戠粶閿欒
+        int NETWORK_ERROR = -40002;
+        //鍗忚鍑洪敊
+        int HTTP_ERROR = -40003;
+        //璇佷功鍑洪敊
+        int SSL_ERROR = -40004;
+        //杩炴帴瓒呮椂
+        int TIMEOUT_ERROR = -40005;
+
+    }
+
+    private int getHxToErrorCode(@HxException.ErrorCode int hxCode) {
+        switch (hxCode) {
+            case HxException.ErrorCode.UNKNOWN:
+                return ErrorCode.UNKNOWN;
+            case HxException.ErrorCode.PARSE_ERROR:
+                return ErrorCode.PARSE_ERROR;
+            case HxException.ErrorCode.NETWORK_ERROR:
+                return ErrorCode.NETWORK_ERROR;
+            case HxException.ErrorCode.HTTP_ERROR:
+                return ErrorCode.HTTP_ERROR;
+            case HxException.ErrorCode.SSL_ERROR:
+                return ErrorCode.SSL_ERROR;
+            case HxException.ErrorCode.TIMEOUT_ERROR:
+                return ErrorCode.TIMEOUT_ERROR;
+        }
+        return ErrorCode.NETWORK_ERROR;
+    }
+
+    public HDLException(HxException exception) {
+        this.code = getHxToErrorCode(exception.getCode());
+        this.msg = exception.getMsg();
+    }
+
+
+    public HDLException(int code, String msg) {
+        this.code = code;
+        this.msg = msg;
+        if (!TextUtils.isEmpty(msg)) {
+            this.msg = msg;
+        } else {
+//            this.msg = HxHttpConfig.getInstance().getString(R.string.network_error);
+            this.msg = "缃戠粶鍙戠敓寮傚父锛岃绋嶅悗鍐嶈瘯";
+        }
+    }
+
+    public int getCode() {
+        return code;
+    }
+
+    public void setCode(int code) {
+        this.code = code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+
+    @Override
+    public String toString() {
+        return "HDLException{" +
+                "code=" + code +
+                ", msg='" + msg + '\'' +
+                '}';
+    }
+
+    @Nullable
+    @Override
+    public String getMessage() {
+        return msg;
+    }
+}
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/HDLResponse.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/HDLResponse.java
new file mode 100644
index 0000000..ee682ce
--- /dev/null
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/HDLResponse.java
@@ -0,0 +1,51 @@
+package com.hdl.sdk.connect.cloud;
+
+import com.hdl.hdlhttp.callback.HxException;
+import com.hdl.hdlhttp.response.GsonSubscribe;
+
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+
+
+/**
+ * Created by Tong on 2021/11/8.
+ */
+public abstract class HDLResponse<K> extends GsonSubscribe<BaseInfo<K>> {
+
+    public abstract void onResponse(K response);
+
+    public abstract void onFailure(HDLException e);
+
+    @Override
+    public void onNext(String s) {
+        try {
+            Type type = getClass().getGenericSuperclass();
+            if (type instanceof ParameterizedType) {
+                Type[] types = ((ParameterizedType) type).getActualTypeArguments();
+                ParameterizedTypeImpl parameterizedType = new ParameterizedTypeImpl(BaseInfo.class, types, BaseInfo.class);
+
+                BaseInfo<K> data = GsonUtils.fromJson(s,parameterizedType);
+                onSuccess(data);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            this.onError(HxException.handleException(e));
+        }
+    }
+
+    @Override
+    public final void onSuccess(BaseInfo<K> response) {
+        if (response.getCode() == CloudLinkCode.SUCCEED) {
+            onResponse(response.getData());
+        } else {
+            onFailure(new HDLException(response.getCode(), response.getMessage()));
+        }
+    }
+
+    @Override
+    public final void onError(HxException e) {
+        onFailure(new HDLException(e));
+    }
+
+
+}
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/HdlCloudApi.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/HdlCloudApi.java
new file mode 100644
index 0000000..fba726a
--- /dev/null
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/HdlCloudApi.java
@@ -0,0 +1,18 @@
+package com.hdl.sdk.connect.cloud;
+
+/**
+ * Created by panlili on 2023/1/30
+ * description:
+ */
+public class HdlCloudApi {
+
+    //姝e紡鐜
+    public static final String BASE_CHINA_URL = "https://china-gateway.hdlcontrol.com";
+
+    //娴嬭瘯鐜
+//    public static final String BASE_CHINA_URL = "https://test-gz.hdlcontrol.com";
+
+    //鐢宠璁惧瀵嗛挜(鏍规嵁璁惧MAC)
+    public static final String APPLY_DEVICE_SECRET = "/smart-open/third/device/authByMac";
+
+}
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/HdlCloudController.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/HdlCloudController.java
new file mode 100644
index 0000000..e7dff9c
--- /dev/null
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/HdlCloudController.java
@@ -0,0 +1,38 @@
+package com.hdl.sdk.connect.cloud;
+
+import com.hdl.hdlhttp.HxHttp;
+
+import io.reactivex.rxjava3.disposables.Disposable;
+
+/**
+ * Created by panlili on 2023/1/30
+ * description:
+ */
+public class HdlCloudController {
+
+    public static Disposable applyDeviceSecret(String supplier, String mac, String spk, CallBackListener callBack) {
+        return HxHttp.builder()
+                .url(HdlCloudApi.BASE_CHINA_URL + HdlCloudApi.APPLY_DEVICE_SECRET)
+                .params("supplier", supplier)
+                .params("mac", mac)
+                .params("spk", spk)
+                .build()
+                .post()
+                .subscribeWith(new HDLResponse<String>() {
+                    @Override
+                    public void onResponse(String response) {
+                        if (callBack != null) {
+                            callBack.onSuccess(response);
+                        }
+                    }
+
+                    @Override
+                    public void onFailure(HDLException e) {
+                        if (callBack != null) {
+                            callBack.onError(e);
+                        }
+                    }
+                });
+    }
+
+}
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/MD5Utils.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/MD5Utils.java
new file mode 100644
index 0000000..88cca98
--- /dev/null
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/MD5Utils.java
@@ -0,0 +1,121 @@
+package com.hdl.sdk.connect.cloud;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.UnsupportedEncodingException;
+import java.math.BigInteger;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+/**
+ * Created by Tong on 2021/11/3.
+ */
+public final class MD5Utils {
+
+    /**
+     * MD5杞瓧绗︿覆
+     */
+    public static String encodeMD5(String s) {
+        try {
+            MessageDigest digest = MessageDigest.getInstance("MD5");
+            digest.update(s.getBytes("UTF-8"));
+            byte[] messageDigest = digest.digest();
+            return toHexString(messageDigest);
+        } catch (NoSuchAlgorithmException | UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+        return "";
+    }
+
+    private static String toHexString(byte[] keyData) {
+        if (keyData == null) {
+            return null;
+        }
+        int expectedStringLen = keyData.length * 2;
+        StringBuilder sb = new StringBuilder(expectedStringLen);
+        for (byte keyDatum : keyData) {
+            String hexStr = Integer.toString(keyDatum & 0x00FF, 16);
+            if (hexStr.length() == 1) {
+                hexStr = "0" + hexStr;
+            }
+            sb.append(hexStr);
+        }
+        return sb.toString();
+    }
+
+    /**
+     * MD5杞瓧绗︿覆
+     * 棰濆鍊�
+     */
+    public static String encodeMD52(String s) {
+        char[] hexDigits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
+        try {
+            byte[] btInput = s.getBytes("utf-8");
+            MessageDigest digest = MessageDigest.getInstance("MD5");
+            digest.update(btInput);
+            byte[] md = digest.digest();
+            int j = md.length;
+            char[] str = new char[j * 2];
+            int k = 0;
+            for (byte byte0 : md) {
+                str[k++] = hexDigits[byte0 >>> 4 & 0xf];
+                str[k++] = hexDigits[byte0 & 0xf];
+            }
+            return new String(str);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    /**
+     * MD5鏂囦欢杞瓧绗︿覆
+     */
+    public static String encodeMD5(File f) {
+        if (!f.isFile()) {
+            return null;
+        }
+        MessageDigest digest;
+        byte[] buffer = new byte[1024];
+        int len;
+        try {
+            digest = MessageDigest.getInstance("MD5");
+            FileInputStream in = new FileInputStream(f);
+            while ((len = in.read(buffer, 0, 1024)) != -1) {
+                digest.update(buffer, 0, len);
+            }
+            in.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+        BigInteger bigInt = new BigInteger(1, digest.digest());
+        return bigInt.toString(16);
+    }
+
+    public static String encrypt(String raw) {
+        String md5Str = raw;
+        try {
+            MessageDigest md = MessageDigest.getInstance("MD5"); // 鍒涘缓涓�涓狹D5绠楁硶瀵硅薄
+            md.update(raw.getBytes()); // 缁欑畻娉曞璞″姞杞藉緟鍔犲瘑鐨勫師濮嬫暟鎹�
+            byte[] encryContext = md.digest(); // 璋冪敤digest鏂规硶瀹屾垚鍝堝笇璁$畻
+            int i;
+            StringBuffer buf = new StringBuffer("");
+            for (int offset = 0; offset < encryContext.length; offset++) {
+                i = encryContext[offset];
+                if (i < 0) {
+                    i += 256;
+                }
+                if (i < 16) {
+                    buf.append("0");
+                }
+                buf.append(Integer.toHexString(i)); // 鎶婂瓧鑺傛暟缁勯�愪綅杞崲涓哄崄鍏繘鍒舵暟
+            }
+            md5Str = buf.toString(); // 鎷艰鍔犲瘑瀛楃涓�
+        } catch (NoSuchAlgorithmException e) {
+            e.printStackTrace();
+        }
+        return md5Str.toUpperCase(); // 杈撳嚭澶у啓鐨勫姞瀵嗕覆
+    }
+
+}
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/ParameterizedTypeImpl.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/ParameterizedTypeImpl.java
new file mode 100644
index 0000000..e4fe075
--- /dev/null
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/ParameterizedTypeImpl.java
@@ -0,0 +1,43 @@
+package com.hdl.sdk.connect.cloud;
+
+import java.io.Serializable;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+
+/**
+ * Created by Tong on 2021/11/8.
+ */
+public class ParameterizedTypeImpl implements ParameterizedType, Serializable {
+
+    private final Type[] actualTypeArguments;
+    private final Type ownerType;
+    private final Type rawType;
+
+    /**
+     * @param rawType             鍘熷绫诲瀷
+     * @param actualTypeArguments 瀹為檯鐨勬硾鍨嬪弬鏁扮被鍨�
+     * @param ownerType           鎷ユ湁鑰呯被鍨�
+     */
+    public ParameterizedTypeImpl(Type rawType, Type[] actualTypeArguments, Type ownerType) {
+        this.actualTypeArguments = actualTypeArguments;
+        this.ownerType = ownerType;
+        this.rawType = rawType;
+    }
+
+    @Override
+    public Type[] getActualTypeArguments() {
+        return actualTypeArguments;
+    }
+
+    @Override
+    public Type getOwnerType() {
+        return ownerType;
+    }
+
+    @Override
+    public Type getRawType() {
+        return rawType;
+    }
+
+
+}
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/interceptor/EncryptInterceptor.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/interceptor/EncryptInterceptor.java
new file mode 100644
index 0000000..9a83b75
--- /dev/null
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/interceptor/EncryptInterceptor.java
@@ -0,0 +1,175 @@
+package com.hdl.sdk.connect.cloud.interceptor;
+
+import android.net.Uri;
+import android.text.TextUtils;
+
+import androidx.annotation.NonNull;
+
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+import com.google.gson.reflect.TypeToken;
+import com.hdl.sdk.connect.HDLLink;
+import com.hdl.sdk.connect.cloud.GsonUtils;
+import com.hdl.sdk.connect.cloud.MD5Utils;
+
+import java.io.IOException;
+import java.net.URLDecoder;
+import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+import okhttp3.FormBody;
+import okhttp3.Headers;
+import okhttp3.Interceptor;
+import okhttp3.MediaType;
+import okhttp3.Request;
+import okhttp3.RequestBody;
+import okhttp3.Response;
+import okio.Buffer;
+
+/**
+ * Created by Tong on 2021/11/4.
+ * 鍔犲瘑骞惰嚜鍔ㄨˉ鍏呭弬鏁�,appKey銆乼imestamp
+ * 鍙敮鎸佽〃鍗曘�乯son
+ * 鏈�缁坖son鏂瑰紡鎻愪氦
+ */
+public class EncryptInterceptor implements Interceptor {
+
+
+    @NonNull
+    @Override
+    public Response intercept(@NonNull Chain chain) throws IOException {
+        Request request = chain.request();
+        Headers headers = request.headers();
+        if (!isIgnoreSignHeader(headers)) {
+            return chain.proceed(encrypt(request));
+        }
+
+        return chain.proceed(request);
+    }
+
+
+    /**
+     * 娣诲姞sign瀛楁
+     */
+    private Request encrypt(Request request) {
+        final String timestamp = String.valueOf(System.currentTimeMillis());
+        final String appKey = HDLLink.getInstance().getAppKey();
+        final String appSecret = HDLLink.getInstance().getAppSecret();
+        final JsonObject json = getBodyJson(request);
+        if (json != null) {
+            json.addProperty("appKey", appKey);
+            json.addProperty("timestamp", timestamp);
+            json.addProperty("sign", getSign(json, appSecret));
+            final RequestBody requestBody = RequestBody.create(json.toString(), MediaType.parse("application/json;charset=UTF-8"));
+            return request.newBuilder().post(requestBody)
+                    .build();
+        }
+        return request;
+    }
+
+    /**
+     * 闇�瑕佹寜瀛楁瘝鎺掑簭
+     *
+     * @param json 鎵�鏈夊瓧娈典娇鐢╱rlParameter鎷兼帴锛岄櫎浜哸ppSecret
+     */
+    private String getSign(JsonObject json, String appSecret) {
+        String builder = jsonToUrlParameter(json) +
+                appSecret;
+        return MD5Utils.encodeMD5(builder);
+    }
+
+
+    /**
+     * 鏄惁蹇界暐鑷畾涔夌殑鍔犲瘑澶�
+     */
+    private boolean isIgnoreSignHeader(Headers headers) {
+        String signHeader = headers.get(SmartHeader.IGNORE_SIGN_HEADER);
+        return !TextUtils.isEmpty(signHeader);
+    }
+
+    private JsonObject getBodyJson(Request request) {
+        RequestBody body = request.body();
+        if (body instanceof FormBody) {
+            JsonObject object = new JsonObject();
+            FormBody formBody = (FormBody) body;
+            for (int i = 0; i < formBody.size(); i++) {
+                object.addProperty(formBody.name(i), formBody.value(i));
+            }
+            return object;
+        } else {
+            //json鏍煎紡
+            try {
+                String bodyString = getBodyString(request);
+                if (!TextUtils.isEmpty(bodyString)) {
+                    final JsonElement parseString = JsonParser.parseString(bodyString);
+                    return parseString.getAsJsonObject();
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+
+        }
+        return null;
+    }
+
+    private String getBodyString(Request request) {
+        try {
+            RequestBody body = request.body();
+            if (body != null) {
+                Buffer buffer = new Buffer();
+                body.writeTo(buffer);
+                Charset charset = Charset.forName("UTF-8");
+                MediaType contentType = body.contentType();
+                charset = contentType.charset(charset);
+                return buffer.readString(charset);
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return "";
+    }
+
+
+
+
+
+    private String jsonToUrlParameter(JsonObject object) {
+        final Map<String, String> map = GsonUtils.getGson().fromJson(object, new TypeToken<Map<String, String>>() {
+        }.getType());
+        final Uri.Builder builder = new Uri.Builder();
+        List<String> list = new ArrayList<>(map.keySet());
+        Collections.sort(list);
+        for (String key : list) {
+            String value = map.get(key);
+            if (valueNeedSign(value)) {
+                builder.appendQueryParameter(key, value);
+            }
+        }
+        return builder.build().getQuery();
+    }
+
+
+    /**
+     * 鍒ゆ柇褰撳墠鍊兼槸鍚﹂渶瑕佸弬涓庣鍚嶏紝淇濇寔璺熶簯绔竴鑷�
+     * 绌哄瓧绗︿覆涓嶅弬涓�
+     * 鏁扮粍,闆嗗悎涓嶅弬涓�
+     *
+     * @return ture 闇�瑕佸姞瀵�
+     */
+    private static boolean valueNeedSign(String valueStr) {
+        try {
+            if (TextUtils.isEmpty(valueStr)) return false;
+            final char[] strChar = URLDecoder.decode(valueStr, "utf-8")
+                    .substring(0, 1).toCharArray();
+            final char firstChar = strChar[0];
+            return firstChar != '{' && firstChar != '[';
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return false;
+    }
+}
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/interceptor/SmartHeader.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/interceptor/SmartHeader.java
new file mode 100644
index 0000000..8c1616b
--- /dev/null
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/interceptor/SmartHeader.java
@@ -0,0 +1,16 @@
+package com.hdl.sdk.connect.cloud.interceptor;
+
+/**
+ * Created by Tong on 2021/11/8.
+ * 鎷︽埅鍣ㄦ爣璇�
+ */
+public class SmartHeader {
+
+    //榛樿鎼哄甫鍔犲瘑銆佽В瀵嗕互鍙婃椂闂存埑锛屼娇鐢�"IGNORE_SIGN_HEADER"鍙互灞忚斀
+    public static final String IGNORE_SIGN_HEADER = "IgnoreSignHeader";
+
+    //鍦ㄥ埛鏂癟oken
+    public static final String REFRESH_TOKEN_HEADER = "RefreshTokenHeader";
+
+
+}
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/interceptor/SmartHeaderInterceptor.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/interceptor/SmartHeaderInterceptor.java
new file mode 100644
index 0000000..9f7107d
--- /dev/null
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/interceptor/SmartHeaderInterceptor.java
@@ -0,0 +1,27 @@
+package com.hdl.sdk.connect.cloud.interceptor;
+
+import androidx.annotation.NonNull;
+
+import java.io.IOException;
+
+import okhttp3.Interceptor;
+import okhttp3.Request;
+import okhttp3.Response;
+
+/**
+ * Created by Tong on 2021/11/9.
+ * 鍒犻櫎鑷畾涔夊ご
+ */
+public class SmartHeaderInterceptor implements Interceptor {
+
+
+    @NonNull
+    @Override
+    public Response intercept(@NonNull Chain chain) throws IOException {
+        Request request = chain.request().newBuilder()
+                .removeHeader(SmartHeader.IGNORE_SIGN_HEADER)
+                .removeHeader(SmartHeader.REFRESH_TOKEN_HEADER).build();
+        return chain.proceed(request);
+    }
+
+}
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/config/HDLLinkConfig.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/config/HDLLinkConfig.java
index bfe3d60..7b8c005 100644
--- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/config/HDLLinkConfig.java
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/config/HDLLinkConfig.java
@@ -24,8 +24,11 @@
     private String gatewayId;
     private String ipAddress;
     private GatewaySearchBean currentGateway;//褰撳墠缃戝叧
+    private String networkName;
 
     private AuthenticateRequest.AuthenticateDeviceInfoBean deviceInfoBean;//褰撳墠璁惧鍩烘湰淇℃伅
+    private AuthenticateRequest.RequestBean requestBean;//褰撳墠璁惧鍩烘湰淇℃伅
+    private AuthenticateRequest.AuthBean authBean;//褰撳墠璁惧璁よ瘉淇℃伅
 
     /**
      * instance
@@ -105,9 +108,10 @@
      */
     public boolean checkIfCertified() {
         //localSecret涓嶄负绌哄苟涓旈暱搴︾瓑浜�16 缃戝叧id涓嶈兘涓虹┖
-        return !TextUtils.isEmpty(localSecret)
-                && localSecret.length() == 16
-                && !TextUtils.isEmpty(gatewayId);
+        return !TextUtils.isEmpty(gatewayId);
+//        return !TextUtils.isEmpty(localSecret)
+//                && localSecret.length() == 16
+//                && !TextUtils.isEmpty(gatewayId);
     }
 
     public void setLocalSecret(String localSecret) {
@@ -131,6 +135,14 @@
     }
     public void setIpAddress(String ipAddress){
         this.ipAddress = ipAddress;
+    }
+
+    public String getNetworkName() {
+        return networkName;
+    }
+
+    public void setNetworkName(String networkName) {
+        this.networkName = networkName;
     }
 
     public GatewaySearchBean getCurrentGateway() {
@@ -181,4 +193,20 @@
     public void setDeviceInfoBean(AuthenticateRequest.AuthenticateDeviceInfoBean deviceInfoBean) {
         this.deviceInfoBean = deviceInfoBean;
     }
+
+    public AuthenticateRequest.RequestBean getRequestBean() {
+        return requestBean;
+    }
+
+    public void setRequestBean(AuthenticateRequest.RequestBean requestBean) {
+        this.requestBean = requestBean;
+    }
+
+    public AuthenticateRequest.AuthBean getAuthBean() {
+        return authBean;
+    }
+
+    public void setAuthBean(AuthenticateRequest.AuthBean authBean) {
+        this.authBean = authBean;
+    }
 }
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/protocol/LinkMessageDecoder.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/protocol/LinkMessageDecoder.java
index 20df34d..e5eebc8 100644
--- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/protocol/LinkMessageDecoder.java
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/protocol/LinkMessageDecoder.java
@@ -2,18 +2,34 @@
 
 
 import android.os.Build;
+import android.text.TextUtils;
+import android.util.Log;
 
+import androidx.annotation.RequiresApi;
+
+import com.google.gson.reflect.TypeToken;
+import com.hdl.sdk.common.config.TopicConstant;
 import com.hdl.sdk.common.event.EventDispatcher;
+import com.hdl.sdk.common.exception.HDLLinkException;
 import com.hdl.sdk.common.utils.ByteUtils;
 import com.hdl.sdk.common.utils.LogUtils;
+import com.hdl.sdk.common.utils.SPUtils;
+import com.hdl.sdk.common.utils.gson.GsonConvert;
 import com.hdl.sdk.connect.bean.LinkResponse;
+import com.hdl.sdk.connect.bean.request.AuthenticateRequest;
+import com.hdl.sdk.connect.bean.response.DeviceInfoResponse;
+import com.hdl.sdk.connect.callback.HDLLinkCallBack;
 import com.hdl.sdk.connect.config.HDLLinkConfig;
+import com.hdl.sdk.connect.socket.HDLAuthSocket;
+import com.hdl.sdk.connect.socket.HDLSocket;
 import com.hdl.sdk.connect.utils.AesUtil;
 import com.hdl.sdk.socket.codec.ByteToMessageDecoder;
 
 import java.util.ArrayList;
 import java.util.Base64;
 import java.util.List;
+
+import kotlin.ParameterName;
 
 /**
  * Created by Tong on 2021/9/22.
@@ -112,6 +128,7 @@
     }
 
 
+    @RequiresApi(api = Build.VERSION_CODES.O)
     @Override
     protected synchronized LinkResponse decoder(Object msg, String ipaddress) throws Exception {
         if (msg instanceof byte[]) {
@@ -176,6 +193,42 @@
                 String bodyString = new String(body, "utf-8");
                 response.setData(bodyString);
                 LogUtils.i("鎺ユ敹鍒版暟鎹�:" + response.getTopic() + "\r\n" + response.getData());
+
+                String receivetopic = String.format(TopicConstant.LINK_BROADCAST, HDLLinkConfig.getInstance().getGatewayId());
+
+                if (response.getTopic().equals("/user/all/custom/gateway/search")) {
+                    HDLAuthSocket.getInstance().UploadGatewayInfo(new HDLLinkCallBack() {
+                        @Override
+                        public void onSuccess(String msg) {
+                            LogUtils.i("UploadGatewayInfo onSucceed");
+                        }
+
+                        @Override
+                        public void onError(HDLLinkException e) {
+                            LogUtils.i("UploadGatewayInfo onError");
+                        }
+                    });
+                } else if (response.getTopic().equals(receivetopic)) {
+                    try {
+                        DeviceInfoResponse deviceInfoResponse = GsonConvert.getGson().fromJson(response.getData(), new TypeToken<DeviceInfoResponse>() {
+                        }.getType());
+
+                        if (!TextUtils.isEmpty(deviceInfoResponse.getObjects().getLocalSecret())) {
+                            byte[] baseBytes = Base64.getDecoder().decode(deviceInfoResponse.getObjects().getLocalSecret());
+                            String mackey = "";
+                            if (!TextUtils.isEmpty(SPUtils.getString("auth_mackey_key", ""))) {
+                                mackey = SPUtils.getString("auth_mackey_key", "");
+                                byte[] bodyBytes = AesUtil.aesDecrypt(baseBytes, mackey.substring(mackey.length() - 16));
+                                String localSecret = new String(bodyBytes, "utf-8");
+                                Log.d("panlili", "LinkMessageDecoder.java:----->localSecret= " + localSecret);
+                                HDLLinkConfig.getInstance().setLocalSecret(localSecret);
+                            }
+                        }
+                    } catch (Exception e) {
+                        LogUtils.i("LinkMessageDecoder.java:getLocalSecret----->e= " + e.getMessage());
+                    }
+                }
+
                 //闈炴甯告暟鎹紝杩斿洖
                 if (!((bodyString.startsWith("{") && bodyString.endsWith("}"))
                         || (bodyString.startsWith("[") && bodyString.endsWith("]")))) {
@@ -185,67 +238,6 @@
                 EventDispatcher.getInstance().post(response.getTopic(), response);
             }
             return null;
-
-//            //瑙f瀽娴�
-//            byte[] data = (byte[]) msg;
-//            bytes.addAll(ByteUtils.toByteList(data));
-//
-//            byte[] byteArray = ByteUtils.toByteArray(bytes);
-//            int headIndex = ByteUtils.getByteIndexOf(byteArray, head);
-//            if (headIndex > 0) {
-//                //绉诲姩鍒癶ead 寮�濮嬩綅缃�
-//                bytes.subList(0, headIndex).clear();
-//                byteArray = ByteUtils.toByteArray(bytes);
-//            }
-//
-//            int bodyIndex = ByteUtils.getByteIndexOf(byteArray, body);
-//            if (bodyIndex < 0) {
-//                //澶撮儴鏈幏鍙栧畬鎴�
-//                return null;
-//            }
-//            int bodyStartIndex = bodyIndex + body.length;
-//
-//            //瑙f瀽澶撮儴
-//            ProtocolParse parse = new ProtocolParse(byteArray);
-//            response.setTopic(parse.getTopic());
-//
-//            int bodyLength = parse.getLength();
-//            if (bodyLength > 0) {
-//                if (byteArray.length >= bodyLength + bodyStartIndex) {
-//                    byte[] body = ByteUtils.getRangeBytes(bytes, bodyStartIndex, bodyStartIndex + bodyLength);
-//
-//                    if (HDLLinkConfig.getInstance().ifNeedEncrypt(response.getTopic())) {
-//                        //闇�瑕佽В瀵�
-//                        byte[] bodyBytes = AesUtil.aesDecrypt(body, HDLLinkConfig.getInstance().getLocalSecret());
-////                        byte[] bodyBytes = AESUtils.decryptAES(body,AuthenticateConfig.getInstance().getLocalSecret());
-//                        if (bodyBytes != null) {
-//                            response.setData(new String(bodyBytes, "utf-8"));
-////                            LogUtils.i("TAG", "瑙e瘑 涓婚锛�"+response.getTopic()+ " body: "+response.getData());
-//                        } else {
-//                            //瑙e瘑澶辫触锛岃繑鍥炲師鏁版嵁
-//                            response.setData(new String(body, "utf-8"));
-//                        }
-//
-//                    } else {
-//                        response.setData(new String(body, "utf-8"));
-//                    }
-//
-//                    if (byteArray.length >= bodyLength + bodyStartIndex) {
-//                        //淇濆瓨浣欑暀
-//                        byte[] remaining = ByteUtils.getRangeBytes(bytes, bodyStartIndex + bodyLength, byteArray.length);
-//                        bytes.clear();
-//                        for (byte b : remaining) {
-//                            bytes.add(b);
-//                        }
-//                    }
-//                    //瑙f瀽瀹屾垚,topic鍙戦�佷竴娆�
-//                    EventDispatcher.getInstance().post(response.getTopic(), response);
-//                    return response;
-//                }
-//            } else if (bodyLength == 0) {
-//                //body涓虹┖
-//                return response;
-//            }
 
         }
         return null;
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java
index 2463e98..5395316 100644
--- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java
@@ -1,33 +1,38 @@
 package com.hdl.sdk.connect.socket;
 
+import static com.hdl.sdk.common.config.TopicConstant.DEIVCE_AUTH_REQUEST;
+
 import android.text.TextUtils;
+import android.util.Log;
 
 import com.google.gson.Gson;
+import com.google.gson.JsonArray;
 import com.google.gson.JsonObject;
 import com.google.gson.reflect.TypeToken;
+import com.hdl.sdk.common.HDLSdk;
+import com.hdl.sdk.common.config.TopicConstant;
 import com.hdl.sdk.common.event.EventDispatcher;
 import com.hdl.sdk.common.event.EventListener;
 import com.hdl.sdk.common.exception.HDLLinkCode;
 import com.hdl.sdk.common.exception.HDLLinkException;
+import com.hdl.sdk.common.utils.IdUtils;
+import com.hdl.sdk.common.utils.IpUtils;
 import com.hdl.sdk.common.utils.LogUtils;
 import com.hdl.sdk.common.utils.ThreadToolUtils;
-import com.hdl.sdk.connect.HDLLink;
+import com.hdl.sdk.common.utils.gson.GsonConvert;
+import com.hdl.sdk.connect.bean.LinkRequest;
+import com.hdl.sdk.connect.bean.LinkResponse;
+import com.hdl.sdk.connect.bean.request.AuthenticateRequest;
+import com.hdl.sdk.connect.bean.request.DeviceControlRequest;
+import com.hdl.sdk.connect.bean.request.GatewayInfoRequest;
 import com.hdl.sdk.connect.bean.response.AuthenticateResponse;
+import com.hdl.sdk.connect.bean.response.BaseLocalResponse;
+import com.hdl.sdk.connect.bean.response.GatewaySearchBean;
 import com.hdl.sdk.connect.bean.response.NetworkAccessBroadcastResponse;
 import com.hdl.sdk.connect.callback.BaseCallBack;
 import com.hdl.sdk.connect.callback.HDLLinkCallBack;
 import com.hdl.sdk.connect.callback.HDLLinkResponseCallBack;
 import com.hdl.sdk.connect.config.HDLLinkConfig;
-import com.hdl.sdk.common.config.TopicConstant;
-import com.hdl.sdk.common.utils.IdUtils;
-import com.hdl.sdk.common.utils.IpUtils;
-import com.hdl.sdk.common.utils.gson.GsonConvert;
-import com.hdl.sdk.connect.bean.request.AuthenticateRequest;
-import com.hdl.sdk.connect.bean.response.BaseLocalResponse;
-import com.hdl.sdk.connect.bean.request.DeviceControlRequest;
-import com.hdl.sdk.connect.bean.response.GatewaySearchBean;
-import com.hdl.sdk.connect.bean.LinkRequest;
-import com.hdl.sdk.connect.bean.LinkResponse;
 import com.hdl.sdk.connect.protocol.LinkMessageDecoder;
 import com.hdl.sdk.connect.protocol.LinkMessageEncoder;
 import com.hdl.sdk.socket.client.UdpClient;
@@ -35,12 +40,9 @@
 import com.hdl.sdk.socket.udp.UdpSocketBoot;
 import com.hdl.sdk.socket.udp.UdpSocketOptions;
 
-import java.net.InetSocketAddress;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
-
-import static com.hdl.sdk.common.config.TopicConstant.DEIVCE_AUTH_REQUEST;
 
 /**
  * Created by jlchen on 11/11/21.
@@ -68,7 +70,7 @@
     /**
      * instance
      */
-    private  static final HDLAuthSocket instance=new HDLAuthSocket();
+    private static final HDLAuthSocket instance = new HDLAuthSocket();
 
     private HDLAuthSocket() {
         initListenerGatewayEvent();
@@ -84,7 +86,7 @@
      *
      * @return HDLAuthSocket
      */
-    public  static HDLAuthSocket getInstance() {
+    public static HDLAuthSocket getInstance() {
 //        if (instance == null) {
 //            synchronized (HDLAuthSocket.class) {
 //        if (instance == null) {
@@ -119,10 +121,14 @@
                 LogUtils.i("鍒濆鍖朣ocket udp");
             }
         } catch (Exception e) {
-              LogUtils.e("鍒濆鍖朣ocket udp寮傚父"+e.getMessage());
+            LogUtils.e("鍒濆鍖朣ocket udp寮傚父" + e.getMessage());
         }
 
         return udpSocketBoot;
+    }
+
+    public void init() {
+        getUdpBoot();
     }
 
     /**
@@ -148,6 +154,7 @@
                     //绉婚櫎鐩戝惉
                     EventDispatcher.getInstance().remove(TopicConstant.GATEWAY_AUTH_BROADCAST);
                     LogUtils.i("缃戝叧鍏ョ綉骞挎挱IP: " + bean.getIPAddress());
+                    HDLLinkConfig.getInstance().setIpAddress(bean.getIPAddress());
                     String ipStr = bean.getIPAddress();
                     if (!TextUtils.isEmpty(ipStr)) {
                         sendAuthenticateRequest(ipStr, request, callBack);
@@ -164,6 +171,64 @@
     public void endAuthenticateRequest() {
         //绉婚櫎鐩戝惉
         EventDispatcher.getInstance().remove(TopicConstant.GATEWAY_AUTH_BROADCAST);
+    }
+
+    /**
+     * 涓婃姤浠庣綉鍏充俊鎭�
+     *
+     * @param callBack 鍥炶皟
+     */
+    public void UploadGatewayInfo(HDLLinkCallBack callBack) {
+        String time = String.valueOf(System.currentTimeMillis());
+        final BaseLocalResponse<GatewayInfoRequest> data = new BaseLocalResponse<>();
+        data.setId(IdUtils.getUUId());
+        data.setTime_stamp(time);
+
+        final GatewayInfoRequest request = new GatewayInfoRequest();
+        AuthenticateRequest.AuthenticateDeviceInfoBean authenticateDeviceInfoBean = HDLLinkConfig.getInstance().getDeviceInfoBean();
+        request.setDevice_model(authenticateDeviceInfoBean.getDeviceModel());
+        request.setDevice_mac(authenticateDeviceInfoBean.getDeviceMAC());
+        request.setDevice_name(authenticateDeviceInfoBean.getDeviceName());
+        request.setGateway_type(authenticateDeviceInfoBean.getGateway_type());
+        request.setAccess_mode(authenticateDeviceInfoBean.getAccessMode());
+        request.setOid(authenticateDeviceInfoBean.getOID());
+        request.setSid(authenticateDeviceInfoBean.getSid());
+        request.setSupplier(authenticateDeviceInfoBean.getSupplier());
+
+        if (authenticateDeviceInfoBean.getSupplier() == null) {
+            AuthenticateRequest.RequestBean requestBean = HDLLinkConfig.getInstance().getRequestBean();
+            request.setSupplier(requestBean.getSupplier());
+        }
+
+        request.setHw_version(authenticateDeviceInfoBean.getHw_version());
+        request.setFw_version(HDLSdk.getInstance().getVersion());//sdk鐗堟湰
+        request.setIp_address(authenticateDeviceInfoBean.getIPAddress());
+        request.setMaster("false");
+        request.setLocalEncrypt(false);
+
+        data.setObjects(request);
+
+        String topic = HDLLinkConfig.getInstance().getFullTopic(TopicConstant.GATEWAY_SEARCH_REPLY);
+        LinkRequest message = new LinkRequest(topic,
+                GsonConvert.getGson().toJson(data));
+
+        String ip = IpUtils.getBroadcastAddress();
+        HdlSocketHelper.sendUdp(getUdpBoot(), ip, UDP_PORT, message, new HdlSocketHelper.HdlSocketListener() {
+            @Override
+            public void onSucceed(Object msg) {
+                if (callBack == null) return;
+                callBack.onSuccess("涓婃姤鎴愬姛");
+                LogUtils.i("UploadGatewayInfo onSucceed = " + msg);
+            }
+
+            @Override
+            public void onFailure() {
+                if (callBack == null) return;
+                callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_UPLOAD_GATEWAYINFO_FAILURE_ERROR));
+                LogUtils.i("UploadGatewayInfo onFailure");
+            }
+        });
+
     }
 
     /**
@@ -200,25 +265,105 @@
                                 gatewayId = bean.getObjects().getGatewayID();
                                 ipAddress = bean.getObjects().getIPAddress();
                             }
+                            if (ipAddress == null) {
+                                ipAddress = bean.getIp_address();
+                            }
+                            HDLLinkConfig.getInstance().setAuthBean(request.getAuth());
+
                             //鍒ゆ柇缃戝叧鏄惁宸茬粡娉ㄥ唽鍒颁簯绔�
-                            if (TextUtils.isEmpty(localSecret) || TextUtils.isEmpty(gatewayId)) {
+                            Log.d("panlili", "HDLAuthSocket.java:onSucceed-----> " + localSecret);
+                            if (TextUtils.isEmpty(localSecret) && TextUtils.isEmpty(gatewayId)) {
                                 //璁よ瘉澶辫触锛岀綉鍏虫湭娉ㄥ唽鍒颁簯绔�
                                 callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_AUTH_ERROR_GATEWAY_NOT_REGISTERED));
                             } else {
                                 HDLLinkConfig.getInstance().saveConfig(localSecret, gatewayId, ipAddress);
+                                HDLLinkConfig.getInstance().setRequestBean(request.getAuth().getRequest());
                                 callBack.onSuccess("璁よ瘉鎴愬姛");
+
+//                                UploadDeviceAuth(request.getObjects().getDeviceMAC(), "0", "success", bean.getCode(), null);
                             }
-                        } else if (bean.getCode().equals("14013")){
+                        } else if (bean.getCode().equals("14013")) {
                             //璁よ瘉澶辫触锛岃MAC瀵瑰簲鐨勮澶囧瘑閽ヤ笉瀛樺湪
                             callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_AUTH_MAC_KEY_ERROR_));
-                        } else{
+
+//                            UploadDeviceAuth(request.getObjects().getDeviceMAC(), "-1", "fail", bean.getCode(), null);
+                        } else if (bean.getCode().equals("124013")) {
+                            //璁よ瘉澶辫触锛岃MAC瀵瑰簲鐨勮澶囧瘑閽ヤ笉瀛樺湪
+                            callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_AUTH_124013_ERROR));
+
+                        } else if (bean.getCode().equals("124015")) {
+                            //璁よ瘉澶辫触锛岃澶囧巶瀹朵笉鍖归厤
+                            callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_AUTH_124015_ERROR));
+
+                        } else {
                             //璁よ瘉澶辫触锛岄敊璇爜锛�
                             LogUtils.e("璁よ瘉澶辫触锛岄敊璇爜锛�" + bean.getCode());
                             callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_AUTH_ERROR));
+
+//                            UploadDeviceAuth(request.getObjects().getDeviceMAC(), "-1", "fail", bean.getCode(), null);
                         }
                     } else {
                         callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_DATA_ERROR));
                     }
+                } catch (Exception e) {
+                    callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_DATA_ERROR));
+                }
+            }
+
+            @Override
+            public void onFailure() {
+                LogUtils.i(TAG, "onFailure: ");
+                if (callBack == null) return;
+                callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_TIMEOUT_ERROR));
+            }
+        });
+    }
+
+    public void UploadDeviceAuth(String mac, String result, String message, String auth_code, HDLLinkCallBack callBack) {
+        HDLSocket.getInstance().UploadDeviceAuth(mac, result, message, auth_code, new HDLLinkCallBack() {
+            @Override
+            public void onSuccess(String msg) {
+                if (callBack != null) {
+                    callBack.onSuccess(msg);
+                }
+                LogUtils.i(TAG, "onSuccess: " + msg);
+            }
+
+            @Override
+            public void onError(HDLLinkException e) {
+                if (callBack != null) {
+                    callBack.onError(e);
+                }
+                LogUtils.i(TAG, "onError: " + e.getMsg() + " " + e.getCode());
+            }
+        });
+    }
+
+
+    public void linkBroadcast(String oid, HDLLinkCallBack callBack) {
+        if (TextUtils.isEmpty(oid)) {
+            callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_DATA_NULL_ERROR));
+        }
+
+        Gson gs = new Gson();
+        JsonArray jsonArray = new JsonArray();
+        JsonObject jsonObject = new JsonObject();
+        jsonObject.addProperty("oid", oid);
+        jsonArray.add(jsonObject);
+        String requestStr = gs.toJson(jsonArray);
+
+        String topic = String.format(TopicConstant.LINK_BROADCAST, HDLLinkConfig.getInstance().getDeviceInfoBean().getOID());
+        LinkRequest message = new LinkRequest(topic, requestStr);
+
+        String ip = IpUtils.getBroadcastAddress();
+
+        HdlSocketHelper.sendUdp(getUdpBoot(), ip, UDP_PORT, message, new HdlSocketHelper.HdlSocketListener() {
+            @Override
+            public void onSucceed(Object msg) {
+                if (callBack == null) return;
+                try {
+                    callBack.onSuccess("鏇存柊鎴愬姛");
+                    LogUtils.i(TAG, "onSucceed: msg= " + msg);
                 } catch (Exception e) {
                     callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_DATA_ERROR));
                 }
@@ -362,12 +507,12 @@
      * 閫氱敤鍙戦�佹寚浠�
      * 1绉掓病鍝嶅簲灏辫浠栭噸鏂板彂閫�,閲嶈瘯3娆�
      *
-     * @param topic    鍙戦�佹暟鎹�
-     * @param bodyStr  鍥炲鐨勪富棰�
+     * @param topic     鍙戦�佹暟鎹�
+     * @param bodyStr   鍥炲鐨勪富棰�
      * @param broadcast 鏄惁瑕佸箍鎾�
-     * @param callBack 鍥炶皟
+     * @param callBack  鍥炶皟
      */
-    public void udpSendMsg(String topic, String bodyStr,boolean broadcast,  HDLLinkResponseCallBack callBack) {
+    public void udpSendMsg(String topic, String bodyStr, boolean broadcast, HDLLinkResponseCallBack callBack) {
         if (TextUtils.isEmpty(topic) || TextUtils.isEmpty(bodyStr)) {
             if (callBack != null) {
                 callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_DATA_NULL_ERROR));
@@ -384,7 +529,7 @@
 
         LinkRequest message = new LinkRequest(topic, bodyStr);
         String ip = HDLLinkConfig.getInstance().getIpAddress();
-        if(broadcast) {
+        if (broadcast) {
             ip = IpUtils.getBroadcastAddress();
         }
         HdlSocketHelper.sendUdp(getUdpBoot(), ip, UDP_PORT, message, new HdlSocketHelper.HdlSocketListener() {
@@ -406,13 +551,13 @@
     /**
      * 閫氱敤鍙戦�佹寚浠� 鍙彂涓�娆★紝涓嶇洃鍚洖澶嶏紝涓嶉噸鍙�
      *
-     * @param topic   鍙戦�佹暟鎹�
-     * @param bodyStr 鍥炲鐨勪富棰�
+     * @param topic     鍙戦�佹暟鎹�
+     * @param bodyStr   鍥炲鐨勪富棰�
      * @param broadcast 鏄惁骞挎挱
      */
-    public void udpSendMsg(String topic, String bodyStr,boolean broadcast) {
+    public void udpSendMsg(String topic, String bodyStr, boolean broadcast) {
         if (TextUtils.isEmpty(topic) || TextUtils.isEmpty(bodyStr)) {
-            LogUtils.e( "鍙傛暟涓嶈兘涓虹┖锛屼笉鑳藉彂閫乁DP鏁版嵁");
+            LogUtils.e("鍙傛暟涓嶈兘涓虹┖锛屼笉鑳藉彂閫乁DP鏁版嵁");
             return;
         }
         if (!HDLLinkConfig.getInstance().checkIfCertified()) {
@@ -421,7 +566,7 @@
         }
         LinkRequest message = new LinkRequest(topic, bodyStr);
         String ip = HDLLinkConfig.getInstance().getIpAddress();
-        if(broadcast) {
+        if (broadcast) {
             ip = IpUtils.getBroadcastAddress();
         }
         HdlSocketHelper.sendUdpOne(getUdpBoot(), ip, UDP_PORT, message);
@@ -495,9 +640,10 @@
                             final BaseLocalResponse<GatewaySearchBean> response = GsonConvert.getGson().fromJson(data, new TypeToken<BaseLocalResponse<GatewaySearchBean>>() {
                             }.getType());
                             GatewaySearchBean searchBean = response.getObjects();
+
                             if (searchBean != null && !TextUtils.isEmpty(searchBean.getGatewayId())) {
                                 searchBean.setIp_address(linkResponse.getSource_ipAddress());
-                                if (searchBean.getGatewayId().contains(searchGatewayId)&&!TextUtils.isEmpty(searchGatewayId)) {
+                                if (searchBean.getGatewayId().contains(searchGatewayId) && !TextUtils.isEmpty(searchGatewayId)) {
                                     removeSearchGatewayEvent();//绉婚櫎鎼滅储缃戝叧鐩戝惉
                                     isSearchGatewaySuccess.set(true);//鎼滅储鎴愬姛鏍囪
                                     searchGatewayCount.set(11);//娆℃暟鏍囪
@@ -510,7 +656,7 @@
                         }
                     }
                 } catch (Exception e) {
-
+                    LogUtils.i("panlili锛�" + e.toString());
                 }
             }
         };
@@ -536,8 +682,9 @@
                                 //涓荤綉鍏冲苟涓旀槸褰撳墠缁戝畾鐨勭綉鍏�
                                 if ("true".equals(gateway.getMaster().toLowerCase()) && gateway.getGatewayId().equals(HDLLinkConfig.getInstance().getGatewayId())) {
                                     HDLLinkConfig.getInstance().setCurrentGateway(gateway);//璁剧疆褰撳墠缃戝叧
-                                    if(!TextUtils.isEmpty( gateway.getIp_address())) {
+                                    if (!TextUtils.isEmpty(gateway.getIp_address())) {
                                         HDLLinkConfig.getInstance().setIpAddress(gateway.getIp_address());
+                                        LogUtils.i("鎺ユ敹鍒扮綉鍏充俊鎭細" + HDLLinkConfig.getInstance().getIpAddress());
                                     }
                                     //鏇存柊褰撳墠缃戝叧鐨勪俊鎭�
                                     HDLLinkConfig.getInstance().reSaveConfig();
@@ -546,7 +693,7 @@
                         }
                     }
                 } catch (Exception e) {
-
+                    LogUtils.i("panlili锛�" + e.toString());
                 }
             }
         };
@@ -595,7 +742,8 @@
                         LogUtils.e("鎼滅储缃戝叧", "鎼滅储10娆★紝鎸囧畾缃戝叧閮芥病鍥炲锛屽洖璋冭秴鏃�");
                         //鎼滅储10娆★紝鎸囧畾缃戝叧閮芥病鍥炲锛屽洖璋冭秴鏃�
                         callBackSearchGatewayTimeout();
-                    }catch (Exception e){}
+                    } catch (Exception e) {
+                    }
                 }
             }
         }).start();
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java
index de555ec..47d5f92 100644
--- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java
@@ -1,10 +1,14 @@
 package com.hdl.sdk.connect.socket;
 
+import android.os.Build;
 import android.text.TextUtils;
 import android.util.Log;
 
+import androidx.annotation.RequiresApi;
+
 import com.google.gson.JsonObject;
 import com.google.gson.reflect.TypeToken;
+import com.hdl.sdk.common.HDLSdk;
 import com.hdl.sdk.common.config.TopicConstant;
 import com.hdl.sdk.common.event.EventDispatcher;
 import com.hdl.sdk.common.event.EventListener;
@@ -17,7 +21,12 @@
 import com.hdl.sdk.common.utils.gson.GsonConvert;
 import com.hdl.sdk.connect.HDLLink;
 import com.hdl.sdk.connect.bean.LoginRequest;
+import com.hdl.sdk.connect.bean.request.AuthenticateRequest;
 import com.hdl.sdk.connect.bean.request.BroadcastRequest;
+import com.hdl.sdk.connect.bean.request.DeviceAuthRequest;
+import com.hdl.sdk.connect.bean.request.GatewayInfoRequest;
+import com.hdl.sdk.connect.bean.request.ListOidRequest;
+import com.hdl.sdk.connect.bean.request.ListUploadRequest;
 import com.hdl.sdk.connect.bean.response.AuthenticateResponse;
 import com.hdl.sdk.connect.bean.response.BaseLocalResponse;
 import com.hdl.sdk.connect.bean.request.DeviceControlRequest;
@@ -31,6 +40,7 @@
 import com.hdl.sdk.connect.config.HDLLinkConfig;
 import com.hdl.sdk.connect.protocol.LinkMessageDecoder;
 import com.hdl.sdk.connect.protocol.LinkMessageEncoder;
+import com.hdl.sdk.connect.utils.AesUtil;
 import com.hdl.sdk.socket.SocketBoot;
 import com.hdl.sdk.socket.SocketOptions;
 import com.hdl.sdk.socket.client.IHeartbeat;
@@ -40,6 +50,7 @@
 import com.hdl.sdk.socket.listener.SendListener;
 
 import java.util.ArrayList;
+import java.util.Base64;
 import java.util.List;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
@@ -95,7 +106,7 @@
                         Thread.sleep(1000);
 //                        LogUtils.i("checkIfCertified=" + HDLLink.getInstance().checkIfCertified() + " getTcp().connected=" + getTcp().connected);
                         try {
-                            if (!HDLLink.getInstance().checkIfCertified() || getTcp().connected) {
+                            if (!HDLLink.getInstance().checkIfCertified() || (!TextUtils.isEmpty(getTcpIp()) && getTcp().connected)) {
                                 continue;
                             }
                         } catch (Exception e) {
@@ -109,24 +120,28 @@
                         }
                         BroadcastRequest request = new BroadcastRequest(IdUtils.getUUId(), time, HDLLinkConfig.getInstance().getDeviceInfoBean(), "200");
                         HDLAuthSocket.getInstance().udpSendMsg(TopicConstant.BROADCAST, GsonConvert.getGson().toJson(request), true, new HDLLinkResponseCallBack() {
+                            @RequiresApi(api = Build.VERSION_CODES.O)
                             @Override
                             public void onSuccess(LinkResponse msg) {
-                                getTcp();
                                 String data = msg.getData();
                                 if (!TextUtils.isEmpty(data)) {
                                     DeviceInfoResponse response = GsonConvert.getGson().fromJson(data, new TypeToken<DeviceInfoResponse>() {
                                     }.getType());
                                     HDLLinkConfig.getInstance().setIpAddress(response.getObjects().getIPAddress());
+                                    LogUtils.i("---getIpAddress=" + HDLLinkConfig.getInstance().getIpAddress());
+
                                     HDLLinkConfig.getInstance().reSaveConfig();
                                 }
+
                                 isBroadcast = true;
+                                getTcp();
                                 LogUtils.i("骞挎挱淇℃伅缁欎富缃戝叧鎴愬姛锛�");
                             }
 
                             @Override
                             public void onError(HDLLinkException e) {
                                 isBroadcast = false;
-                                LogUtils.i("骞挎挱淇℃伅缁欎富缃戝叧澶辫触锛�");
+                                LogUtils.i("骞挎挱淇℃伅缁欎富缃戝叧澶辫触锛�---onError=" + e.toString());
                             }
                         });
 //                        HDLAuthSocket.getInstance().udpSendMsg(TopicConstant.BROADCAST, GsonConvert.getGson().toJson(request), true);
@@ -470,6 +485,10 @@
                     jsonObject.addProperty("id", IdUtils.getUUId());
                     jsonObject.addProperty("time_stamp", time);
 
+                    if (HDLLinkConfig.getInstance().getRequestBean() != null) {
+                        jsonObject.addProperty("mac", HDLLinkConfig.getInstance().getRequestBean().getMAC());
+                    }
+
                     String topic = String.format(TopicConstant.HEARTBEAT, HDLLinkConfig.getInstance().getDeviceInfoBean().getOID());
 
                     LinkRequest message = new LinkRequest(topic,
@@ -574,6 +593,114 @@
     }
 
     /**
+     * 涓婃姤oid鍒楄〃
+     *
+     * @param request  璁惧淇℃伅
+     * @param callBack 鍥炶皟
+     */
+    public void UploadOidList(ListUploadRequest request, HDLLinkCallBack callBack) {
+        if (!TextUtils.isEmpty(getGatewayId()) && !TextUtils.isEmpty(getTcpIp())) {
+            String time = String.valueOf(System.currentTimeMillis());
+            final BaseLocalResponse<List<ListUploadRequest>> data = new BaseLocalResponse<>();
+            data.setId(IdUtils.getUUId());
+            data.setTime_stamp(time);
+
+            List<ListUploadRequest> list = new ArrayList<>();
+            list.add(request);
+
+            data.setObjects(list);
+
+            String topic = String.format(TopicConstant.LIST_UPLOAD, getGatewayId());
+            LinkRequest message = new LinkRequest(topic,
+                    GsonConvert.getGson().toJson(data));
+
+            String replyTopic = topic + "_reply";
+            try {
+                sendMsg(message.getSendBytes(), replyTopic, callBack, new SendListener() {
+                    @Override
+                    public void onSucceed() {
+
+                    }
+
+                    @Override
+                    public void onError() {
+                        if (callBack != null) {
+                            callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_SEND_ERROR));
+                        }
+                    }
+                });
+            } catch (Exception e) {
+                if (callBack != null) {
+                    callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_SEND_ERROR));
+                }
+            }
+        } else {
+            if (callBack != null) {
+                callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_SEND_ERROR));
+            }
+        }
+    }
+
+    /**
+     * 涓婃姤鍏ョ綉璁よ瘉缁撴灉
+     *
+     * @param mac       mac
+     * @param result    缁撴灉0/-1
+     * @param message   璁よ瘉淇℃伅
+     * @param auth_code 浜戠璁よ瘉code
+     * @param callBack  缁撴灉鍥炶皟
+     */
+    public void UploadDeviceAuth(String mac, String result, String message, String auth_code, HDLLinkCallBack callBack) {
+        if (!TextUtils.isEmpty(getGatewayId()) && !TextUtils.isEmpty(getTcpIp())) {
+            String time = String.valueOf(System.currentTimeMillis());
+            final BaseLocalResponse<List<DeviceAuthRequest>> data = new BaseLocalResponse<>();
+            data.setId(IdUtils.getUUId());
+            data.setTime_stamp(time);
+
+            DeviceAuthRequest deviceAuthRequest = new DeviceAuthRequest();
+            deviceAuthRequest.setMac(mac);
+            deviceAuthRequest.setResult(result);
+            deviceAuthRequest.setMessage(message);
+            deviceAuthRequest.setAuth_code(auth_code);
+
+            List<DeviceAuthRequest> list = new ArrayList<>();
+            list.add(deviceAuthRequest);
+
+            data.setObjects(list);
+
+            String topic = String.format(TopicConstant.DEIVCE_AUTH_RESULT_NOTIFY, getGatewayId());
+            LinkRequest linkRequest = new LinkRequest(topic,
+                    GsonConvert.getGson().toJson(data));
+
+            String replyTopic = topic + "_reply";
+            try {
+                sendMsg(linkRequest.getSendBytes(), replyTopic, callBack, new SendListener() {
+                    @Override
+                    public void onSucceed() {
+
+                    }
+
+                    @Override
+                    public void onError() {
+                        if (callBack != null) {
+                            callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_SEND_ERROR));
+                        }
+                    }
+                });
+            } catch (Exception e) {
+                if (callBack != null) {
+                    callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_SEND_ERROR));
+                }
+            }
+        } else {
+            if (callBack != null) {
+                callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_SEND_ERROR));
+            }
+        }
+    }
+
+
+    /**
      * tcp鐧诲綍鏂逛究鑾峰彇鐘舵��
      *
      * @param clientType 瀹㈡埛绔被鍨�
@@ -607,6 +734,70 @@
                 @Override
                 public void onSucceed() {
                     LogUtils.i("tcpLogin onSucceed");
+                }
+
+                @Override
+                public void onError() {
+                    if (callBack != null) {
+                        callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_SEND_ERROR));
+                    }
+                }
+            });
+        } catch (Exception e) {
+            if (callBack != null) {
+                callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_SEND_ERROR));
+            }
+        }
+    }
+
+
+    /**
+     * 閫氱煡鍒犻櫎骞堕��缃戝瓙璁惧
+     *
+     * @param oid      浠庣綉鍏筹紙璁惧锛塷id
+     * @param isForce  鏄惁寮哄埗閫�缃�
+     * @param callBack 缁撴灉鍥炶皟
+     */
+    public void deleteNetwork(String oid, boolean isForce, HDLLinkCallBack callBack) {
+        if (TextUtils.isEmpty(oid)) {
+            callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_DATA_NULL_ERROR));
+        }
+
+        final String msgId = IdUtils.getUUId();
+        String time = String.valueOf(System.currentTimeMillis());
+        final BaseLocalResponse<List<ListOidRequest>> data = new BaseLocalResponse<>();
+        data.setId(msgId);
+        data.setTime_stamp(time);
+
+        final ListOidRequest request = new ListOidRequest();
+        request.setOid(oid);
+        List<ListOidRequest> list = new ArrayList<>();
+        list.add(request);
+
+        data.setObjects(list);
+
+        String topic = String.format(TopicConstant.DELETE_REQUEST, HDLLinkConfig.getInstance().getGatewayId());
+        LinkRequest message = new LinkRequest(topic,
+                GsonConvert.getGson().toJson(data));
+
+        String replyTopic = topic + "_reply";
+
+        if (isForce) {//寮哄埗閫�缃戯紝涓嶇瓑缃戝叧鍥炲鐩存帴娓呴櫎鏁版嵁
+            HDLLinkConfig.getInstance().clearConfig();
+        }
+
+        try {
+            sendMsg(message.getSendBytes(), replyTopic, callBack, new SendListener() {
+                @Override
+                public void onSucceed() {
+                    if (callBack == null) return;
+                    try {
+                        callBack.onSuccess("閫�缃戞垚鍔�");
+                        HDLLinkConfig.getInstance().clearConfig();
+
+                    } catch (Exception e) {
+                        callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_DATA_ERROR));
+                    }
                 }
 
                 @Override
@@ -672,7 +863,7 @@
     public void tcpSendMsg(String topic, String bodyStr) {
         try {
             if (TextUtils.isEmpty(topic) || TextUtils.isEmpty(bodyStr)) {
-                LogUtils.e("udpSendMsg", "鍙傛暟涓嶈兘涓虹┖");
+                LogUtils.e("tcpSendMsg", "鍙傛暟涓嶈兘涓虹┖");
                 return;
             }
             LinkRequest message = new LinkRequest(topic, bodyStr);
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/client/UdpClient.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/client/UdpClient.java
index f9b9670..c6a3aff 100644
--- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/client/UdpClient.java
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/client/UdpClient.java
@@ -150,7 +150,7 @@
         }
 
         try {
-            LogUtils.i("鎺ユ敹鍒癠dp鏁版嵁鍖咃紝缃戠粶鍦板潃锛�" + receivePacket.getAddress().getHostAddress() + ":" + receivePacket.getPort());
+//            LogUtils.i("鎺ユ敹鍒癠dp鏁版嵁鍖咃紝缃戠粶鍦板潃锛�" + receivePacket.getAddress().getHostAddress() + ":" + receivePacket.getPort());
 
             IHandleMessage handleMessage = getOptions().getHandleMessage();
             if (handleMessage != null) {
diff --git a/HDLSDK_DEMO.rar b/HDLSDK_DEMO.rar
index ed20808..cf56fbe 100644
--- a/HDLSDK_DEMO.rar
+++ b/HDLSDK_DEMO.rar
Binary files differ
diff --git a/HDLSDK_DEMO/.idea/gradle.xml b/HDLSDK_DEMO/.idea/gradle.xml
index 3123843..9885452 100644
--- a/HDLSDK_DEMO/.idea/gradle.xml
+++ b/HDLSDK_DEMO/.idea/gradle.xml
@@ -7,6 +7,7 @@
         <option name="testRunner" value="GRADLE" />
         <option name="distributionType" value="DEFAULT_WRAPPED" />
         <option name="externalProjectPath" value="$PROJECT_DIR$" />
+        <option name="gradleJvm" value="1.8" />
         <option name="modules">
           <set>
             <option value="$PROJECT_DIR$" />
diff --git a/HDLSDK_DEMO/.idea/misc.xml b/HDLSDK_DEMO/.idea/misc.xml
index 3bdd701..56d5c89 100644
--- a/HDLSDK_DEMO/.idea/misc.xml
+++ b/HDLSDK_DEMO/.idea/misc.xml
@@ -3,6 +3,7 @@
   <component name="DesignSurface">
     <option name="filePathToZoomLevelMap">
       <map>
+        <entry key="..\:/HDL/ProjectCode/HDLSDK/HDLSDK_A_Android/HDLSDK_DEMO/app/src/main/res/layout/activity_main.xml" value="0.3538301198540907" />
         <entry key="..\:/job/me/Android/HDLSDK/app/src/main/res/layout/activity_main.xml" value="0.1" />
         <entry key="..\:/job/me/Android/HDLSDK/app/src/main/res/layout/demo_item.xml" value="0.28958333333333336" />
       </map>
diff --git a/HDLSDK_DEMO/app/build.gradle b/HDLSDK_DEMO/app/build.gradle
index 211f3fb..8896afb 100644
--- a/HDLSDK_DEMO/app/build.gradle
+++ b/HDLSDK_DEMO/app/build.gradle
@@ -38,7 +38,7 @@
     androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
 
     implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.6'
-    implementation 'com.google.code.gson:gson:2.8.8'
+//    implementation 'com.google.code.gson:gson:2.8.8'
 //    implementation project(path: ':hdl-connect')
-    implementation files('libs\\com.hdl.sdk-v1.0.20.aar')
+    implementation files('libs\\com.hdl.sdk-v1.1.0.aar')
 }
\ No newline at end of file
diff --git a/HDLSDK_DEMO/app/libs/com.hdl.sdk-v1.0.20.aar b/HDLSDK_DEMO/app/libs/com.hdl.sdk-v1.0.20.aar
deleted file mode 100644
index efe61d1..0000000
--- a/HDLSDK_DEMO/app/libs/com.hdl.sdk-v1.0.20.aar
+++ /dev/null
Binary files differ
diff --git a/HDLSDK_DEMO/app/libs/com.hdl.sdk-v1.1.0.aar b/HDLSDK_DEMO/app/libs/com.hdl.sdk-v1.1.0.aar
new file mode 100644
index 0000000..a704e40
--- /dev/null
+++ b/HDLSDK_DEMO/app/libs/com.hdl.sdk-v1.1.0.aar
Binary files differ
diff --git a/HDLSDK_DEMO/app/src/main/AndroidManifest.xml b/HDLSDK_DEMO/app/src/main/AndroidManifest.xml
index 964acd6..f6e37e6 100644
--- a/HDLSDK_DEMO/app/src/main/AndroidManifest.xml
+++ b/HDLSDK_DEMO/app/src/main/AndroidManifest.xml
@@ -29,6 +29,7 @@
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
         </activity>
+
     </application>
 
 </manifest>
\ No newline at end of file
diff --git a/HDLSDK_DEMO/app/src/main/java/com/hdl/hdlsdk/MainActivity.java b/HDLSDK_DEMO/app/src/main/java/com/hdl/hdlsdk/MainActivity.java
index d332fdc..5054c03 100644
--- a/HDLSDK_DEMO/app/src/main/java/com/hdl/hdlsdk/MainActivity.java
+++ b/HDLSDK_DEMO/app/src/main/java/com/hdl/hdlsdk/MainActivity.java
@@ -1,5 +1,15 @@
 package com.hdl.hdlsdk;
 
+import android.Manifest;
+import android.content.Intent;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.TextView;
+import android.widget.Toast;
+
 import androidx.activity.result.ActivityResultCallback;
 import androidx.activity.result.ActivityResultLauncher;
 import androidx.activity.result.contract.ActivityResultContracts;
@@ -8,43 +18,28 @@
 import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
 
-import android.Manifest;
-import android.content.Intent;
-import android.os.Bundle;
-import android.text.TextUtils;
-import android.util.Log;
-import android.view.View;
-import android.widget.TextView;
-import android.widget.Toast;
-
 import com.chad.library.adapter.base.BaseQuickAdapter;
 import com.chad.library.adapter.base.listener.OnItemClickListener;
-import com.google.gson.JsonObject;
 import com.google.gson.reflect.TypeToken;
 import com.hdl.hdlsdk.device.DevicesListActivity;
 import com.hdl.sdk.common.config.TopicConstant;
 import com.hdl.sdk.common.event.EventListener;
 import com.hdl.sdk.common.exception.HDLLinkException;
 import com.hdl.sdk.common.utils.IdUtils;
-import com.hdl.sdk.common.utils.IpUtils;
 import com.hdl.sdk.common.utils.gson.GsonConvert;
 import com.hdl.sdk.connect.HDLLink;
-import com.hdl.sdk.connect.bean.LinkRequest;
 import com.hdl.sdk.connect.bean.LinkResponse;
 import com.hdl.sdk.connect.bean.request.AuthenticateRequest;
-import com.hdl.sdk.connect.bean.request.PropertyReadRequest;
+import com.hdl.sdk.connect.bean.request.DeviceControlRequest;
+import com.hdl.sdk.connect.bean.request.ListUploadRequest;
 import com.hdl.sdk.connect.bean.response.BaseLocalResponse;
 import com.hdl.sdk.connect.bean.response.GatewaySearchBean;
 import com.hdl.sdk.connect.callback.HDLLinkCallBack;
 import com.hdl.sdk.connect.callback.HDLLinkResponseCallBack;
+import com.hdl.sdk.connect.cloud.CallBackListener;
+import com.hdl.sdk.connect.cloud.HDLException;
 import com.hdl.sdk.connect.config.HDLLinkConfig;
 import com.hdl.sdk.connect.socket.HDLAuthSocket;
-import com.hdl.sdk.connect.socket.HDLSocket;
-import com.hdl.sdk.connect.bean.request.DeviceControlRequest;
-import com.hdl.sdk.connect.protocol.LinkMessageDecoder;
-import com.hdl.sdk.connect.protocol.LinkMessageEncoder;
-import com.hdl.sdk.socket.SocketOptions;
-import com.hdl.sdk.socket.codec.MessagePipeLine;
 
 import java.io.UnsupportedEncodingException;
 import java.security.MessageDigest;
@@ -53,8 +48,6 @@
 import java.util.List;
 import java.util.Map;
 
-import static com.hdl.sdk.common.config.TopicConstant.GATEWAY_SEARCH_REPLY;
-
 public class MainActivity extends AppCompatActivity {
 
     private static final String TAG = "MainActivity";
@@ -62,9 +55,11 @@
     private RecyclerView rv;
     private TextView tv;
     private TextView responseTv;
+    private EditText editText;
     boolean isOn;
     private EventListener allTopicsListener;
     private String testLightSid = "0001010D48C71B02020100010101";
+    private String secret = "";
 
     @Override
     protected void onDestroy() {
@@ -72,22 +67,64 @@
         removeAllTopicsListener();
     }
 
-    void initDeviceInfo()
-    {
+    void initDeviceInfo() {
         AuthenticateRequest.AuthenticateDeviceInfoBean infoBean = new AuthenticateRequest.AuthenticateDeviceInfoBean();
-        infoBean.setDeviceMAC("AA00000000000100");
-        infoBean.setIPMAC("AA00000000000100");
+        infoBean.setDeviceMAC("f2c5d8bad48f");
+        infoBean.setIPMAC("f2c5d8bad48f");
         infoBean.setDeviceName("闊充箰鎾斁鍣�");//璁惧鍚嶅瓧
         infoBean.setDeviceModel("MCLog.431");//璁惧鍨嬪彿
         infoBean.setAccessMode("WIFI");
         infoBean.setIPGateway("192.168.1.1");
-        infoBean.setIPAddress("192.168.1.116");
-        infoBean.setGateway_type("music.standard");
+        infoBean.setIPAddress("192.168.1.103");
+        infoBean.setGateway_type("screen.touch");
         infoBean.setHw_version("HW2.0");
         infoBean.setFw_version("Fw1.0");
         infoBean.setOID("010105000000FE11");//姣忎釜璁惧oid閮借涓嶄竴鏍�
         infoBean.setSid("110105000000FE08110100000011");//姣忎釜璁惧鐨剆id閮借涓嶄竴鏍�
+        infoBean.setSupplier("JINMAOYUN");
         HDLLinkConfig.getInstance().setDeviceInfoBean(infoBean);
+    }
+
+    void applyDeviceSecret() {
+        tv.setText("寮�濮嬬敵璇疯澶囧瘑閽�...");
+        responseTv.setText("");
+
+//        //姝e紡鏈嶅姟鍣�
+        String appKey = "i8hR07jzrIS";//appkey
+        String appSecret = "BmnJ8RWTtaVEBk24zPPF4UMwfYu0lAWU";//appsecret
+
+        //娴嬭瘯鏈嶅姟鍣�
+//        String appKey ="FcRyUJlLJFF";
+//        String appSecret = "wz8wn75ABidx8vXcFGUotqhwFkTaYvvJ";
+
+//        String appKey = "L2OZliZRxHc";
+//        String appSecret = "aCIWSvJDOukXfx3kivsKW11x9xdR3IbV";
+        String supplier = "JINMAOYUN";//鍘傚晢
+//        String mac = "AA00000000000100";//璁惧鍞竴MAC鍦板潃
+        String mac = editText.getText().toString();
+        String spk = "screen.touch";//浜у搧spk
+
+        if (TextUtils.isEmpty(mac)) {
+            Toast.makeText(this, "mac涓嶈兘涓虹┖锛�", Toast.LENGTH_SHORT).show();
+            return;
+        }
+
+        HDLLink.getInstance().applyDeviceSecret(this, appKey, appSecret, supplier, mac, spk, new CallBackListener() {
+            @Override
+            public void onError(HDLException e) {
+                tv.setText("鐢宠澶辫触");
+                responseTv.setText(e.getMsg());
+                secret = "";
+            }
+
+            @Override
+            public void onSuccess(String msg) {
+                tv.setText("鐢宠鎴愬姛");
+                responseTv.setText(msg.toString());
+                secret = msg.toString();
+            }
+        });
+
     }
 
     /**
@@ -95,29 +132,34 @@
      */
     void sendAuthenticateRequest() {
         tv.setText("寮�濮嬪叆缃戣璇�...");
+        responseTv.setText("");
         //璁よ瘉鎻愪氦鍙傛暟鍑嗗
 //
-//        //娴嬭瘯鏈嶅姟
-//        String spkStr = "ir.module";//浜у搧spk
+//        //娴嬭瘯鏈嶅姟鍣�
+//        String spkStr = "music.standard";//浜у搧spk
 //        String macStr = "AA000000000000AF";//璁惧鍞竴MAC鍦板潃
 //        String secret = "44b360eb74b7ba64";//閫氳繃spk鍜宮ac鎻愪氦浜戠璁よ瘉鍚庡垎閰嶇殑secret
 
 //        姝e紡鏈嶅姟鍣�
-        String spkStr = "screen.mirror";//浜у搧spk
-        String macStr = "AA00000000000100";//璁惧鍞竴MAC鍦板潃
-        String secret = "e186beeb7974998e";//閫氳繃spk鍜宮ac鎻愪氦浜戠璁よ瘉鍚庡垎閰嶇殑secret
+        String spkStr = "screen.touch";//浜у搧spk
+//        String macStr = "AA00000000000100";//璁惧鍞竴MAC鍦板潃
+        String macStr = editText.getText().toString();//璁惧鍞竴MAC鍦板潃
+//        String secret = "e186beeb7974998e";//閫氳繃spk鍜宮ac鎻愪氦浜戠璁よ瘉鍚庡垎閰嶇殑secret
 
         String mac_key = stringToMD5(stringToMD5(macStr + secret));
         String versionString = "HDL_V1.0.1";//
         String time = String.valueOf(System.currentTimeMillis());
         HDLLinkConfig.getInstance().getDeviceInfoBean().setDeviceMAC(macStr);
+//        HDLLinkConfig.getInstance().setCurrentGateway(infoBean);
 
         //1.璁剧疆璁よ瘉淇℃伅
         AuthenticateRequest.RequestBean requestBean = new AuthenticateRequest.RequestBean();
         requestBean.setMAC(macStr);
-        requestBean.setSupplier("WISE");
+        requestBean.setSupplier("JINMAOYUN");
         requestBean.setFirmwareVersion(versionString);
         requestBean.setHardwareModel("1956F");
+//        HDLLinkConfig.getInstance().setRequestBean(requestBean);
+
         AuthenticateRequest.AuthBean authbean = new AuthenticateRequest.AuthBean();
         authbean.setSpk(spkStr);
         authbean.setMACKey(mac_key);
@@ -127,9 +169,9 @@
         HDLLink.getInstance().startAuthenticateRequest(request, new HDLLinkCallBack() {
             @Override
             public void onError(HDLLinkException e) {
-                tv.setText("璁よ瘉澶辫触");
+                tv.setText("璁よ瘉澶辫触" + e.getCode());
                 responseTv.setText(e.getMsg());
-                Log.i("TAG", "onError: 璁よ瘉澶辫触");
+                Log.e(TAG, "onError: 璁よ瘉澶辫触 " + e.getCode());
             }
 
             @Override
@@ -140,16 +182,36 @@
         });
     }
 
+    public void UploadDeviceAuth(String mac, String result, String message, String auth_code) {
+        //灏嗚璇佺粨鏋滀笂鎶ョ粰缃戝叧
+        HDLLink.getInstance().UploadDeviceAuth(mac, result, message, auth_code, new HDLLinkCallBack() {
+            @Override
+            public void onSuccess(String s) {
+                tv.setText("涓婃姤缁撴灉鎴愬姛");
+                responseTv.setText(s.toString());
+            }
+
+            @Override
+            public void onError(HDLLinkException e) {
+                tv.setText("涓婃姤缁撴灉澶辫触");
+                responseTv.setText(e.getMsg());
+                Log.i(TAG, "onError: 涓婃姤缁撴灉澶辫触");
+            }
+        });
+    }
+
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
         responseTv = findViewById(R.id.response_tv);
+        editText = findViewById(R.id.edittext);
         tv = findViewById(R.id.state_tv);
         rv = findViewById(R.id.rv);
         rv.setLayoutManager(new LinearLayoutManager(this));
 
+        selectnetwork();
         checkIfCertified();
         initDeviceInfo();//鍒濆鍖�
         registerAllTopicsListener();
@@ -163,9 +225,11 @@
 
         launcher.launch(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE});
 
-        final List<DemoBean> beans = new ArrayList<>();
+        final List<DemoBean> beans = new ArrayList<DemoBean>();
+        beans.add(new DemoBean("鐢宠璁惧瀵嗛挜"));
         beans.add(new DemoBean("鍏ョ綉璁よ瘉"));
         beans.add(new DemoBean("鎼滅储鎸囧畾缃戝叧鏄惁鍦ㄧ嚎"));
+        beans.add(new DemoBean("涓婃姤oid鍒楄〃"));
         beans.add(new DemoBean("鑾峰彇鍔熻兘鍒楄〃"));
         beans.add(new DemoBean("鍔熻兘灞炴�ц鍙�"));
         beans.add(new DemoBean("璁惧鎺у埗"));
@@ -177,6 +241,7 @@
         beans.add(new DemoBean("TCP鍙戦��"));
         beans.add(new DemoBean("UDP鍙戦�侊紝鐩戝惉涓婚鍥炲锛屽甫閲嶅彂甯﹀洖璋�"));
         beans.add(new DemoBean("TCP鍙戦�侊紝鐩戝惉涓婚鍥炲锛屽甫閲嶅彂甯﹀洖璋�"));
+        beans.add(new DemoBean("閫�缃�"));
         demoAdapter = new DemoAdapter(beans);
         rv.setAdapter(demoAdapter);
 
@@ -192,56 +257,68 @@
             public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
                 switch (position) {
                     case 0:
+                        //鐢宠璁惧瀵嗛挜
+                        applyDeviceSecret();
+                        break;
+                    case 1:
                         //鍏ョ綉璁よ瘉
                         sendAuthenticateRequest();
                         break;
-                    case 1:
+                    case 2:
                         //鎼滅储缃戝叧
                         searchGatewayBroadcast();
                         break;
-                    case 2:
+                    case 3:
+                        //涓婃姤oid鍒楄〃
+                        UploadOidList();
+                        break;
+                    case 4:
                         //鑾峰彇鍔熻兘鍒楄〃
                         getFunctionList();
                         break;
-                    case 3:
+                    case 5:
                         //鍔熻兘灞炴�ц鍙�
                         getFunctionAttribute();
                         break;
-                    case 4:
+                    case 6:
                         //璁惧鎺у埗
                         controlDecide();
                         break;
-                    case 5:
+                    case 7:
                         //璇诲彇鐘舵��
                         propertyRead();
                         break;
-                    case 6:
+                    case 8:
                         //鑾峰彇鍦烘櫙鍒楄〃
                         getSceneList();
                         break;
-                    case 7:
-                        //鑾峰彇鍦烘櫙鍒楄〃
+                    case 9:
+                        //鍦烘櫙鎺у埗
                         controlScene();
                         break;
-                    case 8:
+                    case 10:
                         //鍔熻兘鍒楄〃
                         startDevicesListActivity();
                         break;
-                    case 9:
+                    case 11:
                         //UDP鍙戦��
                         udpSend();
                         break;
-                    case 10:
+                    case 12:
                         //TCP鍙戦��
                         tcpSend();
                         break;
-                    case 11:
+                    case 13:
                         //UDP鍙戦�侊紝鐩戝惉涓婚鍥炲锛屽甫閲嶅彂甯﹀洖璋�
                         udpSendWithCallback();
                         break;
-                    case 12:
+                    case 14:
                         //TCP鍙戦�侊紝鐩戝惉涓婚鍥炲锛屽甫閲嶅彂甯﹀洖璋�
                         tcpSendWithCallback();
+                        break;
+                    case 15:
+                        //閫�缃�
+                        deleteNetwork();
                         break;
                 }
             }
@@ -251,6 +328,10 @@
 
     public void showToast(String text) {
         Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
+    }
+
+    void selectnetwork() {
+        HDLLink.getInstance().selectNetwork("wlan0");
     }
 
     /**
@@ -320,7 +401,6 @@
     }
 
 
-
     String stringToMD5(String text) {
         byte[] hash;
         try {
@@ -349,6 +429,7 @@
      */
     void searchGatewayBroadcast() {
         tv.setText("鎼滅储缃戝叧涓�...");
+        responseTv.setText("");
         HDLLink.getInstance().searchGatewayBroadcast(new HDLAuthSocket.SearchGatewayCallBack() {
             @Override
             public void onError(HDLLinkException e) {
@@ -391,6 +472,7 @@
      */
     void getFunctionAttribute() {
         tv.setText("鍔熻兘灞炴�ц鍙�");
+        responseTv.setText("");
         List<String> sids = new ArrayList<>();
         sids.add(testLightSid);
         HDLLink.getInstance().getFunctionAttribute(sids, new HDLLinkCallBack() {
@@ -412,6 +494,7 @@
      */
     void propertyRead() {
         tv.setText("璇诲彇鐘舵�佷腑...");
+        responseTv.setText("");
         List<String> list = new ArrayList<>();
         list.add(testLightSid);//瑕佽鍙栬澶囩殑sid
         HDLLink.getInstance().propertyRead(list, new HDLLinkCallBack() {
@@ -435,6 +518,7 @@
      */
     void controlDecide() {
         tv.setText("鎺у埗璁惧");
+        responseTv.setText("");
         isOn = !isOn;
         List<DeviceControlRequest> requestList = new ArrayList<>();
         DeviceControlRequest request = new DeviceControlRequest();
@@ -464,6 +548,7 @@
      */
     void getSceneList() {
         tv.setText("璇诲彇鍦烘櫙鍒楄〃");
+        responseTv.setText("");
         HDLLink.getInstance().getSceneList(new HDLLinkCallBack() {
             @Override
             public void onSuccess(String msg) {
@@ -486,6 +571,7 @@
      */
     void controlScene() {
         tv.setText("鍦烘櫙鎺у埗");
+        responseTv.setText("");
         //鎺у埗鍦烘櫙sid鍒楄〃锛屾敮鎸佹壒閲忔帶鍒�
         List<String> sids = new ArrayList<>();
         isOn = !isOn;
@@ -518,6 +604,7 @@
      */
     private void tcpSend() {
         tv.setText("TCP鍙戦�� 鍙彂涓�娆★紝涓嶇洃鍚洖澶嶏紝涓嶉噸鍙�");
+        responseTv.setText("");
         String propertyDownTopic = String.format(TopicConstant.PROPERTY_DOWN, HDLLinkConfig.getInstance().getGatewayId());
         String bodyStr = getPropertyDownBodyStr();
         HDLLink.getInstance().tcpSendMsg(propertyDownTopic, bodyStr);
@@ -528,6 +615,7 @@
      */
     private void udpSend() {
         tv.setText("UDP鍙戦�� 鍙彂涓�娆★紝涓嶇洃鍚洖澶嶏紝涓嶉噸鍙�");
+        responseTv.setText("");
         String propertyDownTopic = String.format(TopicConstant.PROPERTY_DOWN, HDLLinkConfig.getInstance().getGatewayId());
         String bodyStr = getPropertyDownBodyStr();
         HDLLink.getInstance().udpSendMsg(propertyDownTopic, bodyStr);
@@ -560,6 +648,7 @@
      */
     private void udpSendWithCallback() {
         tv.setText("UDP鍙戦�侊紝鐩戝惉涓婚鍥炲锛屽甫閲嶅彂甯﹀洖璋�");
+        responseTv.setText("");
         String propertyDownTopic = String.format(TopicConstant.PROPERTY_DOWN, HDLLinkConfig.getInstance().getGatewayId());
         String bodyStr = getPropertyDownBodyStr();
         HDLLink.getInstance().udpSendMsg(propertyDownTopic, bodyStr, new HDLLinkResponseCallBack() {
@@ -581,6 +670,7 @@
      */
     private void tcpSendWithCallback() {
         tv.setText("TCP鍙戦�侊紝鐩戝惉涓婚鍥炲锛屽甫閲嶅彂甯﹀洖璋�");
+        responseTv.setText("");
         String propertyDownTopic = String.format(TopicConstant.PROPERTY_DOWN, HDLLinkConfig.getInstance().getGatewayId());
         String bodyStr = getPropertyDownBodyStr();
         HDLLink.getInstance().tcpSendMsg(propertyDownTopic, bodyStr, new HDLLinkCallBack() {
@@ -596,4 +686,54 @@
             }
         });
     }
+
+    private void deleteNetwork() {
+        tv.setText("閫�缃�");
+        responseTv.setText("");
+        String oid = HDLLinkConfig.getInstance().getDeviceInfoBean().getOID();
+        HDLLink.getInstance().deleteNetwork(oid, false, new HDLLinkCallBack() {
+            @Override
+            public void onSuccess(String msg) {
+                responseTv.setText(msg);
+                //閫�缃戞垚鍔燂紝鍒犻櫎鏁版嵁
+            }
+
+            @Override
+            public void onError(HDLLinkException e) {
+                responseTv.setText(e.getMsg());
+            }
+        });
+    }
+
+    /**
+     * 涓婃姤oid鍒楄〃
+     */
+    private void UploadOidList() {
+        tv.setText("涓婃姤oid鍒楄〃...");
+        responseTv.setText("");
+
+        //1.璁剧疆璁惧淇℃伅
+        AuthenticateRequest.AuthenticateDeviceInfoBean authenticateDeviceInfoBean = HDLLinkConfig.getInstance().getDeviceInfoBean();
+
+        ListUploadRequest request = new ListUploadRequest();
+        request.setOid(authenticateDeviceInfoBean.getOID());
+        request.setDevice_name(authenticateDeviceInfoBean.getDeviceName());
+        request.setDevice_model(authenticateDeviceInfoBean.getDeviceModel());
+        request.setDevice_mac(authenticateDeviceInfoBean.getDeviceMAC());
+        request.setSrc("LINK");//鏉ヨ嚜鍝釜椹卞姩锛屽Link璁惧娌℃湁鍒欏~"LINK"
+        request.setFrom(authenticateDeviceInfoBean.getOID());//鏉ヨ嚜鍝釜缃戝叧锛屽鏋滄椂Link缃戠粶璁惧锛屽垯濉嚜韬玱id锛涘鏋滄槸椹卞姩鍒欎笉闇�瑕佹瀛楁
+
+        HDLLink.getInstance().UploadOidList(request, new HDLLinkCallBack() {
+            @Override
+            public void onError(HDLLinkException error) {
+                tv.setText(error.getMsg());
+            }
+
+            @Override
+            public void onSuccess(String data) {
+                tv.setText("涓婃姤oid鍒楄〃鎴愬姛");
+                responseTv.setText(data);
+            }
+        });
+    }
 }
\ No newline at end of file
diff --git a/HDLSDK_DEMO/app/src/main/res/layout/activity_main.xml b/HDLSDK_DEMO/app/src/main/res/layout/activity_main.xml
index 6fa6c2b..2fe14f5 100644
--- a/HDLSDK_DEMO/app/src/main/res/layout/activity_main.xml
+++ b/HDLSDK_DEMO/app/src/main/res/layout/activity_main.xml
@@ -40,10 +40,20 @@
             android:layout_height="match_parent"
             android:orientation="vertical">
 
+            <EditText
+                android:id="@+id/edittext"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:paddingStart="10dp"
+                android:hint="璇疯緭鍏ac"
+                android:text="f2c5d8bad48f"
+                />
+
             <TextView
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:paddingStart="10dp"
+                android:layout_marginTop="@dimen/dp_10"
                 android:text="褰撳墠鐘舵�侊細" />
 
             <TextView
diff --git a/HDLSDK_DEMO/config.gradle b/HDLSDK_DEMO/config.gradle
index 582d32b..6c1835a 100644
--- a/HDLSDK_DEMO/config.gradle
+++ b/HDLSDK_DEMO/config.gradle
@@ -1,5 +1,5 @@
 ext {
-    minSdkVersion = 16
+    minSdkVersion = 21
     targetSdkVersion = 31
     compileSdkVersion = 31
     versionName = "1.0.0"

--
Gitblit v1.8.0