优化app.java代码,防止RTK配置发两次;MCU协处理器升级以Worker的形势进行,防止多个入口升级,升级之后会删除dfu.bin,加入dfu.bin不存在的话给出提示;
9个文件已修改
1个文件已添加
188 ■■■■■ 已修改文件
app/src/main/java/safeluck/drive/evaluation/Constant.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusOutWorker.kt 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/MainActivity.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/app.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/NetWorkTrainFragment.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/SetArgumentsFragment.java 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/TrainFragment.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/viewmodels/TimeViewModel.kt 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/worker/MCUUpgradeWorker.kt 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
im_lib/src/main/java/com/safeluck/aykj/message/BinMessageBase.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/Constant.java
@@ -92,4 +92,6 @@
    public static int DaoLu = 4;
    @NotNull
    public static final String TIME_MINUTE = "show_time_minute";
    @NotNull
    public static final String MCU_UPGRADE_FAIL_RESASON = "mcu_upgrade_fail_reason";
}
app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusOutWorker.kt
@@ -35,7 +35,7 @@
        }
        var indexs = WorkRoomDataBase.getWorkRoomDataBase(applicationContext).signalConfigDao.allIndexs
        sendSignalConfigsToRemote(indexs)
        MyLog.i("查到的考试type="+examType)
        MyLog.i(TAG,"查到的考试type="+examType)
        val data = Data.Builder().putInt(Constant.EXAM_STATUS_TYPE,examType).build()
        if (examType != safeluck.drive.evaluation.Constant.NONE_BEEN_START_EXAM) {
            try {
app/src/main/java/safeluck/drive/evaluation/MainActivity.java
@@ -77,15 +77,12 @@
    private Gson gson = new Gson();
    String[] PERMISSIONS = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA};
    RTKConfigViewModel rtkConfigViewModel;
    private boolean onlySendOnceRTKConfig = true;
    private ICEventListener icEventListener = new ICEventListener() {
        @Override
        public void onCEvent(String topic, int msgCode, int resultCode, Object obj) {
            if (msgCode == Constant.FETCH_RTK_PLATFORM_INFO) {
//              sendRtkConfigInfo();
            }
            if (msgCode == Constant.RTK_PLATFORM_REGISTER_STATUS) {
                try {
                    JSONObject jsonObject = new JSONObject((String) obj);
@@ -103,11 +100,7 @@
                    e.printStackTrace();
                }
            }
            if (msgCode == Constant.NDK_START){
                MyLog.i(TAG,"NDK_start");
//                sendRtkConfigInfo();
                sendMcuUprgrade();
            }
        }
    };
    private List<SignalConfigRemote> signalConfiglist = new ArrayList<>();
@@ -136,27 +129,6 @@
    }
//    private void sendRtkConfigInfo() {
//        if (mRTKConfig != null) {
//            String rtkjson = gson.toJson(mRTKConfig);
//
//            //去除id字段
//            JSONObject jsonObject = null;
//            try {
//                jsonObject = new JSONObject(rtkjson);
//            } catch (JSONException e) {
//                e.printStackTrace();
//            }
//            jsonObject.remove("_id");
//            rtkjson = null;
//            rtkjson = jsonObject.toString();
//            MyLog.i(TAG, "RTK配置信息:" + rtkjson);
//            AYSdk.getInstance().sendCmd(Constant.PUSH_RTK_PLATFORM_INFO, rtkjson);
//        } else {
//            MyLog.d(TAG, "RTKConfig未取到数据");
//            onlySendOnceRTKConfig = true;
//        }
//    }
public ExamPlatformModel examPlatformModel;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
@@ -267,7 +239,6 @@
            loadRootFragment(R.id.fl_container, HomeFragment.newInstance());
        }
        CEventCenter.onBindEvent(true, icEventListener, Constant.BIND_RTKCONFIG_TOPIC);//发送rtk配置消息
        CEventCenter.onBindEvent(true, icEventListener, Constant.BIND_CONNECT_RTK_TOPIC);//收到rtk连接 登录结果
    }
