mirror of
https://github.com/dragonpilot/dragonpilot.git
synced 2026-08-24 01:33:50 +08:00
Compare commits
250 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| b2de3470b5 | |||
| 5316ca562e | |||
| ebc83086b7 | |||
| ba11992845 | |||
| 09e5039bf1 | |||
| d253f6ea14 | |||
| 667b2098d3 | |||
| 0f1882a34b | |||
| c215d36589 | |||
| d0931c70e0 | |||
| 6c248d2841 | |||
| c866f0f408 | |||
| beb29ba933 | |||
| 0e87593094 | |||
| 67cdf781a2 | |||
| 90dea88f60 | |||
| a483770f87 | |||
| 8cc4a02495 | |||
| f5a4f26bab | |||
| baea7d84b6 | |||
| db857efa09 | |||
| 21191140dd | |||
| fc679371e7 | |||
| 5165d473c0 | |||
| 59686cf715 | |||
| dbc157a820 | |||
| dc06c1704b | |||
| d126092246 | |||
| d782fde947 | |||
| bed5f9d26f | |||
| a52d45cbeb | |||
| 169fbbd035 | |||
| 52c57c9b39 | |||
| 90757561fe | |||
| 89d7f622c9 | |||
| f2d588acfc | |||
| 9f91c828ab | |||
| f7637f1184 | |||
| 5ee14c6642 | |||
| 6587be7037 | |||
| 978a64b984 | |||
| 3619494ec4 | |||
| e3e7735493 | |||
| 567ed531bf | |||
| bc81e980d6 | |||
| 8f26975a43 | |||
| c048284f59 | |||
| b40d633caa | |||
| 794133c092 | |||
| 2ea9730ec2 | |||
| acb965f089 | |||
| efce59b7c3 | |||
| 2e111341f7 | |||
| 2588ecf77e | |||
| 8f3044e266 | |||
| b4f352b614 | |||
| 82a4cefe2a | |||
| 955aaf8b3a | |||
| 8ec5db8e59 | |||
| 6e33993c69 | |||
| 13da193279 | |||
| c667720312 | |||
| 94ca4908f0 | |||
| b00a6e346f | |||
| e09b1f5173 | |||
| 310d730381 | |||
| ce5e6bff73 | |||
| a7b17ec83c | |||
| b47bc88d91 | |||
| a0ebe813da | |||
| 9f2810902b | |||
| 2f0c4a343c | |||
| 401dd06754 | |||
| f6a6f09149 | |||
| bd17323956 | |||
| a5804647d3 | |||
| f3476236db | |||
| ce2676c3db | |||
| a6c47612e8 | |||
| 989842f36c | |||
| f0df652b77 | |||
| 1f628db9e3 | |||
| b6b0796059 | |||
| cd3f477c34 | |||
| 524d087992 | |||
| 412ac923d6 | |||
| a2ec1158ce | |||
| b9500591c8 | |||
| 7d153f558c | |||
| 17ba9712c3 | |||
| 012ad245f4 | |||
| 056d3bafb8 | |||
| 20215c5edc | |||
| cb1c0cf041 | |||
| fa452b9bdb | |||
| 6358273b65 | |||
| e39f995c9e | |||
| 95458011da | |||
| 8ac8c27469 | |||
| 11f049bb82 | |||
| d60670cbef | |||
| 11c9f05a41 | |||
| 5430ce178a | |||
| 12f1e93f05 | |||
| 71e3b9a966 | |||
| 8903731369 | |||
| 8634c44c7f | |||
| f96fa69fd5 | |||
| 8c6af53ea1 | |||
| bba6b4a64d | |||
| 57b115057a | |||
| d0917afc54 | |||
| 8f3a70edde | |||
| 9e81d14ffe | |||
| ece399205f | |||
| 4139904700 | |||
| 06958d60d0 | |||
| a75e8c378a | |||
| 56c1b9851c | |||
| 979e5055e5 | |||
| 168107625a | |||
| a536a2f91b | |||
| cd6e20a4f9 | |||
| cb731ec3f0 | |||
| 7702fcddbb | |||
| 2c4336225f | |||
| a5cf330dce | |||
| 4a8144374c | |||
| 1ecbcd6c19 | |||
| f7bb52fd1a | |||
| f0d529e633 | |||
| 17a3e0de48 | |||
| 2051dc9f6c | |||
| 1320e51e73 | |||
| 8afc3660cb | |||
| 684daccc00 | |||
| c14b16d50b | |||
| 44dc63663b | |||
| 5677d7427f | |||
| 3c1b4f3976 | |||
| e876f98917 | |||
| 4f1ff0a7f8 | |||
| bb285b4f27 | |||
| 337debb930 | |||
| cf30989e9e | |||
| 4aa8bef68f | |||
| 50a481abd6 | |||
| dbe9714eaa | |||
| dbad60d49f | |||
| 1e190ce69d | |||
| d4c7cd6156 | |||
| 926370d84a | |||
| 7f4f1d5477 | |||
| 93f13c549a | |||
| 0988c7da8a | |||
| 0965836b14 | |||
| 6a4dd5e509 | |||
| 36a099ee49 | |||
| 29362f52f2 | |||
| f4421854a8 | |||
| ce96907f77 | |||
| a6833a4fb7 | |||
| e29394dfa5 | |||
| 3ebfd5037a | |||
| 8c958bd9ac | |||
| ad0b137ebd | |||
| 3e17597840 | |||
| ec2ef3212d | |||
| cd38322224 | |||
| fd3aa74d1a | |||
| 9b8705d440 | |||
| a0412b33df | |||
| c017e1907e | |||
| 6930e85eea | |||
| 64a1662820 | |||
| 82843fc2c1 | |||
| baf6b7bfda | |||
| ebf4626f87 | |||
| 6e9581e956 | |||
| e6bd413a31 | |||
| 84a14cc215 | |||
| e1993002c0 | |||
| 138a3e4789 | |||
| 5199889ff3 | |||
| 5aa175292e | |||
| bf70999eb4 | |||
| ee3f1cded6 | |||
| 627c949d3e | |||
| 7ce0b82bb1 | |||
| 6d1d8009a8 | |||
| d6efb674bf | |||
| fbaeb4af10 | |||
| 477ece8e21 | |||
| 42ac9ef8ab | |||
| eecd3804f3 | |||
| b79595ce53 | |||
| 4c7bdc203d | |||
| ac971485f6 | |||
| 08bfb2f1c2 | |||
| 26dcca5ed0 | |||
| 6abf2f07a6 | |||
| 2b51f256dc | |||
| 8e189d018d | |||
| 4b4ef125aa | |||
| 85155f4aaf | |||
| d03dd3d8b5 | |||
| c98d855bf7 | |||
| 38faf37ba5 | |||
| b13bc8f612 | |||
| ba36c90214 | |||
| c7d36ccbbb | |||
| e0451bc0be | |||
| 39b941917b | |||
| 1dbf9391bf | |||
| cddb3ee77a | |||
| ea3f42fe52 | |||
| 016d66fe9c | |||
| 7e69643c23 | |||
| e4f6d4eead | |||
| 048986d8de | |||
| 6924efb442 | |||
| bc701439af | |||
| d5447b82e5 | |||
| e6faf5d389 | |||
| f028e841ad | |||
| 834489a8e3 | |||
| 5f48c0141e | |||
| 19372d4cb4 | |||
| 2ee7398232 | |||
| 80f6c95979 | |||
| 446c124b28 | |||
| 456cae54ce | |||
| 3c43dfbe13 | |||
| e7c99cb8cf | |||
| 7d691c8f85 | |||
| 22b5146f9c | |||
| ff56a4abda | |||
| e3a7d07759 | |||
| fc779b1b7a | |||
| 5ef4e588f1 | |||
| b4624da47c | |||
| 4ba5eb76f6 | |||
| 0cab93ee14 | |||
| bde2ee82d1 | |||
| 4241acf3b2 | |||
| cdde010587 | |||
| 4bad8b91f8 | |||
| 62e084bda1 | |||
| 7b14417c3a | |||
| 1a55765eef |
@@ -31,7 +31,7 @@
|
||||
|
||||
|
||||
# Android system locale, zh-TW = Traditional Chinese, zh-CN = Simplified Chinese
|
||||
lang=zh-TW
|
||||
lang=zh-CN
|
||||
|
||||
update_font=0
|
||||
remove_old_font=0
|
||||
|
||||
@@ -31,9 +31,9 @@ FRAMEBUFFER_LIBS = -lutils -lgui -lEGL
|
||||
.PHONY: all
|
||||
all: updater
|
||||
|
||||
OBJS = NotoSansCJKtc-Regular.otf.o \
|
||||
NotoSansCJKtc-Medium.otf.o \
|
||||
NotoSansCJKtc-Bold.otf.o \
|
||||
OBJS = opensans_regular.ttf.o \
|
||||
opensans_semibold.ttf.o \
|
||||
opensans_bold.ttf.o \
|
||||
../../selfdrive/common/touch.o \
|
||||
../../selfdrive/common/framebuffer.o \
|
||||
$(PHONELIBS)/json11/json11.o \
|
||||
@@ -52,15 +52,15 @@ updater: updater.o $(OBJS)
|
||||
-lcutils -lm -llog
|
||||
strip updater
|
||||
|
||||
NotoSansCJKtc-Regular.otf.o: ../../selfdrive/assets/fonts/NotoSansCJKtc-Regular.otf
|
||||
opensans_regular.ttf.o: ../../selfdrive/assets/fonts/opensans_regular.ttf
|
||||
@echo "[ bin2o ] $@"
|
||||
cd '$(dir $<)' && ld -r -b binary '$(notdir $<)' -o '$(abspath $@)'
|
||||
|
||||
NotoSansCJKtc-Bold.otf.o: ../../selfdrive/assets/fonts/NotoSansCJKtc-Bold.otf
|
||||
opensans_bold.ttf.o: ../../selfdrive/assets/fonts/opensans_bold.ttf
|
||||
@echo "[ bin2o ] $@"
|
||||
cd '$(dir $<)' && ld -r -b binary '$(notdir $<)' -o '$(abspath $@)'
|
||||
|
||||
NotoSansCJKtc-Medium.otf.o: ../../selfdrive/assets/fonts/NotoSansCJKtc-Medium.otf
|
||||
opensans_semibold.ttf.o: ../../selfdrive/assets/fonts/opensans_semibold.ttf
|
||||
@echo "[ bin2o ] $@"
|
||||
cd '$(dir $<)' && ld -r -b binary '$(notdir $<)' -o '$(abspath $@)'
|
||||
|
||||
|
||||
Binary file not shown.
@@ -43,12 +43,12 @@ const char *manifest_url = MANIFEST_URL_EON;
|
||||
|
||||
#define UPDATE_DIR "/data/neoupdate"
|
||||
|
||||
extern const uint8_t bin_opensans_regular[] asm("_binary_NotoSansCJKtc_Regular_otf_start");
|
||||
extern const uint8_t bin_opensans_regular_end[] asm("_binary_NotoSansCJKtc_Regular_otf_end");
|
||||
extern const uint8_t bin_opensans_semibold[] asm("_binary_NotoSansCJKtc_Medium_otf_start");
|
||||
extern const uint8_t bin_opensans_semibold_end[] asm("_binary_NotoSansCJKtc_Medium_otf_end");
|
||||
extern const uint8_t bin_opensans_bold[] asm("_binary_NotoSansCJKtc_Bold_otf_start");
|
||||
extern const uint8_t bin_opensans_bold_end[] asm("_binary_NotoSansCJKtc_Bold_otf_end");
|
||||
extern const uint8_t bin_opensans_regular[] asm("_binary_opensans_regular_ttf_start");
|
||||
extern const uint8_t bin_opensans_regular_end[] asm("_binary_opensans_regular_ttf_end");
|
||||
extern const uint8_t bin_opensans_semibold[] asm("_binary_opensans_semibold_ttf_start");
|
||||
extern const uint8_t bin_opensans_semibold_end[] asm("_binary_opensans_semibold_ttf_end");
|
||||
extern const uint8_t bin_opensans_bold[] asm("_binary_opensans_bold_ttf_start");
|
||||
extern const uint8_t bin_opensans_bold_end[] asm("_binary_opensans_bold_ttf_end");
|
||||
|
||||
namespace {
|
||||
|
||||
@@ -322,18 +322,18 @@ struct Updater {
|
||||
std::string stage_download(std::string url, std::string hash, std::string name) {
|
||||
std::string out_fn = UPDATE_DIR "/" + util::base_name(url);
|
||||
|
||||
set_progress("下載 " + name + " 中...");
|
||||
set_progress("Downloading " + name + "...");
|
||||
bool r = download_file(url, out_fn);
|
||||
if (!r) {
|
||||
set_error("無法下載 " + name);
|
||||
set_error("failed to download " + name);
|
||||
return "";
|
||||
}
|
||||
|
||||
set_progress("驗證 " + name + " 中...");
|
||||
set_progress("Verifying " + name + "...");
|
||||
std::string fn_hash = sha256_file(out_fn);
|
||||
printf("得到 %s hash: %s\n", name.c_str(), hash.c_str());
|
||||
printf("got %s hash: %s\n", name.c_str(), hash.c_str());
|
||||
if (fn_hash != hash) {
|
||||
set_error(name + " 已損壞");
|
||||
set_error(name + " was corrupt");
|
||||
unlink(out_fn.c_str());
|
||||
return "";
|
||||
}
|
||||
@@ -357,7 +357,7 @@ struct Updater {
|
||||
}
|
||||
|
||||
if (!check_space()) {
|
||||
set_error("您需要至少 2GB 的空間進行升級");
|
||||
set_error("2GB of free space required to update");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -365,7 +365,7 @@ struct Updater {
|
||||
|
||||
const int EON = (access("/EON", F_OK) != -1);
|
||||
|
||||
set_progress("尋找最新的版本...");
|
||||
set_progress("Finding latest version...");
|
||||
std::string manifest_s;
|
||||
if (EON) {
|
||||
manifest_s = download_string(curl, manifest_url);
|
||||
@@ -374,12 +374,12 @@ struct Updater {
|
||||
exit(0);
|
||||
}
|
||||
|
||||
printf("宣示說明: %s\n", manifest_s.c_str());
|
||||
printf("manifest: %s\n", manifest_s.c_str());
|
||||
|
||||
std::string err;
|
||||
auto manifest = json11::Json::parse(manifest_s, err);
|
||||
if (manifest.is_null() || !err.empty()) {
|
||||
set_error("無法載入新的宣示說明");
|
||||
set_error("failed to load update manifest");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -394,7 +394,7 @@ struct Updater {
|
||||
// std::string installer_hash = manifest["installer_hash"].string_value();
|
||||
|
||||
if (ota_url.empty() || ota_hash.empty()) {
|
||||
set_error("錯誤的宣示說明");
|
||||
set_error("invalid update manifest");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -406,12 +406,12 @@ struct Updater {
|
||||
|
||||
std::string recovery_fn;
|
||||
if (recovery_url.empty() || recovery_hash.empty() || recovery_len == 0) {
|
||||
set_progress("跳過 recovery 更新...");
|
||||
set_progress("Skipping recovery flash...");
|
||||
} else {
|
||||
// only download the recovery if it differs from what's flashed
|
||||
set_progress("檢查 recovery...");
|
||||
set_progress("Checking recovery...");
|
||||
std::string existing_recovery_hash = sha256_file(RECOVERY_DEV, recovery_len);
|
||||
printf("目前 recovery 的 hash: %s\n", existing_recovery_hash.c_str());
|
||||
printf("existing recovery hash: %s\n", existing_recovery_hash.c_str());
|
||||
|
||||
if (existing_recovery_hash != recovery_hash) {
|
||||
recovery_fn = stage_download(recovery_url, recovery_hash, "recovery");
|
||||
@@ -441,18 +441,18 @@ struct Updater {
|
||||
|
||||
if (!recovery_fn.empty()) {
|
||||
// flash recovery
|
||||
set_progress("刷新 recovery...");
|
||||
set_progress("Flashing recovery...");
|
||||
|
||||
FILE *flash_file = fopen(recovery_fn.c_str(), "rb");
|
||||
if (!flash_file) {
|
||||
set_error("刷新 recovery 失敗");
|
||||
set_error("failed to flash recovery");
|
||||
return;
|
||||
}
|
||||
|
||||
FILE *recovery_dev = fopen(RECOVERY_DEV, "w+b");
|
||||
if (!recovery_dev) {
|
||||
fclose(flash_file);
|
||||
set_error("刷新 recovery 失敗");
|
||||
set_error("failed to flash recovery");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -467,7 +467,7 @@ struct Updater {
|
||||
if (bytes_read != bytes_written) {
|
||||
fclose(recovery_dev);
|
||||
fclose(flash_file);
|
||||
set_error("刷新 recovery 失敗: 無法寫入");
|
||||
set_error("failed to flash recovery: write failed");
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -475,12 +475,12 @@ struct Updater {
|
||||
fclose(recovery_dev);
|
||||
fclose(flash_file);
|
||||
|
||||
set_progress("驗證新的 recovery...");
|
||||
set_progress("Verifying flash...");
|
||||
std::string new_recovery_hash = sha256_file(RECOVERY_DEV, recovery_len);
|
||||
printf("新的 recovery hash: %s\n", new_recovery_hash.c_str());
|
||||
printf("new recovery hash: %s\n", new_recovery_hash.c_str());
|
||||
|
||||
if (new_recovery_hash != recovery_hash) {
|
||||
set_error("刷新 recovery 失敗");
|
||||
set_error("recovery flash corrupted");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -489,13 +489,13 @@ struct Updater {
|
||||
// write arguments to recovery
|
||||
FILE *cmd_file = fopen(RECOVERY_COMMAND, "wb");
|
||||
if (!cmd_file) {
|
||||
set_error("無法重啟至 recovery");
|
||||
set_error("failed to reboot into recovery");
|
||||
return;
|
||||
}
|
||||
fprintf(cmd_file, "--update_package=%s\n", ota_fn.c_str());
|
||||
fclose(cmd_file);
|
||||
|
||||
set_progress("重新啟動");
|
||||
set_progress("Rebooting");
|
||||
|
||||
// remove the continue.sh so we come back into the setup.
|
||||
// maybe we should go directly into the installer, but what if we don't come back with internet? :/
|
||||
@@ -562,9 +562,9 @@ struct Updater {
|
||||
}
|
||||
|
||||
void draw_battery_screen() {
|
||||
low_battery_title = "電量過低";
|
||||
low_battery_text = "請將您的 EON 充電。當電量達到 35% 時系統將會繼續更新。";
|
||||
low_battery_context = "目前的電量為: " + battery_cap_text + "%";
|
||||
low_battery_title = "Low Battery";
|
||||
low_battery_text = "Please connect EON to your charger. Update will continue once EON battery reaches 35%.";
|
||||
low_battery_context = "Current battery charge: " + battery_cap_text + "%";
|
||||
|
||||
nvgFillColor(vg, nvgRGBA(255,255,255,255));
|
||||
nvgTextAlign(vg, NVG_ALIGN_CENTER | NVG_ALIGN_BASELINE);
|
||||
@@ -601,7 +601,7 @@ struct Updater {
|
||||
int powerprompt_y = 312;
|
||||
nvgFontFace(vg, "opensans_regular");
|
||||
nvgFontSize(vg, 64.0f);
|
||||
nvgText(vg, fb_w/2, 740, "請確保您的 EON 已接上充電器。", NULL);
|
||||
nvgText(vg, fb_w/2, 740, "Ensure EON is connected to power.", NULL);
|
||||
|
||||
NVGpaint paint = nvgBoxGradient(
|
||||
vg, progress_x + 1, progress_y + 1,
|
||||
@@ -635,10 +635,10 @@ struct Updater {
|
||||
|
||||
switch (state) {
|
||||
case CONFIRMATION:
|
||||
draw_ack_screen("NEOS 需要更新。",
|
||||
"您的設備將在點擊繼續後開始更新。\n更新檔約為 1GB 我們建議您先連接至無線網路。\n設備上現有的檔案不會丟失。",
|
||||
"繼續",
|
||||
"連線至無線網路");
|
||||
draw_ack_screen("An update to NEOS is required.",
|
||||
"Your device will now be reset and upgraded. You may want to connect to wifi as download is around 1 GB. Existing data on device should not be lost.",
|
||||
"Continue",
|
||||
"Connect to WiFi");
|
||||
break;
|
||||
case LOW_BATTERY:
|
||||
draw_battery_screen();
|
||||
@@ -647,7 +647,7 @@ struct Updater {
|
||||
draw_progress_screen();
|
||||
break;
|
||||
case ERROR:
|
||||
draw_ack_screen("發生錯誤", (error_text).c_str(), NULL, "重新啟動");
|
||||
draw_ack_screen("There was an error", (error_text).c_str(), NULL, "Reboot");
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
+175
-174
@@ -77,99 +77,99 @@ ALERTS = [
|
||||
|
||||
Alert(
|
||||
"fcw",
|
||||
"剎車!",
|
||||
"有碰撞的風險",
|
||||
"刹车!",
|
||||
"有碰撞的风险",
|
||||
AlertStatus.critical, AlertSize.full,
|
||||
Priority.HIGHEST, VisualAlert.fcw, AudibleAlert.chimeWarningRepeat, 1., 2., 2.),
|
||||
|
||||
Alert(
|
||||
"fcwStock",
|
||||
"馬上剎車!",
|
||||
"有碰撞風險",
|
||||
"BRAKE!",
|
||||
"Risk of Collision",
|
||||
AlertStatus.critical, AlertSize.full,
|
||||
Priority.HIGHEST, VisualAlert.fcw, AudibleAlert.none, 1., 2., 2.), # no EON chime for stock FCW
|
||||
|
||||
Alert(
|
||||
"steerSaturated",
|
||||
"接管控制",
|
||||
"彎道超過方向盤轉向限制",
|
||||
"弯道超过方向盘转向限制",
|
||||
AlertStatus.userPrompt, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.steerRequired, AudibleAlert.chimePrompt, 1., 2., 3.),
|
||||
|
||||
Alert(
|
||||
"steerTempUnavailable",
|
||||
"接管控制",
|
||||
"轉向控制暫時失效",
|
||||
"转向控制暂时失效",
|
||||
AlertStatus.userPrompt, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.steerRequired, AudibleAlert.chimeWarning1, .4, 2., 3.),
|
||||
|
||||
Alert(
|
||||
"steerTempUnavailableMute",
|
||||
"接管控制",
|
||||
"轉向控制暫時失效",
|
||||
"转向控制暂时失效",
|
||||
AlertStatus.userPrompt, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.none, .2, .2, .2),
|
||||
|
||||
Alert(
|
||||
"preDriverDistracted",
|
||||
"注意路況:駕駛分心",
|
||||
"注意路况:驾驶出现分心",
|
||||
"",
|
||||
AlertStatus.normal, AlertSize.small,
|
||||
Priority.LOW, VisualAlert.steerRequired, AudibleAlert.none, .0, .1, .1, alert_rate=0.75),
|
||||
|
||||
Alert(
|
||||
"promptDriverDistracted",
|
||||
"注意路況",
|
||||
"駕駛分心",
|
||||
"注意路况",
|
||||
"驾驶出现分心",
|
||||
AlertStatus.userPrompt, AlertSize.mid,
|
||||
Priority.MID, VisualAlert.steerRequired, AudibleAlert.chimeWarning2, .1, .1, .1),
|
||||
|
||||
Alert(
|
||||
"driverDistracted",
|
||||
"立即解除",
|
||||
"駕駛分心",
|
||||
"驾驶出现分心",
|
||||
AlertStatus.critical, AlertSize.full,
|
||||
Priority.HIGH, VisualAlert.steerRequired, AudibleAlert.chimeWarningRepeat, .1, .1, .1),
|
||||
|
||||
Alert(
|
||||
"preDriverUnresponsive",
|
||||
"請觸碰方向盤:無駕駛監控",
|
||||
"触碰方向盘:无驾驶监控",
|
||||
"",
|
||||
AlertStatus.normal, AlertSize.small,
|
||||
Priority.LOW, VisualAlert.steerRequired, AudibleAlert.none, .0, .1, .1, alert_rate=0.75),
|
||||
|
||||
Alert(
|
||||
"promptDriverUnresponsive",
|
||||
"請觸碰方向盤",
|
||||
"駕駛沒有反應",
|
||||
"触碰方向盘",
|
||||
"驾驶没有反应",
|
||||
AlertStatus.userPrompt, AlertSize.mid,
|
||||
Priority.MID, VisualAlert.steerRequired, AudibleAlert.chimeWarning2, .1, .1, .1),
|
||||
|
||||
Alert(
|
||||
"driverUnresponsive",
|
||||
"立即解除",
|
||||
"駕駛沒有反應",
|
||||
"驾驶没有反应",
|
||||
AlertStatus.critical, AlertSize.full,
|
||||
Priority.HIGH, VisualAlert.steerRequired, AudibleAlert.chimeWarningRepeat, .1, .1, .1),
|
||||
|
||||
Alert(
|
||||
"driverMonitorLowAcc",
|
||||
"請檢查駕駛面部的可見度",
|
||||
"駕駛監控模型輸出不明確",
|
||||
"检查驾驶面部能见度",
|
||||
"驾驶监控模型输出不明确",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.steerRequired, AudibleAlert.none, .4, 0., 1.),
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.none, .4, 0., 4.),
|
||||
|
||||
Alert(
|
||||
"geofence",
|
||||
"DISENGAGEMENT REQUIRED",
|
||||
"不在地理圍欄區域之內",
|
||||
"请求解除",
|
||||
"不在地理围栏区域之内",
|
||||
AlertStatus.userPrompt, AlertSize.mid,
|
||||
Priority.HIGH, VisualAlert.steerRequired, AudibleAlert.chimeWarningRepeat, .1, .1, .1),
|
||||
|
||||
Alert(
|
||||
"startup",
|
||||
"隨時準備好接管",
|
||||
"請您將手放在方向盤上並持續注意路況",
|
||||
"随时准备好接管",
|
||||
"请您将手放在方向盘上并持续注意路况",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOWER, VisualAlert.none, AudibleAlert.none, 0., 0., 15.),
|
||||
|
||||
@@ -182,169 +182,169 @@ ALERTS = [
|
||||
|
||||
Alert(
|
||||
"startupNoControl",
|
||||
"行車記錄模式",
|
||||
"請您將手放在方向盤上並持續注意路況",
|
||||
"硬扯记录模式",
|
||||
"请您将手放在方向盘上并持续注意路况",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOWER, VisualAlert.none, AudibleAlert.none, 0., 0., 15.),
|
||||
|
||||
Alert(
|
||||
"startupNoCar",
|
||||
"行車記錄模式 (尚未支援車種)",
|
||||
"請您將手放在方向盤上並持續注意路況",
|
||||
"行车记录模式(为支持的车型)",
|
||||
"请您将手放在方向盘上并持续注意路况",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOWER, VisualAlert.none, AudibleAlert.none, 0., 0., 15.),
|
||||
|
||||
Alert(
|
||||
"ethicalDilemma",
|
||||
"即刻接管控制",
|
||||
"Ethical Dilemma Detected",
|
||||
"即可接管控制",
|
||||
"检测到困难",
|
||||
AlertStatus.critical, AlertSize.full,
|
||||
Priority.HIGHEST, VisualAlert.steerRequired, AudibleAlert.chimeWarningRepeat, 1., 3., 3.),
|
||||
|
||||
Alert(
|
||||
"steerTempUnavailableNoEntry",
|
||||
"無法使用 dragonpilot",
|
||||
"轉向控制暫時失效",
|
||||
"无法使用 dragonpilot",
|
||||
"转向控制暂时失效",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 0., 3.),
|
||||
|
||||
Alert(
|
||||
"manualRestart",
|
||||
"接管控制",
|
||||
"請自行恢復駕駛",
|
||||
"请自行恢复驾驶",
|
||||
AlertStatus.userPrompt, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.none, 0., 0., .2),
|
||||
|
||||
Alert(
|
||||
"resumeRequired",
|
||||
"已停止",
|
||||
"請按 RES 繼續",
|
||||
"请按RES继续",
|
||||
AlertStatus.userPrompt, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.none, 0., 0., .2),
|
||||
|
||||
Alert(
|
||||
"belowSteerSpeed",
|
||||
"接管控制",
|
||||
"轉向控制暫時失效,車速低於 ",
|
||||
"转向控制暂时失效,车速低于",
|
||||
AlertStatus.userPrompt, AlertSize.mid,
|
||||
Priority.MID, VisualAlert.steerRequired, AudibleAlert.none, 0., 0.4, .3),
|
||||
|
||||
Alert(
|
||||
"debugAlert",
|
||||
"DEBUG ALERT",
|
||||
"DEBUG提示",
|
||||
"",
|
||||
AlertStatus.userPrompt, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.none, .1, .1, .1),
|
||||
Alert(
|
||||
"preLaneChangeLeft",
|
||||
"請往左打方向盤切換車道",
|
||||
"請注意其它車輛",
|
||||
"往左打方向盘开始切换车道",
|
||||
"请注意其他车辆",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.steerRequired, AudibleAlert.none, .0, .1, .1, alert_rate=0.75),
|
||||
|
||||
Alert(
|
||||
"preLaneChangeRight",
|
||||
"請往右打方向盤切換車道",
|
||||
"請注意其它車輛",
|
||||
"往右打方向盘开始切换车道",
|
||||
"请注意其他车辆",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.steerRequired, AudibleAlert.none, .0, .1, .1, alert_rate=0.75),
|
||||
|
||||
Alert(
|
||||
"laneChange",
|
||||
"切換車道中",
|
||||
"請注意其它車輛",
|
||||
"切换车道中",
|
||||
"请注意其他车辆",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.steerRequired, AudibleAlert.none, .0, .1, .1),
|
||||
|
||||
Alert(
|
||||
"posenetInvalid",
|
||||
"接管控制",
|
||||
"視覺模型輸出不明確",
|
||||
"视觉模型输出不明确",
|
||||
AlertStatus.userPrompt, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.steerRequired, AudibleAlert.chimeWarning1, .4, 2., 3.),
|
||||
|
||||
# Non-entry only alerts
|
||||
Alert(
|
||||
"wrongCarModeNoEntry",
|
||||
"無法使用 dragonpilot",
|
||||
"主開關關閉",
|
||||
"无法使用 dragonpilot",
|
||||
"主开关关闭",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 0., 3.),
|
||||
|
||||
Alert(
|
||||
"dataNeededNoEntry",
|
||||
"無法使用 dragonpilot",
|
||||
"需要更多的數據來協助校準,請將行車記錄上傳後再試",
|
||||
"无法使用 dragonpilot",
|
||||
"需要更多的数据来协助校准,请将行车记录上传后再试",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 0., 3.),
|
||||
|
||||
Alert(
|
||||
"outOfSpaceNoEntry",
|
||||
"無法使用 dragonpilot",
|
||||
"儲存空間不足",
|
||||
"无法使用 dragonpilot",
|
||||
"储存空间不足",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 0., 3.),
|
||||
|
||||
Alert(
|
||||
"pedalPressedNoEntry",
|
||||
"無法使用 dragonpilot",
|
||||
"Pedal Pressed During Attempt",
|
||||
"无法使用 dragonpilot",
|
||||
"试踩踏板",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, "brakePressed", AudibleAlert.chimeError, .4, 2., 3.),
|
||||
|
||||
Alert(
|
||||
"speedTooLowNoEntry",
|
||||
"無法使用 dragonpilot",
|
||||
"車速過慢",
|
||||
"无法使用 dragonpilot",
|
||||
"车速过慢",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.),
|
||||
|
||||
Alert(
|
||||
"brakeHoldNoEntry",
|
||||
"無法使用 dragonpilot",
|
||||
"駐車煞車已啟用",
|
||||
"无法使用 dragonpilot",
|
||||
"驻车刹车已启用",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.),
|
||||
|
||||
Alert(
|
||||
"parkBrakeNoEntry",
|
||||
"無法使用 dragonpilot",
|
||||
"電子駐車已啟動",
|
||||
"无法使用 dragonpilot",
|
||||
"电车驻车已启动",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.),
|
||||
|
||||
Alert(
|
||||
"lowSpeedLockoutNoEntry",
|
||||
"無法使用 dragonpilot",
|
||||
"巡航系統錯誤:請重新發動車子",
|
||||
"无法使用 dragonpilot",
|
||||
"巡航系统错误,请重新发动车辆",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.),
|
||||
|
||||
Alert(
|
||||
"lowBatteryNoEntry",
|
||||
"無法使用 dragonpilot",
|
||||
"電池電量過低",
|
||||
"无法使用 dragonpilot",
|
||||
"电池电量过低",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.),
|
||||
|
||||
Alert(
|
||||
"sensorDataInvalidNoEntry",
|
||||
"無法使用 dragonpilot",
|
||||
"沒有收到任何來自裝置傳感器的資料",
|
||||
"无法使用 dragonpilot",
|
||||
"没有收到任何来自传感器的数据",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.),
|
||||
|
||||
Alert(
|
||||
"soundsUnavailableNoEntry",
|
||||
"無法使用 dragonpilot",
|
||||
"找不到音效裝置",
|
||||
"无法使用 dragonpilot",
|
||||
"找不到音效装置",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.),
|
||||
|
||||
Alert(
|
||||
"tooDistractedNoEntry",
|
||||
"無法使用 dragonpilot",
|
||||
"駕駛分心次數過高",
|
||||
"无法使用 dragonpilot",
|
||||
"注意力高度不集中",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.),
|
||||
|
||||
@@ -352,84 +352,84 @@ ALERTS = [
|
||||
Alert(
|
||||
"overheat",
|
||||
"即刻接管控制",
|
||||
"系統過熱",
|
||||
"系统过热",
|
||||
AlertStatus.critical, AlertSize.full,
|
||||
Priority.MID, VisualAlert.steerRequired, AudibleAlert.chimeWarningRepeat, .1, 2., 2.),
|
||||
|
||||
Alert(
|
||||
"wrongGear",
|
||||
"即刻接管控制",
|
||||
"檔位不在 D 檔",
|
||||
"档位不在D档",
|
||||
AlertStatus.critical, AlertSize.full,
|
||||
Priority.MID, VisualAlert.steerRequired, AudibleAlert.chimeWarningRepeat, .1, 2., 2.),
|
||||
|
||||
Alert(
|
||||
"calibrationInvalid",
|
||||
"即刻接管控制",
|
||||
"校準無效:請將裝置放於新的位置並重新校準",
|
||||
"校准无效:请将传感器放于新的位置并重新校准",
|
||||
AlertStatus.critical, AlertSize.full,
|
||||
Priority.MID, VisualAlert.steerRequired, AudibleAlert.chimeWarningRepeat, .1, 2., 2.),
|
||||
|
||||
Alert(
|
||||
"calibrationIncomplete",
|
||||
"即刻接管控制",
|
||||
"正在校準相機中",
|
||||
"正在校准相机中",
|
||||
AlertStatus.critical, AlertSize.full,
|
||||
Priority.MID, VisualAlert.steerRequired, AudibleAlert.chimeWarningRepeat, .1, 2., 2.),
|
||||
|
||||
Alert(
|
||||
"doorOpen",
|
||||
"即刻接管控制",
|
||||
"車門開啟",
|
||||
"车门开启",
|
||||
AlertStatus.critical, AlertSize.full,
|
||||
Priority.MID, VisualAlert.steerRequired, AudibleAlert.chimeWarningRepeat, .1, 2., 2.),
|
||||
|
||||
Alert(
|
||||
"seatbeltNotLatched",
|
||||
"即刻接管控制",
|
||||
"安全帶未繫",
|
||||
"未系安全带",
|
||||
AlertStatus.critical, AlertSize.full,
|
||||
Priority.MID, VisualAlert.steerRequired, AudibleAlert.chimeWarningRepeat, .1, 2., 2.),
|
||||
|
||||
Alert(
|
||||
"espDisabled",
|
||||
"即刻接管控制",
|
||||
"ESP 關閉",
|
||||
"ESP关闭",
|
||||
AlertStatus.critical, AlertSize.full,
|
||||
Priority.MID, VisualAlert.steerRequired, AudibleAlert.chimeWarningRepeat, .1, 2., 2.),
|
||||
|
||||
Alert(
|
||||
"lowBattery",
|
||||
"即刻接管控制",
|
||||
"電池電量過低",
|
||||
"电池电量过低",
|
||||
AlertStatus.critical, AlertSize.full,
|
||||
Priority.MID, VisualAlert.steerRequired, AudibleAlert.chimeWarningRepeat, .1, 2., 2.),
|
||||
|
||||
Alert(
|
||||
"commIssue",
|
||||
"即刻接管控制",
|
||||
"雷達訊號錯誤:請重新發動車子",
|
||||
"雷达讯号错误:请重新发动车辆",
|
||||
AlertStatus.critical, AlertSize.full,
|
||||
Priority.MID, VisualAlert.steerRequired, AudibleAlert.chimeWarningRepeat, .1, 2., 2.),
|
||||
|
||||
Alert(
|
||||
"radarCommIssue",
|
||||
"即刻接管控制",
|
||||
"雷達通訊出現問題",
|
||||
AlertStatus.critical, AlertSize.full,
|
||||
Priority.MID, VisualAlert.steerRequired, AudibleAlert.chimeWarningRepeat, .1, 2., 2.),
|
||||
|
||||
Alert(
|
||||
"radarCanError",
|
||||
"即刻接管控制",
|
||||
"雷達訊號錯誤:請重新發動車子",
|
||||
"TAKE CONTROL IMMEDIATELY",
|
||||
"Radar Communication Issue",
|
||||
AlertStatus.critical, AlertSize.full,
|
||||
Priority.MID, VisualAlert.steerRequired, AudibleAlert.chimeWarningRepeat, .1, 2., 2.),
|
||||
|
||||
Alert(
|
||||
"radarFault",
|
||||
"即刻接管控制",
|
||||
"AI 模型錯誤:請檢查網路連線",
|
||||
"雷达讯号错误:请重新发动车辆",
|
||||
AlertStatus.critical, AlertSize.full,
|
||||
Priority.MID, VisualAlert.steerRequired, AudibleAlert.chimeWarningRepeat, .1, 2., 2.),
|
||||
|
||||
Alert(
|
||||
"radarFault",
|
||||
"即刻接管控制",
|
||||
"雷达讯号错误:请重新发动车辆",
|
||||
AlertStatus.critical, AlertSize.full,
|
||||
Priority.MID, VisualAlert.steerRequired, AudibleAlert.chimeWarningRepeat, .1, 2., 2.),
|
||||
|
||||
@@ -437,7 +437,7 @@ ALERTS = [
|
||||
Alert(
|
||||
"lowMemory",
|
||||
"即刻接管控制",
|
||||
"記憶體不足:請重啟您的裝置",
|
||||
"内存过低: 请重启装置",
|
||||
AlertStatus.critical, AlertSize.full,
|
||||
Priority.MID, VisualAlert.steerRequired, AudibleAlert.chimeWarningRepeat, .1, 2., 2.),
|
||||
|
||||
@@ -445,7 +445,7 @@ ALERTS = [
|
||||
Alert(
|
||||
"controlsFailed",
|
||||
"即刻接管控制",
|
||||
"控制發生錯誤",
|
||||
"控制错误",
|
||||
AlertStatus.critical, AlertSize.full,
|
||||
Priority.HIGHEST, VisualAlert.steerRequired, AudibleAlert.chimeWarningRepeat, 2.2, 3., 4.),
|
||||
|
||||
@@ -459,49 +459,49 @@ ALERTS = [
|
||||
Alert(
|
||||
"canError",
|
||||
"即刻接管控制",
|
||||
"CAN 訊號錯誤:請檢查接線",
|
||||
"CAN错误:请检查连接",
|
||||
AlertStatus.critical, AlertSize.full,
|
||||
Priority.HIGHEST, VisualAlert.steerRequired, AudibleAlert.chimeWarningRepeat, 2.2, 3., 4.),
|
||||
|
||||
Alert(
|
||||
"steerUnavailable",
|
||||
"即刻接管控制",
|
||||
"LKAS 錯誤:請重新發動車子",
|
||||
"LKAS错误:请重新发动车辆",
|
||||
AlertStatus.critical, AlertSize.full,
|
||||
Priority.HIGHEST, VisualAlert.steerRequired, AudibleAlert.chimeWarningRepeat, 2.2, 3., 4.),
|
||||
|
||||
Alert(
|
||||
"brakeUnavailable",
|
||||
"即刻接管控制",
|
||||
"巡航系統錯誤:請重新發動車子",
|
||||
"巡航系统错误:请重新发动车辆",
|
||||
AlertStatus.critical, AlertSize.full,
|
||||
Priority.HIGHEST, VisualAlert.steerRequired, AudibleAlert.chimeWarningRepeat, 2.2, 3., 4.),
|
||||
|
||||
Alert(
|
||||
"gasUnavailable",
|
||||
"即刻接管控制",
|
||||
"油門錯誤:請重新發動車子",
|
||||
"油门错误:请重新发动车辆",
|
||||
AlertStatus.critical, AlertSize.full,
|
||||
Priority.HIGHEST, VisualAlert.steerRequired, AudibleAlert.chimeWarningRepeat, 2.2, 3., 4.),
|
||||
|
||||
Alert(
|
||||
"reverseGear",
|
||||
"即刻接管控制",
|
||||
"切換至倒車檔",
|
||||
"切换至倒车档",
|
||||
AlertStatus.critical, AlertSize.full,
|
||||
Priority.HIGHEST, VisualAlert.steerRequired, AudibleAlert.chimeWarningRepeat, 2.2, 3., 4.),
|
||||
|
||||
Alert(
|
||||
"cruiseDisabled",
|
||||
"即刻接管控制",
|
||||
"巡航系統關閉",
|
||||
"巡航系统关闭",
|
||||
AlertStatus.critical, AlertSize.full,
|
||||
Priority.HIGHEST, VisualAlert.steerRequired, AudibleAlert.chimeWarningRepeat, 2.2, 3., 4.),
|
||||
|
||||
Alert(
|
||||
"plannerError",
|
||||
"即刻接管控制",
|
||||
"Planner Solution 錯誤",
|
||||
"Planner Solution 错误",
|
||||
AlertStatus.critical, AlertSize.full,
|
||||
Priority.HIGHEST, VisualAlert.steerRequired, AudibleAlert.chimeWarningRepeat, 2.2, 3., 4.),
|
||||
|
||||
@@ -509,267 +509,267 @@ ALERTS = [
|
||||
Alert(
|
||||
"noTarget",
|
||||
"dragonpilot 已取消",
|
||||
"沒有偵測到前車",
|
||||
"没有侦测到前车",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.HIGH, VisualAlert.none, AudibleAlert.chimeDisengage, .4, 2., 3.),
|
||||
|
||||
Alert(
|
||||
"speedTooLow",
|
||||
"dragonpilot 已取消",
|
||||
"車速過慢",
|
||||
"车速过慢",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.HIGH, VisualAlert.none, AudibleAlert.chimeDisengage, .4, 2., 3.),
|
||||
|
||||
# Cancellation alerts causing non-entry
|
||||
Alert(
|
||||
"overheatNoEntry",
|
||||
"無法使用 dragonpilot",
|
||||
"系統過熱",
|
||||
"无法使用 dragonpilot",
|
||||
"系统过热",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.),
|
||||
|
||||
Alert(
|
||||
"wrongGearNoEntry",
|
||||
"無法使用 dragonpilot",
|
||||
"車子不在 D 檔",
|
||||
"无法使用 dragonpilot",
|
||||
"车辆不在D档",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.),
|
||||
|
||||
Alert(
|
||||
"calibrationInvalidNoEntry",
|
||||
"無法使用 dragonpilot",
|
||||
"校準無效:請將裝置放於新的位置並重新校準",
|
||||
"无法使用 dragonpilot",
|
||||
"校准无效:请将传感器放于新的位置并重新校准",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.),
|
||||
|
||||
Alert(
|
||||
"calibrationIncompleteNoEntry",
|
||||
"無法使用 dragonpilot",
|
||||
"正在校準相機中",
|
||||
"无法使用 dragonpilot",
|
||||
"正在校准相机中",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.),
|
||||
|
||||
Alert(
|
||||
"doorOpenNoEntry",
|
||||
"無法使用 dragonpilot",
|
||||
"車門未關",
|
||||
"无法使用 dragonpilot",
|
||||
"车门开启",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.),
|
||||
|
||||
Alert(
|
||||
"seatbeltNotLatchedNoEntry",
|
||||
"無法使用 dragonpilot",
|
||||
"安全帶未繫",
|
||||
"无法使用 dragonpilot",
|
||||
"未系安全带",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.),
|
||||
|
||||
Alert(
|
||||
"espDisabledNoEntry",
|
||||
"無法使用 dragonpilot",
|
||||
"ESP 關閉",
|
||||
"无法使用 dragonpilot",
|
||||
"ESP关闭",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.),
|
||||
|
||||
Alert(
|
||||
"geofenceNoEntry",
|
||||
"無法使用 dragonpilot",
|
||||
"不在地理圍欄區域之內",
|
||||
"无法使用 dragonpilot",
|
||||
"不在地理围栏区域之内",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.MID, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.),
|
||||
|
||||
Alert(
|
||||
"radarCanErrorNoEntry",
|
||||
"無法使用 dragonpilot",
|
||||
"雷達訊號錯誤:請重新發動車子",
|
||||
"无法使用 dragonpilot",
|
||||
"雷达信号错误:请重新发动车辆",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.),
|
||||
|
||||
Alert(
|
||||
"radarFaultNoEntry",
|
||||
"無法使用 dragonpilot",
|
||||
"雷達訊號錯誤:請重新發動車子",
|
||||
"无法使用 dragonpilot",
|
||||
"雷达信号错误:请重新发动车辆",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.),
|
||||
|
||||
Alert(
|
||||
"posenetInvalidNoEntry",
|
||||
"無法使用 dragonpilot",
|
||||
"視覺模型輸出不明確",
|
||||
"无法使用 dragonpilot",
|
||||
"视觉模型输出不明确",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.),
|
||||
|
||||
Alert(
|
||||
"controlsFailedNoEntry",
|
||||
"無法使用 dragonpilot",
|
||||
"控制發生錯誤",
|
||||
"无法使用 dragonpilot",
|
||||
"控制发生错误",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.),
|
||||
|
||||
Alert(
|
||||
"canErrorNoEntry",
|
||||
"無法使用 dragonpilot",
|
||||
"CAN 訊號錯誤:請檢查接線",
|
||||
"无法使用 dragonpilot",
|
||||
"CAN错误:请检查连接",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.),
|
||||
|
||||
Alert(
|
||||
"steerUnavailableNoEntry",
|
||||
"無法使用 dragonpilot",
|
||||
"LKAS 錯誤:請重新發動車子",
|
||||
"无法使用 dragonpilot",
|
||||
"LKAS错误: 请重新发动车辆",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.),
|
||||
|
||||
Alert(
|
||||
"brakeUnavailableNoEntry",
|
||||
"無法使用 dragonpilot",
|
||||
"巡航系統錯誤:請重新發動車子",
|
||||
"无法使用 dragonpilot",
|
||||
"巡航系统错误:请重新发动车辆",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.),
|
||||
|
||||
Alert(
|
||||
"gasUnavailableNoEntry",
|
||||
"無法使用 dragonpilot",
|
||||
"油門錯誤:請重新發動車子",
|
||||
"无法使用 dragonpilot",
|
||||
"油门错误:请重新发动车辆",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.),
|
||||
|
||||
Alert(
|
||||
"reverseGearNoEntry",
|
||||
"無法使用 dragonpilot",
|
||||
"切換至倒車檔",
|
||||
"无法使用 dragonpilot",
|
||||
"切换至倒车档",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.),
|
||||
|
||||
Alert(
|
||||
"cruiseDisabledNoEntry",
|
||||
"無法使用 dragonpilot",
|
||||
"巡航系統關閉",
|
||||
"无法使用 dragonpilot",
|
||||
"巡航系统关闭",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.),
|
||||
|
||||
Alert(
|
||||
"noTargetNoEntry",
|
||||
"無法使用 dragonpilot",
|
||||
"沒有偵測到前車",
|
||||
"无法使用 dragonpilot",
|
||||
"没有侦测到前车",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.),
|
||||
|
||||
Alert(
|
||||
"plannerErrorNoEntry",
|
||||
"無法使用 dragonpilot",
|
||||
"Planner Solution 錯誤",
|
||||
"无法使用 dragonpilot",
|
||||
"Planner Solution 错误",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.),
|
||||
|
||||
Alert(
|
||||
"commIssueNoEntry",
|
||||
"無法使用 dragonpilot",
|
||||
"行程出現通訊問題",
|
||||
"无法使用 dragonpilot",
|
||||
"进程通讯异常",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeDisengage, .4, 2., 3.),
|
||||
|
||||
Alert(
|
||||
"radarCommIssueNoEntry",
|
||||
"無法使用 dragonpilot",
|
||||
"雷達通訊出現問題",
|
||||
"无法使用 dragonpilot",
|
||||
"雷达通讯异常",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeDisengage, .4, 2., 3.),
|
||||
|
||||
Alert(
|
||||
"internetConnectivityNeededNoEntry",
|
||||
"無法使用 dragonpilot",
|
||||
"請連接網路",
|
||||
"无法使用 dragonpilot",
|
||||
"需要连接到网络",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeDisengage, .4, 2., 3.),
|
||||
|
||||
Alert(
|
||||
"lowMemoryNoEntry",
|
||||
"無法使用 dragonpilot",
|
||||
"記憶體不足:請重啟您的裝置",
|
||||
"无法使用 dragonpilot",
|
||||
"内存过低: 请重启装置",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeDisengage, .4, 2., 3.),
|
||||
|
||||
# permanent alerts
|
||||
Alert(
|
||||
"steerUnavailablePermanent",
|
||||
"LKAS 錯誤:請重新發動車子",
|
||||
"LKAS错误: 请重新发动车辆",
|
||||
"",
|
||||
AlertStatus.normal, AlertSize.small,
|
||||
Priority.LOWER, VisualAlert.none, AudibleAlert.none, 0., 0., .2),
|
||||
|
||||
Alert(
|
||||
"brakeUnavailablePermanent",
|
||||
"巡航系統錯誤:請重新發動車子",
|
||||
"巡航系统错误:请重新发动车辆",
|
||||
"",
|
||||
AlertStatus.normal, AlertSize.small,
|
||||
Priority.LOWER, VisualAlert.none, AudibleAlert.none, 0., 0., .2),
|
||||
|
||||
Alert(
|
||||
"lowSpeedLockoutPermanent",
|
||||
"巡航系統錯誤:請重新發動車子",
|
||||
"巡航系统错误:请重新发动车辆",
|
||||
"",
|
||||
AlertStatus.normal, AlertSize.small,
|
||||
Priority.LOWER, VisualAlert.none, AudibleAlert.none, 0., 0., .2),
|
||||
|
||||
Alert(
|
||||
"calibrationIncompletePermanent",
|
||||
"正在校準相機中:",
|
||||
"車速請高於 ",
|
||||
"正在校准相机中 ",
|
||||
"车速请高于",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOWEST, VisualAlert.none, AudibleAlert.none, 0., 0., .2),
|
||||
|
||||
Alert(
|
||||
"invalidGiraffeToyotaPermanent",
|
||||
"未支援的 Giraffe 設置",
|
||||
"請查閱 comma.ai/tg",
|
||||
"不支持的 Giraffe 配置",
|
||||
"请查看 comma.ai/tg",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOWER, VisualAlert.none, AudibleAlert.none, 0., 0., .2),
|
||||
|
||||
Alert(
|
||||
"internetConnectivityNeededPermanent",
|
||||
"請連接網路",
|
||||
"需檢查更新後才能啟用",
|
||||
"需要连接到网络",
|
||||
"检查更新后才能启用",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOWER, VisualAlert.none, AudibleAlert.none, 0., 0., .2),
|
||||
|
||||
Alert(
|
||||
"communityFeatureDisallowedPermanent",
|
||||
"偵測到社群開發功能",
|
||||
"請至開發人員設定裡啟用社群開發功能",
|
||||
"检测到社区功能",
|
||||
"请在开发者设置中启用社区功能",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.none, 0., 0., .2), # LOW priority to overcome Cruise Error
|
||||
|
||||
Alert(
|
||||
"sensorDataInvalidPermanent",
|
||||
"沒有收到任何來自 EON 傳感器的資料",
|
||||
"請重啟您的裝置",
|
||||
"没有收到任何来自传感器的数据",
|
||||
"请重启您的装置",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOWER, VisualAlert.none, AudibleAlert.none, 0., 0., .2),
|
||||
|
||||
Alert(
|
||||
"soundsUnavailablePermanent",
|
||||
"找不到音效裝置",
|
||||
"請重啟您的裝置",
|
||||
"找不到音效装置",
|
||||
"请重启您的装置",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOWER, VisualAlert.none, AudibleAlert.none, 0., 0., .2),
|
||||
|
||||
Alert(
|
||||
"lowMemoryPermanent",
|
||||
"記憶體嚴重不足",
|
||||
"請重啟您的裝置",
|
||||
"内存严重不足",
|
||||
"请重启您的装置",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOWER, VisualAlert.none, AudibleAlert.none, 0., 0., .2),
|
||||
|
||||
Alert(
|
||||
"carUnrecognizedPermanent",
|
||||
"行車記錄模式",
|
||||
"無法辨識您的車款",
|
||||
"Dashcam Mode",
|
||||
"Car Unrecognized",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOWER, VisualAlert.none, AudibleAlert.none, 0., 0., .2),
|
||||
|
||||
Alert(
|
||||
"vehicleModelInvalid",
|
||||
"車子參數識別失敗",
|
||||
"车辆参数识别失败",
|
||||
"",
|
||||
AlertStatus.normal, AlertSize.small,
|
||||
Priority.LOWEST, VisualAlert.steerRequired, AudibleAlert.none, .0, .0, .1),
|
||||
@@ -778,53 +778,54 @@ ALERTS = [
|
||||
Alert(
|
||||
"ldwPermanent",
|
||||
"接管控制",
|
||||
"偵測到已偏離車道",
|
||||
"检测到车道偏离",
|
||||
AlertStatus.userPrompt, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.steerRequired, AudibleAlert.chimePrompt, 1., 2., 3.),
|
||||
# dragonpilot
|
||||
Alert(
|
||||
"manualSteeringRequired",
|
||||
"請接管方向盤:車道維持關閉",
|
||||
"接管控制: 车道保持关闭",
|
||||
"",
|
||||
AlertStatus.normal, AlertSize.small,
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.none, .0, .1, .1, alert_rate=0.25),
|
||||
|
||||
Alert(
|
||||
"manualSteeringRequiredBlinkersOn",
|
||||
"請接管方向盤:方向燈開啟",
|
||||
"接管控制: 转向灯开启",
|
||||
"",
|
||||
AlertStatus.normal, AlertSize.small,
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.none, .0, .1, .1, alert_rate=0.25),
|
||||
Alert(
|
||||
"leadCarMoving",
|
||||
"前車移動中,請開始加速",
|
||||
"前车移动中,请开始加速",
|
||||
"",
|
||||
AlertStatus.userPrompt, AlertSize.small,
|
||||
Priority.LOW, VisualAlert.steerRequired, AudibleAlert.chimeWarning2, .1, .1, .1),
|
||||
Alert(
|
||||
"leadCarDetected",
|
||||
"偵測到前車,等待中",
|
||||
"侦测到前车,等待中",
|
||||
"",
|
||||
AlertStatus.normal, AlertSize.small,
|
||||
Priority.LOW, VisualAlert.none, AudibleAlert.none, .0, .1, .1, alert_rate=0.25),
|
||||
Alert(
|
||||
"preAutoLaneChangeLeft",
|
||||
"將在三秒後自動切至左車道",
|
||||
"請注意其它車輛",
|
||||
"将在三秒后自动切入左道",
|
||||
"请注意其他车辆",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.steerRequired, AudibleAlert.chimeWarning2, .1, .1, .1, alert_rate=0.75),
|
||||
|
||||
Alert(
|
||||
"preAutoLaneChangeRight",
|
||||
"將在三秒後自動切至右車道",
|
||||
"請注意其它車輛",
|
||||
"将在三秒后自动切入入右道",
|
||||
"请注意其他车辆",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.steerRequired, AudibleAlert.chimeWarning2, .1, .1, .1, alert_rate=0.75),
|
||||
|
||||
Alert(
|
||||
"autoLaneChange",
|
||||
"切換車道中",
|
||||
"請注意其它車輛",
|
||||
"切换车道中",
|
||||
"请注意其他车辆",
|
||||
AlertStatus.normal, AlertSize.mid,
|
||||
Priority.LOW, VisualAlert.steerRequired, AudibleAlert.chimeWarning2, .1, .1, .1),
|
||||
|
||||
]
|
||||
|
||||
@@ -1,31 +1,31 @@
|
||||
{
|
||||
"Offroad_ChargeDisabled": {
|
||||
"text": "因車輛已熄火超過 30 小時,系統將會停止為 EON 充電,再次發動車輛後 EON 會恢復充電",
|
||||
"text": "车辆熄火 30 小时后将停止为 EON 充电,再次启动车辆后,EON 恢复充电。",
|
||||
"severity": 0
|
||||
},
|
||||
"Offroad_TemperatureTooHigh": {
|
||||
"text": "裝置溫度過高,系統暫時無法啟用。",
|
||||
"text": "装置温度过高,系统暂不可用。",
|
||||
"severity": 1
|
||||
},
|
||||
"Offroad_ConnectivityNeededPrompt": {
|
||||
"text": "目前 dragonpilot 無法啟用,請馬上連網檢查更新。",
|
||||
"text": "请立即连网检查更新,否则 dragonpilot 将不可用。",
|
||||
"severity": 0,
|
||||
"_comment": "Append the number of days at the end of the text"
|
||||
},
|
||||
"Offroad_ConnectivityNeeded": {
|
||||
"text": "請連網檢查更新。不然 dragonpilot 將無法啟用。",
|
||||
"text": "请连网并检查更新,连网更新后 dragonpilot 才能正常使用。",
|
||||
"severity": 1
|
||||
},
|
||||
"Offroad_PandaFirmwareMismatch": {
|
||||
"text": "Panda 的韌體版本出現異常,系統無法啟用。請重啟您的裝置以刷新 Panda 韌體。",
|
||||
"text": "Panda 固件版本异常,系统无法启用,请重启装置并更新 Panda 固件。",
|
||||
"severity": 1
|
||||
},
|
||||
"Offroad_InvalidTime": {
|
||||
"text": "系統日期/時間設定錯誤,系統無法啟用。請連上網設定的時間。",
|
||||
"text": "系统时间设置错误,系统无法启用。请连网更新时间设置。",
|
||||
"severity": 1
|
||||
},
|
||||
"Offroad_IsTakingSnapshot": {
|
||||
"text": "相機拍攝中,完成前系統無法啟用。",
|
||||
"text": "相机拍摄中,完成前系统无法启动。",
|
||||
"severity": 0
|
||||
}
|
||||
}
|
||||
|
||||
@@ -973,7 +973,7 @@ static void bb_ui_draw_measures_left(UIState *s, int bb_x, int bb_y, int bb_w )
|
||||
snprintf(val_str, sizeof(val_str), "-");
|
||||
}
|
||||
snprintf(uom_str, sizeof(uom_str), "m ");
|
||||
bb_h +=bb_ui_draw_measure(s, val_str, uom_str, "相對距離",
|
||||
bb_h +=bb_ui_draw_measure(s, val_str, uom_str, "相对距离",
|
||||
bb_rx, bb_ry, bb_uom_dx,
|
||||
val_color, lab_color, uom_color,
|
||||
value_fontSize, label_fontSize, uom_fontSize );
|
||||
@@ -1008,7 +1008,7 @@ static void bb_ui_draw_measures_left(UIState *s, int bb_x, int bb_y, int bb_w )
|
||||
} else {
|
||||
snprintf(uom_str, sizeof(uom_str), "mph");
|
||||
}
|
||||
bb_h +=bb_ui_draw_measure(s, val_str, uom_str, "相對速度",
|
||||
bb_h +=bb_ui_draw_measure(s, val_str, uom_str, "相对速度",
|
||||
bb_rx, bb_ry, bb_uom_dx,
|
||||
val_color, lab_color, uom_color,
|
||||
value_fontSize, label_fontSize, uom_fontSize );
|
||||
@@ -1053,7 +1053,7 @@ static void bb_ui_draw_measures_right(UIState *s, int bb_x, int bb_y, int bb_w )
|
||||
snprintf(val_str, sizeof(val_str), "%.1f°",(scene->angleSteers));
|
||||
|
||||
snprintf(uom_str, sizeof(uom_str), "");
|
||||
bb_h +=bb_ui_draw_measure(s, val_str, uom_str, "實際轉角",
|
||||
bb_h +=bb_ui_draw_measure(s, val_str, uom_str, "实际转角",
|
||||
bb_rx, bb_ry, bb_uom_dx,
|
||||
val_color, lab_color, uom_color,
|
||||
value_fontSize, label_fontSize, uom_fontSize );
|
||||
@@ -1077,7 +1077,7 @@ static void bb_ui_draw_measures_right(UIState *s, int bb_x, int bb_y, int bb_w )
|
||||
snprintf(val_str, sizeof(val_str), "%.1f°",(scene->angleSteersDes));
|
||||
|
||||
snprintf(uom_str, sizeof(uom_str), "");
|
||||
bb_h +=bb_ui_draw_measure(s, val_str, uom_str, "所需轉角",
|
||||
bb_h +=bb_ui_draw_measure(s, val_str, uom_str, "所需转角",
|
||||
bb_rx, bb_ry, bb_uom_dx,
|
||||
val_color, lab_color, uom_color,
|
||||
value_fontSize, label_fontSize, uom_fontSize );
|
||||
|
||||
@@ -216,7 +216,7 @@ static void ui_draw_sidebar_storage_metric(UIState *s, bool hasSidebar) {
|
||||
|
||||
snprintf(storage_value_str, sizeof(storage_value_str), "%d", (int)storage_pct);
|
||||
snprintf(storage_value_unit, sizeof(storage_value_unit), "%s", "%");
|
||||
snprintf(storage_label_str, sizeof(storage_label_str), "%s", "儲存空間");
|
||||
snprintf(storage_label_str, sizeof(storage_label_str), "%s", "存储空间");
|
||||
strcat(storage_value_str, storage_value_unit);
|
||||
|
||||
ui_draw_sidebar_metric(s, storage_label_str, storage_value_str, storage_severity, storage_y_offset, NULL, hasSidebar);
|
||||
@@ -241,7 +241,7 @@ static void ui_draw_sidebar_temp_metric(UIState *s, bool hasSidebar) {
|
||||
|
||||
snprintf(temp_value_str, sizeof(temp_value_str), "%d", s->scene.paTemp);
|
||||
snprintf(temp_value_unit, sizeof(temp_value_unit), "%s", "℃");
|
||||
snprintf(temp_label_str, sizeof(temp_label_str), "%s", "溫度");
|
||||
snprintf(temp_label_str, sizeof(temp_label_str), "%s", "温度");
|
||||
strcat(temp_value_str, temp_value_unit);
|
||||
|
||||
ui_draw_sidebar_metric(s, temp_label_str, temp_value_str, temp_severity, temp_y_offset, NULL, hasSidebar);
|
||||
@@ -254,17 +254,17 @@ static void ui_draw_sidebar_panda_metric(UIState *s, bool hasSidebar) {
|
||||
|
||||
if (s->scene.hwType == cereal_HealthData_HwType_unknown) {
|
||||
panda_severity = 2;
|
||||
snprintf(panda_message_str, sizeof(panda_message_str), "%s", "無 PANDA");
|
||||
snprintf(panda_message_str, sizeof(panda_message_str), "%s", "无 PANDA");
|
||||
} else if (s->scene.hwType == cereal_HealthData_HwType_whitePanda) {
|
||||
panda_severity = 0;
|
||||
snprintf(panda_message_str, sizeof(panda_message_str), "%s", "PANDA\n已連接");
|
||||
snprintf(panda_message_str, sizeof(panda_message_str), "%s", "PANDA\n已连接");
|
||||
} else if (
|
||||
(s->scene.hwType == cereal_HealthData_HwType_greyPanda) ||
|
||||
(s->scene.hwType == cereal_HealthData_HwType_blackPanda) ||
|
||||
(s->scene.hwType == cereal_HealthData_HwType_uno)) {
|
||||
if (s->scene.satelliteCount == -1) {
|
||||
panda_severity = 0;
|
||||
snprintf(panda_message_str, sizeof(panda_message_str), "%s", "PANDA\n已連接");
|
||||
snprintf(panda_message_str, sizeof(panda_message_str), "%s", "PANDA\nA已连接");
|
||||
} else {
|
||||
if (s->scene.satelliteCount < 6) {
|
||||
panda_severity = 1;
|
||||
|
||||
+2
-2
@@ -1073,8 +1073,8 @@ int main(int argc, char* argv[]) {
|
||||
if (s->status != STATUS_STOPPED) {
|
||||
update_status(s, STATUS_ALERT);
|
||||
}
|
||||
snprintf(s->scene.alert_text1, sizeof(s->scene.alert_text1), "%s", "即刻接管控制");
|
||||
snprintf(s->scene.alert_text2, sizeof(s->scene.alert_text2), "%s", "操控服務沒有反應");
|
||||
snprintf(s->scene.alert_text1, sizeof(s->scene.alert_text1), "%s", "TAKE CONTROL IMMEDIATELY");
|
||||
snprintf(s->scene.alert_text2, sizeof(s->scene.alert_text2), "%s", "Controls Unresponsive");
|
||||
ui_draw_vision_alert(s, s->scene.alert_size, s->status, s->scene.alert_text1, s->scene.alert_text2);
|
||||
|
||||
s->alert_sound_timeout = 2 * UI_FREQ;
|
||||
|
||||
Reference in New Issue
Block a user