app/src/main/java/safeluck/drive/evaluation/DB/appstatusdb/AppStatusWorker.java
@@ -28,7 +28,7 @@ public AppStatusWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) { super(context, workerParams); MyLog.i("初始化AppStatusWorker"); MyLog.i(TAG,"初始化AppStatusWorker"); appStatusDao = WorkRoomDataBase.getWorkRoomDataBase(getApplicationContext()).getAppStatusDao(); } @@ -37,7 +37,7 @@ public Result doWork() { String[] str = getInputData().getStringArray(Constant.APP_STATUS); JSONObject jsonObject = null; MyLog.i("AppStatusWorker:"+str[0]+": "+str[1]); MyLog.i(TAG,"AppStatusWorker:"+str[0]+": "+str[1]); try { jsonObject = new JSONObject(str[1]); switch (str[0]) { app/src/main/java/safeluck/drive/evaluation/DB/exam_status/ExamStatusWorkRepo.java
@@ -40,7 +40,6 @@ WorkRoomDataBase.dataBaseWriteExecutor.execute(new Runnable() { @Override public void run() { examStatusDao.updateStartExam(startex); } }); app/src/main/java/safeluck/drive/evaluation/MainActivity.java
@@ -125,7 +125,8 @@ hideBottomUIMenu(); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.activity_main); //初始化tts ExamPlatformData.getInstance().initTTS(getApplicationContext()); viewtitle = findViewById(R.id.top_title); btn_return = findViewById(R.id.btn_return); @@ -141,8 +142,7 @@ tv_network_time.setText(Utils.getHHmm()); //初始化tts ExamPlatformData.getInstance().initTTS(getApplicationContext()); app/src/main/java/safeluck/drive/evaluation/app.java
@@ -52,6 +52,7 @@ import safeluck.drive.evaluation.platformMessage.JKMessage0206; import safeluck.drive.evaluation.platformMessage.PlatFormConstant; import safeluck.drive.evaluation.util.CThreadPoolExecutor; import safeluck.drive.evaluation.util.DataInitKt; import safeluck.drive.evaluation.util.FileUtil; import safeluck.drive.evaluation.util.SystemUtil; import safeluck.drive.evaluation.util.Utils; @@ -108,11 +109,15 @@ MyLog.i("开始初始化数据发送地图/车辆/mcu升级文件/考试状态"); int type = WorkRoomDataBase.getWorkRoomDataBase(getApplicationContext()).getExamStatusDao().getStartExamInt(); ExamPlatformData.getInstance().setExamType(type); OneTimeWorkRequest examStatausOutWorker = OneTimeWorkRequest.from(ExamStatusOutWorker.class); // OneTimeWorkRequest examStatausOutWorker = OneTimeWorkRequest.from(ExamStatusOutWorker.class); sendMapInfo(); sendVechileInfo(); OneTimeWorkRequest mcuUpgradeWorker = OneTimeWorkRequest.from(MCUUpgradeWorker.class); WorkManager.getInstance(getApplicationContext()).beginWith(examStatausOutWorker).then(mcuUpgradeWorker).enqueue(); DataInitKt.MCUUpgrade(getApplicationContext()); DataInitKt.sendExamLights(getApplicationContext()); DataInitKt.sendRtkConfig(getApplicationContext()); DataInitKt.sendSignalConfigToRemote(getApplicationContext()); // OneTimeWorkRequest mcuUpgradeWorker = OneTimeWorkRequest.from(MCUUpgradeWorker.class); // WorkManager.getInstance(getApplicationContext()).beginWith(examStatausOutWorker).then(mcuUpgradeWorker).enqueue(); }); } app/src/main/java/safeluck/drive/evaluation/bean/ExamPlatformData.java
@@ -286,9 +286,11 @@ return enter_exit_item_tts.get(item); } public Speaker getTTS(){ public synchronized Speaker getTTS(){ if (speaker == null){ throw new RuntimeException("请先初始化TTS,先调用initTTS"); MyLog.i("请先初始化TTS,先调用initTTS"); initTTS(app.getAppContext()); return speaker; }else return speaker; } app/src/main/java/safeluck/drive/evaluation/fragment/NetWorkTrainFragment.java
@@ -460,12 +460,13 @@ examStatusList.clear(); examStatusList.addAll(examStatus); mHandler.obtainMessage(ADD_DATA).sendToTarget(); if (examStatus.get(0).getStartExam() != Constant.NONE_BEEN_START_EXAM){ exam_type = examStatus.get(0).getStartExam(); if (exam_type != Constant.NONE_BEEN_START_EXAM){ btn_start_exam.setText("结束考试"); }else{ btn_start_exam.setText("开始考试"); } exam_type = examStatus.get(0).getStartExam(); } @@ -685,6 +686,7 @@ ExamPlatformData.getInstance().getTTS().speak("开始考试"); Date date = new Date(); MyLog.i("修改exam_status表的startExam字段为"+exam_type); wokViewModel.updateBeginTime(date.getTime()); jkMessage0202.timeBCD = date; ExamPlatformData.getInstance().setExam_id(Utils.parseUnsignedInt(String.valueOf(date.getTime()/1000),10)); app/src/main/java/safeluck/drive/evaluation/fragment/RoadDriveMapFragmentaa.java
@@ -59,7 +59,7 @@ public class RoadDriveMapFragmentaa extends SupportFragment implements View.OnClickListener { private static final int ALL_MAP = 100; private int pixels = 80; private int pixels = 3; private boolean isDrawing = false; private StringBuffer buffer = null;//存放地图的buffer @@ -865,7 +865,7 @@ scale_x = Math.round(Math.abs(50 / Math.sqrt(Math.pow(car[0][0], 2) + Math.pow(car[0][1], 2)) )); scale_x = 3; scale_x = pixels; scale_y = scale_x; app/src/main/java/safeluck/drive/evaluation/fragment/TrainFragment.java
@@ -449,16 +449,17 @@ Log.i(TAG, "ExamStatus onChanged: "); if (examStatus!=null && examStatus.size()>0){ showChangKaoOrLukao(examStatus.get(0).getStartExam()); MyLog.i(TAG,"考试状态更新"+examStatus.get(0).getStartExam()); MyLog.i("考试状态更新"+examStatus.get(0).getStartExam()); examStatusList.clear(); examStatusList.addAll(examStatus); mHandler.obtainMessage(ADD_DATA).sendToTarget(); if (examStatus.get(0).getStartExam() != Constant.NONE_BEEN_START_EXAM){ exam_type = examStatus.get(0).getStartExam(); if (exam_type != Constant.NONE_BEEN_START_EXAM){ btn_start_exam.setText("结束训练"); }else{ btn_start_exam.setText("开始训练"); } exam_type = examStatus.get(0).getStartExam(); } app/src/main/java/safeluck/drive/evaluation/util/DataInit.kt
New file @@ -0,0 +1,201 @@ package safeluck.drive.evaluation.util import android.content.Context import androidx.work.Data import androidx.work.ListenableWorker import com.anyun.exam.lib.AYSdk import com.anyun.exam.lib.MyLog import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.google.gson.stream.JsonReader import org.json.JSONException import org.json.JSONObject import safeluck.drive.evaluation.Constant import safeluck.drive.evaluation.DB.WorkRoomDataBase import safeluck.drive.evaluation.DB.rtktb.RTKConfig import safeluck.drive.evaluation.DB.signalConfigdb.SingalConfig import safeluck.drive.evaluation.bean.ExamPlatformData import safeluck.drive.evaluation.bean.SignalConfigRemote import safeluck.drive.evaluation.bean.SimulateNightBean import safeluck.drive.evaluation.worker.MCUUpgradeWorker import java.io.IOException import java.io.InputStreamReader import java.nio.charset.Charset /** * * @ProjectName: DriveJudge * @Package: safeluck.drive.evaluation.util * @ClassName: DataInit * @Description: java类作用描述 * @Author: 李占伟 * @CreateDate: 20/7/26 下午4:44 * @UpdateUser: 更新者 * @UpdateDate: 20/7/26 下午4:44 * @UpdateRemark: 更新说明 * @Version: 1.0 */ fun MCUUpgrade(applicationContext:Context) { 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() } } catch (e: IOException) { e.printStackTrace() } } private val gson = Gson() private val tempQs: MutableList<SimulateNightBean.QuestionBean> = java.util.ArrayList() var simulateNightBean:SimulateNightBean=SimulateNightBean() fun sendExamLights(applicationContext: Context){ MyLog.i("发送灯光") val examType = WorkRoomDataBase.getWorkRoomDataBase(applicationContext).examStatusDao.startExamInt; simulateNightBean.setExam(0) val list = ExamPlatformData.getInstance().simulate_light_tips tempQs.add(list[list.size-2])//提示下面将进行灯光考试 tempQs.add(list[0]) val a = Utils.getRandomInts(4, 12) for (i in a.indices) { tempQs.add(list[a[i]]) } tempQs.add(list[list.size-1])//提示灯光考试结束 simulateNightBean.setQuestion(tempQs) MyLog.i("开始发送灯光,考试项共有"+simulateNightBean.question.size) AYSdk.getInstance().sendCmd(0x8012, gson.toJson(simulateNightBean)) //发送考试状态 MyLog.i("查到的考试type=$examType") try { val jsonObject = JSONObject() if (examType == safeluck.drive.evaluation.Constant.NONE_BEEN_START_EXAM) { jsonObject.put("exam", 0) }else{ jsonObject.put("exam", 1) } jsonObject.put("type", examType) val examJson = jsonObject.toString() AYSdk.getInstance().sendCmd(safeluck.drive.evaluation.Constant.EXAM_STATUS, examJson) } catch (e: JSONException) { e.printStackTrace() } } fun sendRtkConfig(applicationContext: Context){ var rtk = WorkRoomDataBase.getWorkRoomDataBase(applicationContext).rtkConfigDao._getRtkConfig() if (rtk == null){ try { MyLog.i("读文件发送RTK配置") val inputStream = applicationContext.assets.open(safeluck.drive.evaluation.Constant.RTK_CONFIG_JSON) val inputStreamReader = InputStreamReader(inputStream) val jsonReader = JsonReader(inputStreamReader) val gson = Gson() val type = object : TypeToken<RTKConfig?>() {}.type val mstus = gson.fromJson<RTKConfig>(jsonReader, type) rtk = mstus } catch (e: IOException) { e.printStackTrace() } }else{ } sendRtkConfigInfo(rtk) } private var signalConfiglist: MutableList<SignalConfigRemote> = ArrayList() private fun sendRtkConfigInfo(mRTKConfig: RTKConfig) { if (mRTKConfig != null) { var rtkjson = gson.toJson(mRTKConfig) //去除id字段 var jsonObject: JSONObject? = null try { jsonObject = JSONObject(rtkjson) } catch (e: JSONException) { e.printStackTrace() } jsonObject!!.remove("_id") rtkjson = null rtkjson = jsonObject.toString() MyLog.i("NDK_start RTK配置信息") AYSdk.getInstance().sendCmd(safeluck.drive.evaluation.Constant.PUSH_RTK_PLATFORM_INFO, rtkjson) } else { MyLog.i("RTKConfig未取到数据") } } private var singalConfigs :List<SingalConfig> = ArrayList() fun sendSignalConfigToRemote(applicationContext: Context){ singalConfigs = WorkRoomDataBase.getWorkRoomDataBase(applicationContext).signalConfigDao._getSignalConfigs() if (singalConfigs ==null){ MyLog.i("读文件发送信号配置") try { val inputStream = applicationContext.assets.open("signal_config_file.json") val inputStreamReader = InputStreamReader(inputStream) val jsonReader = JsonReader(inputStreamReader) val gson = Gson() val type = object : TypeToken<List<SingalConfig?>?>() {}.type val mstus = gson.fromJson<List<SingalConfig>>(jsonReader, type) singalConfigs = mstus } catch (e: IOException) { e.printStackTrace() } }else{ } for (i in singalConfigs.indices) { val signalConfigRemote = SignalConfigRemote() signalConfigRemote.func_id = singalConfigs.get(i).func_id signalConfigRemote.gpio_num = singalConfigs.get(i).getIndex()-1 signalConfigRemote.level = singalConfigs.get(i).getHighLevel() signalConfiglist.add(signalConfigRemote) } var indexs = WorkRoomDataBase.getWorkRoomDataBase(applicationContext).signalConfigDao.allIndexs sendSignalConfigsToRemote_(indexs) } private fun sendSignalConfigsToRemote_(indexs: List<Int>) { if (signalConfiglist.size > 0) { if (listContainsSameValue(indexs)) { MyLog.i("sendSignalConfigsToRemote: 有相同的index,不能发送" + gson.toJson(signalConfiglist)) } else { AYSdk.getInstance().sendCmd(safeluck.drive.evaluation.Constant.SEND_CONFIG_SIGNAL, gson.toJson(signalConfiglist)) } } } private fun listContainsSameValue(indexs: List<Int>): Boolean { for (i in indexs.indices) { //可以默认是0 0不判断是否有相同的index if (indexs[i] == 0) { continue } for (j in i + 1 until indexs.size) { if (indexs[i] === indexs[j]) { return true } } } return false }