| | |
| | | return; |
| | | } |
| | | |
| | | type = TEST_TYPE_ROAD_CALIBRATE; |
| | | // type = TEST_TYPE_ROAD_CALIBRATE; |
| | | |
| | | if (AreaMapList.size() == 0 && type == TEST_TYPE_AREA) { |
| | | DEBUG("没有场考地图"); |
| | |
| | | #define ID_SM_CROSSING_BRIEF 0x0016 // 科目三项目标定,接近/驶离某各路口的提示 |
| | | #define ID_MS_INQ_ROAD_CROSSING 0x8018 // Master查询当前路段和路口 |
| | | |
| | | #define ID_SM_CAN_BRIEF 0x0021 |
| | | |
| | | #define MA_OUT_GPS_BRIEF 0x0001 |
| | | #define MA_OUT_RTK_BRIEF 0x0002 |
| | | #define MA_OUT_CAR_BRIEF 0x0004 |
| | |
| | | SendMsgToMainProcIndep(ID_SM_DISTANCE, sb.GetString()); |
| | | } |
| | | |
| | | void MA_SendCanStatus(const struct canBrief *brief) |
| | | { |
| | | StringBuffer sb; |
| | | Writer<StringBuffer> writer(sb); |
| | | |
| | | writer.StartObject(); |
| | | writer.Key("gpio"); |
| | | writer.Int(brief->gpio); |
| | | writer.Key("rpm"); |
| | | writer.Int(brief->rpm); |
| | | writer.Key("speed"); |
| | | writer.Int(brief->speed); |
| | | writer.Key("voltage"); |
| | | writer.Int(brief->voltage); |
| | | writer.EndObject(); |
| | | |
| | | SendMsgToMainProcIndep(ID_SM_CAN_BRIEF, sb.GetString()); |
| | | } |
| | | |
| | | void MA_SendRoadStatus(const struct roadStatusBrief *brief) |
| | | { |
| | | StringBuffer sb; |
| | |
| | | char sn[20]; |
| | | }; |
| | | |
| | | struct canBrief { |
| | | int gpio; |
| | | int rpm; |
| | | double speed; |
| | | double voltage; |
| | | }; |
| | | |
| | | struct carSensorBrief { |
| | | int odo; |
| | | int trip; |
| | |
| | | |
| | | void MA_SendRoadStatus(const struct roadStatusBrief *brief); |
| | | void MA_SendCrossingStatus(const struct crossingStatusBrief *brief); |
| | | void MA_SendCanStatus(const struct canBrief *brief); |
| | | |
| | | #endif //MYAPPLICATION2_COMM_IF_H |
| | |
| | | switch (id) { |
| | | case ID_MC_MCU_BOOT: |
| | | DEBUG("MCU BOOT"); |
| | | if (lenth == 8) { |
| | | PlatformStatusChanged(CAN_UPDATE_EVT, data, lenth); |
| | | } |
| | | |
| | | break; |
| | | case ID_MC_DFU_RSP: |
| | | DEBUG("ID_MC_DFU_RSP %d len %d", data[0], lenth); |
| | |
| | | TTSCallBack.erase(it); |
| | | } |
| | | } |
| | | |
| | | extern "C" |
| | | JNIEXPORT void JNICALL |
| | | Java_com_anyun_exam_lib_RemoteService_UpgradeMcu(JNIEnv *env, jobject thiz, jstring vercode, |
| | | jbyteArray rom) { |
| | | // TODO: implement UpgradeMcu() |
| | | if (vercode != NULL && rom != NULL) { |
| | | const char *str = env->GetStringUTFChars(vercode, 0); |
| | | jbyte *c_dat = env->GetByteArrayElements(rom, NULL); |
| | | int len = env->GetArrayLength(rom); |
| | | |
| | | LoadDefaultMcuRom(str, (uint8_t *)c_dat, len); |
| | | |
| | | env->ReleaseStringUTFChars(vercode, str); |
| | | env->ReleaseByteArrayElements(rom, c_dat, NULL); |
| | | } |
| | | } |
| | |
| | | void *data; |
| | | }; |
| | | |
| | | struct default_mcu_rom_t { |
| | | int more; |
| | | char verCode[70]; |
| | | uint8_t *rom; |
| | | int length; |
| | | } defaultMcuRom; |
| | | |
| | | static struct event_queue_t { |
| | | struct event_t event; |
| | | struct event_queue_t *next; |
| | |
| | | |
| | | memset(&gbf, 0, sizeof(gbf)); |
| | | memset(&rbf, 0, sizeof(rbf)); |
| | | memset(&defaultMcuRom, 0, sizeof(defaultMcuRom)); |
| | | |
| | | pthread_mutex_init(&platform_tx_mutex, NULL); |
| | | pthread_mutex_init(&events_mutex, NULL); |
| | |
| | | |
| | | MA_SendMcuBrief(&brief); |
| | | |
| | | if (defaultMcuRom.more > 0) { |
| | | char str[64] = {0}; |
| | | |
| | | memcpy(str, data, 32); |
| | | |
| | | vector<string> ver = split(str, "_"); |
| | | |
| | | if (strlen(defaultMcuRom.verCode) > 0 && ver.size() >= 4 && strcmp(defaultMcuRom.verCode, ver[3].c_str()) != 0 && defaultMcuRom.rom != NULL) { |
| | | UploadDfuFile(defaultMcuRom.rom, defaultMcuRom.length); |
| | | delete []defaultMcuRom.rom; |
| | | defaultMcuRom.rom = NULL; |
| | | } |
| | | defaultMcuRom.more = 0; |
| | | } |
| | | // UpdateSensor(brief.gpio, brief.speed, brief.engine); |
| | | } |
| | | if (events & CAN_UPDATE_EVT) { |
| | | struct canBrief brief; |
| | | |
| | | brief.gpio = BUILD_UINT16(data[1], data[0]); |
| | | brief.rpm = BUILD_UINT16(data[3], data[2]); |
| | | brief.speed = (double) BUILD_UINT16(data[5], data[4]) / 10.0; |
| | | brief.voltage = (double) BUILD_UINT16(data[7], data[6]) / 10.0; |
| | | |
| | | MA_SendCanStatus(&brief); |
| | | } |
| | | if (events & CAR_SENSOR_UPDATE_EVT) { |
| | | struct carSensorBrief brief; |
| | |
| | | { |
| | | SendRTKStop(); |
| | | } |
| | | |
| | | void LoadDefaultMcuRom(const char *verCode, const uint8_t *rom, int length) |
| | | { |
| | | DEBUG("内置单片机rom %s len %ld", verCode, length); |
| | | strcpy(defaultMcuRom.verCode, verCode); |
| | | |
| | | if (length > 0 && rom != NULL) { |
| | | defaultMcuRom.length = length; |
| | | if (defaultMcuRom.rom != NULL) |
| | | delete []defaultMcuRom.rom; |
| | | |
| | | defaultMcuRom.more = 1; |
| | | defaultMcuRom.rom = new uint8_t[length]; |
| | | memcpy(defaultMcuRom.rom, rom, length); |
| | | } |
| | | } |
| | |
| | | #define PLAY_TTS_DONE_EVT 0x0100 |
| | | #define CAR_SENSOR_UPDATE_EVT 0x0200 |
| | | #define MASTER_COMM_EVT 0x0400 |
| | | #define CAN_UPDATE_EVT 0x0800 |
| | | |
| | | typedef struct { |
| | | char domain_name[32]; |
| | |
| | | void RequestRtkDownload(const gpsStatus_t *gps, uint16_t rtk_pkt_interval); |
| | | void StopRtkDownload(void); |
| | | |
| | | void LoadDefaultMcuRom(const char *verCode, const uint8_t *rom, int length); |
| | | |
| | | #endif //RTKDRIVERTEST_PLATFORM_H |
| | |
| | | static int mapIndex = 0; |
| | | |
| | | const uint32_t STOP_CAR_TIME = D_SEC(2); |
| | | const uint32_t CHECK_PARK_DELAY = 400; |
| | | |
| | | static uint32_t stopTimepoint; |
| | | static int prevMoveDirect, storeMoveDirectBeforeStop; |
| | | static bool occurCrashRedLine; |
| | |
| | | stopTimepoint = tp; |
| | | storeMoveDirectBeforeStop = prevMoveDirect; |
| | | if (prevMoveDirect == -1) { |
| | | checkPartStatus = true; |
| | | checkPartStatus = true; // 每次倒车停止,触发入库检查 |
| | | } |
| | | |
| | | DEBUG("停车了 %d %d %d %d %d %d %d", rtkTime->YY, rtkTime->MM, rtkTime->DD, rtkTime->hh, rtkTime->mm, rtkTime->ss, rtkTime->mss); |
| | |
| | | } |
| | | } else { |
| | | // 切换为前进 |
| | | if (tp - stopTimepoint >= STOP_CAR_TIME) { |
| | | DEBUG("切换为前进"); |
| | | |
| | | if (tp - stopTimepoint >= CHECK_PARK_DELAY) { |
| | | if (crossCtrlLineSw) { |
| | | if (checkPartStatus) { |
| | | if (EnterParking(map, car)) { |
| | | parkStatus[parkCount] = 1; |
| | | } |
| | | checkPartStatus = false; |
| | | } |
| | | if (parkStatus[parkCount] != 1) { |
| | | // 倒库不入,不合格 |
| | | reportParkFail = true; |
| | |
| | | firstReverseTimepoint = tp; |
| | | } |
| | | } else if (moveDirect == 0 && crossCtrlLineSw) { |
| | | if (tp - stopTimepoint >= STOP_CAR_TIME && checkPartStatus) { |
| | | if (tp - stopTimepoint >= CHECK_PARK_DELAY && checkPartStatus) { |
| | | if (EnterParking(map, car)) { |
| | | parkStatus[parkCount] = 1; |
| | | } |
| | |
| | | |
| | | const int PARK_TIMEOUT = D_SEC(90); |
| | | const uint32_t STOP_CAR_TIME = D_SEC(2); |
| | | const uint32_t CHECK_PARK_DELAY = 400; |
| | | |
| | | static int mapIndex = 0; |
| | | static bool reportExamTimeout; |
| | |
| | | } |
| | | } else { |
| | | // 倒车切换到前进 |
| | | if (moveStatus == 1 && tp - stopTimepoint >= STOP_CAR_TIME) { |
| | | if (moveStatus == 1 && tp - stopTimepoint >= CHECK_PARK_DELAY) { |
| | | if (parkStatus == 0) { |
| | | if (EnterParking(map, car)) { |
| | | parkStatus = 1; |
| | |
| | | } else if (moveStatus == 0 && parkStatus == 0) { |
| | | uint32_t tp = TimeMakeComposite(rtkTime->hh, rtkTime->mm, rtkTime->ss, rtkTime->mss*10); |
| | | |
| | | if (tp - stopTimepoint >= STOP_CAR_TIME) { |
| | | if (tp - stopTimepoint >= CHECK_PARK_DELAY) { |
| | | if (EnterParking(map, car)) { |
| | | parkStatus = 1; |
| | | parkSuccess = true; |
| | |
| | | const double SLIDE_DISTANCE_THRESHOLD_RED = 0.3; |
| | | const double SLIDE_DISTANCE_THRESHOLD_YELLOW = 0.1; |
| | | const uint32_t CAR_START_TIMEOUT = D_SEC(30); |
| | | const uint32_t STOP_CAR_TIME = D_SEC(2); |
| | | const uint32_t STOP_CAR_TIME = D_SEC(1); |
| | | |
| | | const double EPSILON = 1e-3; |
| | | |
| | |
| | | #include "xconvert.h" |
| | | #include <cstdint> |
| | | #include <cstring> |
| | | #include <vector> |
| | | #include <string> |
| | | |
| | | using namespace std; |
| | | |
| | | #define SECONDS_PER_MINUTE 60 |
| | | #define SECONDS_PER_HOUR 3600 |
| | |
| | | TimeMakeComposite(hour2, minute2, second2, msecond2)) % (SECONDS_PER_DAY * 1000); |
| | | } |
| | | |
| | | vector<string> split(string str, string pattern) |
| | | { |
| | | string::size_type pos; |
| | | vector<string> result; |
| | | str += pattern; |
| | | |
| | | int size=str.size(); |
| | | |
| | | for(int i=0; i<size; i++) { |
| | | pos=str.find(pattern,i); |
| | | if(pos<size) { |
| | | string s=str.substr(i,pos-i); |
| | | result.push_back(s); |
| | | i=pos+pattern.size()-1; |
| | | } |
| | | } |
| | | return result; |
| | | } |
| | |
| | | #define MYAPPLICATION2_XCONVERT_H |
| | | |
| | | #include <cstdint> |
| | | #include <string> |
| | | #include <vector> |
| | | |
| | | double ConvertKMh2Ms(int kmh); |
| | | double ConvertMs2KMh(double ms); |
| | |
| | | uint32_t TimeMakeComposite(int hour, int minute, int second, int msecond); |
| | | uint32_t TimeGetDiff(int hour1, int minute1, int second1, int msecond1, int hour2, int minute2, int second2, int msecond2); |
| | | |
| | | std::vector<std::string> split(std::string str, std::string pattern); |
| | | |
| | | #endif //MYAPPLICATION2_XCONVERT_H |
| | |
| | | |
| | | import com.anyun.exam.lib.util.DESUtil; |
| | | import com.anyun.exam.lib.util.NetUtils; |
| | | import com.anyun.exam.lib.util.ProperUtil; |
| | | import com.anyun.exam.lib.util.Speaker; |
| | | import com.anyun.exam.lib.util.SpeakerCallback; |
| | | |
| | | import androidx.annotation.Nullable; |
| | | |
| | | import java.io.IOException; |
| | | import java.io.InputStream; |
| | | import java.io.UnsupportedEncodingException; |
| | | import java.lang.reflect.Method; |
| | | import java.util.ArrayList; |
| | | import java.util.Properties; |
| | | import java.util.concurrent.atomic.AtomicBoolean; |
| | | |
| | | /** |
| | |
| | | Log.d(TAG, "UnsupportedEncodingException"); |
| | | } |
| | | } else { |
| | | Log.d(TAG, "Process " + Process.myPid() + " Thread " + Thread.currentThread().getId() + " RecvMsgFromMainProc cmd = " + String.format(" %04X ", cmd) + " length " + value.length() + " value " + value.trim()); |
| | | Log.d(TAG, "Process " + Process.myPid() + " Thread " + Thread.currentThread().getId() + " RecvMsgFromMainProc cmd = " + String.format(" %04X ", cmd) + " length " + value.length()); |
| | | MainProcMsgEntry(cmd, value.trim()); |
| | | } |
| | | } |
| | |
| | | |
| | | new Thread(new TestThread()).start(); |
| | | |
| | | new Thread(new AutoUpdateMcuThread(this)).start(); |
| | | |
| | | upgrade = Upgrade.getInstance(getApplicationContext()); |
| | | upgrade.CheckUpgrade(); |
| | | |
| | |
| | | Log.d(TAG, "基带版本 " + getBaseband_Ver()); |
| | | |
| | | String ver = getBaseband_Ver(); |
| | | } |
| | | |
| | | class AutoUpdateMcuThread implements Runnable { |
| | | private Context context; |
| | | |
| | | public AutoUpdateMcuThread(Context context) { |
| | | this.context = context; |
| | | } |
| | | |
| | | @Override |
| | | public void run() { |
| | | Properties proper = ProperUtil.getProperties(getApplicationContext()); |
| | | if (proper != null) { |
| | | String assetVer = proper.getProperty("mcuVersion"); |
| | | |
| | | if (assetVer != null) { |
| | | try { |
| | | InputStream inputStream = context.getAssets().open("dfu.bin"); |
| | | |
| | | if (inputStream != null) { |
| | | int fileLength = inputStream.available(); |
| | | Log.d(TAG, "AutoUpdateMcu " + fileLength); |
| | | |
| | | if (fileLength > 0) { |
| | | byte[] temp = new byte[fileLength]; |
| | | inputStream.read(temp); |
| | | |
| | | UpgradeMcu(assetVer, temp); |
| | | } |
| | | inputStream.close(); |
| | | } |
| | | } catch (IOException e) { |
| | | |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | private void LimitMaxMinVolume() { |
| | |
| | | public native void startNative(); |
| | | public native void MainProcMsgEntry(int cmd, String value); |
| | | public native void MainProcBinMsgEntry(int cmd, byte []data, int length); |
| | | public native void UpgradeMcu(String vercode, byte []rom); |
| | | public native void TextSpeakEnd(int id); |
| | | } |
New file |
| | |
| | | package com.anyun.exam.lib.util; |
| | | |
| | | import android.content.Context; |
| | | |
| | | import java.io.InputStream; |
| | | import java.util.Properties; |
| | | |
| | | public class ProperUtil { |
| | | public static Properties getProperties(Context c){ |
| | | Properties props = null; |
| | | |
| | | try { |
| | | InputStream in = c.getAssets().open("appConfig"); |
| | | if (in != null) { |
| | | props = new Properties(); |
| | | props.load(in); |
| | | in.close(); |
| | | } |
| | | } catch (Exception e1) { |
| | | // TODO Auto-generated catch block |
| | | } |
| | | |
| | | return props; |
| | | } |
| | | } |