Skip to content

Commit

Permalink
Fix first title launches, more minor changes
Browse files Browse the repository at this point in the history
  • Loading branch information
XorTroll committed Jan 22, 2022
1 parent 21dcf8e commit 0db7fe9
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 40 deletions.
2 changes: 1 addition & 1 deletion Atmosphere-libs
Submodule Atmosphere-libs updated 293 files
2 changes: 1 addition & 1 deletion Plutonium
Submodule Plutonium updated 52 files
+1 −1 Doxyfile
+0 −0 Example/include/MainApplication.hpp
+0 −0 Example/source/Main.cpp
+0 −0 Example/source/MainApplication.cpp
+1 −1 Plutonium/Makefile
+0 −0 Plutonium/include/pu/Plutonium
+0 −0 Plutonium/include/pu/audio/audio_Music.hpp
+0 −0 Plutonium/include/pu/audio/audio_Sfx.hpp
+0 −0 Plutonium/include/pu/pu_Macros.hpp
+0 −0 Plutonium/include/pu/pu_String.hpp
+0 −0 Plutonium/include/pu/sdl2/sdl2_Types.hpp
+0 −0 Plutonium/include/pu/sdl2/ttf_SDL_ttf.h
+0 −0 Plutonium/include/pu/ttf/ttf_Font.hpp
+0 −0 Plutonium/include/pu/ui/elm/elm_Button.hpp
+0 −0 Plutonium/include/pu/ui/elm/elm_Element.hpp
+0 −0 Plutonium/include/pu/ui/elm/elm_Image.hpp
+0 −0 Plutonium/include/pu/ui/elm/elm_Menu.hpp
+0 −0 Plutonium/include/pu/ui/elm/elm_ProgressBar.hpp
+0 −0 Plutonium/include/pu/ui/elm/elm_Rectangle.hpp
+0 −0 Plutonium/include/pu/ui/elm/elm_TextBlock.hpp
+0 −0 Plutonium/include/pu/ui/elm/elm_Toggle.hpp
+0 −0 Plutonium/include/pu/ui/extras/extras_Toast.hpp
+0 −0 Plutonium/include/pu/ui/render/render_Renderer.hpp
+0 −0 Plutonium/include/pu/ui/render/render_SDL2.hpp
+0 −0 Plutonium/include/pu/ui/ui_Application.hpp
+0 −0 Plutonium/include/pu/ui/ui_Container.hpp
+0 −0 Plutonium/include/pu/ui/ui_Dialog.hpp
+0 −0 Plutonium/include/pu/ui/ui_Layout.hpp
+0 −0 Plutonium/include/pu/ui/ui_Overlay.hpp
+0 −0 Plutonium/include/pu/ui/ui_Types.hpp
+0 −0 Plutonium/source/pu/audio/audio_Music.cpp
+0 −0 Plutonium/source/pu/audio/audio_Sfx.cpp
+0 −0 Plutonium/source/pu/pu_String.cpp
+0 −0 Plutonium/source/pu/sdl2/ttf_SDL_ttf.c
+0 −0 Plutonium/source/pu/ttf/ttf_Font.cpp
+0 −0 Plutonium/source/pu/ui/elm/elm_Button.cpp
+0 −0 Plutonium/source/pu/ui/elm/elm_Element.cpp
+0 −0 Plutonium/source/pu/ui/elm/elm_Image.cpp
+0 −0 Plutonium/source/pu/ui/elm/elm_Menu.cpp
+0 −0 Plutonium/source/pu/ui/elm/elm_ProgressBar.cpp
+0 −0 Plutonium/source/pu/ui/elm/elm_Rectangle.cpp
+0 −0 Plutonium/source/pu/ui/elm/elm_TextBlock.cpp
+0 −0 Plutonium/source/pu/ui/elm/elm_Toggle.cpp
+0 −0 Plutonium/source/pu/ui/extras/extras_Toast.cpp
+0 −0 Plutonium/source/pu/ui/render/render_Renderer.cpp
+0 −0 Plutonium/source/pu/ui/render/render_SDL2.cpp
+0 −0 Plutonium/source/pu/ui/ui_Application.cpp
+0 −0 Plutonium/source/pu/ui/ui_Container.cpp
+0 −0 Plutonium/source/pu/ui/ui_Dialog.cpp
+0 −0 Plutonium/source/pu/ui/ui_Layout.cpp
+0 −0 Plutonium/source/pu/ui/ui_Overlay.cpp
+0 −0 Plutonium/source/pu/ui/ui_Types.cpp
70 changes: 38 additions & 32 deletions uDaemon/source/Main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,22 @@
extern "C" {

extern u32 __nx_applet_type;
bool __nx_fsdev_support_cwd = false;
u32 __nx_fsdev_direntry_cache_size = 0;

// Needed by libnx's usbcomms to allocate internal buffers...

void *__libnx_alloc(size_t size) {
return operator new(size);
}

void *__libnx_aligned_alloc(size_t align, size_t size) {
return operator new(size, std::align_val_t(align));
}

void __libnx_free(void *ptr) {
return operator delete(ptr);
}

}

