Prechádzať zdrojové kódy

1.后台可以修改参数。

Tony 5 rokov pred
rodič
commit
5abf32def0
37 zmenil súbory, kde vykonal 1823 pridanie a 119 odobranie
  1. 8 2
      app/src/main/AndroidManifest.xml
  2. 33 5
      app/src/main/java/com/sunzee/adapter/AdvanceParameterAdapter.java
  3. 125 0
      app/src/main/java/com/sunzee/adapter/DebugParameterAdapter.java
  4. 4 2
      app/src/main/java/com/sunzee/adapter/GeneralParameterAdapter.java
  5. 3 1
      app/src/main/java/com/sunzee/base/MvpFragment.java
  6. 9 0
      app/src/main/java/com/sunzee/model/domain/GeTuiBean.java
  7. 45 0
      app/src/main/java/com/sunzee/model/domain/ParameterBean.java
  8. 88 0
      app/src/main/java/com/sunzee/mvp/advanceparameter/AdvanceParameterPresenter.java
  9. 2 0
      app/src/main/java/com/sunzee/mvp/advanceparameter/AdvanceParameterView.java
  10. 14 13
      app/src/main/java/com/sunzee/mvp/advertising/AdvertisingPresenter.java
  11. 32 0
      app/src/main/java/com/sunzee/mvp/debug/DebugPresenter.java
  12. 1 0
      app/src/main/java/com/sunzee/mvp/debug/DebugView.java
  13. 5 0
      app/src/main/java/com/sunzee/retrofit/ApiStores.java
  14. 164 9
      app/src/main/java/com/sunzee/service/MyIntentService.java
  15. 8 4
      app/src/main/java/com/sunzee/service/MyService.java
  16. 0 8
      app/src/main/java/com/sunzee/thread/GeneralParameterThreadType.java
  17. 171 0
      app/src/main/java/com/sunzee/thread/advanceparameter/AdvanceParameterTask.java
  18. 12 0
      app/src/main/java/com/sunzee/thread/advanceparameter/AdvanceParameterThreadType.java
  19. 161 0
      app/src/main/java/com/sunzee/thread/advanceparameter/ThreadPoolAdvanceParameter.java
  20. 136 0
      app/src/main/java/com/sunzee/thread/debugparameter/DebugParameterTask.java
  21. 9 0
      app/src/main/java/com/sunzee/thread/debugparameter/DebugParameterThreadType.java
  22. 88 0
      app/src/main/java/com/sunzee/thread/debugparameter/ThreadPoolDebugParameter.java
  23. 16 10
      app/src/main/java/com/sunzee/thread/GeneralParameterTask.java
  24. 8 0
      app/src/main/java/com/sunzee/thread/generalparameter/GeneralParameterThreadType.java
  25. 14 15
      app/src/main/java/com/sunzee/thread/ThreadPoolGeneralParameter.java
  26. 3 2
      app/src/main/java/com/sunzee/ui/activity/AdvertisingActivity.java
  27. 40 0
      app/src/main/java/com/sunzee/ui/dialog/ResultDialog.java
  28. 156 4
      app/src/main/java/com/sunzee/ui/fragment/AdvanceParameterFragment.java
  29. 169 2
      app/src/main/java/com/sunzee/ui/fragment/DebugFragment.java
  30. 21 20
      app/src/main/java/com/sunzee/ui/fragment/GeneralParameterFragment.java
  31. 228 0
      app/src/main/java/com/sunzee/utils/AdvacedUtil.java
  32. 11 10
      app/src/main/res/layout/fragment_debug.xml
  33. 9 10
      app/src/main/res/layout/fragment_general_parameter.xml
  34. 1 1
      app/src/main/res/layout/item_advanceparameter.xml
  35. 21 0
      app/src/main/res/layout/item_debugparameter.xml
  36. 1 1
      app/src/main/res/layout/item_generalparameter.xml
  37. 7 0
      app/src/main/res/values/strings.xml

+ 8 - 2
app/src/main/AndroidManifest.xml

@@ -11,7 +11,6 @@
     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
-    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
     <uses-permission
         android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
         tools:ignore="ProtectedPermissions" />
@@ -23,12 +22,15 @@
         android:label="@string/app_name"
         android:supportsRtl="true"
         android:theme="@style/AppTheme">
+
         <activity
             android:name=".ui.activity.MainActivity"
             android:label="@string/app_name"></activity>
+
         <activity
             android:name=".ui.activity.HomeActivity"
             android:windowSoftInputMode="stateHidden|adjustPan"></activity>
+
         <activity android:name=".ui.activity.LoginActivity" />
         <activity android:name=".ui.activity.AdvertisingActivity">
             <intent-filter>
@@ -46,7 +48,7 @@
         <service
             android:name=".service.MyIntentService"
             android:permission="android.permission.BIND_JOB_SERVICE" />
-        <service android:name=".service.DownServer" />
+
         <service android:name=".service.MyService" />
         <service
             android:name="com.igexin.sdk.PushService"
@@ -59,6 +61,8 @@
                 <action android:name="com.igexin.sdk.action.service.message" />
             </intent-filter>
         </service>
+        <!--下载相关-->
+        <service android:name=".service.DownServer" />
 
         <receiver android:name="com.igexin.sdk.PushReceiver">
             <intent-filter>
@@ -71,6 +75,8 @@
                 <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
             </intent-filter>
         </receiver>
+
+
         <receiver android:name=".receiver.DownReceiver">
             <intent-filter>
                 <action android:name="android.intent.action.DOWNLOAD_COMPLETE" />

+ 33 - 5
app/src/main/java/com/sunzee/adapter/AdvanceParameterAdapter.java

@@ -4,6 +4,7 @@ import android.support.annotation.NonNull;
 import android.support.v7.widget.RecyclerView;
 import android.text.Editable;
 import android.text.TextWatcher;
+import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -12,8 +13,11 @@ import android.widget.EditText;
 import android.widget.TextView;
 
 import com.sunzee.R;
+import com.sunzee.model.domain.ParameterBean;
+import com.sunzee.utils.ToastUtil;
 import com.wuxiaolong.androidutils.library.LogUtil;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 
 /**
@@ -22,11 +26,25 @@ import java.util.HashMap;
 public class AdvanceParameterAdapter extends RecyclerView.Adapter<AdvanceParameterAdapter.ViewHolder> {
 
     private final int[] paraName;
+    private ArrayList<ParameterBean> parameterBeans = new ArrayList<>();
+
+    public ArrayList<ParameterBean> getParameterBeans() {
+        return parameterBeans;
+    }
+
+    public void setParameterBeans(ArrayList<ParameterBean> parameterBeans) {
+        this.parameterBeans = parameterBeans;
+    }
+
+    private final String[] paraAddress = {
+            "D426", "D427", "D428", "D429",
+            "D430", "D431"};
     //保存editText的值
     public HashMap<Integer, String> contents = new HashMap<>();
 
     public AdvanceParameterAdapter(int[] paraName) {
         this.paraName = paraName;
+
     }
 
     public void setItemListener(AdvanceParameterAdapter.ItemParaClickListener listener) {
@@ -37,10 +55,14 @@ public class AdvanceParameterAdapter extends RecyclerView.Adapter<AdvanceParamet
 
     public void setValues(String[] values) {
         this.values = values;
+        parameterBeans.clear();
+        for (int i = 0; i < values.length; i++) {
+            parameterBeans.add(new ParameterBean(paraAddress[i], values[i]));
+        }
     }
 
     //地址具体数值
-    private String[] values;
+    private String[] values = new String[6];
 
 
     @NonNull
@@ -51,6 +73,8 @@ public class AdvanceParameterAdapter extends RecyclerView.Adapter<AdvanceParamet
 
     }
 
+    private static final String TAG = "AdvanceParameterAdapter";
+
     @Override
     public void onBindViewHolder(@NonNull AdvanceParameterAdapter.ViewHolder viewHolder, final int i) {
         viewHolder.tvName.setText(paraName[i]);
@@ -60,13 +84,17 @@ public class AdvanceParameterAdapter extends RecyclerView.Adapter<AdvanceParamet
             @Override
             public void onClick(View v) {
                 String text = contents.get(i);
+                if (text.equals("")) {
+                    ToastUtil.showToast("不能输入空值哦!!!");
+                    return;
+                }
                 listener.onItemListener(v, i, text);
+                parameterBeans.set(i, new ParameterBean(paraAddress[i], text));
             }
         });
         if (values != null && values.length > 0) {
             viewHolder.etPara.setText(values[i]);
         }
-
     }
 
     @Override
@@ -76,9 +104,9 @@ public class AdvanceParameterAdapter extends RecyclerView.Adapter<AdvanceParamet
 
     public static class ViewHolder extends RecyclerView.ViewHolder {
 
-        TextView tvName;
-        EditText etPara;
-        Button btnUpdate;
+        public TextView tvName;
+        public EditText etPara;
+        public Button btnUpdate;
 
         public ViewHolder(@NonNull View itemView) {
             super(itemView);

+ 125 - 0
app/src/main/java/com/sunzee/adapter/DebugParameterAdapter.java

@@ -0,0 +1,125 @@
+package com.sunzee.adapter;
+
+import android.support.annotation.NonNull;
+import android.support.v7.widget.RecyclerView;
+import android.text.Editable;
+import android.text.TextWatcher;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.CheckBox;
+
+import com.sunzee.R;
+import com.wuxiaolong.androidutils.library.LogUtil;
+
+import java.util.HashMap;
+
+/**
+ * @author whw
+ * @time 2019/3/11
+ * @Description 通用参数recyclerview 设配器
+ */
+public class DebugParameterAdapter extends RecyclerView.Adapter<DebugParameterAdapter.ViewHolder> {
+    private int[] paraName;
+
+    //保存editText的值
+    public HashMap<Integer, String> contents = new HashMap<>();
+
+    public DebugParameterAdapter(int[] paraName) {
+        this.paraName = paraName;
+    }
+
+    public void setItemListener(ItemParaClickListener listener) {
+        this.listener = listener;
+    }
+
+    private ItemParaClickListener listener;
+
+    public void setValues(String[] values) {
+        this.values = values;
+    }
+
+    //地址具体数值
+    private String[] values;
+
+    private static final String TAG = "DebugParameterAdapter";
+
+    @NonNull
+    @Override
+    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
+        View inflate = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_generalparameter, viewGroup, false);
+        return new ViewHolder(inflate);
+
+    }
+
+    @Override
+    public void onBindViewHolder(@NonNull ViewHolder viewHolder, final int i) {
+        viewHolder.cbManual.setText(paraName[i]);
+        viewHolder.cbManual.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                listener.onItemListener(view, i, "");
+            }
+        });
+    }
+
+    @Override
+    public int getItemCount() {
+        return paraName.length;
+    }
+
+    public static class ViewHolder extends RecyclerView.ViewHolder {
+
+        public CheckBox cbManual;
+
+        public ViewHolder(@NonNull View itemView) {
+            super(itemView);
+            cbManual = itemView.findViewById(R.id.cb_manual);
+
+        }
+    }
+
+
+    public class MyTextChangedListener implements TextWatcher {
+
+        public ViewHolder holder;
+        public HashMap<Integer, String> contents;
+        public String TAG = "测试";
+
+        public MyTextChangedListener(ViewHolder holder, HashMap<Integer, String> contents) {
+            this.holder = holder;
+            this.contents = contents;
+        }
+
+        @Override
+        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
+
+        }
+
+        @Override
+        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
+
+        }
+
+        @Override
+        public void afterTextChanged(Editable editable) {
+            if (holder != null && contents != null) {
+                int adapterPosition = holder.getAdapterPosition();
+                LogUtil.d(TAG, "adapterPosition===================" + adapterPosition);
+                contents.put(adapterPosition, editable.toString());
+            }
+        }
+    }
+
+    /**
+     * @Description 通用参数界面点击事件监听
+     */
+    public interface ItemParaClickListener {
+        /**
+         * @param view     控件
+         * @param position 位置
+         * @param text
+         */
+        void onItemListener(View view, int position, String text);
+    }
+}

