diff --git a/TegraRcmGUI.sln b/TegraRcmGUI.sln new file mode 100644 index 0000000..9427233 --- /dev/null +++ b/TegraRcmGUI.sln @@ -0,0 +1,40 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.24720.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TegraRcmGUI", "TegraRcmGUI\TegraRcmGUI.vcxproj", "{2C091C5B-378F-44D0-91F2-53489BA7B83C}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + Static Debug|x64 = Static Debug|x64 + Static Debug|x86 = Static Debug|x86 + Static Release|x64 = Static Release|x64 + Static Release|x86 = Static Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {2C091C5B-378F-44D0-91F2-53489BA7B83C}.Debug|x64.ActiveCfg = Debug|x64 + {2C091C5B-378F-44D0-91F2-53489BA7B83C}.Debug|x64.Build.0 = Debug|x64 + {2C091C5B-378F-44D0-91F2-53489BA7B83C}.Debug|x86.ActiveCfg = Debug|Win32 + {2C091C5B-378F-44D0-91F2-53489BA7B83C}.Debug|x86.Build.0 = Debug|Win32 + {2C091C5B-378F-44D0-91F2-53489BA7B83C}.Release|x64.ActiveCfg = Release|x64 + {2C091C5B-378F-44D0-91F2-53489BA7B83C}.Release|x64.Build.0 = Release|x64 + {2C091C5B-378F-44D0-91F2-53489BA7B83C}.Release|x86.ActiveCfg = Release|Win32 + {2C091C5B-378F-44D0-91F2-53489BA7B83C}.Release|x86.Build.0 = Release|Win32 + {2C091C5B-378F-44D0-91F2-53489BA7B83C}.Static Debug|x64.ActiveCfg = Debug|x64 + {2C091C5B-378F-44D0-91F2-53489BA7B83C}.Static Debug|x64.Build.0 = Debug|x64 + {2C091C5B-378F-44D0-91F2-53489BA7B83C}.Static Debug|x86.ActiveCfg = Debug|Win32 + {2C091C5B-378F-44D0-91F2-53489BA7B83C}.Static Debug|x86.Build.0 = Debug|Win32 + {2C091C5B-378F-44D0-91F2-53489BA7B83C}.Static Release|x64.ActiveCfg = Release|x64 + {2C091C5B-378F-44D0-91F2-53489BA7B83C}.Static Release|x64.Build.0 = Release|x64 + {2C091C5B-378F-44D0-91F2-53489BA7B83C}.Static Release|x86.ActiveCfg = Release|Win32 + {2C091C5B-378F-44D0-91F2-53489BA7B83C}.Static Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/TegraRcmGUI/DialogTab01.cpp b/TegraRcmGUI/DialogTab01.cpp index f360e9c..0a2a6f4 100644 --- a/TegraRcmGUI/DialogTab01.cpp +++ b/TegraRcmGUI/DialogTab01.cpp @@ -147,6 +147,7 @@ BEGIN_MESSAGE_MAP(DialogTab01, CDialog) ON_BN_CLICKED(ID_DEL_FAV, &DialogTab01::OnBnClickedDelFav) ON_LBN_DBLCLK(IDC_LIST1, &DialogTab01::OnDblclkList1) ON_LBN_SELCHANGE(IDC_LIST1, &DialogTab01::OnLbnSelchangeList1) + ON_MESSAGE(DM_GETDEFID, OnGetDefID) ON_WM_CTLCOLOR() END_MESSAGE_MAP() @@ -245,6 +246,7 @@ void DialogTab01::InjectPayload() { m_TegraRcm->BitmapDisplay(LOADED); m_TegraRcm->SendUserMessage("Payload injected !", VALID); + m_TegraRcm->AppendLogBox(TEXT("Payload successfully injected\r\n")); m_TegraRcm->WAITING_RECONNECT = TRUE; if (!m_TegraRcm->CmdShow) m_TegraRcm->ShowTrayIconBalloon(TEXT("Payload injected"), TEXT(" "), 1000, NIIF_INFO); } @@ -254,6 +256,10 @@ void DialogTab01::InjectPayload() string s = "Error while injecting payload (RC=" + std::to_string(rc) + ")"; if (!m_TegraRcm->CmdShow) m_TegraRcm->ShowTrayIconBalloon(TEXT("Error"), TEXT("Error while injecting payload"), 1000, NIIF_ERROR); m_TegraRcm->SendUserMessage(s.c_str(), INVALID); + CString rc_str; + rc_str.Format(L"%d", rc); + m_TegraRcm->AppendLogBox(TEXT("Error while injecting payload (RC=") + rc_str + TEXT(")\r\n")); + } } @@ -294,6 +300,7 @@ void DialogTab01::OnBnClickedAddFav() m_TegraRcm->SaveFavorites(); m_TegraRcm->SendUserMessage("Favorite added", VALID); + m_TegraRcm->AppendLogBox(TEXT("New favorite added\r\n")); return; } @@ -309,6 +316,8 @@ void DialogTab01::OnBnClickedDelFav() m_TegraRcm->Favorites.RemoveAt(i); m_TegraRcm->SaveFavorites(); m_TegraRcm->SendUserMessage("Favorite removed", VALID); + m_TegraRcm->AppendLogBox(TEXT("Favorite removed\r\n")); + } return; } @@ -356,3 +365,7 @@ HBRUSH DialogTab01::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) } return hbr; } +LRESULT DialogTab01::OnGetDefID(WPARAM wp, LPARAM lp) +{ + return MAKELONG(0, DC_HASDEFID); +} \ No newline at end of file diff --git a/TegraRcmGUI/DialogTab01.h b/TegraRcmGUI/DialogTab01.h index a0e685b..6086685 100644 --- a/TegraRcmGUI/DialogTab01.h +++ b/TegraRcmGUI/DialogTab01.h @@ -40,4 +40,5 @@ public: afx_msg void OnLbnSelchangeList1(); afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); COleDropTarget FileDropTarget; + afx_msg LRESULT OnGetDefID(WPARAM wp, LPARAM lp); }; diff --git a/TegraRcmGUI/DialogTab02.cpp b/TegraRcmGUI/DialogTab02.cpp index 9f7fbdc..5141d69 100644 --- a/TegraRcmGUI/DialogTab02.cpp +++ b/TegraRcmGUI/DialogTab02.cpp @@ -29,7 +29,8 @@ SOFTWARE. #include "TegraRcmGUI.h" #include "afxdialogex.h" #include "DialogTab02.h" - +#include +#include using namespace std; @@ -58,6 +59,7 @@ BEGIN_MESSAGE_MAP(DialogTab02, CDialogEx) ON_BN_CLICKED(IDC_SHOFEL2, &DialogTab02::OnBnClickedShofel2) // ON_WM_CTLCOLOR() ON_WM_CTLCOLOR() +ON_BN_CLICKED(IDC_DUMP_BISKEY, &DialogTab02::OnBnClickedDumpBiskey) END_MESSAGE_MAP() @@ -92,6 +94,16 @@ BOOL DialogTab02::OnInitDialog() ); pBtn->SetIcon(hIcn); + pBtn = (CButton*)GetDlgItem(IDC_DUMP_BISKEY); + pBtn->ModifyStyle(0, BS_ICON); + hIcn = (HICON)LoadImage( + AfxGetApp()->m_hInstance, + MAKEINTRESOURCE(ID_KEYS_ICON), + IMAGE_ICON, + height, height, // use actual size + LR_DEFAULTCOLOR + ); + pBtn->SetIcon(hIcn); CFont* pFont = GetFont(); LOGFONT lf; @@ -99,21 +111,57 @@ BOOL DialogTab02::OnInitDialog() lf.lfWeight = FW_BOLD; m_BoldFont.CreateFontIndirect(&lf); + CComboBox* pmyComboBox = (CComboBox*)GetDlgItem(ID_UMS_COMBO); + pmyComboBox->AddString(TEXT("eMMC BOOT0 (DANGEROUS)")); + pmyComboBox->AddString(TEXT("eMMC BOOT1 (DANGEROUS)")); + pmyComboBox->AddString(TEXT("eMMC rawNAND (DANGEROUS)")); + pmyComboBox->AddString(TEXT("MMC - SD Card")); + pmyComboBox->SetCurSel(3); + + return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void DialogTab02::OnBnClickedMountSd() { + CComboBox* pmyComboBox = (CComboBox*)GetDlgItem(ID_UMS_COMBO); + if (pmyComboBox->GetCurSel() < 3) { + CString message = _T("-----> WARNING <-----\nYou are about to mount internal storage of your Nintendo Switch\nBE VERY CAREFUL ! Do not format or write to your NAND partitions if you don't know what you're doing.\nTHIS COULD BRICK YOUR CONSOLE !!!\n\nAre you really sure you want to continue ?"); + const int result = MessageBox(message, _T("BEWARE & WARNING"), MB_YESNO | MB_ICONWARNING); + if (result != IDYES) { + m_TegraRcm->AppendLogBox(TEXT("Mount NAND partition ABORTED\r\n")); + return; + } + } + m_TegraRcm->BitmapDisplay(LOADING); GetParent()->UpdateWindow(); string s; - TCHAR args[] = TEXT("memloader\\memloader_usb.bin -r --dataini=memloader\\ums_sd.ini"); - int rc = m_TegraRcm->Smasher(args); - if (rc < 0) + + + TCHAR args[256]; + switch (pmyComboBox->GetCurSel()) + { + case 0: + _tcscpy(args, TEXT(".\\tools\\memloader\\memloader_usb.bin -r --dataini=.\\tools\\memloader\\ums_boot0.ini")); + break; + case 1: + _tcscpy(args, TEXT(".\\tools\\memloader\\memloader_usb.bin -r --dataini=.\\tools\\memloader\\ums_boot1.ini")); + break; + case 2: + _tcscpy(args, TEXT(".\\tools\\memloader\\memloader_usb.bin -r --dataini=.\\tools\\memloader\\ums_emmc.ini")); + break; + default: + _tcscpy(args, TEXT(".\\tools\\memloader\\memloader_usb.bin -r --dataini=.\\tools\\memloader\\ums_sd.ini")); + break; + } + + int rc = m_TegraRcm->Smasher(args, FALSE); + if (rc < -10) { m_TegraRcm->BitmapDisplay(LOAD_ERROR); - s = "Error while injecting payload (RC=" + std::to_string(rc) + ")"; + s = "Error while injecting UMS Tool (RC=" + std::to_string(rc) + ")"; if (!m_TegraRcm->CmdShow) m_TegraRcm->ShowTrayIconBalloon(TEXT("Error"), TEXT("Error while injecting payload"), 1000, NIIF_ERROR); } else @@ -122,8 +170,10 @@ void DialogTab02::OnBnClickedMountSd() s = "UMS Tool injected"; if (!m_TegraRcm->CmdShow) m_TegraRcm->ShowTrayIconBalloon(TEXT("UMS Tool injected"), TEXT(" "), 1000, NIIF_INFO); } - CA2T wt(s.c_str()); - GetParent()->SetDlgItemText(INFO_LABEL, wt); + //CA2T wt(s.c_str()); + //GetParent()->SetDlgItemText(INFO_LABEL, wt); + CString ss(s.c_str()); + m_TegraRcm->AppendLogBox(ss + TEXT("\r\n")); } @@ -132,8 +182,8 @@ void DialogTab02::OnBnClickedShofel2() TCHAR *exe_dir = m_TegraRcm->GetAbsolutePath(TEXT(""), CSIDL_APPDATA); string s; - TCHAR *COREBOOT_FILE = m_TegraRcm->GetAbsolutePath(TEXT("shofel2\\coreboot\\coreboot.rom"), CSIDL_APPDATA); - TCHAR *PAYLOAD = m_TegraRcm->GetAbsolutePath(TEXT("shofel2\\coreboot\\cbfs.bin"), CSIDL_APPDATA); + TCHAR *COREBOOT_FILE = m_TegraRcm->GetAbsolutePath(TEXT("tools\\shofel2\\coreboot\\coreboot.rom"), CSIDL_APPDATA); + TCHAR *PAYLOAD = m_TegraRcm->GetAbsolutePath(TEXT("tools\\shofel2\\coreboot\\cbfs.bin"), CSIDL_APPDATA); CString COREBOOT_FILE2 = COREBOOT_FILE; CString COREBOOT = _T("CBFS+") + COREBOOT_FILE2; @@ -143,7 +193,9 @@ void DialogTab02::OnBnClickedShofel2() BOOL payload_exists = infile2.good(); if (!coreboot_exists || !payload_exists) { - GetParent()->SetDlgItemText(INFO_LABEL, TEXT("Linux coreboot not found in \\shofel2 dir")); + //GetParent()->SetDlgItemText(INFO_LABEL, TEXT("Linux coreboot not found in \\shofel2 dir")); + m_TegraRcm->AppendLogBox(TEXT("Linux coreboot not found in \\shofel2 di\r\n")); + CString message = _T("Kernel not found in shofel2 directory. Do you want to automatically download arch linux kernel from SoulCipher repo ?"); const int result = MessageBox(message, _T("Kernel not found"), MB_YESNOCANCEL | MB_ICONQUESTION); if (result == IDYES) @@ -159,27 +211,32 @@ void DialogTab02::OnBnClickedShofel2() } m_TegraRcm->BitmapDisplay(LOADING); GetParent()->UpdateWindow(); - GetParent()->SetDlgItemText(INFO_LABEL, TEXT("Loading coreboot. Please wait.")); + //GetParent()->SetDlgItemText(INFO_LABEL, TEXT("Loading coreboot. Please wait.")); + m_TegraRcm->AppendLogBox(TEXT("Linux coreboot not found in \\shofel2 di\r\n")); + //int rc = device.SmashMain(5, args); - TCHAR cmd[MAX_PATH] = TEXT("--relocator= \""); + TCHAR cmd[4096] = TEXT("--relocator= \""); lstrcat(cmd, _tcsdup(PAYLOAD)); lstrcat(cmd, TEXT("\" \"CBFS:")); lstrcat(cmd, _tcsdup(COREBOOT_FILE)); lstrcat(cmd, TEXT("\"")); - int rc = m_TegraRcm->Smasher(cmd); - + int rc = m_TegraRcm->Smasher(cmd, FALSE); + int test = 1; if (rc >= 0 || rc < -7) { - GetParent()->SetDlgItemText(INFO_LABEL, TEXT("Coreboot injected. Waiting 5s for device...")); + //GetParent()->SetDlgItemText(INFO_LABEL, TEXT("Coreboot injected. Waiting 5s for device...")); + m_TegraRcm->AppendLogBox(TEXT("Coreboot injected. Waiting 5s for device...\r\n")); Sleep(5000); PROCESS_INFORMATION pif; STARTUPINFO si; ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); - TCHAR *imx_script = m_TegraRcm->GetAbsolutePath(TEXT("shofel2\\imx_usb.bat"), CSIDL_APPDATA); - GetParent()->SetDlgItemText(INFO_LABEL, TEXT("Loading coreboot... Please wait.")); + TCHAR *imx_script = m_TegraRcm->GetAbsolutePath(TEXT("tools\\shofel2\\imx_usb.bat"), CSIDL_APPDATA); + //GetParent()->SetDlgItemText(INFO_LABEL, TEXT("Loading coreboot... Please wait.")); + m_TegraRcm->AppendLogBox(TEXT("Loading coreboot... Please wait\r\n")); + BOOL ret = CreateProcess(imx_script, NULL, NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, exe_dir, &si, &pif); int rc = -50; if (NULL != ret) @@ -200,21 +257,27 @@ void DialogTab02::OnBnClickedShofel2() m_TegraRcm->BitmapDisplay(LOADED); s = "\nCoreboot loaded !"; if (!m_TegraRcm->CmdShow) m_TegraRcm->ShowTrayIconBalloon(TEXT("Coreboot loaded "), TEXT(" "), 1000, NIIF_INFO); + } else { m_TegraRcm->BitmapDisplay(LOAD_ERROR); s = "Error while loading imx_usb.exe"; if (!m_TegraRcm->CmdShow) m_TegraRcm->ShowTrayIconBalloon(TEXT("Error"), TEXT("Error while loading imx_usb.exe"), 1000, NIIF_ERROR); + } } else { s = "Error while injecting payload. (RC=" + std::to_string(rc) + ")"; if (!m_TegraRcm->CmdShow) m_TegraRcm->ShowTrayIconBalloon(TEXT("Error"), TEXT("Error while injecting payload"), 1000, NIIF_ERROR); + } - CA2T wt2(s.c_str()); - GetParent()->SetDlgItemText(INFO_LABEL, wt2); + //CA2T wt2(s.c_str()); + //GetParent()->SetDlgItemText(INFO_LABEL, wt2); + CString ss(s.c_str()); + m_TegraRcm->AppendLogBox(ss + TEXT("\r\n")); + } HBRUSH DialogTab02::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) @@ -225,8 +288,98 @@ HBRUSH DialogTab02::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { case ID_UMSTOOL_TITLE: case ID_LINUX_TITLE: + case ID_BISKEY_TITLE: pDC->SelectObject(&m_BoldFont); break; } return hbr; } + + +void DialogTab02::OnBnClickedDumpBiskey() +{ + + + m_TegraRcm->BitmapDisplay(LOADING); + GetParent()->UpdateWindow(); + TCHAR args[] = TEXT("-w tools\\biskeydump_usb.bin BOOT:0x0"); + int rc = m_TegraRcm->Smasher(args); + + BOOL keyFound = FALSE; + TCHAR *rfile = m_TegraRcm->GetAbsolutePath(TEXT("out.log"), CSIDL_APPDATA); + CString Cline; + std::wifstream fin(rfile, std::ios::binary); + fin.imbue(std::locale(fin.getloc(), new std::codecvt_utf8_utf16)); + CString Filename; + for (wchar_t c; fin.get(c); ) { + CString Cchar(c); + if (Cchar == TEXT("\n")) { + + if (Cline.Find(TEXT("HWI")) != -1 || + Cline.Find(TEXT("SBK")) != -1 || + Cline.Find(TEXT("TSEC KEY")) != -1 || + Cline.Find(TEXT("BIS KEY")) != -1) { + + if (!keyFound) + { + keyFound = TRUE; + + CString szFilter; + szFilter = "TXT files (*.txt)|*.txt|All files (*.*)|*.*||"; + + CFileDialog FileOpenDialog( + FALSE, + NULL, + TEXT("BIS_keys.txt"), + OFN_HIDEREADONLY, + szFilter, + AfxGetMainWnd()); + + if (FileOpenDialog.DoModal() == IDOK) + { + CFile File; + Filename = FileOpenDialog.GetPathName(); + remove(CT2A(Filename)); + } + else { + return; + } + + } + CT2CA pszConvertedAnsiString(Cline + _T('\n')); + std::string outLine = pszConvertedAnsiString; + fstream outFile; + outFile.open(Filename, fstream::in | fstream::out | fstream::app); + outFile << outLine; + outFile.close(); + + } + Cline.Empty(); + } + else if (Cchar != TEXT("\r") && Cchar != TEXT("")) { + Cline.Append(Cchar); + } + } + fin.close(); + + + CString s; + if (!keyFound) + { + m_TegraRcm->BitmapDisplay(LOAD_ERROR); + s.Append(TEXT("Error while retrieving BIS keys")); + if (!m_TegraRcm->CmdShow) m_TegraRcm->ShowTrayIconBalloon(TEXT("Error"), s, 1000, NIIF_ERROR); + s.Append(TEXT("\r\n")); + } + else + { + m_TegraRcm->BitmapDisplay(LOADED); + CString loc(Filename); + s.Append(TEXT("BIS keys saved to : ")); + s.Append(loc); + if (!m_TegraRcm->CmdShow) m_TegraRcm->ShowTrayIconBalloon(s, TEXT(" "), 1000, NIIF_INFO); + s.Append(TEXT("\r\n")); + + } + m_TegraRcm->AppendLogBox(s); +} diff --git a/TegraRcmGUI/DialogTab02.h b/TegraRcmGUI/DialogTab02.h index 637001c..346dd8e 100644 --- a/TegraRcmGUI/DialogTab02.h +++ b/TegraRcmGUI/DialogTab02.h @@ -4,6 +4,8 @@ #include "TegraRcm.h" + + // DialogTab02 dialog class DialogTab02 : @@ -33,4 +35,5 @@ public: // HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); + afx_msg void OnBnClickedDumpBiskey(); }; diff --git a/TegraRcmGUI/DialogTab03.cpp b/TegraRcmGUI/DialogTab03.cpp index de3adca..2e40db7 100644 --- a/TegraRcmGUI/DialogTab03.cpp +++ b/TegraRcmGUI/DialogTab03.cpp @@ -66,6 +66,7 @@ BEGIN_MESSAGE_MAP(DialogTab03, CDialogEx) ON_BN_CLICKED(MIN_TO_TRAY, &DialogTab03::OnClickedMinToTray) ON_BN_CLICKED(ID_INSTALL_DRIVER, &DialogTab03::OnBnClickedInstallDriver) ON_BN_CLICKED(RUN_WINSTART, &DialogTab03::OnBnClickedWinstart) + ON_BN_CLICKED(IDC_BUTTON2, &DialogTab03::OnBnClickedButton2) END_MESSAGE_MAP() @@ -136,11 +137,14 @@ void DialogTab03::OnBnClickedWinstart() { // Remove shortcut PathAppend(szPath, _T("\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\TegraRcmGUI.lnk")); - remove(CW2A(szPath)); + if(remove(CW2A(szPath)) == 0) m_TegraRcm->AppendLogBox(TEXT("Winstart shortcut REMOVED\r\n")); } // Create new shortcut - if (IsCheckChecked) CreateLink(); + if (IsCheckChecked) { + CreateLink(); + m_TegraRcm->AppendLogBox(TEXT("Winstart shortcut ADDED\r\n")); + } } @@ -218,4 +222,9 @@ void DialogTab03::CleanRegestry() { } } } -} \ No newline at end of file +} + +void DialogTab03::OnBnClickedButton2() +{ + m_TegraRcm->SetLocale(); +} diff --git a/TegraRcmGUI/TegraRcm.cpp b/TegraRcmGUI/TegraRcm.cpp index 0b1765a..891355a 100644 --- a/TegraRcmGUI/TegraRcm.cpp +++ b/TegraRcmGUI/TegraRcm.cpp @@ -27,6 +27,9 @@ SOFTWARE. #include #include "stdafx.h" #include "TegraRcm.h" +#include +#include +#include using namespace std; @@ -35,7 +38,7 @@ TegraRcm::TegraRcm(CDialog* pParent /*=NULL*/) m_Parent = pParent; m_hWnd = AfxGetMainWnd()->GetSafeHwnd(); GetFavorites(); - SendUserMessage("Waiting for device in RCM mode"); + //SendUserMessage("Waiting for device in RCM mode"); } TegraRcm::~TegraRcm() @@ -303,6 +306,89 @@ LRESULT TegraRcm::OnTrayIconEvent(UINT wParam, LPARAM lParam) return ERROR_SUCCESS; } +void TegraRcm::SetLocale() +{ + TCHAR *rfile = GetAbsolutePath(TEXT("locale\\french.txt"), CSIDL_APPDATA); + std::wifstream wif(rfile); + wif.imbue(std::locale(std::locale::empty(), new std::codecvt_utf8)); + if (wif.is_open()) + { + wif.seekg(0, std::ios::beg); + std::wstring wline; + std::wstring stringName; + std::wstring value; + std::wstring delimiter = L"="; + + while (wif.good()) + { + std::getline(wif, wline); + if (!wif.eof()) + { + if (wline.find(delimiter) != std::string::npos) { + stringName = wline.substr(0, wline.find(delimiter)); + value = wline.substr(wline.find(delimiter) + 1, wline.length() + 1); + CString value2 = value.c_str(); + value2.Replace(_T('#'), '\n'); + int intValue = stoi(stringName.c_str());; + if (intValue > 0) { + + //TCITEM tcItem1; + //tcItem1.mask = TCIF_TEXT; + //tcItem1.pszText = _T("Test"); + + //AfxGetMainWnd()->m_tbCtrl-> + //m_tbCtrl.InsertItem(0, &tcItem1); + //m_Ctrltb1->SetWindowText(_T("test")); + + + if (m_Ctrltb1->GetDlgItem(intValue)) { + m_Ctrltb1->SetDlgItemText(intValue, value2); + } + if (m_Ctrltb2->GetDlgItem(intValue)) { + m_Ctrltb2->SetDlgItemText(intValue, value2); + } + if (m_Ctrltb3->GetDlgItem(intValue)) { + m_Ctrltb3->SetDlgItemText(intValue, value2); + + } + } + } + } + } + wif.close(); + } +} + +void TegraRcm::AppendLogBox(CString line) { + CEdit* pBox = (CEdit*)AfxGetMainWnd()->GetDlgItem(IDC_LOG_BOX); + CString Content; + pBox->GetWindowText(Content); + Content.Append(line); + AfxGetMainWnd()->SetDlgItemText(IDC_LOG_BOX, Content); + pBox->LineScroll(pBox->GetLineCount()); + AfxGetMainWnd()->UpdateWindow(); + +} +void TegraRcm::UpdateLogBox() { + TCHAR *rfile = GetAbsolutePath(TEXT("out.log"), CSIDL_APPDATA); + CString Cline; + std::wifstream fin(rfile, std::ios::binary); + fin.imbue(std::locale(fin.getloc(), new std::codecvt_utf8_utf16)); + for (wchar_t c; fin.get(c); ) { + CString Cchar(c); + if (Cchar == TEXT("\n")) { + Cline.Append(TEXT("\r\n")); + AppendLogBox(Cline); + Cline.Empty(); + } + else if(Cchar != TEXT("\r")) { + Cline.Append(Cchar); + } + } + fin.close(); + +} + // // Presets functions @@ -356,6 +442,10 @@ void TegraRcm::SetPreset(string param, string value) readFile.close(); remove(CT2A(rfile)); rename(CT2A(wfile), CT2A(rfile)); + + CString paramStr(param.c_str()), valueStr(value.c_str()); + AppendLogBox(TEXT("Preset \"") + paramStr + TEXT("\" set to : ") + valueStr + TEXT("\r\n")); + } void TegraRcm::GetFavorites() { @@ -436,6 +526,7 @@ void TegraRcm::AddFavorite(CString value) outFile.open(GetAbsolutePath(TEXT("favorites.conf"), CSIDL_APPDATA), fstream::in | fstream::out | fstream::app); outFile << outLine; outFile.close(); + } void TegraRcm::SaveFavorites() { @@ -492,8 +583,13 @@ void TegraRcm::SendUserMessage(string message, int type) LabelColor = RGB(0, 0, 0); break; } - AfxGetMainWnd()->SetDlgItemText(INFO_LABEL, wmessage); + //AfxGetMainWnd()->SetDlgItemText(INFO_LABEL, wmessage); AppendLog(message); + /* + CString msgStr(message.c_str()); + msgStr.Append(TEXT("\r\n")); + AppendLogBox(msgStr); + */ } @@ -622,7 +718,9 @@ void TegraRcm::LookUp() m_Ctrltb1->GetDlgItem(IDC_INJECT)->EnableWindow(TRUE); m_Ctrltb2->GetDlgItem(IDC_SHOFEL2)->EnableWindow(TRUE); m_Ctrltb2->GetDlgItem(IDC_MOUNT_SD)->EnableWindow(TRUE); + m_Ctrltb2->GetDlgItem(IDC_DUMP_BISKEY)->EnableWindow(TRUE); m_Ctrltb3->GetDlgItem(ID_INSTALL_DRIVER)->EnableWindow(FALSE); + } // RCM Status = "USB Driver KO" @@ -631,6 +729,7 @@ void TegraRcm::LookUp() m_Ctrltb1->GetDlgItem(IDC_INJECT)->EnableWindow(FALSE); m_Ctrltb2->GetDlgItem(IDC_SHOFEL2)->EnableWindow(FALSE); m_Ctrltb2->GetDlgItem(IDC_MOUNT_SD)->EnableWindow(FALSE); + m_Ctrltb2->GetDlgItem(IDC_DUMP_BISKEY)->EnableWindow(FALSE); m_Ctrltb3->GetDlgItem(ID_INSTALL_DRIVER)->EnableWindow(TRUE); } // RCM Status = "RCM not detected" @@ -639,6 +738,7 @@ void TegraRcm::LookUp() m_Ctrltb1->GetDlgItem(IDC_INJECT)->EnableWindow(FALSE); m_Ctrltb2->GetDlgItem(IDC_SHOFEL2)->EnableWindow(FALSE); m_Ctrltb2->GetDlgItem(IDC_MOUNT_SD)->EnableWindow(FALSE); + m_Ctrltb2->GetDlgItem(IDC_DUMP_BISKEY)->EnableWindow(FALSE); m_Ctrltb3->GetDlgItem(ID_INSTALL_DRIVER)->EnableWindow(TRUE); // Delay Auto inject if needed if (AUTOINJECT_CURR) DELAY_AUTOINJECT = TRUE; @@ -654,6 +754,8 @@ void TegraRcm::LookUp() // Status changed to "RCM Detected" if (rc == 0) { + AppendLogBox(TEXT("RCM Device detected\r\n")); + BitmapDisplay(RCM_DETECTED); CString file; @@ -665,7 +767,7 @@ void TegraRcm::LookUp() if(AUTOINJECT_CURR) DELAY_AUTOINJECT = TRUE; else DELAY_AUTOINJECT = FALSE; } - if (DELAY_AUTOINJECT && file.GetLength() > 0) + if (DELAY_AUTOINJECT && file.GetLength() > 0 && AUTOINJECT_CURR) { BitmapDisplay(LOADING); @@ -678,7 +780,8 @@ void TegraRcm::LookUp() if (rc >= 0) { BitmapDisplay(LOADED); - SendUserMessage("Payload injected !", VALID); + //SendUserMessage("Payload injected !", VALID); + AppendLogBox(TEXT("Payload successfully injected\r\n")); if (!CmdShow) ShowTrayIconBalloon(TEXT("Payload injected"), TEXT(" "), 1000, NIIF_INFO); WAITING_RECONNECT = TRUE; } @@ -686,15 +789,19 @@ void TegraRcm::LookUp() { BitmapDisplay(LOAD_ERROR); string s = "Error while injecting payload (RC=" + std::to_string(rc) + ")"; - CString error = TEXT("Error while injecting payload"); + CString rc_str; + rc_str.Format(L"%d", rc); + CString error = TEXT("Error while injecting payload (RC=") + rc_str + TEXT(")"); if (!CmdShow) ShowTrayIconBalloon(TEXT("Error"), error, 1000, NIIF_ERROR); - SendUserMessage(s.c_str(), INVALID); + //SendUserMessage(s.c_str(), INVALID); + AppendLogBox(error); + } DELAY_AUTOINJECT = FALSE; } else { - SendUserMessage("Waiting for user action"); + SendUserMessage(labels[20].name); } } // Status changed to "RCM not detected" or "USB driver KO" @@ -704,6 +811,7 @@ void TegraRcm::LookUp() if (rc > -5) { BitmapDisplay(DRIVER_KO); + AppendLogBox(TEXT("RCM device detected but APX driver is not installed\r\n")); InstallDriver(); } else @@ -711,12 +819,15 @@ void TegraRcm::LookUp() if (LookForAPXDevice()) { BitmapDisplay(DRIVER_KO); + AppendLogBox(TEXT("RCM device detected but APX driver is not installed\r\n")); InstallDriver(); } else { BitmapDisplay(RCM_NOT_DETECTED); - if (FIRST_LOOKUP) SendUserMessage("Waiting for device in RCM mode");; + if (!FIRST_LOOKUP) AppendLogBox(TEXT("RCM device disconnected\r\n")); + else AppendLogBox(TEXT("No RCM device detected\r\n")); + if (FIRST_LOOKUP) SendUserMessage(labels[21].name); } } } @@ -733,7 +844,7 @@ void TegraRcm::LookUp() // // Smasher => TegraRcmSmash.exe calls // -int TegraRcm::Smasher(TCHAR args[]) +int TegraRcm::Smasher(TCHAR args[4096], BOOL bInheritHandles) { if (WAITING_RECONNECT) { @@ -747,11 +858,29 @@ int TegraRcm::Smasher(TCHAR args[]) } WAITING_RECONNECT = FALSE; } - + + // This should fix RC-50 issue, ! At last. + TCHAR szPath[_MAX_PATH]; + VERIFY(::GetModuleFileName(AfxGetApp()->m_hInstance, szPath, _MAX_PATH)); + CString csPathf(szPath); + int nIndex = csPathf.ReverseFind(_T('\\')); + if (nIndex > 0) csPath = csPathf.Left(nIndex); + else csPath.Empty(); + CString csPath2(csPath); + csPath.Append(TEXT(".\\TegraRcmSmash.exe ")); + TCHAR cmd[4096]; + _tcscpy_s(cmd, csPath); + lstrcat(cmd, args); + + SECURITY_ATTRIBUTES sa; sa.nLength = sizeof(sa); sa.lpSecurityDescriptor = NULL; sa.bInheritHandle = TRUE; + + TCHAR *rfile = GetAbsolutePath(TEXT("out.log"), CSIDL_APPDATA); + remove(CT2A(rfile)); + PROCESS_INFORMATION pi; STARTUPINFO si; BOOL ret = FALSE; @@ -761,20 +890,24 @@ int TegraRcm::Smasher(TCHAR args[]) si.cb = sizeof(STARTUPINFO); si.dwFlags |= STARTF_USESTDHANDLES; si.hStdInput = NULL; + if (bInheritHandles) { + HANDLE h = CreateFile(rfile, + GENERIC_WRITE, + FILE_SHARE_WRITE | FILE_SHARE_READ, + &sa, + OPEN_ALWAYS, + FILE_ATTRIBUTE_NORMAL, + NULL); + si.hStdError = h; + si.hStdOutput = h; + } - // This should fix RC-50 issue, ! At last. - TCHAR szPath[_MAX_PATH]; - VERIFY(::GetModuleFileName(AfxGetApp()->m_hInstance, szPath, _MAX_PATH)); - CString csPathf(szPath); - int nIndex = csPathf.ReverseFind(_T('\\')); - if (nIndex > 0) csPath = csPathf.Left(nIndex); - else csPath.Empty(); - csPath.Append(TEXT(".\\TegraRcmSmash.exe ")); - TCHAR cmd[MAX_PATH]; - _tcscpy_s(cmd, csPath); - lstrcat(cmd, args); - - ret = CreateProcess(NULL, cmd, NULL, NULL, FALSE, flags, NULL, NULL, &si, &pi); + CString argsStr(args); + CString msgStr(TEXT("Invoking TegraRcmSmash.exe with args : ") + argsStr + TEXT("\r\n")); + AppendLogBox(msgStr); + + + ret = CreateProcess(NULL, cmd, NULL, NULL, bInheritHandles, flags, NULL, NULL, &si, &pi); int rc = -50; if (NULL != ret) { @@ -802,8 +935,7 @@ int TegraRcm::Smasher(TCHAR args[]) CloseHandle(pi.hThread); } else { - - int lastErrorCode = GetLastError(); + int lastErrorCode = GetLastError(); LPWSTR lpMsgBuf = NULL; FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER, NULL, @@ -814,9 +946,14 @@ int TegraRcm::Smasher(TCHAR args[]) NULL); std::string MyString = CW2A(lpMsgBuf); std::string intStr = std::to_string(lastErrorCode); - AppendLog(intStr); - AppendLog(MyString); + //AppendLog(intStr); + //AppendLog(MyString); + CString CLogBuf(lpMsgBuf); + msgStr = TEXT("Error : ") + CLogBuf + TEXT("\r\n"); + } + if (bInheritHandles) { + UpdateLogBox(); } return rc; } @@ -919,7 +1056,7 @@ TCHAR* TegraRcm::GetAbsolutePath(TCHAR* relative_path, DWORD dwFlags) { // // - BOOL PORTABLE = FALSE; + BOOL PORTABLE = TRUE; // // diff --git a/TegraRcmGUI/TegraRcm.h b/TegraRcmGUI/TegraRcm.h index 403f76e..a82cc4b 100644 --- a/TegraRcmGUI/TegraRcm.h +++ b/TegraRcmGUI/TegraRcm.h @@ -17,6 +17,7 @@ #include #include "afxcmn.h" #include + #pragma comment (lib, "setupapi.lib") class TegraRcm @@ -30,6 +31,9 @@ public: int GetRcmStatus(); ULONGLONG GetDllVersion(LPCTSTR lpszDllName); TCHAR* GetAbsolutePath(TCHAR* relative_path, DWORD dwFlags); + void SetLocale(); + void AppendLogBox(CString line); + void UpdateLogBox(); string GetPreset(string param); void InstallDriver(); BOOL LookForAPXDevice(); @@ -41,7 +45,7 @@ public: void SaveFavorites(); void BitmapDisplay(int IMG); void LookUp(); - int Smasher(TCHAR args[]); + int Smasher(TCHAR args[], BOOL bInheritHandles = TRUE); char* GetRelativeFilename(char *currentDirectory, char *absoluteFilename); @@ -82,6 +86,38 @@ public: CDialog* m_Ctrltb1; CDialog* m_Ctrltb2; CDialog* m_Ctrltb3; + + struct Label { + int uid; + string name; + }; + + Label labels[23] = { + { 0, "TegraRcmGUI"}, + { 1, "No file selected" }, + { 2, "File doesn't exist" }, + { 3, "Injecting payload..." }, + { 4, "Payload injected !" }, + { 5, "Error while injecting payload" }, + { 6, "Favorite already exists" }, + { 7, "Favorite added" }, + { 8, "Favorite removed" }, + { 9, "UMS Tool injected" }, + { 10, "Linux coreboot not found in \\shofel2 dir" }, + { 11, "Kernel not found in shofel2 directory. Do you want to automatically download arch linux kernel from SoulCipher repo ?" }, + { 12, "Kernel not found" }, + { 13, "Loading coreboot. Please wait." }, + { 14, "Coreboot injected. Waiting 5s for device..." }, + { 15, "Coreboot loaded " }, + { 16, "Error" }, + { 17, "Error while loading imx_usb.exe" }, + { 18, "APX device driver is missing. Do you want to install it now ?" }, + { 19, "APX driver not found !" }, + { 20, "Waiting for user action" }, + { 21, "Waiting for device in RCM mode" }, + { 22, "Payload already injected. Are you sure you want to overwrite the stack again ?" } + }; + private: HWND m_hWnd; TegraRcmSmash m_Device; diff --git a/TegraRcmGUI/TegraRcmGUI.rc b/TegraRcmGUI/TegraRcmGUI.rc index 16c3c62..15eb8dc 100644 Binary files a/TegraRcmGUI/TegraRcmGUI.rc and b/TegraRcmGUI/TegraRcmGUI.rc differ diff --git a/TegraRcmGUI/TegraRcmGUI.vcxproj b/TegraRcmGUI/TegraRcmGUI.vcxproj index 7b6a52d..cd78887 100644 --- a/TegraRcmGUI/TegraRcmGUI.vcxproj +++ b/TegraRcmGUI/TegraRcmGUI.vcxproj @@ -253,6 +253,7 @@ + diff --git a/TegraRcmGUI/TegraRcmGUI.vcxproj.filters b/TegraRcmGUI/TegraRcmGUI.vcxproj.filters index 6d3a9e4..7426139 100644 --- a/TegraRcmGUI/TegraRcmGUI.vcxproj.filters +++ b/TegraRcmGUI/TegraRcmGUI.vcxproj.filters @@ -194,5 +194,8 @@ Resource Files + + Resource Files + \ No newline at end of file diff --git a/TegraRcmGUI/TegraRcmGUIDlg.cpp b/TegraRcmGUI/TegraRcmGUIDlg.cpp index 24bf8bf..b75794f 100644 --- a/TegraRcmGUI/TegraRcmGUIDlg.cpp +++ b/TegraRcmGUI/TegraRcmGUIDlg.cpp @@ -123,7 +123,7 @@ BOOL CTegraRcmGUIDlg::OnInitDialog() CRect rc; AfxGetMainWnd()->GetWindowRect(rc); int width = rc.Width(); - + int fontSize = width * 0.031; if (width < 400) { RCM_BITMAP0.SetBitmap(INIT_LOGO_2); @@ -144,6 +144,26 @@ BOOL CTegraRcmGUIDlg::OnInitDialog() RCM_BITMAP5.SetBitmap(LOADED); RCM_BITMAP6.SetBitmap(LOAD_ERROR); } + + // Log Box + LOGFONT lf; + /* + CEdit* pBox = (CEdit*)AfxGetMainWnd()->GetDlgItem(IDC_LOG_BOX); + CFont* old = pBox->GetFont(); + old->GetLogFont(&lf); + CFont newfont; + newfont.CreateFont(lf.lfHeight + 30, 0, lf.lfEscapement, lf.lfOrientation, lf.lfWeight, lf.lfItalic, lf.lfUnderline, lf.lfStrikeOut, lf.lfCharSet, lf.lfOutPrecision, lf.lfClipPrecision, lf.lfQuality, lf.lfPitchAndFamily, lf.lfFaceName); + pBox->SetFont(&newfont); + */ + + CEdit* pBox = (CEdit*)AfxGetMainWnd()->GetDlgItem(IDC_LOG_BOX); + + CFont *myFont = new CFont(); + myFont->CreateFont(fontSize, 0, 0, 0, FW_NORMAL, false, false, + 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, + FIXED_PITCH | FF_MODERN, _T("Verdana")); + + pBox->SetFont(myFont); // Menu @@ -168,7 +188,6 @@ BOOL CTegraRcmGUIDlg::OnInitDialog() SetIcon(m_hIcon, FALSE); // Set small icon m_TegraRcm = new TegraRcm(this); - m_TegraRcm->AppendLog("new TegraRcm()"); // Kill other running process of app @@ -204,6 +223,8 @@ BOOL CTegraRcmGUIDlg::OnInitDialog() // Start timer to check RCM status every second CTegraRcmGUIDlg::StartTimer(); + + return TRUE; } void CTegraRcmGUIDlg::OnSysCommand(UINT nID, LPARAM lParam) @@ -220,18 +241,25 @@ HBRUSH CTegraRcmGUIDlg::OnCtlColor(CDC* pDC, CWnd *pWnd, UINT nCtlColor) switch (nCtlColor) { case CTLCOLOR_STATIC: + /* if (GetDlgItem(IDC_RAJKOSTO)->GetSafeHwnd() == pWnd->GetSafeHwnd() || GetDlgItem(SEPARATOR)->GetSafeHwnd() == pWnd->GetSafeHwnd()) { pDC->SetTextColor(RGB(192, 192, 192)); pDC->SetBkMode(TRANSPARENT); return (HBRUSH)GetStockObject(NULL_BRUSH); } + */ if (GetDlgItem(INFO_LABEL)->GetSafeHwnd() == pWnd->GetSafeHwnd()) { pDC->SetBkMode(TRANSPARENT); pDC->SetTextColor(m_TegraRcm->LabelColor); return (HBRUSH) CreateSolidBrush( WhiteRGB ); } + if (GetDlgItem(IDC_LOG_BOX)->GetSafeHwnd() == pWnd->GetSafeHwnd()) + { + pDC->SetBkMode(TRANSPARENT); + return (HBRUSH)CreateSolidBrush(WhiteRGB); + } if (GetDlgItem(IDC_STATUS_BG)->GetSafeHwnd() == pWnd->GetSafeHwnd()) { return (HBRUSH)CreateSolidBrush(WhiteRGB); @@ -350,6 +378,8 @@ void CTegraRcmGUIDlg::MountCommand() if (m_TegraRcm != NULL) { DialogTab02 *pt = (DialogTab02*)m_TegraRcm->m_Ctrltb2; + CComboBox* pmyComboBox = (CComboBox*)pt->GetDlgItem(ID_UMS_COMBO); + pmyComboBox->SetCurSel(3); pt->OnBnClickedMountSd(); } } diff --git a/TegraRcmGUI/TegraRcmGUIDlg.h b/TegraRcmGUI/TegraRcmGUIDlg.h index 00108e9..ef55ac9 100644 --- a/TegraRcmGUI/TegraRcmGUIDlg.h +++ b/TegraRcmGUI/TegraRcmGUIDlg.h @@ -125,4 +125,6 @@ public: private: MyTabCtrl m_tbCtrl; TegraRcm *m_TegraRcm; +public: + afx_msg void OnEnChangeLogBox(); }; diff --git a/TegraRcmGUI/memloader/memloader_usb.bin b/TegraRcmGUI/memloader/memloader_usb.bin deleted file mode 100644 index 9153540..0000000 Binary files a/TegraRcmGUI/memloader/memloader_usb.bin and /dev/null differ diff --git a/TegraRcmGUI/resource.h b/TegraRcmGUI/resource.h index ac0dd2f..705144c 100644 Binary files a/TegraRcmGUI/resource.h and b/TegraRcmGUI/resource.h differ diff --git a/TegraRcmGUI/shofel2/imx_usb.bat b/TegraRcmGUI/shofel2/imx_usb.bat new file mode 100644 index 0000000..1c39f94 --- /dev/null +++ b/TegraRcmGUI/shofel2/imx_usb.bat @@ -0,0 +1,3 @@ +cd shofel2 +imx_usb.exe -c conf/ +ping 127.0.0.1 -n 6 > nul diff --git a/TegraRcmGUI/tools/biskeydump_usb.bin b/TegraRcmGUI/tools/biskeydump_usb.bin new file mode 100644 index 0000000..4e40938 Binary files /dev/null and b/TegraRcmGUI/tools/biskeydump_usb.bin differ diff --git a/TegraRcmGUI/tools/memloader/memloader_usb.bin b/TegraRcmGUI/tools/memloader/memloader_usb.bin new file mode 100644 index 0000000..0fbe615 Binary files /dev/null and b/TegraRcmGUI/tools/memloader/memloader_usb.bin differ diff --git a/TegraRcmGUI/memloader/u-boot.elf b/TegraRcmGUI/tools/memloader/u-boot.elf similarity index 100% rename from TegraRcmGUI/memloader/u-boot.elf rename to TegraRcmGUI/tools/memloader/u-boot.elf diff --git a/TegraRcmGUI/tools/memloader/ums_boot0.ini b/TegraRcmGUI/tools/memloader/ums_boot0.ini new file mode 100644 index 0000000..7061035 --- /dev/null +++ b/TegraRcmGUI/tools/memloader/ums_boot0.ini @@ -0,0 +1,14 @@ +[load:PH_0] +if=/u-boot.elf +skip=0x00010000 +count=0x0006e13f +dst=0x80110000 + +[load:script] +if=ums_emmc_boot0.scr.img +dst=0x80100000 + +[boot:ENTRY] +pc=0x80110000 +maxMemoryFreq=200 +pwroffHoldTime=4 diff --git a/TegraRcmGUI/tools/memloader/ums_boot1.ini b/TegraRcmGUI/tools/memloader/ums_boot1.ini new file mode 100644 index 0000000..6c93341 --- /dev/null +++ b/TegraRcmGUI/tools/memloader/ums_boot1.ini @@ -0,0 +1,14 @@ +[load:PH_0] +if=/u-boot.elf +skip=0x00010000 +count=0x0006e13f +dst=0x80110000 + +[load:script] +if=ums_emmc_boot1.scr.img +dst=0x80100000 + +[boot:ENTRY] +pc=0x80110000 +maxMemoryFreq=-1600 +pwroffHoldTime=4 diff --git a/TegraRcmGUI/tools/memloader/ums_emmc.ini b/TegraRcmGUI/tools/memloader/ums_emmc.ini new file mode 100644 index 0000000..38d6705 --- /dev/null +++ b/TegraRcmGUI/tools/memloader/ums_emmc.ini @@ -0,0 +1,13 @@ +[load:PH_0] +if=/u-boot.elf +skip=0x00010000 +count=0x0006e13f +dst=0x80110000 + +[load:script] +if=ums_emmc.scr.img +dst=0x80100000 + +[boot:ENTRY] +pc=0x80110000 +pwroffHoldTime=4 diff --git a/TegraRcmGUI/tools/memloader/ums_emmc.scr b/TegraRcmGUI/tools/memloader/ums_emmc.scr new file mode 100644 index 0000000..e444e78 --- /dev/null +++ b/TegraRcmGUI/tools/memloader/ums_emmc.scr @@ -0,0 +1 @@ +ums 1 mmc 0.0 diff --git a/TegraRcmGUI/tools/memloader/ums_emmc.scr.img b/TegraRcmGUI/tools/memloader/ums_emmc.scr.img new file mode 100644 index 0000000..83b717d Binary files /dev/null and b/TegraRcmGUI/tools/memloader/ums_emmc.scr.img differ diff --git a/TegraRcmGUI/tools/memloader/ums_emmc_boot0.scr b/TegraRcmGUI/tools/memloader/ums_emmc_boot0.scr new file mode 100644 index 0000000..577d402 --- /dev/null +++ b/TegraRcmGUI/tools/memloader/ums_emmc_boot0.scr @@ -0,0 +1 @@ +ums 1 mmc 0.1 diff --git a/TegraRcmGUI/tools/memloader/ums_emmc_boot0.scr.img b/TegraRcmGUI/tools/memloader/ums_emmc_boot0.scr.img new file mode 100644 index 0000000..e6266e5 Binary files /dev/null and b/TegraRcmGUI/tools/memloader/ums_emmc_boot0.scr.img differ diff --git a/TegraRcmGUI/tools/memloader/ums_emmc_boot1.scr b/TegraRcmGUI/tools/memloader/ums_emmc_boot1.scr new file mode 100644 index 0000000..c2f95b7 --- /dev/null +++ b/TegraRcmGUI/tools/memloader/ums_emmc_boot1.scr @@ -0,0 +1 @@ +ums 1 mmc 0.2 diff --git a/TegraRcmGUI/tools/memloader/ums_emmc_boot1.scr.img b/TegraRcmGUI/tools/memloader/ums_emmc_boot1.scr.img new file mode 100644 index 0000000..93a9dd7 Binary files /dev/null and b/TegraRcmGUI/tools/memloader/ums_emmc_boot1.scr.img differ diff --git a/TegraRcmGUI/memloader/ums_sd.ini b/TegraRcmGUI/tools/memloader/ums_sd.ini similarity index 100% rename from TegraRcmGUI/memloader/ums_sd.ini rename to TegraRcmGUI/tools/memloader/ums_sd.ini diff --git a/TegraRcmGUI/memloader/ums_sd.scr b/TegraRcmGUI/tools/memloader/ums_sd.scr similarity index 100% rename from TegraRcmGUI/memloader/ums_sd.scr rename to TegraRcmGUI/tools/memloader/ums_sd.scr diff --git a/TegraRcmGUI/memloader/ums_sd.scr.img b/TegraRcmGUI/tools/memloader/ums_sd.scr.img similarity index 100% rename from TegraRcmGUI/memloader/ums_sd.scr.img rename to TegraRcmGUI/tools/memloader/ums_sd.scr.img