// Note: these are placed outside of an anonymous namespace since they are accessed by IPC
Expand Down Expand Up @@ -57,7 +70,8 @@ namespace {

constexpr size_t UsbPacketSize = RawRGBAScreenBufferSize + sizeof(UsbMode);

alignas(ams::os::MemoryPageSize) constinit u8 g_HeapBuffer[10_MB];
constexpr size_t HeapSize = 10_MB;
alignas(ams::os::MemoryPageSize) constinit u8 g_HeapBuffer[HeapSize];

}

Expand Down Expand Up @@ -116,9 +130,7 @@ namespace {
Result HandleGeneralChannel() {
AppletStorage sams_st;
R_TRY(appletPopFromGeneralChannel(&sams_st));
UL_ON_SCOPE_EXIT({
appletStorageClose(&sams_st);
});
UL_ON_SCOPE_EXIT({ appletStorageClose(&sams_st); });

os::SystemAppletMessage sams = {};
R_TRY(appletStorageRead(&sams_st, 0, &sams, sizeof(sams)));
Expand Down Expand Up @@ -173,6 +185,7 @@ namespace {
}
case os::AppletMessage::SdCardOut: {
// Power off, since uMenu's UI relies on the SD card, so trying to use uMenu without the SD is quite risky...
// TODO: handle this in a better way?
appletStartShutdownSequence();
break;
}
Expand Down Expand Up @@ -358,6 +371,7 @@ namespace {
// A valid version will always be >= 0x20000
if(g_WebAppletLaunchFlag.version > 0) {
if(!am::LibraryAppletIsActive()) {
// TODO: applet startup sound?
UL_ASSERT(am::WebAppletStart(&g_WebAppletLaunchFlag));

sth_done = true;
Expand All @@ -375,8 +389,11 @@ namespace {
}
if(g_AlbumAppletLaunchFlag) {
if(!am::LibraryAppletIsActive()) {
u8 albumflag = 2;
UL_ASSERT(am::LibraryAppletStart(AppletId_LibraryAppletPhotoViewer, 0x10000, &albumflag, sizeof(albumflag)));
const struct {
u8 album_arg;
} album_data = { AlbumLaArg_ShowAllAlbumFilesForHomeMenu };
// TODO: applet startup sound?
UL_ASSERT(am::LibraryAppletStart(AppletId_LibraryAppletPhotoViewer, 0x10000, &album_data, sizeof(album_data)));

sth_done = true;
g_AlbumAppletLaunchFlag = false;
Expand All @@ -392,26 +409,8 @@ namespace {
g_HbTargetApplicationLaunchFlag.nro_path[0] = '\0';
}
else {
/*
// Test
auto verify_buf = new (std::align_val_t(0x1000)) u8[0x100000]();
NsProgressAsyncResult async_rc;
UL_ASSERT(nsRequestVerifyApplication(&async_rc, g_ApplicationLaunchFlag, 0x7, verify_buf, 0x100000));
const auto async_rc_rc = nsProgressAsyncResultGet(&async_rc);
const auto async_rc_det_rc = nsProgressAsyncResultGetDetailResult(&async_rc);
nsProgressAsyncResultClose(&async_rc);
auto f = fopen(("sdmc:/" + std::to_string(g_ApplicationLaunchFlag) + ".verify.bin").c_str(), "wb");
if(f) {
fwrite(verify_buf, 1, 0x100000, f);
fclose(f);
}
delete[] verify_buf;
UL_ASSERT(async_rc_rc);
UL_ASSERT(async_rc_det_rc);
*/

// Ensure the application is launchable
UL_ASSERT(nsTouchApplication(g_ApplicationLaunchFlag));
UL_ASSERT(am::ApplicationStart(g_ApplicationLaunchFlag, false, g_SelectedUser));
}
sth_done = true;
Expand Down Expand Up @@ -444,9 +443,15 @@ namespace {
const auto prev_applet_active = g_AppletActive;
g_AppletActive = am::LibraryAppletIsActive();
if(!sth_done && !prev_applet_active) {
// If nothing was done, but nothing is active... An application or applet might have crashed, terminated, failed to launch...
// No matter what is it, we reopen Menu in launch-error mode.
// If nothing was done but nothing is active. an application or applet might have crashed, terminated, failed to launch...
if(!am::ApplicationIsActive() && !am::LibraryAppletIsActive()) {
// Throw the application's result if it actually ended with a result
auto terminate_rc = ResultSuccess;
if(R_SUCCEEDED(nsGetApplicationTerminateResult(am::ApplicationGetId(), &terminate_rc))) {
UL_ASSERT(terminate_rc);
}

// Reopen uMenu in launch-error mode
auto status = CreateStatus();
UL_ASSERT(LaunchMenu(dmi::MenuStartMode::MenuLaunchFailure, status));
g_HbTargetOpenedAsApplication = false;
Expand Down Expand Up @@ -560,14 +565,15 @@ namespace ams {

fsdevMountSdmc();

// TODO: disabling this doesn't really avoid ams aborting with new fws, shall we try to avoid that in a different way?
/* ams::CheckApiVersion(); */
}

void FinalizeSystemModule() { /* ... */ }
void FinalizeSystemModule() {}

void Startup() {
/* Initialize the global malloc allocator. */
init::InitializeAllocator(g_HeapBuffer, sizeof(g_HeapBuffer));
// Initialize the global malloc-free/new-delete allocator
init::InitializeAllocator(g_HeapBuffer, HeapSize);
}

}
Expand Down
10 changes: 5 additions & 5 deletions uLaunch/source/am/am_LibraryApplet.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -68,10 +68,10 @@ namespace am {
LibraryAppletTerminate();
}
appletHolderClose(&g_AppletHolder);
LibAppletArgs largs;
libappletArgsCreate(&largs, la_version);
LibAppletArgs la_args;
libappletArgsCreate(&la_args, la_version);
R_TRY(appletCreateLibraryApplet(&g_AppletHolder, id, LibAppletMode_AllForeground));
R_TRY(libappletArgsPush(&largs, &g_AppletHolder));
R_TRY(libappletArgsPush(&la_args, &g_AppletHolder));
if(in_size > 0) {
R_TRY(LibraryAppletSend(in_data, in_size));
}
Expand Down Expand Up @@ -119,10 +119,10 @@ namespace am {
}

AppletId LibraryAppletGetId() {
auto idcopy = g_LastAppletId;
auto last_id_copy = g_LastAppletId;
if(!LibraryAppletIsActive()) {
g_LastAppletId = AppletId_None;
}
return idcopy;
return last_id_copy;
}
}
2 changes: 1 addition & 1 deletion uMenu/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ EXEFS_SRC := exefs_src
#---------------------------------------------------------------------------------
# options for code generation
#---------------------------------------------------------------------------------
ARCH := -march=armv8-a -mtune=cortex-a57 -mtp=soft -fPIE $(UL_APM_WRAPS) -Wl,-wrap,libappletStart -Wl,-wrap,libappletLaunch
ARCH := -march=armv8-a -mtune=cortex-a57 -mtp=soft -fPIE -Wl,-wrap,libappletStart -Wl,-wrap,libappletLaunch

CFLAGS := -g -Wall -O2 -ffunction-sections \
$(ARCH) $(DEFINES)
Expand Down

0 comments on commit 0db7fe9

Please sign in to comment.