AGNOS system reset: handle ABL reset (#27418)

* AGNOS system reset: handle ABL reset

* no more tapping

* eta
This commit is contained in:
Adeeb Shihadeh
2023-02-21 21:34:02 -08:00
committed by GitHub
parent f381b69401
commit 72539fa177
8 changed files with 107 additions and 79 deletions
+32 -17
View File
@@ -11,14 +11,11 @@
#define NVME "/dev/nvme0n1"
#define USERDATA "/dev/disk/by-partlabel/userdata"
void Reset::doReset() {
// best effort to wipe nvme and sd card
void Reset::doErase() {
// best effort to wipe nvme
std::system("sudo umount " NVME);
std::system("yes | sudo mkfs.ext4 " NVME);
// we handle two cases here
// * user-prompted factory reset
// * recovering from a corrupt userdata by formatting
int rm = std::system("sudo rm -rf /data/*");
std::system("sudo umount " USERDATA);
int fmt = std::system("yes | sudo mkfs.ext4 " USERDATA);
@@ -30,22 +27,26 @@ void Reset::doReset() {
rebootBtn->show();
}
void Reset::startReset() {
body->setText(tr("Resetting device...\nThis may take up to a minute."));
rejectBtn->hide();
rebootBtn->hide();
confirmBtn->hide();
#ifdef __aarch64__
QTimer::singleShot(100, this, &Reset::doErase);
#endif
}
void Reset::confirm() {
const QString confirm_txt = tr("Are you sure you want to reset your device?");
if (body->text() != confirm_txt) {
body->setText(confirm_txt);
} else {
body->setText(tr("Resetting device..."));
rejectBtn->hide();
rebootBtn->hide();
confirmBtn->hide();
#ifdef __aarch64__
QTimer::singleShot(100, this, &Reset::doReset);
#endif
startReset();
}
}
Reset::Reset(bool recover, QWidget *parent) : QWidget(parent) {
Reset::Reset(ResetMode mode, QWidget *parent) : QWidget(parent) {
QVBoxLayout *main_layout = new QVBoxLayout(this);
main_layout->setContentsMargins(45, 220, 45, 45);
main_layout->setSpacing(0);
@@ -56,7 +57,7 @@ Reset::Reset(bool recover, QWidget *parent) : QWidget(parent) {
main_layout->addSpacing(60);
body = new QLabel(tr("System reset triggered. Press confirm to erase all content and settings. Press cancel to resume boot."));
body = new QLabel(tr("Press confirm to erase all content and settings. Press cancel to resume boot."));
body->setWordWrap(true);
body->setStyleSheet("font-size: 80px; font-weight: light;");
main_layout->addWidget(body, 1, Qt::AlignTop | Qt::AlignLeft);
@@ -82,10 +83,16 @@ Reset::Reset(bool recover, QWidget *parent) : QWidget(parent) {
blayout->addWidget(confirmBtn);
QObject::connect(confirmBtn, &QPushButton::clicked, this, &Reset::confirm);
bool recover = mode == ResetMode::RECOVER;
rejectBtn->setVisible(!recover);
rebootBtn->setVisible(recover);
if (recover) {
body->setText(tr("Unable to mount data partition. Press confirm to reset your device."));
body->setText(tr("Unable to mount data partition. Partition may be corrupted. Press confirm to erase and reset your device."));
}
// automatically start if we're just finishing up an ABL reset
if (mode == ResetMode::FORMAT) {
startReset();
}
setStyleSheet(R"(
@@ -108,9 +115,17 @@ Reset::Reset(bool recover, QWidget *parent) : QWidget(parent) {
}
int main(int argc, char *argv[]) {
bool recover = argc > 1 && strcmp(argv[1], "--recover") == 0;
ResetMode mode = ResetMode::USER_RESET;
if (argc > 1) {
if (strcmp(argv[1], "--recover") == 0) {
mode = ResetMode::RECOVER;
} else if (strcmp(argv[1], "--format") == 0) {
mode = ResetMode::FORMAT;
}
}
QApplication a(argc, argv);
Reset reset(recover);
Reset reset(mode);
setMainWindow(&reset);
return a.exec();
}
+9 -2
View File
@@ -2,18 +2,25 @@
#include <QPushButton>
#include <QWidget>
enum ResetMode {
USER_RESET, // user initiated a factory reset from openpilot
RECOVER, // userdata is corrupt for some reason, give a chance to recover
FORMAT, // finish up an ABL factory reset
};
class Reset : public QWidget {
Q_OBJECT
public:
explicit Reset(bool recover = false, QWidget *parent = 0);
explicit Reset(ResetMode mode, QWidget *parent = 0);
private:
QLabel *body;
QPushButton *rejectBtn;
QPushButton *rebootBtn;
QPushButton *confirmBtn;
void doReset();
void doErase();
void startReset();
private slots:
void confirm();
+11 -10
View File
@@ -576,18 +576,10 @@ location set</source>
<source>Are you sure you want to reset your device?</source>
<translation>Bist du sicher, dass du das Gerät auf Werkseinstellungen zurücksetzen möchtest?</translation>
</message>
<message>
<source>Resetting device...</source>
<translation>Gerät wird zurückgesetzt...</translation>
</message>
<message>
<source>System Reset</source>
<translation>System auf Werkseinstellungen zurücksetzen</translation>
</message>
<message>
<source>System reset triggered. Press confirm to erase all content and settings. Press cancel to resume boot.</source>
<translation>Zurücksetzen auf Werkseinstellungen wurde ausgewählt. Drücke Annehmen, um alle Inhalte und Einstellungen zu löschen. Drücke Abbrechen, um mit dem Starten des Gerätes fortzufahren.</translation>
</message>
<message>
<source>Cancel</source>
<translation>Abbrechen</translation>
@@ -601,8 +593,17 @@ location set</source>
<translation>Bestätigen</translation>
</message>
<message>
<source>Unable to mount data partition. Press confirm to reset your device.</source>
<translation>Datenpartition kann nicht geöffnet werden. Drücke Annehmen, um dein Gerät auf Werkseinstellungen zurückzusetzen.</translation>
<source>Unable to mount data partition. Partition may be corrupted. Press confirm to erase and reset your device.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Press confirm to erase all content and settings. Press cancel to resume boot.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Resetting device...
This may take up to a minute.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
+11 -10
View File
@@ -574,18 +574,10 @@ location set</source>
<source>Are you sure you want to reset your device?</source>
<translation>初期化してもよろしいですか?</translation>
</message>
<message>
<source>Resetting device...</source>
<translation>デバイスが初期化されます...</translation>
</message>
<message>
<source>System Reset</source>
<translation>システムを初期化</translation>
</message>
<message>
<source>System reset triggered. Press confirm to erase all content and settings. Press cancel to resume boot.</source>
<translation>システムの初期化をリクエストしました。「確認」ボタンを押すとデバイスが初期化されます。「キャンセル」ボタンを押すと起動を続行します。</translation>
</message>
<message>
<source>Cancel</source>
<translation>キャンセル</translation>
@@ -599,8 +591,17 @@ location set</source>
<translation>確認</translation>
</message>
<message>
<source>Unable to mount data partition. Press confirm to reset your device.</source>
<translation>「data」パーティションをマウントできません。「確認」ボタンを押すとデバイスが初期化されます。</translation>
<source>Unable to mount data partition. Partition may be corrupted. Press confirm to erase and reset your device.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Press confirm to erase all content and settings. Press cancel to resume boot.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Resetting device...
This may take up to a minute.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
+11 -10
View File
@@ -574,18 +574,10 @@ location set</source>
<source>Are you sure you want to reset your device?</source>
<translation>장치를 초기화 하시겠습니까?</translation>
</message>
<message>
<source>Resetting device...</source>
<translation>장치 초기화중...</translation>
</message>
<message>
<source>System Reset</source>
<translation>장치 초기화</translation>
</message>
<message>
<source>System reset triggered. Press confirm to erase all content and settings. Press cancel to resume boot.</source>
<translation>장치를 초기화 합니다. 확인버튼을 누르면 모든 내용과 설정이 초기화됩니다. 부팅을 재개하려면 취소를 누르세요.</translation>
</message>
<message>
<source>Cancel</source>
<translation>취소</translation>
@@ -599,8 +591,17 @@ location set</source>
<translation>확인</translation>
</message>
<message>
<source>Unable to mount data partition. Press confirm to reset your device.</source>
<translation>데이터 파티션을 마운트할 수 없습니다. 확인 버튼을 눌러 장치를 리셋합니다.</translation>
<source>Unable to mount data partition. Partition may be corrupted. Press confirm to erase and reset your device.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Press confirm to erase all content and settings. Press cancel to resume boot.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Resetting device...
This may take up to a minute.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
+11 -10
View File
@@ -578,18 +578,10 @@ trabalho definido</translation>
<source>Are you sure you want to reset your device?</source>
<translation>Tem certeza que quer resetar seu dispositivo?</translation>
</message>
<message>
<source>Resetting device...</source>
<translation>Resetando dispositivo...</translation>
</message>
<message>
<source>System Reset</source>
<translation>Resetar Sistema</translation>
</message>
<message>
<source>System reset triggered. Press confirm to erase all content and settings. Press cancel to resume boot.</source>
<translation>Solicitado reset do sistema. Confirme para apagar todo conteúdo e configurações. Aperte cancelar para continuar boot.</translation>
</message>
<message>
<source>Cancel</source>
<translation>Cancelar</translation>
@@ -603,8 +595,17 @@ trabalho definido</translation>
<translation>Confirmar</translation>
</message>
<message>
<source>Unable to mount data partition. Press confirm to reset your device.</source>
<translation>Não foi possível montar a partição de dados. Pressione confirmar para resetar seu dispositivo.</translation>
<source>Unable to mount data partition. Partition may be corrupted. Press confirm to erase and reset your device.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Press confirm to erase all content and settings. Press cancel to resume boot.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Resetting device...
This may take up to a minute.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
+11 -10
View File
@@ -572,18 +572,10 @@ location set</source>
<source>Are you sure you want to reset your device?</source>
<translation>您确定要重置您的设备吗?</translation>
</message>
<message>
<source>Resetting device...</source>
<translation>正在重置设备……</translation>
</message>
<message>
<source>System Reset</source>
<translation>恢复出厂设置</translation>
</message>
<message>
<source>System reset triggered. Press confirm to erase all content and settings. Press cancel to resume boot.</source>
<translation>已触发系统重置:确认以删除所有内容和设置。取消以正常启动设备。</translation>
</message>
<message>
<source>Cancel</source>
<translation>取消</translation>
@@ -597,8 +589,17 @@ location set</source>
<translation>确认</translation>
</message>
<message>
<source>Unable to mount data partition. Press confirm to reset your device.</source>
<translation>无法挂载数据分区。 确认以重置您的设备。</translation>
<source>Unable to mount data partition. Partition may be corrupted. Press confirm to erase and reset your device.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Press confirm to erase all content and settings. Press cancel to resume boot.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Resetting device...
This may take up to a minute.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
+11 -10
View File
@@ -574,18 +574,10 @@ location set</source>
<source>Are you sure you want to reset your device?</source>
<translation>您確定要重置你的設備嗎?</translation>
</message>
<message>
<source>Resetting device...</source>
<translation>重置設備中…</translation>
</message>
<message>
<source>System Reset</source>
<translation>系統重置</translation>
</message>
<message>
<source>System reset triggered. Press confirm to erase all content and settings. Press cancel to resume boot.</source>
<translation>系統重置已觸發。請按確認刪除所有內容和設置。按取消恢復啟動。</translation>
</message>
<message>
<source>Cancel</source>
<translation>取消</translation>
@@ -599,8 +591,17 @@ location set</source>
<translation>確認</translation>
</message>
<message>
<source>Unable to mount data partition. Press confirm to reset your device.</source>
<translation>無法掛載數據分區。請按確認重置您的設備。</translation>
<source>Unable to mount data partition. Partition may be corrupted. Press confirm to erase and reset your device.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Press confirm to erase all content and settings. Press cancel to resume boot.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Resetting device...
This may take up to a minute.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>