JLChen
2021-11-15 e7b78e0a428fa54d94c1b274a4305640b2859e80
HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java
@@ -9,27 +9,31 @@
import androidx.recyclerview.widget.RecyclerView;
import android.Manifest;
import android.app.Instrumentation;
import android.os.Bundle;
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.hdl.sdk.common.config.TopicConstant;
import com.hdl.sdk.common.utils.IdUtils;
import com.hdl.sdk.common.utils.IpUtils;
import com.hdl.sdk.connect.HDLSocket;
import com.hdl.sdk.connect.bean.LinkRequest;
import com.hdl.sdk.connect.HDLLink;
import com.hdl.sdk.connect.bean.AuthenticateRequest;
import com.hdl.sdk.connect.bean.GatewaySearchBean;
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.DeviceControlRequest;
import com.hdl.sdk.connect.protocol.LinkMessageDecoder;
import com.hdl.sdk.connect.protocol.LinkMessageEncoder;
import com.hdl.sdk.socket.SocketBoot;
import com.hdl.sdk.socket.SocketOptions;
import com.hdl.sdk.socket.client.UdpClient;
import com.hdl.sdk.socket.codec.MessagePipeLine;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -40,7 +44,7 @@
    private RecyclerView rv;
    private TextView tv;
    private TextView responseTv;
    boolean isOn;
    @Override
@@ -51,6 +55,8 @@
        tv = findViewById(R.id.state_tv);
        rv = findViewById(R.id.rv);
        rv.setLayoutManager(new LinearLayoutManager(this));
        checkIfCertified();
        ActivityResultLauncher<String[]> launcher = registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), new ActivityResultCallback<Map<String, Boolean>>() {
            @Override
@@ -68,6 +74,8 @@
        beans.add(new DemoBean("设备控制"));
        beans.add(new DemoBean("状态上报"));
        beans.add(new DemoBean("读取状态"));
        beans.add(new DemoBean("入网认证"));
        beans.add(new DemoBean("搜索指定网关是否在线"));
        demoAdapter = new DemoAdapter(beans);
        rv.setAdapter(demoAdapter);
@@ -126,7 +134,20 @@
                        break;
                    case 3:
                        //设备控制
                         // HDLSocket.getInstance().propertyDown();
                        isOn = !isOn;
                        List<DeviceControlRequest> requestList = new ArrayList<>();
                        DeviceControlRequest request = new DeviceControlRequest();
                        request.setSid("000101B847C71B02020100010101");
                        List<DeviceControlRequest.StatusBean>  statusBeanList= new ArrayList<>();
                        DeviceControlRequest.StatusBean bean =  new DeviceControlRequest.StatusBean();
                        bean.setKey("on_off");
                        bean.setValue(isOn ? "on" : "off");
                        statusBeanList.add(bean);
                        request.setStatus(statusBeanList);
                        requestList.add(request);
                        HDLAuthSocket.getInstance().propertyDown(requestList,null);
                        break;
                    case 4:
                        //状态上报
@@ -136,9 +157,119 @@
                        //读取状态
                        // HDLSocket.getInstance().propertyRead();
                        break;
                    case 6:
//                        //入网认证
                        sendAuthenticateRequest();
                        break;
                    case 7:
//                        //如果已经认证后,搜索指定网关是否在线
                        HDLLink.getInstance().searchGateway(new HDLAuthSocket.SearchGatewayCallBack() {
                            @Override
                            public void onEnd(String error) {
                                tv.setText("网关不在线");
                            }
                            @Override
                            public void onSuccess(GatewaySearchBean gatewaySearchBean) {
                                tv.setText("网关在线");
                                responseTv.setText("网关id:"+gatewaySearchBean.getGatewayId());
//                                Log.i("TAG", "onSuccess: 搜索成功:"+gatewaySearchBean.getGatewayId());
                            }
                        });
                        break;
                }
            }
        });
    }
    public void showToast(String text) {
        Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
    }
    void checkIfCertified(){
        boolean isCertified = HDLLink.getInstance().checkIfCertified();
        showToast(isCertified?"已经认证过":"未认证");
    }
    /**
     * 入网认证
     */
    void sendAuthenticateRequest(){
        String macStr = "AA000000000000BB";
        String secret = "87ae414b7a853f65";
        String mac_key = stringToMD5(stringToMD5(macStr + secret));
        String versionString = "HDL_V1.0.1";
        String time = String.valueOf(System.currentTimeMillis());
        //1.设置认证信息
        AuthenticateRequest.RequestBean requestBean = new AuthenticateRequest.RequestBean();
        requestBean.setMAC(macStr);
        requestBean.setSupplier("HDL");
        requestBean.setFirmwareVersion(versionString);
        requestBean.setHardwareModel("1956F");
        AuthenticateRequest.AuthBean authbean = new AuthenticateRequest.AuthBean();
        authbean.setSpk("ir.module");
        authbean.setMACKey(mac_key);
        authbean.setRequest(requestBean);
        //2.设置设备信息
        AuthenticateRequest.AuthenticateDeviceInfoBean infoBean = new AuthenticateRequest.AuthenticateDeviceInfoBean();
        infoBean.setDeviceMAC(macStr);
        infoBean.setIPMAC(macStr);
        infoBean.setDeviceName("HDL面板");
        infoBean.setDeviceModel("HDL");
        infoBean.setAccessMode("WIFI");
        infoBean.setIPAddress(IpUtils.getIP(this));
        infoBean.setOID("010105000000FE08");
        infoBean.setSid("010105000000FE08110100000000");
//        infoBean.set
        AuthenticateRequest.VersionBean[] versionBeans = new AuthenticateRequest.VersionBean[]{new AuthenticateRequest.VersionBean("FW", versionString), new AuthenticateRequest.VersionBean("HW", "1956F")};
        infoBean.setVersions(versionBeans);
        AuthenticateRequest request = new AuthenticateRequest(IdUtils.getUUId(), time, infoBean, authbean);
        String ip = IpUtils.getBroadcastAddress();
//        ip = "192.168.10.102";
        HDLLink.getInstance().sendAuthenticateRequest(ip, request, new HDLAuthSocket.CallBack() {
            @Override
            public void onError(String error) {
                Log.i("TAG", "onError: 认证失败");
            }
            @Override
            public void onSuccess(String data) {
                tv.setText("认证成功");
                responseTv.setText(data.toString());
            }
        });
    }
    String stringToMD5(String text) {
        byte[] hash;
        try {
            hash = MessageDigest.getInstance("MD5").digest(text.getBytes("UTF-8"));
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return null;
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            return null;
        }
        StringBuilder hex = new StringBuilder(hash.length * 2);
        for (byte b : hash) {
            if ((b & 0xFF) < 0x10)
                hex.append("0");
            hex.append(Integer.toHexString(b & 0xFF));
        }
        return hex.toString();
    }
}