@@ -275,7 +246,6 @@
    @Override
    protected void onDestroy() {
        super.onDestroy();
        CEventCenter.onBindEvent(false, icEventListener, Constant.BIND_RTKCONFIG_TOPIC);
        CEventCenter.onBindEvent(false, icEventListener, Constant.BIND_CONNECT_RTK_TOPIC);
        Log.i(TAG, "onDestroy: ");
app/src/main/java/safeluck/drive/evaluation/app.java
@@ -64,6 +64,7 @@
import safeluck.drive.evaluation.util.FileUtil;
import safeluck.drive.evaluation.util.SPUtils;
import safeluck.drive.evaluation.util.SystemUtil;
import safeluck.drive.evaluation.worker.MCUUpgradeWorker;
/**
 * MyApplication2
@@ -159,11 +160,12 @@
                sendVechileInfo();
                sendMapInfo();
                OneTimeWorkRequest examStatausOutWorker = OneTimeWorkRequest.from(ExamStatusOutWorker.class);
                WorkManager.getInstance(getApplicationContext()).enqueue(examStatausOutWorker);
                OneTimeWorkRequest mcuUpgradeWorker = OneTimeWorkRequest.from(MCUUpgradeWorker.class);
                WorkManager.getInstance(getApplicationContext()).beginWith(examStatausOutWorker).then(mcuUpgradeWorker).enqueue();
                CEventCenter.dispatchEvent(Constant.BIND_CONNECT_RTK_TOPIC,cmd,0,json);
//                CEventCenter.dispatchEvent(Constant.BIND_CONNECT_RTK_TOPIC,cmd,0,json);
                break;
            case Constant.RTK_PLATFORM_REGISTER_STATUS:
                CEventCenter.dispatchEvent(Constant.BIND_CONNECT_RTK_TOPIC,cmd,0,json);
@@ -182,7 +184,7 @@
                break;
            case Constant.FETCH_RTK_PLATFORM_INFO:
                CEventCenter.dispatchEvent(Constant.BIND_RTKCONFIG_TOPIC,cmd,0,"");
//                CEventCenter.dispatchEvent(Constant.BIND_RTKCONFIG_TOPIC,cmd,0,"");
                break;
            case Constant.JUDGE_INFO:
@@ -294,6 +296,10 @@
                if (sn.equalsIgnoreCase(lastSn)){
                }else{
                    if (TextUtils.isEmpty(lastSn)){
                        lastSn =sn;
                        return;
                    }
                    lastSn = sn;
                    Data data = new Data.Builder().putString(safeluck.drive.evaluation.DB.Constant.RTK_CONFIG_UPDATE_JSON,sn).build();
                    OneTimeWorkRequest rtkConfigUpdateWorker= new OneTimeWorkRequest.Builder(RTKConfigUpdateWorker.class).setInputData(data).build();
app/src/main/java/safeluck/drive/evaluation/fragment/NetWorkTrainFragment.java
@@ -460,21 +460,6 @@
        tv_total_score = view.findViewById(R.id.tv_total_score);
        tv_network_time = view.findViewById(R.id.network_time);
        PeriodicWorkRequest periodicWorkRequest = new PeriodicWorkRequest.Builder(TimeWorker.class,MIN_PERIODIC_INTERVAL_MILLIS, TimeUnit.MICROSECONDS).build();
        WorkManager.getInstance(getContext().getApplicationContext()).enqueue(periodicWorkRequest);
        WorkManager.getInstance(getContext().getApplicationContext()).getWorkInfoByIdLiveData(periodicWorkRequest.getId())
                .observe(this, new Observer<WorkInfo>() {
                    @Override
                    public void onChanged(WorkInfo workInfo) {
                        if (workInfo!= null&&workInfo.getState().isFinished()){
                            String time = workInfo.getOutputData().getString(Constant.TIME_MINUTE);
                            MyLog.i("Time="+time);
                            tv_network_time.setText(time);
                        }
                    }
                });
        tv_network_time.setText(Utils.getHHmm());
        tv_speed.setText(getResources().getString(R.string.speed,speed));
app/src/main/java/safeluck/drive/evaluation/fragment/SetArgumentsFragment.java
@@ -20,6 +20,9 @@
import androidx.lifecycle.ViewModelProviders;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.work.Data;
import androidx.work.OneTimeWorkRequest;
import androidx.work.WorkInfo;
import androidx.work.WorkManager;
import com.anyun.exam.lib.AYSdk;
@@ -56,6 +59,7 @@
import safeluck.drive.evaluation.util.CThreadPoolExecutor;
import safeluck.drive.evaluation.util.FileUtil;
import safeluck.drive.evaluation.util.SPUtils;
import safeluck.drive.evaluation.worker.MCUUpgradeWorker;
/**
 * 设置所有参数
@@ -188,21 +192,19 @@
            case R.id.btn_mcu_upgrade:
                try {
                    byte[] datas = FileUtil.readLocalFile(getActivity(),"dfu.bin");
                    if (datas != null){
                        Log.i(TAG, ByteUtil.byte2hex(datas));
                        String strs = new String(datas, Charset.forName("ISO-8859-1"));
                        Log.i(TAG, "onClick: datas.legnth=="+strs.getBytes("ISO-8859-1").length);
                        AYSdk.getInstance().sendCmd(Constant.UPGRADE_MCU_CONTENT_FILE, strs);
                    }else{
                        MyLog.i(TAG,"mcu升级文件不存在");
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
                OneTimeWorkRequest mcuUpgradeWorkReq = OneTimeWorkRequest.from(MCUUpgradeWorker.class);
                WorkManager.getInstance(_mActivity.getApplicationContext()).enqueue(mcuUpgradeWorkReq);
                WorkManager.getInstance(_mActivity.getApplicationContext()).getWorkInfoByIdLiveData(mcuUpgradeWorkReq.getId())
                        .observe(this, new Observer<WorkInfo>() {
                            @Override
                            public void onChanged(WorkInfo workInfo) {
                                if (workInfo.getState()== WorkInfo.State.FAILED){
                                    Data data = workInfo.getOutputData();
                                    String str = data.getString(Constant.MCU_UPGRADE_FAIL_RESASON);
                                    Toast.makeText(_mActivity, str, Toast.LENGTH_SHORT).show();
                                }
                            }
                        });
                break;
            case R.id.btn_save_platform:
                Toast.makeText(_mActivity, "保存成功", Toast.LENGTH_SHORT).show();
app/src/main/java/safeluck/drive/evaluation/fragment/TrainFragment.java
@@ -467,20 +467,6 @@
        tv_network_time = view.findViewById(R.id.network_time);
        PeriodicWorkRequest periodicWorkRequest = new PeriodicWorkRequest.Builder(TimeWorker.class,MIN_PERIODIC_INTERVAL_MILLIS, TimeUnit.MICROSECONDS).build();
        WorkManager.getInstance(getContext().getApplicationContext()).enqueue(periodicWorkRequest);
        WorkManager.getInstance(getContext().getApplicationContext()).getWorkInfoByIdLiveData(periodicWorkRequest.getId())
                .observe(this, new Observer<WorkInfo>() {
                    @Override
                    public void onChanged(WorkInfo workInfo) {
                        if (workInfo!= null&&workInfo.getState().isFinished()){
                            String time = workInfo.getOutputData().getString(Constant.TIME_MINUTE);
                            MyLog.i("Time="+time);
                            tv_network_time.setText(time);
                        }
                    }
                });
        tv_network_time.setText(Utils.getHHmm());
        tv_speed.setText(getResources().getString(R.string.speed,speed));
app/src/main/java/safeluck/drive/evaluation/viewmodels/TimeViewModel.kt
@@ -1,2 +1,41 @@
package safeluck.drive.evaluation.viewmodels
import android.util.Log
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import safeluck.drive.evaluation.util.Utils
class TimeViewModel : ViewModel() {
    val TAG:String = "TimeViewModel"
    private var time:MutableLiveData<String> = MutableLiveData<String>()
    private var flag=true
    fun getLiveDataTime():LiveData<String> {
        loadTime();
        return time
    }
    private fun loadTime() {
        Thread(Runnable {
            while (flag){
                try {
                    Thread.sleep(10 * 1000.toLong())
                } catch (e: InterruptedException) {
                    e.printStackTrace()
                }
                Log.i(TAG,"10s时间到")
                time.postValue(Utils.getHHmm())
            }
        }).start()
    }
    override fun onCleared() {
        Log.i(TAG,"onCleared")
        flag = false;
    }
}
app/src/main/java/safeluck/drive/evaluation/worker/MCUUpgradeWorker.kt
New file
@@ -0,0 +1,36 @@
package safeluck.drive.evaluation.worker
import android.content.Context
import androidx.work.Data
import androidx.work.Worker
import androidx.work.WorkerParameters
import com.anyun.exam.lib.AYSdk
import com.anyun.exam.lib.MyLog
import safeluck.drive.evaluation.Constant
import safeluck.drive.evaluation.util.FileUtil
import java.io.IOException
import java.nio.charset.Charset
class MCUUpgradeWorker(context: Context, workerParams: WorkerParameters) : Worker(context, workerParams){
    override fun doWork(): Result {
        MyLog.i("升级单片机")
        try {
            val datas = FileUtil.readLocalFile(applicationContext, "dfu.bin")
            if (datas != null) {
                val strs = String(datas, Charset.forName("ISO-8859-1"))
                AYSdk.getInstance().sendCmd(Constant.UPGRADE_MCU_CONTENT_FILE, strs)
                FileUtil.deleteFile("",Constant.MCU_FILE_NAME);
            } else {
                MyLog.i( "mcu升级文件不存在")
                var data = Data.Builder().putString(Constant.MCU_UPGRADE_FAIL_RESASON,"mcu升级文件不存在").build()
                return Result.failure(data);
            }
        } catch (e: IOException) {
            e.printStackTrace()
        }
        return Result.success()
    }
}
im_lib/src/main/java/com/safeluck/aykj/message/BinMessageBase.java
@@ -62,7 +62,7 @@
                }
                //动态长度,去掉其他所有字段的长度,剩余的为此字段长度
                if (fieldDefine.getFieldLen() > 0) {
                    System.out.println(fieldDefine.field.getName() + "长度=" + fieldDefine.getFieldLen() * 2);
//                    System.out.println(fieldDefine.field.getName() + "长度=" + fieldDefine.getFieldLen() * 2);
                    used += (fieldDefine.getFieldLen() * 2);
                }