+ 4 - 2
app/src/main/java/com/sunzee/adapter/GeneralParameterAdapter.java

@@ -1,12 +1,15 @@
 package com.sunzee.adapter;
 
+import android.content.Context;
 import android.support.annotation.NonNull;
 import android.support.v7.widget.RecyclerView;
 import android.text.Editable;
 import android.text.TextWatcher;
+import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.view.inputmethod.InputMethodManager;
 import android.widget.Button;
 import android.widget.CheckBox;
 import android.widget.EditText;
@@ -45,7 +48,7 @@ public class GeneralParameterAdapter extends RecyclerView.Adapter<GeneralParamet
     //地址具体数值
     private String[] values;
 
-
+    private static final String TAG = "GeneralParameterAdapter";
     @NonNull
     @Override
     public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
@@ -57,7 +60,6 @@ public class GeneralParameterAdapter extends RecyclerView.Adapter<GeneralParamet
     @Override
     public void onBindViewHolder(@NonNull ViewHolder viewHolder, final int i) {
         viewHolder.cbManual.setText(paraName[i]);
-
         viewHolder.cbManual.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {

+ 3 - 1
app/src/main/java/com/sunzee/base/MvpFragment.java

@@ -2,11 +2,12 @@ package com.sunzee.base;
 
 
 import android.os.Bundle;
+import android.util.Log;
 import android.view.View;
 
 public abstract class MvpFragment<P extends BasePresenter> extends BaseFragment {
     protected P mvpPresenter;
-
+    private static final String TAG = "MvpFragment";
     @Override
     public void onViewCreated(View view, Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
@@ -19,6 +20,7 @@ public abstract class MvpFragment<P extends BasePresenter> extends BaseFragment
     @Override
     public void onDestroyView() {
         super.onDestroyView();
+        Log.d(TAG, "onDestroyView: ");
         if (mvpPresenter != null) {
             mvpPresenter.detachView();
         }

+ 9 - 0
app/src/main/java/com/sunzee/model/domain/GeTuiBean.java

@@ -46,4 +46,13 @@ public class GeTuiBean {
         this.kind = kind;
     }
 
+    @Override
+    public String toString() {
+        return "GeTuiBean{" +
+                "kind_data='" + kind_data + '\'' +
+                ", kind='" + kind + '\'' +
+                ", netTime='" + netTime + '\'' +
+                ", webTime='" + webTime + '\'' +
+                '}';
+    }
 }

+ 45 - 0
app/src/main/java/com/sunzee/model/domain/ParameterBean.java

@@ -0,0 +1,45 @@
+package com.sunzee.model.domain;
+
+/**
+ * 参数bean
+ */
+public class ParameterBean {
+    /**
+     * name : D400
+     * val : 1234
+     */
+    private String name;
+    private String val;
+
+    public ParameterBean() {
+    }
+
+    public ParameterBean(String name, String val) {
+        this.name = name;
+        this.val = val;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getVal() {
+        return val;
+    }
+
+    public void setVal(String val) {
+        this.val = val;
+    }
+
+    @Override
+    public String toString() {
+        return "ParameterBean{" +
+                "name='" + name + '\'' +
+                ", val='" + val + '\'' +
+                '}';
+    }
+}

+ 88 - 0
app/src/main/java/com/sunzee/mvp/advanceparameter/AdvanceParameterPresenter.java

@@ -1,6 +1,17 @@
 package com.sunzee.mvp.advanceparameter;
 
+import android.util.Log;
+
+import com.google.gson.Gson;
 import com.sunzee.base.BasePresenter;
+import com.sunzee.model.Heartbeat;
+import com.sunzee.model.HttpResult;
+import com.sunzee.model.domain.ParameterBean;
+import com.sunzee.retrofit.ApiCallback;
+import com.sunzee.thread.advanceparameter.ThreadPoolAdvanceParameter;
+import com.sunzee.utils.HexadecimalUtil;
+import java.util.ArrayList;
+import okhttp3.RequestBody;
 
 /**
  * 进阶参数presenter
@@ -9,4 +20,81 @@ public class AdvanceParameterPresenter extends BasePresenter<AdvanceParameterVie
     public AdvanceParameterPresenter(AdvanceParameterView view) {
         attachView(view);
     }
+
+    private static final String TAG = "AdvanceParameterPresent";
+
+    public void setAdvanced(String name, ArrayList<String> results, ThreadPoolAdvanceParameter threadGetParameter1) {
+        if (name.equals("D426")) {
+            if (!threadGetParameter1.isReceive1()) {
+                threadGetParameter1.setReceive1(true);
+                threadGetParameter1.stopReadD426();
+                threadGetParameter1.getValues()[0] = String.valueOf(HexadecimalUtil.hex2dec(results.get(0)));
+            }
+        } else if (name.equals("D427")) {
+            if (!threadGetParameter1.isReceive2()) {
+                threadGetParameter1.setReceive2(true);
+                threadGetParameter1.stopReadD427();
+                threadGetParameter1.getValues()[1] = String.valueOf(HexadecimalUtil.hex2dec(results.get(0)));
+            }
+
+        } else if (name.equals("D428")) {
+            if (!threadGetParameter1.isReceive3()) {
+                threadGetParameter1.setReceive3(true);
+                threadGetParameter1.stopReadD428();
+                threadGetParameter1.getValues()[2] = String.valueOf(HexadecimalUtil.hex2dec(results.get(0)));
+            }
+
+        } else if (name.equals("D429")) {
+            if (!threadGetParameter1.isReceive4()) {
+                threadGetParameter1.setReceive4(true);
+                //参数23 D278
+                threadGetParameter1.stopReadD429();
+                threadGetParameter1.getValues()[3] = String.valueOf(HexadecimalUtil.hex2dec(results.get(0)));
+            }
+        } else if (name.equals("D430")) {
+            if (!threadGetParameter1.isReceive5()) {
+                threadGetParameter1.setReceive5(true);
+                threadGetParameter1.stopReadD430();
+                threadGetParameter1.getValues()[4] = String.valueOf(HexadecimalUtil.hex2dec(results.get(0)));
+            }
+        } else if (name.equals("D431")) {
+            if (!threadGetParameter1.isReceive6()) {
+                threadGetParameter1.setReceive6(true);
+                threadGetParameter1.stopReadD431();
+                threadGetParameter1.getValues()[5] = String.valueOf(HexadecimalUtil.hex2dec(results.get(0)));
+            }
+        }
+        if (threadGetParameter1.isReceive1() && threadGetParameter1.isReceive2() && threadGetParameter1.isReceive3() && threadGetParameter1.isReceive4() && threadGetParameter1.isReceive5() && threadGetParameter1.isReceive6()) {
+            mvpView.getDataSuccess();
+            threadGetParameter1.setReceive1(false);
+            threadGetParameter1.setReceive2(false);
+            threadGetParameter1.setReceive3(false);
+            threadGetParameter1.setReceive4(false);
+            threadGetParameter1.setReceive5(false);
+            threadGetParameter1.setReceive6(false);
+        }
+    }
+
+    public void updateAdvanced(ArrayList<ParameterBean> parameterBeans) {
+
+        String url = "/api/app_equipment/index/updateParam/1/" + Heartbeat.deviceId + ".htm";
+        Gson gson = new Gson();
+        String json = gson.toJson(parameterBeans);
+        RequestBody body = RequestBody.create(okhttp3.MediaType.parse("application/json; charset=utf-8"), json);
+        addSubscription(apiStores.updateParamApi(url, body), new ApiCallback<HttpResult<String>>() {
+            @Override
+            public void onSuccess(HttpResult<String> model) {
+                Log.d(TAG, "onSuccess: " + model);
+                mvpView.hideLoading();
+            }
+
+            @Override
+            public void onFailure(String msg) {
+            }
+
+            @Override
+            public void onFinish() {
+            }
+        });
+    }
 }

+ 2 - 0
app/src/main/java/com/sunzee/mvp/advanceparameter/AdvanceParameterView.java

@@ -6,4 +6,6 @@ import com.sunzee.base.BaseView;
  * 进阶参数界面 view
  */
 public interface AdvanceParameterView extends BaseView {
+    void getDataSuccess();
+
 }

+ 14 - 13
app/src/main/java/com/sunzee/mvp/advertising/AdvertisingPresenter.java

@@ -31,8 +31,7 @@ public class AdvertisingPresenter extends BasePresenter<AdvertisingView> {
 
     //--------------------------------------------------------------------------广告 start----------------------------------------------------------------------------------------------
     public void play() {
-        showOut = Hawk.get("show_out", new HashMap<Integer, GetAdBean>());
-        Log.d(TAG, "initView: " + showOut.get(0));
+
         //2.读文件的数据
         int leftFileSize = leftVideoImageFile();
         int rightFileSize = rightVideoImageFile();
@@ -63,10 +62,12 @@ public class AdvertisingPresenter extends BasePresenter<AdvertisingView> {
      * @return
      */
     private int rightVideoImageFile() {
+        showOut = Hawk.get("show_out", new HashMap<Integer, GetAdBean>());
+        Log.d(TAG, "show_out rightVideoImageFile: "+showOut);
         this.allFiles = FileUtil.getAllFiles(Environment.getExternalStorageDirectory().getPath() + "/rightvideoimg/", "");
         //判断是否为空
         if (this.allFiles == null || this.allFiles.length <= 0) {
-            LogUtil.d(TAG, "initView: 文件为空,没有下载");
+            LogUtil.d(TAG, "rightvideoimg initView: 文件为空,没有下载");
             return 0;
         }
 //获取本地所有文件的名字
@@ -75,44 +76,44 @@ public class AdvertisingPresenter extends BasePresenter<AdvertisingView> {
         for (int i = 0; i < this.allFiles.length; i++) {
             String name = this.allFiles[i].getName();
             String fileName = name.substring(0, name.length() - 4);//获取文件名
-            LogUtil.d(TAG, "initView: 本地所有的文件名:" + fileName);
+            LogUtil.d(TAG, "rightvideoimg initView: 本地所有的文件名:" + fileName);
             // 文件名 文件
 
             playList.put(fileName, this.allFiles[i]);
         }
         if (showOut == null || showOut.size() <= 0) {
             //没有要播放的文件
-            LogUtil.d(TAG, "initView: 没有要播放的文件");
+            LogUtil.d(TAG, "showOut initView: 没有要播放的文件");
             return 0;
         }
         names = new ArrayList<>();
         for (int i = 0; i < allFiles.length; i++) {
             if (showOut.get(i) != null) {
                 String name = showOut.get(i).getId();
-                LogUtil.d(TAG, "initView: 广告选择要播放的文件名:" + name);
+                LogUtil.d(TAG, "showOut initView: 广告选择要播放的文件名:" + name);
                 names.add(showOut.get(i));
             }
         }
         if (names == null || names.size() <= 0) {
 //            ToastUtil.showToast("请选择文件播放");
-            LogUtil.d(TAG, "initView: 没有选择播放的文件");
+            LogUtil.d(TAG, "showOut initView: 没有选择播放的文件");
             return 0;
         }
         allPlayList = new ArrayList<>();
         if (playList == null || playList.size() <= 0) {
-            LogUtil.d(TAG, "initView: playList为空");
+            LogUtil.d(TAG, "rightvideoimg initView: playList为空");
             return 0;
         }
         //通过名字找出要找出需要播放的文件
         for (int i = 0; i < names.size(); i++) {
             File file = playList.get(names.get(i).getId());
             if (file != null) {
-                LogUtil.d(TAG, "initView: 通过名字找到的播放文件:" + file.getName());
+                LogUtil.d(TAG, "rightvideoimg initView: 通过名字找到的播放文件:" + file.getName());
                 allPlayList.add(file);
             }
         }
         if (allPlayList == null || allPlayList.size() <= 0) {
-            LogUtil.d(TAG, "initView: allPlayList为0");
+            LogUtil.d(TAG, "rightvideoimg showOUt initView: allPlayList为0");
             return 0;
         }
         return setTimeRules();
@@ -185,8 +186,8 @@ public class AdvertisingPresenter extends BasePresenter<AdvertisingView> {
             LogUtil.e(TAG, "playCorporationAd: 没有下载A屏文件");
             return 0;
         }
-        adBeans = Hawk.get("showAdA", new ArrayList<GetAdBean>());
-        Log.d(TAG, "rightVideoImageFile: " + adBeans);
+        adBeans = Hawk.get("showAdA", new ArrayList<GetAdBean>());//为空
+        Log.d(TAG, "showAdA leftVideoImageFile: " + adBeans);
         if (adBeans == null || adBeans.size() <= 0) {
             LogUtil.e(TAG, "playCorporationAd: 没有下载A屏数据");
             return 0;
@@ -200,7 +201,7 @@ public class AdvertisingPresenter extends BasePresenter<AdvertisingView> {
                 String name = allFiles[j].getName();
                 LogUtil.d(TAG, "playCorporationAd: name= " + name);
                 String fileName = name.substring(0, name.length() - 4);//获取文件名
-                Log.d(TAG, "rightVideoImageFile: " + fileName + ":getAdBean.getId()+" + getAdBean.getId());
+                Log.d(TAG, "leftVideoImageFile: " + fileName + ":getAdBean.getId()+" + getAdBean.getId());
                 if (fileName.equals(getAdBean.getId())) {
                     playFile.add(allFiles[j]);
                 }

+ 32 - 0
app/src/main/java/com/sunzee/mvp/debug/DebugPresenter.java

@@ -1,6 +1,13 @@
 package com.sunzee.mvp.debug;
 
+import android.util.Log;
+
 import com.sunzee.base.BasePresenter;
+import com.sunzee.thread.debugparameter.ThreadPoolDebugParameter;
+import com.sunzee.utils.HexadecimalUtil;
+import com.wuxiaolong.androidutils.library.LogUtil;
+
+import java.util.ArrayList;
 
 /**
  * 调试页界面 presenter
@@ -9,4 +16,29 @@ public class DebugPresenter extends BasePresenter<DebugView> {
     public DebugPresenter(DebugView view) {
         attachView(view);
     }
+
+    private static final String TAG = "DebugPresenter";
+
+    public void setDebugParameter(String name, ArrayList<String> results, ThreadPoolDebugParameter threadGetParameter1) {
+        if (name.equals("M311")) {
+            if (!threadGetParameter1.isReceive1()) {
+                threadGetParameter1.setReceive1(true);
+                threadGetParameter1.stopReadM311();
+                //参数19 D218
+                threadGetParameter1.getValues().set(0, results.get(7));
+                threadGetParameter1.getValues().set(1, results.get(8));
+                threadGetParameter1.getValues().set(2, results.get(9));
+                threadGetParameter1.getValues().set(3, results.get(11));
+                threadGetParameter1.getValues().set(4, results.get(12));
+                threadGetParameter1.getValues().set(5, results.get(13));
+                threadGetParameter1.getValues().set(6, results.get(14));
+                LogUtil.d(TAG, "setDebugParameter: "+threadGetParameter1.getValues());
+            }
+        }
+        if (threadGetParameter1.isReceive1()) {
+            mvpView.getDataSuccess();
+            mvpView.hideLoading();
+            threadGetParameter1.setReceive1(false);
+        }
+    }
 }

+ 1 - 0
app/src/main/java/com/sunzee/mvp/debug/DebugView.java

@@ -6,4 +6,5 @@ import com.sunzee.base.BaseView;
  * 调试页界面 view
  */
 public interface DebugView extends BaseView {
+    void getDataSuccess();
 }

+ 5 - 0
app/src/main/java/com/sunzee/retrofit/ApiStores.java

@@ -15,6 +15,7 @@ import retrofit2.http.GET;
 import retrofit2.http.POST;
 import retrofit2.http.Query;
 import retrofit2.http.QueryMap;
+import retrofit2.http.Url;
 
 
 public interface ApiStores {
@@ -64,4 +65,8 @@ public interface ApiStores {
     @FormUrlEncoded
     @POST("api/app_equipment/index/updatePwd.htm")
     Observable<HttpResult<String>> updatePaw(@FieldMap Map<String, String> params);
+
+    //上传进阶参数
+    @POST()
+    Observable<HttpResult<String>> updateParamApi(@Url String url, @Body RequestBody body);
 }

+ 164 - 9
app/src/main/java/com/sunzee/service/MyIntentService.java

@@ -1,9 +1,20 @@
 package com.sunzee.service;
 
 import android.content.Context;
+import android.text.TextUtils;
+import android.util.Log;
 
 import com.google.gson.Gson;
 import com.google.gson.reflect.TypeToken;
+import com.hboxs.serialport.SerialPortDevice;
+import com.hboxs.serialport.SerialPortManager;
+import com.hboxs.serialport.SerialPortSendQueue;
+import com.hboxs.serialport.frame.RstCommandFrame;
+import com.hboxs.serialport.frame.SetCommandFrame;
+import com.hboxs.serialport.frame.WriteCommandFrame;
+import com.hboxs.serialport.message.Message;
+import com.hboxs.serialport.util.ByteUtils;
+import com.hboxs.serialport.util.HexUtils;
 import com.igexin.sdk.GTIntentService;
 import com.igexin.sdk.message.GTCmdMessage;
 import com.igexin.sdk.message.GTNotificationMessage;
@@ -30,6 +41,8 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Timer;
+import java.util.TimerTask;
 
 import io.reactivex.Observable;
 import io.reactivex.android.schedulers.AndroidSchedulers;
@@ -96,7 +109,7 @@ public class MyIntentService extends GTIntentService {
         String kind = geTuiBean.getKind();
         switch (kind) {
             case "clean":
-                //开始清洗
+                //一间清洗
                 startClean(gson, geTuiBean, kind);
                 break;
             case "statusType":
@@ -104,10 +117,14 @@ public class MyIntentService extends GTIntentService {
                 statusType(gson, geTuiBean, kind);
                 break;
             case "pushTimeRule":
-                LogUtil.d(TAG, "pushTimeRule: ");
+                LogUtil.d(TAG, "MyIntentServicepushTimeRule: ");
                 //广告规则
                 changeAdRules(geTuiBean);
                 break;
+            case "Param":
+                //更新参数。
+                updataParam(gson, geTuiBean, kind);
+                break;
             //不需要更新广告了,而是更具规则来下载广告。
 //            case "push":
 //                LogUtil.d(TAG, "push: ");
@@ -122,6 +139,115 @@ public class MyIntentService extends GTIntentService {
 
     }
 
+    private void updataParam(Gson gson, GeTuiBean geTuiBean, String kind) {
+        String[] split = geTuiBean.getKind_data().split(":");
+        String address = split[0];
+        String data = split[1];
+        if (!TextUtils.isEmpty(address) || !TextUtils.isEmpty(data)) {
+            switch (address) {
+                //复位和置位   0为启动,1为关闭。
+                case "M311":
+                case "M312":
+                case "M313":
+                case "M315":
+                case "M316":
+                case "M317":
+                case "M318":
+                case "M17":
+                    if ("0".equals(data)) {
+                        startSet(address);
+                    } else {
+                        startRst(address);
+                    }
+                    break;
+                //写入,写入后需要上传。
+                case "D426":
+                case "D427":
+                case "D428":
+                case "D429":
+                case "D430":
+                case "D431":
+                    startWrite(address, data.trim());
+                    break;
+            }
+        }
+    }
+
+    private Timer timerWrite;
+    private TimerTask timerTaskWrite;
+
+    private void startWrite(final String address, final String data) {
+        timerWrite = new Timer();
+        timerTaskWrite = new TimerTask() {
+            @Override
+            public void run() {
+                Log.d(TAG, "run: ");
+                String text = ByteUtils.decimal2fitHex(Integer.valueOf(data));
+                SerialPortManager.getInstance().sendCommandFrame(new WriteCommandFrame(address, HexUtils.hexStr2BinStr(text)), address);
+            }
+        };
+        timerWrite.schedule(timerTaskWrite, 0, 1000);
+
+    }
+    
+
+    private Timer timerSet;
+    private TimerTask timerTaskSet;
+
+    private void startSet(final String address) {
+        timerSet = new Timer();
+        timerTaskSet = new TimerTask() {
+            @Override
+            public void run() {
+                SerialPortSendQueue.sendCommand(new SetCommandFrame(address), 18, address);
+                Log.d(TAG, "run: ");
+            }
+        };
+        timerSet.schedule(timerTaskSet, 0, 1000);
+    }
+
+    private Timer timerRst;
+    private TimerTask timerTaskRst;
+
+    private void startRst(final String address) {
+        timerRst = new Timer();
+        timerTaskRst = new TimerTask() {
+            @Override
+            public void run() {
+                SerialPortSendQueue.sendCommand(new RstCommandFrame(address), 18, address);
+                Log.d(TAG, "run: ");
+            }
+        };
+        timerRst.schedule(timerTaskRst, 0, 1000);
+    }
+
+    private void stopSet(Timer timer, TimerTask timerTask) {
+        Log.d(TAG, "stopSet: ");
+        if (timer != null) {
+            timerTask.cancel();
+            timer.cancel();
+            timer = null;
+        }
+    }
+
+    private void stopWrite(Timer timer, TimerTask timerTask) {
+        Log.d(TAG, "stopWrite: ");
+        if (timer != null) {
+            timerTask.cancel();
+            timer.cancel();
+            timer = null;
+        }
+    }
+
+    private void stopRst(Timer timer, TimerTask timerTask) {
+        if (timer != null) {
+            timerTask.cancel();
+            timer.cancel();
+            timer = null;
+        }
+    }
+
+
     private CompositeDisposable mDisposables;
     protected ApiStores apiStores = ApiClient.retrofit().create(ApiStores.class);
 
@@ -159,13 +285,15 @@ public class MyIntentService extends GTIntentService {
 
             @Override
             public void onSuccess(HttpResult<String> rule) {
+                Log.d(TAG, "onSuccess: ");
                 String data = rule.getData();
                 //广告数据
                 ArrayList<GetAdBean> adBeans = Hawk.get("showAd", new ArrayList<GetAdBean>());
-
                 Gson gson = new Gson();
+                Log.d(TAG, "onSuccess: 1" + adBeans);
                 List<TimeRuleBean> list = gson.fromJson(data, new TypeToken<List<TimeRuleBean>>() {
                 }.getType());
+                Log.d(TAG, "onSuccess: 2");
                 //每个id对应的时间数
                 Map<String, String> adRulesMap = new HashMap<>();
                 for (int i = 0; i < adBeans.size(); i++) {
@@ -177,7 +305,6 @@ public class MyIntentService extends GTIntentService {
                         for (int k = 0; k < ad.size(); k++) {
                             if (ad.get(k).equals(getAdBean.getId())) {
                                 sb.append(list.get(j).getTime() + "、");
-                                LogUtil.d(TAG, "list get get" + list.get(j).getName());
                             }
                         }
                     }
@@ -187,17 +314,17 @@ public class MyIntentService extends GTIntentService {
                     LogUtil.e(TAG, "onNext: " + "ad_id=" + getAdBean.getId() + " rules=" + sb.toString());
                     adRulesMap.put(getAdBean.getId(), sb.toString());
                 }
+                Log.d(TAG, "onSuccess: 3" + adRulesMap);
                 //保存对应的id对应的广告规则
                 Hawk.put("ad_rules_map", adRulesMap);
                 EventBus.getDefault().post(new ApiMessageEvent("pushTimeRule", null));
-
                 //发送设备id
                 deviceIdPostApi();
             }
 
             @Override
             public void onFailure(String msg) {
-
+                Log.d(TAG, "onFailure: ");
             }
 
             @Override
@@ -222,7 +349,6 @@ public class MyIntentService extends GTIntentService {
 
             @Override
             public void onFailure(String msg) {
-                LogUtil.e(TAG, msg);
             }
 
             @Override
@@ -277,11 +403,40 @@ public class MyIntentService extends GTIntentService {
     }
 
 
+//    @Subscribe(threadMode = ThreadMode.MAIN)
+//    public void event(ApiMessageEvent messageEvent) {
+//    }
+
     @Subscribe(threadMode = ThreadMode.MAIN)
-    public void event(ApiMessageEvent messageEvent) {
+    public void event(Message messageEvent) {
+        switch (messageEvent.getType()) {
+            case connected:
+                Log.d(TAG, "event: connected");
+                break;
+            case sendError:
+                Log.d(TAG, "event: sendError");
+                break;
+            case ack:
+                Log.d(TAG, "event: 写入成功");
+                stopRst(timerRst, timerTaskRst);
+                stopSet(timerSet, timerTaskSet);
+                stopWrite(timerWrite,timerTaskWrite);
+                Log.d(TAG, "event: ack");
+                break;
+            case nak:
+                Log.d(TAG, "event: nak");
+                break;
+            case disconnected:
+                SerialPortDevice device = new SerialPortDevice("/dev/ttyS2", "9600");
+                SerialPortManager.getInstance().open(device);
+                Log.d(TAG, "event: disconnected");
+                break;
+            case response:
+                Log.d(TAG, "event: response");
+                break;
+        }
     }
 
-
     /**
      * cid 离线上线通知
      */

+ 8 - 4
app/src/main/java/com/sunzee/service/MyService.java

@@ -157,7 +157,7 @@ public class MyService extends Service {
                 //系统管理不为空
                 String managerId = (String) SharedPreferencesUtils.getParam(Name.SYSTEM_ID, "");
                 if (managerId != null && !TextUtils.isEmpty(managerId)) {
-                  //  sendHeart();
+                    //  sendHeart();
                 }
 
             }
@@ -257,7 +257,7 @@ public class MyService extends Service {
                 break;
             case "DOWNKOADADCID":
                 //上传设备id,返回该id的的广告资源
-                Log.d(TAG, "event: ");
+                Log.d(TAG, "event: DOWNKOADADCID");
                 downAdvertising((String) messageEvent.getData());
                 break;
             default:
@@ -294,6 +294,7 @@ public class MyService extends Service {
                         }
                         getAdRuleId("1");
                         Hawk.put("showAdA", getAdBeansA);
+                        Log.d(TAG, "GTIntentService:getAdBeansA2 "+getAdBeansA);
                         //推送给购买页和制作页更新
                         EventBus.getDefault().post(new DownLoadMessageEvent(DownLoadMessageEvent.Type.downloadAll, "", -1));
                         return;
@@ -315,6 +316,7 @@ public class MyService extends Service {
                                 showOut.put(i, getAdBean);
                             }
                         }
+                        Log.d(TAG, "event: " + getAdBeans);
                         Hawk.put("show_sugar", showSugar);
                         Hawk.put("show_out", showOut);
                         Log.d(TAG, "synAdSuccess:保存完成广告数据4" + getAdBeans.size());
@@ -438,8 +440,8 @@ public class MyService extends Service {
             showSugar.put(i, getAdBeansBackup.get(i));
             showOut.put(i, getAdBeansBackup.get(i));
         }
-        Hawk.put("show_sugar", showSugar);
-        Hawk.put("show_out", showOut);
+//        Hawk.put("show_sugar", showSugar);
+//        Hawk.put("show_out", showOut);
 
         getFilesDir();
         LogUtil.d(TAG, "initView: " + getFilesDir().getName());
@@ -538,6 +540,7 @@ public class MyService extends Service {
                 showSugar.put(i, getAdBeans.get(i));
                 showOut.put(i, getAdBeans.get(i));
             }
+            Log.d(TAG, "event: " + getAdBeans);
             Hawk.put("show_sugar", showSugar);
             Hawk.put("show_out", showOut);
             LogUtil.d(TAG, "synAdSuccess:保存完成广告数据3" + getAdBeans.size());
@@ -551,6 +554,7 @@ public class MyService extends Service {
             if (corporationAdBeans.size() <= 0) {
                 LogUtil.e(TAG, "onNext: 推送过来的A屏数据相同,不下载");
                 Hawk.put("showAdA", getAdBeansA);
+                Log.d(TAG, "GTIntentService:getAdBeansA 1"+getAdBeansA);
                 //todo
 //                if (syncDialog != null) {
 //                    syncDiaLogUtil.setAdState(R.string.sync_success);

+ 0 - 8
app/src/main/java/com/sunzee/thread/GeneralParameterThreadType.java

@@ -1,8 +0,0 @@
-package com.sunzee.thread;
-
-public interface GeneralParameterThreadType {
-  int runM17 = 17;
-
-    int rstM17 = 171;
-    int setM17 = 172;
-}

+ 171 - 0
app/src/main/java/com/sunzee/thread/advanceparameter/AdvanceParameterTask.java

@@ -0,0 +1,171 @@
+package com.sunzee.thread.advanceparameter;
+
+import android.util.Log;
+
+import com.hboxs.serialport.SerialPortManager;
+import com.hboxs.serialport.SerialPortSendQueue;
+import com.hboxs.serialport.frame.ReadCommandFrame;
+import com.hboxs.serialport.frame.RstCommandFrame;
+import com.hboxs.serialport.frame.SetCommandFrame;
+import com.hboxs.serialport.frame.WriteCommandFrame;
+
+/**
+ * 进阶参数任务
+ */
+public class AdvanceParameterTask implements Runnable {
+
+    private int type;
+    private volatile String address;
+
+
+
+    public String getAddress() {
+        return address;
+    }
+
+    public int getId() {
+        return id;
+    }
+
+    private volatile int id;
+    private volatile boolean isRun;
+    private String name;
+    private String data;
+
+    public AdvanceParameterTask(int type) {
+        clearPlcQuee();
+        this.type = type;
+    }
+    public AdvanceParameterTask(int type, String address, String data) {
+        clearPlcQuee();
+        this.type = type;
+        this.address=address;
+        this.data = data;
+    }
+    public AdvanceParameterTask(int type, String address, int id) {
+        clearPlcQuee();
+        this.type = type;
+        this.address = address;
+        this.id = id;
+    }
+
+
+    public AdvanceParameterTask(int type, String address, String data, int id, String name) {
+        clearPlcQuee();
+        this.type = type;
+        this.address = address;
+        this.data = data;
+        this.id = id;
+        this.name = name;
+    }
+
+    private void clearPlcQuee() {
+        setIsRun(true);
+        SerialPortSendQueue.clear();
+    }
+
+    public void setIsRun(boolean isRun) {
+        this.isRun = isRun;
+    }
+
+    public boolean getIsRun() {
+        return isRun;
+    }
+
+    @Override
+    public void run() {
+        switch (type) {
+            case AdvanceParameterThreadType.runD426:
+                runReadD426();
+                break;
+            case AdvanceParameterThreadType.runD427:
+                runReadD427();
+                break;
+            case AdvanceParameterThreadType.runD428:
+                runReadD428();
+                break;
+            case AdvanceParameterThreadType.runD429:
+                runReadD429();
+                break;
+            case AdvanceParameterThreadType.runD430:
+                runReadD430();
+                break;
+            case AdvanceParameterThreadType.runD431:
+                runReadD431();
+                break;
+            case AdvanceParameterThreadType.runWrite:
+                runWrite();
+                break;
+
+        }
+    }
+
+    private static final String TAG = "AdvanceParameterTask";
+    private void runWrite() {
+        if (getIsRun()){
+            Log.d(TAG, "runWrite: ");
+            SerialPortManager.getInstance().sendCommandFrame(new WriteCommandFrame(address, data), address);
+        }
+    }
+
+    private void runReadD426() {
+        if (getIsRun()) {
+            SerialPortSendQueue.sendCommand(new ReadCommandFrame("D426", 2), 17, "D426");
+        }
+    }
+
+    private void runReadD427() {
+        if (getIsRun()) {
+            SerialPortSendQueue.sendCommand(new ReadCommandFrame("D427", 2), 17, "D427");
+        }
+    }
+
+    private void runReadD428() {
+        if (getIsRun()) {
+            SerialPortSendQueue.sendCommand(new ReadCommandFrame("D428", 2), 17, "D428");
+        }
+    }
+
+    private void runReadD429() {
+        if (getIsRun()) {
+            SerialPortSendQueue.sendCommand(new ReadCommandFrame("D429", 2), 17, "D429");
+        }
+    }
+
+    private void runReadD430() {
+        if (getIsRun()) {
+            SerialPortSendQueue.sendCommand(new ReadCommandFrame("D430", 2), 17, "D430");
+        }
+    }
+
+    private void runReadD431() {
+        if (getIsRun()) {
+            SerialPortSendQueue.sendCommand(new ReadCommandFrame("D431", 2), 17, "D431");
+        }
+    }
+
+
+    public void setAddress(String address) {
+        this.address = address;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getData() {
+        return data;
+    }
+
+    public void setData(String data) {
+        this.data = data;
+    }
+}

+ 12 - 0
app/src/main/java/com/sunzee/thread/advanceparameter/AdvanceParameterThreadType.java

@@ -0,0 +1,12 @@
+package com.sunzee.thread.advanceparameter;
+
+public interface AdvanceParameterThreadType {
+    int runD426 = 426;
+    int runD427 = 427;
+    int runD428 = 428;
+    int runD429 = 429;
+    int runD430 = 430;
+    int runD431 = 431;
+
+    int runWrite = 2;
+}

+ 161 - 0
app/src/main/java/com/sunzee/thread/advanceparameter/ThreadPoolAdvanceParameter.java

@@ -0,0 +1,161 @@
+package com.sunzee.thread.advanceparameter;
+
+import android.util.Log;
+
+import com.hboxs.serialport.SerialPortManager;
+import com.hboxs.serialport.frame.WriteCommandFrame;
+import com.hboxs.serialport.util.HexUtils;
+
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.ScheduledThreadPoolExecutor;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 进阶参数线程池
+ */
+public class ThreadPoolAdvanceParameter {
+    private final String[] paraAddress;
+    private ScheduledThreadPoolExecutor scheduled;
+
+    public String[] getValues() {
+        return values;
+    }
+
+    private String[] values = new String[6];
+
+    private ScheduledFuture<?>
+            mScheduledFutureD426, mScheduledFutureD427, mScheduledFutureD428,
+            mScheduledFutureD429, mScheduledFutureD430, mScheduledFutureD431,
+            mScheduledFutureWrite;
+
+    private AdvanceParameterTask
+            mTaskRunD426, mTaskRunD427, mTaskRunD428, mTaskRunD429,
+            mTaskRunD430, mTaskRunD431, mTaskRunWrite;
+
+    public ThreadPoolAdvanceParameter(String[] paraAddress) {
+        this.paraAddress = paraAddress;
+        scheduled = new ScheduledThreadPoolExecutor(2);
+        //设置线程池的策略  抛弃旧的任务
+        scheduled.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardOldestPolicy());
+    }
+
+    public boolean isReceive1() {
+        return isReceive1;
+    }
+
+    public void setReceive1(boolean receive1) {
+        isReceive1 = receive1;
+    }
+
+    public boolean isReceive2() {
+        return isReceive2;
+    }
+
+    public void setReceive2(boolean receive2) {
+        isReceive2 = receive2;
+    }
+
+    public boolean isReceive3() {
+        return isReceive3;
+    }
+
+    public void setReceive3(boolean receive3) {
+        isReceive3 = receive3;
+    }
+
+    public boolean isReceive4() {
+        return isReceive4;
+    }
+
+    public void setReceive4(boolean receive4) {
+        isReceive4 = receive4;
+    }
+
+    public boolean isReceive5() {
+        return isReceive5;
+    }
+
+    public void setReceive5(boolean receive5) {
+        isReceive5 = receive5;
+    }
+
+    public boolean isReceive6() {
+        return isReceive6;
+    }
+
+    public void setReceive6(boolean receive6) {
+        isReceive6 = receive6;
+    }
+
+    private boolean isReceive1 = false;
+    private boolean isReceive2 = false;
+    private boolean isReceive3 = false;
+    private boolean isReceive4 = false;
+    private boolean isReceive5 = false;
+    private boolean isReceive6 = false;
+
+    public void startALLRead() {
+
+        mTaskRunD426 = new AdvanceParameterTask(AdvanceParameterThreadType.runD426);
+        mScheduledFutureD426 = scheduled.scheduleAtFixedRate(mTaskRunD426, 10, 1000, TimeUnit.MILLISECONDS);
+
+        mTaskRunD427 = new AdvanceParameterTask(AdvanceParameterThreadType.runD427);
+        mScheduledFutureD427 = scheduled.scheduleAtFixedRate(mTaskRunD427, 10, 1000, TimeUnit.MILLISECONDS);
+
+        mTaskRunD428 = new AdvanceParameterTask(AdvanceParameterThreadType.runD428);
+        mScheduledFutureD428 = scheduled.scheduleAtFixedRate(mTaskRunD428, 10, 1000, TimeUnit.MILLISECONDS);
+
+        mTaskRunD429 = new AdvanceParameterTask(AdvanceParameterThreadType.runD429);
+        mScheduledFutureD429 = scheduled.scheduleAtFixedRate(mTaskRunD429, 10, 1000, TimeUnit.MILLISECONDS);
+
+        mTaskRunD430 = new AdvanceParameterTask(AdvanceParameterThreadType.runD430);
+        mScheduledFutureD430 = scheduled.scheduleAtFixedRate(mTaskRunD430, 10, 1000, TimeUnit.MILLISECONDS);
+
+        mTaskRunD431 = new AdvanceParameterTask(AdvanceParameterThreadType.runD431);
+        mScheduledFutureD431 = scheduled.scheduleAtFixedRate(mTaskRunD431, 10, 1000, TimeUnit.MILLISECONDS);
+    }
+
+    public void stopReadD426() {
+        stopRead(mTaskRunD426, mScheduledFutureD426);
+    }
+
+    public void stopReadD427() {
+        stopRead(mTaskRunD427, mScheduledFutureD427);
+    }
+
+    public void stopReadD428() {
+        stopRead(mTaskRunD428, mScheduledFutureD428);
+    }
+
+    public void stopReadD429() {
+        stopRead(mTaskRunD429, mScheduledFutureD429);
+    }
+
+    public void stopReadD430() {
+        stopRead(mTaskRunD430, mScheduledFutureD430);
+    }
+
+    public void stopReadD431() {
+        stopRead(mTaskRunD431, mScheduledFutureD431);
+    }
+
+
+    public static void stopRead(AdvanceParameterTask threadTask, ScheduledFuture<?> scheduledFuture1) {
+        if (threadTask != null) {
+            threadTask.setIsRun(false);
+        }
+        if (scheduledFuture1 != null) {
+            scheduledFuture1.cancel(true);
+        }
+    }
+
+    public void startWrite(String paraAddress, String data) {
+        mTaskRunWrite = new AdvanceParameterTask(AdvanceParameterThreadType.runWrite, paraAddress, data);
+        mScheduledFutureWrite = scheduled.scheduleAtFixedRate(mTaskRunWrite, 10, 1000, TimeUnit.MILLISECONDS);
+    }
+
+    public void stopWrite() {
+        stopRead(mTaskRunWrite, mScheduledFutureWrite);
+    }
+}

+ 136 - 0
app/src/main/java/com/sunzee/thread/debugparameter/DebugParameterTask.java

@@ -0,0 +1,136 @@
+package com.sunzee.thread.debugparameter;
+
+import com.hboxs.serialport.SerialPortSendQueue;
+import com.hboxs.serialport.frame.ReadCommandFrame;
+import com.hboxs.serialport.frame.RstCommandFrame;
+import com.hboxs.serialport.frame.SetCommandFrame;
+
+import static com.sunzee.thread.debugparameter.DebugParameterThreadType.runRst;
+import static com.sunzee.thread.debugparameter.DebugParameterThreadType.runSet;
+
+/**
+ * 调试页面参数任务
+ */
+public class DebugParameterTask implements Runnable {
+
+    private int type;
+    private volatile String address;
+
+    public String getAddress() {
+        return address;
+    }
+
+    public int getId() {
+        return id;
+    }
+
+    private volatile int id;
+    private volatile boolean isRun;
+    private String name;
+    private String data;
+
+    public DebugParameterTask(int type) {
+        clearPlcQuee();
+        this.type = type;
+    }
+
+    public DebugParameterTask(int type, String address) {
+        clearPlcQuee();
+        this.type = type;
+        this.address = address;
+    }
+
+    public DebugParameterTask(int type, String address, int id) {
+        clearPlcQuee();
+        this.type = type;
+        this.address = address;
+        this.id = id;
+    }
+
+
+    public DebugParameterTask(int type, String address, String data, int id, String name) {
+        clearPlcQuee();
+        this.type = type;
+        this.address = address;
+        this.data = data;
+        this.id = id;
+        this.name = name;
+    }
+
+    private void clearPlcQuee() {
+        setIsRun(true);
+        SerialPortSendQueue.clear();
+    }
+
+    public void setIsRun(boolean isRun) {
+        this.isRun = isRun;
+    }
+
+    public boolean getIsRun() {
+        return isRun;
+    }
+
+    @Override
+    public void run() {
+        switch (type) {
+            case DebugParameterThreadType.runM311:
+                runReadM311();
+                break;
+            case runRst:
+                runRst();
+                break;
+            case runSet:
+                runSet();
+                break;
+
+        }
+    }
+
+    private void runReadM311() {
+        if (getIsRun()) {
+            SerialPortSendQueue.sendCommand(new ReadCommandFrame("M311", 2), 311, "M311");
+        }
+    }
+
+    private void runRst() {
+        if (getIsRun()) {
+            SerialPortSendQueue.sendCommand(new RstCommandFrame(getAddress()), 311, getAddress());
+        }
+    }
+
+    private void runSet() {
+        if (getIsRun()) {
+            SerialPortSendQueue.sendCommand(new SetCommandFrame(getAddress()), 311, getAddress());
+
+        }
+    }
+
+    public void setAddressAndId(String address, int id) {
+        this.address = address;
+        this.id = id;
+    }
+
+    public void setAddress(String address) {
+        this.address = address;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getData() {
+        return data;
+    }
+
+    public void setData(String data) {
+        this.data = data;
+    }
+}

+ 9 - 0
app/src/main/java/com/sunzee/thread/debugparameter/DebugParameterThreadType.java

@@ -0,0 +1,9 @@
+package com.sunzee.thread.debugparameter;
+
+public interface DebugParameterThreadType {
+    int runM311 = 11;
+
+
+    int runRst = 0;
+    int runSet = 1;
+}

+ 88 - 0
app/src/main/java/com/sunzee/thread/debugparameter/ThreadPoolDebugParameter.java

@@ -0,0 +1,88 @@
+package com.sunzee.thread.debugparameter;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.ScheduledThreadPoolExecutor;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 调试页参数线程池
+ */
+public class ThreadPoolDebugParameter {
+    private ScheduledThreadPoolExecutor scheduled;
+
+    private ScheduledFuture<?>
+            mScheduledFutureM311, mScheduledFutureRst, mScheduledFutureSet;
+    private DebugParameterTask
+            mTaskRunM311, mTaskRunMRst, mTaskRunMSet;
+
+    public ArrayList<String> getValues() {
+        return values;
+    }
+
+    private ArrayList<String> values = new ArrayList<>(Arrays.asList("0", "0", "0", "0", "0", "0", "0"));
+
+    public ThreadPoolDebugParameter() {
+        scheduled = new ScheduledThreadPoolExecutor(7);
+        //设置线程池的策略  抛弃旧的任务
+        scheduled.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardOldestPolicy());
+    }
+
+    private static final String TAG = "ThreadPoolGeneralParame";
+
+    /**
+     * 读取全部参数
+     */
+    public void startALLRead() {
+        mTaskRunM311 = new DebugParameterTask(DebugParameterThreadType.runM311);
+        mScheduledFutureM311 = scheduled.scheduleAtFixedRate(mTaskRunM311, 10, 1000, TimeUnit.MILLISECONDS);
+    }
+
+    public void setReceive1(boolean receive1) {
+        isReceive1 = receive1;
+    }
+
+    private boolean isReceive1 = false;
+
+    public boolean isReceive1() {
+        return isReceive1;
+    }
+
+    //-------------------------------------------stop read-----------------------------------------------------
+    public void stopReadM311() {
+        stopRead(mTaskRunM311, mScheduledFutureM311);
+    }
+
+    //-------------------------------------------stop read-----------------------------------------------------
+
+    public static void stopRead(DebugParameterTask threadTask, ScheduledFuture<?> scheduledFuture1) {
+        if (threadTask != null) {
+            threadTask.setIsRun(false);
+        }
+        if (scheduledFuture1 != null) {
+            scheduledFuture1.cancel(true);
+        }
+    }
+
+    public void startRst(String address) {
+        mTaskRunMRst = new DebugParameterTask(DebugParameterThreadType.runRst, address);
+        mScheduledFutureRst = scheduled.scheduleAtFixedRate(mTaskRunMRst, 10, 1000, TimeUnit.MILLISECONDS);
+    }
+
+    public void startSet(String address) {
+        mTaskRunMSet = new DebugParameterTask(DebugParameterThreadType.runSet, address);
+        mScheduledFutureSet = scheduled.scheduleAtFixedRate(mTaskRunMSet, 10, 1000, TimeUnit.MILLISECONDS);
+
+    }
+
+    public void stopRst() {
+        stopRead(mTaskRunMRst, mScheduledFutureRst);
+    }
+
+    public void stopSet() {
+        stopRead(mTaskRunMSet, mScheduledFutureSet);
+    }
+
+}

+ 16 - 10
app/src/main/java/com/sunzee/thread/GeneralParameterTask.java

@@ -1,4 +1,4 @@
-package com.sunzee.thread;
+package com.sunzee.thread.generalparameter;
 
 import com.hboxs.serialport.SerialPortSendQueue;
 import com.hboxs.serialport.frame.ReadCommandFrame;
@@ -31,6 +31,12 @@ public class GeneralParameterTask implements Runnable {
         this.type = type;
     }
 
+    public GeneralParameterTask(int type, String address) {
+        clearPlcQuee();
+        this.type = type;
+        this.address = address;
+    }
+
     public GeneralParameterTask(int type, String address, int id) {
         clearPlcQuee();
         this.type = type;
@@ -67,11 +73,11 @@ public class GeneralParameterTask implements Runnable {
             case GeneralParameterThreadType.runM17:
                 runReadM17();
                 break;
-            case GeneralParameterThreadType.rstM17:
-                runRstM17();
+            case GeneralParameterThreadType.runRst:
+                runRst();
                 break;
-            case GeneralParameterThreadType.setM17:
-                runSetM17();
+            case GeneralParameterThreadType.runSet:
+                runSet();
                 break;
 
         }
@@ -79,19 +85,19 @@ public class GeneralParameterTask implements Runnable {
 
     private void runReadM17() {
         if (getIsRun()) {
-            SerialPortSendQueue.sendCommand(new ReadCommandFrame("M17", 2), 17,"M17");
+            SerialPortSendQueue.sendCommand(new ReadCommandFrame("M17", 2), 17, "M17");
         }
     }
 
-    private void runSetM17() {
+    private void runSet() {
         if (getIsRun()) {
-            SerialPortSendQueue.sendCommand(new SetCommandFrame("M17"), 17, "M17");
+            SerialPortSendQueue.sendCommand(new SetCommandFrame(address), 18, address);
         }
     }
 
-    private void runRstM17() {
+    private void runRst() {
         if (getIsRun()) {
-            SerialPortSendQueue.sendCommand(new RstCommandFrame("M17"), 17, "M17");
+            SerialPortSendQueue.sendCommand(new RstCommandFrame(address), 18, address);
         }
     }
 

+ 8 - 0
app/src/main/java/com/sunzee/thread/generalparameter/GeneralParameterThreadType.java

@@ -0,0 +1,8 @@
+package com.sunzee.thread.generalparameter;
+
+public interface GeneralParameterThreadType {
+  int runM17 = 17;
+
+    int runRst = 0;
+    int runSet = 1;
+}

+ 14 - 15
app/src/main/java/com/sunzee/thread/ThreadPoolGeneralParameter.java

@@ -1,4 +1,4 @@
-package com.sunzee.thread;
+package com.sunzee.thread.generalparameter;
 
 import android.util.Log;
 
@@ -13,10 +13,10 @@ import java.util.concurrent.TimeUnit;
 public class ThreadPoolGeneralParameter {
     private ScheduledThreadPoolExecutor scheduled;
 
-    private ScheduledFuture<?> mScheduledFutureM17;
+    private ScheduledFuture<?> mScheduledFutureM17, mScheduledFutureRst, mScheduledFutureSet;
     private GeneralParameterTask mTaskRunM17;
-    private GeneralParameterTask mTaskRstM17;
-    private GeneralParameterTask mTaskSetM17;
+    private GeneralParameterTask mTaskRunMRst;
+    private GeneralParameterTask mTaskRunMSet;
 
     public ThreadPoolGeneralParameter() {
         scheduled = new ScheduledThreadPoolExecutor(2);
@@ -37,25 +37,24 @@ public class ThreadPoolGeneralParameter {
         stopRead(mTaskRunM17, mScheduledFutureM17);
     }
 
-    public void stopRstM17() {
-        stopRead(mTaskRstM17, mScheduledFutureM17);
+    public void stopRst() {
+        stopRead(mTaskRunMRst, mScheduledFutureRst);
     }
 
-    public void stopSetM17() {
-        stopRead(mTaskSetM17, mScheduledFutureM17);
+    public void stopSet() {
+        stopRead(mTaskRunMSet, mScheduledFutureSet);
     }
 
 
-    public void startRstM17(String address) {
-        mTaskRstM17 = new GeneralParameterTask(GeneralParameterThreadType.rstM17);
-
-        mScheduledFutureM17 = scheduled.scheduleAtFixedRate(mTaskRstM17, 10, 100, TimeUnit.MILLISECONDS);
+    public void startRst(String address) {
+        mTaskRunMRst = new GeneralParameterTask(GeneralParameterThreadType.runRst, address);
+        mScheduledFutureRst = scheduled.scheduleAtFixedRate(mTaskRunMRst, 10, 1000, TimeUnit.MILLISECONDS);
     }
 
 
-    public void startSetM17(String address) {
-        mTaskSetM17 = new GeneralParameterTask(GeneralParameterThreadType.setM17);
-        mScheduledFutureM17 = scheduled.scheduleAtFixedRate(mTaskSetM17, 10, 100, TimeUnit.MILLISECONDS);
+    public void startSet(String address) {
+        mTaskRunMSet = new GeneralParameterTask(GeneralParameterThreadType.runSet, address);
+        mScheduledFutureSet = scheduled.scheduleAtFixedRate(mTaskRunMSet, 10, 1000, TimeUnit.MILLISECONDS);
     }
 
 

+ 3 - 2
app/src/main/java/com/sunzee/ui/activity/AdvertisingActivity.java

@@ -85,8 +85,8 @@ public class AdvertisingActivity extends MvpActivity<AdvertisingPresenter> imple
         mRlRoot = findViewById(R.id.rl_root);
         mTvTime = findViewById(R.id.tv_time1);
         mTvEquipmentNo = findViewById(R.id.tv_equipment_no1);
-        Log.d(TAG, "initView: "+Heartbeat.deviceId);
-        if (Heartbeat.deviceId!=null &&Heartbeat.deviceId.length()>7) {
+        Log.d(TAG, "initView: " + Heartbeat.deviceId);
+        if (Heartbeat.deviceId != null && Heartbeat.deviceId.length() > 7) {
             mTvEquipmentNo.setText(Heartbeat.deviceId != null ? Heartbeat.deviceId.substring(Heartbeat.deviceId.length() - 6) : "");
 
         }
@@ -156,6 +156,7 @@ public class AdvertisingActivity extends MvpActivity<AdvertisingPresenter> imple
         switch (messageEvent.getName()) {
             case "pushTimeRule":
                 //推送最新规则
+                LogUtil.d(TAG, "pushTimeRule:");
                 LogUtil.e(TAG, "event: 接收到规则");
                 play();
                 break;

+ 40 - 0
app/src/main/java/com/sunzee/ui/dialog/ResultDialog.java

@@ -0,0 +1,40 @@
+package com.sunzee.ui.dialog;
+
+import android.app.Activity;
+import android.app.Dialog;
+import android.content.Context;
+import android.support.annotation.NonNull;
+import android.widget.TextView;
+
+import com.sunzee.R;
+
+
+/**
+ * Created by MinKin
+ * 2018/12/25
+ */
+public class ResultDialog extends Dialog {
+
+    TextView tvResult;
+
+    public ResultDialog(@NonNull Context context, Activity activity) {
+        super(context,R.style.DialogBgD);//加载样式
+        setContentView(R.layout.dialog_normal);
+        initView();
+    }
+
+    protected void initView() {
+        tvResult=findViewById(R.id.tv_result);
+    }
+
+    public void onViewClicked() {
+        dismiss();
+    }
+
+    /**
+     * 设置结果
+     */
+    public void setResult(String result){
+        tvResult.setText(result);
+    }
+}

+ 156 - 4
app/src/main/java/com/sunzee/ui/fragment/AdvanceParameterFragment.java

@@ -1,43 +1,195 @@
 package com.sunzee.ui.fragment;
 
+import android.annotation.SuppressLint;
+import android.app.ProgressDialog;
+import android.content.Context;
 import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
+import android.support.v7.widget.GridLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.util.Log;
 import android.view.LayoutInflater;
+import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewGroup;
+import android.view.inputmethod.InputMethodManager;
 
+import com.hboxs.serialport.SerialPortDevice;
+import com.hboxs.serialport.SerialPortManager;
+import com.hboxs.serialport.frame.ResponseFrame;
+import com.hboxs.serialport.frame.WriteCommandFrame;
+import com.hboxs.serialport.message.Message;
+import com.hboxs.serialport.util.AsciiUtils;
+import com.hboxs.serialport.util.ByteUtils;
+import com.hboxs.serialport.util.HexUtils;
 import com.sunzee.R;
+import com.sunzee.adapter.AdvanceParameterAdapter;
+import com.sunzee.base.BaseApplication;
 import com.sunzee.base.MvpFragment;
 import com.sunzee.mvp.advanceparameter.AdvanceParameterPresenter;
 import com.sunzee.mvp.advanceparameter.AdvanceParameterView;
+import com.sunzee.thread.advanceparameter.ThreadPoolAdvanceParameter;
+import com.sunzee.utils.HexadecimalUtil;
+
+import org.greenrobot.eventbus.EventBus;
+import org.greenrobot.eventbus.Subscribe;
+import org.greenrobot.eventbus.ThreadMode;
+
+import java.util.ArrayList;
 
 /**
  * 进阶参数界面
  */
 public class AdvanceParameterFragment extends MvpFragment<AdvanceParameterPresenter> implements AdvanceParameterView {
 
+    private final int[] paraName = {
+            R.string.advance_parameter_7, R.string.advance_parameter_8,
+            R.string.advance_parameter_9, R.string.advance_parameter_10,
+            R.string.advance_parameter_11, R.string.advance_parameter_12,
+    };
+    private final String[] paraAddress = {
+            "D426", "D427", "D428", "D429",
+            "D430", "D431"};
+    private RecyclerView mRvCrrency;
+    private AdvanceParameterAdapter mAdvanceParameterAdapter;
+    private static final String TAG = "AdvanceParameterFragmen";
+    private ThreadPoolAdvanceParameter mPoolAdvanceParameter = new ThreadPoolAdvanceParameter(paraAddress);
+
     @Nullable
     @Override
     public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
-        View inflate = inflater.inflate(R.layout.fragment_advance_parameter, container, false);
+        View inflate = inflater.inflate(R.layout.fragment_general_parameter, container, false);
+        initView(inflate);
+        initEvent();
         return inflate;
     }
 
+    @Override
+    public void onStart() {
+        super.onStart();
+        Log.d(TAG, "onStart: ");
+        EventBus.getDefault().register(this);
+        showLoading();
+        mPoolAdvanceParameter.startALLRead();
+    }
 
+    @Override
+    public void onDestroyView() {
+        EventBus.getDefault().unregister(this);
+        super.onDestroyView();
+    }
+
+    private void initEvent() {
+        mAdvanceParameterAdapter.setItemListener(new AdvanceParameterAdapter.ItemParaClickListener() {
+            @Override
+            public void onItemListener(View view, int position, String text) {
+                View v = mRvCrrency.getChildAt(position);
+                if (null != mRvCrrency.getChildViewHolder(v)) {
+                    String data = ByteUtils.decimal2fitHex(Integer.valueOf(text));
+                    mPoolAdvanceParameter.startWrite(paraAddress[position], HexUtils.hexStr2BinStr(data));
+                    Log.d(TAG, "onItemListener: "+HexUtils.hexStr2BinStr(data));
+
+                }
+                Log.d(TAG, "onItemListener: " + mAdvanceParameterAdapter.getParameterBeans());
+            }
+        });
+        mRvCrrency.setOnTouchListener(new View.OnTouchListener() {
+            @SuppressLint("ClickableViewAccessibility")
+            @Override
+            public boolean onTouch(View v, MotionEvent event) {
+                Log.d(TAG, "onClick: ");
+                //隐藏键盘
+                @SuppressLint("WrongConstant") InputMethodManager imm = (InputMethodManager)
+                        mActivity.getSystemService(Context.INPUT_METHOD_SERVICE);
+                imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
+                return false;
+            }
+        });
+    }
+
+    private void initView(View inflate) {
+        mRvCrrency = inflate.findViewById(R.id.rv_currency);
+        mAdvanceParameterAdapter = new AdvanceParameterAdapter(paraName);
+        GridLayoutManager layoutManager = new GridLayoutManager(BaseApplication.getContext(), 9, GridLayoutManager.HORIZONTAL, false);
+        mRvCrrency.setAdapter(mAdvanceParameterAdapter);
+        mRvCrrency.setLayoutManager(layoutManager);
+    }
 
     @Override
-    public void showLoading() {
+    protected AdvanceParameterPresenter createPresenter() {
+        return new AdvanceParameterPresenter(this);
+    }
 
+    //--------------------------------------------------loading start------------------
+    @Override
+    public void showLoading() {
+        showProgressDialog();
     }
 
     @Override
     public void hideLoading() {
+        dismissProgressDialog();
+    }
+
+    public ProgressDialog progressDialog;
 
+    public ProgressDialog showProgressDialog() {
+        progressDialog = new ProgressDialog(mActivity);
+        progressDialog.setMessage("加载中");
+        progressDialog.show();
+        return progressDialog;
+    }
+
+    public void dismissProgressDialog() {
+        if (progressDialog != null && progressDialog.isShowing()) {
+            // progressDialog.hide();会导致android.view.WindowLeaked
+            progressDialog.dismiss();
+        }
+    }
+
+    //--------------------------------------------------loading end------------------
+    @Subscribe(threadMode = ThreadMode.MAIN)
+    public void event(Message messageEvent) {
+        switch (messageEvent.getType()) {
+            case connected:
+                break;
+            case sendError:
+                break;
+            case ack:
+                Log.d(TAG, "event: 写入成功");
+                mPoolAdvanceParameter.stopWrite();
+                //todo 上传
+                mvpPresenter.updateAdvanced(mAdvanceParameterAdapter.getParameterBeans());
+                break;
+            case nak:
+                break;
+            case disconnected:
+                SerialPortDevice device = new SerialPortDevice("/dev/ttyS2", "9600");
+                SerialPortManager.getInstance().open(device);
+                break;
+            case response:
+                ResponseFrame responseFrame = (ResponseFrame) messageEvent.getContent();
+                if (responseFrame.isValidSum()) {
+                    //通过校验
+                    String name = messageEvent.getName();
+                    Log.d(TAG, "event: " + name);
+                    String result = AsciiUtils.asciiByteArray2HexStr(responseFrame.getData());
+                    ArrayList<String> results = HexadecimalUtil.flipString(result);
+                    mvpPresenter.setAdvanced(name, results, mPoolAdvanceParameter);
+                    hideLoading();
+                    break;
+                }
+        }
     }
 
     @Override
-    protected AdvanceParameterPresenter createPresenter() {
-        return null;
+    public void getDataSuccess() {
+        mAdvanceParameterAdapter.setValues(mPoolAdvanceParameter.getValues());
+        mAdvanceParameterAdapter.notifyDataSetChanged();
+        //todo 上传
+        mvpPresenter.updateAdvanced(mAdvanceParameterAdapter.getParameterBeans());
     }
+
+
 }

+ 169 - 2
app/src/main/java/com/sunzee/ui/fragment/DebugFragment.java

@@ -1,41 +1,208 @@
 package com.sunzee.ui.fragment;
 
+import android.app.ProgressDialog;
 import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
+import android.support.v7.widget.GridLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.CheckBox;
 
+import com.hboxs.serialport.SerialPortDevice;
+import com.hboxs.serialport.SerialPortManager;
+import com.hboxs.serialport.frame.ResponseFrame;
+import com.hboxs.serialport.message.Message;
+import com.hboxs.serialport.util.AsciiUtils;
 import com.sunzee.R;
+import com.sunzee.adapter.DebugParameterAdapter;
+import com.sunzee.adapter.GeneralParameterAdapter;
+import com.sunzee.base.BaseApplication;
 import com.sunzee.base.MvpFragment;
 import com.sunzee.mvp.debug.DebugPresenter;
 import com.sunzee.mvp.debug.DebugView;
+import com.sunzee.thread.debugparameter.ThreadPoolDebugParameter;
+import com.sunzee.utils.HexadecimalUtil;
+
+import org.greenrobot.eventbus.EventBus;
+import org.greenrobot.eventbus.Subscribe;
+import org.greenrobot.eventbus.ThreadMode;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 
 /**
  * 调试页界面
  */
 public class DebugFragment extends MvpFragment<DebugPresenter> implements DebugView {
+    private final int[] paraName = {
+            R.string.debug_1, R.string.debug_2,
+            R.string.debug_3, R.string.debug_4,
+            R.string.debug_5, R.string.debug_6,
+            R.string.debug_7
+    };
+    private final String[] paraAddress = {
+            "M311", "M312", "M313", "M315",
+            "M316", "M317", "M318"};
+    private RecyclerView mRvDebugList;
+    private DebugParameterAdapter mDebugParameterAdapter;
+    private ThreadPoolDebugParameter mPoolDebugParameter = new ThreadPoolDebugParameter();
+
 
     @Nullable
     @Override
     public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
         View inflate = inflater.inflate(R.layout.fragment_debug, container, false);
+        initView(inflate);
+        initEvent();
         return inflate;
     }
 
     @Override
+    public void onStart() {
+        super.onStart();
+        EventBus.getDefault().register(this);
+        showLoading();
+        mPoolDebugParameter.startALLRead();
+    }
+
+    @Override
+    public void onDestroyView() {
+        EventBus.getDefault().unregister(this);
+        super.onDestroyView();
+    }
+
+    private static final String TAG = "DebugFragment";
+
+    private void initEvent() {
+        mDebugParameterAdapter.setItemListener(new DebugParameterAdapter.ItemParaClickListener() {
+            @Override
+            public void onItemListener(View view, int position, String text) {
+                //点击的时候就开始写入
+                final String address = paraAddress[position];
+                CheckBox checkBox = (CheckBox) view;
+                if (!checkBox.isChecked()) {
+                    mPoolDebugParameter.startRst(address);
+                } else {
+                    mPoolDebugParameter.startSet(address);
+                }
+                showLoading();
+            }
+        });
+    }
+
+    private void initView(View inflate) {
+        mRvDebugList = inflate.findViewById(R.id.rv_degbuglist);
+        mDebugParameterAdapter = new DebugParameterAdapter(paraName);
+        GridLayoutManager layoutManager = new GridLayoutManager(BaseApplication.getContext(), 9, GridLayoutManager.HORIZONTAL, false);
+        mRvDebugList.setAdapter(mDebugParameterAdapter);
+        mRvDebugList.setLayoutManager(layoutManager);
+
+    }
+
+    @Subscribe(threadMode = ThreadMode.MAIN)
+    public void event(Message messageEvent) {
+        switch (messageEvent.getType()) {
+            case connected:
+                break;
+            case sendError:
+                break;
+            case ack:
+                mPoolDebugParameter.stopRst();
+                mPoolDebugParameter.stopSet();
+                Log.d(TAG, "event: 写入成功");
+                hideLoading();
+                break;
+            case nak:
+                break;
+            case disconnected:
+                SerialPortDevice device = new SerialPortDevice("/dev/ttyS2", "9600");
+                SerialPortManager.getInstance().open(device);
+                break;
+            case response:
+                ResponseFrame responseFrame = (ResponseFrame) messageEvent.getContent();
+                if (responseFrame.isValidSum()) {
+                    //通过校验
+                    String name = messageEvent.getName();
+                    Log.d(TAG, "event: " + name);
+                    String result = AsciiUtils.asciiByteArray2HexStr(responseFrame.getData());
+                    ArrayList<String> results = HexadecimalUtil.flipString(result);
+                    //    转成2进制
+                    String s = HexadecimalUtil.hexStringToByte(result);
+                    //翻转后的数据
+                    String s1 = HexadecimalUtil.flipString(s, 8);
+                    List<String> lis = Arrays.asList(s1.split(""));
+                    ArrayList<String> list = new ArrayList(lis);
+                    list.remove(0);
+                    mvpPresenter.setDebugParameter(name, list, mPoolDebugParameter);
+                    break;
+                }
+        }
+    }
+
+    @Override
+    public void getDataSuccess() {
+        getValue(mPoolDebugParameter.getValues());
+    }
+
+    /**
+     * 改变对应的状态
+     *
+     * @param value
+     */
+    private void getValue(ArrayList<String> value) {
+        //311-318
+        for (int i = 0; i < value.size(); i++) {
+            View view = mRvDebugList.getChildAt(i);
+            if (null != mRvDebugList.getChildViewHolder(view)) {
+                DebugParameterAdapter.ViewHolder viewHolder = (DebugParameterAdapter.ViewHolder) mRvDebugList.getChildViewHolder(view);
+                if (!value.get(i).equals("0")) {
+                    //当它为选择状态时,无需设置,避免闪硕
+                    if (!viewHolder.cbManual.isChecked()) {
+                        viewHolder.cbManual.setChecked(true);
+                    }
+                } else {
+                    if (viewHolder.cbManual.isChecked()) {
+                        viewHolder.cbManual.setChecked(false);
+                    }
+                }
+            }
+        }
+
+    }
+
+    @Override
     protected DebugPresenter createPresenter() {
-        return null;
+        return new DebugPresenter(this);
     }
 
     @Override
     public void showLoading() {
-
+        showProgressDialog();
     }
 
     @Override
     public void hideLoading() {
+        dismissProgressDialog();
+    }
+
+    public ProgressDialog progressDialog;
+
+    public ProgressDialog showProgressDialog() {
+        progressDialog = new ProgressDialog(mActivity);
+        progressDialog.setMessage("加载中");
+        progressDialog.show();
+        return progressDialog;
+    }
 
+    public void dismissProgressDialog() {
+        if (progressDialog != null && progressDialog.isShowing()) {
+            // progressDialog.hide();会导致android.view.WindowLeaked
+            progressDialog.dismiss();
+        }
     }
 }

+ 21 - 20
app/src/main/java/com/sunzee/ui/fragment/GeneralParameterFragment.java

@@ -22,7 +22,7 @@ import com.sunzee.base.BaseApplication;
 import com.sunzee.base.MvpFragment;
 import com.sunzee.mvp.generalparameter.GeneralParameterPresenter;
 import com.sunzee.mvp.generalparameter.GeneralParameterView;
-import com.sunzee.thread.ThreadPoolGeneralParameter;
+import com.sunzee.thread.generalparameter.ThreadPoolGeneralParameter;
 import com.sunzee.utils.HexadecimalUtil;
 
 import org.greenrobot.eventbus.EventBus;
@@ -58,10 +58,11 @@ public class GeneralParameterFragment extends MvpFragment<GeneralParameterPresen
         mPoolGeneralParameter.startALLRead();
     }
 
+
     @Override
-    public void onStop() {
-        super.onStop();
+    public void onDestroyView() {
         EventBus.getDefault().unregister(this);
+        super.onDestroyView();
     }
 
     private void initEvent() {
@@ -72,9 +73,9 @@ public class GeneralParameterFragment extends MvpFragment<GeneralParameterPresen
                 final String address = paraAddress[position];
                 CheckBox checkBox = (CheckBox) view;
                 if (!checkBox.isChecked()) {
-                    mPoolGeneralParameter.startRstM17(address);
+                    mPoolGeneralParameter.startRst(address);
                 } else {
-                    mPoolGeneralParameter.startSetM17(address);
+                    mPoolGeneralParameter.startSet(address);
                 }
                 showLoading();
             }
@@ -94,16 +95,6 @@ public class GeneralParameterFragment extends MvpFragment<GeneralParameterPresen
         return new GeneralParameterPresenter(this);
     }
 
-    @Override
-    public void showLoading() {
-        showProgressDialog();
-    }
-
-    @Override
-    public void hideLoading() {
-        dismissProgressDialog();
-    }
-
     private static final String TAG = "GeneralParameterFragmen";
 
     @Subscribe(threadMode = ThreadMode.MAIN)
@@ -115,8 +106,8 @@ public class GeneralParameterFragment extends MvpFragment<GeneralParameterPresen
                 break;
             case ack:
                 //写入数据成功的反馈
-                mPoolGeneralParameter.stopRstM17();
-                mPoolGeneralParameter.stopSetM17();
+                mPoolGeneralParameter.stopRst();
+                mPoolGeneralParameter.stopSet();
                 hideLoading();
                 break;
             case nak:
@@ -133,8 +124,8 @@ public class GeneralParameterFragment extends MvpFragment<GeneralParameterPresen
                 if (name.equals("M17")) {
                     ArrayList<String> results1 = HexadecimalUtil.flipString(result1);
                     long data = HexadecimalUtil.hex2dec(results1.get(0));
-                    if (data != 1) {
-                        setStatus(0, 1);
+                    if (data != 0) {
+                        setStatus(0, data);
                     }
                     mPoolGeneralParameter.stopReadM17();
                 }
@@ -148,7 +139,7 @@ public class GeneralParameterFragment extends MvpFragment<GeneralParameterPresen
         View view = mRvCrrency.getChildAt(position);
         if (null != mRvCrrency.getChildViewHolder(view)) {
             GeneralParameterAdapter.ViewHolder viewHolder = (GeneralParameterAdapter.ViewHolder) mRvCrrency.getChildViewHolder(view);
-            if (data == 1) {
+            if (data != 0) {
                 //当它为选择状态时,无需设置,避免闪硕
                 if (!viewHolder.cbManual.isChecked()) {
                     viewHolder.cbManual.setChecked(true);
@@ -162,6 +153,16 @@ public class GeneralParameterFragment extends MvpFragment<GeneralParameterPresen
         }
     }
 
+    @Override
+    public void showLoading() {
+        showProgressDialog();
+    }
+
+    @Override
+    public void hideLoading() {
+        dismissProgressDialog();
+    }
+
     public ProgressDialog progressDialog;
 
     public ProgressDialog showProgressDialog() {

+ 228 - 0
app/src/main/java/com/sunzee/utils/AdvacedUtil.java

@@ -0,0 +1,228 @@
+package com.sunzee.utils;
+
+import com.hboxs.serialport.util.ByteUtils;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 进阶参数的参数的16 17 18 22 23 24 的读写
+ */
+public class AdvacedUtil {
+
+    private static String TAG = "AdvacedUtil";
+
+    /**
+     * 获取显示的真正数据 正负数
+     *
+     * @param dec 二进制
+     * @return
+     */
+    public static String getRealData(String dec) {
+        //转成二进制 正码
+//        String s = Integer.toBinaryString(62336);
+//        Log.d(TAG, "getRealData:" + "原码为:" + dec);
+        ArrayList<Character> stringToList = stringToList(dec);
+        StringBuilder stringBuilder = new StringBuilder();
+        List<String> list = new ArrayList<>();
+//        Log.d(TAG, ":" + "原码为:" + dec);
+        for (int i = 0; i < stringToList.size(); i++) {
+            String s1 = stringToList.get(i).toString();
+            System.out.print(s1);
+            if (s1.equals("0")) {
+                stringBuilder.append("1");
+                list.add("1");
+            } else {
+                stringBuilder.append("0");
+                list.add("0");
+            }
+        }
+        System.out.println();
+        //反码
+//        Log.d(TAG, ":" + "反码为:" + stringBuilder.toString());
+        //补码为
+        ArrayList<String> list1 = (ArrayList<String>) ((ArrayList<String>) list).clone();
+        int i2 = list.lastIndexOf("0");
+        for (int i = list.size() - 1; i > 0; i--) {
+            if (list.get(i).equals("1")) {
+                if (i > i2) {
+                    list1.set(i, "0");
+                }
+
+            } else if (i == i2) {
+                list1.set(i, "1");
+            }
+        }
+
+        StringBuilder stringBuilder1 = new StringBuilder();
+        for (String s1 : list1) {
+            System.out.print(s1);
+            stringBuilder1.append(s1);
+        }
+        System.out.println();
+        BigInteger bigInteger = binaryToDecimal(stringBuilder1.toString());
+        String s1 = bigInteger.toString();
+        System.out.println(s1);
+        System.out.println(TAG + ":" + "补码为:" + stringBuilder1.toString());
+        int i = bigInteger.intValue();
+        String s = String.valueOf(Math.round((i / 177.778) * 10));
+//        Log.d(TAG, "getRealData:" + "数值为:" + i);
+//        Log.d(TAG, "getRealData:" + "最后的数值为:" + s);
+        return "-" + s;
+
+    }
+
+    /**
+     * 获取有符号的16进制
+     *
+     * @param value 要输入的值 例如想得到1.8 就乘10输入18
+     * @return 带符号的16进制(32位处理)
+     */
+    public static String toHex(String value) {
+        //1 如果想改成1.8 就输入18
+        StringBuilder sb = new StringBuilder();
+        //2 判断正负数
+        boolean contains = value.contains("-");
+        if (contains) {
+            //去掉符号
+            value = value.replace("-", "");
+            System.out.println(value);
+        }
+        int i = Integer.valueOf(value);
+        System.out.println(i);
+        //2 乘于常数 177.78 再除以10 得到 10进制
+        int v = (int) Math.round(i * 177.778) / 10;
+        System.out.println("10进制:" + v);
+        String s2 = "";
+
+        if (contains) {
+            //负数
+//             得到二进制
+            System.out.println("负数");
+            //获取补码
+            String s1 = Integer.toBinaryString(-v);
+            System.out.println(s1);
+            sb.append("ffff");
+            //去除前面的16进制的1111111111111111 防止转换异常
+            String substring = s1.substring(s1.length() / 2);
+            System.out.println("切割后的数据" + substring);
+            String s = Integer.toHexString(Integer.parseInt(substring, 2));
+            s2 = sb.append(s).toString();
+
+        } else {
+            System.out.println("正数");
+            // 3 将10进制变成16进制
+            String s = ByteUtils.decimal2fitHex(v);
+            System.out.println(s);
+            //  sb.append("0000");
+            if (s.length() < 4) {
+                for (int k = 0; k < (4 - s.length()); k++) {
+                    sb.append("0");
+                }
+            }
+            sb.append(s);
+            s2 = sb.toString();
+        }
+        System.out.println(s2);
+        return sb.toString();
+    }
+
+    /**
+     * 获取有符号的16进制
+     *
+     * @param value 要输入的值 例如想得到1.8 就乘10输入18
+     * @return 带符号的16进制(16位处理)
+     */
+    public static String toHexWith16(String value) {
+        //1 如果想改成1.8 就输入18
+        StringBuilder sb = new StringBuilder();
+        //2 判断正负数
+        boolean contains = value.contains("-");
+        if (contains) {
+            //去掉符号
+            value = value.replace("-", "");
+            System.out.println(value);
+        }
+        int i = Integer.valueOf(value);
+        System.out.println(i);
+        //2 乘于常数 177.78 再除以10 得到 10进制
+        int v = (int) Math.round(i * 177.778) / 10;
+        System.out.println("10进制:" + v);
+        String s2 = "";
+
+        if (contains) {
+            //负数
+//             得到二进制
+            System.out.println("负数");
+            //获取补码
+            String s1 = Integer.toBinaryString(-v);
+            System.out.println(s1);
+//            sb.append("ffff");
+            //去除前面的16进制的1111111111111111 防止转换异常
+            String substring = s1.substring(s1.length() / 2);
+            System.out.println("切割后的数据" + substring);
+            String s = Integer.toHexString(Integer.parseInt(substring, 2));
+            s2 = sb.append(s).toString();
+
+        } else {
+            System.out.println("正数");
+            // 3 将10进制变成16进制
+            String s = ByteUtils.decimal2fitHex(v);
+            System.out.println(s);
+//            sb.append("0000");
+            if (s.length() < 4) {
+                for (int k = 0; k < (4 - s.length()); k++) {
+                    sb.append("0");
+                }
+            }
+            sb.append(s);
+            s2 = sb.toString();
+        }
+        System.out.println(s2);
+        return sb.toString();
+    }
+
+    /**
+     * string类型转list
+     *
+     * @param s
+     * @return
+     */
+    private static ArrayList<Character> stringToList(String s) {
+        char[] chars = s.toCharArray();
+        ArrayList<Character> arrayList = new ArrayList<>();
+
+        for (int i = 0; i < chars.length; i++) {
+            arrayList.add(chars[i]);
+        }
+//        arrayList.add(0,"1".charAt(0));
+        return arrayList;
+    }
+
+    /**
+     * @param binarySource
+     * @return int
+     * @Description: 二进制转换成十进制
+     */
+    private static BigInteger binaryToDecimal(String binarySource) {
+        BigInteger bi = new BigInteger(binarySource, 2);    //转换为BigInteger类型
+//         return Integer.parseInt(bi.toString());     //转换成十进制
+        return bi;     //转换成十进制
+    }
+
+    public static int formatDoubleTOInt(double dou1, double dou2) {
+        BigDecimal big1 = new BigDecimal(Double.valueOf(dou1)).setScale(2, BigDecimal.ROUND_HALF_UP);
+        BigDecimal big2 = new BigDecimal(Double.valueOf(dou2));
+        return big1.multiply(big2).intValue();
+
+    }
+
+}
+
+
+
+
+
+

+ 11 - 10
app/src/main/res/layout/fragment_debug.xml

@@ -1,12 +1,13 @@
 <?xml version="1.0" encoding="utf-8"?>
-<android.support.constraint.ConstraintLayout
-    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:padding="@dimen/dp_5"
-    android:background="@color/shallowblue">
-    <TextView
-        android:gravity="center"
-        android:text="@string/debug"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"/>
-</android.support.constraint.ConstraintLayout>
+    android:background="@color/shallowblue"
+    android:padding="@dimen/dp_5">
+
+    <android.support.v7.widget.RecyclerView
+        android:id="@+id/rv_degbuglist"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content" />
+
+</LinearLayout>

+ 9 - 10
app/src/main/res/layout/fragment_general_parameter.xml

@@ -6,15 +6,14 @@
     android:background="@color/shallowblue"
     android:padding="@dimen/dp_5">
 
-    <android.support.v7.widget.RecyclerView
-        android:id="@+id/rv_currency"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_marginRight="@dimen/dp_30"
-        android:descendantFocusability="beforeDescendants"
-        android:fastScrollEnabled="false"
-        tools:ignore="MissingConstraints">
-
-    </android.support.v7.widget.RecyclerView>
+        <android.support.v7.widget.RecyclerView
+            android:id="@+id/rv_currency"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginRight="@dimen/dp_30"
+            android:descendantFocusability="beforeDescendants"
+            android:fastScrollEnabled="false"
+            tools:ignore="MissingConstraints">
 
+        </android.support.v7.widget.RecyclerView>
 </LinearLayout>

+ 1 - 1
app/src/main/res/layout/item_advanceparameter.xml

@@ -27,7 +27,7 @@
         android:background="@drawable/shape_btn_back"
         android:inputType="numberSigned"
         android:paddingLeft="@dimen/dp_8"
-        android:textColor="@color/colorBg"
+        android:textColor="@color/logo_blue"
         android:textColorHint="@color/colorHint" />
 
     <Button

+ 21 - 0
app/src/main/res/layout/item_debugparameter.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="@dimen/dp_60"
+    android:layout_height="@dimen/dp_20"
+    android:layout_gravity="center"
+    android:layout_marginTop="@dimen/dp_10"
+    android:layout_marginRight="@dimen/dp_6"
+    android:gravity="center">
+
+    <CheckBox
+        android:id="@+id/cb_manual"
+        android:layout_width="@dimen/dp_80"
+        android:layout_height="match_parent"
+        android:layout_gravity="center"
+        android:background="@drawable/selector_orange_bg"
+        android:button="@null"
+        android:checked="false"
+        android:gravity="center"
+        android:textColor="@drawable/selector_manual_tv_color"
+        android:textSize="@dimen/sp_6" />
+</LinearLayout>

+ 1 - 1
app/src/main/res/layout/item_generalparameter.xml

@@ -17,5 +17,5 @@
         android:checked="false"
         android:gravity="center"
         android:textColor="@drawable/selector_manual_tv_color"
-        android:textSize="@dimen/sp_7" />
+        android:textSize="@dimen/sp_6" />
 </LinearLayout>

+ 7 - 0
app/src/main/res/values/strings.xml

@@ -689,5 +689,12 @@
     <string name="coin_pulse">币数脉冲除以x值</string>
     <string name="oldpas">原始密码不正确</string>
     <string name="all_clean">全部蹲位清洁</string>
+    <string name="debug_1">A轴正转(水平趋势)</string>
+    <string name="debug_2">A轴反转(垂直趋势)</string>
+    <string name="debug_3">喷水泵启动</string>
+    <string name="debug_4">气泵启动</string>
+    <string name="debug_5">清洁消毒喷水泵</string>
+    <string name="debug_6">清洗洁厕灵+水</string>
+    <string name="debug_7">消毒消毒液+水</string>
 
 </resources>